Как перенести данные реквизитов документов между базами 1С:Бухгалтерия 3.0 и устранить ошибки при обновлении

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При сопровождении нетиповых конфигураций 1С:Бухгалтерия 3.0 программисты часто сталкиваются с ситуацией, когда база отказывается обновляться штатным образом из-за критических ошибок платформы, а после принудительного обновления (загрузки типового .cf файла) пропадают важные доработки и накопленные в них данные. Рассмотрим подробно, как выйти из этой ситуации, сохранив данные кастомных реквизитов и исправив технические сбои платформы.

Анализ и устранение «Ошибки формата потока»

Прежде чем приступать к «затиранию» доработок, попробуем разобраться, почему база не обновляется стандартно через Поддержка — Обновить конфигурацию. Ошибка формата потока обычно свидетельствует о повреждении кэша или внутренних служебных таблиц базы данных. Разберем шаги по её устранению:

  1. Очистка серверного кэша и таблиц Config: Если база серверная, проблема часто кроется в таблице ConfigSave или ConfigCashe. Проанализируем состояние этих таблиц на уровне SQL-сервера. Иногда полная очистка таблицы ConfigSave перед попыткой обновления позволяет платформе корректно сформировать новый поток данных.
  2. Локализация битого объекта: Выполним команду Конфигурация — Выгрузить конфигурацию в файлы. Проанализируем процесс: если выгрузка прервется, платформа укажет на конкретный объект (например, старый регламентированный отчет). Этот объект можно удалить из конфигурации перед обновлением.
  3. Использование утилиты chdbfl.exe: Для файловых баз обязательным шагом является проверка целостности физической таблицы базы данных. Запустим утилиту из папки bin установленной платформы и проверим базу на наличие ошибок.
  4. Смена разрядности клиента: В некоторых случаях 64-битный толстый клиент ведет себя нестабильно при объединении тяжелых конфигураций. Попробуем запустить процесс обновления через 32-битную версию платформы.

Использование расширений для сохранения кастомных реквизитов

Если штатное обновление все же невозможно и вы решили загрузить чистый .cf, важно заранее подготовить «контейнер» для данных ваших доработок. Рассмотрим стратегию использования расширений, так как они не затираются при обновлении основной конфигурации.

Проанализируем алгоритм действий:

  1. Создадим новое расширение в исходной базе (где данные еще есть).
  2. Добавим в расширение документ РеализацияТоваровУслуг и создадим в нем реквизит (например, Наименование_Eng), полностью идентичный по типу тому, что был в основной конфигурации.
  3. Напишем и запустим простую обработку, которая скопирует значения из основного реквизита в реквизит расширения.
  4. После этого можно смело обновлять основную конфигурацию путем загрузки .cf. Ваши данные в расширении останутся нетронутыми, так как они хранятся в отдельных таблицах БД.

Программный перенос данных через COM-соединение

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

Рассмотрим пример кода для внешней обработки, которую необходимо запустить в новой (обновленной) базе:


// Подключаемся к старой базе (источнику)
Соединитель = Новый COMОбъект("V83.COMConnector");
ПараметрыСвязи = "Srvr='ServerName';Ref='OldBaseName';Usr='admin';Pwd='password';";
Попытка
    БазаИсточник = Соединитель.Connect(ПараметрыСвязи);
Исключение
    Сообщить("Не удалось подключиться к базе-источнику: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Выбираем документы в текущей базе
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Номер, Дата ИЗ Документ.РеализацияТоваровУслуг";
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    // Ищем аналогичный документ в старой базе по номеру и дате
    ДокИсточник = БазаИсточник.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(Выборка.Номер, Выборка.Дата);
    
    Если Не БазаИсточник.ЗначениеЗаполнено(ДокИсточник) Тогда
        Продолжить;
    КонецЕсли;

    // Получаем объект документа для записи
    ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ДокОбъект.Наименование_Eng = ДокИсточник.Наименование_Eng;
    
    // Важный момент: запись без проведения и проверок
    ДокОбъект.ОбменДанными.Загрузка = Истина;
    ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;

Безопасная запись данных и сохранение проводок

Одной из главных проблем при массовом изменении документов является риск изменения движений по регистрам (проводок) и нарушение последовательности партионного учета. Чтобы этого избежать, выясним правила «безопасной» записи объектов в 1С.

При переносе данных обязательно используйте свойство ОбменДанными.Загрузка = Истина. Рассмотрим, что это дает:

Также важно использовать режим РежимЗаписиДокумента.Запись вместо Проведение, чтобы не спровоцировать бухгалтерские ошибки в закрытых периодах.

Альтернативные методы: XML и Конвертация данных

Если программный код писать затруднительно, разберем использование типовых инструментов:

  1. Выгрузка и загрузка данных XML: Используйте универсальную обработку с портала ИТС. Однако помните, что при разных версиях метаданных (если в новой БП 3.0 изменились типы или состав других реквизитов документа) загрузка может завершиться ошибкой. В этом случае в настройках выгрузки нужно снимать флажки со всех реквизитов, кроме ключевых (Номер, Дата) и вашего целевого строкового поля.
  2. Конвертация данных 2.1 (КД): Это профессиональный подход. В КД можно создать правила обмена, где источником будет старая структура, а приемником — новая. В ПКС (правилах конвертации свойств) достаточно настроить только одно поле. Синхронизацию лучше проводить по УникальномуИдентификатору (GUID), что обеспечит 100% точность сопоставления документов даже при изменении их номеров.

Работа с предопределенными данными

После «жесткого» обновления через .cf часто возникают ошибки связи предопределенных элементов (справочники СтатьиЗатрат, ДоходыИРасходы и т.д.). Проанализируем ситуацию: если в базе появились дубли предопределенных элементов или они помечены на удаление, воспользуйтесь типовой обработкой «Установка связей предопределенных данных». Она позволит сопоставить объекты в базе с метаданными конфигурации, что восстановит работоспособность типовых алгоритмов Бухгалтерии предприятия.

Подводя итог, отметим, что наиболее безопасным путем является постепенное обновление через .cfu с исправлением ошибок формата потока, но если данные уже потеряны, связка Расширения + COM-соединение позволит вернуть информацию без риска для бухгалтерского учета.

← На главную