3 курс (заочка) / Методические пособия / Пособие для ответов на контрольные вопросы
.pdfЗанятие 27 841
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и откроем форму редактирования клиента. В поле Адрес наберем «м», и система предложит на выбор два подходящих названия (рис. 27.25).
Рис. 27.25. Выбор из заданного списка значений в поле ввода
Аналогичные действия, которые мы выполнили в конфигураторе, можно выполнить и во встроенном языке. То есть в зависимости от некоторого алгоритма можно формировать список выбора для поля ввода динамически.
Более того, разработчик из встроенного языка может изменять тот список выбора, который формируется платформой автоматически, например в автогенерируемых формах. Для этого используется обра-
ботчик события Обработка получения данных выбора, который распо-
лагается в модуле менеджера объекта. Например, в модуле менеджера справочника, когда в поле ввода подбирается один из элементов этого справочника.
Форма выбора для поля, содержащего ссылочный реквизит
В процессе работы прикладного решения довольно распространенной является ситуация, когда данные вводятся в поля ссылочных реквизитов, то есть реквизитов, ссылающихся на какие-либо объекты конфигурации.
Например, в документе Оказание услуги мы заполняем поля ссылоч-
ного типа Клиент (тип СправочникСсылка.Клиенты), Мастер (тип СправочникСсылка.Сотрудники) и др.
844 1С:Предприятие 8.3. Практическое пособие разработчика
ВНИМАНИЕ!
Не забудьте установить флажок Основной реквизит в свойствах реквизита Список. Если этого не сделать, то форма «не будет знать», откуда ей брать данные.
Затем перетащим этот реквизит в окно элементов формы. Согласимся с предложением «Добавить колонки таблицы Список?». В форме появится таблица Список, отображающая список сотрудников.
Теперь немного изменим внешний вид формы.
В окне элементов формы раскроем таблицу Список и удалим поле
Код.
Затем удалим командную панель формы, так как таблица по умолчанию имеет свою командную панель. Для этого выделим корневой элемент Форма, откроем его палитру свойств и установим свойство ПоложениеКоманднойПанели в значение Нет (рис. 27.29).
Рис. 27.29. Установка свойств формы
Чтобы из таблицы, содержащей список сотрудников, можно было сделать выбор, откроем палитру свойств таблицы Список и установим флажок РежимВыбора (рис. 27.30).
И в заключение зададим заголовок формы Выбор сотрудников, а флажок АвтоЗаголовок снимем, чтобы не отражался заголовок, заданный нами в расширенном представлении списка для справоч-
ника Сотрудники (рис. 27.31).
846 1С:Предприятие 8.3. Практическое пособие разработчика
Теперь откроем окно редактирования объекта конфигурации
Документ ОказаниеУслуги.
Вызовем палитру свойств реквизита Мастер и нажмем кнопку выбора в поле Форма выбора. Откроется список форм, созданных в конфигурации для объекта, на который ссылается данный реквизит. В данном случае для справочника Сотрудники, на который ссылается реквизит Мастер, создана одна форма – ФормаДляВыбора. Выберем ее (рис. 27.32).
Рис. 27.32. Установка формы выбора для ссылочного реквизита
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и откроем один из документов Оказание услуги. Нажмем кнопку выбора в поле Мастер и в выпадающем списке, открывшемся под полем ввода, нажмем ссылку Показать все.
Откроется созданная нами произвольная форма с заголовком Выбор сотрудников (рис. 27.33).
Таким образом, поскольку мы |
задали свойство Форма |
выбора |
на уровне реквизита Мастер, а |
не на уровне отдельной |
формы, |
в любой форме документа ОказаниеУслуги, где используется данный реквизит, при выборе в поле Мастер будет открываться наша специальная форма.
848 1С:Предприятие 8.3. Практическое пособие разработчика
Темсамымпризаписидокумента этот реквизит будет проверяться на заполнение. Если значение реквизита не заполнено, будет выдано сообщение об ошибке, и документ не будет сохранен
(рис. 27.34).
Рис. 27.34. Свойство «Проверка заполнения» реквизита «НаборСвойств»
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и откроем документ Оказание услуги № ЦБ000000001. В табличной части этого документа содержится одна строка с услугой Диагностика, для которой колонка Набор свойств не заполнена. При проведении этого документа будет выдано сообщение об ошибке, и документ не будет проведен
(рис. 27.35).
Рис. 27.35. Сообщение об ошибке
Программная проверка заполнения
В режиме «Конфигуратор»
Иногда бывает нужно самостоятельно производить проверку заполнения реквизита в соответствии с программной логикой. В этом случае,еслидляреквизитаустановленосвойствоПроверка заполнения в значение Выдавать ошибку, нужно удалить этот реквизит из массива проверяемых реквизитов и выполнить проверку программным путем. Или же если для реквизита не установлена проверка заполнения, можно программно добавить реквизит в массив проверяемых реквизитов.
Занятие 27 849
Программная проверка заполнения объектов конфигурации выпол-
няется в обработчике ОбработкаПроверкиЗаполнения(), который нужно поместить в модуле объекта. Этот обработчик вызывается автоматически при сохранении любой формы или при проведении документов. Программную проверку объектов интерактивного ввода нужно делать именно в этом обработчике, а не при записи объекта.
Откроем модуль документа ОказаниеУслуги и поместим в нем следующую процедуру (листинг 27.4).
Листинг 27.4. Обработчик события «ОбработкаПроверкиЗаполнения»
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Индекс = ПроверяемыеРеквизиты.Найти("ПереченьНоменклатуры.НаборСвойств"); Если Индекс <> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(Индекс); КонецЕсли; Индекс = 0;
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры =
Перечисления.ВидыНоменклатуры.Материал Тогда Если Не ЗначениеЗаполнено(ТекСтрокаПереченьНоменклатуры.НаборСвойств)
Тогда
Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "В строке " + Строка(Индекс+1) +" списка Перечень
номенклатуры не заполнена колонка Набор свойств"; Сообщение.Поле = "ПереченьНоменклатуры[" + Строка(Индекс)
+ "].НаборСвойств"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить();
Отказ = Истина; КонецЕсли;
КонецЕсли; Индекс = Индекс + 1;
КонецЦикла;
КонецПроцедуры
Сначала мы находим реквизит табличной части НаборСвойств в массиве ПроверяемыеРеквизиты. Этот массив передается в обработчик и содержит массив проверяемых реквизитов, которым мы установили свойство Проверка заполнения в значение Выдавать ошибку во время разработки конфигурации. Если он найден, то удаляем его, так как мы будем выполнять проверку самостоятельно.
Затем мы в |
цикле обходим строки табличной части документа |
и формируем |
сообщения об ошибке только в том случае, если |