Цель лекции: освоить технологию разработки
Для создания
Мы будем разрабатывать
Создадим новый объект .
(рис 8.1) Начало создания отчетаНажмем на кнопку ), внешне напоминающее окно Конструктора запросов, но с дополнительными вкладками. Основная задача, которая сейчас стоит перед нами - создать с помощью Конструктора запрос, который будет получать нужные нам данные.
(рис 8.2) Создание запросаДанные для получения информации об остатках материалов мы будем выбирать из регистра ОстаткиМатериалов, в частности, из виртуальной таблицы ОстаткиМатериалов.Остатки. Это означает, что если мы хотим вводить в запрос какие-либо условия отбора данных, делать это нужно в параметрах виртуальной таблицы.
Мы отобрали следующие поля виртуальной таблицы:
Напомним, нам нужны условия, которые позволят отобрать остатки:
Для того, чтобы задать параметры виртуальной таблицы, выделим ее в области .
(рис 8.3) Окно настройки параметров виртуальной таблицыВ поле Период введем следующий текст: Дата. Дата - это имя параметра, который будет устанавливать пользователь перед выполнением запроса.
В поле ) введем следующий текст:
ЦентрОтветственности = Ответственный
(рис 8.4) Ввод произвольного выражения для поля УсловиеЕго можно вводить как полностью вручную, так и выбирая доступные поля таблицы и функции из списков в верхней части окна. Здесь переменная Ответственный так же будет устанавливаться пользователем перед выполнением запроса и передаваться в запрос.
Вот как, в итоге, выглядит окно настройки параметров виртуальной таблицы, рис 8.5.
(рис 8.5) Окно настройки параметров виртуальной таблицыНажмем кнопку ОК, если все введено верно - система не выдаст никаких предупреждающих сообщений и можно будет переходить к дальнейшей работе над запросом.
Обратите внимание на вычисляемые функции (f(x) ПРЕДСТАВЛЕНИЕ…), которые автоматически добавляются в раздел Поля при добавлении туда полей, соответствующих измерениям регистра. Эти функции предназначены для получения строкового представления данных, они будут использоваться для вывода строковых представлений в
Перейдем на вкладку .
(рис 8.6) Конструктор выходной формы, вкладка ИтогиНа этой вкладке укажем в качестве группировочного поля ЦентрОтветственности. Это улучшает наглядность
Перейдем на вкладку . Построитель
(рис 8.7) Конструктор выходной формы, вкладка ОтчетПереместимся на вкладку . Параметру Дата установим тип Дата, параметру Ответственный - СправочникСсылка.Сотрудники. Это позволит нам выбирать дату из календаря, а сотрудника, по которому строится
(рис 8.8) Конструктор выходной формы, вкладка Выходная формаРабота с Конструктором завершена, нажмем на кнопку .
(рис 8.9) Результаты работы Конструктора выходной формыКонструктор создал, во-первых - макет, который будет использоваться для формирования печатной формы
Запрос формируется по нажатию на кнопку Сформировать.
Конструктор, помимо визуальных элементов, генерирует программный код. Его можно найти в модуле выходной формы, рис 8.10.
(рис 8.10) Процедуры, сгенерированные Конструктором выходной формыА именно, здесь мы видим две процедуры. Одна из них - ДействияФормыОстаткиМатериаловСформировать() - это обработчик события нажатия на кнопку. Вторая - ОстаткиМатериалов() отвечает за формирование
Процедура ДействияФормыОстаткиМатериаловСформировать(Кнопка) ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; ОстаткиМатериалов(ТабДок, Дата, Ответственный); КонецПроцедуры
В этой процедуре мы сначала присваиваем переменной ТабДок ссылку на поле табличного документа, расположенное на форме и предназначенное для вывода
Далее, мы вызываем процедуру ОстаткиМатериалов(), передавая ей в качестве параметров ссылку на поле табличного документа, а так же - два параметра, которые мы будем использовать при формировании
Прежде чем рассматривать процедуру ОстаткиМатериалов(), сделаем в ней одно исправление. Оно будет касаться приведения даты, переданной в параметре Дата к концу дня. Дело в том, что если этого не сделать, то в
Приведение даты к концу дня можно выполнить с помощью функции КонецДня(). Эта функция возвращает дату и время конца дня для переданной даты.
Найдите такую строку в процедуре ОстаткиМатериалов():
Запрос.УстановитьПараметр("Дата", Дата);
Отредактируйте ее, чтобы она стала выглядеть так:
Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
Теперь, прежде чем приступить к разбору этой процедуры, давайте проверим, как работает созданный
(рис 8.11) Отчет Остатки материаловЗдесь видно, что
(рис 8.12) Отчет Остатки материалов Теперь переходим к рассмотрению процедуры, ответственной за формирование этого
Процедура ОстаткиМатериалов(ТабДок, Дата, Ответственный) Экспорт
Макет = ОтчетОбъект.ПолучитьМакет("ОстаткиМатериалов");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиМатериаловОстатки.ЦентрОтветственности КАК ЦентрОтветственности,
| ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.ЦентрОтветственности),
| ОстаткиМатериаловОстатки.Номенклатура,
| ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.Номенклатура),
| ОстаткиМатериаловОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиМатериалов.Остатки(Дата, ЦентрОтветственности = Ответственный)
КАК ОстаткиМатериаловОстатки
|ИТОГИ ПО
| ЦентрОтветственности";
Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
Запрос.УстановитьПараметр("Ответственный", Ответственный);
Результат = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьЦентрОтветственности = Макет.ПолучитьОбласть("ЦентрОтветственности");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
ВыборкаЦентрОтветственности = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаЦентрОтветственности.Следующий() Цикл
ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветственности);
ТабДок.Вывести(ОбластьЦентрОтветственности, ВыборкаЦентрОтветственности.Уровень());
ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
КонецПроцедуры
Приступим к разбору тех частей этой процедуры, которые являются для вас новыми. Так, обратите внимание на то, что каждая новая строка текста запроса начинается с вертикальной черты. Если попытаться ввести текст запроса в код модуля, не разбив его таким образом - система выдаст ошибку.
Обратите внимание на блок ИЗ в теле текста запроса:
|ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки(Дата, ЦентрОтветственности = Ответственный) КАК ОстаткиМатериаловОстатки
Именно здесь задаются параметры виртуальной таблицы - Дата и Ответственный. Причем, просто задать параметры и даже передать их в процедуру, содержащую текст запроса, недостаточно для того, чтобы они были переданы в запрос. Следующими командами параметры, переданные в процедуру ОстаткиМатериалов() передаются в запрос.
Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
Запрос.УстановитьПараметр("Ответственный", Ответственный);
Обратите внимание на то, что параметры в запрос передают после того, как в свойство запроса Текст записан текст запроса, но до выполнения запроса.
Значительная часть кода процедуры отведена под нужды формирования печатной формы
Обратите внимание на следующие команды, одна из которых предшествует командам вывода данных в табличное поле, а другая находится после завершения вывода, но перед окончательным отображением таблицы:
ТабДок.НачатьАвтогруппировкуСтрок(); //Команды вывода данных в табличный документ ТабДок.ЗакончитьАвтогруппировкуСтрок();
После первой команды вывод в поле становится возможен с использованием указания уровней в команде Вывести. Вторая команда, соответственно, заканчивает работу в таком режиме.
Уровень записи - это число, которое представляет собой уровень этой записи в иерархии и группировках.
ВыборкаЦентрОтветственности = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Эта команда получает выборку результатов запроса, обходя запрос по группировкам. В дальнейшем мы будем получать данные именно из переменной ВыборкаЦентрОтветственности.
Пока ВыборкаЦентрОтветственности.Следующий() Цикл
Эта команда открывает цикл обхода выборки. Метод Следующий() возвращает Истина, если в выборке еще есть данные, первый его вызов позиционируется на первый элемент выборки. После того, как этот метод возвратит Ложь - это будет означать, что предыдущий вызов метода отработал для последней строки выборки. Первая строка выборки (за счет использования выше команды Выбрать(ОбходРезультатЗапроса.ПоГруппировкам) ) получает первую группировку - она представляет собой данные об ответственном сотруднике, по которому будут сгруппированы строки с информацией о номенклатуре.
ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветственности); ТабДок.Вывести(ОбластьЦентрОтветственности, ВыборкаЦентрОтветственности.Уровень());
С помощью этих команд заполняются параметры области ОбластьЦентрОтветственности, область выводится в табличный документ с использованием информации об уровне записи. В данном случае мы имеем дело с выводом группировки верхнего уровня, метод Уровень() возвращает 0.
ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();
Этой командой мы получаем из общей выборки детальные данные о номенклатуре и будем выводить их в ВыборкаДетали.
Пока ВыборкаДетали.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень()); КонецЦикла;
Этим внутренним циклом, который действует аналогично внешнему, мы заполняем те части Уровень() в данном случае возвращает 1.
В этой лекции мы познакомились с основами построения запросов. Конечно же, наш разговор о запросах не завершен. Мы продолжим его в следующих частях данного курса. А сейчас пришло время браться за выполнение практического задания. Для того, чтобы свериться, вы можете так же скачать файл выгрузки информационной базы (1Cv8.DT).
Цель лекции: освоить технологию разработки
Для создания
Мы будем разрабатывать
Создадим новый объект .
(рис 8.1) Начало создания отчетаНажмем на кнопку ), внешне напоминающее окно Конструктора запросов, но с дополнительными вкладками. Основная задача, которая сейчас стоит перед нами - создать с помощью Конструктора запрос, который будет получать нужные нам данные.
(рис 8.2) Создание запросаДанные для получения информации об остатках материалов мы будем выбирать из регистра ОстаткиМатериалов, в частности, из виртуальной таблицы ОстаткиМатериалов.Остатки. Это означает, что если мы хотим вводить в запрос какие-либо условия отбора данных, делать это нужно в параметрах виртуальной таблицы.
Мы отобрали следующие поля виртуальной таблицы:
Напомним, нам нужны условия, которые позволят отобрать остатки:
Для того, чтобы задать параметры виртуальной таблицы, выделим ее в области .
(рис 8.3) Окно настройки параметров виртуальной таблицыВ поле Период введем следующий текст: Дата. Дата - это имя параметра, который будет устанавливать пользователь перед выполнением запроса.
В поле ) введем следующий текст:
ЦентрОтветственности = Ответственный
(рис 8.4) Ввод произвольного выражения для поля УсловиеЕго можно вводить как полностью вручную, так и выбирая доступные поля таблицы и функции из списков в верхней части окна. Здесь переменная Ответственный так же будет устанавливаться пользователем перед выполнением запроса и передаваться в запрос.
Вот как, в итоге, выглядит окно настройки параметров виртуальной таблицы, рис 8.5.
(рис 8.5) Окно настройки параметров виртуальной таблицыНажмем кнопку ОК, если все введено верно - система не выдаст никаких предупреждающих сообщений и можно будет переходить к дальнейшей работе над запросом.
Обратите внимание на вычисляемые функции (f(x) ПРЕДСТАВЛЕНИЕ…), которые автоматически добавляются в раздел Поля при добавлении туда полей, соответствующих измерениям регистра. Эти функции предназначены для получения строкового представления данных, они будут использоваться для вывода строковых представлений в
Перейдем на вкладку .
(рис 8.6) Конструктор выходной формы, вкладка ИтогиНа этой вкладке укажем в качестве группировочного поля ЦентрОтветственности. Это улучшает наглядность
Перейдем на вкладку . Построитель
(рис 8.7) Конструктор выходной формы, вкладка ОтчетПереместимся на вкладку . Параметру Дата установим тип Дата, параметру Ответственный - СправочникСсылка.Сотрудники. Это позволит нам выбирать дату из календаря, а сотрудника, по которому строится
(рис 8.8) Конструктор выходной формы, вкладка Выходная формаРабота с Конструктором завершена, нажмем на кнопку .
(рис 8.9) Результаты работы Конструктора выходной формыКонструктор создал, во-первых - макет, который будет использоваться для формирования печатной формы
Запрос формируется по нажатию на кнопку Сформировать.
Конструктор, помимо визуальных элементов, генерирует программный код. Его можно найти в модуле выходной формы, рис 8.10.
(рис 8.10) Процедуры, сгенерированные Конструктором выходной формыА именно, здесь мы видим две процедуры. Одна из них - ДействияФормыОстаткиМатериаловСформировать() - это обработчик события нажатия на кнопку. Вторая - ОстаткиМатериалов() отвечает за формирование
Процедура ДействияФормыОстаткиМатериаловСформировать(Кнопка) ТабДок = ЭлементыФормы.ПолеТабличногоДокумента; ОстаткиМатериалов(ТабДок, Дата, Ответственный); КонецПроцедуры
В этой процедуре мы сначала присваиваем переменной ТабДок ссылку на поле табличного документа, расположенное на форме и предназначенное для вывода
Далее, мы вызываем процедуру ОстаткиМатериалов(), передавая ей в качестве параметров ссылку на поле табличного документа, а так же - два параметра, которые мы будем использовать при формировании
Прежде чем рассматривать процедуру ОстаткиМатериалов(), сделаем в ней одно исправление. Оно будет касаться приведения даты, переданной в параметре Дата к концу дня. Дело в том, что если этого не сделать, то в
Приведение даты к концу дня можно выполнить с помощью функции КонецДня(). Эта функция возвращает дату и время конца дня для переданной даты.
Найдите такую строку в процедуре ОстаткиМатериалов():
Запрос.УстановитьПараметр("Дата", Дата);
Отредактируйте ее, чтобы она стала выглядеть так:
Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
Теперь, прежде чем приступить к разбору этой процедуры, давайте проверим, как работает созданный
(рис 8.11) Отчет Остатки материаловЗдесь видно, что
(рис 8.12) Отчет Остатки материаловТеперь переходим к рассмотрению процедуры, ответственной за формирование этого
Процедура ОстаткиМатериалов(ТабДок, Дата, Ответственный) Экспорт
Макет = ОтчетОбъект.ПолучитьМакет("ОстаткиМатериалов");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиМатериаловОстатки.ЦентрОтветственности КАК ЦентрОтветственности,
| ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.ЦентрОтветственности),
| ОстаткиМатериаловОстатки.Номенклатура,
| ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.Номенклатура),
| ОстаткиМатериаловОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиМатериалов.Остатки(Дата, ЦентрОтветственности = Ответственный)
КАК ОстаткиМатериаловОстатки
|ИТОГИ ПО
| ЦентрОтветственности";
Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
Запрос.УстановитьПараметр("Ответственный", Ответственный);
Результат = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьЦентрОтветственности = Макет.ПолучитьОбласть("ЦентрОтветственности");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
ВыборкаЦентрОтветственности = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаЦентрОтветственности.Следующий() Цикл
ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветственности);
ТабДок.Вывести(ОбластьЦентрОтветственности, ВыборкаЦентрОтветственности.Уровень());
ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
КонецПроцедуры
Приступим к разбору тех частей этой процедуры, которые являются для вас новыми. Так, обратите внимание на то, что каждая новая строка текста запроса начинается с вертикальной черты. Если попытаться ввести текст запроса в код модуля, не разбив его таким образом - система выдаст ошибку.
Обратите внимание на блок ИЗ в теле текста запроса:
|ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки(Дата, ЦентрОтветственности = Ответственный) КАК ОстаткиМатериаловОстатки
Именно здесь задаются параметры виртуальной таблицы - Дата и Ответственный. Причем, просто задать параметры и даже передать их в процедуру, содержащую текст запроса, недостаточно для того, чтобы они были переданы в запрос. Следующими командами параметры, переданные в процедуру ОстаткиМатериалов() передаются в запрос.
Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
Запрос.УстановитьПараметр("Ответственный", Ответственный);
Обратите внимание на то, что параметры в запрос передают после того, как в свойство запроса Текст записан текст запроса, но до выполнения запроса.
Значительная часть кода процедуры отведена под нужды формирования печатной формы
Обратите внимание на следующие команды, одна из которых предшествует командам вывода данных в табличное поле, а другая находится после завершения вывода, но перед окончательным отображением таблицы:
ТабДок.НачатьАвтогруппировкуСтрок(); //Команды вывода данных в табличный документ ТабДок.ЗакончитьАвтогруппировкуСтрок();
После первой команды вывод в поле становится возможен с использованием указания уровней в команде Вывести. Вторая команда, соответственно, заканчивает работу в таком режиме.
Уровень записи - это число, которое представляет собой уровень этой записи в иерархии и группировках.
ВыборкаЦентрОтветственности = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Эта команда получает выборку результатов запроса, обходя запрос по группировкам. В дальнейшем мы будем получать данные именно из переменной ВыборкаЦентрОтветственности.
Пока ВыборкаЦентрОтветственности.Следующий() Цикл
Эта команда открывает цикл обхода выборки. Метод Следующий() возвращает Истина, если в выборке еще есть данные, первый его вызов позиционируется на первый элемент выборки. После того, как этот метод возвратит Ложь - это будет означать, что предыдущий вызов метода отработал для последней строки выборки. Первая строка выборки (за счет использования выше команды Выбрать(ОбходРезультатЗапроса.ПоГруппировкам) ) получает первую группировку - она представляет собой данные об ответственном сотруднике, по которому будут сгруппированы строки с информацией о номенклатуре.
ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветственности); ТабДок.Вывести(ОбластьЦентрОтветственности, ВыборкаЦентрОтветственности.Уровень());
С помощью этих команд заполняются параметры области ОбластьЦентрОтветственности, область выводится в табличный документ с использованием информации об уровне записи. В данном случае мы имеем дело с выводом группировки верхнего уровня, метод Уровень() возвращает 0.
ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();
Этой командой мы получаем из общей выборки детальные данные о номенклатуре и будем выводить их в ВыборкаДетали.
Пока ВыборкаДетали.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень()); КонецЦикла;
Этим внутренним циклом, который действует аналогично внешнему, мы заполняем те части Уровень() в данном случае возвращает 1.
В этой лекции мы познакомились с основами построения запросов. Конечно же, наш разговор о запросах не завершен. Мы продолжим его в следующих частях данного курса. А сейчас пришло время браться за выполнение практического задания. Для того, чтобы свериться, вы можете так же скачать файл выгрузки информационной базы (1Cv8.DT).
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.