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

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

Н

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

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

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

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

О

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

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

НЕ нашли? Не то? Что вы ищете?

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

П

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

496

497

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

Общие приемы

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

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

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

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

 




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

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

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

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

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

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

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

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

498

499

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

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

ссылке На

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

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

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

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

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

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

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

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

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

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

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

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

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

500

501

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

Формы

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

В

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

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

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

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

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

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

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

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

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

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

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

502

503

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

Формы

 




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

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





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

504

505

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

 






И в заключение, поскольку поле ввода будет отображать значение реквизита справочника типа Перечисление. ВидыНоменклатуры, к свойствам и событиям поля ввода добавляется расширение поля ввода перечисления. А раз это поле ввода расположено в табличном поле, xo к его свойствам и событиям добавляется также расширение элементов управления, расположенных в табличном поле:

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

Например, если в форме существует элемент управления табличное
поле, можно в качестве данных указать ему имя реквизита
«СправочникСписок», которь1Й имеет Утш Рек™
СправочникСписок. Номенклатура. значения

506

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

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

507

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

Формы

 



Если на этой же форме разместить поле ввода, то его свойство
Данные может иметь значение


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

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

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

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

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

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

Говоря о связи элементов управления и данных, следует отдельно упомянуть поле ввода, поскольку это элемент управления имеет одну особенность - свойство ОграничениеТипа.

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

•  Число,

•  Строка,

•  Дата,

•  СправочникСсылка. Клиенты,

•  СправочникСсылка. Сотрудники,

508

509

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

Формы

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

то можно ограничить пользователя лишь возможностью ввода значений примитивных типов:

•  Число,

•  Дата,

•  Строка:

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

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

510

511

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

Формы

 


Связанные списки

П

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

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

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

Добавим на форму табличное поле...

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

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

Установим связь по регистратору... \

512

513

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

Фс

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

Чтобы выполнить этот пример, уберем для нижнего табличного поля связь по регистратору, а для верхнего создадим обработчик события «При активизации строки»:

 



ПроцедураДокументСписокПриАктивизацииСтроки(Элемент)

ЭлементыФормы. ТабличноеПоле. Значение. Отбор. Регистратор

.Установить(Элемент. ТекущаяСтрока, Истина); КонецПроцедуры

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




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

514

515

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

Формы

Изменение источника данных табличного поля

В

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

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

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

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

Затем создадим вторую кнопку с заголовком «Стоимость материалов». Напишем подсказку - «Отобразить движения по регистру «Стоимость материалов».

Нажмем «ОК» и расположим кнопки в форме:

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

По умолчанию все кнопки имеют тип выбираемого значения Число и выбираемое значение 0, поэтому для того, чтобы можно было анализировать состояние группы переключателей, необходимо для каждой кнопки в этой группе задать уникальное выбираемое значение. Кроме этого, одна из кнопок в группе всегда должна быть первой в группе - именно по ее значению можно будет определить состояние группы, а переключение кнопок в группе будет выполняться в порядке обхода элементов управления формы (Форма | Порядок обхода). По умолчанию установлен автопорядок обхода элементов формы (свойство формы «Автопорядок обхода»). Поэтому если вам

516

517

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

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

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

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

Откройте 1С:Предприятие в режиме отладчика и проверьте работу списка документа «ПриходнаяНакладная».

Процедура ПриОткрытии()

ОстаткиМатериалов = "Остатки"; КонецПроцедуры;

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

РегистрНакопленияСписок. СтоимостьМатериалов:




 


его

тип

Укажем РегистрНакопленияСписок. СтоимостьМатериалов.

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

ПроцедураОстаткиМатериаловПриИзменении(Элемент)

Если ОстаткиМатериалов = "Остатки" Тогда ЭлементыФормы. ТабличноеПоле. Данные = "ТабличноеПоле";

иначе ЭлементыФормы. ТабличноеПоле. Данные = "РегистрСписок";

КонецЕсли;

ЭлементыФормы. ТабличноеПоле. СоздатьКолонки();

ДокументСписокПриАктивизацииСтроки(ЭлементыФормы. ДокументСписок); КонецПроцедуры

518

519

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

Формы

Изменение данных табличного поля путем установки типа значения

К

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

Нашей задачей будет создание в форме списка аналогичного механизма отображения движений документов «ОказаниеУслуги» в регистрах накопления.

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

Зададим следующие выбираемые значения переключателей:

•  «ОстаткиМатериалов» - «Остатки»,

•  «СтоимостьМатериалов» - «Стоимость»,

•  «Продажи» - «Продажи».

Под переключателем расположим табличное поле с именем «ТабличноеПоле», типом ТаблицаЗначений и пустым свойством Данные:

Создадим процедуру обработки события «При открытии» формы и установим в ней начальное значение переключателя и начальное содержимое табличного поля:

Процедура ПриОткрытии()

ОстаткиМатериалов = "Остатки"; Массив = Новый Массив;

Массив. Добавить(Тип("РегистрНакопленияСписок. ОстаткиМатериалов")); НашеОписание = Новый ОписаниеТипов(Массив); ТабПоле = ЭлементыФормы. ТабличноеПоле; ТабПоле. ТипЗначения = НашеОписание; ТабПоле. СоздатьКолонки();

ТабПоле. Значение. Отбор. Регистратор. Установить(, Истина); КонецПроцедуры

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

520

521

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

Формы

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29