Как настроить перенос счетов из 1С 8.2 в 1С 7.7 через Конвертацию данных, если счет не находится при загрузке?

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

При настройке обмена данными между 1С 8.2 и 1С 7.7 разработчики часто сталкиваются со ситуацией, когда при загрузке документов или остатков обработкой imp7.ert в 1С 7.7 система не может найти передаваемый счет (например, 60.1.1). В результате реквизит остаётся пустым или возникают ошибки в процедуре УстановитьРеквизитV8.

Рассмотрим подробно причины возникновения этой проблемы и проверенные методы её решения в конфигурациях «Конвертация данных».

Причины возникновения ошибки при выгрузке и загрузке счетов

Проанализируем механику работы платформы 1С 7.7 при приеме данных из 1С 8.x:

  1. Ограничения автоматического создания объектов: В отличие от обычных справочников, счета плана счетов в 1С 7.7 не создаются автоматически «на лету» алгоритмом обработки imp7.ert, даже если в правилах конвертации не установлен флаг «Не создавать, если не найден». Объект плана счетов 7.7 требует строгой структуры (указания родительского счета, вида субконто и настройки иерархии).
  2. Несоответствие маски кода счета: Поиск счета по коду в 1С 7.7 крайне чувствителен к настройке маски, заданной в конфигураторе приемника (наличие точек, количество знаков в субсчетах). Если код выгружается из 1С 8.2 в формате 60.1.1, а маска в 1С 7.7 ожидает иной формат, стандартный поиск завершится неудачей.
  3. Заполнение реквизитов в обработчиках: При заполнении реквизита табличной части напрямую ссылкой из выгрузки 8.2 без использования корректного правила конвертации или сопоставления значений загрузка не может автоматически сопоставить типы.

Посмотрим на пример кода, который выгружает счет в 1С 8.2 при заполнении табличной части:


Запрос = Новый Запрос;
// Выполнение запроса и получение выборки
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Выборка.Следующий();

// Прямое присвоение ссылки на счет
Стр.КоррСчет = Выборка.СчетБУДля1С7;

Если для объекта типа ПланСчетовСсылка не настроено корректное сопоставление свойств и значений, в XML-файл попадает лишь текстовое представление кода, которое обработчик загрузки 7.7 не может разобрать по умолчанию.

Решение 1. Настройка сопоставления свойств и значений (Правила конвертации значений)

Самый надежный и штатный способ — использовать механизмы Правил конвертации объектов (ПКО) и сопоставления свойств в «Конвертации данных».

  1. Откроем правила обмена в конфигурации «Конвертация данных».
  2. Для Правила конвертации объектов (ПКО) соответствующего плана счетов создадим правила сопоставления значений.
  3. Явно свяжем каждый счет источника (1С 8.2) с текстом кода счета приемника (1С 7.7).
  4. Для реквизита (например, КоррСчет) в Правиле конвертации свойств (ПКС) явно укажем соответствующее правило конвертации объекта для плана счетов.

Благодаря сопоставлению свойств система передает понятный для 1С 7.7 идентификатор объекта, что исключает ошибки динамического поиска по строке.

Решение 2. Передача счета через строковый параметр и поиск функцией СчетПоКоду

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

Разберем по шагам алгоритм решения:

  1. В ПКС реквизита выгружаем не сам объект счета, а его строковый код (например, "60.1.1").
  2. В базе-приемнике 1С 7.7 в обработчике события «После загрузки» для объекта или в событии ПКО находим счет программно с помощью стандартной функции СчетПоКоду().

Пример кода обработки счета в 1С 7.7:


КодСчета = СокрЛП(Источник.КоррСчет);
СчетПриемник = СчетПоКоду(КодСчета, ПланСчетов.Основной);

Если ПустоеЗначение(СчетПриемник) = 0 Тогда
    Объект.КоррСчет = СчетПриемник;
КонецЕсли;

Практические рекомендации по переносу планов счетов

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

← На главную