СправочникСписок.Отбор.Ссылка.Значение. 2 страница

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

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


 


484



Часть III. Специальные приемы разработки

Третья часть нашей книги будет посвящена некоторым конкретным приемам использования тех или иных объектов конфигурации которые могут потребоваться разработчику в процессе создания и модификации конфигурации.


Глава 1. Общие приемы

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


 


486



Специальные приемы разработки


Общие приемы


 


           
 
   
 
   
 
   

Организация подборов

з

адача организации подбора заключается, как правило, | заполнении табличной части информацией, которую выбирает пользователь в списке какого-либо объекта.

Алгоритм организации подборов

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

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

Результат подбора будет доступен в обработчике события «Обработка выбора» формы документа или элемента управления (в зависимости от подчинения формы справочника).

Событие «Обработка выбора» будет вызвано в двух случаях:


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

Добавим кнопку «Подбор»

В форме документа, в обработчик события нажатия кнопки «Подбор» добавим следующий текст:


 


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

• когда в форме справочника будет вызван метод
ОповеститьОВыборе().

Различные способы подбора мы проиллюстрируем на примере подбора элементов справочника «Номенклатура» в документ «ПриходнаяНакладная».

Одиночный подбор

П

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


ПроцедураКоманднаяПанель1Подбор(Кнопка)

ФормаПодбора = Справочники.Номенклатура

ПолучитьФормуВыбора( ,ЭлементыФормы.Материалы); ФормаПодбора.Открыть(); КонецПроцедуры

Затем создадим обработчик события «Обработка выбора» табличного поля «Материалы», расположенного в форме документа «ПриходнаяНакладная»:

Процедура МатериалыОбработкаВыбора(Элемент,ВыбранноеЗначение,

СтандартнаяОбработка)

НоваяСтрока = Материалы.Добавить();

НоваяСтрока.Материал = ВыбранноеЗначение;

ЭлементыФормы.Материалы.ТекущаяСтрока = НоваяСтрока; КонецПроцедуры


 


488



Специальные приемы разработки


Общие приемы


 


Запустите 1С:Предприятие в режиме отладки и проверьте работу одиночного подбора.

Множественный подбор

П

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

Для разнообразия создадим форму списка справочника «Номенклатура» и затем в форме документа «ПриходнаяНакладная», в обработчик события нажатия кнопки «Подбор» внесем следующие изменения:


В форме документа «ПриходнаяНакладная» внесем в обработчик события нажатия кнопки «Подбор» следующие изменения:

Процедура КоманднаяПанельШодбор(Кнопка)

ФормаПодбора = Справочники.Номенклатура

.ПолучитьФормуСписка(, ЭлементыФормы.Материалы);

ФормаПодбора.РежимВыбора = Истина;

//ФормаПодбора.ЗакрыватьПриВыборе = Ложь;

ФормаПодбора.МножественныйВыбор = Истина;

ФормаПодбора.Открыть(); КонецПроцедуры

В обработчик события «Обработка выбора» добавим обход массива переданных элементов:


 


ПроцедураКоманднаяПанельШодбор(Кнопка)

ФормаПодбора = Справочники.Номенклатура

.ПолучитьФормуСписка( ,ЭлементыФормы.Материалы);

ФормаПодбора.РежимВыбора = Истина; ФормаПодбора.ЗакрыватьПриВыборе = Ложь; ФормаПодбора.Открыть(); КонецПроцедуры


Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение,

СтандартнаяОбработка)

Для СчетчикЦикла = 0 по РезультатВыбора.ВГраница() цикл НоваяСтрока = Материалы.Добавить(); НоваяСтрока.Материал = РезультатВыбора[СчетчикЦикла]; КонецЦикла; КонецПроцедуры


 


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

Запустите 1С:Предприятие в режиме отладки и проверьте работу множественного подбора.

Подбор с использованием множественного выбора

Е

ще одним способом организации подбора является
возможность использования свойства формы

«Множественный выбор». Это свойство разрешает множественный выбор в табличных полях формы. В этом случае в форму документа будет возвращен не элемент справочника, а массив элементов, выбранных в табличном поле формы справочника.


Запустите 1С:Предприятие в режиме отладки и проверьте работу множественного подбора (множественный выбор в табличном поле выполняется при нажатой кнопке «Control»).

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

Использование метода ОповеститьОВыборе()

М

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

Также метод ОповеститьОВыборе()может использоваться в тех случаях, когда требуется передать в форму документа не только


 


490



О6Щие приемы


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


Ввод на основании

М

еханизм ввода на основании может быть использован для ввода новых объектов различного типа (документы, справочники, планы видов характеристик и т.д.). Мы рассмотрим этот механизм на примере ввода новых документов, как наиболее распространенном.

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

Рассмотрим пример, когда документ «ОказаниеУслуги» будет вводиться на основании элемента справочника «Клиенты».

Откроем окно редактирования объекта конфигурации Документ «ОказаниеУслуги» и добавим новый реквизит документа -«ОбъектОснование» с типом СправочникСсылка.Клиенты. Создание такого реквизита не является обязательной частью механизма ввода на основании и понадобится нам только для того, чтобы в последствии построить цепочку зависимых документов.


 


492



Специальные приемы разработки


Общие приемы


 


Перейдем на закладку «Ввод на основании» и определим состав документов, на основании которых может вводиться документ «ОказаниеУслуги», и основанием для которых он может являться:


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


 


 
 


Определим состав объектов и вызовем конструктор ввода на основании...


Обратите внимание, что для заполнения реквизита «ОбъектОснование» конструктор предложил использовать значение Основание.Ссылка. Вданном случае такая запись будет избыточной, поскольку в качестве основания будет передана ссылка на элемент справочника. Однако в общем случае событие «Обработка заполнения» возникает при создании нового объекта на основании некоторого переданного значения. Совсем не обязательно, что это значение будет иметь тип ссылки.

Согласимся со всем, что предложил конструктор, и нажмем «ОК».

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


ПроцедураОбработкаЗаполненш(Основание) //{{_КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ

// Данный фрагмент построен конструктором. II При повторном использовании конструктора, // внесенные вручную изменения будут утеряны!!!


494



Специальные приемы разработки


Общие приемы


 


Если ТипЗнч(Основание) = Тип("СправочникСсылка.Клиенты") Тогда

// Заполнение шапки

Клиент = Основание.Ссылка;

ОбъектОснование = Основание.Ссылка; КонецЕсли;

//} }_KOHCTPyKTOP_BBOД HA_OCHOBAHИИ КонецПроцедуры

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

Запустите 1С:Предприятие в режиме отладки и проверьте работу ввода на основании. Обратите внимание, что в командной панели формы списка справочника «Клиенты» появилась кнопка «Ввести на основании»:


Объекты, введенные на основании

Н

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

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

Для построения цепочек связанных объектов необходимо у каждого объекта, который будет вводиться на основании, создать служебный реквизит для хранения ссылки на объект-основание. Затем следует создать объект конфигурации КритерийОтбора,который будет использоваться для установки отбора по требуемому значению служебного реквизита. В дальнейшем, для получения всех объектов, введенных на основании, достаточно будет установить нужное значение отбора в критерии отбора.

Объект конфигурации Критерий отбора

О

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

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

Отбор объектов, введенных на основании

П

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


 


496



Специальные приемы разработки


Общие приемы


 


Создадим новый объект конфигурации «КритерийОтбора» с именем «ОказаниеУслуги». На закладке «Данные» выберем тип используемого критерия - СправочникСсылка.Клиенты.

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


Запустите 1С:Предприятие в режиме отладки и проверьте работу критерия отбора:

Кнопка «Перейти» открывает форму списка критерия отбора...


 


 
 



На закладке «Формы» создадим основную форму списка при помощи конструктора.


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

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

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


ПроцедураДействияФормыДокументыКяиента(Кнопка) ФормаКритерия = КритерииОтбора.ОказаниеУслуги.ПолучитьФорму(); ФормаКритерия.Откршъ();

СписокКритерияОтбора = ФормаКритерия.ЭлементыФормы.Список.Значение; СписокКритерияОтбора.Отбор.ЗначениеОтбора.Значение =

ЭлементыФормы.СправочникСписок.ТекущаяСтрока; КонецПроцедуры

Этот обработчик открывает форму критерия отбора и затем устанавливает значение единственного элемента отбора объекта


498



шальные приемы разработки


циальные приемы разработки


 


ссылке На

КритерийОтбораСписок.ОказаниеУслуги равным элемент справочника.

Запустите 1С:Предприятие в режиме отладки и проверьте работу нового пункта меню.

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

Добавьте в обработчик события «При открытии» формы документа «ОказаниеУслуги» следующие строки:


Глава 2. Формы

В этой главе мы собрали приемы работы, которые имеют отношение к формам объектов. Кроме этого в начале главы дается краткое пояснение того, каким образом в системе 1С:Предприятие данные отображаются в формах.


ПроцедураДействияФормыДокументыКлиента(Кнопка) ФормаКритерия = КритерииОтбора.ОказаниеУслуги.ПолучитьФорму(); ФормаКритерия.Открыть();

СписокКритерияОтбора = ФормаКритерия.ЭлементыФормы.Список.Значение; СписокКритерияОтбора.Отбор.ЗначениеОтбора.Значение =

ЭлементыФормы.СправочникСписок.ТекущаяСтрока;

МассивСсылок = КритерииОтбора.ОказаниеУслуги

.Найти(ЭлементыФормы.СправочникСписок.ТекущаяСтрока); Для Каждого НужнаяСсылка из МассивСсылок цикл

СообщитьдаужнаяСсылка); КонецЦикла; КонецПроцедуры

Запустите 1С:Предприятие в режиме отладки и проверьте вывод списка зависимых документов в окно сообщений.


500



Специальные приемы разработки


Формы


 


Данные и элементы управления

В

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

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

Связь формы и элементов управления с данными осуществляется при помощи реквизитов формы. Список существующих реквизитов формы доступен на закладке «Реквизиты» окна редактирования формы.

Среди всех реквизитов формы, как правило, существует один основной реквизит (он выделен жирным шрифтом). Основной реквизит определяет источник данных для формы в целом. От типа значения основного реквизита формы зависит не только то, какие данные будУт отображены в элементах управления формы, но и поведение самой формы. Например, если основному реквизиту формы указать тип значения ДокументОбъект.ПриходнаяНакладная,то при закрытии формы программа будет запрашивать подтверждение записи ' проведения документа. Если же основному реквизиту формы указать тип значения СправочникСписок.Номенклатура, то подобного подтверждения при закрытии формы возникать не будет.


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

СправочникСписок.Номенклатура или

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

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

Рассмотрим этот механизм на примере элемента управления Поле ввода, расположенного в колонке «Вид номенклатуры» формы списка справочника «Номенклатура»:

Поскольку форма отображает данные объекта

СправочникСписок.Номенклатура,к свойствам, методам и


 


502



Специальные приемы разработки


Формы


 


       
 
 
   



событиям объекта Формадобавляется расширение формы списка справочника:

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


 




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


 


504