При сопровождении типовых решений 1С программисты часто сталкиваются с необходимостью кастомизации метаданных. Одной из самых распространенных задач является увеличение длины номера документа или кода справочника, когда стандартной разрядности перестает хватать для нумерации в течение периода. Однако при первом же обновлении конфигурации возникает риск отката этих изменений к типовым значениям, что может привести к необратимой потере данных. Разберем подробно, как правильно проводить процедуру обновления в таких случаях и какие современные инструменты платформы позволяют автоматизировать этот процесс.
Прежде всего, проанализируем механизм обновления конфигурации. Процесс состоит из двух критически важных этапов: обновление конфигурации метаданных и обновление конфигурации базы данных. Когда мы загружаем обновление от поставщика, платформа предлагает привести структуру наших объектов в соответствие с эталоном. Если в типовой конфигурации длина номера документа составляет 9 символов, а в нашей рабочей базе она была увеличена до 15, то при стандартном обновлении «по умолчанию» система попытается вернуть значение 9.
Рассмотрим, что происходит на физическом уровне СУБД. Если между принятием изменений метаданных и окончательным обновлением базы данных (нажатие клавиши F7) мы не восстановим свою длину номера, платформа выполнит SQL-команду по изменению структуры таблицы. В этот момент произойдет усечение (truncation): все символы, выходящие за пределы новой (укороченной) длины, будут физически удалены из таблиц базы данных. Даже если после этого мы снова увеличим длину до 15, потерянные символы не вернутся — они будут заменены пробелами или просто исчезнут.
Если ваша база находится на поддержке с возможностью изменения, и вы правите длину номера непосредственно в основной конфигурации, необходимо строго соблюдать последовательность манипуляций. Разберем по шагам алгоритм, который позволит избежать усечения данных:
F7), не нажимаем «Да».F7).Выясним причину, почему это работает: при выполнении F7 система сравнивает текущее состояние метаданных с состоянием таблиц в SQL. Поскольку мы вернули длину номера до запуска реструктуризации, платформа «увидит», что длина не изменилась по сравнению с тем, что уже есть в базе данных, и физического обрезания строк не произойдет.
Чтобы не заниматься ручной правкой после каждого обновления, мы можем настроить правила объединения объектов. Рассмотрим подробнее этот функционал:
В окне «Сравнение и объединение» при обновлении конфигурации найдите нужный документ. Если раскрыть дерево свойств объекта, можно увидеть свойство Длина номера. Мы можем:
Важно: этот метод требует внимательности, так как при массовом обновлении легко пропустить один из объектов.
Самым современным и безопасным методом является использование расширений конфигурации. Начиная с версии платформы 8.3.22, возможности расширений были значительно расширены. Теперь мы можем менять свойства Длина кода и Длина номера, не снимая основную конфигурацию с «замка».
Проанализируем преимущества этого подхода:
Однако здесь есть критически важный нюанс, который мы должны учитывать: Режим совместимости. Даже если вы установили платформу 8.3.22 или 8.3.25, но ваша конфигурация работает в режиме совместимости, например, с версией 8.3.21, возможность изменения длины номера в расширении будет заблокирована. Система выдаст ошибку при попытке применить такое расширение.
Посмотрим, какие еще свойства номеров можно менять в расширениях версии 8.3.22+:
Рассмотрим ситуацию, когда мы успешно увеличили длину номера. Стоит помнить о механизме автонумерации 1С. Если вы увеличили длину с 9 до 12 символов, старые номера (например, «000000001») останутся прежними. При создании нового документа система попытается сгенерировать номер, исходя из имеющихся данных.
Иногда это приводит к сбоям, если в базе присутствуют номера, заполняющие всю старую длину без префиксов. Рекомендуется после изменения длины выполнить перенумерацию документов (с помощью стандартных обработок), чтобы привести все номера к единому формату с учетом новой разрядности. Это гарантирует корректную работу метода УстановитьНовыйНомер().
Если ваша база работает во «Фреше», использование расширений для изменения структуры данных (к которым относится длина номера) накладывает дополнительные обязательства. Такие расширения проходят строгий аудит безопасности и производительности. Поскольку изменение длины номера — это изменение структуры таблиц базы данных, специалисты сервиса проверяют, не приведет ли это к блокировкам или деградации производительности при реструктуризации больших объемов данных.
Подведем итог: наиболее надежный путь для современных систем — переход на платформу 8.3.22+ и использование расширений при условии отключения режима совместимости. Для устаревших систем единственным выходом остается жесткий контроль последовательности действий при обновлении метаданных и обязательное создание резервной копии перед любым обновлением конфигурации базы данных.