Имя: Пароль:
1C
 
Как просмотреть результаты выполнения запроса в отладчике?
0 Dmitri446
 
17.07.17
17:17
Делаю 14 занятие по Радченко где в документе "ОказаниеУслуг" некоторая часть кода меняется на запросы
Сам код
Процедура ОбработкаПроведения(Отказ, Режим)

// регистр ОстаткиМатериалов Расход
Движения.ОстаткиМатериалов.Записывать = Истина;
Движения.СтоимостьМатериалов.Записывать = Истина;
Движения.Продажи.Записывать = Истина;

//Создаем менеджер временных таблиц
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ОказаниеУслугПереченьНоменклатуры.Номенклатура КАК Номенклатура,
| ОказаниеУслугПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
| СУММА(ОказаниеУслугПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,
| СУММА(ОказаниеУслугПереченьНоменклатуры.Сумма) КАК СуммаВДокументе
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.ОказаниеУслуг.ПереченьНоменклатуры КАК ОказаниеУслугПереченьНоменклатуры
|ГДЕ
| ОказаниеУслугПереченьНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ОказаниеУслугПереченьНоменклатуры.Номенклатура,
| ОказаниеУслугПереченьНоменклатуры.Номенклатура.ВидНоменклатуры";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

Запрос2 = Новый запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура КАК Номенклатура,
| НоменклатураДокумента.ВидНоменклатуры КАК ВидНоменклатуры,
| НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе,
| НоменклатураДокумента.СуммаВДокументе КАК СуммаВДокументе,
| ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
| ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество
|ИЗ
| НоменклатураДокумента КАК НоменклатураДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(
| ,
| Материал В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки
| ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.СтоимостьОстаток
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
| ,
| Материал В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки
| ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал" ;
//Запишем пустые наборы записей чтобы читать остатки без учета данных в документе

Движения.СтоимостьМатериалов.Записать();
Движения.ОстаткиМатериалов.Записать();
Результат = Запрос2.Выполнить();
ТЗ = Результат.Выгрузить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
СтоимостьМатериала = 0;
Иначе СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость/ВыборкаДетальныеЗаписи.Количество;
КонецЕсли;

Если ВыборкаДетальныеЗаписи.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал тогда
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

//СтоимостьМатериалов Расход
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе*СтоимостьМатериала;
КонецЕсли;
//Регистр продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Клиент = Клиент;
Движение.Мастер = Сотрудник;
Движение.Количество =
ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.Стоимость = СтоимостьМатериала*ВыборкаДетальныеЗаписи.КоличествоВДокументе;


КонецЦикла;


КонецПроцедуры

Затем чтобы посмотреть результат запроса предлагается установить точку останова на строчку с "ВыборкаДетальныеЗаписи = Результат.Выбрать();" и в режиме 1с перепровести один документ, после выделить переменную ТЗ и через отладка -> вычислить выражение посмотреть результат запроса, но выходит только вот это
http://savepic.ru/14936142.png
1 Джинн
 
17.07.17
17:19
Результат запроса пустой.
2 lodger
 
17.07.17
17:19
ты уже заглянул в ТЗ получившуюся в результате запроса и там пусто.
а почему пусто - сам думай.
3 Бычье сердце
 
17.07.17
17:19
Результат = Запрос2.Выполнить()
Смотрите в отладчике "результат"
4 h-sp
 
17.07.17
17:31
в отладчике вычислить выражение пишите

Запрос2.Выполнить().Выгрузить();

и не надо никакой там ТЗ
5 Dmitri446
 
17.07.17
17:34
Вот В отладчике результат, там вообще F2 не активна, не могу значение посмотретьhttp://savepic.ru/14908508.png
6 Любопытная
 
17.07.17
17:36
(5) результат нельзя посмотреть. Его можно выгрузить в ТЗ и посмотреть уже ТЗ
7 Dmitri446
 
17.07.17
17:40
Любопытная, как видно из первого поста в ТЗ пусто
8 Любопытная
 
17.07.17
17:41
(7) И что? Результат запроса пустой. В чем проблема?
9 Dmitri446
 
17.07.17
17:43
Любопытная, делаю это упражнение по книге, там автор делает тужу самую процедуру, где в ТЗ отображаются элементы выбранные запросом, собственно для этого ставится точка останова и перерроводится документ, но у меня почему в ТЗ пусто
10 h-sp
 
17.07.17
17:45
(7) остатков материалов нет у вас в базе
11 lodger
 
17.07.17
17:45
(9) либо код\запрос неправильный, либо данных в бд нет.
мы за тебя учиться будем?
12 Любопытная
 
17.07.17
17:46
(9) внутреннее соединение в запросе зачем?
13 Dmitri446
 
17.07.17
17:47
h-sp, спасибо, действительно
14 Nolan
 
17.07.17
18:14
вот вроде бы книга для самого самого начального уровня... Зачем он помещает во временную таблицу ПереченьНоменклатуры, неужели думает, что человеку который открыл для себя 1С 2 недели назад это нужно?
15 Nolan
 
17.07.17
18:16
(14) в МенеджерВременныхТаблиц* намного понятнее было бы сделать все в одном запросе
16 lodger
 
17.07.17
18:20
(15) напиши об этом Радченко личным рукописным письмом.
17 Nolan
 
17.07.17
18:28
(16) было бы не плохо, сам же по нему начинал учить. во многом книга хорошая, но есть "нюансы")
18 Лефмихалыч
 
17.07.17
20:50
аааэто... у Радченко такой код в обработке проведения?.. штоле?..
19 Nolan
 
17.07.17
20:53
(18) ага)
20 Лефмихалыч
 
17.07.17
20:54
(16) (15) их, кагбэ, и должно быть два, но только первый должен быть передЗаписью() и он должен выбирать разницу между табличной частью в базе и табличной частью в документе для проверки остатков только по тому, что реально поменялось.
21 Лефмихалыч
 
17.07.17
20:54
(19) не верю
22 Nolan
 
17.07.17
20:56
Процедура ОбработкаПроведения(Отказ, Режим)
23 Лефмихалыч
 
17.07.17
21:02
(22) это - в ученых целях и для демонстрации. В реальном мире за такие вещи бьют ипплом об стол и неприлично ругают. Не делай так.
Запрос должен быть один. Он может быть длинным, шо капец, но должен быть один всегда, когда это возможно.
24 mistеr
 
17.07.17
21:04
(23) Зачем так сурово? Чем в данном случае два запроса хуже, чем один?
25 Лефмихалыч
 
17.07.17
21:10
(24) да чо-то злой я сегодня.
Плохо количеством соединений с БД. Запрос к МВТ - это не волшебная палка, это такой же запрос к СУДБ, как и все остальные. База данных только tempDB, а не та, в которой товары гниют.

Ни кто не умрет от двух запросов. Но и от запросов в цикле ни кто еще не умер за всю историю программирования. Пальцы в розетку совать - не всегда смертельно. Перебегать улицу на красный свет тоже можно безнаказанно какое-то количество раз за всю жизнь. Но это не делает эти все вещи правильными, а выполнение их - разумным.
26 mistеr
 
17.07.17
21:20
(25) Соединение-то одно, оно никуда не денется. Ты наверное хотел сказать, пакеты по сети лишний раз побегают. Ну так это и правда не смертельно.