КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
СправочникСписок.Отбор.Ссылка.Значение. 3 страница
Специальные приемы разработки
И в заключение, поскольку поле ввода будет отображать значение реквизита справочника типа Перечисление.ВидыНоменклатуры, к свойствам и событиям поля ввода добавляется расширение поля ввода перечисления. А раз это поле ввода расположено в табличном поле, xo к его свойствам и событиям добавляется также расширение элементов управления, расположенных в табличном поле: должно содержать путь к данным. Путем к данным может являться либоимя реквизита формы, либо путь к одному из свойств реквизита Например, если в форме существует элемент управления табличное
Теперь, когда мы представляем, что такое расширение, рассмотрим более подробно расширение элементов управления, расположенных в форме. В числе прочего, это расширение добавляет элементам управлени одно важное свойство - Данные. Это свойство имеет тип Строка Специальные приемы разработки Формы
Если на этой же форме разместить поле ввода, то его свойство
Таким образом свойство Данные позволяет связать элемент управления с теми данными, которые он должен отображать. Следует заметить, что при определении свойства Данные в конфигураторе, предоставляется возможность выбрать только из тех реквизитов, которые имеют подходящий тип для отображения в конкретном элементе управления. Следующим важным свойством, которым обладают элементы управления расположенные в форме, является свойство «ТипЗначения». Это свойство содержит тип реквизита, данные которого отображает элемент управления. При выборе в конфигураторе значения свойства Данные, свойство Тип значения заполняется автоматически, на основании типа выбранных данных. При установленной связи с данными свойство Тип значения становится недоступным для изменения. Однако, если связь с данными не задана, можно изменять свойство Тип значения. Такой способ используется иногда для связи элемента управления не с самими данными, а с некоторым типом данных. Причем, если указать тип, допускающий однозначный выбор данных (например, СправочникСписок.Номенклатура), то эти данные даже будут отображены в элементе управления. В качестве примера можно создать форму, не имеющую ни одного реквизита, разместить в ней табличное поле и указать, что его тип значения будет равен СправочникСписок.Номенклатура. При открытии этой формы в режиме 1С:Предприятия мы увидим, что табличное поле содержит данные элементов справочника «Номенклатура». Говоря о связи элементов управления и данных, следует отдельно упомянуть поле ввода, поскольку это элемент управления имеет одну особенность - свойство ОграничениеТипа. Использование этого свойства позволяет ограничить пользователя в выборе возможных типов данных значений, вводимых в поле ввода. Например, если реквизит формы имеет составной тип данных: • Число, • Строка, • Дата, • СправочникСсылка.Клиенты, • СправочникСсылка.Сотрудники,
Специальные приемы разработки Формы
то можно ограничить пользователя лишь возможностью ввода значений примитивных типов: • Число, • Дата, • Строка:
Интересной особенностью здесь является то, что типы данных, заданные в свойстве ОграничениеТипа поля ввода, могут не совпасть с типом данных реквизита, отображаемого в поле ввода. Например, как в приведенном выше примере, когда в реквизите уже хранится значение типа СправочникСсылка.Клиенты. В этом случае ограничение типа будет игнорироваться, т.е. тип отображаемых данных будет обладать «большим весом», чем поле ввода, эти данные отображающее. Такое решение вполне логично, поскольку именно реквизит содержит данные, а поле ввода - всего лишь инструмент для их отображения.
[ециальные приемы разработки Формы
Связанные списки
ри создании прикладных решений часто возникает необходимость разместить на одной форме несколько списков, информация в которых должна быть логически связана между собой. Одним из распространенных примеров является необходимость отобразить в форме списка документов движения, которые имеются в каком-либо регистре. В этом случае требуется в одном списке отобразить перечень документов, а в другом - движения того документа, который выбран в первом списке. Рассмотрим вариант создания такой связи между списками на примере списка документа «ПриходнаяНакладная», в котором будут отображаться движения документа по регистру «ОстаткиМатериалов». Откроем конфигуратор и создадим основную форму списка документа «ПриходнаяНакладная». Уменьшим высоту табличного поля списка документа и на освободившемся пространстве расположим табличное поле с именем «ТабличноеПоле» и типом РегистрНакопленияСписок.ОстаткиМатериалов: Добавим на форму табличное поле...
Таким образом мы определили, какие данные будут содержаться в нижнем списке, осталось только установить между двумя списками связь таким образом, чтобы при изменении выбранного элемента в верхнем списке, содержимое нижнего списка менялось соответствующим образом. Для этого откроем палитру свойств добавленного нами табличного поля и воспользуемся свойством «Связь по регистратору». Связь по регистратору мы будем устанавливать с обработчиком события «При активизации строки» верхнего поля «ДокументСписок»: Установим связь по регистратору... \
Специальные приемы разработки Фс
Чтобы выполнить этот пример, уберем для нижнего табличного поля связь по регистратору, а для верхнего создадим обработчик события «При активизации строки»:
ПроцедураДокументСписокПриАктивизацииСтроки(Элемент) ЭлементыФормы.ТабличноеПоле.Значение.Отбор.Регистратор .Установить(Элемент.ТекущаяСтрока, Истина); КонецПроцедуры Обратите внимание, что при перемещении в верхнем списке, данные нижнего списка меняются соответствующим образом:
Аналогичную связь можно установить исключительно программными средствами, не используя связь по регистратору. Для этого нужно в обработчике события «При активизации строки» верхнего списка устанавливать отбор нижнего списка по регистратору-
Специальные приемы разработки Формы
процессе разработки форм периодически возникает необходимость в изменении данных табличного поля расположенного в форме, в зависимости от желания пользователя или алгоритмов работы программы. Только что мы с вами показали в форме списка документа «ПриходнаяНакладная» движения по регистру остатков «ОстаткиМатериалов». Нашим пользователям очень понравилась такая возможность, и они захотели также иметь возможность видеть на этой форме и движения по регистру остатков «СтоимостьМатериалов». Добавление в форму еще одного такого же табличного поля нежелательно, поскольку это будет отвлекать внимание от списка документов, и занимать много места на экране. Поэтому мы воспользуемся возможностью изменения источника данных у элемента управления. Откроем в конфигураторе форму списка документа «ПриходнаяНакладная», сдвинем табличное поле вниз и на освободившемся пространстве расположим элемент управления переключатель, состоящий из двух кнопок:
После того, как мы укажем заголовок первой кнопки - «Остатки материалов» - система автоматически сформирует имя этой кнопки «ОстаткиМатериалов». Отметим, что эта кнопка будет первой в группе, и напишем подсказку - «Отобразить движения по регистру «Остатки материалов». Затем создадим вторую кнопку с заголовком «Стоимость материалов». Напишем подсказку - «Отобразить движения по регистру «Стоимость материалов». Нажмем «ОК» и расположим кнопки в форме:
Откроем палитру свойств кнопки «ОстаткиМатериалов» и укажем, что тип выбираемого значения будет Строка, а выбираемое значение будет равно «Остатки». По умолчанию все кнопки имеют тип выбираемого значения Число и выбираемое значение 0, поэтому для того, чтобы можно было анализировать состояние группы переключателей, необходимо для каждой кнопки в этой группе задать уникальное выбираемое значение. Кроме этого, одна из кнопок в группе всегда должна быть первой в группе - именно по ее значению можно будет определить состояние группы, а переключение кнопок в группе будет выполняться в порядке обхода элементов управления формы (Форма | Порядок обхода). По умолчанию установлен автопорядок обхода элементов формы (свойство формы «Автопорядок обхода»). Поэтому если вам
Специальные приемы разработки
Сейчас нас устраивает автоматический порядок обхода элементов и поэтому мы создадим обработчик события «ПриОткрытии» формы, и зададим в нем начальное значение нашего переключателя: В этой процедуре, в зависимости от значения переключателя, мы выбираем тот или иной источник данных для табличного поля. После выбора источника необходимо выполнить метод СоздатьКолонки() для того, чтобы удалить старые колонки табличного поля и загрузить новые колонки из источника данных табличного поля. Откройте 1С:Предприятие в режиме отладчика и проверьте работу списка документа «ПриходнаяНакладная».
ОстаткиМатериалов = "Остатки"; КонецПроцедуры;
РегистрНакопленияСписок.СтоимостьМатериалов:
тип Укажем РегистрНакопленияСписок.СтоимостьМатериалов. В заключение создадим процедуру обработки события «При изменении» для кнопки «Остатки материалов»:
Если ОстаткиМатериалов = "Остатки" Тогда ЭлементыФормы.ТабличноеПоле.Данные = "ТабличноеПоле"; иначе ЭлементыФормы.ТабличноеПоле.Данные = "РегистрСписок"; КонецЕсли; ЭлементыФормы.ТабличноеПоле.СоздатьКолонки(); ДокументСписокПриАктивизацииСтроки(ЭлементыФормы.ДокументСписок); КонецПроцедуры
Специальные приемы разработки Формы
ак мы уже говорили выше, путем установки типа значения элемента управления также можно изменять отображаемые данные, если данные используемого типа значения могут быть однозначно отображены в элементе управления. В следующем примере мы посмотрим, как можно изменять содержимое табличного поля, не используя реквизиты формы. Нашей задачей будет создание в форме списка аналогичного механизма отображения движений документов «ОказаниеУслуги» в регистрах накопления. Откроем конфигуратор и создадим основную форму списка документа «ОказаниеУслуги» с помощью конструктора. Расположим на ней переключатель из трех кнопок:
Зададим следующие выбираемые значения переключателей: • «ОстаткиМатериалов» - «Остатки», • «СтоимостьМатериалов» - «Стоимость», • «Продажи» - «Продажи». Под переключателем расположим табличное поле с именем «ТабличноеПоле», типом ТаблицаЗначений и пустым свойством Данные:
Создадим процедуру обработки события «При открытии» формы и установим в ней начальное значение переключателя и начальное содержимое табличного поля:
ОстаткиМатериалов = "Остатки"; Массив = Новый Массив; Массив.Добавить(Тип("РегистрНакопленияСписок.ОстаткиМатериалов")); НашеОписание = Новый ОписаниеТипов(Массив); ТабПоле = ЭлементыФормы.ТабличноеПоле; ТабПоле.ТипЗначения = НашеОписание; ТабПоле.СоздатьКолонки(); ТабПоле.Значение.Отбор.Регистратор.Установить(, Истина); КонецПроцедуры
Специальные приемы разработки Формы
Затем создадим процедуру обработки события «ПриИзменении» переключателя, в которой, в зависимости от установленного значения переключателя, будем изменять свойство ТипЗначения табличного поля:
Если ОстаткиМатериалов = "Остатки" тогда НужныйТип = Тип("РегистрНакопленияСписок.ОстаткиМатериалов"); ИначеЕсли ОстаткиМатериалов = "Стоимость" тогда НужныйТип = ТипС'РегистрНакопленияСписок.СтоимостьМатериалов"); ИначеЕсли ОстаткиМатериалов = "Продажи" тогда НужныйТип = Тип("РегистрНакопленияСписок.Продажи"); КонецЕсли; Массив = Новый Массив(); Массив.Добавить(НужныйТип); НашеОписание = Новый ОписаниеТипов(Массив); ТабПоле = ЭлементыФормы.ТабличноеПоле; ТабПоле.ТипЗначения = НашеОписание; ТабПоле.СоздатьКолонки(); НашОтбор = ТабПоле.Значение.Отбор; ЗначениеОтбора = ЭлементыФормы.ДокументСписок.ТекущаяСтрока; НашОтбор.Регистратор.УстановитьСЗначениеОтбора, Истина); КонецПроцедуры Теперь осталось только создать обработчик события хПриАктивизацииСтроки» табличного поля «ДокументСписок»:
НашОтбор = ЭлементыФормы.ТабличноеПоле.Значение.Отбор; Если Элемент.ТекущиеДанные = Неопределено Тогда НашОтбор.Регистратор.Установить(, Истина); Иначе НашОтбор.Регистратор.Установить(Элемент.ТекущаяСтрока, Истина); КонецЕсли; КонецПроцедуры
Запустите 1С:Предприятие и проверьте работу списка документа «ОказаниеУслуги».
Специальные приемы разработки Формы
еобходимость вывода произвольных данных в колонках списка возникает, когда вместе с элементом списка нужно отобразить некоторую вычисляемую информацию. Мы рассмотрим эту ситуацию на примере отображения актуальной цены в списке справочника «Номенклатура». Откроем в конфигураторе форму списка справочника «Номенклатура» (или, если ее нет, создадим основную форму списка). Воспользуемся контекстным меню правой кнопки мыши и добавим в табличное поле колонку с именем и текстом шапки «Цена»: В табличное поле списка справочника Номенклатура добавим колонку Цена...
Создадим обработчик события табличного поля «При выводе строки», и добавим в него следующий текст:
ДанныеСтроки) //для элементов отобразим цену и... Если Не ДанныеСтроки.ЭтоГруппа тогда ОтборНоменклатуры = Новый Структура; ОтборНоменклатутш.ВставитьС'Номенклатура ", ДанныеСтроки. Ссылка ); ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина; АктуальнаяЦена = РегистрыСведений.Цены .ПолучитьПоследнее(, ОтборНоменклатуры.Цена; ОформлениеСтроки.Ячейки.Цена.Текст = АктуальнаяЦена; //низкие цены выделим другим цветом Если АктуальнаяЦена<500 тогда ОформлениеСтроки.Ячейки.Цена.ЦветТекста = WEBЦвета.Васильковый; КонецЕсли; КонецЕсли; КонецПроцедуры
Первое, что мы делаем в этом обработчике - проверяем, что выводимый элемент справочника не является группой. В этом случае мы создаем вспомогательную структуру для описания отбора («ОтборНоменклатуры») и помещаем в ячейку «Цена» актуальное значение цены, полученной из периодического регистра сведений «Цены». Затем мы анализируем значение выведенной цены и если оно находится в нижнем ценовом диапазоне (менее 500 рублей), выделяем это значение васильковым цветом. Для указания цвета мы используем системный набор значений WEBL4BeTa. Запустим 1С:Предприятие в режиме отладки и посмотрим, какой внешний вид примет теперь справочник «Номенклатура»:
Дата добавления: 2014-11-16; Просмотров: 1339; Нарушение авторских прав?; Мы поможем в написании вашей работы! |