Когда все в порядке, никто
этого не замечает. Урок 22. |
Сегодня рассмотрим еще один из вариантов применения списка значений. В 1С 7.7. есть один недостаток, заключающийся в том, что для объектов нельзя создать свои методы. И это очень неудобно. Представьте себе конструкцию вида Док.Печать(). Насколько было бы удобно ей пользоваться, например, при массовой распечатке счетов для клиентов, или при печати документа прямо из журнала (особенно, если документ большой и открывается долго). Этот же механизм позволяет передавать наборы значений между отчетами. В 1С это активно используется для расшифровки бухгалтерских отчетов. Итак суть механизма. Участвуют всегда 2 процедуры. Первая процедура, которая вызывает объект (например, документ), а вторая процедура, которая выполняет необходимые действия. Вторая процедура - это процедура "ПриОткрытии" формы того объект, который вызывается. Сложно. Рассмотрим на конкретном примере. Пусть нам надо сделать обработку, которая бы позволяла распечатывать все счета за заданный период в нужном количестве экземпляров. Сначала рассмотрим вызывающую процедуру: Процедура Сформировать() Можете скопировать процедуру во внешний отчет. Не забудьте добавить реквизиты формы НачДата, КонДата и КоличествоКопий. Особое внимание обратите на метод ОткрытьФорму(док.ТекущийДокумент(), сз,); Мы пытаемся открыть существующий документ и передаем в открываемый документ наш список значений. Этот список значений будет доступен в открывшемся документе через Форма.Параметр. Рассмотрим процедуру ПриОткрытии(), расположенную в форме документа "Счет" Процедура ПриОткрытии() Пояснения: при начале открытия смотрим параметр формы. Если он есть, значит документ пытаются открыть из другого модуля. Если нет параметра, то будет стандартное открытие документа. Параметр может быть любой: строка, число, список значений, элемент справочника и или другой документ. Но нас интересует только список значений. Удобно список организовывать следующим образом: в 1-ой строке списка - управляющая команда (печать, обновить) . По этой управляющей команде Вы будете определять, что надо проделать в документе. Из разных мест - документ может вызываться с разными целями (например, у одного документа могут быть разные печатные формы: расх.накл + сч.фактура.). В последующих строках - указываются дополнительные параметры, управляющие работой процедуры "ПриОткрытии". Параметров может быть много, но их все надо обрабатывать в форме документа в процедуре "ПриОкрытии". Вполне возможно, что процедура приОткрытии будет уметь делать много работы: печать, пересчет, получение каких-то сумм из докуента и т.д. В этом случае в общем виде процедура будет выглядеть так: Если
пустоеЗначение(Форма.Параметр)=0 тогда Задание для самостоятельной работы:
|