При интеграции баз 1С:ERP Управление предприятием и 1С:Бухгалтерия предприятия (БП 3.0) нередко возникает ошибка проведения входящих счетов-фактур с кодом вида операции (КВО) 27 («Сводный комиссионный счет-фактура»). Документ, успешно проведенный в исходной конфигурации ERP, отказывается проводиться в бухгалтерии, вызывая ошибку записи в регистр сведений Журнал учета счетов-фактур. Разберем механизм возникновения этой ошибки и способы ее устранения.
Проанализируем техническую сторону вопроса. В соответствии с Постановлением Правительства РФ № 1137 код 27 применяется комитентами (принципалами) при регистрации сводных счетов-фактур, полученных от агентов или комиссионеров, приобретавших товары или услуги у нескольких фактических продавцов. Каждая позиция по конечному поставщику должна фиксироваться в журнале учета счетов-фактур обособленно со своими реквизитами.
В конфигурации 1С:Бухгалтерия ключевыми измерениями регистра сведений ЖурналУчетаСчетовФактур являются Организация, СчетФактура и ИндексСтроки. Для уникальности каждой строки набора записей измерение ИндексСтроки должно содержать уникальный числовой идентификатор (0, 1, 2 и так далее).
В ERP при проведении сводного счета-фактуры формируется N+1 записей с инкрементом индекса. Однако при загрузке документа в БП типовой запрос проведения формирует для всех строк жестко фиксированное значение:
0 КАК ИндексСтроки
В результате СУБД пытается записать в регистр несколько строк с абсолютно одинаковым набором измерений, что приводит к системной ошибке нарушения уникальности ключа записи регистра сведений. Выясним, почему типовой алгоритм 1С подставляет ноль вместо динамического индекса.
Алгоритм проведения документа СчетФактураПолученный в 1С:Бухгалтерии динамически выбирает ветку запроса в зависимости от реквизита ВидДоговора в карточке договора с контрагентом:
0 КАК ИндексСтроки. При наличии нескольких строк в табличной части продавцов происходит коллизия ключей.
ТабличнаяЧасть.НомерСтроки - 1 КАК ИндексСтроки
Чаще всего при синхронизации через универсальный формат обмена (EnterpriseData) договор комиссионера автоматически создается или сопоставляется со стандартным видом «С поставщиком». В результате документ загружается с неверным контекстом договора, из-за чего падает при проведении.
Если договор уже использовался в проводках, штатный интерфейс карточки договора блокирует редактирование поля Вид договора. Исправим это системным инструментом:
Договоры контрагентов.С комиссионером (агентом) на закупку.Счет-фактура полученный и проведем его.Если прямое изменение существующего договора нежелательно из-за закрытых периодов или регламентов учета, разберем альтернативный порядок действий:
ЖурналУчетаСчетовФактур сформируется корректно без дублирования измерений.В ситуациях, когда структуру договоров трогать нельзя, а данные поступают регулярно, доработаем логику проведения документа с помощью расширения без снятия конфигурации с поддержки.
Перехватим процедуру формирования движений документа СчетФактураПолученный с помощью аннотации &Вместо или &После в модуле объекта (или специализированном общем модуле проведения). В тексте запроса формирования движений по регистру сведений ЖурналУчетаСчетовФактур заменим константный ноль на вычисление номера строки:
// В части запроса, собирающей данные по продавцам сводного счета-фактуры:
ВЫБОР
КОГДА ТаблицаПродавцов.НомерСтроки ЕСТЬ NULL ТОГДА 0
ИНАЧЕ ТаблицаПродавцов.НомерСтроки - 1
КОНЕЦ КАК ИндексСтроки
Такой подход гарантирует создание уникальных записей по каждому продавцу в регистре независимо от того, какой вид договора был ошибочно указан при переносе данных.