Запрос к таблице значений 1С 8.3
Чтобы в 1C 8 поместить таблицу значений в запрос и использовать ее в качестве источника данных нужно:
1. Передать ее в параметр запроса
Пусть у нас есть таблица значений с именем ТЗ и полями: Договор, Количество, Сумма.
2. В конструкторе запроса задать структуру таблицы
Для этого вызываем конструктор запросов 1С 8, создаем новый запрос и жмем кнопку Создать описание временной таблицы.
В имени таблицы указываем переданный параметр, в поля заносим имена полей таблицы. Создание структуры временной таблицы:
Далее на закладке Дополнительно нужно указать, что мы создаем временную таблицу.
3. Использование созданной временной таблицы в запросе
Получите понятные самоучители по 1С бесплатно:
После того, как мы передали таблицу в запрос, ее можно использовать. Создаем новый пакет запросов на соответствующей закладке, переходим в него и видим, что в таблицах и полях появилась ветка Временные таблицы. Теперь можно делать с созданной таблицей все, что угодно: ставить условия, группировать, соединять с другими таблицами и т.п.
Вот пример простенького запроса с группировкой и условием:
Следует заметить, что в запрос можно передавать только таблицы значений с типизированными полями.
Источник
Запрос к таблице значений в 1С 8.2 и 8.3
Многие начинающие программисты не знают, как поместить таблицу значений в запрос 1С 8. Очень часто это порождает распространенную ошибку — запрос в цикле. То есть разработчик не умеет включать таблицу значений в запрос и поэтому начинает обходить её в цикле и делать на каждую итерацию свой запрос. Рассмотрим на простом примере, как это сделать.
Пример
В качестве примера размещения таблицы значения в запросе 1С 8.3 возьмем простую ситуацию — есть таблица значений, в которой содержится список номенклатуры. Необходимо получить данные по остаткам на складах по каждой номенклатурной позиции.
Может быть две ситуации, как создана таблица значений, — программно и уже получена откуда-то (например, ТЧ документа). Если таблица создана программно, необходимо установить тип колонки, сделать это несложно
Т.е. при добавление колонки необходимо вторым параметром указать типы данных с помощью конструктора объекта «ОписаниеТипов».
Перейдем к построению запроса. Таблицу значений можно передать в запрос простым &Параметром.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Обязательный нюанс — созданную таблицу необходимо поместить результат во временную таблицу, в противном случае система выдаст сообщение: «Ошибка при вызове метода контекста (Выполнить): Содержимое объекта данных может быть выбрано только во временную таблицу».
Таким образом, мы помещаем первый запрос во временную таблицу, а потом соединяем её с регистром остатков номенклатуры.
Вот и всё, проблема решена.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Источник
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.Вывод программно СКД без объекта-Отчета с Параметром=ВнешняяВременнаяТаблица
А теперь представим, что нам срочно нужно вывести какие-нибудь расчеты, но по непонятным причинам — мы не можем воспользоваться объектом-Отчет))
Здесь просто создаем Обработку, на форму ей скидываем все наши параметры, которые нужны для построения запроса в СКД, потом подтягиваем эти параметры из другой процедуры — и результат выводим в программно созданный табличный документ.
Оставила в этом варианте прикрепленный еще один МакетСКД — возможно кто-то сможет с помощью него пойти по пути передачи параметра,н-р, &Ссылки (у меня в этом вареанте решено через внешнюю врем.таб) — я сколько не пыталась подгрузить в Параметры СКД при режиме отсутствия объекта-Отчета — у меня не пошло.
Но так как рабочим механизмом здесь является программно вызываемый СКД, то в нашей табличке мы можем установить шаблонМакетов — все же красивее смотрится!))
Вот и все. Теперь не только начинающие программисты смогут быстренько что-то вывести на экран, а и опытные пользователи смогут разобраться в приведенных примерах и вуа-ля! самой большой сложности отчет готов.
Источник