Перенос данных из устаревших конфигураций 1С:Предприятие 7.7 в современные системы (например, на платформу 8.3) — это классическая задача, с которой сталкиваются многие специалисты. Основная сложность заключается в том, что стандартные журналы документов в "семерке" позволяют вывести на печать только реестр, где вместо детальных значений реквизитов зачастую выводятся лишь текстовые представления или ссылки. Рассмотрим детально, как решить задачу полной выгрузки всех данных документа (включая шапку и табличные части) в формат Excel.
Перед тем как приступать к выгрузке, проанализируем специфику вашей конфигурации. В типовых решениях 1С 7.7 объект Договоры обычно является справочником. Однако в самописных конфигурациях разработчики иногда создают документ Договор для фиксации конкретных условий сделки во времени. Это важно, так как методы программного доступа к справочникам и документам в языке 1С 7.7 различаются. Выясним, с чем именно мы работаем, заглянув в Конфигуратор, и убедимся, что объект находится в ветке "Документы".
Самый простой путь, не требующий написания кода, — использование проверенных временем сервисных инструментов. Разберем работу со штатными обработками, которые входили в состав дисков ИТС (Информационно-технологического сопровождения) и часто копировались в папку ExtForms баз данных. Нам понадобятся следующие файлы:
Эти инструменты позволяют сформировать печатную форму, которую затем можно сохранить как таблицу Excel штатными средствами 1С (меню "Файл" — "Сохранить как").
Если готовые обработки не подходят из-за специфической структуры документа, нам придется написать небольшую процедуру. Разберем по шагам, как правильно организовать выборку всех документов определенного вида. Важно помнить, что в отличие от 1С 8.x, в 7.7 мы используем объектный метод ВыбратьДокументы().
Проанализируем пример кода для выборки данных из шапки документа:
Процедура ВыгрузитьДоговоры()
Док = СоздатьОбъект("Документ.Договор");
// Выбираем документы за весь период работы базы
Док.ВыбратьДокументы('01.01.1900', РабочаяДата());
Пока Док.ПолучитьДокумент() = 1 Цикл
// Проверяем, не помечен ли документ на удаление
Если Док.ПометкаУдаления() = 1 Тогда
Продолжить;
КонецЕсли;
// Пример получения конкретных реквизитов
Сообщить("Номер: " + Док.НомерДок + " Дата: " + Док.ДатаДок);
Сообщить("Контрагент: " + Док.Контрагент);
// Здесь должен быть код записи в таблицу или Excel
КонецЦикла;
КонецПроцедуры
Чтобы не прописывать имя каждого реквизита вручную (особенно если в самописной конфигурации их десятки), воспользуемся объектом Метаданные. Это позволит нам автоматически определить все доступные колонки. Рассмотрим, как программно перечислить все реквизиты шапки документа:
// Получаем количество реквизитов шапки документа "Договор"
КолвоРеквизитов = Метаданные.Документ("Договор").РеквизитШапки();
Для и = 1 По КолвоРеквизитов Цикл
ИмяРеквизита = Метаданные.Документ("Договор").РеквизитШапки(и).Идентификатор;
Синоним = Метаданные.Документ("Договор").РеквизитШапки(и).Представление;
// Получаем значение реквизита универсально
Значение = Док.ПолучитьАтрибут(ИмяРеквизита);
// Теперь это значение можно отправить в соответствующую колонку Excel
КонецЦикла;
Такой подход делает вашу обработку по-настоящему универсальной: она будет работать для любого типа документа без изменения исходного кода.
Если данные хранятся не только в шапке, но и в табличной части, нам нужно добавить вложенный цикл. Проанализируем ситуацию: в 1С 7.7 для работы со строками документа используется метод ВыбратьСтроки(). Посмотрим на пример реализации:
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
// Обходим реквизиты табличной части
КолвоРеквТЧ = Метаданные.Документ("Договор").РеквизитТабличнойЧасти();
Для к = 1 По КолвоРеквТЧ Цикл
ИмяРеквТЧ = Метаданные.Документ("Договор").РеквизитТабличнойЧасти(к).Идентификатор;
ЗначениеТЧ = Док.ПолучитьАтрибут(ИмяРеквТЧ);
// Запись в файл
КонецЦикла;
КонецЦикла;
В исключительных случаях, когда база повреждена или слишком велика для медленных объектных методов 1С 7.7, можно прибегнуть к чтению таблиц напрямую. Если ваша база данных файловая (DBF), информация о документах хранится в следующих файлах:
Где **** — это внутренний идентификатор объекта, который можно найти в файле 1cv7.dd в каталоге базы. Выяснив структуру, вы можете открыть эти файлы любым внешним инструментом (например, Excel или DBF-редактор) и получить "сырые" данные. Однако помните, что ссылки на другие объекты (справочники, перечисления) в этом случае будут представлены в виде внутренних ID (36-ричных строк), которые потребуют дополнительной расшифровки.
Для записи данных в Excel из 1С 7.7 рекомендуем использовать один из двух подходов:
.xls напрямую, управлять форматированием и листами. Требует установленного Microsoft Excel на компьютере.Важный совет: При выгрузке данных для переноса в 1С 8.x обязательно выгружайте уникальный идентификатор документа (в 7.7 это можно сделать через функцию ЗначениеВСтрокуВнутр(Док.ТекущийДокумент())). Это поможет вам избежать дублей при повторных загрузках и правильно сопоставить связанные данные.