Как правильно обновить измененную конфигурацию 1С:Управление торговлей 10.3 и почему пропадают данные в добавленных реквизитах?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Налоговый учет Торговля и дистрибуция
← На главную

Обновление устаревших конфигураций «1С:Предприятие», особенно когда они содержат значительные доработки, всегда связано с высоким риском потери данных и нарушения работоспособности системы. В частности, при переходе со старых версий 1С:Управление торговлей 10.3 на более новые релизы (например, с целью поддержки законодательных изменений по ставке НДС 20%) разработчики часто совершают критическую ошибку, которая приводит к полной очистке данных в добавленных вручную реквизитах, справочниках и регистрах.

В этой статье мы подробно проанализируем причины этой проблемы, разберем внутреннее устройство платформы 1С в части идентификации объектов метаданных, а также предложим пошаговые инструкции по безопасному обновлению и альтернативным путям решения задачи.

Причина затирания данных: механизм идентификации объектов (UUID)

Выясним причину, по которой после объединения конфигураций и последующей операции «Загрузить конфигурацию из файла» (cf) в рабочей базе полностью исчезают данные в добавленных программистом реквизитах и регистрах. Разработчики часто ошибочно полагают, что платформа 1С сопоставляет объекты метаданных исключительно по их именам (идентификаторам). На самом деле это не так.

Каждому объекту метаданных (справочнику, документу, реквизиту, регистру сведений и т. д.) при его создании платформа присваивает уникальный 128-битный идентификатор — GUID (UUID). Именно по этому скрытому идентификатору СУБД связывает таблицы базы данных с описанием структуры в конфигурации.

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

  1. При добавлении объектов в сторонней пустой базе или в файле конфигурации платформа генерирует для них новые уникальные GUID. Даже если имена, типы данных и структура новых регистров полностью идентичны тем, что уже существуют в рабочей базе, их GUID будут отличаться.
  2. Операция «Загрузить конфигурацию из файла» производит полную замену структуры метаданных. Платформа сравнивает GUID объектов из загружаемого файла с GUID объектов в рабочей базе.
  3. Не найдя старых GUID добавленных объектов в новом загруженном файле, платформа считает, что старые регистры и реквизиты были полностью удалены. Новые объекты с совпадающими именами воспринимаются системой как абсолютно новые, только что созданные сущности.
  4. При применении изменений (реструктуризации базы данных) СУБД физически удаляет таблицы старых регистров и колонки реквизитов вместе со всеми накопленными в них данными. На их месте создаются новые, абсолютно пустые таблицы и поля.

Именно поэтому использовать команду «Загрузить конфигурацию из файла» для обновления измененных баз из файлов, собранных «на стороне» без сохранения исходных GUID, категорически запрещено.

Пошаговый алгоритм безопасного обновления через копию базы данных

Чтобы избежать потери уникальных идентификаторов и гарантировать сохранность всех накопленных данных, обновление необходимо выполнять строго по определенной методологии. Разберем этот процесс по шагам.

Шаг 1. Создание резервной копии
Перед началом любых манипуляций обязательно создайте полную резервную копию рабочей информационной базы. Выполните копирование файла базы данных 1Cv8.1CD (для файлового варианта) или сделайте бэкап средствами СУБД (для клиент-серверного варианта).

Шаг 2. Развертывание рабочей копии базы данных
Никогда не проводите эксперименты и промежуточные обновления непосредственно на «живой» базе данных. Разверните резервную копию на тестовом сервере или локальном компьютере. Все последующие шаги выполняются исключительно на этой копии.

Шаг 3. Последовательное или сквозное обновление конфигурации на копии
Для обновления сильно устаревших релизов лучше всего использовать штатный механизм поддержки. Рассмотрим два варианта:

  1. Последовательное обновление по релизам. Этот вариант наиболее безопасен, так как при каждом переходе выполняются специализированные обработчики обновления данных (процедуры обновления ИБ). Вы можете существенно ускорить этот процесс, используя специализированное ПО (например, «Обновлятор 1С»), которое автоматически скачает нужные промежуточные релизы и последовательно применит их.
  2. Обновление через файл конфигурации (cf) нового релиза. Если вы уверены, что структура данных типовой конфигурации не претерпела революционных изменений, требующих обязательного выполнения промежуточных обработчиков, можно обновиться сразу на конечный релиз. Для этого в режиме Конфигуратора выберите меню Конфигурация -> Поддержка -> Обновить конфигурацию, выберите файл обновления (.cfu) или полной конфигурации (.cf) целевого релиза.

При выполнении сравнения-объединения в процессе обновления снимите флажки с тех объектов, которые содержат ваши уникальные доработки (новые модули, добавленные реквизиты, нетиповые регистры), чтобы платформа не затерла их код и структуру. При этом исходные GUID ваших доработок гарантированно сохранятся, поскольку база не перезаписывается с нуля, а лишь модифицируется.

Шаг 4. Настройка и тестирование на копии
Запустите обновленную копию базы данных в режиме «Предприятие». Дождитесь завершения всех регламентных процедур обновления. Проверьте работоспособность доработанного функционала, проведение документов и заполнение отчетов.

Шаг 5. Перенос изменений в рабочую базу
После того как копия базы успешно обновлена и протестирована, выполните следующие действия для быстрого обновления рабочей базы с минимальным временем простоя:

  1. В конфигураторе обновленной и протестированной копии выгрузите файл конфигурации: Конфигурация -> Сохранить конфигурацию в файл... (получаем эталонный cf-файл).
  2. В рабочей базе данных (предварительно завершив работу всех пользователей и создав свежий бэкап) откройте Конфигуратор.
  3. Выполните команду Конфигурация -> Загрузить конфигурацию из файла... и выберите ваш эталонный cf-файл.

Почему в данном случае загрузка cf безопасна? Потому что этот файл был выгружен из базы-копии, которая изначально была создана из этой же самой рабочей базы. Все GUID измененных и добавленных объектов в файле cf и в рабочей базе на 100% совпадают. Никакой потери данных не произойдет.

Альтернатива: Локальное внедрение НДС 20% без полного обновления

Если конфигурация «Управление торговлей 10.3» переписана настолько сильно, что полноценное обновление экономически нецелесообразно (займет слишком много часов работы программиста), можно прибегнуть к точечному внедрению ставки НДС 20%. Разберем, как реализовать это вручную.

Во-первых, проанализируем, где именно в системе используется ставка НДС. Нам потребуется внести изменения в перечисления, модули расчета и печатные формы.

1. Изменение перечисления ставок
Добавьте в перечисление СтавкиНДС новые значения: НДС20 и НДС20_120 (соответственно для обычной и расчетной ставки).

2. Корректировка функций расчета в общем модуле
Найдите общий модуль, отвечающий за расчет сумм НДС (обычно это ЦенообразованиеКлиентСервер или аналогичный модуль в зависимости от релиза конфигурации). Перепишем алгоритм определения числового значения ставки:


Функция ПолучитьСтавкуНДСЧислом(СтавкаНДС) Экспорт

    Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
        Возврат 20;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
        Возврат 20;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
        Возврат 18;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
        Возврат 18;
    // ... обработка остальных ставок
    КонецЕсли;

КонецФункции

3. Подстановка ставки по умолчанию в зависимости от даты документа
Чтобы облегчить работу пользователям, в модулях документов (например, РеализацияТоваровУслуг, ПоступлениеТоваровУслуг, СчетФактураВыданный) при создании или при изменении даты необходимо прописать проверку автоматической подстановки новой ставки:


Процедура ПриИзмененииДатыДокумента(ДокументОбъект) Экспорт

    ГраницаПерехода = Дата("20190101000000"); // 1 января 2019 года
    
    Если ДокументОбъект.Дата >= ГраницаПерехода Тогда
        Для Каждого СтрокаТЧ Из ДокументОбъект.Товары Цикл
            Если СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
                СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
            ИначеЕсли СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
                СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120;
            КонецЕсли;
            // Пересчитываем суммы в строке
            ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТЧ, ДокументОбъект);
        КонецЦикла;
    КонецЕсли;

КонецПроцедуры

4. Печатные формы и регламентированная отчетность
Основная сложность ручного внедрения заключается не в расчете сумм в документах, а в формировании Книги покупок, Книги продаж и выгрузке декларации по НДС в формате XML. Если ваша компания сдает отчетность по НДС непосредственно из этой базы «1С:Управление торговлей», ручная доработка всех этих механизмов под новые XML-схемы ФНС будет крайне трудоемкой и может привести к ошибкам. Если же учет ведется в УТ, а отчетность сдается из «1С:Бухгалтерии», то ручного изменения ставок в УТ и корректировки правил обмена (через «Конвертацию данных») будет вполне достаточно.

Внимание: Проблема резкого роста базы данных после обновления до 10.3.49.4

Рассмотрим важный нюанс, с которым сталкиваются многие системные администраторы и программисты при обновлении на релиз 10.3.49.4 и выше. После выполнения обновления размер файла базы данных (особенно файлового варианта) может резко вырасти — с 100-200 Мб до 1.5 Гб и более.

Проанализируем технические причины этого явления:

Рекомендации по устранению проблемы роста базы:
Для файловых баз после завершения обновления обязательно запустите процедуру «Тестирование и исправление» с установленным флажком «Сжатие таблиц информационной базы». Это позволит освободить неиспользуемое пространство, оставшееся после реструктуризации таблиц. Для клиент-серверных баз рекомендуется выполнить операцию Shrink (сжатие) базы данных и лога транзакций средствами MS SQL Server или другой используемой СУБД.

Резюме

Подводя итог, можно сделать следующие выводы. Для успешного и безопасного обновления измененной УТ 10.3 всегда используйте стратегию обновления на копии базы с последующей полной загрузкой проверенного cf-файла в рабочую базу. Это защитит вас от потери уникальных идентификаторов (GUID) и гарантирует сохранность данных в доработанных регистрах и реквизитах. Если же база данных изменена настолько сильно, что обновление невозможно, точечно внедряйте новые ставки НДС на уровне программного кода, но помните о необходимости последующей корректной выгрузки этих данных в бухгалтерские программы.

← На главную