Перенос начальных остатков — одна из самых ответственных задач при переходе с одной конфигурации на другую или при настройке обмена. Часто стандартная синхронизация 1С:Управление торговлей 11 (УТ 11) и 1С:Бухгалтерия предприятия 3.0 (БП 3.0) не закрывает потребность в переносе документов ввода остатков, так как она ориентирована на текущий документооборот. В таких случаях мы прибегаем к использованию Конвертации данных 2.0 (КД 2.0). Рассмотрим типичную проблему: при переносе документа ввода остатков задолженности поле Договор в целевой базе остается пустым, хотя сами договоры успешно создаются.
Проанализируем структуру данных в источнике. В современных редакциях УТ 11.4 учет взаиморасчетов устроен сложнее, чем в старых версиях или в БП 3.0. В документе ввода остатков (например, при вводе задолженности клиента) поле Договор может быть визуально доступно на форме, но физически в данных объекта оно часто не заполнено. Это связано с тем, что основным разрезом учета выступает ОбъектРасчетов.
Объект расчетов — это составной тип данных, который может содержать ссылку на:
Если в правилах конвертации свойств (ПКС) в качестве источника указано поле Договор, а в базе УТ оно не заполнено (так как данные хранятся в ОбъектРасчетов), то в приемник (БП 3.0) придет пустое значение. Разберем шаги по исправлению этой ситуации.
Первым делом нам необходимо изменить сопоставление свойств в правиле конвертации объектов (ПКО) для документа ввода остатков. Вместо того чтобы пытаться выгружать пустое поле Договор, мы обратимся к полю ОбъектРасчетов.
В конфигурации «Конвертация данных» найдем соответствующее ПКО и в таблице ПКС для свойства Договор (приемник) укажем источник ОбъектРасчетов. Однако простого сопоставления недостаточно, так как типы данных могут не совпадать. Нам потребуется написать небольшой программный обработчик.
Рассмотрим ситуацию, когда ОбъектРасчетов в УТ является заказом или накладной, а в БП нам в любом случае нужен договор. Нам нужно программно «вытащить» договор из этого объекта. В ПКС для свойства Договор в обработчике Перед выгрузкой напишем следующий код:
// Проверяем, что объект расчетов заполнен
Если ЗначениеЗаполнено(Источник.ОбъектРасчетов) Тогда
// Если это уже договор, КД сама справится с конвертацией
Если ТипЗнч(Источник.ОбъектРасчетов) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
Значение = Источник.ОбъектРасчетов;
// Если это заказ или реализация, пытаемся получить договор из документа
ИначеЕсли (ТипЗнч(Источник.ОбъектРасчетов) = Тип("ДокументСсылка.ЗаказКлиента"))
ИЛИ (ТипЗнч(Источник.ОбъектРасчетов) = Тип("ДокументСсылка.РеализацияТоваровУслуг")) Тогда
// В УТ 11 у документов обычно есть реквизит Договор
Значение = Источник.ОбъектРасчетов.Договор;
Иначе
// Если тип неопределен или это сам ввод остатков,
// возможно, придется искать договор по умолчанию или создавать его
Значение = Неопределено;
КонецЕсли;
КонецЕсли;
// Если в итоге значение пустое, можно подставить договор по умолчанию
Если НЕ ЗначениеЗаполнено(Значение) Тогда
// Здесь может быть логика поиска основного договора контрагента
КонецЕсли;
Проанализируем еще одну частую проблему: договор переносится, но не подставляется в документ. Это происходит, когда система не может однозначно сопоставить договор в приемнике. В 1С ДоговорыКонтрагентов — это справочник, подчиненный контрагенту и организации. Если поиск настроен только по наименованию или только по внутреннему идентификатору (GUID), возможны ошибки.
Выполним следующие настройки в ПКО ДоговорыКонтрагентов:
Владелец (Контрагент), Организация и Наименование (или Номер) установлены флаги Поиск.ПоляПоиска. Иногда там избыточно переопределяется логика, которая обнуляет результат при несовпадении какого-то второстепенного реквизита.Разберем важный нюанс учета в Бухгалтерии предприятия. В БП 3.0 документ ввода остатков требует заполнения не только договора, но и ссылки на документ расчетов, если на счете учета (например, 62.01 или 60.01) настроено субконто Документы расчетов с контрагентами.
Если мы переносим ОбъектРасчетов из УТ как Договор, мы теряем детализацию по накладным. В идеальном сценарии нам нужно:
Договор.ОбъектРасчетов (если это накладная) перенести в поле ДокументРасчетов, используя специальное ПКО для создания технического документа ДокументРасчетовСКонтрагентом в БП 3.0.Посмотрим на ситуацию со стороны COM-соединения или выгрузки в файл. Если вы используете выгрузку через файл, убедитесь, что в правилах выгрузки данных (ПВД) документ ввода остатков включен и для него не стоят фильтры, отсекающие связанные объекты.
Если договор создается в процессе загрузки документа («по ссылке»), проверьте, заполнено ли поле Правило конвертации в ПКС для договора. Если оставить его пустым, КД 2.0 будет пытаться подобрать правило автоматически. Для составного типа ОбъектРасчетов это может привести к тому, что система выберет не то ПКО, и объект не будет создан корректно.
Для успешного переноса остатков задолженности с корректным заполнением договоров выполним следующие действия:
ОбъектРасчетов.ОбъектРасчетов и добавим код в обработчик «Перед выгрузкой» для извлечения ссылки на договор из заказов и реализаций.Владелец + Организация + Номер/Наименование.Значение перед выгрузкой.Использование этих методов позволит избежать ручного дозаполнения документов после переноса и обеспечит целостность бухгалтерского учета в новой базе.