Если у вас нет денег, вы все время думаете о деньгах.
Если у вас есть деньги, вы думаете уже только о деньгах.
Пол Гетти
1С:Школа.
Выпуск 38.
"Работа с таблицами (часть 6) Таблица и подбор".
Сегодня на уроке мы рассмотрим одно из применений таблицы. На одном их предыдущих уроков мы говорили о подборе. Он позволяет заполнять форму (чаще всего документа) различными объектами. Это достаточно простой и удобный механизм, но у него есть свои определенные недостатки:
трудно организовать подбор объектов сразу нескольких типов
трудно накладывать фильтры на подбираемые объекты. Например, подобрать товары, остатки которых есть на складе.
В некоторых случаях проблему можно решить с помощью таблицы. Вам надо сформировать таблицу в которой были бы объекты, которые надо предложить пользователю, а он уж пусть сам выбирает, что ему действительно нужно, а что нет. Как это сделать? На самом деле - все просто.
Вы должны сформировать таблицу. Это может быть любой отчет. Условие только одно. Чтобы не затруднять себе работу - отчет должен формироваться в том же модуле, где происходит подбор. Можно для подбора использовать встроенный отчет или обработку, но в этом случае, придется колдовать с такой штукой как контекст. А этого мы еще не проходили и это не просто.
После того как отчет создан, надо грамотно воспользоваться механизмом расшифровки и предопределенной процедурой ОбработкаЯчейкиТаблицы(). Об этом мы говорили на предыдущих занятиях.
Вот вкратце и все. Теперь перейдем к практическому примеру. Для начала надо сформировать отчет. Будем формировать отчет просто по всем товарам, которые есть в справочнике "Номенклатура"
Процедура Сформировать()
таб=создатьОбъект("Таблица");
спр=СоздатьОбъект("Справочник.Номенклатура");
спр.ВыбратьЭлементы();
Пока спр.получитьЭлемент()=1 Цикл
//здесь надо сформировать необходимые
условия по которым будет выводиться
//секция с товаром.
//.................................................
//.................................................
//.................................................
таб.ВывестиСекцию("сод");
КонецЦикла;
таб.Опции(0,0,0,0);
таб.ТолькоПросмотр(1);
таб.Показать();
КонецПроцедуры
Обратите внимание: у ячеек в секции "сод" в свойстве "Расшифровка", должно быть спр.ТекущийЭлемент(). В остальном - оформляйте секцию как захотите: можете выводить товар, единицы измерения, остатки, поставщиков и т.д. Это не справочник, поэтому здесь можно поиграть и с оформлением ячеек.
Двойной щелчок в таблице надо обработать с помощью следующей процедуры:
Процедура ОбработкаЯчейкиТаблицы(зн, фл, табл, адр)
//а это создает иллюзию подбора
НоваяСтрока(); //мы ведь подбираем в документ
товар=зн;
//и дальше все необходимое по данному товару как и в
процедуре подбора
//можно попросить ввести количество товара
//ВвестиЧисло(.....) и т.д.
//.................................
//.................................
//.................................
конецПроцедуры
Удобно? Да. Но есть несколько проблем: например, если справочник многоуровневый, то надо научить таблицу открывать группы (это реально). Если справочник большой и по товарам большой оборот, то отчет может долго строиться на "заднюю дату". Этот способ не панацея, и выбирать в конечном счете Вам. В каждом случае надо решать индивидуально - пользоваться стандартным подбором или вышеописанным методом. Главное, чтобы было из чего выбирать.
На сайте 1С:Школа
Вы можете найти: все выпуски рассылки, полезности, библиотеку, интересные
задачи.
На следующей неделе: новый раздел "Шпаргалки"