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