При работе с типовыми конфигурациями (такими как УТ 11, КА 2 или ERP) часто возникает необходимость доработать стандартный механизм взаимодействия с интернет-магазином. Одной из первых сложностей, с которой сталкивается разработчик, является поиск конкретных объектов в дереве конфигурации и определение того, какой код выполняется при нажатии кнопок в интерфейсе. Рассмотрим пошагово, как найти форму узла обмена и обработчик команды запуска обмена.
В современных конфигурациях 1С обмен с сайтом реализован через механизм планов обмена. Для того чтобы найти форму, которую пользователь видит при настройке выгрузки (например, «Выгрузка первых заказов»), выполним следующие действия:
ОбменССайтом.ФормаУзла.Важно понимать, что если вы открываете список всех настроек через «Все функции» (или «Функции для технического специалиста»), вы попадаете в ФормаСписка. При выборе конкретной настройки (узла) открывается именно ФормаУзла. Именно в модуле этой формы сосредоточена логика отображения элементов интерфейса, но не всегда там находится логика самого обмена.
Часто разработчики ищут код команды в модуле формы, просматривая список команд формы. Однако в типовых решениях 1С кнопка «Выполнить обмен» нередко является командой объекта метаданных, а не локальной командой формы. Это позволяет вызывать процедуру обмена из разных мест системы (из списка, из формы узла, из регламентных заданий).
Разберем, как найти программный код такой команды:
ОбменССайтом найдем ветку Команды.ВыполнитьОбменДанными (или аналогичная по смыслу).В открывшемся модуле мы увидим процедуру ОбработкаКоманды. Рассмотрим пример того, как это выглядит в коде:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// ПараметрКоманды содержит ссылку на узел плана обмена
Если ПараметрКоманды = Неопределено Тогда
Возврат;
КонецЕсли;
// Вызов серверной логики для запуска процесса
ОбменССайтомКлиент.ВыполнитьИнтерактивныйОбмен(ПараметрКоманды);
КонецПроцедуры
Проанализируем эту ситуацию: код в модуле команды обычно является лишь «точкой входа». Он вызывает методы из общих модулей. В данном случае управление передается в общий модуль ОбменССайтомКлиент.
Процесс обмена с сайтом состоит из подготовки данных, формирования XML в формате CommerceML и передачи их по протоколу HTTP. Чтобы детально изучить эти механизмы, нам нужно перейти к серверным общим модулям.
Рассмотрим основные модули, которые задействованы в процессе:
ОбменССайтом — содержит основные процедуры инициализации обмена и управления сессиями.ОбменССайтомСобытия — здесь описываются обработчики, которые срабатывают при записи объектов, если они должны быть помечены к выгрузке.ОбменССайтомПереопределяемый — критически важный модуль для разработчика. Именно здесь система позволяет внедрять свои алгоритмы без изменения основного ядра обмена.ОбменССайтомВызовСервера — используется для связи между формой (клиентом) и серверной частью логики.Если вам нужно найти код, отвечающий за формирование конкретных тегов в XML-файле, рекомендуем искать в модуле ОбменССайтом использование объекта ЗаписьXML. Обычно функции называются по типу ВыгрузитьТовары(), СформироватьПакетПредложений() и так далее.
Выясним важную причину, по которой точка останова может не срабатывать при нажатии кнопки «Выполнить обмен». В типовых конфигурациях обмен часто запускается в фоновом задании. Это делается для того, чтобы пользователь мог продолжать работу в 1С, пока идет тяжелый процесс выгрузки картинок и остатков.
Чтобы отладчик «поймал» выполнение кода в этом случае, необходимо выполнить предварительную настройку в Конфигураторе:
Теперь, когда выполнение кода дойдет до серверных процедур обмена, отладчик автоматически подключится к новому сеансу фонового задания и остановится на вашей точке останова.
Для эффективной доработки обмена с сайтом недостаточно просмотреть только модуль формы. Структура кода в 1С распределена: форма отвечает за интерфейс, модуль команды — за инициацию действия, а общие модули (преимущественно ОбменССайтом) — за бизнес-логику и формирование файлов. Для глубокого анализа работы системы всегда используйте поиск по ссылкам в объекте (Shift + F12) и не забывайте включать отладку фоновых заданий.