Добавлен: 31.03.2023
Просмотров: 936
Скачиваний: 13
Для начала откроем окно редактирования этого объекта конфигурации. Далее следует перейти на вкладку «Макеты», где в нижней части окна присутствует кнопка «Конструкторы» (рис. 57).
Рис. 57. Вкладка «Макеты» окна редактирования объекта конфигурации
Щелкнув на ней, воспользуемся еще одним инструментом разработки, который называется конструктором печати. В первом открывшемся окне от нас потребуется только согласиться с предложением создать новую команду с именем «Печать» (рис. 58), после чего следует щелкнуть на кнопке «Далее».
Рис. 58. Окно диалога с конструктором печати
Следующее окно позволяет определить, какие реквизиты шапки мы собираемся расположить на печатной форме (рис. 59).
Рис. 59. Выбор реквизитов шапки документа в окне конструктора печати
После этого в новом окне следует задать содержание табличной части печатной формы (рис. 60). Включим в нее все предлагаемые поля, кроме поля «НомерСтроки».
Рис. 60. Выбор реквизитов табличной части документа в окне конструктора печати
Заполнение нижней части документа в рассматриваемом примере не понадобится (рис. 61).
Рис. 61. Оформление подвала документа в окне конструктора печати
После щелчка на кнопке Далее открывается завершающее окно конструктора печати, позволяющее указать группу,в которую будет входить команда (рис. 62).
Рис. 62. Определение месторасположения команды печати на форме документа
В завершении работы конструктора на экране появятся макет печатной формы и набор программных процедур (рис. 63).
Рис. 63. Результат работы конструктора печати
После обращения к форме списка документа ПоступлениеТоваров в !С: Предприятие видно, что на командной панели появилась новая кнопка Печать, щелчком на которой формируется печатная форма выделенного документа (рис. 64).
Рис. 64. Печатная форма документа
Обсудим результаты работы конструктора печати. На рис. 63 также показан макет печатной формы, представляющий собой заготовку (шаблон) печатного документа, который будет формироваться системой при работе в режиме 1С:Предприятие.
Макет печатной формы доступен для разработчика — его всегда можно открыть и посмотреть (а при необходимости и изменить) на вкладке Макеты в окне редактирования объекта конфигурации. В нашем случае на данной вкладке мы увидим значок нового объекта конфигурации — макета Печать. В процессе создания макета в ячейки вводится текст (как в результате работы конструктора, так и непосредственно пользователем) При этом можно задавать различные параметры форматирования для ячеек Печатные формы, как правило, содержат несколько типичных областей — заголовочную область, таблицу результатов, место для итоговых показателей и др Это связано с тем, что информация, выводимая в отчеты, обычно неоднородная — есть табличные данные, заголовок, область размещения подписей Макет представляет собой совокупность прямоугольных областей, каждая из которых служит для формирования какой-то части печатной формы Заметим, что табличный документ (это более правильное название, чем «печатная форма», но условно их можно считать синонимами) и макет — это различные объекты Макет представляет собой некий шаблон табличного документа в плане того, как необходимо создавать печатную форму Фактически, в режиме конфигуратора мы определяем вид печатной формы, которую собираемся затем увидеть при работе в режиме 1С:Предприятие
Другим результатом работы конструктора печати является набор программных процедур (листинги 1.3 и 1.4), которые выполняются при работе в режиме 1С:Предприятие и взаимодействуют с макетом. А уже результатом этого взаимодействия является табличный документ, отражающий информацию из документа ПоступлениеТоваров (см. рис. 64).
Листинг 1.3. Процедуры, формируемые конструктором печати в модуле команды
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
ТабДок = Новый ТабличныйДокумент;
Печать(ТабДок, ПараметрКоманды);
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать(); //}} КонецПроцедуры
&НаСервере
Процедура Печать(ТабДок, ПараметрКоманды)
Документы.ПоступлениеТоваров.Печать(ТабДок, ПараметрКоманды);
КонецПроцедуры
Листинг 1.4. Процедура, формируемая конструктором печати в модуле менеджера
Процедура Печать(ТабДок, Ссылка) Экспорт
//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
Макет = Документы.ПоступлениеТоваров.ПолучитьМакет("Печать");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
ПоступлениеТоваров.Дата,
ПоступлениеТоваров.Номер,
ПоступлениеТоваров.Филиал,
ПоступлениеТоваров.Фирма,
ПоступлениеТоваров.ПереченьТоваров.(
Товар,
Цена,
Количество,
Сумма
)
ИЗ
Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
ГДЕ
ПоступлениеТоваров.Ссылка В (&Ссылка)";
Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьПереченьТоваровШапка =
Макет.ПолучитьОбласть("ПереченьТоваровШапка");
ОбластьПереченьТоваров = Макет.ПолучитьОбласть("ПереченьТоваров");
ТабДок.Очистить();
ВставлятьРазделительСтраниц = Ложь;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтраниц Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьЗаголовок);
Шапка.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());
ТабДок.Вывести(ОбластьПереченьТоваровШапка);
ВыборкаПереченьТоваров = Выборка.ПереченьТоваров.Выбрать();
Пока ВыборкаПереченьТоваров.Следующий() Цикл
ОбластьПереченьТоваров.Параметры.Заполнить(ВыборкаПереченьТоваров);
ТабДок.Вывести(
ОбластьПереченьТоваров, ВыборкаПереченьТоваров.Уровень());
КонецЦикла;
ВставлятьРазделительСтраниц = Истина;
КонецЦикла; //}} КонецПроцедуры
ТабДок = Новый ТабличныйДокумент; - Создается нового объект типа ТабличныйДокумент, а переменная ТабДок будет с ним ассоциироваться. Далее в программе переменная ТабДок позволяет работать со свойствами и методами созданного объекта. В следующей строке используется метод ПолучитьМакет(), в качестве входного параметра которого указывается имя макета печатной формы:
Макет = Документы.ПоступлениеТоваров.ПолучитьМакет("Печать");
Это имя создано конструктором печати. Далее с помощью переменной Макет производится формирование табличного документа на основании нашего макета.
Автоматически созданный конструктором макет с именем Печать имеет несколько областей, одна из которых, содержащая заголовочную информацию, так и называется — Заголовок (см. рис. 66). В следующей строке программного кода в табличный документ выводится первая секция в соответствие с макетом:
ТабДок.Вывести(ОбластьЗаголовок);
Далее аналогичным образом производится заполнение последующих секций. Таким способом происходит заполнение табличного документа на основании макета. Содержание областей макета и их названий, сформированное по умолчанию, хотя их и можно изменять.
Учитывая вид макета (см. рис. 63), можно сказать, что основное содержание печатной формы документа представляет собой совокупность одинаковых по структуре строк, подписи для которых располагаются в секции ПереченьТоваровШапка. Метод Выбрать(), применяемый к результату выполнения запроса, касающегося документа ПоступлениеТоваров, позволяет подготовить дальнейшее извлечение информации.
Далее производится последовательное извлечение всех элементов табличной части документа с помощью цикла:
Пока ВыборкаПереченьТоваров.Следующий() Цикл
На каждой итерации цикла мы получаем информацию, содержащуюся в очередной строке табличной части документа. Данный цикл перебора строк документа производит заполнение табличного документа информацией на основании области макета ПереченьТоваров. Для этого используется метод Вывести(). В результате выполнения рассмотренного цикла в табличном документе создается столько строк, сколько имеется в табличной части документа.
Часть программного кода в листинге 1.3 связана с настройкой табличного документа. Например: ТабДок.ОтображатьСетку = Ложь;
В этой конструкции указано, что не надо выводить сетку. В качестве альтернативы для свойства табличного документа ОтображатьСетку можно указать значение Истина. Тогда для всего табличного документа (в режиме 1С:Предприятие) будет установлена сетка.
Другое свойство Защита позволяет при установке значения Истина защитить табличный документ от редактирования и копирования. В нашем примере мы этого не сделали: ТабДок.Защита = Ложь. Однако если для данного свойства установить значение Истина, то в режиме 1С:Предприятие скопировать табличный документ в буфер обмена не удастся. Свойство ТолькоПросмотр позволяет обеспечить два варианта работы с табличным документом:
- Только просмотр информации (Истина)
- Возможность изменения информации (Ложь)
Свойство ОтображатьЗаголовки содержит признак отображения заголовков столбцов и строк таблицы. В случае если для данного свойства установлено значение Истина, то в табличном документе будут выведены номера столбцов и строк соответственно в верхней и левой частях таблицы.
В заключение обратим внимание на строку первой процедуры из листинга 1.3:
ТабДок.Показать();
В ней используется метод Показать(), предназначенный для отображения табличного документа на экране.
Теперь при желании печатную форму можно скорректировать, а также сохранить как рабочую книгу Microsoft Excel (для этого следует в меню Файл выбрать пункт Сохранить как и далее указать вариант рабочей книги Microsoft Excel).
Учёт продажи товаров
Для фиксации факта продажи товаров необходимо разработать соответствующий документ, который так и назовем ПродажаТоваров.
В окне редактирования объекта конфигурации перейдем на закладку Данные и внесем три реквизита:
- Фирма (тип данных — СправочникСсылка.Фирмы)
- Филиал (тип данных — СправочникСсылка.Филиалы)
- Менеджер (тип данных — СправочникСсылка.Менеджеры)
Аналогично документу ПоступлениеТоваров разместим в разрабатываемом документе ПродажаТоваров табличную часть под названием ПереченьТоваров, где расположим следующие реквизиты:
- Товар (тип данных — СправочникСсылка.Товары)
- Цена (тип данных — число)
- Количество (тип данных — число)
- Сумма (тип данных — число)
Обеспечим автоматическое вычисление суммы по текущей позиции товара после внесения цены и количества единиц проданного товара. Для этого нужна пользовательская форма документа. На вкладке Модуль формы документа ПродажаТоваров необходимо разместить процедуры, аналогичные тем, которые были созданы в документе ПоступлениеТоваров. Сначала откроем окно свойств поля ПереченьТоваровКоличество и обратимся к событию ПриИзменении. Здесь после щелчка на значке лупы открывается окно для написания программного кода процедуры, которая автоматически выполняется при внесении количества единиц товара в табличную часть документа. Процедуру ПереченьТоваровКоличествоПриИзменении необходимо оформить в соответствии с листингом 1.5.
Листинг 1.5. Процедура расчета суммы при вводе количества товаров
&НаКлиенте
Процедура ПереченьТоваровКоличествоПриИзменении(Элемент)
СтрТабЧасти=Элементы.ПереченьТоваров.ТекущиеДанные;
СтрТабЧасти.Сумма=СтрТабЧасти.Цена*СтрТабЧасти.Количество;
КонецПроцедуры
Аналогичным образом следует оформить процедуру ПереченьТоваровЦенаПриИзменении, выполняемую при вводе цены в табличную часть документа (листинг 1.6).
Листинг 1.6. Процедура расчета суммы при вводе цены товара
&НаКлиенте
Процедура ПереченьТоваровЦенаПриИзменении(Элемент)
СтрТабЧасти=Элементы.ПереченьТоваров.ТекущиеДанные;
СтрТабЧасти.Сумма=СтрТабЧасти.Цена*СтрТабЧасти.Количество;
КонецПроцедуры
Отнесем разработанный документ ПродажаТоваров к подсистеме Продажа и перейдем в режим 1С:Предприятие. На рис. 65 показан результат выполнения разработанных процедур в режиме 1С:Предприятие.