При настройке или регулярном выполнении обмена данными между конфигурациями «1С:Бухгалтерия предприятия» и «1С:Управление торговлей» пользователи нередко сталкиваются с ситуацией, когда документ СписаниеСРасчетногоСчета перестает отображаться в отчете «Структура подчиненности» (связанные документы) для исходного документа ПлатежноеПоручение. Разберем причины возникновения этой проблемы и рассмотрим способы ее устранения.
Проанализируем работу механизма связанных документов платформы «1С:Предприятие 8». Дерево подчиненности строится динамически на основе метаданных — специального объекта конфигурации КритерийОтбора с именем СвязанныеДокументы. В его состав включены реквизиты различных документов, хранящие ссылки на родительские объекты (чаще всего это реквизит ДокументОснование).
Если после синхронизации документ выпадает из дерева подчиненности, это означает, что физическое значение в реквизите ДокументОснование было очищено или перезаписано. Выясним основные причины:
ДокументОснование передается пустым и затирает ссылку на платежное поручение, введенное ранее в «1С:Бухгалтерии».Если количество разорванных связей невелико, рассмотрим типовой вариант исправления без доработки конфигурации с помощью встроенной обработки платформы.
Списание с расчетного счета.ДокументОснование) и укажем ссылку на соответствующее Платежное поручение.Когда документов много, заполнять реквизит вручную неэффективно. Напишем алгоритм сопоставления списаний и платежных поручений по ключевым реквизитам: организации, банковскому счету, контрагенту, номеру и дате.
Посмотрим на пример программного кода для пакетного восстановления:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Списание.Ссылка КАК ДокументСписание,
| Платежка.Ссылка КАК ДокументОснование
|ИЗ
| Документ.СписаниеСРасчетногоСчета КАК Списание
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручение КАК Платежка
| ПО Списание.Организация = Платежка.Организация
| И Списание.БанковскийСчет = Платежка.БанковскийСчет
| И Списание.Контрагент = Платежка.Контрагент
| И Списание.СуммаДокумента = Платежка.СуммаДокумента
| И Списание.НомерВходящегоДокумента = Платежка.Номер
|ГДЕ
| Списание.ДокументОснование = ЗНАЧЕНИЕ(Документ.ПлатежноеПоручение.ПустаяСсылка)
| И Списание.Проведен = ИСТИНА";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.ДокументСписание.ПолучитьОбъект();
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.ДокументОснование = Выборка.ДокументОснование;
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Обратим внимание: использование флага ОбменДанными.Загрузка = Истина позволяет записать исправленный реквизит без повторного проведения документа и смещения границы последовательности расчетов.
Рассмотрим особенности синхронизации по универсальному формату (EnterpriseData). Логика сопоставления и загрузки данных описана в общем модуле МенеджерОбменаЧерезУниверсальныйФормат, а правила формируются с помощью конфигурации «1С:Конвертация данных 3.0» на базе XDTO-пакетов.
Чтобы реквизит не очищался при каждой последующей синхронизации, необходимо доработать правила обработки данных с помощью механизма расширений конфигурации:
СписаниеСРасчетногоСчета.ДокументОснование уже содержит ссылку на ПлатежноеПоручение, а из источника приходит пустое значение, алгоритм должен сохранять текущую ссылку и не перезаписывать ее пустым значением.Такой подход защитит цепочки связанных документов от разрушения при повторных сеансах информационного обмена.