При сопровождении баз данных «1С:Предприятие» разработчики часто сталкиваются с требованиями бизнеса, которые выходят за рамки стандартных возможностей типовых конфигураций. Одно из таких частых требований — увеличение разрядности числовых показателей. Например, стандартной точности в 3 знака после запятой для объема или веса номенклатуры на производстве катастрофически не хватает, и программисты увеличивают точность до 5 или 6 знаков.
Однако при первом же обновлении конфигурации возникает серьезная дилемма: как правильно накатить новые релизы от поставщика (1С), не затерев при этом свои доработки и, самое главное, не потеряв уже накопленные в базе данных уникальные цифры с высокой точностью? Разберем эту проблему подробно, проанализируем риски и изучим пошаговый алгоритм безопасного обновления.
Если выполнить обновление конфигурации в автоматическом или полуавтоматическом режиме (просто выбрав файл обновления .cfu или накатив типовой файл конфигурации .cf «поверх» вашей базы), платформа вернет свойствам измененных реквизитов стандартные значения. Для объема это будет возврат с 6 знаков после запятой к стандартным 3 знакам.
Чем это грозит на практике?
В процессе принятия изменений (реструктуризации базы данных на уровне СУБД) платформа физически перестроит таблицы базы данных. Числа, которые хранились в SQL-таблицах с шестью знаками (например, 0.000124), будут принудительно округлены до трех знаков (превратятся в 0.000). Произойдет безвозвратная потеря точности данных. Даже если вы сразу после этого опомнитесь и вручную вернете в конфигураторе точность «6», данные в таблицах СУБД уже будут безвозвратно обрезаны, и восстановить их можно будет только из резервной копии.
Прежде чем переходить к процедуре обновления, проанализируем масштаб изменений, которые требуются для полноценной работы с увеличенной точностью. Начинающие разработчики часто совершают ошибку, меняя точность только в справочнике Номенклатура или ЕдиницыИзмерения. Но в учетной системе 1С все взаимосвязано.
Если мы хотим, чтобы точность в 6 знаков сохранялась на всех этапах учета, изменения должны быть внесены в следующие объекты:
ТоварыНаСкладах или Продажи у ресурса останется стандартная точность «3», то при проведении документов система округлит показатели, и отчеты выдадут неверные данные.
// Пример стандартного округления, зашитого в коде проведения
ОбъемСписания = Окр(СтрокаДокумента.Объем * СтрокаДокумента.Количество, 3);
// Если оставить этот код без изменений, ваши 6 знаков округлятся до 3 еще на этапе проведения!
Все подобные места в общих модулях и модулях менеджеров документов необходимо найти с помощью глобального поиска конфигуратора и переписать под логику работы с 6 знаками после запятой.
Формат. Если там прописано ограничение вроде ЧДЦ=3, то клиенты на бумаге увидят округленные числа, хотя в базе они будут храниться корректно.Выясним, как правильно обновить базу данных, чтобы сохранить логику и значения доработанных реквизитов. Проводить эту процедуру обязательно нужно сначала на копии базы данных!
Никогда не приступайте к обновлению без резервной копии. Сделайте выгрузку информационной базы (файл .dt) или создайте бэкап средствами СУБД (MS SQL / PostgreSQL), если у вас клиент-серверный вариант работы.
Если ваша база существенно отстала от актуального релиза, обновляться нужно последовательно через промежуточные релизы (так называемые «точки перехода»). Скачайте необходимые дистрибутивы обновлений с портала 1С.
Откройте базу данных в режиме «Конфигуратор». Выберите меню Конфигурация — Поддержка — Обновить конфигурацию. Выберите источник обновления (файл обновления или доступный дистрибутив).
После сопоставления объектов платформа откроет окно «Сравнение и объединение конфигураций». Это ключевой этап работы.
Рассмотрим правила работы в этом окне:
ЕдиницыИзмерения, документы, регистры накопления).После настройки всех правил объединения нажмите кнопку «Выполнить». Дождитесь завершения процесса объединения.
Перед тем как нажать кнопку «Обновить конфигурацию базы данных» (F7), обязательно зайдите в свойства измененных реквизитов и визуально перепроверьте, что у них осталась точность «6». Только убедившись, что настройки не слетели, запускайте процесс сохранения изменений в БД.
Запустите систему в режиме «1С:Предприятие» для выполнения отложенных обработчиков обновления. Убедитесь, что все существующие записи сохранили дробную часть. Проверьте проведение новых документов и отчеты.
Многие разработчики спросят: почему бы не вынести изменение точности в механизм расширений, чтобы основная конфигурация оставалась на полной поддержке и обновлялась автоматически? В рассматриваемой ситуации (на примере платформы 8.3.11 и конфигурации «Управление торговлей 10.3») это невозможно по двум причинам:
Поэтому ручной контроль изменений при обновлении основной конфигурации остается единственным надежным техническим путем.
Проанализируем ситуацию с точки зрения долгосрочного сопровождения. Каждое обновление измененной конфигурации требует времени квалифицированного программиста и несет риски человеческой ошибки. Есть ли способ избежать этого?
Решение есть: изменение единицы учета в самой системе.
Вместо того чтобы хранить объем в кубических метрах (м3) с точностью до миллионных долей (6 знаков после запятой), переведите учет сверхточных позиций номенклатуры в более мелкие единицы измерения. Например, в кубические дециметры (дм3) или литры (л). При таком подходе стандартных 3 знаков после запятой гарантированно хватит для отражения даже самых мизерных объемов сырья, а ваша конфигурация останется полностью типовой (на «замочке»). Вы сможете обновлять систему одной кнопкой в автоматическом режиме, не опасаясь за сохранность данных.