
- •Тема 1. Обзор системы 1с:Предприятие 8.0
- •1.1. Обзор системы 1с:Предприятие 8.0
- •1.2. Объекты конфигурации
- •1.3. Инструменты разработки
- •1.4. Администрирование
- •1.5. Файловый и клиент-серверный варианты работы
- •Вопросы для повторения
- •Резюме по теме
- •Тема 2. Встроенный язык. Программные модули.
- •2.1. Встроенный язык
- •2.1.1. Программные модули
- •2.1.2. Разделы программного модуля
- •2.2. Контекст
- •2.3. Стандарты именования переменных, процедур и объектов конфигурации
- •2.4. Правила написания программных модулей
- •2.5. Конструкции встроенного языка
- •2.5.1. Условия
- •2.5.2. Циклы
- •2.5.3. Безусловные переходы
- •2.5.4. Обработка исключений
- •2.5.5. Процедуры и функции
- •2.6. Инструкции препроцессора
- •2.7. Типы данных
- •2.8. Редактор программных модулей
- •Вопросы для повторения
- •Резюме по теме
- •Тема 3. Основные объекты конфигурации
- •3.1. Константы
- •3.2. Справочники, их структура, предопределенные элементы, подчиненные справочники, иерархические справочники
- •3.2.1. Структура справочника
- •3.2.2. Предопределенные элементы
- •3.2.3. Подчиненные справочники
- •3.2.4. Табличные части
- •3.2.5. Иерархические справочники
- •3.2.6. Экранные формы
- •3.3. Документы и журналы документов
- •3.3.1. Структура документа
- •3.3.2. Экранные формы документа
- •3.3.3. Макеты документа
- •3.3.4. Проведение документов
- •3.3.5. Модуль документа
- •3.3.6. Нумерация документов
- •3.3.7. Журналы документов
- •3.3.8. Последовательности
- •3.4. Перечисления
- •3.5. Отчеты и обработки
- •3.6. Внешние обработки
- •Вопросы для повторения
- •Резюме по теме
- •Тема 4. Интерфейс пользователя
- •4.1. Интерфейсы
- •4.2. Экранные формы
- •4.3. Редактор форм
- •4.4. Элементы управления
- •4.4.1. Поле ввода
- •4.4.2. Надпись
- •4.4.3. Кнопка
- •4.4.4. Командная панель
- •4.4.5. Флажок
- •4.4.6. Переключатели
- •4.4.7. Табличное поле
- •4.4.8. Поле списка
- •4.4.9. Поле выбора
- •4.4.10. Панель
- •4.4.11. Поле табличного документа
- •4.4.12. Рамка
- •4.4.13. Картинка
- •4.4.14. Диаграмма
- •4.4.15. Индикатор
- •4.4.16. Полоса регулирования
- •4.4.17. Поле календаря
- •4.4.18. Поле текстового документа
- •4.4.19. Поле html-документа
- •4.4.20. Разделитель
- •4.5. Привязка границ
- •4.6. Приемы программирования
- •4.6.1. Открытие и закрытие форм
- •4.6.2. Формы для выбора
- •4.6.3. Внешний вид формы
- •4.6.4. Элементы формы
- •Вопросы для повторения
- •Резюме по теме
- •Тема 5. Коллекции значений
- •5.1. Массив
- •5.2. Структура и соответствие
- •5.3. Список значений
- •5.4. Таблица значений
- •5.5. Дерево значений
- •Вопросы для повторения
- •Резюме по теме
- •Тема 6. Взаимодействие с другими системами
- •6.1. Текстовые файлы
- •6.1.1. Объект «ТекстовыйДокумент»
- •6.1.2. Последовательный доступ к тексту
- •6.1.3. Объект «ЗаписьТекста»
- •6.1.4. Объект «ЧтениеТекста»
- •6.2. XBase (работа с dbf-файлами)
- •6.2.1. Запись dbf-файла
- •6.2.2. Чтение dbf-файла
- •6.2.3. Удаленные записи
- •6.2.4. Индексы
- •6.3.1. Запись xml
- •6.3.2. Чтение xml
- •6.4. Интернет-технологии
- •6.4.1. Интернет-соединение
- •6.4.2. Поле html-документа
- •6.4.3. Электронная почта (e-mail)
- •6.4.4. Работа с ftp
- •6.5. Работа с операционной системой
- •6.7. Механизм Automation
- •6.8. Технология внешних компонент
- •Вопросы для повторения
- •Резюме по теме
- •Практикум (лабораторный) Лабораторная работа №1. Знакомство с платформой 1с:Предприятие 8.0. Создание новой информационной базы.
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №2. Знакомство с объектом конфигурации «Справочник».
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №3. Знакомство с объектом конфигурации «Документ».
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №4. Знакомство с объектом конфигурации «Регистр накопления».
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №5. Знакомство с объектом конфигурации «Отчет».
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №6. Знакомство с объектом конфигурации «Макет».
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №7. Редактирование макетов и форм.
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №8. Периодический регистр сведений.
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №9. Знакомство с объектом конфигурации «Перечисление».
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №10. Проведение документа по нескольким регистрам.
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №11. Оборотный регистр накопления.
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа № 12. Знакомство с объектом конфигурации «Отчет» ч.1.
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа № 13. Знакомство с объектом конфигурации «Отчет» ч.2.
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
Общая постановка задачи
В курсе лабораторных работ рассматривается сквозная задача, демонстрирующая основные приемы и методы разработки в 1С:Предприятие 8.0. На протяжении всех лабораторных работ будет постепенно создаваться конфигурация, которая практически полностью автоматизирует работу небольшой фирмы ООО «Мастер», которая оказывает услуги по ремонту различной бытовой техники (в основном ремонт телевизоров и установка стиральных машин). Создаваемая конфигурация позволит вести учет материалов, отслеживая их поступление и расход, так же сможет предоставлять некоторые итоговые данные о движениях и остатках материалов, выводить на печать бумажные аналоги электронных документов и др.
Список индивидуальных данных
Продолжается разработка выбранной в первой лабораторной работе индивидуальной темы.
Пример выполнения работы
Отчет РеестрДокументовОказаниеУслуги
Первым отчетом, на основе которого мы начнем знакомиться языком запросов, будет отчет «РеестрДокументовОказаниеУслуги». Этот отчет просто будет выводить список существующих в базе данных документов «ОказаниеУслуги» в порядке их дат и номеров.
Создадим в конфигураторе новый объект конфигурации Отчет «РеестрДокументовОказаниеУслуги». Перейдем на закладку «Макет» и запустим конструктор выходной формы.
В качестве источника данных для запроса выберем объектную (ссылочную) таблицу документов «ОказаниеУслуги». Из этой таблицы выберем следующие поля:
«Дата»,
«Номер»,
«Склад»,
«Мастер»,
«Клиент»:
Обратите внимание, что при выборе полей «Склад», «Мастер» и «Клиент» в список выбранных полей подбираются также поля «Склад.Представление», «Мастер.Представление» и «Клиент.Представление». Дело в том, что в общем случае подразумевается, что эти поля будут выводиться в ячейки табличного документа. Поскольку соответствующие поля «Склад», «Мастер» и «Клиент» являются ссылочными, то в случае, если в качестве значения параметра для вывода будет передано значение-ссылка, система будет выполнять дополнительный запрос для получения представления этого поля (которое и будет выведено в документ), в результате чего вывод отчета замедлится. Поэтому система, при выборе ссылочных полей, предлагает сразу же включить в список выбранных полей и представления ссылочных полей, в расчете на то, что именно они и будут использованы для вывода в документ.
После этого перейдем на закладку «Порядок» и укажем, что результат запроса должен быть сначала упорядочен по значению поля «Дата», а затем - по значению поля «Номер»:
Перейдем на закладку «Отчет» и сбросим флаг «Использовать построитель отчета»:
Нажмем «ОК» Конструктор сформирует форму отчета и макет. Откроем модуль формы и найдем в нем процедуру «РеестрДокументовОказаниеУслуги». В этой процедуре как раз формируется текст запроса, который будет использован для получения интересующих нас данных:
Запрос Текст =
"ВЫБРАТЬ
ОказаниеУслуги.Дата КАК Дата,
ОказаниеУслуги.Номер КАК Номер,
ОказаниеУслуги.Склад,
ОказаниеУслуги.Склад.Представление,
ОказаниеУслуги.Мастер,
ОказаниеУслуги.Мастер.Представление,
ОказаниеУслуги.Клиент,
ОказаниеУслуги.Клиент.Представление
ИЗ
Документ.ОказаниеУслуги КАК ОказаниеУслуги
УПОРЯДОЧИТЬ ПО
Дата,
Номер";
Текст запроса начинается, как мы говорили выше, с части описания запроса:
"ВЫБРАТЬ
ОказаниеУслуги.Дата КАК Дата,
ОказаниеУслуги.Номер КАК Номер,
ОказаниеУслуги.Склад,
ОказаниеУслуги.Склад.Представление,
ОказаниеУслуги.Мастер,
ОказаниеУслуги.Мастер.Представление,
ОказаниеУслуги.Клиент,
ОказаниеУслуги.Клиент.Представление
ИЗ
Документ.ОказаниеУслуги КАК ОказаниеУслуги
Описание запроса начинается с обязательного ключевого слова ВЫБРАТЬ. Затем следует список полей выборки, в котором описываются поля, которые должны содержаться в результате запроса. Этот список может содержать как собственно поля, так и некоторые выражения, вычисляемые на основе значений полей.
После ключевого слова ИЗ указываются источники данных - исходные таблицы запроса, содержимое которых обрабатывается в запросе. В данном случае это объектная (ссылочная) таблица «Документ.ОказаниеУслуги» После ключевого слова КАК указывается псевдоним источника данных. В нашем случае это «ОказаниеУслуги». В дальнейшем к этому источнику данных можно будет обращаться в тексте запроса, используя псевдоним. Такое обращение мы видим в описании полей выборки:
"ВЫБРАТЬ
ОказаниеУслуги.Дата КАК Дата,
ОказаниеУслуги.Номер КАК Номер,
ОказаниеУслуги.Склад,
ОказаниеУслуги.Склад.Представление,
ОказаниеУслуги.Мастер,
ОказаниеУслуги.Мастер.Представление,
ОказаниеУслуги.Клиент,
ОказаниеУслуги.Клиент.Представление
Поля выборки также могут иметь псевдонимы, по которым в дальнейшем в тексте запроса можно обращаться к этому полю. В нашем случае это псевдонимы «Дата» и «Номер».
После части описания запроса в нашем примере следует часть упорядочивания результатов:
УПОРЯДОЧИТЬ ПО
Дата,
Номер";
Предложение «УПОРЯДОЧИТЬ ПО» позволяет сортировать строки в результате запроса. После этого ключевого предложения располагается выражение упорядочивания, которое, в общем случае, представляет собой перечисление полей (выражений) и порядка вывода. В нашем случае упорядочивание будет выполняться сначала по полю выборки, обращение к которому выполняется через псевдоним - «Код», а затем по полю - «Номер» В обоих случаях порядок сортировки будет по возрастанию, который является порядком сортировки по-умолчанию.
Теперь обратим внимание на то, как выводится результат запроса в табличный документ.
Процедура РеестрДокументовОказаниеУслуги(ТабДок) Экспорт
//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ(РеестрДокумеитовОказаниеУслуги)
//Данный фрагмент построен конструктором.
// При повторном использовании конструктора,
//внесенные вручную изменения будут утеряны!!!
Макет = ПолучитьМакет("РеестрДокументовОказаниеУслуги");
Запрос = Новый Запрос;
…
Результат = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
ВыборкаДетали = Результат.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
//}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ
КонецПроцедуры
В форме отчета расположен элемент управления «ПолеТабличногоДокумента» с именем «ТабДок», который заполняется данными на основе макета, сформированного конструктором.
В начале процедуры мы получаем макет отчета, из которого затем получаем существующие в нем области в соответствующие переменные:
…
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
…
Затем мы очищаем табличный документ и выводим в него те области, которые не содержат данных, получаемых из результата запроса:
…
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
…
В последней строке конструктор добавил начало автогруппировки строк. В данном примере у нас нет строк, которые нужно было бы группировать, но по умолчанию конструктор всегда предлагает выполнить группировку строк в табличном документе. На скорость вывода отчета такой вызов влиять не будет, поэтому оставим текст конструктора без изменений.
После этого мы получаем выборку из результата запроса, которую перебираем в цикле:
…
Результат = Запрос.Выполнить();
…
ВыборкаДетали = Результат.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;
…
В каждой итерации цикла мы заполняем параметры полученной ранее области макета значениями, полученными из очередной записи выборки результата запроса и выводим эту область в табличный документ.
В заключение процедуры, мы выводим в табличный документ завершающие области макета:
…
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
…
Теперь запустим 1С:Предприятие в режиме отладки и посмотрим на результат работы нашего отчета:
Таким образом, на примере этого отчета мы продемонстрировали, как использовать конструктор выходной формы и познакомились с некоторыми основными конструкциями языка запросов.
Отчет Рейтинг услуг
Отчет «Рейтинг услуг» будет содержать информацию о том, выполнение каких услуг принесло ООО «Мастер» наибольшую прибыль в указанном периоде. На примере отчета «Рейтинг услуг» мы проиллюстрируем, как отбирать данные в некотором периоде, как задавать параметры запроса и как использовать в запросе данные из нескольких таблиц и включать в результат запроса все данные одного из источников.
Создадим новый объект конфигурации Отчет «РейтингУслуг». Перейдем на закладку «Макеты» и вызовем конструктор выходной формы.
Выберем объектную (ссылочную) таблицу справочника «Номенклатура» и виртуальную таблицу регистра накопления «Продажи.Обороты». Для того чтобы исключить неоднозначность имен в запросе, переименуем таблицу «Номенклатура» в «СпрНоменклатура» (контекстное меню правой кнопки мыши).
Затем установим курсор на таблицу «ПродажиОбороты» и вызовем диалог ввода параметров виртуальной таблицы:
Укажем, что начало и конец периода будут переданы в соответствующих параметрах «ДатаНачала» и «ДатаОкончания» (символ «&» перед именем указывает, что это параметр запроса):
Затем выберем из таблиц поля «СпрНоменклатура.Ссылка» и «ПродажиОбороты.ВыручкаОборот»:
Перейдем на закладку «Связи» и увидим, что конструктор уже создал связь между двумя выбранными таблицами - значение изменения регистра «Номенклатура» должно быть равно ссылке на элемент справочника «Номенклатура».
Единственное, что нам останется сделать, это сбросить флаг «Все» у таблицы регистра и установить его у таблицы справочника.
Установка флага «Все» у таблицы справочника будет означать, что из справочника будут выбраны все элементы и этим элементам будет поставлено в соответствие значение оборота выручки из регистра. Таким образом, в результате запроса будут присутствовать все услуги, и для некоторых из них будут указаны обороты выручки. Для тех услуг, которые не оказывались в выбранном периоде, не будет указано ничего.
Перейдем на закладку «Условия» и зададим условия выбора элементов из справочника «Номенклатура». При задании условий выбора мы снова будем использовать параметры запроса. Первым условием должно быть то, что выбранный элемент не является группой (для этого следует переключиться в режим «Произвольное условие»).
Вторым условием должно быть то, что выбранный элемент является услугой (это - «Простое условие»):
1. СпрНоменклатура.ЭтоГруппа = ЛОЖЬ
2. СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
В дальнейшем, перед выполнением запроса, мы передадим в параметр «ВидНоменклатуры» - соответствующее значение перечисления.
Перейдем на закладку «Объединения/Псевдонимы» и укажем, что представление элемента справочника будет иметь псевдоним «Услуга», а поле регистра будет иметь псевдоним «Выручка»:
Перейдем на закладку «Порядок» и укажем, что результат запроса должен быть отсортирован по убыванию значения поля «Выручка».
На закладке «Итоги» определим, что нужно выводить общие итоги; и они должны представлять собой сумму значений поля «Выручка»:
На закладке «Отчет» сбросим флаг «Использовать построитель отчета».
Теперь перейдем на закладку «Выходная форма». Укажем, что параметры «ДатаОкончания» и «ДатаНачала» будут редактироваться в форме в полях ввода с типом «Дата». Для параметра «ВидНоменклатуры» мы наоборот снимем признак редактирования в форме:
Нажмем «ОК». Платформа сформирует макет и форму отчета. Откроем модуль формы и найдем в нем процедуру «РейтингУслуг».
В этой процедуре, в той части, где выполняется установка параметров запроса, определим значение параметра «ВидНоменклатуры» (исправления выделены жирным шрифтом):
…
Запрос.Текст =
"ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Услуга,
СпрНоменклатура.Представление КАК Представление,
ПродажиОбороты.ВыручкаОборот КАК Выручка
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания,,)
КАК ПродажиОбороты
ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка
ГДЕ
(СпрНоменклатура.ЭтоГрушта = Ложь) И СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
УПОРЯДОЧИТЬ ПО
Выручка УБЫВ
ИТОГИ СУММА(Выручка) ПО
ОБЩИЕ";
Запрос.УстановитьПараметр("ВидНоменклатуры", Перечисления.ВидыНомснклатуры.Услуга);
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
…
Теперь рассмотрим текст запроса, сформированный конструктором:
…
Запрос.Текст =
"ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Услуга,
СпрНоменклатура.Представление КАК Представление,
ПродажиОбороты.ВыручкаОборот КАК Выручка
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания,,)
КАК ПродажиОбороты
ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка
ГДЕ
(СпрНоменклатура.ЭтоГрушта = Ложь) И СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
УПОРЯДОЧИТЬ ПО
Выручка УБЫВ
ИТОГИ СУММА(Выручка) ПО
ОБЩИЕ";
…
Сначала, как обычно, идет часть описания запроса и в ней есть новые для нас конструкции.
При описании источников запроса (после ключевого слова ИЗ), использована возможность определения нескольких источников запроса:
…
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания,,)
КАК ПродажиОбороты
ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка
…
В данном случае выбираются записи из двух источников: «СпрНоменклатура» и «ПродажиОбороты», причем ключевым предложением «ЛЕВОЕ СОЕДИНЕНИЕ... ПО» описан способ, которым будут скомбинированы между собой записи этих двух источников.
«ЛЕВОЕ СОЕДИНЕНИЕ» означает, что в результат запроса надо включить комбинации записей из обоих источников, которые соответствуют указанному после ключевого слова «ПО» условию. Кроме этого, в результат запроса надо включить еще и записи из первого (указанного слева от слова «СОЕДИНЕНИЕ») источника, для которых не найдено соответствующих условию записей из второго источника.
В описании первого источника и условия соединения нет для нас ничего нового, а вот при описании второго источника, используется возможность задания параметров виртуальной таблицы запроса:
…
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания,,)
…
Первым параметром передается начало периода расчета итогов, вторым — конец периода. В результате исходная таблица будет содержать только обороты, рассчитанные в переданном периоде. Здесь всегда следует помнить, что если мы передаем в качестве этих параметров дату (а в нашем случае так и будет), то дата содержит и время с точностью до секунды.
Если заранее известно, что пользователя не будут интересовать результаты работы отчета в периодах, указанных с точностью до секунд, то следует учесть следующую особенность: по умолчанию время в дате установлено в 00:00:00. Поэтому, если не предпринять специальных мер, получится, что когда пользователь задаст период отчета с 01.03.20__ г. по 31.03.20__ г., итоги регистра будут рассчитаны с начала дня 01.03.20__ г. 00:00:00 по начало дня 31.03.20__ г. 00:00:00. Таким образом, данные за 31 число, отличные от начала дня, в расчет не войдут, что сильно удивит пользователя.
Для того чтобы исключить эту ситуацию, следует сделать две вещи.
Во-первых, в форме отчета ограничить пользователя в возможностях ввода даты начала и даты окончания, установив для соответствующих полей ввода состав даты как «Дата»:
Во-вторых, при передаче параметров использовать встроенную функцию КонецДня(). Для этого вернемся в модуль формы отчета и внесем необходимые изменения (добавления выделены жирным шрифтом):
Процедура ДействияФормыРейтингУслугСформировать(Кнопка)
//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА(РейтингУслуг)
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора,
// внесенные вручную изменения будут утеряны!!!
ТабДок = ЭлементыФормы.ТабличноеПоле;
РейтингУслуг(ТабДок, Неопределено, ДатаНачала, КонецДня(ДатаОкончания));
//}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА
КонецПроцедуры
Продолжим рассматривать текст запроса. В части описания запроса есть еще одна новая для нас конструкция - задание условий отбора данных из исходных таблиц:
…
"ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Услуга,
СпрНоменклатура.Представление КАК Представление,
ПродажиОбороты.ВыручкаОборот КАК Выручка
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания,,)
КАК ПродажиОбороты
ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка
ГДЕ
(СпрНоменклатура.ЭтоГруппа = Ложь) И СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
…
Условию отбора всегда предшествует ключевое слово «ГДЕ». После него описывается само условие. Обратите внимание, что поля исходных таблиц, на которые накладывается условие, могут и не входить в список выборки (как в нашем случае). Кроме того, в нашем условии использован параметр запроса «ВидНоменклатуры».
Далее в запросе следует часть упорядочивания результатов, а за ней - новая для нас часть, которая не встречалась ранее - описание итогов:
…
ИТОГИ СУММА(Выручка) ПО
ОБЩИЕ";
…
Она всегда начинается с ключевого слова «ИТОГИ», за которым следует описание того, какие итоги будут присутствовать в результате запроса. Сразу после слова «ИТОГИ» описываются агрегатные функции, которые необходимо рассчитывать в итогах. В нашем случае будет рассчитываться сумма по полю «Выручка». Затем следует ключевое слово «ПО», после которого описываются группировки, в которых должны быть рассчитаны итоги. В нашем случае они отсутствуют, и используется только ключевое слово «ОБЩИЕ», которое указывает на то, что итоги будут рассчитаны по всей таблице в целом.
Теперь, когда мы закончили знакомиться с текстом запроса, запустим 1С:Предприятие в режиме отладки и посмотрим, как работает наш отчет.
Зададим период отчета с 01.02.20__ г. по 28.02.20__ г. Результат будет выглядеть следующим образом:
Таким образом, на примере этого отчета мы продемонстрировали, как отбирать данные в некотором периоде, как задавать параметры запроса и как использовать в запросе данные из нескольких таблиц и включать в результат запроса все данные одного из источников.
Отчет ВыручкаМастеров
Отчет «Выручка мастеров» будет содержать информацию о том, какая выручка была получена ООО «Мастер» благодаря работе каждого из мастеров, с детализацией по всем дням в выбранном периоде и разворотом по клиентам, обслуженным в каждый из дней. На примере этого отчета мы проиллюстрируем, как строить многоуровневые группировки в запросе, как обходить все даты в выбранном периоде и как управлять состоянием группировок в табличном документе.
Создадим новый объект конфигурации Отчет «ВыручкаМастеров». Перейдем на закладку «Макет» и запустим конструктор выходной формы.
Выберем виртуальную таблицу регистра накопления «Продажи.Обороты». Зададим для нее значения параметров «НачалоПериода», «КонецПериода» и «Периодичность»:
После этого выберем из таблицы следующие поля:
«ПродажиОбороты.Мастер»,
«ПродажиОбороты.Период»,
«ПродажиОбороты.Клиент»,
«ПродажиОбороты.ВыручкаОборот»:
Теперь перейдем на закладку «Объединения/Псевдонимы» и зададим псевдоним «Выручка» для поля «ПродажиОбороты.ВыручкаОборот»:
На закладке «Порядок» определим, что результат запроса будет отсортирован по возрастанию значения поля «Период» и на закладке «Итоги» зададим получение общих итогов и промежуточных итогов по полям «Мастер» и «Период»:
На закладке «Отчет» сбросим флаг «Использовать построитель отчета».
На закладке «Выходная форма» отметим, что тип параметров «ДатаНачала» и «ДатаОкончания» будет Дата. Нажмем «ОК».
Сразу, как и в предыдущем отчете, определим состав даты для полей ввода, расположенных в форме, и затем в вызове процедуры «ВыручкаМастеров» уточним передачу последнего параметра при помощи функции КонецДня():
Процедура ДействияФормыВыручкаМастеровСформировать(Кнопка)
//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА
//(ВыручкаМастеров)
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора,
// внесенные вручную изменения будут утеряны!!!
ТабДок = ЭлементыФормы.ТабличноеПоле;
ВыручкаМастеров(ТабДок, ДатаНачала, КонецДня(ДатаОкончания));
//}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА
КонецПроцедуры
Теперь обратимся к процедуре «ВыручкаМастеров» и в первую очередь рассмотрим текст запроса, сформированный конструктором:
Запрос.Текст =
"ВЫБРАТЬ
ПродажиОбороты.Мастер КАК Мастер,
ПродажиОбороты.Мастер.Представление,
ПродажиОбороты.Период КАК Период,
ПродажиОбороты.Клиент,
ПродажиОбороты.Клиент.Представление,
ПродажиОбороты.ВыручкаОборот КАК Выручка
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)
КАК ПродажиОбороты
УПОРЯДОЧИТЬ ПО
Период
ИТОГИ СУММА(Выручка) ПО
ОБЩИЕ,
Мастер,
Период";
В части описания запроса обратите внимание, что у источника данных кроме задания начала и окончания периода расчета итогов задана периодичность выбираемых данных - «День»:
…
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)
КАК ПродажиОбороты
…
Именно благодаря этому у нас появляется возможность описать среди выбранных полей поле «Период».
Далее в тексте запроса следует известная нам часть упорядочивания результатов, и в следующей части - описание итогов - мы видим новые для нас строки:
…
ИТОГИ СУММА(Выручка) ПО
ОБЩИЕ,
Мастер,
Период";
…
Помимо общих итогов, в нашем запросе будут рассчитаны промежуточные итоги по полям «Мастер» и «Период».
Теперь, чтобы наглядно продемонстрировать смысл наших дальнейших действий, запустите 1С:Предприятие в режиме отладки и посмотрите на результат работы отчета «Выручка мастеров» за период с 01.02.20__ г. по 28.02.20__ г.:
Если вы помните, в начале раздела мы говорили, что этот отчет должен показывать данные с детализацией по всем дням в выбранном периоде. У нас же отображаются только те дни, для которых существуют ненулевые записи в таблице регистра накопления. Поэтому сейчас мы займемся тем, что изменим текст программы таким образом, чтобы в отчет попадала каждая дата из указанного периода.
Вернемся к модулю отчета «ВыручкаМастеров» и в части описания итогов запроса уточним, каким образом должны рассчитываться итоги по полю «Период»:
Запрос.Текст =
"ВЫБРАТЬ
ПродажиОбороты.Мастер КАК Мастер,
ПродажиОбороты.Мастер.Представление,
ПродажиОбороты.Период КАК Период,
ПродажиОбороты.Клиент,
ПродажиОбороты.Клиент.Представление,
ПродажиОбороты.ВыручкаОборот КАК Выручка
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)
КАК ПродажиОбороты
УПОРЯДОЧИТЬ ПО
Период
ИТОГИ СУММА(Выручка) ПО
ОБЩИЕ,
Мастер,
Период ПЕРИОДАМИ(День, &ДатаНачала, &ДатаОкончания)";
…
Такая запись говорит о том, что итоги должны быть рассчитаны периодами равными дню, в интервале дат, задаваемом параметрами «ДатаНачала» и «ДатаОкончания».
И для того, чтобы все эти итоги попали в итоговый табличный документ, нам нужно будет уточнить порядок вывода итогов в выборке результата запроса:
…
ВыборкаМастер = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаМастер.Следующий() Цикл
ОбластьМастер.Параметры.Заполнить(ВыборкаМастер);
ТабДок.Вывести(ОбластьМастер, ВыборкаМастер.Уровень());
ВыборкаПериод = ВыборкаМастер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все");
Пока ВыборкаПериод.Следующий() Цикл
ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);
ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень());
ВыборкаДетали = ВыборкаПериод.Выбрать();
Пока ВыборкаДетали.Следуюший() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;
КонецЦикла;
КонецЦикла;
…
Смысл внесенных нами уточнений заключается в том, что теперь при формировании выборки по группировке «Период» будут выбираться все имеющиеся значения группировок.
Запустим 1С:Предприятие в режиме отладки и выполним отчет «ВыручкаМастеров» за период с 01.02.20__ г. по 28.02.20__ г.
Таким образом, результат отчета будет содержать по 32 строки дат для каждого сотрудника.
Очевидно, что такой внешний вид отчета абсолютно «нечитабелен», поэтому мы снова вернемся к модулю отчета и внесем небольшие уточнения в алгоритм вывода областей табличного документа:
…
Пока ВыборкаМастер.Следующий() Цикл
ОбластьМастер.Параметры.Заполнить(ВыборкаМастер);
ТабДок.Вывести(ОбластьМастер, ВыборкаМастер.Уровень());
ВыборкаПериод = ВыборкаМастер.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все");
Пока ВыборкаПериод.Следующий() Цикл
ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);
ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень(),, Ложь);
ВыборкаДетали = ВыборкаПериод.Выбрать();
Пока ВыборкаДетали.Следуюший() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень(),, Ложь);
КонецЦикла;
КонецЦикла;
КонецЦикла;
…
Смысл внесенных нами изменений заключается в том, что при выводе областей детальных записей и периода, мы сворачиваем группировки, которые по умолчанию выводятся развернутыми.
Запустим 1С:Предприятие в режиме отладки и снова выполним отчет «ВыручкаМастеров».
На этот раз результат выглядит гораздо лучше:
Итак, на примере этого отчета мы продемонстрировали, как строить многоуровневые группировки в запросе, как обходить все даты в выбранном периоде и как управлять состоянием группировок в табличном документе.
Отчет ПереченьУслуг
Отчет «Перечень услуг» будет содержать информацию о том, какие услуги и по какой цене оказывает ООО «Мастер». На его примере мы познакомимся с возможностью получения последних значений из периодического регистра сведений и вывода иерархических справочников.
Создадим новый объект конфигурации Отчет «ПереченьУслуг». Перейдем на закладку «Макеты» и вызовем конструктов выходной формы.
Выберем объектную (ссылочную) таблицу справочника «Номенклатура» и виртуальную таблицу регистра сведений «Цены.СрезПоследних». Для того чтобы исключить неоднозначность имен в запросе, переименуем таблицу «Номенклатура» в «СпрНоменклатура».
Вызовем диалог ввода параметров виртуальной таблицы «ЦеныСрезПоследних» и укажем, что период будет передан в параметре «ДатаОтчета».
Затем выберем из таблиц следующие поля:
«СпрНоменклатура.Родитель»,
«СпрНоменклатура.Ссылка»,
«ЦеныСрезПоследних.Цена»:
Перейдем на закладку «Связи» и сбросим флаг «Все» у таблицы регистра и установим его у таблицы справочника.
На закладке «Условия» зададим условие выбора элементов справочника «Номенклатура» - выбираемые элементы должны соответствовать виду номенклатуры переданному в параметре запроса «ВидНоменклатуры»:
На закладке «Объединения/Псевдонимы» укажем, что поле «Родитель» будет иметь псевдоним «ГруппаУслуг», а поле «Ссылка» - «Услуга»:
Перейдем на закладку «Итоги» и укажем, что группировка будет производиться по полю «ГруппаУслуг» с типом итогов «Элементы и иерархия», а значения суммируемых полей задавать не станем:
На закладке «Отчет» сбросим флаг «Использовать построитель отчета».
На закладке «Выходная форма» отметим, что тип параметра «ДатаОтчета» будет Дата, а параметр «ВидНоменклатуры» в форме редактироваться не будет.
Нажмем «ОК».
Откроем модуль формы и в процедуре «ПереченьУслуг» определим значение параметра запроса:
…
Запрос.УстановитьПараметр("ВидНоменклатуры", Перечисления.ВидыНоменклатуры.Услуга);
Запрос.УстановитьПараметр("ДатаОтчета",ДатаОтчета);
…
Теперь рассмотрим текст запроса, сформированный конструктором:
…
Запрос.Текст =
"ВЫБРАТЬ
СпрНоменклатура.Родитель КАК ГруппаУслуг,
СпрНоменклатура.Родитель.Представление,
СпрНоменклатура.Ссылка КАК Услуга,
СпрНоменклатура.Представление,
ЦеныСрезПоследних.Цена
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаОтчета,)
КАК ЦеныСрезПоследних
ПО ЦеныСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка
ГДЕ
СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
ИТОГИ ПО
ГруппаУслуг ИЕРАРХИЯ";
…
Практически все конструкции, использованные в этом запросе, нам уже известны, за исключением ключевого слова ИЕРАРХИЯ, использованного в части описания итогов. Это ключевое слово позволяет рассчитывать итоги по иерархии справочника, однако поскольку в нашем случае какие либо итоги в отчете не нужны, мы использовали эту возможность для создания группировок по иерархии справочника «Номенклатура».
Теперь запустим 1С:Предприятие в режиме отладки и, прежде всего, откроем периодический регистр «Цены».
Добавим в него еще одно значение для услуги «Диагностика» - новая цена услуги на 01.03.20__ г. (это позволит нам протестировать отчет):
Теперь выполним отчет «Перечень услуг» по состоянию на 28.02.20__ г.:
Наш отчет правильно отражает цену услуги «Диагностика» на 28.02. – 200 руб.
Еще раз выполним отчет, но теперь уже на другую дату -01.03.20__ г.:
Как видите, показана новая цена услуги «Диагностика» - 350 руб.
Внимание! Если у вас не получилось создать этот отчет с новой суммой, то попробуйте сформировать ее на 02.03.20__ г. Теперь видите 350 руб.? А теперь подумайте, что надо еще прописать в коде, что бы отображалась сумма 350 руб. при формировании отчета на 01.03.20__ г.
Таким образом, на примере этого отчета мы показали, как при помощи запроса можно получить последние значения из периодического регистра сведений и как вывести группировки по иерархии справочника.
Отчет РейтингКлиентов
Отчет «Рейтинг клиентов» будет показывать, каков доход от оказания услуг каждому из клиентов за все время работы ООО «Мастер». На его примере мы продемонстрируем возможность использования диаграммы для отображения результата запроса.
Здесь стоит сделать оговорку о том что, используя построитель отчета, можно вывести данные в диаграмму исключительно с помощью конструктора выходной формы. Однако для того, чтобы понимать, как устроена диаграмма, и каким образом можно заполнить ее данными, внимательно прочтите теорию к лабораторной работе.
Создание отчета РейтингКлиентов
Создадим в конфигураторе новый объект конфигурации Отчет «РейтингКлиентов». Затем создадим основную форму отчета и расположим на ней поле выбора с именем «ПолеВыбора», подписью «Тип диаграммы:» и подсказкой «Выбор типа диаграммы» (Форма | Вставить элемент управления...):
Затем разместим под ним диаграмму с именем «Диаграмма». Изменим размеры областей диаграммы, и зададим текст области заголовка - «Рейтинг клиентов»:
В модуле формы создадим процедуру «Сформировать» с заготовкой для текста запроса:
Установим курсор в предпоследней строке, перед точкой с запятой и вызовем конструктор запроса (Текст | Конструктор запроса...). Выберем виртуальную таблицу регистра накопления «Продажи.Обороты» и из нее одно поле «ПродажиОбороты.Клиент.Представление».
Затем добавим новое поле (иконка «Добавить» в командной панели над списком полей) и при помощи построителя выражений определим его как разность между выручкой и стоимостью:
В результате список выбранных полей будет иметь следующий вид:
На закладке «Объединения/Псевдонимы» укажем, что поле «ПродажиОбороты.Клиент.Представление» будет иметь псевдоним «Клиент», а вычисляемое поле - псевдоним «Доход»:
На закладке «Порядок» укажем, что строки результата нужно упорядочивать по убыванию значения поля «Доход». Нажмем «ОК» и посмотрим, какой текст сформировал конструктор запроса:
По сравнению с предыдущими отчетами, текст запроса довольно прост; единственным интересным местом, на которое следует обратить внимание, является поле «Доход», являющееся результатом вычисления выражения:
ПродажиОбороты.ВыручкаОборот - ПродажиОбороты.СтоимостьОборот КАК Доход
Теперь обработаем результат запроса таким образом, чтобы данные отобразились в диаграмме, расположенной в форме отчета.
Добавим в процедуру следующий текст (добавленный текст выделен жирным шрифтом):
Сначала, с помощью метода «Выполнить()» мы получаем результат запроса. Затем методом «Выбрать()» получаем выборку записей из результата запроса в переменной «ВыборкаРезультатаЗапроса».
Перед началом заполнения мы отключаем обновление и автотранспонирование диаграммы для того, чтобы заполнение данными выполнялось быстрее.
После этого добавляем в диаграмму единственную точку.
Затем мы организуем цикл по выборке из результата запроса и в цикле добавляем серии в нашу диаграмму. Каждому клиенту будет соответствовать своя серия. После этого мы устанавливаем значение точки, передавая методу «УстановитьЗначение()» точку, серию, для которой устанавливается значение в этой точке, и само значение.
После заполнения диаграммы данными мы включаем свойство «Обновление», чтобы новое состояние диаграммы было отображено, и «АвтоТранспонирование» для того, чтобы различные типы диаграмм, которые будут выбраны в поле выбора, отображались правильно.
Следует сделать несколько замечаний по оптимизации заполнения диаграммы данными.
Во-первых, перед началом заполнения диаграммы данными следует отключать обновление диаграммы (свойство диаграммы «Обновление»). Это значительно ускорит процесс заполнения, поскольку при включенном обновлении диаграмма будет выполнять пересчет и отрисовку автоматически. После того, как диаграмма будет заполнена данными, обновление диаграммы нужно снова включить.
Во-вторых, перед началом заполнения диаграммы данными следует также отключать автотранспонирование диаграммы (свойство диаграммы «АвтоТранспонирование»).
Автотранспонирование позволяет диаграмме анализировать данные и выбирать наиболее подходящее представление в зависимости от заданного типа диаграммы. Например, круговая диаграмма отображает значения нескольких серий в одной точке, а обычный график - как раз наоборот - значения одной серии в нескольких точках. Обратите внимание, что автотранспонирование диаграммы доступно только в режиме «ручного» заполнения данными. При использовании источника данных это свойство недоступно. После того, как диаграмма будет заполнена данными, автотранспонирование диаграммы можно снова включить, если в этом есть необходимость.
Теперь создадим обработчик события формы «ПриОткрытии», и добавим в него установку значения поля выбора и типа диаграммы, и вызов нашей процедуры «Сформировать»:
В теле модуля формы опишем заполнение списка выбора для поля выбора:
И в заключение, создадим обработчик события поля выбора «При изменении» (только разместить этот обработчик следует до списка выбора в теле модуля, иначе будет ошибка), и выполним в нем установку типа диаграммы:
Запустим 1С:Предприятие в режиме отладки и откроем отчет «РейтингКлиентов». Обратите внимание, что при наведении курсора на столбец гистограммы появляется подсказка:
Теперь изменим тип диаграммы на «Круговая объемная»:
Только что мы рассмотрели с вами общий случай заполнения диаграммы данными. Однако если исходные данные могут быть получены в виде таблицы значений или области ячеек табличного документа, существует более простой и эффективный способ заполнения диаграммы данными, используя свойство диаграммы - «ИсточникДанных».
Вернемся в модуль формы отчета «РейтингКлиентов» и все строки, которыми мы добавляли в диаграмму данные:
заменим
одной строкой:
Дело в том, что метод «Выгрузить()» по умолчанию выгружает результат запроса в таблицу значений, которую мы и устанавливаем диаграмме в качестве источника данных. Причем структура получаемой таблицы значений как раз соответствует расположению серий в строках диаграммы, принятому по умолчанию.
Запустите 1С:Предприятие в режиме отладки и проверьте работу отчета.
Обратите внимание на то, что некоторые типы диаграмм выглядят «некрасиво» (график) или не отображаются совсем (изометрическая непрерывная, изометрическая лента). Это связано с тем, что при использовании источника данных нет возможности использовать свойство диаграммы «АвтоТранспонирование» и нужно обрабатывать транспонирование диаграммы «вручную» (используя свойство «СерииВСтроках»).
Таким образом, на примере этого отчета мы продемонстрировали, как создавать запросы, используя конструктор запросов, и как использовать диаграмму для визуализации результата запроса.
Оформить отчет по лабораторной работе и ответить на контрольные вопросы.
Отчет оформляется стандартно, с обязательным указанием номера лабораторной работы, ее темы, сведений о лице, выполнившем лабораторную работу (ФИО, № группы), должен быть указан порядок выполнения работы (последовательность действий, какие объекты были созданы, их роль и обоснование необходимости создания), который должен подтверждаться необходимыми скриншотами и/или алгоритмами.