Перенос данных из устаревших систем учета, таких как 1С:Торговля и склад 7.7 (ТиС), в современные конфигурации на платформе 1С:Предприятие 8.3 (например, 1С:Бухгалтерия предприятия 3.0) часто превращается в серьезную проблему для программистов и системных администраторов. Поскольку фирма «1С» давно прекратила активную поддержку и тестирование правил обмена для платформы 7.7, стандартный файл правил Tr9Ac830.xml содержит множество несовместимостей с современными релизами БП 3.0.
В этой статье мы подробно проанализируем причины возникновения самых частых ошибок при загрузке данных, разберем по шагам способы их устранения в коде правил обмена и выясним, как оптимизировать процесс интеграции двух систем.
При попытке загрузить XML-файл в современный релиз БП 3.0 пользователи часто сталкиваются с фатальной ошибкой встроенного языка в обработчике события ПередЗагрузкойДанных: Поле объекта не обнаружено (КомиссияПоСтрокамТабличнойЧасти).
Выясним причину этой ошибки. В старых версиях правил обмена коллекция Параметры инициализировалась как объект типа Соответствие, что позволяло использовать динамическое создание свойств через обычное присвоение. В современных версиях Библиотеки стандартных подсистем (БСП) в БП 3.0 эта коллекция принудительно приводится к типу Структура. В платформе 1С попытка обратиться к несуществующему ключу структуры через точку вызывает фатальный сбой.
Для исправления этой ошибки выполним следующие действия:
Tr9Ac830.xml в текстовом редакторе (рекомендуется использовать Notepad++ для корректной работы с большими файлами).
//Параметры.КомиссияПоСтрокамТабличнойЧасти = Новый Соответствие;
Параметры.Вставить("КомиссияПоСтрокамТабличнойЧасти", Новый Соответствие);
Полезный совет: Если выгружаемый файл данных имеет огромный размер (более 300 Мб), редактировать его вручную может быть затруднительно. В этом случае вы можете воспользоваться внешней обработкой «Универсальный обмен данными XML» (версии 2.1.8 или выше). Запуск обмена через внешнюю обработку позволяет обойти жесткие ограничения БСП встроенного механизма загрузки, и процесс проходит успешно без ручной правки XML.
Другим камнем преткновения является ошибка при загрузке документов поступления (например, Поступление товаров и услуг): Метод объекта не обнаружен (ЗаполнитьСчетаУчетаВТабличнойЧасти).
Проанализируем ситуацию. В ранних версиях БП 2.0 процедуры заполнения счетов учета в табличной части находились непосредственно в Модуле объекта документа и были доступны напрямую. С переходом БП 3.0 на управляемые формы и клиент-серверную архитектуру разработчики перенесли эти процедуры в Модуль менеджера документа, ограничив их область действия директивой компиляции #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда.
Поскольку при загрузке из XML создается непосредственно объект документа, вызов метода через контекст Объект.ЗаполнитьСчетаУчетаВТабличнойЧасти более не работает. Чтобы решить эту проблему, нам нужно переписать вызовы методов в правилах обмена (в обработчиках «После загрузки объекта» для соответствующих ПКО):
Объект.ЗаполнитьСчетаУчетаВТабличнойЧасти(...)
Документы.ПоступлениеТоваровУслуг.ЗаполнитьСчетаУчетаВТабличнойЧасти(Объект, "Товары");
При переносе справочника Организации или контрагентов загрузка может прерваться из-за отсутствия реквизита КодПоОКАТО.
Дело в том, что в последних релизах БП 3.0 фирма «1С» полностью исключила классификатор ОКАТО из метаданных многих объектов, перейдя на более актуальный классификатор ОКТМО. Старые правила обмена из ТиС 7.7 все еще пытаются передать и сопоставить этот реквизит.
Решить эту проблему можно двумя путями:
КодПоОКАТО, непосредственно из XML-файла выгруженных данных или из самого файла правил обмена.Конвертация данных 2.0, найти ПКО Организации, перейти на вкладку «Правила конвертации свойств» (ПКС) и снять флаг активности с реквизита КодПоОКАТО.С выходом обновлений БП 3.0 многие реквизиты документов и справочников были переименованы, помечены на удаление или перенесены в другие общие модули. Рассмотрим сводную таблицу необходимых исправлений в правилах обмена:
ПеречислениеСсылка.ВидыСтавокЕСНиПФР теперь нужно использовать переименованное системное значение ПеречислениеСсылка.УдалитьВидыСтавокЕСНиПФР.
Объект.ЗаполнитьСчетаУчетаВТабЧастиУслуги(Истина); следует использовать вызов через менеджер:
Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаВТабличнойЧасти(Объект, "Услуги");
УчетНДС.ПолучитьСуммуДокументаСНДС(...) необходимо перенаправить на переопределяемый модуль: УчетНДСПереопределяемый.ПолучитьСуммуДокументаСНДС(...).
глЗначениеПеременной("глТекущийПользователь") используйте современный вызов прикладного интерфейса БСП: Пользователи.ТекущийПользователь.
ПеремещениеТМЦ был разделен. Ссылки вида ДокументСсылка.ПеремещениеТМЦ в кодовой базе правил обмена необходимо переписать на ДокументСсылка.ПеремещениеТоваров.
ДатаНомерДокументовОплаты в актуальных релизах переименована в ПлатежноРасчетныеДокументы. Также метод инициализации параметров Объект.ОпределениеПараметровСчетаФактуры; был заменен разработчиками на Объект.ОпределениеПараметровСчетаФактурыНаРеализацию;.
Часто при импорте контрагентов или собственных организаций в БП 3.0 создаются дубли с пустыми реквизитами. Проанализируем причину этого явления.
В базах 1С:Торговля и склад 7.7 ИНН и КПП часто записывались в одно строковое поле через обратный слэш (например, 7701020304\770101001). Стандартный алгоритм парсинга ИНН в правилах обмена пытается выделить ИНН по количеству символов, но из-за некорректных пробелов или нестандартного формата записи захватывает символ слэша \ и часть символов КПП. Поиск по такому некорректному ИНН в БП 3.0 не дает результатов, и система создает новую (дублирующую) карточку контрагента.
Для исправления этого алгоритма в правилах обмена (ПКО Контрагенты/Организации, перед выгрузкой ИНН) рекомендуется использовать следующий скорректированный код:
Если Источник.ЭтоГруппа = 0 Тогда
Если (Источник.ЮрФизЛицо.Вид = "ЮрЛица") Или (Источник.ЮрФизЛицо.Вид = "СвоиЮрЛица") Тогда
ИНН = Лев(Источник.ЮрФизЛицо.ИНН, 10);
ИначеЕсли Источник.ЮрФизЛицо.Вид = "ФизЛица" Тогда
ИНН = Лев(Источник.ЮрФизЛицо.ИНН, 12);
КонецЕсли;
Значение = ИНН;
Иначе
Отказ = 1;
КонецЕсли;
Также обратите внимание на сопоставление кодов организаций. Код организации в БП 3.0 должен строго соответствовать коду этой же организации в базе ТиС 7.7. Если в интерфейсе БП 3.0 поле Код скрыто, его можно вывести через команду «Еще – Изменить форму».
По умолчанию все документы из ТиС 7.7 загружаются в БП 3.0 в непроведенном состоянии. Бухгалтерам приходится вручную заходить в каждый документ и проводить его, что существенно замедляет работу. Как автоматизировать этот процесс?
Мы можем создать в конфигурации БП 3.0 новую подписку на событие ПослеЗаписиДокумента. В обработчике этой подписки мы можем прописать программное проведение загруженных документов:
Процедура ПослеЗаписиДокументаПриОбмене(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
// Проверяем, что запись происходит в режиме загрузки данных обмена
Если Источник.ОбменДанными.Загрузка Тогда
Попытка
Если Источник.Проведен = Ложь Тогда
Источник.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Исключение
// Записываем ошибку проведения в журнал регистрации
ЗаписьЖурналаРегистрации("ОбменДанными.Проведение", УровеньЖурналаРегистрации.Предупреждение,,, ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Преимущество такого подхода заключается в том, что создание новой подписки на событие и отдельного общего модуля никак не влияет на типовые объекты конфигурации. БП 3.0 останется на поддержке и будет без проблем обновляться в будущем.
В современном интерфейсе «Такси» конфигурации БП 3.0 стандартная обработка для загрузки XML-данных скрыта от обычных пользователей. Чтобы запустить ее, выполните следующие шаги:
Мы подробно разобрали основные технические проблемы, возникающие при интеграции устаревшей торговой системы 7.7 с актуальной бухгалтерией 8.3. Внесение точечных изменений в XML-код правил обмена Tr9Ac830.xml позволяет полностью автоматизировать перенос документов и справочников.
Тем не менее, в долгосрочной перспективе поддержка связки ТиС 7.7 - БП 3.0 будет требовать все больше ресурсов из-за постоянного развития БП 3.0. Рекомендуется рассмотреть возможность полноценного перехода с «1С:Торговля и склад 7.7» на современное решение на платформе 8.3 (например, 1С:Управление торговлей 11 или 1С:Управление нашей фирмой), где механизмы синхронизации данных поддерживаются разработчиками 1С в актуальном и работоспособном состоянии.