fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Технології

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

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