- объектный (для чтения и записи);
- табличный (для чтения).
Важной особенностью объектного способа доступа к данным является то, что, обращаясь к какому-либо объекту встроенного языка, мы обращаемся к некоторой совокупности данных, находящихся в базе данных, как к единому целому.
Например, объект ДокументОбъект.ОказаниеУслуги будет содержать значения всех реквизитов документа Оказание услуги и всех его табличных частей. Объектная техника обеспечивает сохранение целостности объектов, кеширование объектов, вызов соответствующих обработчиков событий и т.д. Табличный доступ к данным в «1С:Предприятии» реализован с помощью запросов к базе данных, которые составляются на языке запросов.
В этой технике разработчик получает возможность оперировать отдельными полями таблиц базы данных, в которых хранятся те или иные данные.
Табличная техника предназначена для получения информации из базы данных по некоторым условиям (отбор, группировка, сортировка, объединение нескольких выборок, расчет итогов и т.д.). Табличная техника оптимизирована для обработки больших объемов информации, расположенной в базе данных, и получения данных, отвечающих заданным критериям.
Работа с запросами
Для работы с запросами используется объект встроенного языка Запрос. Он позволяет получать информацию, хранящуюся в полях базы данных, в виде выборки, сформированной по заданным правилам.Источники данных запросов
Исходную информацию запрос получает из набора таблиц. Эти таблицы представляют разработчику данные реальных таблиц базы данных в удобном для анализа виде. Все таблицы, которыми оперирует язык запросов, можно разделить на две большие группы: реальные таблицы и виртуальные таблицы
Посмотреть состав таблиц, доступных для запроса, и их описание можно в синтакс-помощнике в разделе Работа с запросами → Таблицы запросов. Отличительной особенностью реальных таблиц является то, что они содержат данные какой-либо одной реальной таблицы, хранящейся в базе данных. Например, реальной является таблица Справочник.Клиенты, соответствующая справочнику Клиенты, или таблица РегистрНакопления.ОстаткиМатериалов, соответствующая регистру накопления ОстаткиМатериалов.
Виртуальные таблицы формируются в основном из данных нескольких таблиц базы данных. Например, виртуальной является таблица РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты, формируемая из нескольких таблиц регистра накопления Остатки Материалов. Иногда виртуальные таблицы могут формироваться и из одной реальной таблицы (например, виртуальная таблица Цены.СрезПоследних формируется на
основе таблицы регистра сведений Цены). Однако общим для всех виртуальных таблиц является то, что им можно задать ряд параметров, определяющих, какие данные будут включены в эти виртуальные таблицы. Набор таких параметров может быть различным для разных виртуальных таблиц и определяется данными, хранящимися в исходных таблицах базы данных. Реальные таблицы подразделяются на объектные (ссылочные) и необъектные (нессылочные).
В объектных (ссылочных) таблицах представлена информация ссылочных типов данных (справочники, документы, планы видов характеристик и т.д.). А в необъектных (нессылочных) – всех остальных типов данных (константы, регистры и т.д.). Отличительной особенностью объектных (ссылочных) таблиц является то, что они включают в себя поле Ссылка, содержащее ссылку на текущую запись. Кроме этого, для таких таблиц возможно получение пользовательского представления объекта. Эти таблицы могут быть иерархическими, и поля таких таблиц могут содержать вложенные таблицы (табличные части).
Язык запросов
Алгоритм, по которому данные будут выбраны из исходных таблиц запроса, описывается на специальном языке – языке запросов. Текст запроса может состоять из нескольких частей:- описание запроса,
- объединение запросов,
- упорядочивание результатов,
- автоупорядочивание,
- описание итогов.
Описание запроса определяет источники данных, поля выборки, группировки и т.д.
Объединение запросов определяет, как будут объединены результаты выполнения нескольких запросов.
Упорядочивание результатов определяет условия упорядочивания строк результата запроса.
Автоупорядочивание позволяет включить режим автоматического упорядочивания строк результата запроса.
Описание итогов определяет, какие итоги необходимо рассчитывать в запросе и каким образом группировать результат.
Следует заметить, что в случае, когда язык запросов используется для описания источников данных в системе компоновки данных, секция описания итогов языка запросов не используется. Это связано с тем, что система компоновки данных самостоятельно рассчитывает итоги на основании тех настроек, которые сделаны разработчиком или пользователем. Применение различных синтаксических конструкций языка запросов подробно описано во встроенной справке в режиме Конфигуратор: Справка
→ Содержание справки → 1С:Предприятие → Встроенный язык → Работа с запросами, а также в документации «1С:Предприятие 8.3. Руководство разработчика», глава 8 «Работа с запросами».
Система компоновки данных
Система компоновки данных предназначена для создания произвольных отчетов в системе «1С:Предприятие» и состоит из нескольких основных частей. Исходные данные для компоновки отчета содержит в себе схема компоновки данных. Это наборы данных и методы работы с ними.
Разработчик создает схему компоновки данных, в которой описывает текст запроса, наборы данных, связи между ними, доступные поля, параметры получения данных, и задает первоначальные настройки компоновки – структуру отчета, макет оформления данных и др. Например, схема компоновки может содержать следующий набор данных

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

В этом случае сформированный отчет будет иметь следующий вид

В данном отчете содержится информация из регистра накопления ПродажиОбороты о клиентах и оказанных им услугах, представленная в виде таблицы и диаграммы. Система компоновки данных представляет собой совокупность нескольких объектов. При формировании и исполнении отчета происходит последовательная передача данных от одного объекта системы компоновки данных к другому, до получения конечного результата – документа, показанного пользователю.
Алгоритм взаимодействия этих объектов выглядит следующим образом:
- Разработчик создает схему компоновки данных и настройки по умолчанию. В общем случае на основе одной схемы компоновки данных может быть создано большое количество различных отчетов. Настройки компоновки данных, создаваемый разработчиком или изменяемые пользователем, определяют, какой именно отчет будет получен в конкретном случае.
- На основе схемы компоновки и имеющихся настроек компоновщик макета создает макет. Это этап подготовки к исполнению отчета. Макет компоновки данных является уже готовым заданием для выполнения процессором компоновки. Он содержит необходимые запросы, макеты областей отчета и др.
- Процессор компоновки данных выбирает данные из информационной базы согласно макету компоновки, агрегирует и оформляет эти данные.
- Результат компоновки обрабатывается процессором вывода, и в итоге пользователь получает результирующий табличный документ. Эту последовательность работы можно представить в виде следующей схемы

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


Запрос для набора данных
В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления Продажи.Обороты. Затем выберем из нее следующие поля (рис. 13.100):
- ПродажиОбороты.Клиент,
- ПродажиОбороты.ВыручкаОборот,
- ПродажиОбороты.СтоимостьОборот.

На закладке Объединения/Псевдонимы укажем, что поле ВыручкаОборот будет иметь псевдоним Выручка, а поле СтоимостьОборот – Стоимость. На этом создание запроса завершено, нажмем OK. Ничего нового и непонятного в этом запросе для нас нет, поэтому не будем его подробно рассматривать. Перейдем к редактированию схемы компоновки данных.

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

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

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

На закладке Другие настройки выберем тип диаграммы – Круговая объемная и включим эту настройку в состав быстрых пользовательских настроек. Также зададим заголовок отчета – Рейтинг клиентов.

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

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

Вывод данных в таблицу
На примере создания универсального отчета мы продемонстрируем вывод данных в таблицу. Мы покажем, как сделать отчет максимально универсальным, чтобы позволить пользователю в режиме 1С:Предприятие, не обращаясь к полным настройкам отчета (не выполняя Еще → Изменить вариант…), изменять его структуру и внешний вид. Например, поменять местами строки и колонки таблицы или изменить данные, выводящиеся в ячейках таблицы.В режиме «Конфигуратор»
Добавим новый объект конфигурации Отчет. Назовем его Универсальный и запустим конструктор схемы компоновки данных. Создадим новый Набор данных – запрос и вызовем конструктор запроса.
Запрос для набора данных
В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления Продажи.Обороты. Затем выберем из нее все поля.

Нажмем OK
Ресурсы
На закладке Ресурсы нажатием кнопки >> выберем все доступные ресурсы отчета.
Настройки
На закладке Настройки добавим в структуру отчета таблицу. Для этого нажмем кнопку Добавить в командной панели окна настроек и добавим таблицу.

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

расположенную вверху в командной панели окна настроек. В появившемся окне мы можем редактировать состав пользовательских настроек таблицы. Установим признак использования для
настроек Выбранные поля, Группировки строк и Группировки колонок и оставим для них по умолчанию свойство Режим редактирования в значении Быстрый доступ.

Таким образом, мы предоставили пользователю возможность самостоятельно определять состав выбранных полей, группировок строк и колонок таблицы непосредственно в отчетной форме перед формированием отчета. В заключение определим, в каких подсистемах будет отображаться наш отчет. Закроем конструктор схемы компоновки данных и в окне редактирования объекта конфигурации Отчет Универсальный перейдем на закладку Подсистемы. Отметим в списке подсистем конфигурации подсистему Оказание услуг.
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и выполним команду Универсальный в разделе ОказаниеУслуг. Если мы сейчас нажмем Сформировать, то ничего не увидим в результате, так как список выбранных полей, группировок строк и колонок таблицы пуст. Заполним эти быстрые пользовательские настройки. Нажмем кнопку выбора в строке Выбранные
поля и выберем из доступных полей поле ВыручкаОборот. Нажмем кнопку выбора в строке Строки и добавим в строки таблицы группировку по полю Номенклатура с типом Иерархия. Нажмем кнопку выбора в строке Колонки и добавим в колонки таблицы группировку по полю Мастер. Нажмем Сформировать. Отчет примет следующий вид.

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

Теперь исключим из списка выбранных полей поле СтоимостьОборот. В строках таблицы заменим прежнюю группировку на группировку по полю Номенклатура с типом ТолькоИерархия. В колонки таблицы добавим группировку по полю Клиент и поместим ее первой в списке группировок. В результате отчет примет следующий вид

Таким образом, используя этот отчет, мы предоставили пользователю альтернативную возможность самостоятельно формировать отчет по регистру Продажи.
Теория: виртуальные таблицы запросов
Как вы теперь знаете, при создании запроса платформа предоставляет нам в качестве источников данных некоторое количество виртуальных таблиц. Название «виртуальные» полностью соответствует их сути, поскольку эти таблицы, в свою очередь, также являются результатом запроса, который система формирует в момент выполнения соответствующего участка кода.По большому счету разработчик может самостоятельно получить те же самые данные, которые система предоставляет ему в качестве виртуальных таблиц, однако алгоритм получения этих данных не будет оптимизирован в силу следующих двух причин.
Во-первых, все виртуальные таблицы параметризованы, то есть разработчику предоставляется возможность задать некоторые параметры,
которые система будет использовать при формировании запроса создания виртуальной таблицы.
Примечательным здесь является то, что задание параметров виртуальной таблицы далеко не всегда приводит к простой подстановке указанных разработчиком значений в текст запроса. В зависимости от того, какие параметры виртуальной таблицы указаны разработчиком, система может формировать РАЗЛИЧНЫЕ запросы для получения одной и той же виртуальной таблицы, причем они будут оптимизированы с точки зрения переданных параметров.
Во-вторых, не всегда разработчик имеет возможность получить доступ к тем данным, к которым имеет доступ система. Например, при использовании виртуальных таблиц регистров сведений разработчику доступна по большому счету вся та же информация о данных регистров, которую использует система при формировании запроса виртуальной таблицы.
Совсем иная картина с виртуальными таблицами регистров накопления. Здесь система динамически формирует запрос в зависимости не только от переданных параметров, но и от периода рассчитанных итогов регистра, причем в запросе она использует данные рассчитанных итогов, которые просто недоступны для разработчика при создании запроса.
Конечно, разработчик может самостоятельно перебрать все записи регистра накопления и в итоге получить те же самые данные, которые система предоставляет в виде виртуальной таблицы. Однако очевидно, что такой запрос будет менее эффективным и потребует от разработчика гораздо больше трудозатрат.
Оптимизация проведения документа «Оказание услуги»