1с запросы вывести итог

ИТОГИ в запросе 1С 8.3

Для чего нужны итоги

Итоги позволяют получить некоторый итог в запросе без сворачивания детальных записей.

Например, получим выборку из справочника номенклатура в некоторой условной конфигурации. В полях выберем код, наименование и качество:

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

Для решения данной задачи можно использовать итоги:

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

Теперь мы можем сказать, что с качеством «Новый» 3 записи, с качеством «Не годен» 2 записи, с качеством «Ограниченно годен» 1 запись.

Синтаксис секции итогов

После ключевого слова ИТОГИ указываются итоговые поля, обычно для них применяется какая-нибудь агрегатная функция (сумма, количество, максимум, минимум, среднее). Таких полей может быть несколько, тогда они перечисляются через запятую. После ключевого слова ПО перечисляются поля, для которых нужно рассчитать итоги. Если их несколько, то тоже через запятую.

В итоговых полях можно использовать только те поля, которые есть в секции ВЫБРАТЬ. При этом не обязательное нужно использовать все поля. В секции ПО можно указать любое поле таблицы, даже если его нет в секции ВЫБРАТЬ.

Итоги рассчитываются платформой, а не средствами СУБД.

Итоги по нескольким полям

Для примера добавим в запрос итог по полю «Производитель»:

Источник

1с8.2-8.3.Вывод на экран данных запроса с переданными Параметрами из Документа! 8 различных вариантов:от Сообщений, Таблицы и Отчетов до СКД без объекта-отчета

В ссылке лежит база-черновик, созданная на платформе 1С8.3 управляемые формы. У меня настроен безМодальный режим, его всегда можно изменить на модальный:правой клавишей мыши на саму конфигурацию Черновик-Свойства-вкладка Совместимость-режимы модальности(2 поля) см.рис1

В базе-Черновике создан пример Документа и необходимых для него справочников,все данные выдуманные. Эта база создавалась больше как напоминалка — как быстенько сделать тот или иной отчет (или др.способом вывести данные на экран). В реальной жизни — параметры,передающиеся из документа могут быть в разы сложнее,но разобравшись с азами вывода данных,-потом любой сложности отчет не составит труда сделать.

1.Вывод результатов запроса командой Сообщить() из ТаблицыЗначений

Допустим, у нас есть задача: выбрать данные из пары справочников (справочники организованы с табличной частью),но не все данные этих справочников нам нужны,а только те,которые соответствуют открытому на данный момент документу.

Для этого — мы на форму документа вывели кнопку «КонтактыКлиентов», в модуле формы данного документа — у нас есть исполняющая клиентская процедура КонтактыКлиента(Команда), вот здесь и начнем писать первый код.

Код уже в базе написан,просто ставьте/снимайте ремарки с нужного варианта нашего вывода данных на экран:

В данном варианте мы создаем Структуру,записываем в нее данные по Контрагентам и Партнерам из текущего открытого документа.А далее передаем управление в серверную процедуру КонтактыКлиентаНаСервере(Структура,ТабДок). Эта серверная процедура вызывает расчетную экспортную функцию сервера из ОбщегоМодуля.

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

вот код подобного запроса, в параметрах которого внешняя временная таблица:

Логика понятна — как мы с помощью запроса с параметром «ВнешниеДанные» получаем необходимую нам выбоку, теперь вновь возвращаемся в наш документ.

Итак,расчетная серверная функция просто решает тот запрос,который мы только что составили в КонсолиЗапросов.

Здесь вы можете видеть, что в конце расчетной функции заремарен код вывода данных в виде сообщений. Поэкспериментируйте — разремарьте этот кусочек кода:

В документе в процедуре КонтактыКлиента -можете поставить ремарку на

Все,запускайте пользовательский режим 1С,открывайте любой документ, жмите кнопку «КонтактыКлиента»,у вас получится вот такой вывод данных выборки в виде Сообщений:

2.Вывод результатов запроса — просто в табличный документ

Востановите ремарки в расчетной серверной процедуре из ОбщегоМодуля, снимите ремарку в модуле формы документа ТабДок.Показать();

Запускайте вновь пользовательский режим 1С, после нажатия на кнопку «КонтактыКлиентов» — мы получаем вывод нашей выборки в обычный ТабличныйДокумент:

3.Вывод результатов запроса с помощью ДвумерногоМассива

Заремарьте в модуле формы в проц.КонтактыКлиента(Команда) код с 1-2 вариантов вывода данных на экран.

Разремарьте тут же 3-й вариант

Здесь и в 4-м варианте реализована прежде всего суть всех страданий 1.8.3: их работой в клиент-серверном режиме)).

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

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

4.Вывод результатов запроса с помощью МассиваСтруктур (с двумя вариантами)

точно такой же подход,как в примере выше,только мы не просто загоняем данные из результата запроса в определенного размера Массив, а загружаем их в МассивСтруктур — очень интересный способ, его мне подсказал Алексей (Alexey_) (в этой теме https://forum.infostart.ru/forum9/topic184275/).Спасибо.

5.Вывод обычным объект-Отчетом без СКД

Это все тот же запрос, просто в данном варианте — он находится в модуле формы объекта-Отчета.Все так же считает. Результат выводится через табличный документ в МакетОтчета, который сама как придумала,так и нарисовала:

п.с.Это самый стандартный способ вывода данных — через обычный объект-Отчет с обычным Макетом, без всяких СКД. и запрос для него очень быстро набрать в КонсолиЗапросов можно. Не знаю, мне больше всего нравится именно этот вариант, но как говорят -каждому на свой вкус и цвет.

6.Вывод объект-Отчетом-СКД+УстановкаПараметров

Начинается СКД — Схема Компановки Данных.

Сам отчет получился очень простой — в нем нет практически кода, всю работу выполняет СКД!

Но вот с составлением запросов в данном СКД — пришлось повозиться. Здесь нет никакой внешней временной таблицы — связь идет через Параметр документа &Ссылка. А вот как передать ее в СКД — я голову поломала немножко)) Потом просто пришлось использовать дополнительный реквизит на форме — в него загружать Параметр ссылки при процедуре ПриСозданииНаСервере,а потом из процедуры ПриКомпоновкеРезультата — выхватывать этот параметр с реквизита формы и устанавливать его стандартными настройками установки параметров для объекта-Отчета.

На идею — попробывать создать сложные запросы без внешней временной таблицы натолкнул Sergey Andreev (starik-2005).Спасибо.

Вот такая красота в итоге:

7.Вывод объект-Отчетом-СКД+ВнешняяВременнаяТаблица

В этом варианте у нас как и раньше (кроме п.6) фильтр по отбираемым данным справочникам идет с помощью внешней временной таблицы, в которую мы загружаем данные из документа.

Только здесь так же пришлось переработать запросы в СКД, а так же изменить структуру самой временной таблицы Параметров. Чтобы связать временную таблицу в СКД с выборкой из справочника — данную таблицу пришлось превратить в однуколоночную, но с составным типом данных! ссылки на сайты,где я нашла как сделать составной тип данных есть вот в этой теме https://forum.infostart.ru/forum9/topic184320/#message1911641

вот такой вид имеет этот вариант:

8.Вывод программно СКД без объекта-Отчета с Параметром=ВнешняяВременнаяТаблица

А теперь представим, что нам срочно нужно вывести какие-нибудь расчеты, но по непонятным причинам — мы не можем воспользоваться объектом-Отчет))

Здесь просто создаем Обработку, на форму ей скидываем все наши параметры, которые нужны для построения запроса в СКД, потом подтягиваем эти параметры из другой процедуры — и результат выводим в программно созданный табличный документ.

Оставила в этом варианте прикрепленный еще один МакетСКД — возможно кто-то сможет с помощью него пойти по пути передачи параметра,н-р, &Ссылки (у меня в этом вареанте решено через внешнюю врем.таб) — я сколько не пыталась подгрузить в Параметры СКД при режиме отсутствия объекта-Отчета — у меня не пошло.

Но так как рабочим механизмом здесь является программно вызываемый СКД, то в нашей табличке мы можем установить шаблонМакетов — все же красивее смотрится!))

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

Источник

Итоги по объединенной совокупности группировок в запросе

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

Такая задача решается легко, путем использования ключевого слова ИТОГИ в запросе:

Затем результат запроса обходим по группировкам и создаем документы:

Усложним задачу, добавив в исходную таблицу колонку «Договор».

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

Добавим в таблицу еще пару полей. Например, «Организация» и «Грузоотправитель». Реализация теперь создается на каждый набор Организация-Контрагент-Грузоотправитель-Договор. Если действовать тем же методом, добавляя итоговые поля в запрос, при обработке результата мы получим цикл пятого уровня вложенности:

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

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

Источник

Читайте также:  Дракон кораллов как вывести
Оцените статью