При работе с конфигурациями 1С:Предприятие мы часто сталкиваемся с необходимостью изменить стандартные свойства объектов, например, увеличить максимальную длину поля "Наименование" для справочников или документов. Ранее такие изменения могли потребовать снятия конфигурации с поддержки, что значительно усложняло процесс обновления. Однако современные версии платформы 1С предлагают элегантное и безопасное решение — использование расширений конфигурации. Давайте вместе разберем, как это можно сделать, и рассмотрим различные подходы к решению этой задачи.
Цель этой страницы — подробно описать методы увеличения длины строковых реквизитов, учитывая как текущие рекомендации фирмы "1С", так и исторический опыт разработчиков, чтобы вы могли выбрать наиболее подходящий и безопасный способ для вашей конкретной ситуации.
Это основной и наиболее рекомендуемый подход для изменения длины строковых полей, таких как Наименование, Комментарий, Описание и т.д. Платформа 1С позволяет безопасно увеличивать эти параметры без снятия конфигурации с поддержки.
Давайте по шагам рассмотрим, как это сделать в режиме конфигуратора:
Прежде всего, нам понадобится создать новое расширение. В конфигураторе перейдите в меню Конфигурация -> Расширения конфигурации... (или Файл -> Новое -> Расширение конфигурации, если вы создаете его в первый раз). Дайте ему осмысленное имя, например, "УвеличениеДлиныНаименований".
Теперь нам нужно добавить в наше расширение тот объект конфигурации, свойство которого мы хотим изменить. Допустим, мы хотим увеличить длину наименования для справочника "Номенклатура". Найдите справочник Номенклатура в дереве основной конфигурации, щелкните по нему правой кнопкой мыши и выберите "Добавить в расширение".
После добавления справочника в расширение, он появится в дереве объектов нашего расширения. Откройте его и перейдите на вкладку "Данные". Найдите реквизит Наименование. В его свойствах вы увидите поле "Длина".
Обратите внимание на значок рядом с полем "Длина". Изначально он может быть в виде двух синих стрелочек. Это означает, что свойство наследуется из основной конфигурации. Чтобы переопределить его в расширении, нам нужно "пощелкать по значку рядом с полем расширяемой конфигурации" (как было указано в одном из сообщений), пока он не изменится на значок в виде "пазла". Значок "пазла" указывает на то, что это свойство будет браться из расширения, переопределяя значение из основной конфигурации.
Теперь мы можем изменить значение поля "Длина" на желаемое, например, 150 или 250, в зависимости от ваших потребностей.
Сохраните расширение (Файл -> Сохранить) и обновите конфигурацию базы данных (Конфигурация -> Обновить конфигурацию базы данных). Платформа самостоятельно адаптирует соответствующее поле в базе данных, увеличив его размер. После обновления убедиться в изменении свойств можно с помощью инструментов для поиска и просмотра свойств объектов метаданных — для этого подойдет инструмент анализа метаданных и структуры объектов.
Ранее, как упоминалось в дискуссии, изменение длины номера документа или кода справочника было сопряжено с высоким риском и могло привести к нестабильности базы данных при обновлениях. Это было связано с тем, что такие изменения затрагивали ключевые идентификаторы объектов.
Однако, начиная с платформы 8.3.22, фирма "1С" значительно улучшила механизм расширений, добавив возможность изменять параметры номеров и кодов объектов непосредственно через расширение. Это включает в себя ДлинуНомера для документов, бизнес-процессов, задач и нумераторов, а также ДлинуКода для справочников.
Давайте проанализируем, как это можно сделать на современных версиях платформы:
Аналогично первому решению, нам потребуется расширение конфигурации.
Добавьте в расширение тот объект, код или номер которого вы хотите изменить. Например, документ РеализацияТоваровУслуг или справочник Номенклатура.
Откройте объект в расширении. Для документов вы найдете свойство ДлинаНомера, а для справочников — ДлинаКода. Как и в случае с наименованием, убедитесь, что значок рядом с этим полем изменился на "пазл", указывающий на переопределение свойства в расширении.
Установите новую желаемую длину для номера или кода. Например, если стандартная длина номера документа 11, а вам нужно 15, установите 15.
Сохраните расширение и обновите конфигурацию базы данных. Платформа самостоятельно выполнит необходимые изменения в структуре данных.
Важно: Этот механизм безопасен и поддерживается 1С на платформе версии 8.3.22 и выше. Если вы работаете на более ранних версиях платформы, то для изменения длины номера или кода строго не рекомендуется использовать расширение, и вам следует рассмотреть альтернативные методы или обновить платформу.
Если по каким-либо причинам вы не хотите изменять стандартное поле Наименование или вам требуется очень большая длина, которая может быть неоптимальной для основного наименования, мы можем рассмотреть альтернативный подход — создание собственного дополнительного реквизита или использование уже существующего поля ПолноеНаименование (если оно есть и подходит по длине).
Давайте разберем, когда это может быть полезно и как это реализовать:
В типовых конфигурациях 1С обычно присутствует подсистема "Дополнительные реквизиты и сведения". Мы можем создать новый строковый дополнительный реквизит для нужного объекта (например, справочника Номенклатура) и задать ему необходимую, сколь угодно большую длину. Этот реквизит будет храниться в отдельных регистрах сведений (например, РегистрСведений.ДополнительныеРеквизиты), что позволяет избежать изменения структуры основной таблицы объекта.
На форме элемента справочника или документа мы можем скрыть стандартное поле Наименование (сделав его Видимость = Ложь или просто удалив с формы в расширении, если оно добавлено в расширение). Вместо него мы выведем наш новый дополнительный реквизит — для этого есть обработка адаптации поведения объектов и форм. При этом мы можем даже переименовать заголовок дополнительного реквизита на форме, чтобы он выглядел как "Наименование" для пользователей, сохраняя привычный интерфейс. Для интерактивной настройки можно использовать редактор форм в режиме предприятия, который позволяет менять свойства элементов "на лету".
Мы можем использовать программный код в расширении для автоматического заполнения стандартного поля Наименование (которое мы скрыли) сокращенным вариантом из нашего длинного дополнительного реквизита. Это позволит сохранить короткое наименование для использования в отчетах, списках или обмене данными, где полная длина не требуется. Если требуется более сложная логика, например, добавление новых кнопок или полей на форму, можно стандартизировать этот процесс, используя готовые библиотеки для программного изменения форм — поможет утилита для управления заполнением и контролем реквизитов.
Рассмотрим пример кода, который можно поместить в обработчик события ПриЗаписи или ПередЗаписью формы элемента справочника (или объекта) через расширение:
// Предположим, у нас есть дополнительный реквизит "ДлинноеНаименование"
// и мы хотим заполнять стандартное Наименование первыми 100 символами.
Если НЕ ЭтоНовый Тогда
// Если объект уже записан, получаем его из базы для доступа к доп. реквизитам
// Или используем свойство объекта на форме, если оно доступно
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
Иначе
ТекущийОбъект = Объект;
КонецЕсли;
ДлинноеНаименование = "";
// Пример получения значения дополнительного реквизита
// Здесь мы предполагаем, что у нас есть функция, которая возвращает доп. реквизит
// Или получаем его напрямую, если он добавлен на форму
// Вариант 1: Если доп. реквизит добавлен на форму как поле
Если ТекущийОбъект.ДополнительныеРеквизиты.Найти("ДлинноеНаименование") <> Неопределено Тогда
Для Каждого ДопРеквизит Из ТекущийОбъект.ДополнительныеРеквизиты Цикл
Если ДопРеквизит.Свойство.Имя = "ДлинноеНаименование" Тогда
ДлинноеНаименование = ДопРеквизит.Значение;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Вариант 2: Если доп. реквизит не добавлен на форму, но есть в объекте
// и мы его как-то получили (например, через ФункционалДополнительныхРеквизитов)
// Пример:
// ДлинноеНаименование = ФункционалДополнительныхРеквизитов.ПолучитьЗначениеДополнительногоРеквизита(ТекущийОбъект.Ссылка, "ДлинноеНаименование");
Если Не ПустаяСтрока(ДлинноеНаименование) Тогда
// Обрезаем длинное наименование до стандартной длины
// (например, 100 символов, если стандартная длина Наименования 100)
ТекущийОбъект.Наименование = Лев(ДлинноеНаименование, 100);
КонецЕсли;
Таким образом, мы сохраняем функциональность стандартного поля Наименование, но при этом даем пользователю возможность вводить более длинные описания в отдельное, специально предназначенное для этого поле.
Преимущества этого метода: максимальная гибкость в длине поля, минимальное вмешательство в структуру основной таблицы объекта, возможность использования стандартных механизмов работы с дополнительными реквизитами. Недостатки: может потребоваться дополнительная программная логика для синхронизации полей, а также возможные нюансы при работе с отчетами, которые не умеют работать с дополнительными реквизитами напрямую.
Как мы видим, современные возможности платформы 1С:Предприятие, особенно механизм расширений, предоставляют нам мощные и безопасные инструменты для адаптации конфигурации под наши нужды, минимизируя риски при последующих обновлениях. Всегда анализируйте требования и выбирайте метод, который наилучшим образом соответствует вашей ситуации и версии платформы.