Как просмотреть результаты выполнения запроса в отладчике?
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Услуга,
| СпрНоменклатура.Представление,
| ПродажиОбороты.ВыручкаОборот КАК Выручка
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ПродажиОбороты
| ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка
|ГДЕ
| СпрНоменклатура.ЭтоГруппа = ЛОЖЬ
| И СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
|
|УПОРЯДОЧИТЬ ПО
| Выручка УБЫВ
|ИТОГИ
| СУММА(Выручка)
|ПО
| ОБЩИЕ»;
Запрос.УстановитьПараметр(«ВидНоменклатуры», Перечисления.ВидыНоменклатуры.Услуга);
Запрос.УстановитьПараметр(«ДатаНачала», ДатаНачала);
Запрос.УстановитьПараметр(«ДатаОкончания», ДатаОкончания);
Проблема в том, что запрос, кажется, не «ловит» то, что нужно.
Вот, что получилось у меня при просмотре переменных Результат и ВыборкаОбщийИтог:
Результат.Колонки КоллекцияКолонокРезультатаЗапроса КоллекцияКолонокРезультатаЗапроса
Выручка КолонкаРезультатаЗапроса КолонкаРезультатаЗапроса
Имя «Выручка» Строка
ТипЗначения Null, Число ОписаниеТипов
Ширина 32 Число
Представление КолонкаРезультатаЗапроса КолонкаРезультатаЗапроса
Имя «Представление» Строка
ТипЗначения Null, Строка ОписаниеТипов
Ширина 32 Число
Услуга КолонкаРезультатаЗапроса КолонкаРезультатаЗапроса
Имя «Услуга» Строка
ТипЗначения Null, Справочник ссылка: Номенклатура ОписаниеТипов
Ширина 25 Число
Выручка Ошибка чтения значения
Представление Ошибка чтения значения
Услуга Ошибка чтения значения
Создание и работа с запросами (для начинающих)
Сегодня хочу вам рассказать о том, как начать работать с запросами и научиться (конечно постепенно) – работе с запросами в 1С. Тем, кто знаком с запросами MS
SQL будет конечно намного проще.
Итак, давайте откроем конфигуратор и создадим новую внешнюю обработку.
После чего мы получим окошко с нашей обработкой. Давайте приступим непосредственно к экспериментам по запросам, для этого создадим в нашей обработке – новую форму – а для этого в списке (белое поле) выберите Формы – и нажмите (+) Добавить, соглашайтесь со всеми предложенными параметрами формы по умолчанию, и нажимайте готово.
Итак мы создали с вами пустую форму, с кнопками и. В окне с форме выбираем вкладкуи переходим непосредственно к написанию кода, который будет выполнятся при нажатии кнопки выполнить. Для этого находим процедуру КнопкаВыполнитьНажатие(Кнопка)
и пишем следующий код:
Давайте прокомментируем, что мы здесь написали. Мы выбрали запросом все документы «СчетНаОплатуПокупателю». Хочу сразу заметить, что в зависимости от того, в какой конфигурации вы экспериментируете – посмотрите состав документов вашей конфигурации и вместо указанного мною «СчетНаОплатуПокупателю» подставьте любой объект Документ из списка документов вашей конфигурации, желательно чтобы в информационной базе – документы этого типа были созданы, чтобы не получить пустой результат запроса. Также хочу отметить важный момент – если таких документов будет слишком много – то выполнение запроса может затянутся на некоторое время – из-за того, что мы не ограничиваем запрос условиями и выбираем все поля – о чем нам говорит звездочка (*).
Ключевым словом «Выбрать» мы приказываем нашему запросу выбрать все поля(*) (реквизиты документа) из документа «СчетНаОплатуПокупателю».
Важно:
Хочу заметить также, что при написании языка запроса – обращаться к объектам конфигурации следует в единственном, а не во множественном числе. В данном
случае объект Документы в конфигурации (ветка Документы) – в запросе написан Документ. Также к составу документов – мы добираемся через точку(.) – и название документа.
Результат запроса мы получаем в виде таблицы значений, о чем свидетельствует примененный нами метод(параметр) – Выгрузить, то есть сначала мы выполнили
запрос (Выполнить), а уже затем выгрузили результат выполнения запроса в таблицу значений и таблица значений находится в переменной Результат.
Далее сохраняем нашу обработку в файл, для этого нажимаем Файл->Сохранить как и пишем имя файла, для своей обработки я задал имя «ВнешняяОбработка1Демо», чтобы долго не искать обработку можете сохранить ее на рабочий стол, дальше нам придется ее открывать)).
Теперь давайте изучим немного основы отладки. Для этого сейчас на поле рядом с текстом Результат = … дважды щелкните левой клавишей мыши, чтобы появилась красный кружок, у вас должно получиться нечто следующее:
Итак, мы сейчас с вами установили точку останова на строке с результатом, теперь давайте запустим конфигурацию на отладку, нажав клавишу ( F 5) либо кнопку
на панели инструментов:
Теперь в запущенном нами режиме 1С:Предприятия откроем нашу сохраненную обработку Файл->Открыть и найдите то место, куда вы сохраняли файл обработки, выберите его и нажмите открыть. Жмем в нашей обработки кнопку «Выполнить». Если вы все сделали правильно – вы автоматически перейдете в режим конфигуратора и в месте установки нашей точки останова увидите следующее:
На нашем кружке появилась стрелочка – мы перешли в пошаговое выполнение нашего кода, и далее мы увидим самое интересное. Если вы все правильно сделали – сейчас вы сможете получить результат выполнения запроса.
Для наглядного представления запроса сделаем следующее: В верхнем меню конфигуратора находим меню Отладка и выбираем команду Табло.
Внизу окна конфигуратора откроется пустое окошечко ->Табло. В этом окне есть строки, пустые. Дважды щелкните на пустую подсвеченную строку и напишите слово Результат. У вас должно получиться следующее:
Итак, в указанном нами окне мы должны получить результат выполнения нашего кода, а именно сейчас – переменной «Результат», так как мы сейчас еще не выполнили данную строку кода – мы имеем пустое значение и тип данных переменной – «Неопределено».
Давайте сделаем шаг – для выполнения указанной строки кода. Для этого нажмите клавишу , либо в меню Отладка->Шагнуть через…( F 10).
И что же мы видим в нашем Табло:
Мы видим с вами – значение переменной и тип переменной. Теперь также мы можем просмотреть содержание нашей таблицы значений, для этого подведите курсор мыши к полю результат, нажмите правую клавишу мыши и выберите пункт «Показать значение в отдельном окне»
Получаем окно с выбранными нами документами, которые находятся в переменной Результат
Резюмирую:
Вы научились создавать простейший запрос, а также поучаствовали в отладке своего кода и даже посмотрели результат нашего запроса в конфигураторе.
Отладка запросов 1С
Часто в конфигурациях 1С 8 встречаются очень большие и сложные запросы. Например, запрос автозаполнения документа «Начисление зарплаты» , не смотря на то, что благодаря использованию пакетного запроса с большим числом временных таблиц, он построен логично и прозрачно, разобраться в нем тяжело из за его громоздкости.
Есть два основных метода отладки больших запросов.
Использование консоли запросов
Стандартную консоль запросов можно найти на дисках ИТС(это внешняя обработка), да и на просторах интернета целая куча различных ее модификаций.
Консоль запросов позволяет писать и отлаживать запросы в режиме 1С:Предприятия, не используя Конфигуратор. По ссылке доступна для скачивания одна из версий консоли запросов, скачиваем файл, разархивируем его и открываем через меню 1С:Предприятия «Файл – Открыть»
Для того чтобы разобраться в большом запросе с помощью консоли запросов, разбейте запрос на пакеты. Это позволит сразу отслеживать результат выполнения каждой части запроса. После выполнения запроса перейдите на закладку “Временные таблицы”, выберите нужную вам и нажмите “Отладить”, для виртуальной таблицы создастся отдельный запрос, который вы можете выполнить отдельно от основного.
Выгрузка результатов временных таблиц
Используется функция вида:
Ее можно расположить в модуле вашей обработки, либо в общем модуле 1С 8. Т.о. к ней можно обращаться из любого отлаживаемого запроса, вставив в нужное место модуля следующий код:
- Запрос — отлаживаемый нами запрос;
- втИмя — имя виртуальной таблицы отлаживаемого запроса.
Полученную таблицу значений можно просмотреть в отладке при помощи “Вычислить выражение”.
Три приема отладки запросов в типовых конфигурациях
В современных конфигурациях масса сложных запросов – объемных, с большим количеством временных таблиц и т.д. Текст запросов часто собирается программно из кусочков, часто в разных процедурах.
И вот Вы дорабатываете такой запрос – а он возвращает не тот результат, который ожидается.
Как найти причину? Нужно отладить запрос.
И нужно уметь это делать так, чтобы не терять на это кучу времени.
В серии из трех видеоуроков мы рассмотрим базовые приемы отладки, которые часто используются на практике:
- Разберем базовый подход, как в консоли запросов сформировать и отладить результирующий пакетный запрос, при помощи которого получаются данные.
- Научимся прямо в отладчике просматривать содержимое временных таблиц и результата запроса, чтобы проанализировать отдельные этапы выполнения запроса.
- Также рассмотрим удобный прием – отложенную отладку. С помощью одной команды в отладчике получим в консоли итоговый текст выполняющегося запроса, значения параметров, содержимое временных таблиц. Это упрощает отладку, поскольку не нужно вручную в консоли вводить все указанные данные.
При работе с типовыми конфигурациями – незаменимые навыки как для новичков, так и для профи : )