Перенос данных между базами на платформе 1С:Предприятие 7.7 с использованием конфигурации «Конвертация данных 2.0» (КД2) часто сопряжен с трудностями, которые не возникают при работе с версией 8.x. Одной из наиболее острых проблем является перенос непредопределенных счетов — тех, которые бухгалтер или администратор создал непосредственно в пользовательском режиме (в плане счетов), а не в конфигураторе.
Стандартные правила КД2 отлично справляются со счетами, прописанными в конфигурации, но при попытке выгрузить пользовательские счета в документах часто приходят пустые значения. Рассмотрим подробнее, почему это происходит и как решить задачу без изменения конфигурации (MD-файла).
Проанализируем работу обработки загрузки V77Imp.ert. В отличие от справочников или документов, для которых в КД2 можно настроить поиск по коду, наименованию или уникальному идентификатору, работа с планом счетов в 7.7 внутри загрузчика жестко привязана к механизму Конвертации значений (ПКЗ).
Когда мы настраиваем Правило Конвертации Объекта (ПКО) для плана счетов, КД2 по умолчанию ожидает, что мы сопоставим идентификаторы объектов источника и приемника. Если счета нет в этой таблице сопоставления, алгоритм загрузки в 7.7 часто просто «пропускает» установку реквизита, так как не находит соответствия в метаданных правил. Даже если вы настроите ПКС (Правила Конвертации Свойств) для кода и наименования, обработка загрузки V77Imp.ert может проигнорировать эти данные для типа Счет, ожидая готовую ссылку из таблицы значений.
Это самый быстрый и надежный способ, если список пользовательских счетов невелик и стабилен. Суть метода заключается в том, чтобы «обмануть» систему, выдав пользовательские счета за предопределенные на уровне правил конвертации.
Разберем этот процесс по шагам:
Основной).80.1).После такой настройки в файле выгрузки свойство счета будет выглядеть не как сложный объект со ссылкой, а как простое строковое значение кода, которое загрузчик V77Imp.ert успешно распознает через таблицу соответствий.
Если в базе много и предопределенных, и пользовательских счетов, можно использовать программное переключение правил. Для этого создадим два ПКО:
ОсновнойПредопределенный — с заполненной вкладкой «Конвертация значений».ОсновнойПользовательский — без конвертации значений, но с настроенным ПКС для свойств Код и Наименование (с установленным флагом Поиск).Затем в правилах конвертации свойств (ПКС) документов, где используется счет (например, в реквизите КоррСчет), пропишем алгоритм в событии Перед выгрузкой:
Если ПустоеЗначение(Источник.КоррСчет) = 0 Тогда
// Проверяем, является ли счет предопределенным
// В 7.7 это можно сделать через проверку кода в списке известных
Если ЭтоПредопределенныйСчет(Источник.КоррСчет.Код) = 0 Тогда
ИмяПКО = "ОсновнойПользовательский";
Иначе
ИмяПКО = "ОсновнойПредопределенный";
КонецЕсли;
КонецЕсли;
В этом случае мы заставляем систему использовать разные подходы для разных типов счетов. Однако, как показала практика, для 7.7 этот метод все равно может потребовать доработки кода загрузчика, так как V77Imp.ert не всегда корректно обрабатывает НайтиПоКоду() для планов счетов «на лету».
Если вам требуется универсальное решение, которое будет подхватывать любые новые счета без правки правил в КД2, необходимо внести изменения в саму обработку загрузки. Нам нужно найти функцию, отвечающую за установку реквизитов (обычно это УстановитьРеквизитV8 или логика обработки типа ПланСчетовСсылка).
Рассмотрим пример логики, которую необходимо добавить в загрузчик:
// Если значение не найдено в таблице соответствий и тип приемника - Счет
Если (ТипПриемника = "Счет") И (ТипДанныхВФайле = "Ссылка") Тогда
СчетОбъект = СоздатьОбъект("Счет." + ИмяПланаСчетов);
Если СчетОбъект.НайтиПоКоду(ЗначениеКодаИзФайла) = 1 Тогда
УстанавливаемоеЗначение = СчетОбъект.ТекущийСчет();
КонецЕсли;
КонецЕсли;
Такая правка позволит загрузчику принудительно искать счет по коду в базе-приемнике, если стандартный механизм сопоставления значений вернул пустоту.
При переносе непредопределенных счетов мы должны помнить о структуре плана счетов 7.7. Рассмотрим основные риски:
60.1, а в приемнике маска настроена как 60.01, поиск по коду не сработает. Рекомендуется использовать функцию СокрЛП() и приводить коды к единому формату.Проанализировав ситуацию, можно сделать вывод: для разового переноса или небольшой базы самым стабильным решением остается прямое сопоставление кодов в таблице «Конвертация значений» внутри ПКО плана счетов. Это избавляет от необходимости кодить сложные условия и гарантирует, что V77Imp.ert увидит ссылку на объект.