Как перенести остатки по бухгалтерским счетам в 1С:Конвертация данных 2.0?

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

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

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

---

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

Этот метод считается стандартом разработки в КД 2. Его суть заключается в том, что мы не создаем никаких лишних объектов в базе-источнике. Мы пишем запрос к виртуальной таблице остатков регистра прямо в Правиле выгрузки данных (ПВД), программно упаковываем эти данные в специальную структуру и передаем в Правило конвертации объектов (ПКО) документа ввода начальных остатков базы-приемника.

Разберем этот процесс по шагам.

Шаг 1. Настройка Правила конвертации объектов (ПКО)

Сначала нам нужно создать правило, по которому КД поймет, как именно заполнять документ ввода остатков в приемнике.

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

Шаг 2. Создание Правила выгрузки данных (ПВД) и написание кода

Теперь создадим ПВД, которое будет отвечать за выборку данных из базы-источника.

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

Рассмотрим пример кода для обработчика «Перед обработкой»:


// 1. Создаем запрос для получения бухгалтерских остатков
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	ХозрасчетныйОстатки.Организация КАК Организация,
|	ХозрасчетныйОстатки.Счет КАК Счет,
|	ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
|	ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
|	ХозрасчетныйОстатки.СуммаОстаток КАК Сумма
|ИЗ
|	РегистрБухгалтерии.Хозрасчетный.Остатки(&ПериодГраница, , , ) КАК ХозрасчетныйОстатки";

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

РезультатЗапроса = Запрос.Выполнить();

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

В этом коде функция ВыгрузитьПоПравилу вызывается с пустыми первыми параметрами. Третьим параметром мы передаем структуру ИсходящиеДанные, которая автоматически сопоставится с ПКС документа в приемнике благодаря ранее взведенным флагам «Получить из входящих данных».

---

Метод 2. Использование промежуточного документа в источнике (Упрощенный способ)

Выясним альтернативный вариант решения, который часто используют разработчики, если у них нет достаточного количества времени на глубокое изучение работы программных механизмов КД 2.0.

Этот способ заключается в искусственном облегчении структуры источника:

  1. В конфигурацию базы-источника временно или постоянно добавляется новый вид документа (например, Документ.ВременныйВводОстатков). Его структура (реквизиты шапки и табличные части) должна быть максимально приближена к аналогичному документу ввода остатков в базе-приемнике.
  2. С помощью простой внешней обработки в базе-источнике собираются остатки по регистрам бухгалтерии, и на их основе создаются и заполняются эти новые временные документы.
  3. В КД 2.0 настройка правил обмена становится тривиальной: создается стандартное ПКО, где в качестве источника выступает ваш новый Документ.ВременныйВводОстатков, а приемником назначается документ ввода остатков целевой конфигурации.

Преимущества метода: Простота отладки. Вы сразу видите заполненный документ в базе-источнике, можете проверить его правильность визуально до момента выгрузки.

Недостатки метода: Требуется вносить изменения в конфигурацию источника (создавать новые объекты метаданных), что не всегда допустимо для типовых или находящихся на строгой поддержке систем.

---

Метод 3. Разовый перенос через ручную выгрузку

Если перед вами стоит задача перенести остатки всего один раз, а количество задействованных счетов бухгалтерского учета не превышает нескольких десятков, проанализируем целесообразность автоматизации процесса. В некоторых ситуациях ручное заполнение или полуавтоматический перенос через Excel/XML-таблицы непосредственно в базе-приемнике может оказаться экономически более выгодным решением, чем написание сложных многоуровневых правил обмена.

---

Важные технические нюансы при переносе остатков

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

1. Синхронизация аналитики (Субконто)

Бухгалтерские счета в 1С имеют субконто разных типов (Контрагенты, Номенклатура, Договоры, Физические лица). При переносе остатков типы данных этих субконто должны быть корректно сопоставлены.

Когда вы передаете ссылку на объект источника (например, элемент справочника Контрагенты) в структуре ИсходящиеДанные, КД автоматически анализирует правила конвертации для данного типа данных. Если для справочника Контрагенты настроено ПКО, КД выгрузит объект по этому правилу. Ваша главная задача — убедиться, что типы субконто на соответствующих счетах в источнике и приемнике логически совпадают, а для всех связанных справочников созданы и настроены ПКО.

2. Перенос предопределенных счетов

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

3. Оптимизация при больших объемах данных

Если база-источник крупная, то выгрузка всех бухгалтерских остатков в один документ ввода начальных остатков может привести к критической ошибке переполнения памяти при загрузке в приемник. Чтобы этого избежать, используйте следующие приемы:

РежимЗаписи = РежимЗаписиДокумента.Запись;

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

← На главную