Как добавить активное поле «Поставщик» в документ «Перемещение запасов» в 1С:УНФ?

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

При адаптации прикладных решений на платформе «1С:Предприятие 8» под нужды конкретного бизнеса ИТ-специалисты часто сталкиваются с необходимостью кастомизации типовых форм. В программном продукте «1С:Управление нашей фирмой» (УНФ) одной из таких задач является добавление информации о поставщике в документ Перемещение запасов. Это требуется для того, чтобы при перемещении ТМЦ между складами компании сохранялась сквозная аналитика происхождения товаров.

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

Выясняем причину: почему добавленное поле неактивно на форме?

В управляемом приложении 1С интерфейс формы и ее данные строго разделены. Если вы просто добавите визуальный элемент управления (например, поле ввода) на форму через дерево элементов конфигуратора, платформа не позволит пользователю вводить в него данные до тех пор, пока элемент не будет жестко связан с реквизитом базы данных. Давайте проанализируем основные причины неактивности поля:

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

Разбираем по шагам: правильное добавление поля через конфигуратор

Для того чтобы добавленное поле функционировало корректно и было активно для выбора, выполним следующую последовательность действий:

Шаг 1. Создание реквизита в метаданных документа.

Прежде чем выводить поле на форму, необходимо создать физическое поле в таблице базы данных. Для этого в конфигураторе найдем документ ПеремещениеЗапасов, перейдем на вкладку «Реквизиты» и добавим новый реквизит Поставщик с типом значения СправочникСсылка.Контрагенты.

Шаг 2. Размещение реквизита на управляемой форме.

Откроем управляемую форму документа ФормаДокумента. В правом верхнем углу окна редактора формы перейдем на вкладку «Реквизиты». Найдем там основной реквизит формы с именем Объект (он выделен жирным шрифтом). Раскроем его структуру — там появится наш новый реквизит Поставщик. Перетащим его мышкой в левую часть экрана — в дерево элементов формы, расположив в нужном месте шапки документа (например, рядом с полем склада-получателя). При таком способе переноса платформа автоматически заполнит свойство элемента ПутьКДанным значением Объект.Поставщик, что сделает поле активным для редактирования.

Шаг 3. Настройка прав доступа.

Перейдем в свойства добавленного реквизита в дереве метаданных и проверим, чтобы для основных ролей пользователей (например, «Продажи», «Закупки», «Полные права») были установлены флажки «Просмотр» и «Редактирование».

Решаем проблему пустого списка при выборе контрагентов

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

Разберем причину этого поведения. В 1С:УНФ все партнеры хранятся в едином справочнике Контрагенты. Для разделения их по ролям используются булевы признаки (флаги): «Покупатель», «Поставщик», «Прочие отношения». Если в свойствах связи параметров выбора вашего нового элемента формы или в самом реквизите был автоматически или вручную установлен отбор вида:

Отбор.Поставщик = Истина

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

Альтернативное решение №1: Использование механизма дополнительных реквизитов (без программирования)

Если вам необходимо быстро внедрить поле «Поставщик» и при этом сохранить конфигурацию на полной поддержке поставщика для облегчения последующих обновлений, мы настоятельно рекомендуем использовать типовой механизм Дополнительных реквизитов БСП. Выполним следующие настройки в режиме «1С:Предприятие»:

  1. Перейдем в раздел Настройки — Администрирование — Общие настройки.
  2. Раскроем группу Дополнительные реквизиты и сведения и установим флаг активности этого механизма.
  3. Перейдем по гиперссылке Дополнительные реквизиты.
  4. В левом списке найдем документ Перемещение запасов, выделим его и нажмем кнопку Добавить — Новый.
  5. В открывшейся карточке укажем наименование «Поставщик» и выберем тип значения Контрагент.
  6. Запишем и закроем настройки.

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

Альтернативное решение №2: Использование стандартного партионного учета

Проанализируем бизнес-логику процесса. Зачем в документе Перемещение запасов нужно поле «Поставщик»? Как правило, это требуется для организации партионного учета, чтобы при перемещении товаров со склада на склад система «понимала», чья именно партия товара сейчас двигается. В 1С:УНФ для этих целей уже заложен мощный встроенный механизм:

  1. Включим партионный учет в настройках программы: Настройки — Еще больше возможностей — Компания — Партии номенклатуры.
  2. Теперь при оформлении документов поступления (например, Приходная накладная) система будет автоматически или вручную фиксировать партию поставки. В элементе справочника Партии номенклатуры уже содержится ссылка на контрагента-поставщика и на первичный документ прихода.
  3. При создании документа Перемещение запасов в табличной части «Запасы» у пользователей появится колонка Партия. При выборе конкретной партии система автоматически свяжет перемещаемый товар с его первоначальным поставщиком.

Использование партионного учета — это наиболее методологически верный способ ведения учета ТМЦ в разрезе поставщиков, который не требует доработки интерфейса и написания программного кода.

← На главную