Подбор товаров в табличную часть документа
Часто бывает ситуация, когда необходимо организовать осуществление подбора товара в табличную часть документа. Во всех стандартных документах этот механизм уже организован, а вот что касается созданных программистом при внедрении какой-либо новой разработки, то это уже труднее. Если программист добавил новый документ в типовую конфигурацию, то как правило в этом документе подбор пишется вручную, хотя это можно сделать и так как я внизу напишу, используя типовую обработку «Подбор номенклатуры».
Процедура вызова окна подбора:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Процедура ДействиеПодбор() СписокВидовПодбора = Новый СписокЗначений; СписокВидовПодбора.Добавить(, "По справочнику"); СтруктураПараметровПодбора = Новый Структура; СтруктураПараметровПодбора.Вставить("Команда" , ""); СтруктураПараметровПодбора.Вставить("СписокВидовПодбора", СписокВидовПодбора); СтруктураПараметровПодбора.Вставить("Заголовок" , "Подбор товаров"); СтруктураПараметровПодбора.Вставить("ЕстьКоличество" , Истина); СтруктураПараметровПодбора.Вставить("ЕстьЦена" , Ложь); СтруктураПараметровПодбора.Вставить("ЕстьСерия" , Ложь); СтруктураПараметровПодбора.Вставить("Склад" , Неопределено); СтруктураПараметровПодбора.Вставить("ВалютаДокумента" , Валюта); СтруктураПараметровПодбора.Вставить("ВалютаЦены" , Валюта); // Открываем форму подбора. ФормаПодбора = Обработки.ПодборНоменклатуры.ПолучитьФорму("ОсновнаяФорма", ЭтаФорма, ЭтаФорма); ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = СтруктураПараметровПодбора; ФормаПодбора.Открыть(); КонецПроцедуры // ДействиеПодбор() |
В параметрах функции «ПолучитьФорму» разработчик указывает к какому объекту формы мы отправим результат выбора в форме подбора. В нашем случае результат мы отправляем всей родительской форме «ЭтаФорма», а вот в обработчике этой формы уже обрабатываем в зависимости от типа команды в структуре параметров отбора (СтруктураПараметровПодбора.Вставить(«Команда» , «»)). В нашем случае эта команда не обрабатывается из наличия только одной табличной части в документе, но вот если бы было более. тогда пришлось бы использовать параметр «Команда». 🙂
Процедура обработки подбора товаров в табличную часть нового документа:
|
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 30 31 32 33 34 35 |
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) Перем Номенклатура, ЕдиницаИзмерения, Количество, ХарактеристикаНоменклатуры; Если ТипЗнч(ЗначениеВыбора) = Тип("Структура") Тогда // Получим параметры подбора из структуры подбора. ЗначениеВыбора.Свойство("Номенклатура" , Номенклатура); ЗначениеВыбора.Свойство("ЕдиницаИзмерения", ЕдиницаИзмерения); ЗначениеВыбора.Свойство("Количество" , Количество); ЗначениеВыбора.Свойство("Характеристика" , ХарактеристикаНоменклатуры); // Ищем выбранную позицию в таблице подобранной номенклатуры. // Если найдем - увеличим количество; не найдем - добавим новую строку. СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("Номенклатура" , Номенклатура); СтруктураОтбора.Вставить("ЕдиницаИзмерения" , ЕдиницаИзмерения); СтруктураОтбора.Вставить("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры); СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(Товары, СтруктураОтбора); Если СтрокаТабличнойЧасти <> Неопределено Тогда // Нашли, увеличиваем количество в первой найденной строке. СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество; Иначе // не нашли - добавляем новую строку СтрокаТабличнойЧасти = Товары.Добавить(); СтрокаТабличнойЧасти.Номенклатура = Номенклатура; СтрокаТабличнойЧасти.ЕдиницаИзмерения = ЕдиницаИзмерения; СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = ХарактеристикаНоменклатуры; СтрокаТабличнойЧасти.Количество = Количество; КонецЕсли; ЭлементыФормы.Товары.ТекущаяСтрока = СтрокаТабличнойЧасти;//установим активную строку ЭлементыФормы.Товары.ТекущаяКолонка = ЭлементыФормы.Товары.Колонки.Количество;//установим активную колонку табличной части КонецЕсли; КонецПроцедуры // ОбработкаВыбора() |
Вот таким образом обрабатывается добавление товаров в табличную часть документов, которые добавил разработчик в конфигурацию. Но тут надо заметить, что в процедуре подбора используется функция «НайтиСтрокуТабЧасти», которая является функцией из типовой конфигурации модуля «ОбработкаТабличныхЧастей». Её можно скопировать и вставить в Вашу личную конфигураци. или личный модуль, например «ОбщиеМодули.ЛичныйМодуль».

