Синхронизация данных между конфигурациями «1С:Бухгалтерия предприятия, редакция 3.0» (БП) и «1С:Управление торговлей, редакция 11» (УТ) — один из наиболее часто используемых сценариев в экосистеме решений 1С. В современных версиях этот обмен базируется на универсальном формате Enterprise Data (обмен через универсальный формат).
Однако специалисты часто сталкиваются со следующей проблемой: при попытке выгрузить документы Авансовый отчет из БП 3.0 в УТ 11 система упорно отказывается их регистрировать. Документы не уходят ни в автоматическом режиме, ни принудительно через обработку «Регистрация изменений для обмена». При попытке ручной регистрации администратор видит системное сообщение: «Зарегистрировано 0 изменений из N на узле...». В этой статье мы подробно разберем, почему так происходит, рассмотрим техническую суть проблемы и изучим несколько эффективных способов ее решения.
В универсальном формате обмена логика регистрации объектов описывается специальными правилами регистрации (ПРД), которые поставляются в составе конфигурации в виде XML-файлов. В отличие от старых версий обмена (на базе «Конвертации данных 2.0»), здесь используется событийная модель подписок на события, которая обращается к правилам регистрации для проверки условий.
Если мы проанализируем правила регистрации для плана обмена между БП и УТ, то увидим, что для объекта Документ.АвансовыйОтчет установлено жесткое условие (фильтр). Документ регистрируется к отправке только в том случае, если в узле плана обмена (конкретной настройке синхронизации на стороне БП) служебное свойство ОтправлятьАвансовыйОтчет (или «Отправлять авансовые отчеты») имеет значение Истина.
По умолчанию при создании типовой синхронизации «УТ — БП» со стороны торговли данный флаг в базе бухгалтерии принимает значение Ложь. Сделано это намеренно: методологи фирмы 1С предполагают, что первичный оперативный учет ведется в торговой базе (УТ), откуда данные выгружаются в БП. Обратная миграция авансовых отчетов из бухгалтерии в торговлю в типовом сценарии отключена, чтобы избежать зацикливания обмена, дублирования документов и затирания оперативных данных в УТ упрощенными проводками из БП. Поскольку этот реквизит является служебным, он скрыт из стандартного пользовательского интерфейса настройки синхронизации, что и вызывает тупик у пользователей.
Рассмотрим по шагам все возможные способы решения этой проблемы.
Это самый простой, быстрый и безопасный способ, который не требует изменения конфигурации или снятия ее с поддержки. Мы включим скрытый признак непосредственно в базе «1С:Бухгалтерия предприятия».
Синхронизация данных через универсальный формат или специализированный план обмена с УТ.Ссылка Равно [Имя вашего узла обмена с УТ].ОтправлятьАвансовыйОтчет).После выполнения этой операции правила регистрации увидят, что отправка разрешена, и документы Авансовый отчет начнут регистрироваться как в автоматическом режиме (при записи), так и при ручном добавлении через обработку регистрации изменений.
Если вы привыкли решать подобные задачи с помощью кода или внешней обработки, мы можем изменить значение этого скрытого реквизита программно. Разберем пример кода, который можно выполнить через консоль кода или внешнюю обработку:
// Определим имя плана обмена для универсального формата
ИмяПланаОбмена = "СинхронизацияДанныхЧерезУниверсальныйФормат";
// Найдем нужный узел обмена по коду или наименованию
УзелОбмена = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду("УТ"); // Укажите код вашего узла
Если ЗначениеЗаполнено(УзелОбмена) Тогда
// Получим объект для редактирования
ОбъектУзла = УзелОбмена.ПолучитьОбъект();
// Установим служебное свойство в Истина
ОбъектУзла.ОтправлятьАвансовыеОтчеты = Истина;
// Запишем изменения в базу данных
ОбъектУзла.Записать();
Сообщить("Свойство 'Отправлять авансовые отчеты' успешно включено для узла: " + УзелОбмена);
Иначе
Сообщить("Не удалось найти указанный узел плана обмена!");
КонецЕсли;
Данный код выполняет ту же операцию, что и групповая обработка, но исключает вероятность ошибочного изменения параметров других узлов.
Существует еще один интересный обходной путь, который не требует работы со служебными реквизитами. При создании настройки синхронизации в БП 3.0 мы можем выбрать шаблон не конкретно «1С:Управление торговлей», а универсальный вариант «Другая программа» (который также работает по технологии Enterprise Data).
При такой настройке система считает получателя абстрактной информационной системой. Как результат, БП не накладывает специфических жестких ограничений, разработанных специально для связки «БП — УТ». Ограничение на регистрацию авансовых отчетов снимается автоматически, и документы начинают свободно регистрироваться и выгружаться. Однако у этого способа есть обратная сторона: могут отключиться и другие полезные фильтры, специфичные для обмена с УТ, поэтому использовать его нужно с осторожностью.
Иногда специалисты успешно включают признак ОтправлятьАвансовыйОтчет, но документы прошлых периодов все равно отказываются регистрироваться. Выясним причину этой проблемы.
В правилах регистрации абсолютно всех типовых обменов 1С заложена проверка даты документа. Система не позволит зарегистрировать к обмену документ, дата которого меньше установленной даты начала синхронизации. Проанализируем, как это исправить:
Для крупных проектов внедрения, где требуется гарантировать, что данная проблема никогда не возникнет снова после обновлений или пересоздания настроек обмена, мы можем отредактировать сами правила регистрации данных.
Для этого необходимо:
Документ.АвансовыйОтчет.ОтправлятьАвансовыйОтчет.Прежде чем запускать регулярный обмен авансовыми отчетами в сторону торговой базы, мы обязаны рассмотреть архитектурные и методологические риски этого решения:
Авансовый отчет является универсальным «комбайном». На его вкладках бухгалтер может одновременно отразить закупку ТМЦ, оплату поставщику, расходы на услуги и суточные. В «1С:Управление торговлей» архитектура оперативного учета сложнее: закупка товаров должна приходоваться документом Приобретение товаров и услуг, оплата поставщику — через закрытие подотчета, а авансовый отчет в УТ часто выступает лишь финальным документом, закрывающим взаиморасчеты с физлицом. При выгрузке сложного документа из БП в УТ велика вероятность получить незаполненные оперативные регистры (например, регистры складских остатков или расчетов с поставщиками).Рекомендация: Оптимальным решением с точки зрения методологии 1С является создание авансовых отчетов исключительно в оперативной базе (УТ 11) с последующей их односторонней трансляцией в регламентированную базу (БП 3.0). Описанные выше методы по принудительному включению регистрации в БП рекомендуется использовать только для разового переноса исторических данных или в специфических схемах учета, где бухгалтерия строго определена как единственное место ввода первичных документов.