Как доработать интеграцию Контур.Диадок с 1С УТ 10.3 для редактирования наименований товаров в УПД?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При работе с электронным документооборотом через Контур.Диадок в конфигурации 1С:Управление торговлей 10.3 у многих пользователей возникает потребность в корректировке наименований товаров, выгружаемых в Универсальный передаточный документ (УПД). Типовой механизм может не всегда удовлетворять специфическим требованиям бизнеса, например, когда необходимо укоротить наименование, добавить префикс/суффикс или изменить его согласно внутренним правилам перед отправкой контрагенту. В этом тексте мы подробно рассмотрим, как подойти к такой доработке, используя информацию из сообщений опытных разработчиков 1С и общие принципы работы с модулем Диадок.

Основная задача — найти место в коде модуля Контур.Диадок, где формируются наименования товаров для УПД, и внести туда свои изменения (иногда проще использовать готовые инструменты для выгрузки УПД в XML для Diadoc). Это требует понимания структуры внешней обработки Диадок и принципов отладки 1С.

Основной подход к доработке: Подключаемые модули и внешние обработки

Наиболее предпочтительным и эффективным способом для внесения изменений в логику работы модуля Контур.Диадок является использование подключаемых модулей (плагинов) или внешних обработок. Почему именно так? Потому что это позволяет сохранить типовую конфигурацию 1С без изменений, что значительно упрощает обновление системы в будущем. Вместо прямого редактирования основного модуля Диадок, мы создаем дополнительный слой, который перехватывает или модифицирует данные перед их окончательным формированием.

Разработчики Контур.Диадок предвидели такую потребность и предусмотрели специальные инструменты для настройки:

  1. Генератор подключаемого модуля: Во многих версиях модуля Контур.Диадок в его настройках присутствует функция "Генератор подключаемого модуля". Этот инструмент позволяет создать заготовку внешней обработки с уже реализованными сценариями для изменения различных данных, включая табличную часть товаров УПД. Это значительно упрощает процесс, поскольку вам не придется писать большую часть кода с нуля, а лишь доработать существующие шаблоны.
  2. Плагин "Изменение контента исходящих документов": Существует также плагин (или функционал) "Изменение контента исходящих документов" (или "Изменение контента УПД"), который позволяет вносить небольшие корректировки в данные УПД, например, перезаполнять основание отгрузки, добавлять информационные поля, или корректировать данные по номенклатуре. В этом плагине может быть сценарий, связанный с полем "КодТовара" (ItemVendorCode), которое часто соответствует колонке "Б" в печатной форме УПД. Вы можете выбрать источник для этого поля, включая использование произвольного кода. Если ваша задача заключается в простой подстановке, возможно, этот плагин уже содержит достаточно гибкие настройки. Однако для более сложных трансформаций наименований, где требуется программная логика, все же потребуется работа с подключаемым модулем.

Мы сосредоточимся на подходе с модификацией подключаемого модуля, так как он предоставляет максимальную гибкость.

Поиск места для внесения изменений в модуле Контур.Диадок

Как отмечают опытные разработчики, формирование данных для электронных документов в модуле Диадок действительно происходит в макетах, которые входят в состав самой внешней обработки. Это достаточно распространенная практика в 1С для инкапсуляции специфической логики.

Для УТ 10.3 ключевыми макетами, которые нам нужно изучить, являются:

  1. ТиповойМодульДиадок: Это основной макет, который, по сути, является общим модулем. Он содержит ключевую логику интеграции и взаимодействия с Диадоком.
  2. Модуль_ИнтеграцияУТ103_epf: Этот макет находится внутри ТиповойМодульДиадок и содержит код, специфичный для конфигурации 1С:Управление торговлей 10.3. Именно здесь, скорее всего, будут находиться функции, отвечающие за сбор данных из документов 1С и их подготовку для Диадока.

Для более глубокого понимания мы должны обратить внимание на модули, отвечающие за генерацию XML. Например, для УТ 11 один из разработчиков успешно правил именно модуль ГенерацияXML для добавления тега ИнфПолФХЖ1. Это является сильным индикатором того, что функции по окончательной сборке данных в XML-структуру находятся именно там. Функция ЭДО_Модуль_РаботаСКонтентом, упомянутая в контексте Диадока, часто возвращает библиотеку или объект, который затем используется для обработки электронных документов, включая их генерацию в XML.

Поиск конкретного места:

  1. Откройте внешнюю обработку Контур.Диадок в конфигураторе.
  2. Перейдите к макетам. Найдите макет ТиповойМодульДиадок, а внутри него — макет Модуль_ИнтеграцияУТ103_epf.
  3. Изучите код этих макетов. Ищите функции, которые работают с табличными частями документов (например, "Товары", "Услуги") и формируют строки для выгрузки в Диадок. При поиске по коду пригодится помощник для фильтрации результатов глобального поиска. Наиболее вероятными кандидатами будут функции с именами, содержащими слова "ЗаполнитьДанныеДокумента", "ПолучитьДанныеТабличнойЧасти", "СформироватьТовары" или аналогичные.
  4. Обратите внимание на вызовы модулей, отвечающих за XML-генерацию. Возможно, вы найдете вызов функции из модуля ГенерацияXML или схожего, который принимает подготовленные данные и преобразует их в XML. Для понимания логики можно изучить универсальный обмен данными в формате XML. Это и будет то место, где можно "вклиниться".

Процесс выгрузки, редактирования и загрузки модулей

Для того чтобы внести изменения в код, который находится внутри макетов внешней обработки, нам потребуется выполнить следующие шаги:

  1. Выгрузка ресурсов (макетов): Модуль Диадок часто является внешней обработкой (.epf-файлом). Чтобы получить доступ к внутренним макетам как к текстовым модулям, нам нужно их "выгрузить". В некоторых версиях Диадок модуль имеет функционал для выгрузки своих внутренних компонентов в отдельные файлы на диск, что облегчает редактирование. Если такого функционала нет, то вам придется открыть обработку в конфигураторе, найти нужный макет (ТиповойМодульДиадок -> Модуль_ИнтеграцияУТ103_epf), скопировать его содержимое в текстовый файл, отредактировать, а затем вставить обратно.
  2. Редактирование кода: Открыв содержимое макета, который предположительно формирует наименования товаров (например, функции внутри Модуль_ИнтеграцияУТ103_epf или ГенерацияXML), мы вносим свои корректировки. Например, перед присвоением значения полю "НаименованиеТовара" или "Наименование" в структуре, которая передается для формирования XML, мы можем применить свою функцию для изменения строки.
  3. Загрузка изменений: После внесения изменений, если вы выгружали макеты в отдельные файлы, вам может потребоваться функция в самом модуле Диадок для их "загрузки" обратно. Если вы редактировали непосредственно в конфигураторе, то просто сохраняете изменения в макете и, при необходимости, сохраняете внешнюю обработку в файл.

Важный совет: Прежде чем вносить изменения, всегда создавайте резервную копию внешней обработки. Это позволит вам легко вернуться к исходному состоянию в случае возникновения проблем.

Отладка подключаемых модулей и внешних обработок

Отладка внешних обработок в 1С может быть не совсем тривиальной, так как они часто загружаются во временное хранилище 1С и выполняются без возможности установки точек останова напрямую из конфигуратора, если обработка запускается динамически. Однако существует несколько способов обеспечить полноценную отладку:

  1. Сохранение и подключение с диска: Самый простой и надежный способ – это сохранить файл внешней обработки Диадок (или вашего подключаемого модуля) на диск в путь, доступный как для клиента, так и для сервера 1С. Затем, вместо того чтобы загружать обработку из встроенного хранилища или из базы, подключите ее как внешнюю обработку или отчет в 1С. Для УТ 10.3 это часто делается через меню Сервис → Внешние печатные формы и обработки → Внешние обработки. После этого вы сможете открыть этот файл в конфигураторе, поставить точки останова и полноценно отлаживать его выполнение.
  2. Использование расширений конфигурации (для более новых конфигураций с БСП): В конфигурациях, которые используют Библиотеку Стандартных Подсистем (БСП), можно создать расширение конфигурации. В этом расширении можно перехватить вызовы функций ПодключитьВнешнююОбработку и ПриПолученииРегистрационныхДанных общего модуля ДополнительныеОтчетыИОбработки. Это позволит вам подменить путь к загружаемой внешней обработке, указав на файл на диске вместо временного хранилища. Это более продвинутый метод, который может быть избыточен для УТ 10.3, но полезен в общем контексте.
  3. Специализированные механизмы отладки: Существуют и другие методы, например, временное изменение кода конфигурации для того, чтобы она обращалась к обработке на диске, а не из хранилища. Однако это требует изменения типовой конфигурации, что не всегда желательно.

Порядок действий для отладки:

  1. Откройте измененную внешнюю обработку Контур.Диадок в конфигураторе.
  2. Установите точки останова в тех местах кода (в макетах Модуль_ИнтеграцияУТ103_epf или ГенерацияXML), где, по вашему предположению, формируется наименование товара.
  3. Запустите 1С:Предприятие в режиме отладки (обычно F5 в конфигураторе).
  4. Выполните действия, которые приводят к выгрузке УПД через Диадок (например, создайте и заполните документ "Реализация товаров и услуг", затем попробуйте отправить его через Диадок).
  5. Когда выполнение кода достигнет вашей точки останова, отладчик остановится, и вы сможете пошагово просмотреть, как формируются данные, какие значения принимают переменные, и в каком месте лучше всего внести изменения.

Детальный анализ архитектуры модуля Контур.Диадок для 1С

Для успешной доработки очень полезно понимать общую архитектуру модуля Контур.Диадок в 1С. Модуль представляет собой внешнюю обработку в формате .epf, которая интегрируется с вашей конфигурацией 1С. Его основная задача — обеспечить бесшовную работу с электронными документами (УПД, счета-фактуры, акты и т.д.) непосредственно из интерфейса 1С.

Ключевые функции модуля:

  1. Формирование формализованных документов: Модуль берет данные из документов 1С и преобразует их в строгий XML-формат, утвержденный ФНС. Именно этот процесс нас интересует, так как на этом этапе формируются наименования товаров. Существуют и специализированные решения, например, выгрузка УПД в XML для OZON.
  2. Взаимодействие с API Диадок: Модуль осуществляет передачу подготовленных XML-файлов в сервис Контур.Диадок, а также принимает входящие документы и статусы.
  3. Управление статусами: Он отслеживает статусы отправленных и полученных документов, отображая их в 1С.
  4. Сопоставление номенклатуры: Диадок часто требует сопоставления номенклатуры 1С с номенклатурой контрагента, что может стать важным аспектом, если вы значительно меняете наименования.

Установка и обновление: Модуль Диадок может быть установлен как расширение конфигурации (в более новых версиях 1С) или как внешняя обработка (типично для УТ 10.3). Для УТ 10.3 путь добавления внешней обработки обычно такой: Сервис → Внешние печатные формы и обработки → Внешние обработки. Контур регулярно выпускает обновления модуля, адаптируя его под изменения форматов, законодательства и новые возможности. Важно помнить, что любые ваши доработки при таком подходе должны быть реализованы таким образом, чтобы они были устойчивы к обновлениям или легко переносились при выходе новой версии модуля.

Практические шаги по доработке наименований товаров

Теперь, когда мы понимаем общую картину и знаем, где искать, давайте разберем по шагам, как мы можем модифицировать наименования товаров.

Шаг 1: Идентифицируем номенклатуру и исходное наименование

В документе 1С, например, "Реализация товаров и услуг", у каждой строки табличной части "Товары" есть ссылка на элемент справочника Номенклатура. Именно из этого элемента изначально берется наименование. Наша задача — перехватить это наименование.

Шаг 2: Поиск точки входа для изменения

Как мы уже выяснили, нам нужно сосредоточиться на макетах ТиповойМодульДиадок и Модуль_ИнтеграцияУТ103_epf. Откройте их в конфигураторе. Мы ищем функции, которые формируют данные для табличной части товаров. Например, это может быть функция, которая возвращает структуру или массив структур, каждая из которых описывает одну строку товара для УПД.

Предположим, вы нашли функцию СформироватьТаблицуТоваровДляДиадок в Модуль_ИнтеграцияУТ103_epf, которая перебирает строки документа реализации и заполняет промежуточную таблицу или список структур.

Шаг 3: Вносим изменения в код

Внутри цикла обхода строк табличной части, после того как исходное наименование товара уже получено, мы можем применить нашу логику. Допустим, мы хотим добавить к наименованию артикул и ограничить длину.


// Примерный фрагмент кода из модуля формирования данных
// (Это гипотетический пример, реальные названия функций и переменных могут отличаться)

// ... где-то в функции, которая формирует строку товара для УПД
// Предположим, у нас есть переменная `СтруктураСтрокиТовара`, которая будет передана в XML-генератор
// Исходное наименование:
ИсходноеНаименование = СокрЛП(СтрокаДокумента.Номенклатура.НаименованиеПолное);
АртикулНоменклатуры = СокрЛП(СтрокаДокумента.Номенклатура.Артикул);

// Наша логика модификации наименования
НовоеНаименование = ИсходноеНаименование;

// Пример 1: Добавить артикул, если он есть
Если Не ПустаяСтрока(АртикулНоменклатуры) Тогда
    НовоеНаименование = НовоеНаименование + " (" + АртикулНоменклатуры + ")";
КонецЕсли;

// Пример 2: Обрезать наименование до определенной длины
МаксимальнаяДлинаНаименования = 255; // Или другая допустимая длина
Если СтрДлина(НовоеНаименование) > МаксимальнаяДлинаНаименования Тогда
    НовоеНаименование = Лев(НовоеНаименование, МаксимальнаяДлинаНаименования - 3) + "..."; // Добавляем многоточие
КонецЕсли;

// Пример 3: Заменить часть наименования
НовоеНаименование = СтрЗаменить(НовоеНаименование, "Торговая марка", "ТМ");

// Присваиваем модифицированное наименование
СтруктураСтрокиТовара.Наименование = НовоеНаименование;
СтруктураСтрокиТовара.ItemVendorCode = НовоеНаименование; // Если это поле также используется для вывода

Шаг 4: Тестирование и отладка

После внесения изменений обязательно сохраните модуль и выполните отладку, как описано выше. Проверьте, что новое наименование формируется корректно, нет ошибок и УПД успешно отправляется.

Возможные сложности и рекомендации:

  1. Обновления модуля Диадок: При обновлении модуля Контур.Диадок ваши изменения могут быть перезаписаны. Поэтому рекомендуется создавать внешнюю обработку-плагин, которая будет вызываться модулем Диадок в определенной точке, а не напрямую править его макеты. Некоторые версии модуля Диадок имеют специальные "точки расширения" или "обработчики событий", куда можно подключить свой код.
  2. Сопоставление номенклатуры: Если вы значительно изменяете наименование, которое используется для сопоставления номенклатуры в Диадоке, может потребоваться повторное сопоставление номенклатуры с контрагентами. Имейте это в виду при планировании изменений.
  3. Производительность: Убедитесь, что ваша логика модификации не замедляет процесс формирования документов, особенно если у вас большие объемы данных.
  4. Проверка форматов: Убедитесь, что после ваших изменений наименование все еще соответствует требованиям ФНС к форматам УПД (например, по максимальной длине поля).

Таким образом, доработка интеграции Контур.Диадок с 1С УТ 10.3 для редактирования наименований товаров в УПД — это решаемая задача, требующая внимательной работы с внутренними макетами внешней обработки Диадок и тщательной отладки. Следуя описанным шагам и рекомендациям, вы сможете адаптировать функционал под свои специфические бизнес-потребности.

← На главную