Меню

Заполнить таблицу результатом запроса 1с

Заполнить таблицу результатом запроса 1с

Создадим процедуру в обработке НоваяОбработка, с именем ПолучитьДанные выполняемая на Сервере.

Установим курсор внутри процедуры ПолучитьДанные. Запустим Конструктор запроса с обработкой результата.

Я буду использовать справочник Курсы, т.к. это единственный справочник в котором есть что считать. Выберем данные, Наименование, ДатаНачала, Стоимость, Преподаватель.

Перейдем на закладку Итоги. Установим галку Общие итоги и перенесем туда поле стоимость из левой части. В итоге у нас будет считаться сумма всех курсов по реквизиту Стоимость.

Т.к. справочник иерархический, убираем из результата запроса группы.

На закладке Условие добавим условие. Во первых установим галку на столбце П, это означает что условие произвольное. Впишем условие «Курсы.ЭтоГруппа = ЛОЖЬ».

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

Примерный результат после нажатия на OK.

Вместо комментария «Вставить обработку выборки…» вставляем:

В результате в переменной СуммаПоВсемКурсам будет хранится стоимость всех курсов.

Теперь переходим к Циклу, он перебирает все элементы запроса. Описание читаем в комментариях кода.

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

Вот обработка без ее обработки. Только у меня подвал включен уже через свойства, но это не имеет значения.

А вот результат:


Полный код:

Источник



Общая схема выполнения запросов

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

Язык запросов 1С:Предприятия 8 основан на стандартном SQL, но при этом содержит значительное количество расширений, ориентированных на финансово-экономические задачи, и значительно облегчает разработку бизнес-приложений.

Для работы с запросами в системе «1С:Предприятие 8» предусмотрено несколько специальных объектов, а именно:

  • Запрос
  • РезультатЗапроса
  • ВыборкаИзРезультатаЗапроса.

Общая схема выполнения запроса такова:

  1. Создание объекта «Запрос» с нужным текстом запроса на специальном языке запросов.
  2. Установка параметров запроса с помощью метода УстановитьПараметр.
  3. Выполнение запроса, получение результата.
  4. Получение выборки из результата запроса или выгрузка результата в таблицу значений / дерево значений. Также есть возможность использовать результат запроса для формирования сводной таблицы.
  5. Обработка выборки или таблицы значений (например, перебор строк) и выполнение действий, для которых был нужен запрос, например, вывод области при формировании отчета

Графически это можно представить следующим образом:

Цифрами на схеме обозначены следующие действия:

1. Установка текста запроса

Объект «Запрос» имеет свойство «Текст», которое содержит строку с текстом запроса на языке запросов. Этому свойству, во-первых, можно явно присвоить значение или, во-вторых, воспользоваться конструктором объекта «Запрос». В последнем случае текст запроса передается в качестве параметра в конструктор объекта «Запрос» при его создании.

1-й вариант:

Копировать в буфер обмена

2-й вариант (с другим текстом запроса):

Копировать в буфер обмена

2. Установка параметров запроса

Объект «Запрос» имеет метод «УстановитьПараметр», с помощью которого в запрос передаются значения параметров. Параметры запроса обычно используются в условиях отбора (конструкции ГДЕ, ИМЕЮЩИЕ) или в качестве параметров вызова виртуальных таблиц. В тексте запроса параметры обозначаются знаком «&» (например, параметр «ВыбГруппа» в первом запросе).

В качестве параметров используются значения, которые указываются пользователем в диалоге или значения типов, для которых нет литералов, например, пустых ссылок на элементы справочников. Литералы же есть только у примитивных типов данных, а именно, число, строка, дата, булево, Null, Неопределено.

3. Выполнение запроса

После присвоения текста и установки параметров, запрос запускается на выполнение с помощью метода «Выполнить()» объекта «Запрос». Этот метод возвращает другой объект «РезультатЗапроса», содержащий выбранные данные из базы данных.

Копировать в буфер обмена

Далее возможны три варианта:

  • во-первых, из результата запроса может быть получена выборка (линейная, иерархическая и т.д.),
  • во-вторых, результат запроса может быть выгружен в таблицу или дерево значений,
  • в-третьих, результат запроса может являться источником данных для сводной таблицы.

4. Получение выборки из результата запроса

Объект «РезультатЗапроса» имеет метод «Выбрать()», который возвращает новый объект «ВыборкаИзРезультатаЗапроса». В зависимости от параметра метода «Выбрать()» выборка будет линейной (по умолчанию), иерархической или по группировкам. Далее выборка обходится с помощью цикла «Пока Выборка.Следующий() Цикл», а в теле цикла производятся какие-то действия, например, вывод областей в табличный документ.

Копировать в буфер обмена

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

Объект «РезультатЗапроса» имеет метод «Выгрузить()», который возвращает таблицу значений или дерево значений, в зависимости от переданного параметра . Если устанавливается прямой тип обхода (по умолчанию), то будет создана таблица значений, иначе — дерево значений. Далее таблица значений (дерево значений) может быть обработана средствами встроенного языка или показана пользователю в табличном поле.

6. Формирование сводной таблицы

Результат запроса может быть использован как источник данных для сводной таблицы. При этом итоги (см. предложение ИТОГИ в тексте запроса) становятся ресурсами (отображаются в области данных), а группировочные поля, по которым они подсчитываются, становятся измерениями сводной таблицы. В качестве источника данных для сводной таблицы может быть также использован объект «ПостроительОтчета», но ему на вход тоже подается запрос, поэтому можно сказать, что основа любой сводной таблицы — это запрос к базе данных.

Источник

Передать в запрос 1С 8.3 таблицу значений

Наталья Севорина

  • Полезные статьи
  • Видео
  • Новости
  • Мероприятия
  • Темы
  • Релизы 1С
  • Избранное

Настройка и доработка 1С

Фиксированная стоимость и сроки. Оперативно. Оплата полезных фактических трудозатрат.

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

Пример передачи таблицы в запрос

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

Получить ТЗ в 1С можно 2 способами:

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

Чтобы поместить описанную таблицу в запрос, придется загрузить ее сначала во временную таблицу, а уже потом соединять с нужными данными. Это правило работы платформы, и если проигнорировать его, то при работе кода 1С выдаст ошибку. Если система сообщает, что данные могут быть выбраны исключительно во временную таблицу, то проверяйте, помещаете ли вы ТЗ в нее.

Чтобы в запросе получилась временная таблица, открыв конструктор запросов, необходимо нажать на специальную кнопку в среднем окне. Нам нужно правильно назвать таблицу и не ошибиться в написании наименования полей. Затем помещаем результат запроса во временную таблицу и во втором запросе из пакета соединяем данные. Этим простым запросом мы добавили таблицу в запрос 1С, состоящую из 1 колонки.

Рис.2 Добавление таблицы из одной колонки в запрос 1С Рис.2 Добавление таблицы из одной колонки в запрос 1С

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

Кроме вышеописанного применения программистам 1С приходится загружать таблицу в запрос 1С в сложных участках кода. Это позволяет не выполнять по нескольку раз 1 запрос – его выходной результат сохраняют в таблицу значений. А уже ее используют во всех следующих запросах в коде.

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

Источник

Заполнение табличного документа из запроса. Заполнение подвала и шапки таблицы

Создадим процедуру в обработке НоваяОбработка, с именем ПолучитьДанные выполняемая на Сервере.

Установим курсор внутри процедуры ПолучитьДанные. Запустим Конструктор запроса с обработкой результата.

Я буду использовать справочник Курсы, т.к. это единственный справочник в котором есть что считать. Выберем данные, Наименование, ДатаНачала, Стоимость, Преподаватель.

Перейдем на закладку Итоги. Установим галку Общие итоги и перенесем туда поле стоимость из левой части. В итоге у нас будет считаться сумма всех курсов по реквизиту Стоимость.

Т.к. справочник иерархический, убираем из результата запроса группы.

На закладке Условие добавим условие. Во первых установим галку на столбце П, это означает что условие произвольное. Впишем условие «Курсы.ЭтоГруппа = ЛОЖЬ».

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

Примерный результат после нажатия на OK.

Вместо комментария «Вставить обработку выборки…» вставляем:

В результате в переменной СуммаПоВсемКурсам будет хранится стоимость всех курсов.

Теперь переходим к Циклу, он перебирает все элементы запроса. Описание читаем в комментариях кода.

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

Вот обработка без ее обработки. Только у меня подвал включен уже через свойства, но это не имеет значения.

А вот результат:


Полный код:

Источник

Читайте также:  Таблица прибавки роста и веса девочек до
Adblock
detector