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