Как настроить перенос остатков из 1С 7.7 в 1С 8.3 с помощью Конвертации данных 2.1?

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

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

Шаг 1. Формирование бухгалтерских итогов в 1С 7.7 (обработчик ПВД)

Для выгрузки остатков создадим правило выгрузки данных (ПВД) со способом выгрузки Произвольный алгоритм. В обработчике «Перед обработкой» выполним запрос к итогам 1С 7.7 и соберем данные в таблицу значений.

Рассмотрим пример формирования остатков по счету 41.1 в разрезе номенклатуры и мест хранения:


ДатаВводаОстатков = Дата(2016, 12, 31);

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("СчетУчета");
ТЗ.НоваяКолонка("Склад");
ТЗ.НоваяКолонка("Номенклатура");
ТЗ.НоваяКолонка("Количество");
ТЗ.НоваяКолонка("Сумма");

Счет = СчетПоКоду("41.1");
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Номенклатура,, 1);
БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,, 1);
БИ.ВыполнитьЗапрос(ДатаОкончания, ДатаОкончания, Счет);

БИ.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока БИ.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл
    БИ.ВыбратьСубконто(ВидыСубконто.МестаХранения);
    Пока БИ.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл
        ТЗ.НоваяСтрока();
        ТЗ.СчетУчета = БИ.Счет;
        ТЗ.Склад = БИ.Субконто(ВидыСубконто.МестаХранения);
        ТЗ.Номенклатура = БИ.Субконто(ВидыСубконто.Номенклатура);
        ТЗ.Количество = БИ.СКД("К");
        ТЗ.Сумма = БИ.СКД("С");
    КонецЦикла;
КонецЦикла;

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

// Передаем структуру в качестве входящих данных
ВыгрузитьПоПравилу(, , СтруктураДокумента, , "ВводНачальныхОстатков41");

Шаг 2. Обязательное обновление модуля выгрузки v77exp.ert

Распространенная ошибка при работе с КД 2.1 и источником на платформе 7.7 — изменение только XML-файла правил. В платформе 7.7 весь исполняемый код обработчиков не компилируется «на лету» из XML, а должен быть жестко внедрен в модуль обработки выгрузки.

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

  1. При выгрузке правил из конфигурации «Конвертация данных» сохраняем не только XML-файл обмена, но и файл модуля выгрузки (отдельное поле для сохранения текстового файла в диалоге КД).
  2. Открываем в конфигураторе 1С 7.7 обработку v77exp.ert.
  3. Полностью заменяем текст в модуле формы обработки содержимым сохраненного текстового файла.
  4. Сохраняем обработку v77exp.ert. Только после этого запускаем процедуру выгрузки.

Шаг 3. Настройка ПКО для документа «Ввод начальных остатков»

Создадим правило конвертации объектов (ПКО) ВводНачальныхОстатков41, где объект-источник оставляем пустым, а объектом-приемником выбираем ДокументСсылка.ВводНачальныхОстатков.

Разберем настройку передачи табличной части и реквизитов шапки:

  1. Реквизиты шапки: Для свойств Дата, Организация, РазделУчета создаем ПКС. Если значение передается через структуру входящих данных, устанавливаем флаг «Получить из входящих данных». Для фиксированных значений можно задать код в обработчике «Перед выгрузкой» (например, Значение = "Товары"; для раздела учета).
  2. Булевы реквизиты: В 1С 7.7 нет системного типа Булево. Чтобы установить флаг (например, ОтражатьВБухгалтерскомУчете), в обработчике ПКС «Перед выгрузкой» указываем числовое значение: Значение = 1;
  3. Табличная часть (ПКГС): В группе свойств табличной части указываем соответствие колонок. Для строковых полей и ссылочных объектов внутри строк ТЧ флаги «Получить из входящих данных» снимаются, а в обработчике «Перед выгрузкой» каждого ПКС пишется обращение к текущей строке: Значение = ОбъектКоллекции.Номенклатура; Либо, если имена колонок в ТЗ совпадают с именами реквизитов приемника, в обработчике ПКГС «Перед выгрузкой» достаточно указать: КоллекцияОбъектов = ВходящиеДанные.ТоварыНаСкладе;

Шаг 4. Настройка переноса счетов учета и защита от перезаписи

Если в загруженном документе номенклатура и склады остаются пустыми, выясним причину: в типовых конфигурациях 1С 8.3 отображение субконто в форме ввода остатков зависит от заполненности реквизита СчетУчета. Если счет не заполнен, аналитика скрывается.

Для корректной передачи счета создаем отдельное ПКО для плана счетов (например, Хозрасчетный) и указываем его в ПКС счета учета табличной части. Чтобы загрузка не затирала существующие наименования и коды предопределенных счетов в базе 8.3, обязательно установим флаг «Не замещать существующие объекты в приемнике при загрузке» в настройках ПКО плана счетов или пропишем в обработчике «Перед загрузкой»:

НеЗамещатьОбъектПриЗагрузке = Истина;

Шаг 5. Корректировка времени и автоматическое проведение документа

В 1С 7.7 дата не содержит времени (выгружается 00:00:00). Для корректного закрытия периода остатки должны лечь на последнюю секунду дня — 23:59:59, иначе обороты за 31 декабря исказят сальдо. Кроме того, документ должен быть проведен с формированием проводок.

В ПКО документа ВводНачальныхОстатков в обработчике «Перед загрузкой» на стороне 1С 8.3 пропишем:


// Сдвигаем время документа на конец дня
Объект.Дата = КонецДня(Объект.Дата);

// Устанавливаем режим автоматического проведения
РежимЗаписи = "Проведение";

Дополнительно: выборка остатков по валютным счетам

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


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

Пока БИ.ПолучитьСубконто() = 1 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.Валюта = БИ.Валюта;
    ТЗ.СуммаВал = БИ.ВалСКД(); // или БИ.СКД("В")
    ТЗ.СуммаРуб = БИ.СКД("С"); // рублевый эквивалент
КонецЦикла;

Альтернативные варианты переноса остатков

Если настройка сложных правил в КД 2.1 вызывает трудности или объем остатков невелик, можно воспользоваться альтернативными решениями:

  1. Прямое подключение через COM-соединение: В базе 1С 8.3 создается внешняя обработка, которая подключается к 7.7 через COMОбъект("V77.Application"). Обработка считывает итоги и сразу создает проведенные документы в базе 8.3 без генерации промежуточных XML-файлов.
  2. Перенос через табличные документы (Excel / CSV): В 1С 7.7 формируется выгрузка остатков в файл таблицы, после чего данные загружаются в 1С 8.3 типовой обработкой «Загрузка данных из табличного документа». Этот подход удобен тем, что позволяет визуально проверить цифры до их проведения в учете.
← На главную