1с расширение не работает отбор по владельцу

Обновлено: 04.07.2024

Эта статья продолжает цикл статей «Первые шаги в разработке на 1С». В ней на практических примерах рассматривается механизм предопределенных данных, в т.ч. и в распределенной информационной базе.

Применимость

В статье рассматривается платформа 1С:Предприятие версии 8.3.4.465. Материал актуален и для текущих релизов платформы.

Предопределенные элементы в «1С:Предприятие 8.3»

При реализации алгоритмов разработчики часто опираются на определенные данные – элементы справочников, планов счетов, планов видов расчета и т.д.

Во встроенном языке существуют методы для поиска данных, например, НайтиПоКоду() или НайтиПоНаименованию().

Однако алгоритмы, опирающиеся на код или наименование, зачастую являются ненадежными.

Поскольку в пользовательском режиме код или наименование элемента справочника могут быть изменены, что может привести к неработоспособности алгоритмов.

Именно для решения этой проблемы и предназначены предопределенные данные – данные, созданные в конфигураторе, обратиться к которым возможно по имени, не прибегая к предварительному поиску элемента.

Таким образом, у предопределенных данных есть две “стороны”: во-первых, существует список предопределенных элементов, созданный в конфигураторе, а, во-вторых, для данных информационной базы указывается, является ли конкретный элемент предопределенным.

Предопределенные элементы могут быть созданы у:

  • справочников;
  • планов счетов;
  • планов видов характеристик;
  • планов видов расчета.

В статье рассмотрены новшества, касающиеся предопределенных данных на платформе 8.3, а также особенности работы с ними в распределенных базах (как центральных, так и периферийных) и в информационных базах в режиме разделения данных.

Справочник организации - предопределенный элемент

Для примера, создадим в справочнике Организации предопределенный элемент ОсновнаяОрганизация:

Для увеличения нажмите на изображение.

Обращение к этому элементу из программного кода будет следующим:

Код обращения

В платформе 8.3 реализована возможность связать предопределенные данные с элементами соответствующего типа.

Для этого у объектов, которые могут иметь предопределенные элементы (они указаны выше), добавлено новое свойство ИмяПредопределенныхДанных. Оно отображается в списке стандартных реквизитов:

ИмяПредопрделенныхДанных

Выберем при помощи запроса все поля из справочника Организации:

Выбор полей

Для увеличения нажмите на изображение.

На рисунке видно, что в поле ИмяПредопределенныхДанных указан именно тот идентификатор, который мы ввели в режиме конфигуратора.

Предопределенный элемент в списке отображается специальной пиктограммой:

Предопределенный элемент

Чтобы “отсоединить” элемент данных от элемента предопределенных данных, нужно присвоить свойству ИмяПредопределенныхДанных пустую строку и записать элемент:

&НаКлиенте
Процедура Отсоединить ( Команда )
ОтсоединитьНаСервере ();
КонецПроцедуры

Пиктограмма в списке изменилась:

Отсоединенный элемент

Теперь предопределенный элемент существует только в конфигурации и в данных нет элемента, привязанного к идентификатору ОсновнаяОрганизация:

Идентификатор ОсновнаяОрганизация

Для увеличения нажмите на изображение.

Обращение из программного кода к предопределенному элементу вызовет исключение:

Предопределенный элемент отсутствует в данных

Чтобы связать предопределенный элемент с новой записью, нужно присвоить свойству ИмяПредопределенныхДанных имя предопределенного элемента:

&НаКлиенте
Процедура Привязать ( Команда )
ПривязатьНаСервере ();
КонецПроцедуры

При разработке отчета на СКД часто требуется указать связь между параметрами этого отчета. Например если в отчете имеется параметры "Номенклатура" и "Серия", при выборе серии показывать только серии данной номенклатуры. Или нужно отображать в списке выбора элементов справочника "ЗначенияСвойствОбъектов" только значения, принадлежащие определенному элементу плана видов характеристик "ДополнительныеРеквизитыИСведения". Несмотря на то, что в полях и параметрах СКД есть возможность указать параметры выбора и связи параметров выбора, этот механизм не работает (по крайней мере, так обстоит дело в ERP 2.4.9.98).

Можно написать свою форму отчета, разместить на ней элементы отбора и сделать в ней все, что угодно. Но не хотелось бы терять мощные механизмы общей формы "ФормаОтчета" или копипастить их в свой отчет.

Можно модифицировать общую форму "ФормаОтчета" под свои задачи. Но не хотелось бы это делать каждый раз при разработке нового отчетов.

Предлагаю пример решения этой задачи для двух вариантов:

1. Фиксированный параметр выбора для поля "Отбор". В отчете сделан отбор по полю с типом "Справочник.ЗначенияСвойствОбъектов". При выборе значения отбора требуется показать пользователю только элементы с заданным владельцем.

2. Связи параметров выбора для поля "Параметр". В отчете имеется 2 параметра: Номенклатура и Серия. При выборе серии, показывать пользователю только серии выбранной номенклатуры

1. Фиксированный параметр выбора

Создаем отчет (файл ВнешнийОтчет_ФиксированныеПараметрыОтбора.erf).

Если отчет встроен в расширение, то необходимо:

1. Добавить в расширение подсистему ПодключаемыеОтчетыИОбработки

2. Добавить отчет в эту подсистему

3. В модуле менеджера отчета написать код:

В 1С добавить дополнительный реквизит справочника Номенклатура "Раздел комплектации" с типом значений "Дополнительное значение". Указать или сгенерировать имя реквизита, в моем случае это "РазделКомплектации_c7a03c267bb64e0eb58489873f24c25e"

В отчете составляем текст запроса:

Для поля "РазделКомплектации" нужно указать тип значения СправочникСсылка.ЗначенияСвойствОбъектов

На вкладке "Параметры" укажем выражение для параметра "Свойство": ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "РазделКомплектации_c7a03c267bb64e0eb58489873f24c25e", Истина)

Включим отбор по полю "РазделКомплектации" в пользовательские настройки: на вкладке "Настройки", "Отбор" добавими отбор "РазделКомплектации", щелкнем на нем правой кнопкой мыши, "Свойства элементов пользовательских настроек", установим флажок "Включать в пользовательские настройки".

В модуле отчета указываем, что мы перехватываем событие "ПослеЗаполненияПанелиБыстрыхНастроек":
В обработчике этого события нужно найти элемент формы в панели быстрого отбора, в котором пользователь указывает значение отбора "Раздел комплектации". В параметрах выбора этого элемента задаем отбор по владельцу - плану видов характеристик "Раздел комплектации":

2. Связи параметров выбора

Здесь мне уже не получилось обойтись без модификации общей формы "ФормаОтчета". Произошло это потому, что не получилось задать связи параметров выбора в существующих элементах панели быстрых настроек. Я выбрал обходной путь - скрывать существующий элемент формы со значением отбора, и подставлять на его место свой элемент. Связи параметров выбора зависимого элемента (серии) я задаю с данными этого элемента. Я постарался свести изменения ФормыОтчета к минимуму, и сделать их универсальными (их не нужно переписывать при создании другого отчета).

Создаем отчет (файл ВнешнийОтчет_СвязиПараметровВыбора.erf).

Как и в предыдущем примере, если отчет встроен в расширение, то необходимо:

1. Добавить в расширение подсистему ПодключаемыеОтчетыИОбработки

2. Добавить отчет в эту подсистему

3. В модуле менеджера отчета написать:

В отчете составляем текст запроса:

Параметры "Номенклатура" и "Серия" включим в пользовательские настройки (см. выше).

В модуле отчета указываем, что мы перехватываем событие "ПослеЗаполненияПанелиБыстрыхНастроек":
В обработчике этого события:

1. Находим элементы формы - значения параметров "Номенклатура" и "Серия"

2. Добавляем в форму новый реквизит "МойРеквизит_Номенклатура". Добавить элемент формы для этого реквизита.
Элементу формы указать обработчик события "ПриИзменении" (обработчик этого события и будет то единственным изменением общей формы "ФормаОтчета").

3. Скрываем старый элемент формы "Номенклатура".

4. Для элемента формы "Серия" задаем связи параметров выбора.

5. Сохраняем необходимую в дальнейшем информацию в дополнительных свойствах пользовательских настроек компоновщика настроек:

Особенности работы в формах с подчиненным справочником

При работе в формах с подчиненных справочниками имеется ряд особенностей.

Прежде всего, следует отметить свойства формы списка справочника ПараметрОтборПоВладельцу и ПараметрВыборПоВладельцу .

Свойство ПараметрОтборПоВладельцу используются для передачи в форму списка справочника информации о том, что список нужно отображать по определенному владельцу. Расширение формы списка справочника на основании значения этого свойства в процессе открытия формы устанавливает отбор по владельцу. Этот параметр используется, например, системой при открытии подчиненного справочника по определенному элементу из списка справочника-владельца (по кнопке "Перейти"). Если отсутствует колонка для отображения владельца, то при открытии формы отключается возможность управления отбором пользователем, чтобы просмотр списка выполнялся строго по указанному владельцу.

Свойство ПараметрВыборПоВладельцу используется для инициализации формы выбора. В этом случае выбор будет выполняться только для элементов с указанным владельцем. Этот параметр используется системой при инициализации выбора значения подчиненного справочника в поле ввода из формы выбора.

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

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

Выбор владельца может выполняться за счет использования стандартного диалога отбора, однако если необходимо часто выполнять такой выбор, то стандартный диалог не будет удобен.

Может использоваться возможность просмотра справочника по всем владельцам. В этом случае следует вставить в список колонку для отображения владельца. Однако такой вариант тоже может быть неудобен для выбора.

Эффективным решением может быть размещение в форме выбора поля ввода, связанного с данными отбора по владельцу ("Отбор.Владелец.Значение"). В этом случае пользователь сможет быстро установить отбор по владельцу и выбрать необходимый элемент.

Установка параметров выбора и связей параметров выбора для объектов метаданных

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. Как правило, такие ограничения бизнес-логики как ограничения выбора, должны быть одинаковыми для всех форм, в которых редактируется тот или иной объект. Поэтому задавать параметры выбора и связи параметров выбора рекомендуется в свойствах объектов метаданных - в реквизитах справочников, документов и т.п.

2. Однако могут встречаться случаи, когда ограничения выбора могут зависеть от конкретного сценария работы. В таких случаях параметры выбора могут быть уточнены по месту, в конкретной форме.

Например, в конфигурации имеются

  • справочник Сотрудники , в котором есть реквизиты Организация и ВидСотрудника (перечисление со значениями Основной / Совместитель );
  • документ ПриказОПриеме , в котором есть реквизит Организация и Сотрудник ; при этом для реквизита Сотрудник документа ПриказОПриеме задана связь параметра выбора Отбор.Организация с реквизитом Организация .

Требуется реализовать возможность выбора только основных сотрудников в зависимости от значения функциональной опции ВыбратьТолькоИзОсновыхСотрудников . Для этого необходимо

  • в форме документа ПриказОПриеме реализовать дополнительный реквизит формы ВидыСотрудников ,
  • после чего для поля формы Сотрудник может быть установлена связь параметра выбора Отбор.ВидСотрудника с реквизитом формы ВидыСотрудников ,
  • при этом реквизит формы ВидыСотрудников заполняется на основании анализа функциональной опции.

(При этом установить для реквизита Сотрудник документа ПриказОПриеме связь для параметра выбора Отбор.ВидСотрудника нет возможности, т.к. реквизита ВидСотрудника в документе ПриказОПриеме не существует.)

Тогда установка связи для параметра Отбор.Организация в свойствах реквизита Сотрудник документа ПриказОПриеме и связи для параметра Отбор.ВидСотрудника в поле формы документа ПриказОПриеме приведет к тому, что в режиме 1С:Предприятия будут работать обе связи параметра выбора. Таким образом, при выборе сотрудника в форме приказа о приеме отбор в списке сотрудников будет установлен как по организации, заполненной в документе, так и по виду сотрудника, который будет определен на основании функциональной опции.

Читайте также: