как добавить колонку в 1С без правки конфигурации: реквизит формы кодом
Добавить колонку-реквизит в 1С программно — значит создать новый реквизит формы методом ИзменитьРеквизиты и вывести его на экран командой Элементы.Добавить, не трогая объект метаданных в конфигураторе. Способ работает в управляемом приложении, не требует монопольного доступа к базе и не конфликтует с очередным обновлением типовой конфигурации от поставщика.
зачем в списке вообще появляется колонка, которой нет в типовой форме
Оптовая компания в Москве, 25 пользователей 1С:Управление торговлей, торгует стройматериалами. Отдел продаж каждое утро сверяет два списка вручную: заказы покупателей и связанные с ними заказы поставщику, чтобы понять, когда товар реально придёт на склад. Поле с плановой датой отгрузки от поставщика в системе есть — оно хранится в документе «Заказ поставщику». Но в списке «Заказы покупателей» этой колонки нет: разработчики типовой конфигурации не предусмотрели такую связку, потому что она специфична для конкретной схемы работы компании.
Менеджеры держат открытыми две вкладки и сверяют номера заказов глазами. На утренней планёрке это отнимает 15-20 минут и регулярно рождает ошибки: кто-то путает похожие номера, кто-то смотрит устаревшую версию списка. Руководитель отдела продаж просит IT-отдел просто добавить нужную колонку в список заказов покупателей.
почему прямая правка конфигурации — не всегда правильный ответ
Первое, что приходит в голову программисту 1С — открыть конфигуратор и добавить реквизит прямо в документ «Заказ покупателя». Решение работает, но у него есть цена. База обслуживается по регламенту обновлений: раз в квартал команда сопровождения ставит новый релиз 1С:Управление торговлей от поставщика. Если реквизит добавлен прямо в объект метаданных, а не в расширение, следующее обновление конфигурации потребует ручного объединения изменений — конфигуратор покажет конфликт на изменённом объекте, и программисту придётся вручную сверять, какие правки внёс разработчик 1С, а какие сделала компания.
Пока идёт объединение и последующее обновление информационной базы, 25 человек не могут работать: база переходит в монопольный режим. По опыту, ручное слияние одного конфликтующего объекта занимает от 40 минут до пары часов в зависимости от того, сколько правок накопилось за квартал. Если таких доработок в базе накопился десяток, обновление растягивается в отдельный проект на несколько дней вместо одного вечера.
В этом конкретном случае решение проще: значение даты уже хранится в системе, в документе «Заказ поставщику». Нужно не создавать новое поле в базе данных, а просто вывести существующее значение в другой список. Метаданные документа для этого трогать не нужно — реквизит можно добавить прямо на форму, программно, во время работы приложения.
как добавить колонку-реквизит программно: три шага в коде формы
Реквизит формы существует только в оперативной памяти сеанса — он не меняет структуру базы данных и не требует пересборки конфигурации. Логика в модуле формы списка «Заказы покупателей» строится в три шага.
- ✓Через метод ИзменитьРеквизиты добавляют новый реквизит формы с именем и типом (в примере — Дата), привязанный к строке динамического списка, и задают ему заголовок для отображения.
- ✓Командой Элементы.Добавить создают элемент формы с видом «Поле формы», указывают путь к данным на новый реквизит и размещают его в таблице рядом с существующими колонками — обычно после поля с номером заказа поставщику.
- ✓В обработчике события «При получении данных на сервере» динамического списка для каждой строки выполняют запрос к документу «Заказ поставщику» по ссылке из связанного реквизита и записывают полученную дату в добавленный реквизит формы.
Колонка появляется в списке без единой правки в дереве метаданных. При следующем обновлении конфигуратор не увидит конфликта: форма списка модифицирована в модуле, а не в структуре объекта, и стандартный механизм обновления просто перенесёт правку вместе с остальным кодом.
когда программного реквизита формы недостаточно
Способ отлично работает, когда нужные данные уже где-то хранятся и колонка их просто показывает. Но если менеджер должен сам вписывать в новую колонку значение, которое раньше нигде не фиксировалось, например пометку «клиент просил перенос» — реквизит формы не подойдёт: он существует только на время открытого сеанса и исчезает при закрытии формы, сохранить введённые данные некуда.
В такой ситуации нужен реальный объект в базе данных, но добавлять его напрямую в типовую конфигурацию по-прежнему рискованно из-за будущих обновлений. Рабочий компромисс — расширение конфигурации: отдельный контейнер с собственным реквизитом, который система накладывает поверх типовых объектов, не трогая их напрямую. При обновлении расширение переустанавливается вместе с новым релизом, конфликтов на уровне метаданных не возникает.
Проектирование такого расширения требует расчёта производительности и проверки совместимости с будущими обновлениями поставщика — эту работу закрывает услуга доработка 1С.
сравнение трёх способов добавить колонку
| способ | где хранится значение | риск при обновлении | когда применять |
|---|---|---|---|
| правка объекта конфигурации напрямую | новое поле в таблице базы данных | высокий: конфликт при каждом обновлении, ручное слияние | почти никогда, если базу планируют обновлять у поставщика |
| реквизит формы программно | только в памяти сеанса, не сохраняется | практически нулевой | данные уже есть в системе, колонка их только показывает |
| расширение конфигурации | отдельная таблица расширения в базе данных | низкий: расширение переустанавливается вместе с обновлением | нужно хранить новые данные, которых раньше не было |
как это влияет на график обновлений и сопровождение
Компания из примера добавила колонку с плановой датой отгрузки реквизитом формы за один рабочий день, включая тестирование на копии базы. Следующее плановое обновление типовой конфигурации прошло без единого конфликта на этом участке — конфигуратор не увидел изменений в структуре объектов, потому что их там и не было.
Если в базе уже накопилось несколько правок прямо в объектах метаданных, перед следующим обновлением 1С имеет смысл провести ревизию: часть доработок можно перенести в форму или расширение и снять с них риск конфликта заранее, а не разбираться с ним в ночь обновления. Такую ревизию и сам перенос делаем при сопровождении базы, тариф на работу программиста 1С — 3800 руб/час, точную оценку даём после просмотра списка изменённых объектов.
Если компания только выбирает, с какой конфигурацией стартовать, разумнее сразу закладывать архитектуру, где пользовательские доработки живут в расширениях поверх типовой конфигурации. Это обсуждаем на этапе внедрения 1С:Управление торговлей или другой конфигурации, чтобы будущие обновления не превращались в отдельный проект каждый квартал.
❓ Частые вопросы
Нужно ли открывать конфигуратор, чтобы добавить колонку-реквизит программно?
Нет, если новых данных в базе не появляется — реквизит формы добавляется прямо в модуле формы методом ИзменитьРеквизиты во время работы обычного приложения. Конфигуратор нужен только если значение придётся сохранять в базе данных, а не просто выводить уже существующие данные из другого объекта.
Сохранится ли добавленная колонка после закрытия формы?
Реквизит формы живёт только на время открытого сеанса и исчезает при закрытии окна — это не постоянное хранилище. Если пользователь должен вводить в колонку значение, которое нужно помнить между сеансами, требуется реальный объект в базе данных: новый реквизит справочника, документа или отдельное расширение конфигурации.
Что будет с такой колонкой при обновлении типовой конфигурации?
Ничего плохого: реквизит формы находится в коде модуля, а не в структуре объекта метаданных, поэтому конфигуратор не фиксирует его как конфликтующее изменение при слиянии с новым релизом поставщика. Обновление проходит стандартно, без ручной сверки этого участка кода.
Сколько стоит добавить такую доработку в готовую базу 1С?
Зависит от сложности запроса за данными и количества форм, куда нужно вывести колонку. Работу программиста 1С по сопровождению и доработке оцениваем по тарифу 3800 руб/час, после просмотра конкретной задачи называем точные часы и срок.
Чем расширение конфигурации отличается от реквизита формы?
Расширение хранит новый реквизит в отдельной таблице базы данных и накладывается поверх типовой конфигурации, поэтому данные сохраняются постоянно и переживают обновления. Реквизит формы существует только в памяти сеанса и подходит, если нужно просто показать уже имеющиеся данные, а не завести новое поле.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

