Как обновить нетиповую конфигурацию 1С и не потерять измененную точность чисел?

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

При сопровождении баз данных «1С:Предприятие» разработчики часто сталкиваются с требованиями бизнеса, которые выходят за рамки стандартных возможностей типовых конфигураций. Одно из таких частых требований — увеличение разрядности числовых показателей. Например, стандартной точности в 3 знака после запятой для объема или веса номенклатуры на производстве катастрофически не хватает, и программисты увеличивают точность до 5 или 6 знаков.

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

Главная опасность: почему изменения могут «улететь» вместе с данными

Если выполнить обновление конфигурации в автоматическом или полуавтоматическом режиме (просто выбрав файл обновления .cfu или накатив типовой файл конфигурации .cf «поверх» вашей базы), платформа вернет свойствам измененных реквизитов стандартные значения. Для объема это будет возврат с 6 знаков после запятой к стандартным 3 знакам.

Чем это грозит на практике?

В процессе принятия изменений (реструктуризации базы данных на уровне СУБД) платформа физически перестроит таблицы базы данных. Числа, которые хранились в SQL-таблицах с шестью знаками (например, 0.000124), будут принудительно округлены до трех знаков (превратятся в 0.000). Произойдет безвозвратная потеря точности данных. Даже если вы сразу после этого опомнитесь и вручную вернете в конфигураторе точность «6», данные в таблицах СУБД уже будут безвозвратно обрезаны, и восстановить их можно будет только из резервной копии.

Что значит «поменять точность во всех местах»?

Прежде чем переходить к процедуре обновления, проанализируем масштаб изменений, которые требуются для полноценной работы с увеличенной точностью. Начинающие разработчики часто совершают ошибку, меняя точность только в справочнике Номенклатура или ЕдиницыИзмерения. Но в учетной системе 1С все взаимосвязано.

Если мы хотим, чтобы точность в 6 знаков сохранялась на всех этапах учета, изменения должны быть внесены в следующие объекты:

  1. Табличные части документов. Все документы поступления, реализации, перемещения, списания и сборки товаров должны поддерживать ввод дробных чисел нужной разрядности в колонках количества или объема.
  2. Регистры накопления и сведений. Именно в регистрах хранятся итоговые движения. Если в регистре ТоварыНаСкладах или Продажи у ресурса останется стандартная точность «3», то при проведении документов система округлит показатели, и отчеты выдадут неверные данные.
  3. Программный код проведения и расчетов. В типовом коде конфигурации (особенно в старых редакциях, таких как «Управление торговлей 10.3») часто жестко зашито принудительное округление чисел. Проанализируем типичный пример кода, который может испортить ваши расчеты:

// Пример стандартного округления, зашитого в коде проведения
ОбъемСписания = Окр(СтрокаДокумента.Объем * СтрокаДокумента.Количество, 3);
// Если оставить этот код без изменений, ваши 6 знаков округлятся до 3 еще на этапе проведения!

Все подобные места в общих модулях и модулях менеджеров документов необходимо найти с помощью глобального поиска конфигуратора и переписать под логику работы с 6 знаками после запятой.

  1. Форматные строки в печатных формах. В макетах документов (накладные, УПД, счета) для вывода чисел используется свойство Формат. Если там прописано ограничение вроде ЧДЦ=3, то клиенты на бумаге увидят округленные числа, хотя в базе они будут храниться корректно.

Пошаговый алгоритм безопасного обновления нетиповой конфигурации

Выясним, как правильно обновить базу данных, чтобы сохранить логику и значения доработанных реквизитов. Проводить эту процедуру обязательно нужно сначала на копии базы данных!

Шаг 1. Создание резервной копии

Никогда не приступайте к обновлению без резервной копии. Сделайте выгрузку информационной базы (файл .dt) или создайте бэкап средствами СУБД (MS SQL / PostgreSQL), если у вас клиент-серверный вариант работы.

Шаг 2. Подготовка файлов обновлений

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

Шаг 3. Сравнение и объединение конфигураций

Откройте базу данных в режиме «Конфигуратор». Выберите меню Конфигурация — Поддержка — Обновить конфигурацию. Выберите источник обновления (файл обновления или доступный дистрибутив).

После сопоставления объектов платформа откроет окно «Сравнение и объединение конфигураций». Это ключевой этап работы.

Рассмотрим правила работы в этом окне:

Шаг 4. Выполнение обновления и проверка структуры метаданных

После настройки всех правил объединения нажмите кнопку «Выполнить». Дождитесь завершения процесса объединения.

Перед тем как нажать кнопку «Обновить конфигурацию базы данных» (F7), обязательно зайдите в свойства измененных реквизитов и визуально перепроверьте, что у них осталась точность «6». Только убедившись, что настройки не слетели, запускайте процесс сохранения изменений в БД.

Шаг 5. Запуск в режиме «Предприятие» и тестирование

Запустите систему в режиме «1С:Предприятие» для выполнения отложенных обработчиков обновления. Убедитесь, что все существующие записи сохранили дробную часть. Проверьте проведение новых документов и отчеты.

Почему в данном случае нельзя использовать Расширения?

Многие разработчики спросят: почему бы не вынести изменение точности в механизм расширений, чтобы основная конфигурация оставалась на полной поддержке и обновлялась автоматически? В рассматриваемой ситуации (на примере платформы 8.3.11 и конфигурации «Управление торговлей 10.3») это невозможно по двум причинам:

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

Альтернативный архитектурный подход (без изменения конфигурации)

Проанализируем ситуацию с точки зрения долгосрочного сопровождения. Каждое обновление измененной конфигурации требует времени квалифицированного программиста и несет риски человеческой ошибки. Есть ли способ избежать этого?

Решение есть: изменение единицы учета в самой системе.

Вместо того чтобы хранить объем в кубических метрах (м3) с точностью до миллионных долей (6 знаков после запятой), переведите учет сверхточных позиций номенклатуры в более мелкие единицы измерения. Например, в кубические дециметры (дм3) или литры (л). При таком подходе стандартных 3 знаков после запятой гарантированно хватит для отражения даже самых мизерных объемов сырья, а ваша конфигурация останется полностью типовой (на «замочке»). Вы сможете обновлять систему одной кнопкой в автоматическом режиме, не опасаясь за сохранность данных.

← На главную