1с как установить владельца реквизита формы
Перейти к содержимому

1с как установить владельца реквизита формы

  • автор:

1с как установить владельца реквизита формы

В тестовой обработке добавил программно на форму реквизит типа Справочник, у которого есть владелец
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ПолеВвода.Заголовок = «Ячейка»;
ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;

//Установка связи элемента с данными
ПолеВвода.ПутьКДанным = «Объект.Места_Ячейка»;

//Добавляем обработчики события
ПолеВвода.УстановитьДействие(
«ПриИзменении», //Имя события
«ПриИзмененииЯчейки»); //Имя процедуры обработчика

ПолеВвода.УстановитьДействие(
«НачалоВыбора», //Имя события
«ПриНачалеВыбора»); //Имя процедуры обработчика

КонецПроцедуры
Задал процедуру обработки события &НаКлиенте
Процедура ПриНачалеВыбора(Элемент)
//Надо установить отбор по складу
//СтандартнаяОбработка = Ложь;
мПараметры = Новый Структура();
мПараметры.Вставить(«РежимВыбора», Истина);
ВладелецЯчейки=ВернутьСкладВладелецЯчейки();
мПараметры.Вставить(«Отбор», Новый Структура(«Владелец», ВладелецЯчейки));
ФормаВыбора = ПолучитьФорму(«Справочник.СкладскиеЯчейки.ФормаВыбора», мПараметры, Элемент);
ФормаВыбора.Открыть();
КонецПроцедуры

&НаСервере
Функция ВернутьСсылкаНаЯчейку()
Возврат Объект.Места_Ячейка;
КонецФункции
..
При выборе значения в добавленном справочнике дважды выскакивает форма выбора. Как избежать этого

Связь формы и элементов управления с данными

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

На эту ситуацию можно посмотреть с двух сторон:

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

Объект конфигурации (данные):

Экранная форма и элементы управления:

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

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

Установка связи с данными производится путем создания реквизитов формы определенного типа и установки свойства «Данные» элементов управления и самой формы. Поясним это на простом примере. Допустим нужно создать форму списка справочника и форму элемента, но мы не будем пользоваться конструктором форм, а сделаем все вручную.

Создание формы списка

Создаем новую форму, принадлежащую справочнику «Номенклатура». При этом запускается конструктор и предлагает выбрать тип формы.

Выберем тип формы «Произвольная», в этом случае создается независимая форма, не связанная с данными. Заметьте, что у нее нет ни одного реквизита формы.

Внимание. Не путайте реквизиты формы и реквизиты объекта конфигурации , например, справочника или документа. Это разные понятия.

Создадим реквизит формы с именем «СпрСписок» и назначим ему тип «СправочникСписок.Номенклатура»:

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

Заметьте, что при указании свойства «Данные» автоматически изменилось и свойство «Тип значения». Если его сейчас изменить, то изменится тип основного реквизита формы. Мы этого делать не будем.

Если вы перейдете обратно на закладку «Реквизиты» формы, то увидите, что этот реквизит стал «основным» (выделен жирным шрифтом):

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

Например, у нашей формы списка справочника появились новые свойства, доступные из встроенного языка:

Перейдем теперь в диалог формы и разместим в рабочей области формы элемент управления «Табличное поле»:

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

На этом этапе лучше сразу изменить имя элемента управления на что-нибудь более читабельное, например, «тпСписок». Но имя элемента управления в принципе ни на что не влияет, кроме случая, когда происходит обращение к элементу управления из модуля формы.

Заметьте, что свойство «Тип значения» для табличного поля стало недоступным. Это означает, что через свойства элемента управления нельзя изменить тип значения реквизита формы. Также заметьте, что в после установки свойства «Данные» произошли некоторые изменения с формой и ее реквизитами:

  • Были созданы колонки «Код» и «Наименование» табличного поля «тпСписок». Эти колонки были автоматически связаны с реквизитами справочника (через свойство колонки «Данные»). Естественно, что это можно было сделать и вручную.
  • Была заполнена верхняя вспомогательная командная панель (замечание: точнее для командной панели было установлено свойство «АвтоЗаполнение», поэтому теперь она будет содержать стандартный набор кнопок, определяемый типом основного реквизита формы)
  • Реквизит формы «ТабличноеПоле1» был удален.

Теперь в форме есть все необходимое для того, чтобы служить формой списка элементов справочника. Зададим заголовок для формы «Список Номенклатура» и назначим эту форму в качестве основной формы списка, чтобы она открывалась по умолчанию:

Теперь можно запустить «1С:Предприятие» и проверить работу формы:

Создание формы элемента

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

Создайте новую форму, принадлежащую справочнику. При создании формы укажите тип формы «Произвольная», затем можно задать для нее имя «ФормаЭлементаНовая». Будет создана следующая экранная форма:

Перейдите на закладку «Реквизиты» и создайте новый реквизит формы с именем «СпрОбъект» и типом «СправочникОбъект.Номенклатура».

Этот реквизит пока не является основным реквизитом формы, потому что он не указан в свойстве «Данные» самой формы. Сделаем это. Откройте свойства формы и заполните свойство «Данные» (тип значения будет заполнен автоматически):

Если в палитре свойств изменить «Тип значения», то изменится тип значения реквизита формы. Сейчас этого делать не нужно.

После указания свойства «Данные» реквизит «СпрОбъект» стал основным реквизитом формы. Так как он имеет тип «СправочникОбъект.Номенклатуры», то это значительно изменило поведение формы, в частности следующие аспекты:

  • Изменился потенциальный состав кнопок командных панелей формы (верхней вспомогательной и нижней). Чтобы в верхней командной панели отображался набор кнопок, нужно в ее свойствах снять, а затем опять установить флажок «Автозаполнение». Далее добавьте кнопки ОК, Записать и Закрыть в нижнюю командную панель. Кнопка ОК будет выполнять действия «Записать и Закрыть» и она будет являться кнопкой по умолчанию (выделена жирным шрифтом и срабатывает по Ctrl-Enter). Чтобы выводились надписи и картинки, нужно для каждой кнопки соответствующим образом задать свойство «Отображение». В итоге форма приобретет следующий вид:

  • Расширился состав свойств, методов и событий контекста формы в соответствии с «расширением формы элемента справочника»:

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

Теперь разместим диалоге формы элементы управления для редактирования элемента справочника. Поместите в форму поле ввода и рядом с ним надпись «Наименование»:

В свойствах поля для ввода наименования установите свойство «Данные», связав его с реквизитом «Наименование» объекта «СпрОбъект»:

Заметьте, что тип значения поля ввода стал недоступен для редактирования. Его тип берется из структуры самого справочника:

Аналогичным образом можно разместить в диалоге формы остальные поля ввода и другие элементы управления и связать их с соответствующими реквизитами и табличными частями справочника.

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

Это окно содержит список реквизитов и табличных частей объекта конфигурации, который назначен в качестве основного реквизита формы. В колонке «Данные» установите пометку для тех реквизитов, которые необходимо разместить в форме. Если диалог вызывается повторно, то пометки установлены для элементов управления, уже расположенных в форме, и если снять пометку, то элемент управления будет удален. В колонке «Элементы формы» можно выбрать тип элемента управления, возможный для данного реквизита. Например, для реквизитов типа «булево» обычно выбирается флажок.

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

Осталось назначить эту форму в качестве основной формы элемента справочника и можно проверять ее работу:

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

Механизм уникальности форм

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

Например: для расширения формы списка справочника при подборе формы проверяется владелец формы, далее анализируется признак режима выбора. Для расширения формы элемента справочника производится анализ экземпляра объекта, затем значение ссылки, если же получается форма нового элемента, то, дополнительно, осуществляется проверка признака ЭтоГруппа . Таким образом, получение формы элемента справочника путем вызова метода объекта приводит к получению экземпляра формы именно данного объекта. Вызов метода у ссылки приведет к получению формы элемента справочника, обладающего данной ссылкой (если в памяти имеется два экземпляра объекта с данным значением ссылки, то форма будет получена у одного из них, причем конкретный порядок выбора неопределен). Вследствие этого можно рекомендовать получать форму элемента справочника посредством вызова метода у ссылки, а не у объекта.

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

Значением ключа может являться значение произвольного типа.

Например: если необходимо открывать различные экземпляры формы списка справочника сотрудников с установленным отбором по подразделению, то в качестве ключа уникальности (при открытии формы списка) можно передавать ссылку на подразделение, устанавливаемую в качестве отбора. Это позволит иметь различные экземпляры форм списка для различных подразделений и, одновременно, не открывать лишних форм списка для уже просматриваемых списков сотрудников подразделения.

Удобно в качестве ключа использовать значение типа УникальныйИдентификатор . Передача в качестве ключа нового значения данного типа — гарантирует получение нового экземпляра формы.

Подчиненный справочник 1С

В прикладных задачах иногда возникают ситуации, когда элемент какого-нибудь справочника должен быть жестко подчинен элементу другого справочника. Например, у контрагентов могут существовать договоры, которые заключены с организацией, ведущей учёт. Тогда, экземпляр справочника Договоры контрагента должен быть подчинен справочнику Контрагенты, поскольку, мы не можем создать договор сам по себе, договор должен быть привязан к конкретному контрагенту. Для реализации подобных задач необходим подчиненный справочник 1С. В выше приведенном случае, справочник Договоры контрагента станет подчинен справочнику Контрагенты. А справочник Контрагенты будет являться владельцем справочника Договоры контрагента.

Конструируем подчиненный справочник 1С

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

Подчиненный справочник 1С

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

Подчиненный справочник 1С

После таких манипуляций, нельзя создать этот справочник (в рассматриваемом примере – ДоговорыКонтрагента) без указания владельца (Контрагента).

Если мы попробуем создать, элемент справочника ДоговорыКонтрагента, то поле, в котором следует указать контрагента-владельца будет обязательным для заполнения.

Подчиненный справочник 1С

Заметьте, это поле называется Владелец и является стандартным реквизитом справочника.

Стандартный реквизит справочника 1С

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

В тоже время, на форме элемента справочника-владельца появилась команда с названием подчиненного справочника.

Подчиненный справочник 1С

После выполнении этой команды, откроется форма списка с элементами подчиненного справочника, у которых владелец ссылка на открытый элемент справочника Контрагенты.

Подчиненный справочник 1С

Программное создание элемента подчиненного справочника

Разберем программное создание элемента подчиненного справочника. Оно выполняется при помощи метода менеджера справочник СоздатьЭлемент. Только, в случае подчиненных справочников обязательно нужно указать владельца!

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

Форма обработки 1С

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

&НаСервере Процедура СоздатьПодчиненныйСправочникНаСервере() НовыйДоговор = Справочники.ДоговорыКонтрагента.СоздатьЭлемент(); НовыйДоговор.Наименование = НазваниеДоговора; НовыйДоговор.Владелец = Владелец; НовыйДоговор.Записать(); КонецПроцедуры &НаКлиенте Процедура СоздатьПодчиненныйСправочник(Команда) Если Не ПроверитьЗаполнение() Тогда Возврат; КонецЕсли; СоздатьПодчиненныйСправочникНаСервере(); КонецПроцедуры 

В клиентской процедуре используется проверка заполнения. Подробнее о проверке читайте в этой статье:

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

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

Например, у документа Продажа товаров существуют реквизиты Контрагент и Договор контрагента соответствующих типов.

Справочники 1С

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

Справочники 1С

Справочники 1С

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

Справочники 1С

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

Реквизит управляемой формы 1С

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

Реквизит управляемой формы 1С

Поиск среди подчиненных справочников

Для того, чтобы найти какой-то элемент среди подчиненных справочников, при помощи методов менеджера справочника НайтиПоНаименованию, НайтиПоКоду и НайтиПоРеквизиту следует использовать параметр Владелец этих методов.

Например, в случае поиска по наименованию, код будет следующим.

Договор = Справочники. ДоговорыКонтрагента.НайтиПоНаименованию(НазваниеДоговора,Истина,,Владелец); 

Где НазваниеДоговора – это наименование элемента справочника, который ищется.

Владелец – это ссылка на справочник владелец.

Подчиненный справочник 1С или табличная часть?

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

Подробно, о том, что выбрать при разработке подчиненный справочник или табличную часть читайте по этой ссылке на сайте its.1c.ru:

Читайте также по теме:

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

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

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Вступайте в мои группы:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *