или смысловой ошибки, которую в запросе выявить очень тяжело.
Кстати, синтаксический контроль корректности написания исход-
ного текста программного модуля можно выполнить, выбрав пункт
меню Действия > Синтаксический контроль, а синтаксический кон-
троль запросов — соответственно, выбрав пункт меню Действия >
Синтаксический контроль запросов. Все найденные ошибки в том
и другом случае будут выведены в системное табло.
Во второй строке мы должны указать период, за который вы-
бираются введенные документы. Указываем мы его, используя
идентификаторы элементов диалога, отвечающих за даты нача-
ла и окончания периода. Таким образом у нас появляется воз-
можность использовать в запросе не только внутренние, но и
внешние переменные. Кстати, область видимости переменных,
определенных в запросе, распространяется на весь программ-
ный модуль и на печатную форму, но об этом чуть позже.
Третья строка определяет тип документов, которые будут вы-
бираться в запросе. В нашем случае мы не установили возмож-
ность проведения документов — следовательно, нам не нужно
отслеживать факт проведения, и мы можем с чистой совестью
выбирать все документы, созданные в нужный нам период. Если
же брать за основу типовую конфигурацию, которую вам ско-
рее всего и придется дорабатывать, чтобы заслужить благосклон-
ность начальства © , следует подумать, выбирать ли вам Все, П р о -
веденные или Н епроведенны ё^окум енты , что и указывается в со-
ответствующей строке переменной запроса.
В остальных строках происходит присваивание определенным
переменным соответствующих значений. Простор для творчества
здесь широк. Например, если вы не хотите видеть в отчете ком-
плектующие, а хотите видеть только даты заказа и сборки, то вы
благополучно можете исключить из запроса соответствующие стро-
ки, в результате чего он примет значительно более компактный вид:
ТекстЗацроса =
" / / { { ЗАПРОС(Сформировать)
I Период с НачИнт по КонИнт;
I Обрабатывать Документы Все;
I Док - Документ. Компьютер.ТекущийДокумент;
I Номер = Документ. Компьютер. Номердок;
IДатаЗаказа = Документ. Компьютер. ДатаДок;
IДатаСборки = Документ. Компьютер. ДатаСборки;
I Группировка Док упорядочить по Док.НомерДок;
I " ; / / } } ЗАПРОС
Но так как мы договорились использовать возможности на-
шей конфигурации по максимуму, то рекомендую все же оста-
новиться на полном запросе, тем более что в дальнейшем мы
рассмотрим печатную форму, основанную именно на нем.
Предпоследняя строка нашего запроса определяет уровень
группировки по определенному признаку — в нашем случае по
документу. М ожно также использовать группи-
ровки по любой переменной запроса и по стро- Ь )
ке табличной части документа, причем имеется * й>
возможность отбирать данные с группами или без
Ш ь. Рис.З
(в случае выборки данных из справочников) и упорядочивать по-
лученные результаты по нужному реквизиту. Группировок в за-
просе может быть несколько, все зависит от вашей фантазии и
насущной необходимости. Данные, полученные в результате вы-
полнения запроса, в программном модуле доступны именно при
помощи группировки, в чем вы убедитесь чуть позже. Подробнее
о запросах вообще и о группировках в частности можно почи-
тать в Желто-Красных Книжках, которые, уверен, уже успели за-
нять самое легкодоступное место на вашем Рабочем столе ©.
Теперь мы должны дополнить нашу «запросную» переменную ус-
ловиями, определяющими, включены ли флажки Чек1 и Чек2 и если
да, то ограничить период запроса датами заказа и сборки соот-
ветственно. Сделаем мы это при помощи следующего фрагмента:
Если Чек1 = 1 Тогда
Если (ПустоеЗначение(ДатаЗаказаС)<>1) ИЛИ (Пустое
Значение(ДатаЗаказаПО)<>1) Тогда
ТекстЗапроса = ТекстЗапроса + "Условие( (ДатаЗаказа >=
ДатаЗаказаС)И (ДатаЗаказа <= ДатаЗаказаПО)) ; " ;
Таб.ВывестиСекцию("ПериодЗаказа") ;
Иначе
Предупреждение ("Нужно выбрать диапазон д а т! " ) ;
Возврат;
КонецЕсли;
КонецЕспи;
Тот же код нужно повторить для флажка Чек2, учитывая зна-
чения нужных элементов диалога. Как видите, переменная
ТекстЗапроса не ограничена рамками собственной структуры и
может быть изменена в любом месте программного модуля.
Далее в тексте программного модуля следует ключевой фраг-
мент кода, отвечающий за выполнение запроса:
Если Зацрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕспи;
Если на выполнении этого фрагмента программа запнулась,
отказавшись работать и выведя ошибку в системном табло, будь-
те уверены, что в переменной запроса допущена критическая
ошибка, которую надо бы исправить ©. Может также возник-
нуть ситуация, когда запрос успешно выполнен, но данных не со-
держит. Поэтому при написании текста запроса настоятельно
рекомендую напрячь все свое внимание, так как зачастую ошиб-
ки в запросе выявить очень и очень непросто.
Теперь нам осталось лишь вывести полученные после выпол-
нения запроса данные в табличную часть, приведя их в удобный
для начальства вид. Для этого нужно в цикле пройтись по груп-
пировке и выполнить некоторые действия (в нашем случае — вы-
вести строку таблицы).
Пока Зацрос.Группировка("Док") = 1 Цикл
/ / ваши действия
КОнецЦикла;
К группировке можно обращаться как по имени, так и по по-
рядковому номеру (например, Запрос. Группировка (1)), но пер-
вый способ мне кажется более наглядным, поэтому на первых
порах, пока ваши запросы не разрослись до килобайтных раз-
меров, рекомендую пользоваться именно им.
Теперь на очереди оформление печатной формы нашего от-
чета — руководствуясь знаниями, полученными при прочтении
предыдущих частей цикла, вы наверняка с этим справитесь без
особых проблем. Основная загвоздка тут состоит в том, что нам
напрямую придется обращаться к переменным запроса, чтобы
получить их значения и вывести их в таблицу. Я решил не делать
этого в программном модуле, дабы не загромождать его лишни-
ми переменными. Поэтому вое вызовы переменных мы напишем
непосредственно в печатной форме нашего отчета, не забывая
при этом ставить соответствующие типы ячеек (выражение или
шаблон — на ваш вкус). В итоге у вас должна получиться табли-
ца, примерно соответствующая изображенной на рисунке 3.
Вывод печатной формы осуществляется аналогично таково-
му для документов и подробно описан в предыдущей статье
цикла. Поэтому вывод таблицы будет на вашей совести ©. Един-
ственная фишка (которая обычно нравится пользователю и од-
нозначно поднимет ваш имидж в глазах начальства) — уста-
новка расшифровки на строку доку-
мента. Буквально это выглядит так: поль-
зователь после формирования отчета
получает возможность, щелкнув на лю-
бую строку отчета, открыть тот документ, данные которого ото-
бражены в выбранной строке отчета. Узнать, что это такое,
вы можете, сформировав отчет К а р то ч ка счета из типовой бух-
галтерской конфигурации и щелкнув на любую его строку. Реа-
лизовать эту фишку очень просто: в свойствах соответствую-
щей ячейки табличной части отчета, в поле Расшифровка, вы
должны записать ссылку на переменную, содержащую теку-
щий документ отчета (в нашем случае строка расшифровки
будет выглядеть так: Запрос.док# — именно так, со знаком
диеза в конце). Теперь, если отчет сформирован в режиме для
чтения (за это отвечает опция Т олькоП росм отр объекта
Таб-
лица)
и в свойствах соответствующей ячейки включено свойст-
во
Защита,
при двойном
щелчке на любой стро-
ке отчета будет открыт
соответствующий доку-
мент (рис. 4).
В следующей статье
мы рассмотрим разде-
ление прав и интерфей-
сов в системе 1С и нау-
чимся
грамотно
ими
управлять.
(Продолжение следует)
ш р щ * Ц
Рис.4
предыдущая страница 39 Мой Компьютер 2004 44 читать онлайн следующая страница 41 Мой Компьютер 2004 44 читать онлайн Домой Выключить/включить текст