1с 8 результат запроса в таблицу значений.

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

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

Использование консоли запросов

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

Консоль запросов позволяет писать и отлаживать запросы в режиме 1С:Предприятия, не используя Конфигуратор. По доступна для скачивания одна из версий консоли запросов, скачиваем файл, разархивируем его и открываем через меню 1С:Предприятия «Файл – Открыть»

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

Выгрузка результатов временных таблиц

Используется функция вида:

Функция ПолучитьДанныеВременнойТаблицы(Запрос, ИмяТаблицы) Экспорт ДанныеТаблицы = Новый Запрос; ДанныеТаблицы.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц; ДанныеТаблицы.Текст = "Выбрать * | Из " +ИмяТаблицы+" |" ; Возврат ДанныеТаблицы.Выполнить().Выгрузить(); КонецФункции

Ее можно расположить в модуле вашей обработки, либо в общем модуле 1С 8. Т.о. к ней можно обращаться из любого отлаживаемого запроса, вставив в нужное место модуля следующий код:

Результат = ДанныеЗапроса(Запрос, "втИмя" );

  • Запрос — отлаживаемый нами запрос;
  • втИмя — имя виртуальной таблицы отлаживаемого запроса.

Полученную таблицу значений можно просмотреть в отладке при помощи “Вычислить выражение”.

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

Создание запроса

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

//Создаем запрос
Запрос = новый Запрос;

//Заполняем текст запроса
Запрос. Текст= "Тут пишем текст запроса" ;

//Передаем в запрос параметры
Запрос. УстановитьПараметр("ИмяПараметра" , ЗначениеПараметра) ;

//Выполняем запрос
Результат= Запрос. Выполнить() ;

//Выгружаем результат запроса в выборку
Выборка= Результат. Выбрать() ;

//Выгружаем результат запроса в таблицу значений
Таблица= Результат. Выгрузить() ;

//Последние действия можно объединить
Выборка= Запрос. Выполнить() . Выбрать() ;
//или
Таблица= Запрос. Выполнить() . Выгрузить() ;

Основы языка запросов 1С

Простейшие и наиболее часто применяемые запросы служат для получения данных из какого-то источника. Источником могут являться практически все объекты, содержащие какие-либо данные: справочники, документы, регистры, константы, перечисления, планы видов характеристик и т.д.

Из этих объектов с помощью запроса можно получать значения реквизитов, табличных частей, реквизитов табличных частей, изменений, ресурсов и т.д.

Для получения текста запроса часто бывает удобно пользоваться Конструктором запроса. Он вызывается при щелчке правой кнопкой в любом месте программного модуля.

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

Запрос. Текст = "ВЫБРАТЬ
| *
|ИЗ
| Справочник.Контрагенты"
;

Если же нужно получить только отдельные реквизиты, то — так:

Запрос. Текст = "ВЫБРАТЬ
| Код,
| Наименование,
| Родитель
|ИЗ
| Справочник.Контрагенты"
;

Для получения такого текста запроса в Конструкторе запроса нужно выбрать соответствующие поля на вкладке Таблицы и поля.

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

Запрос. Текст = "ВЫБРАТЬ
| Клиенты.Код КАК Номер,

| 1000 КАК ПолеСоЗначением
|ИЗ
;

Выборка = Запрос. Выполнить() . Выбрать() ;

Пока Выборка. Следующий() Цикл
НомерКлиента = Выборка. Номер;
ИмяКлиента = Выборка. Имя;
Знач = Выборка. ПолеСоЗначением;
КонецЦикла ;

Для задания псевдонимов служит вкладка Объединения/Псевдонимы в Конструкторе запросов.

А поле с фиксированным или рассчитываемым значением создается вручную на вкладке Таблицы и поля , в колонке Поля.

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

//Упорядочим клиентов по имени от А до Я и выберем первых 10
Запрос. Текст = "ВЫБРАТЬ ПЕРВЫЕ 10
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ

|УПОРЯДОЧИТЬ ПО
| Имя"
;

//Выберем самого последнего по алфавиту клиента
Запрос. Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты
|УПОРЯДОЧИТЬ ПО
| Имя УБЫВ"
;

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

//Выборка разрешенных пользователю данных
Запрос. Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты"
;

//Выборка неповторяющихся элементов
Запрос. Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты"
;

Порядок задается на вкладке Порядок в Конструкторе запросов, количество выбираемых элементов, параметры разрешенности и повторяемости — на вкладке Дополнительно.

Продолжение следует…

Очень часто это порождает распространенную ошибку — запрос в цикле. То есть разработчик не умеет включать таблицу значений в запрос и поэтому начинает обходить её в цикле и делать на каждую итерацию свой запрос. Рассмотрим на простом примере, как это сделать.

Пример

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

Получите 267 видеоуроков по 1С бесплатно:

Может быть две ситуации, как создана таблица значений, — программно и уже получена откуда-то (например, ТЧ документа). Если таблица создана программно, необходимо установить тип колонки , сделать это несложно

Т.е. при добавление колонки необходимо вторым параметром указать типы данных с помощью конструктора объекта «ОписаниеТипов».

Перейдем к построению запроса. Таблицу значений можно передать в запрос простым &Параметром.

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

Таким образом, мы помещаем первый запрос во временную таблицу, а потом соединяем её с регистром остатков номенклатуры.

Вот и всё, проблема решена.