Как автоматически подставлять счета учета и устранить ошибку валюты при выгрузке документов в 1С:Бухгалтерию 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При настройке правил обмена данными между конфигурациями (например, при переносе документов реализации из 1С:Управление торговлей в 1С:Бухгалтерию предприятия 3.0 через правила конвертации) разработчики часто сталкиваются с двумя типовыми проблемами. Во-первых, незаполненные счета учета в табличной части Товары. Во-вторых, ошибка проведения документа вида «Поле "Договор" заполнено некорректно. Валюта документа () отличается от валюты регламентированного учета...». Рассмотрим подробно, почему возникают эти ситуации и как их правильно решить.

Автоматическая подстановка счетов учета в табличной части

В конфигурациях прошлых поколений (например, Бухгалтерия предприятия 2.0) для программного пересчета счетов использовалась процедура ЗаполнитьСчетаУчетаВТабЧасти(). В 1С:Бухгалтерии 3.0 архитектура изменилась. Выделим основные способы подстановки счетов учета:

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

Причина ошибки «Валюта документа () отличается от валюты...»

Проанализируем ситуацию с проведением загруженного документа. Ошибка вида Валюта документа () отличается от валюты регламентированного учета (руб.) и валюты расчетов по договору... указывает на то, что реквизит ВалютаДокумента (или Валюта) остался незаполненным (имеет значение ПустаяСсылка или Неопределено).

Разберем, почему при интерактивной работе в форме документа ошибка не появляется, а при загрузке через обмен — возникает:

  1. При интерактивном выборе договора на форме документа автоматически срабатывают события формы, которые заполняют реквизит ВалютаДокумента из реквизита договора ВалютаВзаиморасчетов или из константы регламентированного учета.
  2. При фоновой или программной загрузке объектов через правила обмена события формы не вызываются. Если реквизит ВалютаДокумента не был явно передан из базы-источника или не инициализирован в коде правил, он остается пустым.
  3. Механизм проверки проведения в БП 3.0 жестко сверяет три параметра: ВалютаДокумента, ВалютаВзаиморасчетов договора и ВалютаРегламентированногоУчета. Пустое значение приводит к блокировке проведения.

Способы исправления ошибки с валютой документа

Выясним, как правильно прописать заполнение реквизита валюты в правилах конвертации объектов (ПКО) для загружаемого документа.

Вариант 1. Заполнение валюты из выбранного договора
В обработчике ПослеЗагрузки правила конвертации документа подставим валюту расчетов из привязанного договора контрагента:


Если ЗначениеЗаполнено(Объект.ДоговорКонтрагента) Тогда
    Объект.ВалютаДокумента = Объект.ДоговорКонтрагента.ВалютаВзаиморасчетов;
КонецЕсли;

Вариант 2. Заполнение валютой регламентированного учета
Если документ оформляется в национальной валюте, можно напрямую обратиться к константе базы-приемника:


Если НЕ ЗначениеЗаполнено(Объект.ВалютаДокумента) Тогда
    Объект.ВалютаДокумента = Константы.ВалютаРегламентированногоУчета.Получить();
КонецЕсли;

Вариант 3. Проверка поиска договора и исключение дублей валют
Посмотрим на дополнительные критические настройки, которые необходимо проверить при синхронизации данных:

← На главную