Как перенести нетиповой документ из 1С 7.7 в документ «Операция (бухгалтерский учет)» 1С 8.3 через Конвертацию данных 2.1

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

Перенос данных из устаревших конфигураций 1С 7.7 в современные системы на платформе 8.3 — задача частая, но требующая понимания архитектурных различий систем. Одной из наиболее сложных задач является перенос проводок нетиповых документов. Часто разработчики пытаются сопоставить документ со справочником ТиповыеОперации, однако это архитектурная ошибка. Давайте разберем, как правильно реализовать перенос данных, чтобы в целевой базе 1С 8.3 создавался документ ОперацияБух с корректными движениями в регистре бухгалтерии.

Различие в подходах: почему не Справочник?

Прежде всего, проанализируем разницу между объектами. В 1С 8.3 Справочник.ТиповыеОперации — это всего лишь шаблон, который помогает пользователю вручную заполнить документ. Он не формирует движений в учете. Для того чтобы данные отразились на счетах бухгалтерского учета (в регистре Хозрасчетный), нам необходимо создать именно Документ.ОперацияБух. Этот документ специфичен тем, что не имеет привычных табличных частей для проводок внутри себя — все его данные хранятся непосредственно в движениях регистра.

Шаг 1. Подготовка ПКО для документа «ОперацияБух»

В конфигурации Конвертация данных 2.1 создадим новое Правило Конвертации Объектов (ПКО). В качестве источника укажем наш нетиповой документ из 1С 7.7, а в качестве приемника — ДокументСсылка.ОперацияБух.

Основные реквизиты, такие как Дата, Номер, Организация, Содержание, сопоставляются стандартным образом. Однако главная сложность заключается в выгрузке самих проводок. В 1С 7.7 проводки привязаны к объекту Операция, который не является табличной частью в понимании КД. Поэтому мы будем использовать механизм ВходящиеДанные.

Шаг 2. Сбор проводок в 1С 7.7 (Обработчик «Перед выгрузкой»)

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


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

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

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

Шаг 3. Настройка ПКС для коллекции движений

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

Выполним следующие настройки для этого ПКС:

  1. Установим флаг «Получать из входящих данных».
  2. В качестве источника данных укажем имя нашей таблицы — ТаблицаПроводок.
  3. Внутри этой группы создадим подчиненные ПКС для каждого реквизита проводки (СчетДт, СчетКт, Сумма, СубконтоДт и т.д.).

Шаг 4. Обработка аналитики (Субконто)

Это самый ответственный этап. В 1С 7.7 субконто — это просто массив (1, 2, 3), а в 1С 8.3 — это коллекция, где каждое значение привязано к конкретному ВидуСубконто.

Разберем ситуацию: если на счете в 7.7 «Контрагенты» — это Субконто1, а в 8.3 на аналогичном счете они стали Субконто2, нам нужно программно переопределить соответствие. В обработчике ПКС Перед выгрузкой для конкретных полей субконто в 8.3 мы можем прописать логику сопоставления типов.

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

Шаг 5. Обеспечение записи движений

Документ ОперацияБух в 1С 8.3 не имеет модуля проведения в обычном смысле. Движения должны записываться вместе с документом. Чтобы гарантировать появление проводок в целевой базе, в ПКО документа ОперацияБух на стороне 1С 8.3 в обработчике После загрузки необходимо убедиться в установке флага записи:


Объект.ЗаписыватьДвижения = Истина;
// Если используется сложная логика, можно принудительно записать набор записей
// Объект.Движения.Хозрасчетный.Записывать = Истина;

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

Резюме по решению

Проанализировав ситуацию, мы выяснили, что прямой перенос «документ в документ» через стандартные реквизиты невозможен из-за различий в хранении проводок. Использование ВходящиеДанные — это наиболее «чистый» и профессиональный способ решения задачи. Мы собираем данные из объекта Операция в 7.7, упаковываем их в таблицу и передаем в коллекцию движений регистра Хозрасчетный в 8.3. Это позволяет избежать создания «костылей» в виде дополнительных обработок и использовать всю мощь типового функционала Конвертации данных.

← На главную