- •Индивидуальное задание
- •Содержание
- •Обработка и монтаж статического и динамического информационного контента
- •Что представляет собой разработка сайтов?
- •Создание сайта
- •Фоновая картинка. Лого сайта.
- •Верстка сайта
- •Создание меню сайта
- •Главная страница
- •Второстепенные страницы
- •Тестирование сайта
- •Обработка бухгалтерской информации с использованием информационной системы «1с: Предприятие 8.3»
- •Создание справочников и плана счетов
- •Создание информационной базы данных
- •Работа с подсистемами
- •Константы. Определение, настройка свойств
- •Формы констант
- •Механизм работы формы
- •Справочник «Единицы измерения»
- •Справочник «Подразделения».
- •Справочник «Номенклатура»
- •Справочник «ФизическиеЛица»
- •Основной реквизит формы
- •Печатные формы
- •Подчиненные справочники. Форма, содержащая списки элементов двух справочников
- •Ввод документов кассовых и банковских операций
- •Документ «Поступление товаров»
- •Документ «Продажа Товаров»
- •Журналы документов
- •Учет приобретения и использования материалов и расчетов с поставщиками
- •Регистр «Остатки номенклатуры»
- •Регистр накопления «Продажи»
- •Организация бухгалтерского учета
- •Виды субконто
- •План счетов
- •Регистры бухгалтерии
- •Получение отчетных сведений
- •Работа с запросами во встроенном языке
- •Работа с конструктором запроса с выводом в табличный документ
- •Список литературы
Работа с конструктором запроса с выводом в табличный документ
Умение писать текст запроса «вручную» никогда не являлось «лишним», но удобнее использовать конструктор запросов.
Замечание.
К сожалению, в управляемом приложении в обработке «ЗнакомствоСЗапросом» нельзя пользоваться конструктором запроса. Можно им воспользоваться в этой обработке перейдя в обычный режим, но делать этого не будем.
Создадим обработку «КонструкторЗапроса» и определяем ее в подсистему «ОтчетыИОбработки».
Создадим форму обработки и в ней добавляем реквизит формы «ТабДок» типа «Табличный документ», а так же команду «ВыполнитьЗапрос» с действием «ВыполнитьЗапрос». Далее, перетаскиваем их на форму.
В модуле формы, для работы команды, пишем процедуру:
&НаКлиенте
Процедура ВыполнитьЗапрос(Команда)
ВыполнитьЗапросСервер();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗапросСервер()
КонецПроцедуры
Становимся внутри процедуры вызываемой на сервере и из контекстного меню вызываем «Конструктор запроса с обработкой результата» (рисунок 2.65).
Рисунок 2.65 Конструктор запроса с обработкой результата
Ставим тип обработки «Вывод в табличный документ» и нажимаем либо кнопку «Далее», либо закладку «Таблицы и поля».
На закладке «Таблицы и поля» конструктора можно просмотреть существующие на данный момент таблицы в системе (левая часть озаглавленная «База данных») (Рисунок 2.66).
Рисунок 2.67 Конструктор запроса
Таблицы, данные из которых будут получаться запросом, переносятся в область «Таблицы», необходимые запросу поля переносятся в область «Поля». Сделаем это как на рисунке 2.68.
Рис 2.68 Конструктор запроса
Здесь мы убрали, создаваемое по умолчанию, поле представления - «ПРЕДСТАВЛЕНИЕ (ПоступлениеТоваровТовары.Номенклатура)»
В любой момент работы с конструктором можно смотреть получаемый текст запроса. Для выполнения этой задачи необходимо нажать кнопку «Запрос», расположенную в левом нижнем углу формы конструктора (рисунок 2.69).
Рисунок 2.69 Запрос
Можно вручную отредактировать текст запроса, нажав на кнопку «Редактировать» .
Практика. Нажимаем кнопку «ОК» и проверяем нашу обработку в пользовательском режиме. Если проанализировать данные, полученные при выполнении запроса, то можно встретить «повторы» номенклатурных позиций (если у вас это не получилось, то можно скопировать и провести любой документ «ПоступлениеТоваров»).
Возвращаемся в процедуру ВыполнитьЗапросСервер() в обработке «КонструкторЗапроса» и из контекстного меню опять вызываем «Конструктор запроса с обработкой результата» .
Если требуется «свернуть» результат запроса, то для этой цели можно использовать закладку «Группировка» конструктора запроса.
При определении группировок необходимо придерживаться следующего правила: все поля выборки запроса делятся на поля, по которым производится группировка (свертка), поля вложенных таблиц (суммируемые поля относительно тех, по которым ведется группировка) и на агрегатные функции. Определим группировки (Рисунок 2.70).
Рисунок 2.70 Конструктор запроса
Если данные, получаемые запросом должны выбираться по какому-либо условию, то в этом случае может потребоваться задействовать закладку «Условия». Выберем ПоступлениеТоваровТовары.Количество=10 (Рисунок 2.71).
Рисунок 2.71 Условие конструктора запроса.
Обратите внимание на тот факт, что в случае если условие определено таким же образом как на рисунке, то запрос выполняться не будет.
Исправить ситуацию можно двумя способами:
Переопределив условие, отметив флаг «П...»;
Воспользовавшись возможностью изменения самого текста запроса (получаемого при нажатии на кнопку «Редактировать Запрос»).
Само изменение вручную будет заключаться в том, что необходимо перед числом «10» убрать символ «&». Этим символом в тексте запроса определяются параметры запроса, в которые в дальнейшем (но перед выполнением запроса) должны быть записаны какие-либо значения. Нажмем на кнопку «РедактироватьЗапрос» и правим (Рисунок 2.72).
Рисунок 2.73 Редактирование запроса
На закладке «Дополнительно» можно отметить ряд флагов (касающихся ключевого слова «Выбрать» языка запросов) и определить состав таблиц предназначенных для изменения запроса (Рисунок 2.74).
Рисунок 2.74 Дополнительные функции запроса
На закладке «Объединения/Псевдонимы» можно изменить имена полей задав «Псевдонимы», но мы этого делать не будем.
На закладке «Порядок» можно определить порядок сортировки записей в результате запроса (Рисунок 2.75).
Рисунок 2.75 Порядок сортировки записей
Обратите внимание на флаг «Автоупорядочивание», он может использоваться для упорядочивания по полям ссылочного типа.
При определении раздела «Итоги» следует быть готовым к тому, что в результате запроса появится «дополнительные» итоговые записи. Вместе с этими записями результат запроса становится иерархическим (Рисунок 2.76).
Рисунок 2.76.Итоги конструктора запроса.
Допустимо указание нескольких типов итогов:
Элементы (в выборке результата запроса присутствуют итоги по группировкам и детальные записи);
Иерархия (в выборке результата запроса в общем случае присутствуют итоговые записи по иерархии, итоговые записи по группировке, детальные записи);
Только иерархия (в выборке результата запроса в общем случае присутствуют итоговые записи по иерархии).
После нажатия на кнопку «Ок» конструктора, будет сформирован «Макет» и в модуле формы пропишется код процедуры ВыполнитьЗапросСервер():
&НаСервере
Процедура ВыполнитьЗапросСервер()
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Макет = Обработки.КонструкторЗапросов.ПолучитьМакет("Макет");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровТовары.Номенклатура КАК Номенклатура,
| СУММА(ПоступлениеТоваровТовары.Количество) КАК Количество,
| СУММА(ПоступлениеТоваровТовары.Сумма) КАК Сумма
|ИЗ
| Документ.ПоступлениеТоваров.Товары
| КАК ПоступлениеТоваровТовары
|ГДЕ
| ПоступлениеТоваровТовары.Количество > 1
|
|СГРУППИРОВАТЬ ПО
| ПоступлениеТоваровТовары.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Количество,
| Сумма УБЫВ
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма)
|ПО
| Номенклатура ИЕРАРХИЯ";
Результат = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьНоменклатураИерархия = Макет.ПолучитьОбласть("НоменклатураИерархия");
ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
Если ВыборкаНоменклатура.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
Область = ОбластьНоменклатураИерархия;
Иначе
Область = ОбластьНоменклатура;
КонецЕсли;
Область.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Вывести(Область, ВыборкаНоменклатура.Уровень());
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры