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