Главный Каталог Статей РФ
87238 авторов, размещено 47366 статей, сейчас на сайте пользователей: 430 Статистика
Аватар waider

Создание формы подбора для документа

Категория:  Интернет  | Автор:  waider | Опубликовано: 27.08.2010

 

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

    Далее добавляем таблицу на форму и реквизит к таблице. Тип данных реквизита будет "ДинамическийСписок". В свойствах реквизита в разделе Объект поставим галочку - "Произвольный запрос" и нажмем на ссылку Настройка списка:     В появившейся форме нам необходимо будет написать запрос который будет отображаться в таблице "Дерево". Текст запроса будет выглядеть так: ВЫБРАТЬ
        Номенклатура.Наименование КАК Группа
ИЗ
        Справочник.Номенклатура КАК Номенклатура
ГДЕ
        Номенклатура.ЭтоГруппа Теперь нужно немного изменить настройки для таблицы Дерево, точнее изменить кое какие свойства отображения нашего древовидного списка:   1. Установим галочку на свойство ТолькоПросмотр 2. Установим галочку на свойство РежимВыбора 3. ПоложениеКоманднойПанели - Нет 4. Отображение - Дерево 5. Режим выделения - Одиночный 6. Начальное отображение дерева - Раскрывать верхний уровень 7. Выбор групп и элементов - Группы 8. РазрешитьВыборКорня - Галочка   Посмотрим что у нас получилось:

Неплохо. Следующим шагом будет создание таблицы где будет отображаться сама номенклатура. Создадим на форме еще отдну таблицу Список и добавим реквизит с таким же названием. Как и в случае с реквизитом Дерево повторяем те же манипуляции, т.е. тип - ДинамическийСписок, произвольный запрос - Да. Открываем форму редактирования запроса. Тут придется написать запрос чуточку сложнее (подробности можно посмотреть в конструкторе запросов): ВЫБРАТЬ
        ЦеныСрезПоследних.Цена,
        НоменклатураСписок.Код, 
        НоменклатураСписок.Ссылка
ИЗ
        Справочник.Номенклатура КАК НоменклатураСписок
                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
                ПО НоменклатураСписок.Ссылка = ЦеныСрезПоследних.Номенклатура.Ссылка
ГДЕ
        НоменклатураСписок.Родитель.Ссылка В(&Группа)
СГРУППИРОВАТЬ ПО
        ЦеныСрезПоследних.Цена,
        НоменклатураСписок.Код,
        НоменклатураСписок.Ссылка Плюс нужно создать событие формы ПриСозданииНаСервере и прописать в нем наш фильтр "Группа": &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        Список.Параметры.УстановитьЗначениеПараметра("Группа", Группа);
КонецПроцедуры Форма почти готова. Осталось связать наши таблицы: Дерево и Список. Для этого нужно будет создать еще несколько событий для таблицы Дерево: &НаКлиенте
Процедура ОбновитьСписок()
        Список.Параметры.УстановитьЗначениеПараметра("Группа", Группа);
КонецПроцедуры

&НаКлиенте
Процедура ДеревоВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
        Группа = Значение;
        ОбновитьСписок();
КонецПроцедуры
&НаКлиенте
Процедура ДеревоОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
        Группа = ВыбранноеЗначение;
        ОбновитьСписок();
КонецПроцедуры
&НаКлиенте
Процедура ДеревоПередРазворачиванием(Элемент, Строка, Отказ)
        Группа = Строка;
        ОбновитьСписок();
КонецПроцедуры   &НаКлиенте
Процедура ДеревоПередСворачиванием(Элемент, Строка, Отказ)
        Группа = Строка;
        ОбновитьСписок();
КонецПроцедуры
&НаКлиенте
Процедура ДеревоПриСменеТекущегоРодителя(Элемент)
        Группа = Элемент.Родитель;
        ОбновитьСписок();
КонецПроцедуры Наша форма почти готова:     Ну и наконец добавим третий список (тип данных - ТаблицаЗначений), в который добавим 2 колонки - Номенклатура и Цена:     а в таблице "Список" добавим событие "Выбор": &НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

        ТекущаяСтрока = Элемент.ТекущиеДанные;
        НоваяСтрока = Отобранные.Добавить();
        НоваяСтрока.Номенклатура = ТекущаяСтрока.Ссылка;
        НоваяСтрока.Цена = ТекущаяСтрока.Цена;

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

        ВременнаяТаблица = ПолучитьИзВременногоХранилища(АдресВХранилище);

        Для Каждого ЗагружаемаяСтрока Из ВременнаяТаблица Цикл
                СтрокаТЧ = Объект["Товар"].Добавить();
                СтрокаТЧ.Номенклатура = ЗагружаемаяСтрока.Номенклатура;
                СтрокаТЧ.Цена = ЗагружаемаяСтрока.Цена;
        КонецЦикла; 

КонецПроцедуры
&НаКлиенте
Процедура Подбор(Команда)

        ФормаПодбора = ПолучитьФорму("ОбщаяФорма.ФормаПодбора");
        АдресВХранилище = ФормаПодбора.ОткрытьМодально();
        Если ЗначениеЗаполнено(АдресВХранилище) Тогда
                ПолучитьЗапасыИзХранилища(АдресВХранилище);
        КонецЕсли;

КонецПроцедуры Наконец наша форма подбора готова:  
Источник материала
Комментарии
К этой статье пока нет комментариев. Станьте первым! У нас гости не могут комментировать статьи. Пожалуйста авторизуйтесь или зарегистрируйтесь, чтобы прокомментировать.
Интересные статьи по теме
Аватар AnemoN
Накрутка лайков и подписчиков ВКонтакте Есть несколько хитрых и не очень методов, которые используются для т.н. "накрутки лайков".О заслуживающих внимания пойдет речь в этой статье....
Категория: Интернет | Автор: AnemoN | Добавлено: 17.02.2013
Аватар Jetti
Буксы — что это такое и как правильно выбрать букс для заработка Из-за коронавируса, "блуждающего" по всему миру вот уже второй год, у многих людей появилось огромное количество свободного времени. Одни стали тратить это время на хобби, другие — читать книги и смот...
Категория: Интернет | Автор: Jetti | Добавлено: 20.07.2021
Аватар Lizetta
Сколько времени уходит на создание сайта? Сколько времени тратит специалист на разработку сайта? В какой срок можно создать сайт и чем обуславливается это?...
Категория: Интернет | Автор: Lizetta | Добавлено: 03.06.2011
Аватар gul_itb
Как правильно представить информацию на сайте Зачем люди сидят в Интернете? В основном есть две причины – это развлечение и поиск информации. Ваш корпоративный сайт, конечно же тоже служит этим двум целям Интернет-общения. Даже бизнес-сайт о чем-...
Категория: Интернет | Автор: gul_itb | Добавлено: 26.10.2009
Аватар Marta22
Как улучшить страницу на сайте вконтакте Советы, как сделать страницу в vkontakte лучше...
Категория: Интернет | Автор: Marta22 | Добавлено: 21.08.2009
Свежие комментарии
Ну, вот это я понимаю, настоящая инструкция для тех, кто хочет не просто «привет, как дела», а чтобы дамы сами в личку ломились! Как говорится, техник...

Читать >>

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

Читать >>

Полностью поддерживаю подход, описанный в статье! Рисование — не просто творческое занятие, а ключевой инструмент для развития ребёнка. Как детский пс...

Читать >>

Интересная подборка ошибок, но не могу не высказать скепсис по поводу части рекомендаций. Например, о зарядке только до 80% — это логично с техническо...

Читать >>

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

Читать >>

Лучшие авторы
Аватар Igor191965
дизайнер веб-студии Sitekos.ru

Читать

Аватар megagrig
Веду компьютерный блог http://ocompah.ru

Читать

Напишите нам