При переносе данных между платформой 1С 8.3 и устаревшей конфигурацией 1С 7.7 специалисты часто сталкиваются с нетипичным поведением объектов. Одной из популярных задач является выгрузка данных из документа 1С 8.3 в документ Операция системы 1С 7.7. Проблема заключается в том, что в конфигураторе «Конвертация данных 2.1» (КД 2.1) для объекта-приемника Документ.Операция доступно только ограниченное число реквизитов шапки (Дата, Номер, Содержание, Сумма), а стандартные табличные части проводок отсутствуют. Разберем особенности структуры 1С 7.7 и рассмотрим основные способы выполнения такого переноса.
В платформе 1С 7.7 объект Операция не является обычным документом с привычными табличными частями. Бухгалтерские проводки и аналитические разрезы (субконто) хранятся в отдельном связанном объекте Операция. Из-за этой специфики конфигурация «Конвертация данных 2.1» не может отобразить проводки как стандартную табличную часть документа 8.х. Чтобы перенести не только шапку, но и проводки с аналитикой (Контрагенты, Договоры и т. д.), необходимо использовать специализированные подходы.
Для реализации обмена через XML-файлы с помощью Конвертации данных 2.1 разберем по шагам алгоритм настройки правил:
ПередВыгрузкой или ПриВыгрузке) выполняется выборка записей регистра бухгалтерии, относящихся к переносимому документу. Эти данные упаковываются в узлы структуры или таблицы значений.v77imp.ert, которая умеет распознавать служебную XML-структуру и создавать записи оперативного или бухгалтерского учета в 7.7.ПослеЗагрузки на встроенном языке 1С 7.7.Важное замечание: Все обработчики событий, выполняемые на стороне приемника 1С 7.7, должны быть написаны строго на языке 1С 7.7 без использования конструкций и функций платформы 8.х.
Если требуется перенести конкретный вид документов или выполнить однократную интеграцию, проще всего использовать прямое программное подключение из 1С 8.3 к базе 1С 7.7 через COM-объект.
Проанализируем программный код, реализующий данный подход:
// Создание COM-подключения к базе 1С 7.7
База77 = Новый COMОбъект("V77.Application");
Запуск = База77.Initialize(База77.RMTrade, "/D""C:\Bases\Base77"" /N""Администратор""", "NO_SPLASH_SHOW");
Если Запуск Тогда
// Создаем объект Операция в 1С 7.7
Операция77 = База77.СоздатьОбъект("Операция");
// Создаем новую операцию
Операция77.Новая();
Операция77.ДатаДок = ДатаДокумента83;
Операция77.Содержание = "Перенос из 1С 8.3, док. № " + НомерДокумента83;
// Добавляем проводку
Операция77.НоваяПроводка();
Операция77.СчетДт = База77.ОсновнойПланСчетов.НайтиПоКоду("60.1");
Операция77.СчетКт = База77.ОсновнойПланСчетов.НайтиПоКоду("51");
Операция77.Сумма = СуммаДокумента83;
// Назначаем субконто по порядковым номерам счетов
// НазначитьСубконто(НомерСубконто, ЗначениеОбъекта77)
Операция77.НазначитьСубконто(1, НайденныйКонтрагент77);
Операция77.НазначитьСубконто(2, НайденныйДоговор77);
// Сохраняем операцию в базе приемника
Операция77.Записать();
КонецЕсли;
При использовании любого из методов обратите внимание на следующие технические ограничения:
Разрядность COM-сервера: COM-компонент 1С 7.7 является строго 32-разрядным. Если ваш сервер 1С 8.3 работает в 64-разрядном режиме, вызов метода Новый COMОбъект("V77.Application") непосредственно на сервере вызовет ошибку. Выполняйте код подключения на стороне 32-разрядного клиента или настраивайте изолированный запуск через COM+ (DllHost).
Порядок видов субконто: В 1С 7.7 нельзя назначить субконто типа, который не зафиксирован в плане счетов для конкретного счета Дебета или Кредита. Перед вызовом метода НазначитьСубконто() необходимо проверять настройку видов субконто для выбранного счета.