В данной статье речь пойдет о создании формы подбора...

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

Текст запроса будет выглядеть так: ВЫБРАТЬ   Номенклатура. Наименование КАК Группа ИЗ   Справочник. Номенклатура КАК Номенклатура ГДЕ   Номенклатура. ЭтоГруппа Теперь нужно немного изменить настройки для таблицы Дерево, точнее изменить кое какие свойства отображения нашего древовидного списка:   1. Установим галочку на свойство ТолькоПросмотр 2. Установим галочку на свойство РежимВыбора 3. ПоложениеКоманднойПанели – Нет 4. Отображение – Дерево 5. Режим выделения – Одиночный 6. Начальное отображение дерева – Раскрывать верхний уровень 7. Выбор групп и элементов – Группы 8. РазрешитьВыборКорня – Галочка   Посмотрим что у нас получилось: Неплохо. Следующим шагом будет создание таблицы где будет отображаться сама номенклатура. Создадим на форме еще отдну таблицу Список и добавим реквизит с таким же названием. Как и в случае с реквизитом Дерево повторяем те же манипуляции, т. е. тип – ДинамическийСписок, произвольный запрос – Да. Открываем форму редактирования запроса. Тут придется написать запрос чуточку сложнее (подробности можно посмотреть в конструкторе запросов): ВЫБРАТЬ   ЦеныСрезПоследних. Цена,   НоменклатураСписок. Код,   НоменклатураСписок. Ссылка ИЗ   Справочник. Номенклатура КАК НоменклатураСписок   ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений. Цены. СрезПоследних КАК ЦеныСрезПоследних   ПО НоменклатураСписок. Ссылка = ЦеныСрезПоследних. Номенклатура. Ссылка ГДЕ   НоменклатураСписок. Родитель. Ссылка В(&Группа) СГРУППИРОВАТЬ ПО   ЦеныСрезПоследних. Цена,   НоменклатураСписок. Код,   НоменклатураСписок. Ссылка Плюс нужно создать событие формы ПриСозданииНаСервере и прописать в нем наш фильтр “Группа”: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)   Список. Параметры. УстановитьЗначениеПараметра(“Группа”, Группа); КонецПроцедуры Форма почти готова. Осталось связать наши таблицы: Дерево и Список. Для этого нужно будет создать еще несколько событий для таблицы Дерево: &НаКлиенте Процедура ОбновитьСписок()   Список. Параметры. УстановитьЗначениеПараметра(“Группа”, Группа); КонецПроцедуры &НаКлиенте Процедура ДеревоВыборЗначения(Элемент, Значение, СтандартнаяОбработка)   Группа = Значение;   ОбновитьСписок(); КонецПроцедуры &НаКлиенте Процедура ДеревоОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)   Группа = ВыбранноеЗначение;   ОбновитьСписок(); КонецПроцедуры &НаКлиенте Процедура ДеревоПередРазворачиванием(Элемент, Строка, Отказ)   Группа = Строка;   ОбновитьСписок(); КонецПроцедуры   &НаКлиенте Процедура ДеревоПередСворачиванием(Элемент, Строка, Отказ)   Группа = Строка;   ОбновитьСписок(); КонецПроцедуры &НаКлиенте Процедура ДеревоПриСменеТекущегоРодителя(Элемент)   Группа = Элемент. Родитель;   ОбновитьСписок(); КонецПроцедуры Наша форма почти готова:     Ну и наконец добавим третий список (тип данных – ТаблицаЗначений), в который добавим 2 колонки – Номенклатура и Цена:     а в таблице “Список” добавим событие “Выбор”: &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)   ТекущаяСтрока = Элемент. ТекущиеДанные;   НоваяСтрока = Отобранные. Добавить();   НоваяСтрока. Номенклатура = ТекущаяСтрока. Ссылка;   НоваяСтрока. Цена = ТекущаяСтрока. Цена; КонецПроцедуры Теперь необходимо чтобы эта форма возвращала отобранные значения, обратно в форму документа. Для этого создадим новую кнопку “ОК” и создадим новую команду с таким же названием. Событие будет выглядеть так: &НаКлиенте Процедура ОК(Команда)   Закрыть(ЗаписатьВХранилище()); КонецПроцедуры а функция ЗаписатьВХранилище будет такая: &НаСервере Функция ЗаписатьВХранилище()   Возврат ПоместитьВоВременноеХранилище(Отобранные. Выгрузить()); КонецФункции Откроем опять форму нашего документа и исправим процедуру Подбор, добавив процедуру получения данных из временного хранилища: &НаСервере Процедура ПолучитьЗапасыИзХранилища(АдресВХранилище)   ВременнаяТаблица = ПолучитьИзВременногоХранилища(АдресВХранилище);   Для Каждого ЗагружаемаяСтрока Из ВременнаяТаблица Цикл   СтрокаТЧ = Объект["Товар"].Добавить();   СтрокаТЧ. Номенклатура = ЗагружаемаяСтрока. Номенклатура;   СтрокаТЧ. Цена = ЗагружаемаяСтрока. Цена;   КонецЦикла;  КонецПроцедуры &НаКлиенте Процедура Подбор(Команда)   ФормаПодбора = ПолучитьФорму(“ОбщаяФорма. ФормаПодбора”);   АдресВХранилище = ФормаПодбора. ОткрытьМодально();   Если ЗначениеЗаполнено(АдресВХранилище) Тогда   Пол

Понравилась статья? Получай обновления и будь всегда в курсе событий!
Подпишись на RSS или
blog comments powered by Disqus