Как перенести реквизиты из шапки документа 1С 7.7 в табличную часть 1С 8.3 при конвертации данных

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

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

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

Настройка ПКО и создание виртуальной коллекции через ПКГС

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

Рассмотрим по шагам алгоритм настройки:

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

Проанализируем пример кода для обработчика Перед обработкой в ПКГС:


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

// Добавляем строку и заполняем ее данными из шапки документа 7.7
КоллекцияОбъектов.НоваяСтрока();
КоллекцияОбъектов.ДоговорКонтрагента = Источник.Договор;
КоллекцияОбъектов.СчетУчетаРасчетов = Источник.Счет; // Например, счет 62.1
КоллекцияОбъектов.СуммаПлатежа = Источник.Сумма;
КоллекцияОбъектов.СтавкаНДС = Источник.СтавкаНДС;
КоллекцияОбъектов.СуммаНДС = Источник.СуммаНДС;

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

Проблема со счетами расчетов: почему данные затираются?

Часто возникает ситуация: в правилах всё настроено верно, соответствие счетов прописано, но после загрузки в 8.3 поле Счет расчетов оказывается пустым или заполняется значением по умолчанию. Разберем причину этого поведения.

В конфигурациях 1С 8.3 (особенно в БП 3.0) логика заполнения счетов расчетов жестко зашита в модули объектов. При загрузке документа через стандартную обработку V8Exch83.epf после создания объекта срабатывают стандартные обработчики платформы и конфигурации. Вызов функции типа ЗаполнитьСчетаРасчетов() обращается к регистру сведений «Счета расчетов с контрагентами». Если в этом регистре для данного контрагента и договора прописан счет, он перекроет то значение, которое вы передали из 7.7.

Чтобы решить эту проблему, рассмотрим два подхода:

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

Подход 2: Использование алгоритмов поиска
Проверьте ПКО для Плана счетов. В 1С 7.7 счет 62.1 — это строка или объект с кодом "62.1". В 8.3 это может быть "62.01". Если поиск настроен только по коду и маски кодов не совпадают, счет не будет найден. Выясним, настроено ли ПКО для ПланСчетовСсылка.Хозрасчетный с поиском по коду.

Установка значения перечисления, отсутствующего в источнике

Рассмотрим ситуацию, когда в табличную часть 8.3 нужно передать значение перечисления (например, ВидПлатежа), которого просто не существует в базе 7.7. Настраивать соответствие не из чего, поэтому мы воспользуемся программной установкой.

В правилах конвертации свойств (ПКС) для данного реквизита:

  1. Оставляем поле «Источник» пустым.
  2. В обработчике «Перед выгрузкой» пишем код:

// Указываем имя значения перечисления так, как оно задано в метаданных приемника
Значение = "НаложенныйПлатеж"; 

Если конфигурация-приемник загружена в базу «Конвертации данных», вы также можете выбрать «Фиксированное значение» в настройках ПКС, выбрав нужный элемент перечисления из выпадающего списка. Однако программный метод через Значение = ... является более гибким.

Важность реквизита «Вид операции»

Проанализируем важный нюанс документа «Приходный кассовый ордер» в 8.3. Этот документ является многофункциональным. Его поведение (и состав табличных частей) зависит от реквизита ВидОперации.

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

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


// Для расчетов с контрагентами
Значение = "ПоступлениеОплатыОтПокупателя";

Итоги совместной настройки

Мы выяснили, что для успешной конвертации из 7.7 в 8.3 необходимо:

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

← На главную