Если у вас нет денег, вы все время думаете о деньгах.
Если у вас есть деньги, вы думаете уже только о деньгах.
Пол Гетти

 

1С:Школа.
Выпуск 38.
"Работа с таблицами (часть 6) Таблица и подбор".

Сегодня на уроке мы  рассмотрим одно из применений таблицы. На одном их предыдущих уроков мы говорили о подборе. Он позволяет заполнять форму (чаще всего документа) различными объектами. Это достаточно простой и удобный механизм, но у него есть свои определенные недостатки:

В некоторых случаях проблему можно решить с помощью таблицы. Вам надо сформировать таблицу в которой были бы объекты, которые надо предложить пользователю, а он уж пусть сам выбирает, что ему действительно нужно, а что нет. Как это сделать? На самом деле - все просто.

Вы должны сформировать таблицу. Это может быть любой отчет. Условие только одно. Чтобы не затруднять себе работу - отчет должен формироваться в том же модуле, где происходит подбор. Можно для подбора использовать встроенный отчет или обработку, но в этом случае, придется колдовать с такой штукой  как контекст. А этого мы еще не проходили и это не просто.

После того как отчет создан, надо грамотно воспользоваться механизмом расшифровки и предопределенной процедурой ОбработкаЯчейкиТаблицы(). Об этом мы говорили на предыдущих занятиях.

Вот вкратце и все. Теперь перейдем к практическому примеру. Для начала надо сформировать отчет. Будем формировать отчет просто по всем товарам, которые есть в справочнике "Номенклатура"

Процедура Сформировать()
    таб=создатьОбъект("Таблица");
    спр=СоздатьОбъект("Справочник.Номенклатура");
    спр.ВыбратьЭлементы();
    Пока спр.получитьЭлемент()=1 Цикл
        //здесь надо сформировать необходимые условия по которым будет выводиться
        //секция с товаром.
        //.................................................
        //.................................................
        //.................................................
        таб.ВывестиСекцию("сод");
    КонецЦикла;
    таб.Опции(0,0,0,0);
    таб.ТолькоПросмотр(1);
    таб.Показать();
КонецПроцедуры

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

Двойной щелчок в таблице надо обработать с помощью следующей процедуры:

Процедура ОбработкаЯчейкиТаблицы(зн, фл, табл, адр)
    //а это создает иллюзию подбора
    НоваяСтрока(); //мы ведь подбираем в документ
    товар=зн;
    //и дальше все необходимое по данному товару как и в процедуре подбора
    //можно попросить ввести количество товара
    //ВвестиЧисло(.....) и т.д.
    //.................................
    //.................................
    //.................................
конецПроцедуры

Удобно? Да. Но есть несколько проблем: например, если справочник многоуровневый, то надо научить таблицу открывать группы (это реально). Если справочник большой и по товарам большой оборот, то отчет может долго строиться на "заднюю дату". Этот способ не панацея, и выбирать в конечном счете Вам. В каждом случае надо решать индивидуально - пользоваться стандартным подбором или вышеописанным методом. Главное, чтобы было из чего выбирать.


На сайте 1С:Школа Вы можете найти: все выпуски рассылки, полезности, библиотеку, интересные задачи.
На следующей неделе: новый раздел "Шпаргалки"


Алексей Колосов
 

Hosted by uCoz