Печать документа. Конструктор печати

Для любой таблицы в платформе предусмотрена стандартная возможность вывода этой таблицы на печать. Для чего доступна команда "Вывести список" из контекстного списка, открывающегося по кнопке "Еще" (Рис. 8.37).

Печать документа. Конструктор печати - student2.ru

Рис. 8.37.

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

Чтобы пользователь мог формировать свою печатную форму документа, воспользуемся конструктором печати. Вызов конструктора осуществляется на закладке Макеты по кнопкеКонструкторы. Следуя инструкциям конструктора (Рис. 8.38 – Рис. 8.43), заполняем все необходимые поля.

Печать документа. Конструктор печати - student2.ru

Рис. 8.38.

Печать документа. Конструктор печати - student2.ru

Рис. 8.39.

Печать документа. Конструктор печати - student2.ru Рис. 8.40.

Печать документа. Конструктор печати - student2.ru

Рис. 8.41.

Печать документа. Конструктор печати - student2.ru

Рис. 8.42.

Печать документа. Конструктор печати - student2.ru

Рис. 8.43.

В результате работы конструктора будет создан новый макет (Рис. 8.44), новая команда и сформируется следующий программный код в модуле команды и модуле менеджера:

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)

ТабДок = Новый ТабличныйДокумент;

Печать(ТабДок, ПараметрКоманды);

ТабДок.ОтображатьСетку = Ложь;

ТабДок.Защита = Ложь;

ТабДок.ТолькоПросмотр = Ложь;

ТабДок.ОтображатьЗаголовки = Ложь;

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

//}}

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

&НаСервере

Процедура Печать(ТабДок, ПараметрКоманды)

Документы.РасходнаяНакладная.Печать(ТабДок, ПараметрКоманды);

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

Процедура Печать(ТабДок, Ссылка) Экспорт

//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)

Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| РасходнаяНакладная.Дата,

| РасходнаяНакладная.Договор,

| РасходнаяНакладная.Контрагент,

| РасходнаяНакладная.Номер,

| РасходнаяНакладная.Сотрудник,

| РасходнаяНакладная.СуммаДокумента,

| РасходнаяНакладная.Товары.(

| НомерСтроки,

| Номенклатура,

| Количество,

| Цена,

| Сумма,

| СтавкаНДС,

| СуммаНДС,

| Всего

| ),

| РасходнаяНакладная.Услуги.(

| НомерСтроки,

| Номенклатура,

| Сумма,

| СуммаНДС,

| Всего

| )

|ИЗ

| Документ.РасходнаяНакладная КАК РасходнаяНакладная

|ГДЕ

| РасходнаяНакладная.Ссылка В (&Ссылка)";

Запрос.Параметры.Вставить("Ссылка", Ссылка);

Выборка = Запрос.Выполнить().Выбрать();

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

Шапка = Макет.ПолучитьОбласть("Шапка");

ОбластьТоварыШапка = Макет.ПолучитьОбласть("ТоварыШапка");

ОбластьТовары = Макет.ПолучитьОбласть("Товары");

ОбластьУслугиШапка = Макет.ПолучитьОбласть("УслугиШапка");

ОбластьУслуги = Макет.ПолучитьОбласть("Услуги");

Подвал = Макет.ПолучитьОбласть("Подвал");

ТабДок.Очистить();

ВставлятьРазделительСтраниц = Ложь;

Пока Выборка.Следующий() Цикл

Если ВставлятьРазделительСтраниц Тогда

ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

КонецЕсли;

ТабДок.Вывести(ОбластьЗаголовок);

Шапка.Параметры.Заполнить(Выборка);

ТабДок.Вывести(Шапка, Выборка.Уровень());

ТабДок.Вывести(ОбластьТоварыШапка);

ВыборкаТовары = Выборка.Товары.Выбрать();

Пока ВыборкаТовары.Следующий() Цикл

ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);

ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());

КонецЦикла;

ТабДок.Вывести(ОбластьУслугиШапка);

ВыборкаУслуги = Выборка.Услуги.Выбрать();

Пока ВыборкаУслуги.Следующий() Цикл

ОбластьУслуги.Параметры.Заполнить(ВыборкаУслуги);

ТабДок.Вывести(ОбластьУслуги, ВыборкаУслуги.Уровень());

КонецЦикла;

Подвал.Параметры.Заполнить(Выборка);

ТабДок.Вывести(Подвал);

ВставлятьРазделительСтраниц = Истина;

КонецЦикла;

//}}

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

Печать документа. Конструктор печати - student2.ru

Рис. 8.44.

Кроме того, в форме списка и в форме документа (Рис. 8.45) на командной панели появилась кнопка Печать (Рис. 8.46), нажатие на которую позволяет получить печатную форму документа (Рис. 8.47).

Печать документа. Конструктор печати - student2.ru

Рис. 8.45.

Печать документа. Конструктор печати - student2.ru

Рис. 8.46.

Печать документа. Конструктор печати - student2.ru

Рис. 8.47.

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

Функциональные опции

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

Для решения этой задачи начнем с добавления возможности указать валюту при продаже. Добавим справочник для хранения валют и соответствующие реквизиты в документы "РасходнаяНакладная" и "ПриходДенег". Эти реквизиты обязательно надо вывести на форму (Рис. 9.1).

Печать документа. Конструктор печати - student2.ru

Рис. 9.1.

Для того, чтобы пользователь имел возможность указать, хочет ли он вести валютный учет или нет добавим новую константу "ВестиВалютный учетПродаж" с типом "Булево". После этого создаем саму функциональную опцию ВалютныйУчет (Рис. 9.2), в которой через свойство "Хранение" устанавливаем связь с нашей константой, определяющей необходимость наличия валюты.

Печать документа. Конструктор печати - student2.ru

Рис. 9.2.

В свойствах функциональной опции включим в ее состав справочник и созданные реквизиты (Рис. 9.3).

Печать документа. Конструктор печати - student2.ru

Рис. 9.3.

После этого перейдем в режим "1С:Предприятие" и проделаем следующие операции:

По умолчанию значение константы ВалютныйУчет будет Ложь (флажок снят). Откроем документПриходДенег и РасходнаяНакладная. В этом случае, соответствующие реквизиты будут скрыты (Рис. 9.4). Кроме того, справочник Валюта будет недоступен для работы пользователя.

Печать документа. Конструктор печати - student2.ru

Рис. 9.4.

Теперь установим в константе значение "Истина" и убедимся, что для пользователя стали доступны объекты, отвечающие за валютный учет (Рис. 9.5).

Печать документа. Конструктор печати - student2.ru

Рис. 9.5.

Подсистемы и интерфейс

Подсистема позволяет группировать различные объекты конфигурации по какому-либо функциональному признаку.

Создадим подсистемы и укажем их состав (Рис. 10.1 и Рис. 10.2). Следует учитывать, что все объекты должны входить в состав какой-либо подсистемы.

Печать документа. Конструктор печати - student2.ru

Рис. 10.1.

Один и тот же объект может входить в произвольное количество подсистем, каждая подсистема может включать в себя произвольное количество объектов. Кроме того, подсистемы можно создавать в виде иерархической древовидной структуры, использую подчиненные подсистемы. Для красоты каждой подсистеме мы сопоставим картинку, которую можно взять откуда-то из внешнего файла, либо использовать стандартные пиктограммки платформы.

Печать документа. Конструктор печати - student2.ru

Рис. 10.2.

Для дальнейших действий нам потребуется у всех документов создать формы списка. Их внешний вид, в данном случае, значения не имеет. После чего переходим к настройкам командного интерфейса конфигурации (Рис. 10.3).

Печать документа. Конструктор печати - student2.ru

Рис. 10.3.

С помощью стандартных приёмов работы заполним рабочую область начальной страницы в соответствии с Рис. 11.4.

Печать документа. Конструктор печати - student2.ru

Рис. 10.4.

Теперь результат наших действий в пользовательском режиме сгруппирует объекты по разделам, в соответствии с подсистемами, а для начальной страницы позволит пользователю одновременно работать сразу с несколькими объектами (Рис.10.5).

Печать документа. Конструктор печати - student2.ru

Рис. 10.5.

Важной особенность интерфейса является возможность его гибкой настройки пользователем. Причем можно настроить как правила работы интерфейса в целом (Рис. 10.6 и Рис. 10.7), так и особенности внешнего вида каждого раздела (Рис. 10.8).

Печать документа. Конструктор печати - student2.ru

Рис. 10.6.

Печать документа. Конструктор печати - student2.ru

Рис. 10.7.

Печать документа. Конструктор печати - student2.ru

Рис. 10.8.

Регистр сведений

Бывают ситуации, когда хранить информацию в справочнике неудобно. Например, если мы покупаем товар у одного и того же поставщика, то, скорее всего, цена на этот товар будет одной и той же (будет меняться достаточно редко). Было бы удобно, если бы имелась возможность эту цену хранить и автоматически подставлять в документы. Для решения этой задачи необходимо для каждого поставщика для каждого купленного у него товара хранить цену. Задача сильно усложниться, если мы решим хранить эту цену еще и в рамках договора. С одной стороны, это информация справочного характера, т.е. имеет смысл хранить ее в справочнике. С другой стороны, реализовать ее хранение достаточно сложно, причем далеко не все возможности, предоставляемые системой для справочника, нам в этом случае понадобятся. Кроме того, желательно иметь возможность быстро найти нужное нам значение. Для решения подобного рода задач предназначен специальный объект Регистр сведений.

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

Печать документа. Конструктор печати - student2.ru

Рис. 11.1.

Создание нового регистра аналогично созданию нового документа или справочника (Рис. 11.1). Кроме того, как только мы стали использовать механизм подсистем для построения интерфейса, необходимо при создании объекта сразу же предусмотреть возможность работы пользователя с этим объектом, т.е. отобразить его на интерфейсе, для чего включить в соответствующую подсистему (Рис. 11.2).

Печать документа. Конструктор печати - student2.ru

Рис. 11.2.

Структуру регистра можно задать на закладке Данные.(Рис. 11.3) То, что мы собственно храним в регистре, находится в ресурсе, а те разрезы, в которых нас это информация интересует, находятся в измерениях. В нашем случае необходимо хранить цену для каждого товара, купленного по каждому договору и каждого поставщика, т.е. цена в разрезе поставщиков, договоров и номенклатуры. Следовательно, цена должна быть ресурсом, а контрагент, договор и номенклатура – измерениями. В этом случае система будет контролировать, что для каждого уникального набора значений измерений может быть только одно значение ресурса, т.е. для одного и того же товара по одному договору для одного поставщика может быть только одна цена. Естественно, что необходимо и для измерений и для ресурсов указать соответствующий тип данных.

Печать документа. Конструктор печати - student2.ru

Рис. 11.3.

Информацию в регистр пользователь может внести самостоятельно в режиме "1С:Предприятие", используя соответствующую форму списка (Рис. 11.4).

Печать документа. Конструктор печати - student2.ru

Рис. 11.4.

Для того, чтобы цена автоматически подставлялась в документе "Приходная накладная", необходимо задействовать обработчик ТоварыНоменклатураПриИзменении. Чтобы получить нужную нам цену, необходимо из всей хранящейся в регистре информации извлечь только ту, которая нам нужна в данный момент, т.е. каким-то образом ее отфильтровать. Сделать это можно с помощью специального объекта Структура. Далее, применив такой фильтр к нашему регистру, можно будет получить интересующую нас цену.

Ниже приведен соответствующий программный код:

&НаСервере

Функция ПолучитьЦену(НоменклатураДокумента)

СтруктураОтбора = Новый Структура;

СтруктураОтбора.Вставить("Контрагент ",Объект.Контрагент);

СтруктураОтбора.Вставить("Договор",Объект.Договор);

СтруктураОтбора.Вставить("Номенклатура", НоменклатураДокумента);

РезультатОтбора = РегистрыСведений.ЦеныПоставщиков.Получить(СтруктураОтбора);

Возврат РезультатОтбора.Цена;

КонецФункции

&НаКлиенте

Процедура ТоварыНоменклатураПриИзменении(Элемент)

СтрокаРасчета = Элементы.Товары.ТекущиеДанные;

СтрокаРасчета.Цена = ПолучитьЦену(СтрокаРасчета.Номенклатура);

ТоварыЦенаПриИзменении(Элемент)

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

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

Печать документа. Конструктор печати - student2.ru

Рис. 11.5.

В зависимости от того, какая указана периодичность регистра сведений, в нем можно хранить информацию уникальную для различных периодов, например, одно значение на каждый год, или одно значение на месяц, или на день и т.д. Поскольку валюта у нас используется только в зависимости от желания пользователя, то и логично регистр, связанный с валютой также использовать в зависимости от функциональной опции (Рис. 11.6).

Печать документа. Конструктор печати - student2.ru

Рис. 11.6.

Сама структура регистра будет состоять из 1 измерения и 1 ресурса (Рис. 11.7). Поскольку наш регистр является периодическим, то наряду с существующими измерениями добавляется еще одно Период (Рис. 11.8), и система предоставляет возможность быстро извлечь интересующую нас информацию на произвольный момент времени.

Печать документа. Конструктор печати - student2.ru

Рис. 11.7.

Печать документа. Конструктор печати - student2.ru

Рис. 11.8.

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

Для решения этой задачи, создадим новую подсистему "Кадры", которая будет содержать данные, необходимые для ведения кадрового учета, после чего потребуется создать регистр сведений "СведенияОСотрудниках". Будем считать, что в нашей организации нет совместителей, т.е. сотрудник может работать только в одном подразделении и получать там какой-то оклад. Структура регистра сведений должна быть следующей: измерение Сотрудник и ресурсы Подразделение и Оклад. При этом, следует обратить внимание на то, что в ресурсе может храниться значение ссылочного типа, т.е. в нашем случае ссылка на справочник Подразделения(Рис. 11.9).

Печать документа. Конструктор печати - student2.ru

Рис. 11.9.

Далее, наверное, наши сотрудники со временем могут переходить из подразделения в подразделения или получать другой оклад, поэтому сделаем регистр периодическим, с периодичностью месяц. Далее для того, чтобы в наш регистр попадали данные из документа необходимо указать способ записи "Подчинение регистратору" (Рис. 11.10). В этом случае у регистра появится дополнительное поле "Регистратор", в котором будет указан документ, сформировавший эти записи.

Печать документа. Конструктор печати - student2.ru

Рис. 11.10.

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

Создадим документ Кадровый приказ. Данный документ будет отражать кадровые изменения в подразделении, поэтому будет иметь реквизит "Подразделение" и табличную часть, с указанием сотрудника и его оклада (Рис. 11.11).

Печать документа. Конструктор печати - student2.ru

Рис. 11.11.

Чтобы документ формировал записи в регистр необходимо на закладке Движения настроить следующие свойства (Рис. 11.12):

Проведение – разрешить (для данного документа может быть статус "проведен")

Удалять движения – автоматически (при отмене проведения данного документа, сформированные им записи в регистрах будут удалены)

Указать те регистры, в которые будут сформированы записи.

Печать документа. Конструктор печати - student2.ru

Рис. 11.12.

После этого с помощью конструктора сформируем код, который собственно и будет определять, какую именно информацию и куда мы будем записывать. Для этого нажмем кнопку Конструктор движений, далее можно вручную, а можно автоматически с помощью кнопки Заполнить выражения (Рис. 11.13) сопоставить данные документа и регистра.

Печать документа. Конструктор печати - student2.ru

Рис. 11.13.

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

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Движения.СведенияОСотрудниках.Записывать = Истина;

Для Каждого ТекСтрокаСостав Из Состав Цикл

Движение = Движения.СведенияОСотрудниках.Добавить();

Движение.Период = Дата;

Движение.Сотрудник = ТекСтрокаСостав.Сотрудник;

Движение.Подразделение = Подразделение;

Движение.Оклад = ТекСтрокаСостав.Оклад;

КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

В режиме "1С:Предприятие" у пользователя появляется возможность провести или снять с проведения проведенный документ (Рис. 11.14).

Печать документа. Конструктор печати - student2.ru

Рис. 11.14.

Обратите внимание, по умолчанию наш регистр не отобразился автоматически в интерфейсе. Чтобы посмотреть результат наших действий, самостоятельно добавьте регистр в интерфейс (Рис. 11.15).

Печать документа. Конструктор печати - student2.ru

Рис. 11.15.

Запрос

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

Чтобы познакомится с тем, как формировать запрос, и что получается в результате его работы, воспользуемся стандартной обработкой "Консоль запросов". Данная обработка является технологической, как получить окончательный результат будет изложено в следующем разделе. Для работы обработки необходимо будет через пункт меню Сервис-Параметры выполнить следующие настройки (Рис. 12.1):

Печать документа. Конструктор печати - student2.ru

Рис. 12.1.

Только после этих настроек в свойствах конфигурации станет доступной следующая нужная нам настройка (Рис. 12.2).

Печать документа. Конструктор печати - student2.ru

Рис. 12.2.

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

Печать документа. Конструктор печати - student2.ru

Рис. 12.3.

В конструкторе запроса мы, работая на уровне таблиц, определяем откуда и какая именно информация нас интересует (Рис. 12.4).

Печать документа. Конструктор печати - student2.ru

Рис. 12.4.

Результатом работы конструктора будет являться текст запроса, запустив на исполнение который с помощью кнопки "Выполнить", мы сможем увидеть полученную этим запросом информацию (Рис. 12.5)

Печать документа. Конструктор печати - student2.ru

Рис. 12.5.

Результат этого запроса покажет нам не только данные о поставщиках, а вообще всё, что храниться в справочнике. Очевидно, что необходимо избавиться от лишних данных. Для этого мы вернёмся в конструктор запроса и перейдём на закладку "Условия". Лишними для нас будут являться данные о контрагентах из всех групп, кроме группы "Поставщики" и непосредственно сами группы. Для установки данного отбора выберем поля, по которым будет ставить отбор, и сами функции, которые будут осуществлять отбор (Рис. 12.6).

Печать документа. Конструктор печати - student2.ru

Рис. 12.6.

После добавления условий необходимо установить значения для наших параметров – по какой же собственно группе мы хотим установить отбор? Сделаем это используя кнопку "&Параметры" и в открывшемся окне кнопку "Получить из запроса". Теперь, имея список параметров, которые нам требуется определить, для каждого параметра укажем его значение (Рис. 12.7).

Печать документа. Конструктор печати - student2.ru

Рис. 12.7.

Установив параметры, выполним наш запрос и увидим искомый список поставщиков (Рис. 12.8). Таким образом, с помощью запроса мы можем извлечь информацию из базы, отфильтровав с помощью различных условий только то, что нам требуется.

Печать документа. Конструктор печати - student2.ru

Рис. 12.8.

Следующее, что мы сделаем, это с помощью запроса получим данные о том, кому и сколько денег мы заплатили. Получить эту информацию мы можем из документов "РасходДенег" (Рис. 12.9),

Печать документа. Конструктор печати - student2.ru

Рис. 12.9.

Сложность будет заключаться в том, что платежей одному и тому же контрагенту может быть произвольное количество. Очевидно, что удобнее будет увидеть сводные цифры, т.е. по каждому получателю денег должна быть единственная запись, а не столько, сколько было платежей. Для решения этой задачи воспользуемся механизмом группировки (Рис. 12.10).

Печать документа. Конструктор печати - student2.ru

Рис. 12.10.

С помощью этого механизма нам стали доступны не просто исходная информация из базы, но и расчетные данные (Рис. 12.11).

Печать документа. Конструктор печати - student2.ru

Рис. 12.11.

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

Печать документа. Конструктор печати - student2.ru

Рис. 12.12.

Результат выполнения данного запроса показывает курсы валют на 17.01.2014, хотя именно на 17 число курсы валют у нас не хранятся (Рис. 12.13).

Печать документа. Конструктор печати - student2.ru

Рис. 12.13.

Следующий пример будет более сложным. Нас будет интересовать информация о том, в какое подразделение и сколько денег мы выплатили за месяц. Сложность данной задачи заключается в том, что в отличие от предыдущих примеров у нас на первый взгляд отсутствует требуемая информация – в документе "РасходДенег" не указано подразделение. Однако, в документе указан сотрудник, а для сотрудника у нас есть кадровые данные. Таким образом, зная какому сотруднику мы заплатили и зная в каком подразделении он числится, мы можем получить требуемые данные. Для этого в запросе мы будем собирать данные сразу из двух разных источников (Рис. 12.14).

Печать документа. Конструктор печати - student2.ru

Рис. 12.14.

Сопоставление получателя денег в документе с сотрудником, работающим в подразделении, произведем через механизм соединения на закладке "Связи" (Рис. 12.15).

Печать документа. Конструктор печати - student2.ru

Рис. 12.15.

Применим группировку, чтобы получить общую сумму выплат (Рис. 12.16). Печать документа. Конструктор печати - student2.ru

Рис. 12.16.

После чего проверяем результат (Рис. 12.17).

Печать документа. Конструктор печати - student2.ru

Рис. 12.17.

Таким образом, с помощью запроса нам удалось собрать вместе и обработать информацию, которая хранилась в нашей информационной базе в разных местах. В результате платформа предоставляет нам инструмент для удобного получения и анализа данных. В дальнейшем результат запроса может быть применен для решения самых разных задач. Мы рассмотрим простейшее применение – отображение данных запроса в удобном для пользователя виде, для чего предназначен специальный объект "Отчет".

Отчет. Компоновка данных

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

Создадим стандартным образом новый объект Отчет (Рис. 13.1), чтобы пользователь мог удобным для себя способом получить информацию о выплатах по подразделениям. Т.е. предоставим пользователю полученную нами ранее с помощью запроса информацию, но уже в удобном для работы виде. Для формирования отчета воспользуемся системой компоновки данных.

Печать документа. Конструктор печати - student2.ru

Рис. 13.1.

Создадим с помощью конструктора новую схему компоновки данных (Рис. 13.2)

Печать документа. Конструктор печати - student2.ru

Рис. 13.2.

Добавим новый набор данных, получаемый с помощью запроса (Рис. 13.3)

Печать документа. Конструктор печати - student2.ru

Рис. 13.3.

С помощью конструктора запросов сформируем запрос (Рис. 13.4). После этого с помощью компоновки данных настроим правила отображения этого запроса (Рис.13.5 и Рис. 13.6). Обратите внимание, что добавляя новую группировку, мы ничего не изменяем, а сразу же нажимаем кнопку "ОК" (Рис.13.5).

Печать документа. Конструктор печати - student2.ru

Рис. 13.4.

Печать документа. Конструктор печати - student2.ru

Рис. 13.5.

Печать документа. Конструктор печати - student2.ru

Рис. 13.6.

Не забудем добавить отчет в подсистему, после чего переходим в пользовательский режим, где уже без всяких конструкторов запроса у конечного пользователя появляется возможность получить табличный документ, содержащий требуемую информацию (Рис. 13.7).

Печать документа. Конструктор печати - student2.ru

Рис. 13.7.

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

Создадим новый отчет "ПродажиСотрудников". Описанным выше способом воспользуемся механизмом компоновки и запросом соберём данные о продажах (Рис. 13.8).

Печать документа. Конструктор печати - student2.ru

Рис. 13.8.

На закладке "Ресурсы" определим поле "СуммаДокумента" как ресурс (Рис. 13.9). После этого перейдём на закладку "Настройки", где определим группировки и выбранные поля (Рис. 13.10). В отличие от предыдущего отчета, здесь нам необходимо будет явным образом указать значения группировок.

Печать документа. Конструктор печати - student2.ru

Рис. 13.9.

Печать документа. Конструктор печати - student2.ru

Рис. 13.10.

Результат наших действий позволит получить пользователю сводные данные о продажах сотрудников в разрезе валют (Рис. 13.11). Естественно, что для проверки правильности работы нашего отчета перед его формированием надо внести сами данные о продажах. Чем больше и разнообразнее данных будет содержать база, тем более наглядным будет наш отчет.

Печать документа. Конструктор печати - student2.ru

Рис. 13.11.

С одной стороны, мы решили поставленную задачу и предоставили пользователю нужные данные в красивом и удобном виде. Однако, с другой стороны, как быть, если теперь пользователя заинтересовала та же самая информация, но в другом разрезе? Если теперь нас в первую очередь интересует не валюта, а сотрудник? Получается, что все необходимые данные в отчете присутствуют, но пользоваться ими неудобно. Конечно, можно сделать еще один отчет для решения этой новой задачи, но вместо этого механизм компоновки данных предлагает нам новый механизм – варианты отчета.

Вернемся в режим "Конфигуратор" в настройки компоновки нашего отчета. Все необходимые данные уже получены нами с помощью запроса, а вот их отображение определяется нами на закладке "Настройки", где в левом окне мы добавляем новый вариант, для которого можем совершенно новым образом определить группировки и выбранные поля (Рис. 13.12).

Печать документа. Конструктор печати - student2.ru Рис. 13.12.

Печать документа. Конструктор печати - student2.ru

Рис. 13.13.

Теперь в пользовательском режиме для нашего отчета появляется новая возможность выбора варианта (Рис. 13.13) и, таким образом, отображать одни и те же данные разными способами в зависимости от своих текущих предпочтений.

Кроме того, по кнопке "Еще" у пользователя появляется крайне важная возможность добавить свои собственные варианты отчета (Рис. 13.14).

Печать документа. Конструктор печати - student2.ru

Рис. 13.14.

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

Печать документа. Конструктор печати - student2.ru

Рис. 13.15.

Однако и это еще не все возможности, которые предоставляет нам система компоновки данных. Создадим основную форму списка для справочника "Валюты". В свойствах основного реквизита формы "Список" установим флаг "ПроизвольныйЗапрос" и нажмём на гиперссылку "Открыть" (Рис. 13.16).

Печать документа. Конструктор печати - student2.ru

Рис. 13.16.

Для отображения данных справочника платформа получает данные с помощью того же самого механизма запросов, а отражает его результат с помощью компоновки данных. В результате мы, как разработчик, получаем возможность изменить текст запроса для отображения данных на форме каким-то иным образом. Например, при работе с валютой крайне удобно видеть её текущий курс, который храниться не в справочнике, а в регистре сведений. Добавив в запрос соединение (Рис. 13.7) мы можем решить эту задачу.

Печать документа. Конструктор печати - student2.ru

Рис. 13.17.

Получив данные запросом, изменяем саму форму, добавив туда новые данные (Рис. 13.18)

Печать документа. Конструктор печати - student2.ru

Рис. 13.18.

Осталось проверить результат в пользовательском режиме (рис. 13.19)

Печать документа. Конструктор печати - student2.ru Рис. 13.19.

Наши рекомендации