Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БУХГАЛТЕРИЯ.doc
Скачиваний:
21
Добавлен:
19.03.2016
Размер:
646.14 Кб
Скачать

Глава 10. Описание алгоритма печати документа

Для написания алгоритма в форме предусмотрена закладка «Модуль». Для ее активизации щелкнем в нее мышкой. Будет открыто окно текстового редактора.

В этом окне мы будем писать текст алгоритма, который будет выполнять печать документа. В модуле формы документа «СписаииеМатериалов» уже присутст­вует процедура, сформированная Конструктором Документов. Это предопределенная процедура ПриОткрытии(), которая выполняется каждый раз при открытии документа.

Итак, для создания процедуры нам нужно написать две строки — строку начала процедуры и строку конца. Мы можем написать их са­ми, введя символы с клавиатуры, можем скопировать их из процедуры ПриОткрытии(), а можем воспользоваться Ситпакс-Помощником.

Синтакс-Помощник — это очень удобный инструмент, который ис­пользуется для написания алгоритмов на встроенном языке. Он помо­гает найти нужные конструкции языка, получить по ним поясне­ния, и автоматически вставить их в текст модуля.

Для вызова Синтакс-помощника мы воспользуемся меню "Сервис" главного меню Конфигуратора. Выберите в нем пункт "Синтаксис-Помощник". Как вы видете, в правой части экрана появилось вертикальное окно – окно Синтакс-Помощника.

В нем располагаются три ветви: "Встроенный язык", "Шаблоны" и "Крнстрцкторы". В ветке "Встроенный язык" располагаются все стандартные команды встроенного языка 1С:Предприятия, в ветке "Шаблоны" – фрагменты алгоритмов, которые могут содержать нескролько команд, а в ветке "Конструкторы" – конструкторы построения некоторых алгоритмов.

В отличие от содержимого ветки "Встроенный язык", шаблоны могут изменяться пользователем и дополняться новыми.

Для вставки в модуль процедуры мы воспользуемся шаблоном «Процедура». Этот шаблон был создан при разработке типовой конфи­гурации «1С:Бухгалетерии 7.7».

Однако перед тем как вызвать шаблон, нужно поместить текстовый курсор в модуле в то место, куда мы будем вставлять новую процедуру. Перейдем к шаблону «Процедура», для этого нужно щелкнуть мышкой в знак «+» слева от слова «Шаблоны», затем щелкнуть мышкой в знак «+» слева от слова «Управление», а затем установить курсор (щелк­нуть мышкой) на строке «Процедура (Проц)».

Для вызова шаблона вос­пользуемся контекстным меню. Оно открывается нажатием правой кнопки мы­ши. В появившемся меню нужно щелкнуть мышью пункт «Выбрать», при этом шаблон начнет выполняться.

Часто шаблоны перед вставкой в текст фрагмента алгоритма выдают некоторые запросы. Шаблон «Процедура (Проц)» выдает запрос "Имя". В этом запросе нужно вести имя, которое мы хотим присвоить создаваемой процедуре. Введем слово "Печать" и нажмем кнопку "ОК".

После этого в окно модуля будут вставлены строки:

Процедура Печать ( )

КонецПроцедуры // Печать

Итак, мы создали процедуру и теперь должны написать в ней алгоритм печати документа.

Одним из отличительных свойств встроенного языка «1С:Предприятия» является так называемая объектная техника. Это значит, что большая часть его средств сгруппирована в несколько так называемых объектов встроенного языка, каждый имеет набор методов. Методом объекта является некоторое действие, которое имеет четко определенное название и назначение.

Для манипулирования табличным документом в языке существует объект "Таблица". Им мы и будем пользоваться.

Как и для создания процедуроы, для работы с объектом "Таблица" мы воспользуемся шаблоном. Напомним, что перед тем как вызвать шаблон, нужно поместить текстовый курсор в процедуре в то место, куда мы будем вставлять фрагменты алгоритма. В данном случае клавишами управления курсором или мышью следует поставить курсор перед строкой "Конец Процедуры //Печать".

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

Процедура Печать ()

Таб=Создать Объект ("Таблица");

Таб.Исходная Таблица ("");

Таб. Вывести Секцию ("Отчет");

Таб. Только Просмотр (1);

Таб.Опции (0,0,0,0);

Таб. Показать ("");

Конец Процедуры

Шаблон вставил наиболее часто использующие конструкции при работе с табличным документом. Дадим пояснения вставленным строкам.

Таб=Создать Объект ("Таблица");

создает в модуле объект языка типа "Таблица". Он обязательно должен быть присвоен некоторой переменной, которая в дальнейшем и будет использована для управления этим объектом.

Переменная является произвольно названным нами временным значением. В отличие от реквизита документа, переменные не хранятся в информационной базе, а «живут» до окончания процедуры. Использование объекта через создание переменной с некоторым именем позволяет использовать в одном модуле несколько однотипных объектов.

Итак, мы получили переменную Таб, которая содержит объект «Таблица». Теперь мы можем выполнять различные действия над этим объектом, указывая стандартные методы этого объекта. Название метода записывается через точку после самого объекта, и после него всегда ставятся круглые скобки. В скобках могут указываться параметры.

Опишем те действия, которые производятся с переменной Таб.

Таб. Исходная таблица ("");

В этой строке вызывается метод ИсходнаяТаблица(), который назначает исходный табличный документ. Данную строку мы оставили без изменений.

Мы уже упоминали, что в форме может быть несколько табличных документов. Например, в документе "Счет" могут быть 2 печатные формы: для печати рублевого счета и для печати валютного счета. Метод ИсходнаяТаблица позволяет выбрать, какую печатную форму мы будем использовать в данной процедуре. Так как у нас таблица одна, то мы можем не указывать ее имя и оставить пустую строку.

Таб. Вывести Секцию ("Отчет");

Эта строка выполняет включение в печатную форму подготовленной нами секции. Мы выделили в нашем табличном документе три секции: "Заголовок", "Шапка" "Строка", разумеется, будет выводиться заголовок, поэтомы мы должны исправить в этой строке слово "Отчет" на слово "Заголовок". Для этого нужно подвести курсор к слову "Отчет", удалить его и набрать слово "Заголовок".

Таб.ТолькоПросмотр (1);

Таб.Опции (0,0,0,0);

Таб.Показать ("");

Эти строки мы оставим без изменения, так как действия, которые они выполняют, нас устраивают.

Метод ТолькоПросмотр() определяет, что печатная форма будет использоваться только для просмотра и печати, а не для редактирования.

Метод Опции() отключает в готовом документе показ сетки ячеек и заголовков строк и столбцов, так как они не нужны при работе с го­товой формой.

Метод Показать() открывает сформированную форму печатного документа, чтобы ее можно было посмотреть и вывести на принтер.

Если этот метод не вызывать, то мы при работе с данным документом так и не увидим печатной формы.

Более подробно с назначением этих и других методов объекта «Таблица» можно ознакомиться, раскрыв в Синтаксис-Помощнике ветку «Встроен­ный язык», а в ней — ветку «Таблица». Для просмотра краткого описа­ния метода в нижней части окна Синтакс-Помощника нужно дважды щелкнуть мышкой по названию метода в дереве. Разумеется, наиболее подробная информация приведена в документации.

Теперь у нас есть алгоритм, который выведет в печатную форму секцию «Заголовок»:

Процедура Печать ()

Таб=Создать Объект ("Таблица");

Таб.Исходная Таблица ("");

Таб.Вывести Секцию ("Заголовок");

Таб.Только Просмотр (1);

Таб.Опции (0,0,0,0);

Таб.Показать ("");

Конец Процедуры

Кроме секции заголовок, нам нужно вывести секцию "Шапка":

Процедура Печать()

Таб=Создать Объект ("Таблица");

Таб.ИсходнаяТаблица ("");

Таб.Вывести Секцию ("Заголовок");

Таб.Вывести Секцию ("Шапка");

Таб.Только Просмотр (1);

Таб. Опции (0,0,0,0);

Таб. Показать ("");

Конец процедуры

Однако нам еще предстоит написать часть алгоритма для вывода информации табличной части документа.

Мы не можем просто вызвать метод для вывода секции «Строка", так как строк в документе может быть много, а выведется информация только об одной. Следовательно, нам нужно написать алгоритм обработки всех строк документа.

Прежде всего, определим место, в которое нужно вставлять обработку строк документа.

Вывод строк, определенно, должен быть после вывода шапки, но до вызова метода Показать(). Очевидно, что для этого лучше всего подойдет пустая строка между выводом секции «Шапка» и установв режима «ТолькоПросмотр».

Для начала обработки строк нам нужно внести в модуль метод документа, начинающий обработку строк. Он называется ВыбратьСтроки(). Введем с клавиатуры в пустую строку следующий текст:

Выбрать строки();

При вводе этой строки следует не забыть ввести скобки и символ «;», обозначающий конец команды.

Процедура Печать()

Таб=Создать Объект ("Таблица");

Таб.ИсходнаяТаблица ("");

Таб.Вывести Секцию ("Заголовок");

Таб.Вывести Секцию ("Шапка");

Выбрать строки ();

Таб.Только Просмотр (1);

Таб. Опции (0,0,0,0);

Таб. Показать ("");

Конец процедуры

Для выбора этого метода мы тоже могли воспользоваться Синтакс-Помощником, выбрав его из ветки «Встроенный язык — Документы -Методы».

Теперь нужно организовать обход всех строк документа. Для орга­низации циклической обработки строк используется команда встроен­ного языка Пока ..Цикл. Ее мы будем вставлять также с использовани­ем Синтакс-Помощника.

Установите курсор в начало строки между строками «ВыбратьСтроки()» и «Таб.ТолькоПросмотр()».

Теперь раскройте в Синтакс-Помощнике ветку «Встроенный язык», в ней — ветку «Операторы», а в ней — ветку «Структурные». Выбери­те элемент «Пока Цикл», аналогично тому, как мы выбирали шаблоны «Процедура» и «Таблица».

При этом в модуль будут вставлены новые строки:

Процедура Печать( )

Таб=Создать Объект ("Таблица");

Таб.ИсходнаяТаблица ("");

Таб.Вывести Секцию ("Заголовок");

Таб.Вывести Секцию ("Шапка");

Пока цикл

Конец цикла;

Таб.Только Просмотр (1);

Таб. Опции (0,0,0,0);

Таб. Показать ("");

Конец процедуры

Эта конструкция встроенного языка позволяет выполнять часть агоритма несколько раз.

Однако, это только заготовка для цикла. Для работы цикла нужно указать условие выполнения цикла, то естьвыражение, которое будет определять, когда цикл должен быть закончен. Данное выражение должно располагаться между словами «Пока» и «Цикл».

Для обхода строк документа нужно написать условие ПолучитьСтроку()=1. Это вызов специального метода ПолучитьСтроку(), который выбирает очередную строку и возвращает 1, если следующая строка есть, и 0, если больше строк нет. Условие «=1» проверяет, что метод ПолучитьСтроку() вернул 1. При вводе этого условия нужно отделять его от слов «Пока» и «Цикл» пробелами.

Итак, у нас получится следующие строки:

Процедура Печать( )

Таб=Создать Объект ("Таблица");

Таб.ИсходнаяТаблица ("");

Таб.Вывести Секцию ("Заголовок");

Таб.Вывести Секцию ("Шапка");

Пока Получить Строку ( ) = 1 Цикл

Конец цикла;

Таб.Только Просмотр (1);

Таб. Опции (0,0,0,0);

Таб. Показать ("");

Конец процедуры

И нам осталось только поместить между строками «Пока...» и «КонецЦикла» те действия, которые должны выполняться для каждой строки.

Так как мы организуем обработку строк для печати всех строк до­кумента, нам нужно внутри цикла вызвать вывод секции «Строка» табличного документа, которую мы специально выделили отдельно. Следовательно, нам нужно написать в пустой строке между «Пока...» и «Конец Цикла» и строку:

Таб.Вывести секцию ("Строка");

Теперь у нас метод ВывестиСекцию(«Строка») будет вызываться для каждой строки документа. В результате у вас должен получиться следующий текст модуля:

Процедура Печать( )

Таб=Создать Объект ("Таблица");

Таб.ИсходнаяТаблица ("");

Таб.Вывести Секцию ("Заголовок");

Таб.Вывести Секцию ("Шапка");

Пока получить строку ( ) =1 Цикл

Таб.Вывести Секцию ("Строка");

Таб.Только Просмотр (1);

Таб. Опции (0,0,0,0);

Таб. Показать ("");

Конец процедуры

В процессе написания модуля у нас могло нарушиться красивое расположение строк с правильными отступами. Хорошим стилем является писать строки одну под другой, делая клавишей Tab отступы для находящихся внутри процедур и внутри циклов. Чтобы «привести модуль в порядок», можно воспользоваться следующим приемом: выбрать из меню «Действия» пункт «Выделить из меню, «Текст» выбрать подменю «Блок» и далее пункт «Выделить все». В результате все строки модуля будут выровнены в принятым стандартом.

Процедура печати документа, в общем, гото­ва, осталось только позаботиться о том, что­бы при печати документов на нескольких страницах в начале каждой новой страницы печаталась шапка таблицы. Это повысит чи­таемость документа.

В системе программ «1С:Предприятие» то есть возможность при переходе на новую страницу повторять при печати строки таблицы заданных номеров. Для этого используется метод таблиц «ПовторятьПриПечатиСтроки», которому надо указать интервал номеров строк таблицы «с номера по номер». Шапка таблицы занимает единственную строку с номером 8. Тогда, чтобы при переходе на новую страницу печаталась эта строка таблицы, в процедуре «Печать» должна присутствовать строка:

Таб.ПовторятьПриПечатиСтроки(8,8);

Такая запись означает, что будут повторяться строки с восьмой по восьмую, то есть единственная строка с номером 8. Если бы в нашей таблице шапка состояла из нескольких строк, вместо второго числа 8 стоял бы номер последней строки шапки таблицы.

Теперь определим, в какое место процедуры должна быть поме­чена данная строка. Поскольку вызываемый метод задает режим печати документа, эта строка должна быть расположена ранее строк вывода секций таблицы, но после определения исходной таблицы. Поэтому мы подведем курсор в конец строки.

Таб.Исходная таблица ("");

Нажмем клавишу Enter и напечатаем строку:

Таб.ПовторятьПриПечатиСтроки (8,8);

Итак, процедура печати документа будет следующей:

Процедура Печать()

Таб=Создать Объект ("Таблица");

Таб.ИсходнаяТаблица ("");

Таб.Повторять При Печати Строки (8,8);

Таб.Вывести Секцию ("Заголовок");

Таб.Вывести Секцию ("Шапка");

Выбрать строки ()

Пока ПолучитьСтроку() = 1 Цикл

Таб. Вывести секцию ("Строка");

Конец цикла;

Таб.ТолькоПросмотр (1);

Таб. Опции (0,0,0,0);

Таб. Показать ("");

Конец процедуры

Обратите внимание, в методе «ПовторятьПриПечатиСтроки» номера строк таблицы заданы в явном виде. Мы сознательно так поступили, чтобы проще было понять принцип работы метода.

Теперь для окончания процесса создания формы печати нам осталось только организовать вызов созданной процедуры «Печать». Очевидно, что мы должны предусмотреть возможность печати при работе в форме документа.

Такие процедуры, как процедура печати, обыч­но вызываются с помощью кнопки, расположенной в диалоге формы. Активизируем режим редактирования диалога, щелкнув мышью в за­кладку «Диалог».

В данный момент в форме присутствуют две кнопки: «ОК» и «За­крыть». Каждая из их имеет свое назначение и не подходит для вызова процедуры печати. Следовательно, нам нужно создать новую кнопку.

Для создания кнопки нужно выбрать из меню «Вставить» пункт «Кнопка». При выборе этого пункта система переходит в режим встав­ки кнопки. Этот режим работает так же, как и вставка прочих элемен­тов диалога, которую мы уже выполняли при создании формы доку­мента: нужно подвести курсор к левому верхнему углу того места, где вы хотите вставить кнопку; нажать левую кнопку мыши и, не отпуская ее, передвинуть указатель мыши ниже и правее так, чтобы очертить прямоугольник того размера, которого будет кнопка; отпустить кнопку мыши.

На экране появилась кнопка. Теперь нужно придать кнопке необ­ходимые свойства, для этого вызовем палитру свойств двойным щелч­ком по кнопке. В появившейся палитре свойств изменим поле «Заго­ловок». Этот тот текст, который будет располагаться на кнопке. Хотя в заголовке кнопки может быть любой текст, логичнее, чтобы он отра­жал назначение кнопки или характер выполняемых по нажатию этой кнопки действий.

Так как создаваемая кнопка предназначена для печати документа, введем в поле «Заголовок» текст «Печать». Мы определили внешний вид кнопки, и теперь нам нужно определить вызываемые ею действия. Для этого нам нужно переключиться в закладку «Дополнительные».

В ней нужно заполнить поле «Формула». Оно имеет такой смысл, как и такое же поле в палитре свойств реквизита документа, только формула реквизита документа вызывается после ввода его чения, а формула кнопки будет отработана при нажатии кнопки. Соб­ственно, именно вызов формулы и является основным назначением кнопки. В поле «Формула» мы можем написать любую команду на встроенном языке.

В данном случае нам нужно выполнить созданную нами процедуру, для этого нужно написать имя процедуры с круглыми скобками в кон­це «Печать()». Теперь можно закрыть палитру свойств, нажав кнопку «ОК»

Мы можем запустить 1С:Предприятие, чтобы проверить созданный нами механизм печати. Для этого нужно открыть существующий новый документ «Списание материалов» и в нем кнопку «Печать». Разумеется, мы сразу же заметим, что печатная форма документа нуждается в более тщательном оформлении. Однако основные действия мы сделали. Дальше можно совершенствовать и оформление печатной и алгоритм процедуры «Печать», используя различные возможности конфигурирования.

Прежде всего, мы разместим по центру заго­ловок документа. Сначала выделите область в строке, в которой расположен заголовок, на­чиная с его левой ячейки и до ячейки, распо­ложенной над самой правой колонкой таблич­ной части — «Сумма». Для этого мы должны щелкнуть в левую ячейку, нажать левую кнопку мыши и, не отпуская ее, провести курсор мыши к правой ячейке выделяемой области, после чего отпустить кнопку мыши. Выделенная область закрашивается ин­версным цветом.

Теперь мы вызовем палитру свойств из меню «Действия» («Свойства»). В ней мы активизируем закладку «Положение» и в нем мышью в поле «Центр» группы «По горизонтали», чтобы установить режим центрирования по горизонтали.

При расположении текста в пределах нескольких ячеек, объединяемых командой «Объединить», необходимо, чтобы текст размещался в край­ней левой ячейке из группы объединяемых ячеек.

Если это не так, то при выполнении команды «Объединить» текст «пропадет». Увидеть «пропавший» текст можно, если вызвать палитру свойств для ячейки, в которой находится этот текст.

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

Щелкнем мышкой в ячейке таблицы, где записано выражение «Ма­териал». Затем откроем палитру свойств этой ячейки, выбрав пункт «Свойства» из меню «Действия» или контекстного меню, открываемо­го правой кнопкой мыши.

В палитре свойств на закладке «Текст» в поле «Контроль» выберем значение «Переносить» и закроем палитру свойств нажатием кнопки «ОК». Теперь при выводе в эту ячейку длинного наименования теку­щая строка таблицы будет раздвинута по высоте так, чтобы наимено­вание материала полностью поместилось в ячейку. Ширина колонки, а, стало быть, и всей таблицы при этом не изменится.

Теперь мы добавим в нижнюю часть печатной формы документа область печати итогов по колонке «Сумма».

Сначала мы введем поясняющий текст «ИТОГО» в ячейке ниже выражения «Цена». Д. этого текста в палитре свойств установим шрифт размером 10 и включим атрибут «Жирн.».

После этого мы введем выражение в ячейку ниже выражения «Сумма». При этом надо, как и раньше, вызвать палитру свойств выбрать тип ячейки «Выражение».

Для записи выражения мы используем метод документа Итог(1), который предназначен для получения суммы значений числового pеквизита документа по всем строкам. В скобках в качестве параметра нужно указать в двойных кавычках идентификатор того реквизита данные по которому суммируются. Нам нужно будет записать выр жение Итог («Сумма»).

При печати числовых выражений удобнее, чтобы они были выровнены по правому краю. Для этого мы активизируем закладку «Положение» и щелкнем мышью в поле «Право» группы «По горизонтали». Теперь нажмем кнопку «ОК».

Также можно обвести рамку вокруг ячейки с итоговой суммой. Прежде чем просмотреть в работе сделанные нами изменения, заметим, что строчка, в которой мы поместили вывод итогов, не относится ни к какой секции, следовательно, она не будет выведена в печатную форму. Очевидно, нам нужно создать новую секцию.

Для создания новой секции отметим в заголовках строк таблицы (серая колонка с номер срок слева) строку с текстом «Итого». При этом можно отметить заод­но и несколько следующих пустых строк на случай, если в нижней части документа в последующем потребуется разместить, например, место для подписей. Теперь выберем пункт «Включить в секцию» из меню «Таблица» и введем имя секции «Подвал».

Чтобы новая секция выводилась в печатной форме документа, нужно внести некоторые изменения созданный нами модуль. Перейди­те к закладке «Модуль».

В процедуре Печать необходимо добавить строку для вывода сек­ции «Подвал». Очевидно, что эта строка должна располагаться после команд, выводящих строки документа — после строки «КонецЦикла».

После строки «КонецЦикла» впишите строку:

Таб.ВывестиСекцию("Подвал");

Если у вас после строки «КонецЦикла» нет пустой строки, добавьте ее. Для этого можно поставить курсор справа от символа «;» в строке «КонецЦикла» и нажать клавишу Enter, чтобы начать ввод новой строки, а затем набрать на клавиатуре указанный текст.

Окончательный, после всех добавлений, текст модуля должен быть таким:

Процедура Печать()

Таб.ИсходнаяТаблица ("");

Таб.ПовторятьПриПечатиСтроки (8,8);

Таб.ВывестиСекцию("Заголовок");

Таб.ВывестиСекцию("Шапка");

ВыбратьСтроки()

Пока ПолучитьСтроку() = 1 Цикл

Таб. Вывести секцию("Строка");

КонецЦикла;

Таб.ВывестиСекцию("Подвал");

Таб.ТолькоПросмотр (1);

Таб. Опции (0,0,0,0);

Таб. Показать ("");

Конец процедуры

Теперь можно запустить 1C: Предприятие и посмотреть на «обновленную» печатную форму документа.