Как настроить перенос данных из 1С:Бухгалтерии 2.0 в 1С:Управление торговлей 10.3 через Конвертацию данных?

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

Перенос данных из конфигурации «1С:Бухгалтерия предприятия 2.0» в «1С:Управление торговлей 10.3» является нетиповой задачей, так как стандартный обмен обычно предполагает движение данных в обратном направлении (из торговли в бухгалтерию). При самостоятельной разработке правил обмена в конфигурации «Конвертация данных 2.1» разработчики неизбежно сталкиваются с различиями в структуре метаданных: несовпадением типов справочников, отсутствием реквизитов в источнике, незаполненными флагами учета и ошибками проведения документов по валюте регламентированного учета.

Разберем детально, как решить каждую из этих проблем с помощью обработчиков событий правил конвертации объектов (ПКО).

1. Заполнение реквизитов и единиц измерения справочника «Номенклатура»

В конфигурации «1С:Бухгалтерия предприятия 2.0» учет номенклатуры устроен проще: единица измерения представляет собой ссылку на классификатор, а вид номенклатуры нередко является перечислением или номенклатурной группой. В «1С:Управление торговлей 10.3» структура устроена иначе:

  1. Вид номенклатуры: В УТ 10.3 это отдельный справочник Справочники.ВидыНоменклатуры, определяющий тип (товар, услуга, набор) и параметры ведения учета по сериям и характеристикам.
  2. Единицы измерения: В УТ 10.3 используется двухуровневая модель. Реквизиты ЕдиницаХраненияОстатков, ЕдиницаДляОтчетов и единица в табличной части документов имеют тип СправочникСсылка.ЕдиницыИзмерения (подчиненный справочник с коэффициентом пересчета), а не прямой классификатор ОКЕИ.

Для корректного заполнения справочника Номенклатура при загрузке в УТ 10.3 перейдем в ПКО справочника Номенклатура и добавим в обработчик «После загрузки» следующий программный код:


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

// 2. Формирование базовой единицы измерения
Если Не ЗначениеЗаполнено(Объект.БазоваяЕдиницаИзмерения) Тогда
    Объект.БазоваяЕдиницаИзмерения = КлассификаторЕдиницИзмерения.НайтиПоКоду("796"); // шт
КонецЕсли;

// 3. Создание подчиненного элемента справочника ЕдиницыИзмерения
Если Не ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков) И ЗначениеЗаполнено(Объект.БазоваяЕдиницаИзмерения) Тогда
    СсылкаЕд = Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту("ЕдиницаПоКлассификатору", Объект.БазоваяЕдиницаИзмерения, , Объект.Ссылка);
    
    Если Не ЗначениеЗаполнено(СсылкаЕд) Тогда
        НоваяЕд = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
        НоваяЕд.Владелец = Объект.Ссылка;
        НоваяЕд.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения;
        НоваяЕд.Коэффициент = 1;
        НоваяЕд.Наименование = СокрЛП(Объект.БазоваяЕдиницаИзмерения.Наименование);
        НоваяЕд.Записать();
        СсылкаЕд = НоваяЕд.Ссылка;
    КонецЕсли;
    
    Объект.ЕдиницаХраненияОстатков = СсылкаЕд;
    Объект.ЕдиницаДляОтчетов       = СсылкаЕд;
    Объект.ЕдиницаМест             = СсылкаЕд;
КонецЕсли;

2. Автоматическая простановка флагов отражения документов в учете

В документах поступления и реализации в УТ 10.3 предусмотрены флаги управленческого, бухгалтерского и налогового учета: ОтражатьВУправленческомУчете, ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете. Если они не установлены, документ не сформирует движений по соответствующим регистрам накопления при проведении.

Чтобы исключить ручное проставление этих флагов пользователем, настроим их автоматическое заполнение в ПКО документа (например, ПоступлениеТоваровУслуг) в обработчике «После загрузки»:


// Включение признаков отражения документа в видах учета
Объект.ОтражатьВУправленческомУчете = Истина;
Объект.ОтражатьВБухгалтерскомУчете   = Истина;
Объект.ОтражатьВНалоговомУчете        = Истина;

// Заполнение единиц измерения в табличной части Товары
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
    Если Не ЗначениеЗаполнено(СтрокаТЧ.ЕдиницаИзмерения) И ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда
        СтрокаТЧ.ЕдиницаИзмерения = СтрокаТЧ.Номенклатура.ЕдиницаХраненияОстатков;
        СтрокаТЧ.Коэффициент      = 1;
    КонецЕсли;
КонецЦикла;

3. Устранение ошибки несовпадения валюты документа и валюты рег. учета

Частая ситуация при переносе документов: валюта в документе заполнена (указан рубль), справочник валют не задвоен, однако при попытке проведения возникает ошибка: «Валюта документа отличается от валюты регл. учета». При этом интерактивный перевыбор той же самой валюты в форме документа решает проблему.

Проанализируем причину такого поведения. В УТ 10.3 проведение документа зависит не только от реквизита ВалютаДокумента, но и от сопутствующих реквизитов: КурсДокумента, КратностьДокумента, КурсВзаиморасчетов, КратностьВзаиморасчетов. При программной загрузке через правила обмена эти поля остаются равными 0, если они не были сопоставлены в ПКС. При интерактивном перевыборе валюты форма автоматически вызывает процедуры пересчета и заполняет курсы из регистра сведений КурсыВалют.

Для полного решения проблемы необходимо в обработчике «После загрузки» документа явно инициализировать валюту регламентированного учета и установить единичные коэффициенты для рублевых расчетов:


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

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

// Инициализация обязательных курсов и кратностей документа
Если Объект.ВалютаДокумента = ВалютаРег Тогда
    Объект.КурсДокумента             = 1;
    Объект.КратностьДокумента        = 1;
    Объект.КурсВзаиморасчетов        = 1;
    Объект.КратностьВзаиморасчетов   = 1;
Иначе
    // Если документ в иностранной валюте, получаем актуальный курс на дату документа
    СтруктураКурса = МодульВалютногоУчета.ПолучитьКурсВалюты(Объект.ВалютаДокумента, Объект.Дата);
    Объект.КурсДокумента      = СтруктураКурса.Курс;
    Объект.КратностьДокумента = СтруктураКурса.Кратность;
    
    // Аналогично для валюты договора взаиморасчетов
    Если ЗначениеЗаполнено(Объект.ДоговорКонтрагента) Тогда
        СтруктураКурсаВзаиморасчетов = МодульВалютногоУчета.ПолучитьКурсВалюты(Объект.ДоговорКонтрагента.ВалютаВзаиморасчетов, Объект.Дата);
        Объект.КурсВзаиморасчетов      = СтруктураКурсаВзаиморасчетов.Курс;
        Объект.КратностьВзаиморасчетов = СтруктураКурсаВзаиморасчетов.Кратность;
    КонецЕсли;
КонецЕсли;

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

← На главную