Как правильно перенести договоры контрагентов из УПП 1.3 в Бухгалтерию 3.0 с помощью Конвертации данных 2.1

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

Перенос данных между существенно различающимися конфигурациями, такими как УПП 1.3 (на обычных формах) и Бухгалтерия предприятия 3.0 (на управляемых формах), часто ставит перед разработчиком неочевидные задачи. Одной из таких задач является корректная конвертация справочника ДоговорыКонтрагентов, особенно в части валютного учета. В современных версиях БП 3.0 логика работы с валютами значительно усложнилась по сравнению со старыми конфигурациями.

В этой статье мы подробно разберем, как настроить правила конвертации данных (КД 2.1), чтобы договоры переносились корректно, документы по ним проводились без ошибок «счета не валютные», а пользователи видели на формах привычные переключатели.

Разбираем логику валютных реквизитов в БП 3.0

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

  1. ВалютаВзаиморасчетов — ссылка на справочник Валюты.
  2. ОплатаВВалюте (тип Булево) — определяет, происходит ли фактическая оплата валютой.
  3. РасчетыВУсловныхЕдиницах (тип Булево) — определяет, является ли договор договором в «у.е.».

Рассмотрим три стандартные ситуации, которые нам нужно воспроизвести при переносе:

Настройка ПКС для реквизита ОплатаВВалюте

Выясним причину, по которой обычный перенос не работает. В УПП реквизита ОплатаВВалюте просто не существует. Поэтому в ПКС (Правилах конвертации свойств) для этого реквизита в качестве источника мы оставляем пустое значение, а логику прописываем программно.

Посмотрим на пример кода, который можно разместить в обработчике ПередВыгрузкой для ПКС ОплатаВВалюте:


// Проверяем валюту в источнике (УПП)
Если СокрЛП(Источник.ВалютаВзаиморасчетов.Код) = "643" Тогда
    Значение = Ложь;
ИначеЕсли Источник.РасчетыВУсловныхЕдиницах Тогда
    Значение = Ложь;
Иначе
    Значение = Истина;
КонецЕсли;

Однако более надежным способом будет проверка в базе-приемнике. Разберем, как это сделать в обработчике ПослеЗагрузки ПКО (Правила конвертации объекта) ДоговорыКонтрагентов.

Использование обработчика ПослеЗагрузки

Проанализируем ситуацию: при загрузке в БП 3.0 у нас уже есть доступ к объекту-приемнику и ко всем константам базы. Мы можем сравнить валюту договора с валютой регламентированного учета.


// В обработчике ПослеЗагрузки ПКО ДоговорыКонтрагентов
ВалютаРегл = Константы.ВалютаРегламентированногоУчета.Получить();

Если Объект.ВалютаВзаиморасчетов = ВалютаРегл Тогда
    Объект.ОплатаВВалюте = Ложь;
    Объект.РасчетыВУсловныхЕдиницах = Ложь;
Иначе
    // Если это не рубли, проверяем, не является ли это договором в у.е.
    // Если в УПП стоял флаг у.е., переносим его
    Если Объект.РасчетыВУсловныхЕдиницах Тогда
        Объект.ОплатаВВалюте = Ложь;
    Иначе
        Объект.ОплатаВВалюте = Истина;
    КонецЕсли;
КонецЕсли;

Обратите внимание на реквизит формы ОплатаВРублях, который часто путает разработчиков. Это не реквизит объекта, а вычисляемое поле на форме. В коде конфигурации БП 3.0 оно напрямую связано с реквизитом РасчетыВУсловныхЕдиницах. Если вы правильно заполните РасчетыВУсловныхЕдиницах, форма отобразится корректно.

Проблема «второго рубля» и дублей валют

Часто при переносе возникает ошибка, когда в справочнике Валюты создается еще один «рубль» (например, с кодом 810 вместо 643 или наоборот). Это критично, так как сравнение с константой ВалютаРегламентированногоУчета начнет выдавать неверный результат, и счета в документах не будут подставляться.

Рассмотрим, как этого избежать:

  1. В ПКО для справочника Валюты установите поиск только по полю Код.
  2. В обработчике ПоляПоиска для валют пропишите алгоритм сопоставления кодов 810 и 643, если в базах они различаются.
  3. Убедитесь, что в ПКС для ВалютаВзаиморасчетов не стоит флаг «Искать объект приемника по внутреннему идентификатору источника», если базы создавались независимо.

Решение ошибки «Счета не валютные» при проведении

Если после переноса договоров документы (например, ПоступлениеТоваровУслуг) не проводятся, ругаясь на то, что «счета учета не являются валютными», проанализируем состояние регистра сведений СчетаУчетаРасчетовСКонтрагентами.

В БП 3.0 счета подставляются автоматически исходя из вида договора и валюты. Если вы перенесли договор как валютный, но в документе остались счета 60.01/62.01, система выдаст ошибку. Рекомендуется в ПКО договора в обработчике ПослеЗагрузки вызвать стандартную процедуру заполнения счетов учета, если она доступна в контексте или если вы выполняете перенос через обработку «Универсальный обмен данными XML».

Фильтрация данных по организации

Разберем еще один важный вопрос: как переносить документы и справочники только по одной конкретной организации?

Самый эффективный способ — использовать параметры выгрузки. Рассмотрим пошагово:

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

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Ссылка
    |ИЗ
    |   Документ.РеализацияТоваровУслуг
    |ГДЕ
    |   Организация = &Организация";

Запрос.УстановитьПараметр("Организация", Параметры.ОрганизацияДляВыгрузки);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    ВыгрузитьПоПравилу(Выборка.Ссылка);
КонецЦикла;

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

Подведем итог: для успешного переноса договоров из УПП в БП 3.0 необходимо четко понимать триггеры валютного учета в приемнике (ОплатаВВалюте и РасчетыВУсловныхЕдиницах), следить за уникальностью кодов валют и использовать программные обработчики для заполнения отсутствующих в источнике реквизитов.

← На главную