Как перенести счета, созданные в режиме 1С:Предприятие, между базами 7.7 через Конвертацию данных 2.0

Программист 1С v7.7 Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Перенос данных между базами на платформе 1С:Предприятие 7.7 с использованием конфигурации «Конвертация данных 2.0» (КД2) часто сопряжен с трудностями, которые не возникают при работе с версией 8.x. Одной из наиболее острых проблем является перенос непредопределенных счетов — тех, которые бухгалтер или администратор создал непосредственно в пользовательском режиме (в плане счетов), а не в конфигураторе.

Стандартные правила КД2 отлично справляются со счетами, прописанными в конфигурации, но при попытке выгрузить пользовательские счета в документах часто приходят пустые значения. Рассмотрим подробнее, почему это происходит и как решить задачу без изменения конфигурации (MD-файла).

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

Проанализируем работу обработки загрузки V77Imp.ert. В отличие от справочников или документов, для которых в КД2 можно настроить поиск по коду, наименованию или уникальному идентификатору, работа с планом счетов в 7.7 внутри загрузчика жестко привязана к механизму Конвертации значений (ПКЗ).

Когда мы настраиваем Правило Конвертации Объекта (ПКО) для плана счетов, КД2 по умолчанию ожидает, что мы сопоставим идентификаторы объектов источника и приемника. Если счета нет в этой таблице сопоставления, алгоритм загрузки в 7.7 часто просто «пропускает» установку реквизита, так как не находит соответствия в метаданных правил. Даже если вы настроите ПКС (Правила Конвертации Свойств) для кода и наименования, обработка загрузки V77Imp.ert может проигнорировать эти данные для типа Счет, ожидая готовую ссылку из таблицы значений.

Решение 1: Ручное добавление счетов в таблицу «Конвертация значений»

Это самый быстрый и надежный способ, если список пользовательских счетов невелик и стабилен. Суть метода заключается в том, чтобы «обмануть» систему, выдав пользовательские счета за предопределенные на уровне правил конвертации.

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

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

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

Решение 2: Динамическое определение ПКО в зависимости от типа счета

Если в базе много и предопределенных, и пользовательских счетов, можно использовать программное переключение правил. Для этого создадим два ПКО:

Затем в правилах конвертации свойств (ПКС) документов, где используется счет (например, в реквизите КоррСчет), пропишем алгоритм в событии Перед выгрузкой:


Если ПустоеЗначение(Источник.КоррСчет) = 0 Тогда
    // Проверяем, является ли счет предопределенным
    // В 7.7 это можно сделать через проверку кода в списке известных
    Если ЭтоПредопределенныйСчет(Источник.КоррСчет.Код) = 0 Тогда
        ИмяПКО = "ОсновнойПользовательский";
    Иначе
        ИмяПКО = "ОсновнойПредопределенный";
    КонецЕсли;
КонецЕсли;

В этом случае мы заставляем систему использовать разные подходы для разных типов счетов. Однако, как показала практика, для 7.7 этот метод все равно может потребовать доработки кода загрузчика, так как V77Imp.ert не всегда корректно обрабатывает НайтиПоКоду() для планов счетов «на лету».

Решение 3: Модификация обработки загрузки V77Imp.ert

Если вам требуется универсальное решение, которое будет подхватывать любые новые счета без правки правил в КД2, необходимо внести изменения в саму обработку загрузки. Нам нужно найти функцию, отвечающую за установку реквизитов (обычно это УстановитьРеквизитV8 или логика обработки типа ПланСчетовСсылка).

Рассмотрим пример логики, которую необходимо добавить в загрузчик:


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

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

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

При переносе непредопределенных счетов мы должны помнить о структуре плана счетов 7.7. Рассмотрим основные риски:

  1. Маска счета: Если в источнике счет имеет код 60.1, а в приемнике маска настроена как 60.01, поиск по коду не сработает. Рекомендуется использовать функцию СокрЛП() и приводить коды к единому формату.
  2. Порядок загрузки: Если вы создаете новые счета в базе-приемнике программно в процессе загрузки, сначала должен быть создан счет-группа (родитель), и только потом субсчет. В противном случае субсчет будет создан в корне плана счетов.
  3. Признаки учета: Не забывайте, что у счета в 7.7 есть флаги (Активный, Пассивный, Валютный, Количественный). При использовании метода с ПКС (Решение 2) эти свойства также должны быть перенесены, иначе созданный счет будет иметь настройки по умолчанию, что приведет к ошибкам в проводках.

Проанализировав ситуацию, можно сделать вывод: для разового переноса или небольшой базы самым стабильным решением остается прямое сопоставление кодов в таблице «Конвертация значений» внутри ПКО плана счетов. Это избавляет от необходимости кодить сложные условия и гарантирует, что V77Imp.ert увидит ссылку на объект.

← На главную