Как настроить поиск контрагента по ИНН/КПП и заполнение счетов учета в Конвертации данных 2.1

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

При настройке правил обмена в конфигурации «Конвертация данных 2.1» разработчики часто сталкиваются с ситуацией, когда справочники сопоставляются некорректно либо не заполняются счета учета в табличных частях переносимых документов. Разберем по шагам типовые ошибки при переносе документов между конфигурациями (например, из КА 1.1 в БП 3.0), выясним причины сбоя поиска по реквизитам и рассмотрим правильные варианты заполнения счетов учета.

1. Ошибки сопоставления контрагентов по ИНН/КПП и флаг «Приводить к длине»

Когда мы настраиваем правило конвертации объекта (ПКО) для поиска контрагента по ИНН и КПП без использования уникального идентификатора (GUID), стандартная настройка включает флаги «Искать объект приемника по свойствам поиска» для соответствующих полей. Однако контрагент в приемнике может не находиться даже при визуальном совпадении данных.

Проанализируем основную причину: в настройках ПКС реквизита ИНН или КПП часто ошибочно устанавливают флаг «Приводить к длине». При включении этого флага механизм КД 2.1 автоматически дополняет строку слева лидирующими нулями до максимальной длины поля приемника. Если длина поля в источнике и приемнике различается (или для 10-значного ИНН юрлица применяется формат 12-значного ИНН физлица), строковые значения перестают совпадать.

Чтобы восстановить корректный поиск, выполним следующие действия:

  1. Откроем ПКО справочника Контрагенты.
  2. В таблице свойств (ПКС) найдем строки ИНН и КПП.
  3. Снимем флаг «Приводить к длине» у обоих реквизитов.
  4. Убедимся, что для ПКО отключен поиск по внутреннему идентификатору (GUID), если требуется находить только по реквизитам.
  5. Для исключения проблем со скрытыми неразрывными пробелами в ПКС реквизита ИНН в обработчике «ПередВыгрузкой» добавим очистку строки:

Значение = СтрЗаменить(СокрЛП(Источник.ИНН), Символы.НПП, "");

2. Тонкая настройка поиска: обработка пустого КПП и исключение удаленных объектов

Стандартный алгоритм КД 2.1 формирует запрос ко всем полям поиска по условию строгого равенства. Если у контрагента (например, ИП) КПП не заполнен, сравнение пустой строки и отсутствующего значения может не дать результата. Кроме того, поиск может случайно захватить помеченный на удаление дубль.

Для гарантированного сопоставления используем обработчик ПКО «ПоляПоиска» базы-приемника. Рассмотрим два варианта реализации:

Вариант А. Динамическое изменение состава полей поиска:


Если Не ЗначениеЗаполнено(СвойстваПоиска["КПП"]) Тогда
    СтрокаИменСвойствПоиска = "ИНН";
КонецЕсли;

Вариант Б. Ручной запрос на поиск активного контрагента:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |	Контрагенты.Ссылка КАК Ссылка
    |ИЗ
    |	Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |	Контрагенты.ИНН = &ИНН
    |	И (&КПП = """" ИЛИ Контрагенты.КПП = &КПП)
    |	И НЕ Контрагенты.ПометкаУдаления";

Запрос.УстановитьПараметр("ИНН", СвойстваПоиска["ИНН"]);
Запрос.УстановитьПараметр("КПП", ?(СвойстваПоиска["КПП"] = Неопределено, "", СвойстваПоиска["КПП"]));

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    СсылкаНаОбъект = Выборка.Ссылка;
    ПрекратитьПоиск = Истина;
КонецЕсли;

3. Особенности выгрузки подчиненных документов (Счет-фактура и Реализация)

Если при переносе первыми выгружаются счета-фактуры, а документ РеализацияТоваровУслуг переносится как подчиненный объект (документ-основание), в базе-приемнике реализация может создаться не полностью (например, с пустым контрагентом). Если в настройках ПКС документа включен флаг «Не замещать значение существующих объектов», то при последующей загрузке самой реализации пустые реквизиты не перезапишутся.

Разберем правила правильной настройки выгрузки связанных документов:

  1. В правилах выгрузки данных (ПВД) настроим строгий порядок: сначала должны выгружаться документы-основания (Реализации), а затем зависимые документы (Счета-фактуры).
  2. Для документа реализации в ключевые поля поиска обязательно включаем комбинацию: Дата, Номер, Организация. Поиск только по номеру и дате в многофирменной базе неизбежно приведет к перезаписи чужих документов.

4. Способы заполнения счетов учета в табличной части реализации

Попытка обратиться к плану счетов через ПланыСчетов.Хозрасчетный.НайтиПоКоду(...) в обработчиках ПКС «ПередВыгрузкой» или «ПриВыгрузке» приводит к ошибкам, так как эти обработчики выполняются в контексте базы-источника (где структура и состав счетов могут отличаться от БП 3.0). Кроме того, в ПКС отсутствует событие «ПриЗагрузке».

Рассмотрим два надежных способа простановки счетов учета в базе-приемнике:

Способ 1. Автоматическое заполнение по правилам конфигурации приемника (рекомендуемый)

В конфигурации «Бухгалтерия предприятия 3.0» предусмотрены типовые механизмы определения счетов по регистру сведений «Счета учета номенклатуры». В ПКО документа в обработчике «ПослеЗагрузки» вызываем типовую процедуру заполнения:


БухгалтерскийУчетПереопределяемый.ЗаполнитьСчетаУчетаВТабличнойЧасти(Объект, "Товары");
БухгалтерскийУчетПереопределяемый.ЗаполнитьСчетаУчетаВТабличнойЧасти(Объект, "Услуги");

Способ 2. Программная установка фиксированных счетов в обработчике «ПослеЗагрузки»

Если счета учета необходимо жестко зафиксировать, в ПКО документа переходим в обработчик «ПослеЗагрузки» и обходим строки табличной части уже загруженного объекта:


СчетДоходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
СчетРасходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
СчетНДС = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03");

Для Каждого Стр Из Объект.Товары Цикл
    Стр.СчетДоходов = СчетДоходов;
    Стр.СчетРасходов = СчетРасходов;
    Стр.СчетУчетаНДСПоРеализации = СчетНДС;
КонецЦикла;

При таком подходе не требуется создавать лишние ПКС для каждого счета табличной части, а поиск элементов плана счетов выполняется непосредственно в базе-приемнике.

← На главную