<?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>1c - Portfolio</title>
	<atom:link href="https://shknv.ru/category/1c/feed/" rel="self" type="application/rss+xml" />
	<link>https://shknv.ru</link>
	<description>Евгений Шикунов</description>
	<lastBuildDate>Sat, 25 Apr 2026 14:44:30 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shknv.ru/wp-content/uploads/2024/12/web-app-manifest-512x512-1-150x150.png</url>
	<title>1c - Portfolio</title>
	<link>https://shknv.ru</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Как подготовить компанию к интеграции 1С, CRM и внутренних сервисов</title>
		<link>https://shknv.ru/prepare-company-for-1c-crm-integration/</link>
		
		<dc:creator><![CDATA[post]]></dc:creator>
		<pubDate>Mon, 20 Apr 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[1c]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[Интеграции]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[telegram]]></category>
		<category><![CDATA[Гайд]]></category>
		<category><![CDATA[интеграции]]></category>
		<guid isPermaLink="false">https://shknv.ru/?p=587</guid>

					<description><![CDATA[<p>Большая часть проблем в интеграционных проектах возникает не в коде, а до него: в справочниках, ролях, статусах и договорённостях о том, где живёт источник истины. Разбираем, что нужно подготовить компании до старта интеграции.</p>
<p>The post <a href="https://shknv.ru/prepare-company-for-1c-crm-integration/">Как подготовить компанию к интеграции 1С, CRM и внутренних сервисов</a> first appeared on <a href="https://shknv.ru">Portfolio</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="wp-block-group">
<p><strong>Коротко:</strong> Большая часть проблем в интеграционных проектах возникает не в коде, а до него: в справочниках, ролях, статусах и договорённостях о том, где живёт источник истины. Разбираем, что нужно подготовить компании до старта интеграции.</p>
<ul>
<li>Время чтения: 11 минут</li>
<li>Формат: практический разбор без лишней теории</li>
</ul>
</div>
<div class="wp-block-group">
<p><strong>Что внутри:</strong></p>
<ul>
<li><a href="#prepare-company-for-1c-crm-integration-1">Сначала нужно ответить: зачем вообще интегрируем</a></li>
<li><a href="#prepare-company-for-1c-crm-integration-2">Шаг 1. Определите источник истины</a></li>
<li><a href="#prepare-company-for-1c-crm-integration-3">Шаг 2. Разберите справочники до старта</a></li>
<li><a href="#prepare-company-for-1c-crm-integration-4">Шаг 3. Согласуйте статусы и жизненный цикл данных</a></li>
<li><a href="#prepare-company-for-1c-crm-integration-5">Шаг 4. Определите идентификаторы и ключи сопоставления</a></li>
<li><a href="#prepare-company-for-1c-crm-integration-6">Шаг 5. Назначьте владельцев данных и правил</a></li>
<li><a href="#prepare-company-for-1c-crm-integration-7">Шаг 6. Сразу договоритесь об ошибках и мониторинге</a></li>
<li><a href="#prepare-company-for-1c-crm-integration-8">Шаг 7. Запускайте поэтапно, а не сразу всё</a></li>
</ul>
</div>
<p>Когда компания говорит &#171;нам нужно интегрировать 1С и CRM&#187;, большинство сразу думает про API, разработку и сроки. Но самые болезненные проблемы таких проектов обычно рождаются до написания первого запроса.</p>
<p>Интеграция ломается не потому, что разработчик не умеет вызвать endpoint. Она ломается потому, что бизнес не договорился, какие данные являются эталонными, как называются статусы, кто владеет справочниками и что считать успешным обменом.</p>
<p>Поэтому хорошая интеграция начинается не с кода, а с подготовки.</p>
<h2 id="prepare-company-for-1c-crm-integration-1">Сначала нужно ответить: зачем вообще интегрируем</h2>
<p>Это звучит очевидно, но на практике цель часто формулируют слишком абстрактно: &#171;чтобы всё было связано&#187;. Такой цели недостаточно.</p>
<p>Нужно понять конкретные бизнес-сценарии:</p>
<ul>
<li>заказы из CRM должны попадать в 1С;</li>
<li>менеджер должен видеть актуальный статус отгрузки;</li>
<li>остатки и цены должны возвращаться в CRM;</li>
<li>финансовый блок должен получать корректные документы;</li>
<li>руководитель должен видеть единый отчёт без ручной склейки.</li>
</ul>
<p>Пока таких сценариев нет, интеграция рискует превратиться в дорогой обмен &#171;чем-то с чем-то&#187;.</p>
<h2 id="prepare-company-for-1c-crm-integration-2">Шаг 1. Определите источник истины</h2>
<p>Это первый вопрос, который экономит месяцы споров. Для каждой сущности нужно честно ответить: где живёт правильная версия данных.</p>
<p>Например:</p>
<ul>
<li>клиент — в CRM или 1С;</li>
<li>договор — в 1С;</li>
<li>лид и коммуникации — в CRM;</li>
<li>номенклатура и остатки — чаще в 1С;</li>
<li>статусы документооборота — в 1С;</li>
<li>задачи по клиенту — в CRM.</li>
</ul>
<p>Если этого разделения нет, обе системы начинают &#171;переигрывать&#187; друг друга, а сотрудники перестают понимать, где нужно смотреть правду.</p>
<h2 id="prepare-company-for-1c-crm-integration-3">Шаг 2. Разберите справочники до старта</h2>
<p>Интеграции очень плохо переносят хаотичные справочники. Если в CRM один и тот же клиент может называться по-разному, а в 1С номенклатура живёт в другой логике, обмен будет наполнять систему дубликатами и конфликтами.</p>
<p>Что стоит проверить заранее:</p>
<ul>
<li>контрагенты и филиалы;</li>
<li>номенклатура и единицы измерения;</li>
<li>менеджеры, подразделения и роли;</li>
<li>типы документов и статусы;</li>
<li>валюты, ставки, типы оплат.</li>
</ul>
<p>Это скучная, но критически важная часть работы. Без неё интеграция становится фабрикой расхождений.</p>
<h2 id="prepare-company-for-1c-crm-integration-4">Шаг 3. Согласуйте статусы и жизненный цикл данных</h2>
<p>Один из самых частых конфликтов в проектах — одинаковые слова означают разное в разных системах. Например, &#171;сделка закрыта&#187; для продаж и &#171;заказ проведён&#187; для учёта — не одно и то же.</p>
<p>Поэтому нужно заранее зафиксировать:</p>
<ul>
<li>какие события в CRM порождают запись в 1С;</li>
<li>какие статусы из 1С возвращаются обратно;</li>
<li>когда допускается ручная корректировка;</li>
<li>какие поля можно менять после обмена, а какие нет.</li>
</ul>
<p>Без такого соглашения пользователи начинают жить в логике &#171;мы думали, что это значит другое&#187;.</p>
<h2 id="prepare-company-for-1c-crm-integration-5">Шаг 4. Определите идентификаторы и ключи сопоставления</h2>
<p>Это техническая тема, но у неё прямое бизнес-значение. Если системы не умеют надёжно понимать, что речь идёт об одном и том же объекте, дальше начнётся хаос с дублями и неверными связями.</p>
<p>Хорошая практика — заранее определить:</p>
<ul>
<li>по какому ключу сопоставляется клиент;</li>
<li>как связаны карточка сделки и заказ;</li>
<li>где хранится внешний ID;</li>
<li>что происходит при конфликте.</li>
</ul>
<p>Это особенно важно, если у компании уже есть старые данные и история ручной работы.</p>
<h2 id="prepare-company-for-1c-crm-integration-6">Шаг 5. Назначьте владельцев данных и правил</h2>
<p>Интеграцию нельзя отдать только разработчику или подрядчику. На стороне бизнеса нужны люди, которые отвечают:</p>
<ul>
<li>за коммерческий процесс;</li>
<li>за учётный контур;</li>
<li>за правила обмена;</li>
<li>за разбор ошибок;</li>
<li>за приоритеты изменений.</li>
</ul>
<p>Если владельцев нет, любой спор по данным зависает между отделами. В этот момент технический проект становится организационной проблемой.</p>
<h2 id="prepare-company-for-1c-crm-integration-7">Шаг 6. Сразу договоритесь об ошибках и мониторинге</h2>
<p>Ни одна интеграция не живёт без ошибок. Вопрос не в том, будут ли они, а в том, как компания узнает о них и кто будет реагировать.</p>
<p>До запуска полезно определить:</p>
<ul>
<li>какие ошибки критичны;</li>
<li>кто получает уведомления;</li>
<li>как выглядит повторная отправка;</li>
<li>кто разбирает спорные случаи;</li>
<li>где хранится журнал обменов.</li>
</ul>
<p>Бизнесу не нужен &#171;идеальный обмен&#187;. Ему нужен предсказуемый обмен, который можно контролировать.</p>
<h2 id="prepare-company-for-1c-crm-integration-8">Шаг 7. Запускайте поэтапно, а не сразу всё</h2>
<p>Попытка интегрировать весь контур за один раз обычно приводит к длинному и нервному проекту. Рабочий подход — идти по очереди:</p>
<ol>
<li>Один основной сценарий.</li>
<li>Проверка на реальных пользователях.</li>
<li>Отладка ошибок и пограничных случаев.</li>
<li>Только потом расширение периметра.</li>
</ol>
<p>Это особенно важно, если компания впервые проходит через серьёзный интеграционный проект.</p>
<h2 id="prepare-company-for-1c-crm-integration-9">Что бизнес часто недооценивает</h2>
<p>Интеграция — это не &#171;фоновая техническая работа&#187;. Она меняет поведение людей. Когда данные начинают синхронизироваться автоматически, приходится по-новому относиться к дисциплине ввода, владению полями и ответственности за корректность записей.</p>
<p>Поэтому такие проекты всегда находятся на стыке технологий и операционного управления.</p>
<h2 id="prepare-company-for-1c-crm-integration-10">Вывод</h2>
<p>Подготовка к интеграции 1С, CRM и внутренних сервисов — это не бюрократия ради бюрократии. Это способ сделать так, чтобы интеграционный проект не развалился на противоречиях в данных и ожиданиях.</p>
<p>Если компания заранее определила источник истины, привела в порядок справочники, согласовала статусы и назначила владельцев, сама разработка проходит спокойнее и быстрее. А результат получается не &#171;формально связанным&#187;, а действительно полезным для бизнеса.</p>
<p><!-- shknv-related:start --></p>
<section class="wp-block-group shknv-related-materials">
<h2>Связанные материалы</h2>
<p>Эти материалы дополняют статью и помогают перейти к соседним темам без повторения одного и того же материала.</p>
<ul>
<li><a href="https://shknv.ru/kejs-sozdanie-umnoj-crm-dlja-territorial/">(Кейс) Создание Умной CRM для Территориальных Менеджеров Полный Путь от Идеи до Реализации</a> — дополняет кластер CRM, визитов и работы полевых команд</li>
<li><a href="https://shknv.ru/beton-crm-novye-fishki/">Бетон CRM: Новые фишки</a> — дополняет кластер CRM, визитов и работы полевых команд</li>
<li><a href="https://shknv.ru/beton-crm-dinamicheskaja-forma-dlja-oformlenija/">Beton-CRM: Динамическая форма для оформления заявок.</a> — дополняет кластер CRM, визитов и работы полевых команд</li>
<li><a href="https://shknv.ru/why-bitrix24-implementation-fails/">Почему внедрение Битрикс24 проваливается: 7 ошибок со стороны бизнеса</a> — дополняет тему IT-процессов и контроля</li>
<li><a href="https://shknv.ru/choose-dev-automation-contractor/">Как выбрать подрядчика на разработку и автоматизацию без лишнего риска</a> — помогает принять решение по формату автоматизации</li>
</ul>
</section>
<p><!-- shknv-related:end --></p><p>The post <a href="https://shknv.ru/prepare-company-for-1c-crm-integration/">Как подготовить компанию к интеграции 1С, CRM и внутренних сервисов</a> first appeared on <a href="https://shknv.ru">Portfolio</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Get запрос (получение номенклатуры)</title>
		<link>https://shknv.ru/__trashed-3/</link>
					<comments>https://shknv.ru/__trashed-3/#comments</comments>
		
		<dc:creator><![CDATA[Evgeniy Shikunov]]></dc:creator>
		<pubDate>Fri, 13 Dec 2024 07:21:21 +0000</pubDate>
				<category><![CDATA[1c]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[http]]></category>
		<guid isPermaLink="false">https://shknv.ru/?p=145</guid>

					<description><![CDATA[<p>Технический пример GET-запроса для получения номенклатуры: полезно при подготовке обмена между 1С, CRM и сервисами.</p>
<p>The post <a href="https://shknv.ru/__trashed-3/">Get запрос (получение номенклатуры)</a> first appeared on <a href="https://shknv.ru">Portfolio</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>Создание HTTP-сервиса для работы с номенклатурой в 1С</h1>
<p>В этой статье описан процесс создания HTTP-сервиса в 1С для получения списка номенклатуры в формате JSON. Мы рассмотрим разработку шаблона, обработчика, общего модуля и вспомогательных функций для корректной обработки запросов и формирования ответа.</p>
<hr />
<h2>Создание шаблона</h2>
<ol>
<li>Перейдите в конфигураторе в раздел <strong>HTTP-сервисы</strong>.</li>
<li>Добавьте новый маршрут, например <code>/api/items</code>, для обработки GET-запросов.</li>
<li>Укажите функцию-обработчик, например <code>ШаблонURL1ПолучитьДанныеПоНоменклатуре</code>.</li>
</ol>
<hr />
<h2>Создание обработчика запросов</h2>
<p>Обработчик запроса обрабатывает GET-запрос и возвращает список номенклатуры в формате JSON. Пример функции:</p>
<pre><code class="language-1C">Функция ШаблонURL1ПолучитьДанныеПоНоменклатуре(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);

    // Установка заголовка через коллекцию Заголовки
    Ответ.Заголовки.Вставить("Content-Type", "application/json");

    // Получаем данные
    СтрокаJSON = АИР.ПолучитьСписокНоменклатуры();

    // Устанавливаем тело ответа
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON);

    Возврат Ответ;
КонецФункции
</code></pre>
<h3>Комментарии к коду</h3>
<ul>
<li>Важный момент: заголовок <code>Content-Type</code> указывает клиенту, что ответ возвращается в формате JSON.</li>
<li>Используется общая функция для получения списка номенклатуры (подробнее в следующем разделе).</li>
</ul>
<hr />
<h2>Общий модуль для обработки запросов</h2>
<p>Для обработки данных создается функция в общем модуле, например, <code>АИР</code>:</p>
<pre><code class="language-1C">Функция ПолучитьСписокНоменклатуры() Экспорт
    Попытка
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ Код КАК cod, Наименование КАК name, Артикул КАК articul ИЗ Справочник.Номенклатура";
        Выборка = Запрос.Выполнить().Выбрать();

        Массив = Новый Массив;
        Пока Выборка.Следующий() Цикл
            Массив.Добавить(Новый Структура("cod, name, articul", Строка(Выборка.cod), Строка(Выборка.name), Строка(Выборка.articul)));
        КонецЦикла;

        Если Массив.Количество() &gt; 0 Тогда
            Возврат АИР.СтруктураВСтрокуJSON(Массив);
        Иначе
            Возврат "Ошибка";
        КонецЕсли;
    Исключение
        Сообщить("Ошибка выполнения запроса: " + ОписаниеОшибки());
        Возврат ОписаниеОшибки();
    КонецПопытки;
КонецФункции
</code></pre>
<h3>Важные моменты</h3>
<ul>
<li>В строке <code>Массив.Добавить(...)</code> типы данных для полей (например, <code>Строка</code>) указываются явно, чтобы избежать ошибок сериализации в JSON.</li>
<li>Обработка исключений позволяет отлавливать ошибки и возвращать диагностические сообщения.</li>
</ul>
<hr />
<h2>Функция для преобразования массива в JSON</h2>
<p>Функция преобразует массив структур в JSON-строку:</p>
<pre><code class="language-1C">Функция СтруктураВСтрокуJSON(Результат) Экспорт
    Если Результат = Неопределено ИЛИ Результат.Количество() = 0 Тогда
        Возврат "[]";
    КонецЕсли;

    Попытка
        ЗаписьJSON = Новый ЗаписьJSON;
        ЗаписьJSON.УстановитьСтроку();
        ЗаписатьJSON(ЗаписьJSON, Результат, НастройкиJSON());
        Возврат ЗаписьJSON.Закрыть();
    Исключение
        Сообщить("Ошибка преобразования в JSON: " + ОписаниеОшибки());
        Возврат ОписаниеОшибки();
    КонецПопытки;
КонецФункции
</code></pre>
<hr />
<h2>Функция настроек сериализации</h2>
<p>Для управления сериализацией данных используется вспомогательная функция:</p>
<pre><code class="language-1C">Функция НастройкиJSON()
    Результат = Новый НастройкиСериализацииJSON;
    Результат.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
    Возврат Результат;
КонецФункции
</code></pre>
<hr />
<h2>Пример результата</h2>
<p>В результате обработки запроса сервис возвращает следующий JSON-ответ:</p>
<pre><code class="language-json">[
    {
        "cod": "00-00000353",
        "name": "Жесткая упаковка груза",
        "articul": ""
    },
    {
        "cod": "00-00000331",
        "name": "Услуги по заявке товарного знака",
        "articul": ""
    },
    {
        "cod": "00-00000290",
        "name": "Реклама",
        "articul": ""
    }
]
</code></pre>
<p>Этот JSON-ответ можно использовать в веб-приложениях, мобильных приложениях и других системах, работающих с REST API.</p>
<p><!-- shknv-related:start --></p>
<section class="wp-block-group shknv-related-materials">
<h2>Связанные материалы</h2>
<p>Эти материалы дополняют статью и помогают перейти к соседним темам без повторения одного и того же материала.</p>
<ul>
<li><a href="https://shknv.ru/post-zapros-izmenenie-dokumenta/">Post запрос (изменение документа)</a> — дополняет техническую часть разработки и инфраструктуры</li>
<li><a href="https://shknv.ru/sozdanie-servisa/">Создание сервиса</a> — дополняет техническую часть разработки и инфраструктуры</li>
<li><a href="https://shknv.ru/personalnyj-veb-server/">Персональный веб сервер</a> — дополняет техническую часть разработки и инфраструктуры</li>
<li><a href="https://shknv.ru/licenzionnyj-portal-ot-idei-do-production/">Лицензионный портал: от идеи до production</a> — дополняет техническую часть разработки и инфраструктуры</li>
</ul>
</section>
<p><!-- shknv-related:end --></p><p>The post <a href="https://shknv.ru/__trashed-3/">Get запрос (получение номенклатуры)</a> first appeared on <a href="https://shknv.ru">Portfolio</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shknv.ru/__trashed-3/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Post запрос (изменение документа)</title>
		<link>https://shknv.ru/post-zapros-izmenenie-dokumenta/</link>
		
		<dc:creator><![CDATA[Evgeniy Shikunov]]></dc:creator>
		<pubDate>Fri, 13 Dec 2024 07:12:37 +0000</pubDate>
				<category><![CDATA[1c]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[http]]></category>
		<guid isPermaLink="false">https://shknv.ru/?p=139</guid>

					<description><![CDATA[<p>Технический пример POST-запроса для изменения документа и настройки обмена данными между системами.</p>
<p>The post <a href="https://shknv.ru/post-zapros-izmenenie-dokumenta/">Post запрос (изменение документа)</a> first appeared on <a href="https://shknv.ru">Portfolio</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>Создание сервиса для обработки POST-запросов и изменения документов в 1С</h1>
<h2>Шаг 1: Создание шаблона URL и обработчика</h2>
<h3>Обработчик для POST-запроса</h3>
<pre><code class="language-1C">Функция Changesumm(Запрос)    // Обработчик POST-запроса для изменения суммы документа
    // Получаем тело запроса в формате JSON
    Попытка
        СтрокаJSON = Запрос.ПолучитьТелоКакСтроку();
    Исключение
        // Возвращаем ошибку при проблемах с получением тела запроса
        Возврат Новый HTTPСервисОтвет(400, "Ошибка при получении тела запроса");
    КонецПопытки;

    // Разбираем JSON в структуру данных
    Попытка
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
        СтруктураВходныхПараметров = ПрочитатьJSON(ЧтениеJSON);
        ЧтениеJSON.Закрыть();
    Исключение
        // Возвращаем ошибку при некорректном формате JSON
        Возврат Новый HTTPСервисОтвет(400, "Ошибка разбора JSON");
    КонецПопытки;

    // Передаем данные в модуль для обработки и получаем результат
    ОбъектОтвета = АИР.ОбновитьСуммуПоДокументу(СтруктураВходныхПараметров);

    // Формируем HTTP-ответ
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(ОбъектОтвета);

    Возврат Ответ;
КонецФункции
</code></pre>
<h3>Важные моменты:</h3>
<ul>
<li><strong>Получение тела запроса:</strong> Используется метод <code>Запрос.ПолучитьТелоКакСтроку()</code> для извлечения данных из POST-запроса.</li>
<li><strong>Обработка ошибок:</strong> Добавлены обработчики исключений для предотвращения падения сервиса при некорректных данных.</li>
<li><strong>Проверка JSON:</strong> После разбора JSON данные передаются в модуль для дальнейшей обработки.</li>
</ul>
<p>Пример тела запроса:</p>
<pre><code class="language-json">{
    "cod": "00ЦБ-005884",
    "summa": 32100
}
</code></pre>
<hr />
<h2>Шаг 2: Создание функции в общем модуле</h2>
<pre><code class="language-1C">Функция ОбновитьСуммуПоДокументу(СтруктураПараметров) Экспорт
    Попытка
        // Проверка входных параметров
        Если НЕ СтруктураПараметров.Свойство("cod") ИЛИ НЕ СтруктураПараметров.Свойство("summa") Тогда
            Возврат Новый HTTPСервисОтвет(400, "Invalid parameters: 'cod' and 'summa' are required");
        КонецЕсли;

        КодДокумента = СтруктураПараметров.cod;
        НоваяСумма = СтруктураПараметров.summa;

        // Поиск документа по номеру
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ  
            |    Ссылка  
            |ИЗ  
            |    Документ.ОперацияПоПлатежнойКарте КАК Документ  
            |ГДЕ  
            |    Документ.Номер = &amp;Номер";  // Параметр для Номер без кавычек

        Запрос.УстановитьПараметр("Номер", КодДокумента); // Устанавливаем параметр, значение КодДокумента будет в кавычках

        // Отладочное сообщение: выводим запрос
        Сообщить("Запрос: " + Запрос.Текст); // Выводим текст запроса для отладки

        РЗ = Запрос.Выполнить().Выбрать();
        
        // Если документ не найден
        Если РЗ.Следующий() тогда
			ДокументСсылка=РЗ.ССылка;	//Сообщить(РЗ.номер);
				
				иначе 
				Возврат "Нет такого документа";
		Конецесли;     
		
		
        // Получаем первую строку из результата запроса
        ДокументОбъект=ДокументСсылка.ПолучитьОбъект();;

        // Проверка на наличие ссылки на объект
  
        Если ДокументОбъект = Неопределено Тогда
            Возврат Новый HTTPСервисОтвет(500, "Ошибка получения объекта документа");
        КонецЕсли;

        // Изменяем сумму
        ДокументОбъект.СуммаДокумента = НоваяСумма;
		// Обновляем сумму в табличной части, например, в табличной части "Расшифровка платежа"
		Если ДокументОбъект.РасшифровкаПлатежа &lt;&gt; Неопределено Тогда
    Для Каждого СтрокаТЧ Из ДокументОбъект.РасшифровкаПлатежа Цикл
        // Логика изменения суммы в табличной части
        // Например, распределение суммы пропорционально количеству
        СтрокаТЧ.Сумма = НоваяСумма;
    КонецЦикла;
КонецЕсли;
		
        // Проводим документ
        Попытка
            ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
			//	
		Исключение
            Возврат Новый HTTPСервисОтвет(500, "Ошибка проведения документа: " + ОписаниеОшибки());
        КонецПопытки;

        // Возвращаем успех
        Возврат Новый HTTPСервисОтвет(200, "Document updated and posted successfully");
    Исключение
        // Логируем и возвращаем ошибку
        Сообщить("Ошибка обновления документа: " + ОписаниеОшибки());
        Возврат Новый HTTPСервисОтвет(500, "Internal server error: " + ОписаниеОшибки());
    КонецПопытки;
КонецФункции

</code></pre>
<h3>Ключевые моменты:</h3>
<ol>
<li><strong>Проверка входных данных:</strong> обязательная проверка наличия полей <code>cod</code> и <code>summa</code> в структуре параметров.</li>
<li><strong>Поиск документа:</strong> запрос для получения ссылки на документ должен использовать параметр с учетом кавычек.</li>
<li><strong>Обновление документа:</strong> проверяется наличие объекта документа и изменяется его сумма.</li>
<li><strong>Изменение табличной части:</strong> добавлена возможность обновлять суммы в строках табличной части документа.</li>
<li><strong>Обработка ошибок:</strong> исключения отлавливаются и возвращается сообщение для отладки.</li>
<li><strong>Обязательно пользуемся отладчиком  с включенным автообнаружением HTTP-запросов.</strong></li>
</ol>
<hr />
<h2>Результат работы</h2>
<p>Пример успешного JSON-ответа:</p>
<pre><code class="language-json">{
    "status": "success",
    "message": "Изменения успешно сохранены"
}
</code></pre>
<p>Пример ошибки:</p>
<pre><code class="language-json">{
    "status": "error",
    "message": "Нет такого документа"
}
</code></pre>
<hr />
<h2>Важные моменты для публикации и тестирования</h2>
<ol>
<li><strong>Публикация сервиса:</strong>
<ul>
<li>Убедитесь, что серверный сервис опубликован на веб-сервере и доступен по URL.</li>
<li>Настройте разрешения для вызова обработчиков.</li>
</ul>
</li>
<li><strong>Тестирование:</strong>
<ul>
<li>Используйте инструменты, такие как Postman или curl, для отправки POST-запросов.</li>
<li>Проверяйте корректность передаваемого JSON.</li>
</ul>
</li>
<li><strong>Логирование:</strong>
<ul>
<li>Добавьте логирование на этапе обработки запроса и выполнения изменений для упрощения диагностики.</li>
</ul>
</li>
<li><strong>Пример тела запроса:</strong><br />
Убедитесь, что JSON-запрос формируется в правильном формате:</p>
<pre><code class="language-json">{
    "cod": "00ЦБ-005884",
    "summa": 32100
}
</code></pre>
</li>
</ol>
<p><!-- shknv-related:start --></p>
<section class="wp-block-group shknv-related-materials">
<h2>Связанные материалы</h2>
<p>Эти материалы дополняют статью и помогают перейти к соседним темам без повторения одного и того же материала.</p>
<ul>
<li><a href="https://shknv.ru/__trashed-3/">Get запрос (получение номенклатуры)</a> — связанный кейс или практический разбор из блога</li>
<li><a href="https://shknv.ru/sozdanie-servisa/">Создание сервиса</a> — дополняет техническую часть разработки и инфраструктуры</li>
<li><a href="https://shknv.ru/personalnyj-veb-server/">Персональный веб сервер</a> — дополняет техническую часть разработки и инфраструктуры</li>
<li><a href="https://shknv.ru/licenzionnyj-portal-ot-idei-do-production/">Лицензионный портал: от идеи до production</a> — дополняет техническую часть разработки и инфраструктуры</li>
</ul>
</section>
<p><!-- shknv-related:end --></p><p>The post <a href="https://shknv.ru/post-zapros-izmenenie-dokumenta/">Post запрос (изменение документа)</a> first appeared on <a href="https://shknv.ru">Portfolio</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Создание сервиса</title>
		<link>https://shknv.ru/sozdanie-servisa/</link>
		
		<dc:creator><![CDATA[Evgeniy Shikunov]]></dc:creator>
		<pubDate>Fri, 13 Dec 2024 05:29:45 +0000</pubDate>
				<category><![CDATA[1c]]></category>
		<category><![CDATA[Разработка]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[интеграции]]></category>
		<guid isPermaLink="false">https://shknv.ru/?p=122</guid>

					<description><![CDATA[<p>Практический разбор создания сервиса и HTTP-обмена для задач интеграции 1С и внутренних систем.</p>
<p>The post <a href="https://shknv.ru/sozdanie-servisa/">Создание сервиса</a> first appeared on <a href="https://shknv.ru">Portfolio</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>Создание HTTP-сервиса в 1С:Предприятие</h1>
<p>В данной статье описан процесс создания HTTP-сервиса в 1С, включая настройку сервиса, создание шаблона и обработчика запросов, а также публикацию базы данных на сервере.</p>
<hr />
<h2>1. Создание сервиса</h2>
<ol>
<li>Откройте конфигуратор вашей информационной базы.</li>
<li>В дереве конфигурации найдите раздел <strong>&#171;Общие&#187;</strong> и создайте новый объект типа <strong>&#171;HTTP-сервис&#187;</strong>.</li>
<li>Укажите имя вашего сервиса, например, <code>MyService</code>. Это имя будет частью URL, по которому будет доступен сервис.</li>
</ol>
<p>Пример структуры URL: <code>http://&lt;имя_сервера&gt;/&lt;путь_к_базе&gt;/hs/MyService</code></p>
<ol start="4">
<li>Сохраните изменения в конфигурации.</li>
</ol>
<hr />
<h2>2. Создание шаблона для обработки запросов</h2>
<p>Шаблон определяет маршруты (endpoints) и методы (GET, POST, PUT, DELETE), которые обрабатываются сервисом.</p>
<ol>
<li>В объекте &#171;HTTP-сервис&#187; перейдите на вкладку <strong>&#171;Шаблоны&#187;</strong>.</li>
<li>Добавьте новый маршрут, указав путь и методы запросов. Например, добавьте маршрут <code>/api/data</code> для обработки GET и POST запросов.</li>
<li>Укажите имя процедуры или функции, которая будет обрабатывать запросы для каждого метода.</li>
</ol>
<p>Пример настройки:</p>
<ul>
<li>Путь: <code>/api/data</code></li>
<li>Методы: GET, POST</li>
<li>Обработчик GET: <code>ПолучитьДанные</code></li>
<li>Обработчик POST: <code>ДобавитьДанные</code></li>
</ul>
<hr />
<h2>3. Создание обработчика запросов</h2>
<p>Для обработки запросов создайте процедуры в модуле HTTP-сервиса. Эти процедуры будут выполняться при получении запросов на указанные маршруты.</p>
<p>Пример обработчика для метода GET:</p>
<div class="hcb_wrap">
<pre class="prism undefined-numbers lang-plain" data-lang="Plain Text"><code>
Функция ШаблонURL1ПолучитьДанныеПоНоменклатуре(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);

    // Установка заголовка через коллекцию Заголовки
    Ответ.Заголовки.Вставить("Content-Type", "application/json");

    // Получаем данные
    СтрокаJSON = АИР.ПолучитьСписокНоменклатуры();

    // Устанавливаем тело ответа
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON);

    Возврат Ответ;
КонецФункции

</code></pre>
</div>
<p>Пример обработчика для метода POST:</p>
<p><span style="background-color: inherit; color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: pre;"> </span></p>
<div class="hcb_wrap">
<pre class="prism undefined-numbers lang-plain" data-lang="Plain Text"><code><span style="background-color: inherit; color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; white-space: pre;">Функция Changesumm(Запрос) // Получаем тело запроса</span>
Попытка
СтрокаJSON = Запрос.ПолучитьТелоКакСтроку();
Исключение
Возврат Новый HTTPСервисОтвет(400, "Ошибка при получении тела запроса");
КонецПопытки;

// Разбираем JSON
Попытка
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
СтруктураВходныхПараметров = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Исключение
Возврат Новый HTTPСервисОтвет(400, "Ошибка разбора JSON");
КонецПопытки;

// Передаем данные в модуль и получаем ответ
ОбъектОтвета = АИР.ОбновитьСуммуПоДокументу(СтруктураВходныхПараметров);

// Формируем HTTP-ответ
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ОбъектОтвета);

Возврат Ответ;
КонецФункции</code></pre>
</div>
<p>&nbsp;</p>
<h2>4. Создание модуля для обработки запросов</h2>
<p>Для удобства и повторного использования создайте общий модуль, который будет содержать логику обработки запросов. Этот модуль можно вызывать из обработчиков HTTP-сервиса.</p>
<h3>Пример общего модуля:</h3>
<p>Название модуля: <code>ПолучитьСписокНоменклатуры</code></p>
<p>Код модуля:</p>
<div>
<div class="hcb_wrap">
<pre class="prism undefined-numbers lang-plain" data-lang="Plain Text"><code>Функция ПолучитьСписокНоменклатуры() Экспорт
    Попытка
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ Код КАК cod, Наименование КАК name, Артикул КАК articul ИЗ Справочник.Номенклатура";
        Выборка = Запрос.Выполнить().Выбрать();


        Массив = Новый Массив;
        Пока Выборка.Следующий() Цикл
            Массив.Добавить(Новый Структура("cod, name, articul", Строка(Выборка.cod), Строка(Выборка.name), Строка(Выборка.articul)));
КонецЦикла;


        Если Массив.Количество() &gt; 0 Тогда
    Возврат АИР.СтруктураВСтрокуJSON(Массив);
Иначе
    Возврат "1";
КонецЕсли;
    Исключение
        Сообщить("Ошибка выполнения запроса: " + ОписаниеОшибки());
        Возврат ОписаниеОшибки();
    КонецПопытки;
КонецФункции</code></pre>
</div>
</div>
<h2>5. Публикация базы на сервере</h2>
<p>Для того чтобы HTTP-сервис стал доступен через веб, необходимо опубликовать базу данных:</p>
<ol>
<li>В конфигураторе откройте меню <strong>&#171;Администрирование&#187;</strong> -&gt; <strong>&#171;Публикация на веб-сервере&#187;</strong>.</li>
<li>Укажите путь для публикации (например, <code>/MyBase</code>).</li>
<li>Включите поддержку HTTP-сервисов в параметрах публикации.</li>
<li>Нажмите &#171;ОК&#187; для применения настроек.</li>
</ol>
<p>После публикации сервис будет доступен по адресу:</p>
<p><code>http://&lt;имя_сервера&gt;/&lt;путь_к_базе&gt;/hs/MyService</code></p>
<hr />
<p>Теперь ваш HTTP-сервис готов к использованию! Вы можете отправлять запросы с помощью браузера, Postman или других HTTP-клиентов.</p>
<p><!-- shknv-related:start --></p>
<section class="wp-block-group shknv-related-materials">
<h2>Связанные материалы</h2>
<p>Эти материалы дополняют статью и помогают перейти к соседним темам без повторения одного и того же материала.</p>
<ul>
<li><a href="https://shknv.ru/post-zapros-izmenenie-dokumenta/">Post запрос (изменение документа)</a> — дополняет техническую часть разработки и инфраструктуры</li>
<li><a href="https://shknv.ru/__trashed-3/">Get запрос (получение номенклатуры)</a> — связанный кейс или практический разбор из блога</li>
<li><a href="https://shknv.ru/personalnyj-veb-server/">Персональный веб сервер</a> — дополняет техническую часть разработки и инфраструктуры</li>
<li><a href="https://shknv.ru/licenzionnyj-portal-ot-idei-do-production/">Лицензионный портал: от идеи до production</a> — дополняет техническую часть разработки и инфраструктуры</li>
</ul>
</section>
<p><!-- shknv-related:end --></p><p>The post <a href="https://shknv.ru/sozdanie-servisa/">Создание сервиса</a> first appeared on <a href="https://shknv.ru">Portfolio</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
