<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Программист</title>
	<atom:link href="https://programmer.com.ua/feed/" rel="self" type="application/rss+xml" />
	<link>https://programmer.com.ua</link>
	<description>еще немного слов про 1С</description>
	<lastBuildDate>Thu, 28 Aug 2025 10:57:58 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.5</generator>

<image>
	<url>https://programmer.com.ua/wp-content/uploads/2025/02/cropped-icon-512-32x32.png</url>
	<title>Программист</title>
	<link>https://programmer.com.ua</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>OpenCart API</title>
		<link>https://programmer.com.ua/2025/03/opencart-api/</link>
					<comments>https://programmer.com.ua/2025/03/opencart-api/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Tue, 25 Mar 2025 13:37:48 +0000</pubDate>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[opencart]]></category>
		<category><![CDATA[REST]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2709</guid>

					<description><![CDATA[Недавно, в новом проекте, снова понадобилось стыковать базу 1С с сайтом на OpenCart. Когда то давно, такие стыковки я делал через прямые запросы в базу &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>Недавно, в новом проекте, снова понадобилось стыковать базу 1С с сайтом на OpenCart. Когда то давно, такие стыковки я делал через прямые запросы в базу данных сайта. Сейчас это уже не модно и, тем более, у движка есть свой API. Однако, когда пришлось несколько доработать обмен, я увидел, что из себя представляет код на PHP и понял, что не смогу с ним совладать. По этому, просто взял и написал свой сервис. Ну, обычно, программеры так и делают.</p>



<p>На сегодня уже готов обмен данными товаров и категорий, в ближайших планах &#8212; получение заказов. Сервис написан на Go, ставится на сервер, рядом с сайтом. У сервиса настраивается доступ к базе данных OpenCart и порт на котором он слушает запросы. Авторизация возможна через токен, который вписывается в конфиг, или через токен, который настраивается в самом OpenCart &#8212; в админке, в разделе настроек API.</p>



<p>Из плюсов, которые я вижу в сравнении с родным API: скорость работы, сервис отделен от сайта и не грузит Апач, или на чем крутится сайт, данные валидируются и, если что-то не так, приходит ошибка, о результате загрузки приходит статус &#8212; успех или нет, текст ошибки, если она есть.</p>



<p>Подробное описание методов есть в <a href="https://github.com/ruslan-hut/ocapi">репозитории,</a> сам код открыт и его можно использовать для своих проектов, если нужно.</p>



<p>Из необычного, что добавил &#8212; отдельный эндпоинт, которым можно сделать выборку данных из произвольной таблицы. В метод передается имя таблицы и, если нужно, условие фильтра. В ответ приходит массив с записями. Это удобно для контроля данных, можно проверить, что и как обновилось и в какие таблицы, что записано.</p>



<p>Ссылка на GitHub: https://github.com/ruslan-hut/ocapi</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2025/03/opencart-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Сканер штрих-кода</title>
		<link>https://programmer.com.ua/2025/03/skaner-shtrih-koda/</link>
					<comments>https://programmer.com.ua/2025/03/skaner-shtrih-koda/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Sat, 01 Mar 2025 12:52:31 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[кодинг]]></category>
		<category><![CDATA[сканер]]></category>
		<category><![CDATA[штрих-код]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2701</guid>

					<description><![CDATA[В последнем обновлении приложения QR сканер, кроме очередного обновления используемых библиотек, добавил броадкаст события в системе. Это значит, что если вы в другом приложении подпишетесь &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>В последнем обновлении приложения QR сканер, кроме очередного обновления используемых библиотек, добавил броадкаст события в системе. Это значит, что если вы в другом приложении подпишетесь на системное событие, можете получить считанный штрихкод. Таким образом, нет необходимости реализовывать у себя модуль для считывания, а можно использовать это приложение как внешний сканер.</p>



<p>Событие, на которое нужно подписаться: <strong>ua.com.programmer.qrscanner.BARCODE_SCANNED</strong></p>



<p>Пример того, как выглядит получение данных по подписке на событие:</p>



<pre class="wp-block-code"><code>class BarcodeReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == "ua.com.programmer.qrscanner.BARCODE_SCANNED") {
            val barcodeValue = intent.getStringExtra("BARCODE_VALUE")
            val barcodeFormat = intent.getStringExtra("BARCODE_FORMAT")
            // Handle the received barcode data
            Toast.makeText(context, "Scanned: $barcodeValue ($barcodeFormat)", Toast.LENGTH_LONG).show()
        }
    }
}</code></pre>



<p>Чтобы событие пришло, в манифесте нужно оформить подписку:</p>



<pre class="wp-block-code"><code>&lt;receiver android:name=".BarcodeReceiver">
    &lt;intent-filter>
        &lt;action android:name="ua.com.programmer.qrscanner.BARCODE_SCANNED" />
    &lt;/intent-filter>
&lt;/receiver></code></pre>



<p>Напоминаю, что такое QR сканер: приложение открывает при запуске экран камеры и ищет в кадре штрих-коды, QR коды и прочие форматы. Анализ изображения делает Google ML-kit, это библиотека с машинным обучением, какая то часть библиотеки тренируется на входящих данных, то есть, в теории, считывание однотипных данных должно со временем улучшаться. Побочный эфект использования ML &#8212;  хорошие результаты получаются на хорошем железе, слабый телефон может туго соображать.</p>



<p>Ссылка на приложение на маркете: <a href="https://play.google.com/store/apps/details?id=ua.com.programmer.qrscanner">QR сканер</a>.</p>



<p>Код приложения открыт, можно использовать его как пример реализации сканера в своем приложении. Репозиторий приложения: <a href="https://github.com/ruslan-hut/QRScan">https://github.com/ruslan-hut/QRScan</a></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2025/03/skaner-shtrih-koda/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Уведомления в Telegram из 1С</title>
		<link>https://programmer.com.ua/2025/02/uvedomleniya-v-telegram-iz-1s/</link>
					<comments>https://programmer.com.ua/2025/02/uvedomleniya-v-telegram-iz-1s/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Fri, 28 Feb 2025 14:59:02 +0000</pubDate>
				<category><![CDATA[Программы]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[7.7]]></category>
		<category><![CDATA[8.1]]></category>
		<category><![CDATA[8.2]]></category>
		<category><![CDATA[8.3]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[кодинг]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2685</guid>

					<description><![CDATA[Создал сервис, который позволяет легко отправлять уведомления в Telegram напрямую из 1С. Для работы требуется лишь отправить POST-запрос с телом сообщения, что делает его максимально &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>Создал сервис, который позволяет легко отправлять уведомления в Telegram напрямую из 1С. Для работы требуется лишь отправить POST-запрос с телом сообщения, что делает его максимально универсальным. Минимальные требования к платформе позволяют использовать решение даже в 1С:Предприятие 7.7.</p>



<p>Как это работает?</p>



<p>Основная идея проста: сервис взаимодействует с Telegram и имеет собственный API к которому может обращаться 1С, может быть развернут локально или в облаке. Главное отличие от реализации рассылки непосредственно в конфигурации 1С &#8212; это возможность обращаться к сервису из нескольких баз. То есть несколько независимых источников могут делать рассылку в одного и того же бота в Телеграм. При этом управление пользователями, подписка-отписка &#8212; на стороне сервиса. Алгоритм работы:</p>



<ul class="wp-block-list">
<li>В 1С формируется сообщение, которое нужно отправить.</li>



<li>POST-запросом передает его в API сервиса.</li>



<li>Сервис автоматически отправляет уведомление через Telegram-бота подписчикам.</li>
</ul>



<p>Ключевые особенности:</p>



<ul class="wp-block-list">
<li>Минимальные требования — сервис не требует сложной интеграции.</li>



<li>Поддержка всех версий 1С — работает даже на старых конфигурациях (например, 7.7).</li>



<li>Гибкость развертывания — можно запустить на любой ОС (Windows, Linux, macOS).</li>



<li>Низкая нагрузка на систему — сервис написан на Go, что обеспечивает высокую производительность.</li>



<li>Безопасность — отправка сообщений осуществляется с авторизацией по токену.</li>
</ul>



<p>Возможности применения:</p>



<ul class="wp-block-list">
<li>Оповещения об ошибках и сбоях: сервис может автоматически отправлять уведомления об ошибках в журнале событий 1С в Telegram.</li>



<li>Сообщения пользователям: можно использовать для рассылки важных уведомлений сотрудникам.</li>



<li>Оповещения о статусе заказов, платежей и других событиях в бизнес-процессах.</li>



<li>На что еще хватит фантазии.</li>
</ul>



<p>Возможный недостаток, который вижу сейчас, это использование отдельной базы данных. Есть идеи реализовать обратные вызовы в базу 1С для организации списка подписчиков. Тогда и управлять пользователями можно будет прямо из базы.</p>



<p>Репозиторий проекта на GitHub: <a href="https://github.com/ruslan-hut/mittere">https://github.com/ruslan-hut/mittere</a></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2025/02/uvedomleniya-v-telegram-iz-1s/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Multipart это просто</title>
		<link>https://programmer.com.ua/2025/01/multipart-eto-prosto/</link>
					<comments>https://programmer.com.ua/2025/01/multipart-eto-prosto/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Tue, 07 Jan 2025 15:30:07 +0000</pubDate>
				<category><![CDATA[1С 8.3]]></category>
		<category><![CDATA[Работа с конфигуратором]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[кодинг]]></category>
		<category><![CDATA[Поддержка]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2676</guid>

					<description><![CDATA[Недавно пришлось добавить авторизацию в сервисе, который принимает данные в виде form-data. Попробовал найти какую-то инструкцию, но ничего связного, в одном месте, не нашел. Так &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>Недавно пришлось добавить авторизацию в сервисе, который принимает данные в виде form-data. Попробовал найти какую-то инструкцию, но ничего связного, в одном месте, не нашел. Так что, как обычно, записываю шпаргалку. Как из 1С отправить Post запрос с данными в формате multipart/form-data, или &#171;данные формы&#187;.</p>



<p>Последовательность действий такая:</p>



<ul class="wp-block-list">
<li>сгенерировать код который будет использоваться как граница блоков данных, boundary; разделитель будет состоять из двух тире, префикса и этого кода</li>



<li>данные &#8212; пары ключ-значение, записать в тело, разделяя строками с разделителем, внутри блока данных записывается имя данных и, через пустую строку, значение</li>



<li>последний разделитель записать с добавлением двух тире в конце</li>



<li>посчитать размер тела и сформировать заголовки, в заголовке нужно указать код, сгенерированный на первом шаге</li>



<li>отправить запрос</li>
</ul>



<p>Теперь то же самое, в виде кода:</p>



<pre class="wp-block-code"><code>Function PostFormData(Conn, Path, Data, StatusCode=0, Err=Undefined) Export
	
	Err = Undefined;

	StatusCode = 0;
	
	If TypeOf(Data) &lt;> Type("Structure") Then
			
		Err = "Unsupported form data for POST request";
		Return "";
	
	EndIf;
	
	Boundary = "Boundary" + StrReplace(String(New UUID()), "-", "");
	Splitter = "--" + Boundary;
	
	Body = New MemoryStream();
	Writer = New DataWriter(Body);
	For Each Param In Data Do
	
		Writer.WriteLine(Splitter);
		Writer.WriteLine("Content-Disposition: form-data; name=""" + Param.Key + """");
		Writer.WriteLine("");
		Writer.WriteLine(Param.Value);
	
	EndDo; 
	Writer.WriteLine("" + Splitter + "--");
	
	Writer.Close();
	Size = Format(Body.Size(), "NG=0");
	
	BinaryData = Body.CloseAndGetBinaryData();
	
	Headers = New Map;
	Headers.Insert("Content-Type", "multipart/form-data; boundary=" + Boundary);
	Headers.Insert("Content-Length", Size);
	
	Req = New HTTPRequest(Path, Headers);
	Req.SetBodyFromBinaryData(BinaryData);
		
	Try
	
		Resp = Conn.POST(Req);
	
	Except
		
		Err = ""+Path+": "+BriefErrorDescription(ErrorInfo());
		Return "";
	
	EndTry;
	
	StatusCode = Resp.StatusCode;
	
	Return Resp.GetBodyAsString();

EndFunction // PostFormData()
</code></pre>



<p>Функция принимает объект HTTPСоединение, путь и данные в виде структуры. Переменные StatusCode и Err нужны чтобы вернуть статус ответа и ошибку если что то пошло не так. Генерируется код на основании которого составляется разделитель Splitter, затем, с помощью объекта MemoryStream (ПотокВПамяти) записывается тело запроса.</p>



<p>В 1С 7.7 такого простого способа нет. Когда мне это было нужно, я добавил отправку мультипарт данных через вспомогательное внешнее приложение (<a href="https://programmer.com.ua/2023/10/zapros-k-api-iz-1s-7-7/">ссылка</a>).</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2025/01/multipart-eto-prosto/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Запрос к API из 1С 7.7</title>
		<link>https://programmer.com.ua/2023/10/zapros-k-api-iz-1s-7-7/</link>
					<comments>https://programmer.com.ua/2023/10/zapros-k-api-iz-1s-7-7/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Thu, 19 Oct 2023 10:26:51 +0000</pubDate>
				<category><![CDATA[Программы]]></category>
		<category><![CDATA[7.7]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2637</guid>

					<description><![CDATA[В то время как остальные программы уже всё могут, 1С 7.7 не может нормально выполнить http запрос. И тут больше проблема не в запросе как &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>В то время как остальные программы уже всё могут, 1С 7.7 не может нормально выполнить http запрос. И тут больше проблема не в запросе как таковом, а в подготовке данных и анализе полученного. Современные API, как правило, работают с данными в виде JSON в кодировке utf8. Ни то ни другое семерка не умеет делать без костылей. Вот для решения этих двух проблем в одном действии, родилась идея перенести эту часть на ту программу, для которой это не составляет труда. Я набросал небольшой проект на Go, <a href="https://github.com/ruslan-hut/apiCall">исходный код доступен на GitHub</a> и там же доступен скомпилированный под Windows бинарник.</p>



<p>Принцип работы простой. Нужно положить рядом с программой конфиг, в котором один параметр: base_url, это корневой адрес сервера куда будем делать запрос. При запуске нужно указать два ключа: url и method, это адрес ресурса и имя метода. Программа выполнит запрос, полученные данные пересоберет в CSV и значения перекодирует в кодировку Windows-1251, результат будет сохранен в файл output.csv. Чтобы отправить что-то, нужно перед запуском сформировать CSV в вин-кодировке и положить в файл с именем input.csv рядом с программой. При выполнении POST или PUT запроса, файл будет преобразован в JSON, utf8 и передан на сервер.</p>



<pre class="wp-block-code"><code>// пример выполнения POST запроса
call.exe -url=api/1c/product -method=POST

// для выполнения GET запроса параметр method можно не указывать
call.exe -url=api/1c/catalog</code></pre>



<p>Если нужна авторизация, поддерживается Bearer токен, в заголовке запроса. Токен нужно добавить в конфигурацию &#8212; параметр bearer_token. Пример файла конфигурации и запросов есть в репозитории на GitHub.</p>



<p>Вот и все. Напомню, что по стандарту CSV должен содержать первую строку с именами полей, дальше строки с элементами данных. Ну и на текущей стадии это не совсем универсальное решение, я его использую на конкретном API и, может, не учитываю каких-то нюансов. Если это еще кому-то пригодится и будут идеи, пишите.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2023/10/zapros-k-api-iz-1s-7-7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка подключения к серверу</title>
		<link>https://programmer.com.ua/2023/09/nastrojka-podklyucheniya-k-serveru/</link>
					<comments>https://programmer.com.ua/2023/09/nastrojka-podklyucheniya-k-serveru/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Mon, 25 Sep 2023 12:14:28 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[агент]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2610</guid>

					<description><![CDATA[Небольшая памятка о настройке подключения к серверу в программе Агент. Доступ к настройкам через навигационное меню &#8212; шторку, слева, пункт &#171;Сервер данных&#187;. В открывшемся окне &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>Небольшая памятка о настройке подключения к серверу в программе <a href="https://play.google.com/store/apps/details?id=ua.com.programmer.agentventa">Агент</a>. Доступ к настройкам через навигационное меню &#8212; шторку, слева, пункт &#171;Сервер данных&#187;. В открывшемся окне виден список настроек, текущая настройка обозначена зеленой точкой. Для добавления, нужно нажать кнопку + внизу, а для изменения набора из списка нужно нажать на карточку и подержать. В окне настроек можно указать следующие параметры:</p>



<ul class="wp-block-list">
<li> <strong>Наименование</strong>: произвольное название настроек, оно будет видно в заголовке меню и при выполенении обмена данными.</li>



<li><strong>Тип подключения</strong>: HTTP service для работы по HTTP или HTTPS протоколу.</li>



<li><strong>Адрес сервера</strong>: IP адрес или имя сервера. </li>



<li><strong>Имя базы данных</strong>: имя под которым база данных опубликована на веб-сервере.</li>



<li><strong>Имя пользователя</strong>: имя пользователя для авторизации на веб-сервере.</li>



<li><strong>Пароль</strong>: пароль для авторизации на веб-сервере.</li>
</ul>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://programmer.com.ua/wp-content/uploads/2023/09/image-1.png"><img fetchpriority="high" decoding="async" width="483" height="1024" data-id="2612" src="https://programmer.com.ua/wp-content/uploads/2023/09/image-1-483x1024.png" alt="" class="wp-image-2612" srcset="https://programmer.com.ua/wp-content/uploads/2023/09/image-1-483x1024.png 483w, https://programmer.com.ua/wp-content/uploads/2023/09/image-1-141x300.png 141w, https://programmer.com.ua/wp-content/uploads/2023/09/image-1-768x1629.png 768w, https://programmer.com.ua/wp-content/uploads/2023/09/image-1-724x1536.png 724w, https://programmer.com.ua/wp-content/uploads/2023/09/image-1-966x2048.png 966w, https://programmer.com.ua/wp-content/uploads/2023/09/image-1.png 1178w" sizes="(max-width: 483px) 100vw, 483px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://programmer.com.ua/wp-content/uploads/2023/09/Screenshot_20230925_114020.png"><img decoding="async" width="483" height="1024" data-id="2613" src="https://programmer.com.ua/wp-content/uploads/2023/09/Screenshot_20230925_114020-483x1024.png" alt="" class="wp-image-2613" srcset="https://programmer.com.ua/wp-content/uploads/2023/09/Screenshot_20230925_114020-483x1024.png 483w, https://programmer.com.ua/wp-content/uploads/2023/09/Screenshot_20230925_114020-141x300.png 141w, https://programmer.com.ua/wp-content/uploads/2023/09/Screenshot_20230925_114020-768x1629.png 768w, https://programmer.com.ua/wp-content/uploads/2023/09/Screenshot_20230925_114020-724x1536.png 724w, https://programmer.com.ua/wp-content/uploads/2023/09/Screenshot_20230925_114020-966x2048.png 966w, https://programmer.com.ua/wp-content/uploads/2023/09/Screenshot_20230925_114020.png 1178w" sizes="(max-width: 483px) 100vw, 483px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://programmer.com.ua/wp-content/uploads/2023/09/image.png"><img decoding="async" width="483" height="1024" data-id="2611" src="https://programmer.com.ua/wp-content/uploads/2023/09/image-483x1024.png" alt="" class="wp-image-2611" srcset="https://programmer.com.ua/wp-content/uploads/2023/09/image-483x1024.png 483w, https://programmer.com.ua/wp-content/uploads/2023/09/image-141x300.png 141w, https://programmer.com.ua/wp-content/uploads/2023/09/image-768x1629.png 768w, https://programmer.com.ua/wp-content/uploads/2023/09/image-724x1536.png 724w, https://programmer.com.ua/wp-content/uploads/2023/09/image-966x2048.png 966w, https://programmer.com.ua/wp-content/uploads/2023/09/image.png 1178w" sizes="(max-width: 483px) 100vw, 483px" /></a></figure>
</figure>



<p>Если сервером базы данных выступает 1С, именем пользователя и паролем будут учетные данные пользователя для входа в базу 1С. В общем случае с помощью указанных имени-пароля выполняется Basic-авторизация. Если для доступа к серверу авторизация не нужна, имя и пароль нужно оставить пустыми.</p>



<p>Для подключения по протоколу HTTPS нужно указать протокол в адресной строке, а если используется нестандартный порт, его тоже нужно указать в строке адреса:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;my.test.server:8000</code></pre>



<p>Также возможно указать полный путь к публикации, например:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;my.test.server:8000/db/base</code></pre>



<p>в таком случае &#171;Имя базы данных&#187; нужно оставить пустым.</p>



<p>В окне ввода настроек, внизу, можно увидеть поля с идентификатором устройства и номером лицензии. Идентификатор генерируется на телефоне и используется в  обмене для идентификации устройства по которому происходит обмен данными. Номер лицензии передается с сервера, по этому при первой настройке это поле пустое. Оба поля могут быть скопированы в буфер долгим нажатием на значение. Это может пригодиться при настройке подключения, чтобы сообщить администратору сервера идентификатор своего телефона.</p>



<p class="has-light-green-cyan-background-color has-background">При первом запуске программы в список автоматически добавляются настройки демо-подключения к тестовому серверу, для работы со своим рабочим сервером нужно <strong>добавить новый набор настроек</strong>. </p>



<p class="has-white-color has-vivid-red-background-color has-text-color has-background">Важно помнить, что идентификатор устройства используется в программе для фильтра при работе с данными &#8212; справочниками, документами. По этому при удалении настроек из памяти телефона будут удалены все связанные с этими настройками данные. После удаления идентификатора доступ к ранее введенным документам станет невозможным.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2023/09/nastrojka-podklyucheniya-k-serveru/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Оформление фискального чека</title>
		<link>https://programmer.com.ua/2023/09/oformlenie-fiskalnogo-cheka/</link>
					<comments>https://programmer.com.ua/2023/09/oformlenie-fiskalnogo-cheka/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Sat, 16 Sep 2023 19:10:15 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[агент]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2601</guid>

					<description><![CDATA[В приложении Агент добавлена поддержка работы с сервисами фискализации чеков. Введенный заказ можно зарегистрировать как фискальный чек и сразу получить на телефоне копию чека. В &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>В приложении Агент добавлена поддержка работы с сервисами фискализации чеков. Введенный заказ можно зарегистрировать как фискальный чек и сразу получить на телефоне копию чека. В текущей версии реализована работа с Checkbox, в будущем возможна интеграция и других сервисов, имеющих возможность интеграции через АПИ.</p>



<p>Работа с сервисом фискализации на телефоне напоминает работу с кассовым аппаратом в базе 1С &#8212; в отдельной форме собраны команды управления РРО: вход кассира, открытие смены, служебные внос и вынос и так далее. В документе Заказ включение регистрации чека происходит при выборе типа расчетов, если для типа расчетов указан фискальный режим, при сохранении заказа выполнится фискализация. </p>



<p>Чеки, оформленные на телефоне можно просматривать и получать копии, для этого добавлен новый пункт в меню заказа &#8212; Просмотр чека. Стандартными средствами телефона можно отправить копию чека через мессенджер или электронную почту.</p>



<p>Немного технических подробностей. При обмене, от сервера, Агент должен получить в составе опций новые параметры:</p>



<ul class="wp-block-list">
<li>fiscalNumber &#8212; фискальный номер, для Чекбокса это номер лицензии кассы с которой будет работать телефон</li>



<li>fiscalCashier &#8212; номер кассира, для Чекбокса &#8212; пин код кассира</li>



<li>fiscalDeviceId &#8212; идентификатор устройства, должен быть уникальным для каждой кассы</li>



<li>fiscalProvider &#8212; идентификатор сервиса фискализации, в текущей версии возможено только значение &#171;Checkbox&#187;</li>
</ul>



<p>Кроме этих параметров добавлен новый набор данных &#8212; paymen_types, он содержит записи с доступными для пользователя типами оплаты. Тип оплаты это объект со следующими полями:</p>



<ul class="wp-block-list">
<li>payment_type &#8212; код типа оплаты, для наличного расчета должен начинаться с &#171;CASH&#187;, все другие будут считаться безналичными при регистации чека</li>



<li>is_fiscal &#8212; 1 или 0, признак необходимости регистрации фискального чека</li>



<li>is_default &#8212; 1 или 0,  тип оплаты по умолчанию для нового документа</li>



<li>description &#8212; строковое представление для пользователя</li>
</ul>



<p>При оформлении заказа пользователь выбирает тип оплаты и если для него установлен признак фискальный, при сохранении заказа происходит попытка регистрации фискального чека. В заказе при сохранении также устанавливается признак is_fiscal=1, этот признак передается в данных заказа на сервер.</p>



<p>Формируемые чеки и отчеты запрашиваются из сервиса в виде файлов изображений PNG и при получении выводятся на просмотр стандартными средствами телефона, например через Галерею Google фото.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2023/09/oformlenie-fiskalnogo-cheka/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Печать документа в мобильном приложении</title>
		<link>https://programmer.com.ua/2022/09/pechat-dokumenta-v-mobilnom-prilozhenii/</link>
					<comments>https://programmer.com.ua/2022/09/pechat-dokumenta-v-mobilnom-prilozhenii/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Wed, 07 Sep 2022 11:24:28 +0000</pubDate>
				<category><![CDATA[1С 8.3]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Простой учет]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[кодинг]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2553</guid>

					<description><![CDATA[Возникла необходимость печатать документы из мобильного приложения, но, по требованию заказчика, печатная форма должна быть точно той-же, которая используется в базе 1С. В итоге родилось &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>Возникла необходимость печатать документы из мобильного приложения, но, по требованию заказчика, печатная форма должна быть точно той-же, которая используется в базе 1С. В итоге родилось такое решение: телефон присылает запрос с указанием идентификатора документа, 1С формирует печатный документ, сохраняет его в виде PDF файла и этот файл отправляет назад на телефон, где файл можно просматривать, пересылать кому-нибудь и, если есть возможность, печатать.</p>



<p>Расскажу из чего состоит реализация на стороне 1С. </p>



<p>В HTTP сервис нужно добавить новый шаблон, например &#171;/print/{documentId}&#187;, по такому пути телефон будет запрашивать печатную форму и передавать идентификатор документа. </p>



<p>По полученному идентификатору необходимо найти документ и вызвать стандартную процедуру печати &#8212; сформировать табличный документ. Здесь, при необходимости, можно предусмотреть печать какой-то определённой печатной формы, например с наложенным изображением подписи-печати. Табличный документ теперь можно сохранить в виде временного файла, файл преобразовать в текст с помощью кодировки Base64 и этот текст вставить в поле JSON ответа. Вот пример кода, основные операции выделены рамкой.</p>



<figure class="wp-block-image size-full"><a href="https://programmer.com.ua/wp-content/uploads/2022/09/Znimok-ekrana-2022-09-07-o-12.41.26.png"><img loading="lazy" decoding="async" width="778" height="765" src="https://programmer.com.ua/wp-content/uploads/2022/09/Znimok-ekrana-2022-09-07-o-12.41.26.png" alt="" class="wp-image-2554" srcset="https://programmer.com.ua/wp-content/uploads/2022/09/Znimok-ekrana-2022-09-07-o-12.41.26.png 778w, https://programmer.com.ua/wp-content/uploads/2022/09/Znimok-ekrana-2022-09-07-o-12.41.26-300x295.png 300w, https://programmer.com.ua/wp-content/uploads/2022/09/Znimok-ekrana-2022-09-07-o-12.41.26-768x755.png 768w" sizes="auto, (max-width: 778px) 100vw, 778px" /></a><figcaption class="wp-element-caption">Пример кода формирования файла печати и преобразования его в кодировку Base64</figcaption></figure>



<p>В этом примере Результат &#8212; это структура, которая затем преобразуется в JSON и передается в ответ на запрос от телефона.</p>



<p>Это пример ответа, который, в качестве теста, легко запросить через обычный браузер:</p>



<figure class="wp-block-image size-full"><a href="https://programmer.com.ua/wp-content/uploads/2022/09/Znimok-ekrana-2022-09-07-o-12.57.17.png"><img loading="lazy" decoding="async" width="510" height="226" src="https://programmer.com.ua/wp-content/uploads/2022/09/Znimok-ekrana-2022-09-07-o-12.57.17.png" alt="" class="wp-image-2556" srcset="https://programmer.com.ua/wp-content/uploads/2022/09/Znimok-ekrana-2022-09-07-o-12.57.17.png 510w, https://programmer.com.ua/wp-content/uploads/2022/09/Znimok-ekrana-2022-09-07-o-12.57.17-300x133.png 300w" sizes="auto, (max-width: 510px) 100vw, 510px" /></a><figcaption class="wp-element-caption">Пример содержания ответа с данными печатной формы документа</figcaption></figure>



<p>Полученные на телефоне данные файла легко преобразуются назад, в обычный файл, стандартными библиотеками. Приведенный пример кода работает в конфигурации <a href="https://programmer.com.ua/opisanie/" target="_blank" rel="noreferrer noopener">Простой учет</a>, посмотреть, как это работает на практике, можно в приложении <a href="https://play.google.com/store/apps/details?id=ua.com.programmer.agent" target="_blank" rel="noreferrer noopener">Агент</a>, в документе Заказ добавлена кнопка меню &#171;Печать&#187;.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2022/09/pechat-dokumenta-v-mobilnom-prilozhenii/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Агент: загрузка изменений</title>
		<link>https://programmer.com.ua/2021/06/agent-zagruzka-izmenenij/</link>
					<comments>https://programmer.com.ua/2021/06/agent-zagruzka-izmenenij/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Tue, 22 Jun 2021 09:06:22 +0000</pubDate>
				<category><![CDATA[1С 8.3]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Простой учет]]></category>
		<category><![CDATA[агент]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2501</guid>

					<description><![CDATA[В программе Агент, начиная с версии 2.0.6701, добавлена поддержка обмена в режиме &#171;Только изменения&#187;. Для работы этой функции нужно на стороне сервера реализовать отслеживание изменений &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>В программе Агент, начиная с версии 2.0.6701, добавлена поддержка обмена в режиме &#171;Только изменения&#187;. Для работы этой функции нужно на стороне сервера реализовать отслеживание изменений в данных и передавать их при получении запроса от Агента. Удобнее всего использовать стандартный механизм, доступный в платформе 1С &#8212; планы обмена. Например, в конфигурации &#171;Простой учет&#187;, для этого создан план обмена &#171;Обмен с мобильным приложением&#187;, в состав которого добавлены справочники: Товары, Контрагенты и регистры: Цены товаров, Взаиморасчеты, Остатки товаров. Благодаря этому при отправке документа, Агент получает назад обновленные сведения об остатках и взаиморасчетах, при этом объем передаваемых данных минимален. </p>



<p>Чтобы обмен изменениями работал, необходимо следующее: </p>



<ul class="wp-block-list"><li>в составе опций передать на устройство параметр <strong>differentialUpdates = true</strong></li><li>при поступлении от Агента запроса <strong>get </strong>с типом данных <strong>diff </strong>сформировать и отправить данные с изменениями</li></ul>



<p>Для данных с изменениями поддерживается пакетная передача, если за один раз передаются не все данные, нужно передать параметр more=[НомерЭлемента], где НомерЭлемента больше нуля и будет добавлен к следующему запросу от устройства.</p>



<p>Формат передаваемых данных полностью идентичен формату при обычной передаче, данные разного типа можно произвольно смешивать &#8212; передавать в одном пакете любой набор элементов.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2021/06/agent-zagruzka-izmenenij/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Объединенный отчет ЕСВ и 1ДФ</title>
		<link>https://programmer.com.ua/2021/05/obedinennyj-otchet-esv-i-1df/</link>
					<comments>https://programmer.com.ua/2021/05/obedinennyj-otchet-esv-i-1df/#respond</comments>
		
		<dc:creator><![CDATA[Руслан Хут]]></dc:creator>
		<pubDate>Thu, 06 May 2021 06:17:32 +0000</pubDate>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[7.7]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[бухучет]]></category>
		<category><![CDATA[отчеты]]></category>
		<guid isPermaLink="false">https://programmer.com.ua/?p=2487</guid>

					<description><![CDATA[Обработка поможет вам с подачей новго объединенного отчета если для учета вы используете конфигурацию &#171;Бухгалтерский учет для Украины&#187; или &#171;Производство+Услуги+Бухгалтерия для Украины&#187; в 1С версии &#8230; ]]></description>
										<content:encoded><![CDATA[
<p>Обработка поможет вам с подачей новго объединенного отчета если для учета вы используете конфигурацию &#171;Бухгалтерский учет для Украины&#187; или &#171;Производство+Услуги+Бухгалтерия для Украины&#187; в 1С версии 7.7. Сформированные в обработке XML файлы можно загрузить в кабинет плательщика, на сайте налоговой, или в любую программу для сдачи отчетности, например Медок или Соната.</p>



<p>Обратите внимание, что в обработке выгружаются только сведения об основных начислениях, нет данных о начисленных больничных или отпускных, нет выплат частным предпринимателям в форме 1ДФ. Эти данные можно добавить вручную перед сдачей отчета.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>02.02.2023: Выгрузка файлов обновлена, изменены коды схем XML.</p>
</blockquote>


<div class="wpfilebase-file-default" onclick="if('undefined' == typeof event.target.href) document.getElementById('wpfb-file-link-1').click();">
  <div class="icon"><a href="https://programmer.com.ua/files/buhuchet/esv4df-2023.zip" target="_blank" title="Download Объединенная отчетность ЕСВ и 1ДФ"><img decoding="async" align="middle" src="https://programmer.com.ua/wp-includes/images/crystal/archive.png" alt="Объединенная отчетность ЕСВ и 1ДФ" /></a></div>
  <div class="filetitle">
    <a href="https://programmer.com.ua/files/buhuchet/esv4df-2023.zip" title="Download Объединенная отчетность ЕСВ и 1ДФ" target="_blank" id="wpfb-file-link-1">Объединенная отчетность ЕСВ и 1ДФ</a>
    
    <br />
    esv4df-2023.zip<br />
    Version: 2023.1<br />
  </div>
  <div class="info">
    42.8 KiB<br />
    Загрузок: 18 <br />
    <a href="#" onclick="return wpfilebase_filedetails(1);">Детали</a>
  </div>
  <div class="details" id="wpfilebase-filedetails1" style="display: none;">
  <p>Обработка для выгрузки данных по начисленной зарплате в новый объединенный отчет ЕСВ и 1ДФ. Полученные из обработки XML файлы можно загрузить в кабинет плательщика или любую программу для сдачи отчетности - Медок, Соната и пр.</p>
  <table border="0">
   
   <tr><td><strong>Автор:</strong></td><td>Руслан Хут</td></tr>
   <tr><td><strong>Платформы:</strong></td><td>1C 7.7</td></tr>
   
   <tr><td><strong>Категория:</strong></td><td>Бухгалтерский учет для Украины</td></tr>
   <tr><td><strong>Лицензия:</strong></td><td>Freeware</td></tr>
   <tr><td><strong>Дата:</strong></td><td>2 февраля, 2023</td></tr>
  </table>
  </div>
 <div style="clear: both;"></div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://programmer.com.ua/2021/05/obedinennyj-otchet-esv-i-1df/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
