При сопровождении нетиповых конфигураций 1С:Бухгалтерия 3.0 программисты часто сталкиваются с ситуацией, когда база отказывается обновляться штатным образом из-за критических ошибок платформы, а после принудительного обновления (загрузки типового .cf файла) пропадают важные доработки и накопленные в них данные. Рассмотрим подробно, как выйти из этой ситуации, сохранив данные кастомных реквизитов и исправив технические сбои платформы.
Прежде чем приступать к «затиранию» доработок, попробуем разобраться, почему база не обновляется стандартно через Поддержка — Обновить конфигурацию. Ошибка формата потока обычно свидетельствует о повреждении кэша или внутренних служебных таблиц базы данных. Разберем шаги по её устранению:
ConfigSave или ConfigCashe. Проанализируем состояние этих таблиц на уровне SQL-сервера. Иногда полная очистка таблицы ConfigSave перед попыткой обновления позволяет платформе корректно сформировать новый поток данных.bin установленной платформы и проверим базу на наличие ошибок.Если штатное обновление все же невозможно и вы решили загрузить чистый .cf, важно заранее подготовить «контейнер» для данных ваших доработок. Рассмотрим стратегию использования расширений, так как они не затираются при обновлении основной конфигурации.
Проанализируем алгоритм действий:
РеализацияТоваровУслуг и создадим в нем реквизит (например, Наименование_Eng), полностью идентичный по типу тому, что был в основной конфигурации..cf. Ваши данные в расширении останутся нетронутыми, так как они хранятся в отдельных таблицах БД.Если обновление уже произошло и данные в новой базе пусты, а у вас осталась копия старой базы, воспользуемся методом COM-соединения. Это наиболее надежный способ, так как он позволяет переносить данные напрямую, игнорируя различия в версиях конфигураций и форматах XML.
Рассмотрим пример кода для внешней обработки, которую необходимо запустить в новой (обновленной) базе:
// Подключаемся к старой базе (источнику)
Соединитель = Новый COMОбъект("V83.COMConnector");
ПараметрыСвязи = "Srvr='ServerName';Ref='OldBaseName';Usr='admin';Pwd='password';";
Попытка
БазаИсточник = Соединитель.Connect(ПараметрыСвязи);
Исключение
Сообщить("Не удалось подключиться к базе-источнику: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// Выбираем документы в текущей базе
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Номер, Дата ИЗ Документ.РеализацияТоваровУслуг";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Ищем аналогичный документ в старой базе по номеру и дате
ДокИсточник = БазаИсточник.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(Выборка.Номер, Выборка.Дата);
Если Не БазаИсточник.ЗначениеЗаполнено(ДокИсточник) Тогда
Продолжить;
КонецЕсли;
// Получаем объект документа для записи
ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокОбъект.Наименование_Eng = ДокИсточник.Наименование_Eng;
// Важный момент: запись без проведения и проверок
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Одной из главных проблем при массовом изменении документов является риск изменения движений по регистрам (проводок) и нарушение последовательности партионного учета. Чтобы этого избежать, выясним правила «безопасной» записи объектов в 1С.
При переносе данных обязательно используйте свойство ОбменДанными.Загрузка = Истина. Рассмотрим, что это дает:
Также важно использовать режим РежимЗаписиДокумента.Запись вместо Проведение, чтобы не спровоцировать бухгалтерские ошибки в закрытых периодах.
Если программный код писать затруднительно, разберем использование типовых инструментов:
УникальномуИдентификатору (GUID), что обеспечит 100% точность сопоставления документов даже при изменении их номеров.После «жесткого» обновления через .cf часто возникают ошибки связи предопределенных элементов (справочники СтатьиЗатрат, ДоходыИРасходы и т.д.). Проанализируем ситуацию: если в базе появились дубли предопределенных элементов или они помечены на удаление, воспользуйтесь типовой обработкой «Установка связей предопределенных данных». Она позволит сопоставить объекты в базе с метаданными конфигурации, что восстановит работоспособность типовых алгоритмов Бухгалтерии предприятия.
Подводя итог, отметим, что наиболее безопасным путем является постепенное обновление через .cfu с исправлением ошибок формата потока, но если данные уже потеряны, связка Расширения + COM-соединение позволит вернуть информацию без риска для бухгалтерского учета.