При настройке обмена данными между 1С 8.2 и 1С 7.7 разработчики часто сталкиваются со ситуацией, когда при загрузке документов или остатков обработкой imp7.ert в 1С 7.7 система не может найти передаваемый счет (например, 60.1.1). В результате реквизит остаётся пустым или возникают ошибки в процедуре УстановитьРеквизитV8.
Рассмотрим подробно причины возникновения этой проблемы и проверенные методы её решения в конфигурациях «Конвертация данных».
Проанализируем механику работы платформы 1С 7.7 при приеме данных из 1С 8.x:
imp7.ert, даже если в правилах конвертации не установлен флаг «Не создавать, если не найден». Объект плана счетов 7.7 требует строгой структуры (указания родительского счета, вида субконто и настройки иерархии).60.1.1, а маска в 1С 7.7 ожидает иной формат, стандартный поиск завершится неудачей.Посмотрим на пример кода, который выгружает счет в 1С 8.2 при заполнении табличной части:
Запрос = Новый Запрос;
// Выполнение запроса и получение выборки
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Выборка.Следующий();
// Прямое присвоение ссылки на счет
Стр.КоррСчет = Выборка.СчетБУДля1С7;
Если для объекта типа ПланСчетовСсылка не настроено корректное сопоставление свойств и значений, в XML-файл попадает лишь текстовое представление кода, которое обработчик загрузки 7.7 не может разобрать по умолчанию.
Самый надежный и штатный способ — использовать механизмы Правил конвертации объектов (ПКО) и сопоставления свойств в «Конвертации данных».
КоррСчет) в Правиле конвертации свойств (ПКС) явно укажем соответствующее правило конвертации объекта для плана счетов.Благодаря сопоставлению свойств система передает понятный для 1С 7.7 идентификатор объекта, что исключает ошибки динамического поиска по строке.
Если структура планов счетов сильно различается или динамическое сопоставление неудобно, изменим подход и передадим код счета простым текстовым строковым значением.
Разберем по шагам алгоритм решения:
"60.1.1").СчетПоКоду().Пример кода обработки счета в 1С 7.7:
КодСчета = СокрЛП(Источник.КоррСчет);
СчетПриемник = СчетПоКоду(КодСчета, ПланСчетов.Основной);
Если ПустоеЗначение(СчетПриемник) = 0 Тогда
Объект.КоррСчет = СчетПриемник;
КонецЕсли;
Чтобы избежать ошибок при выгрузке и загрузке планов счетов между версиями 8.2 и 7.7, придерживайтесь следующих правил:
СчетПоКоду().