Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 10:38

Не выходит быстро посмотреть результат запроса (Радченко)

Автор Dmitry Qwe, 17 июл 2017, 16:26

0 Пользователей и 1 гость просматривают эту тему.

Dmitry Qwe

Делаю пример по Радченко где изменяется код документа "ОказаниеУслуг" посредством запросов
Сам :

Процедура ОбработкаПроведения(Отказ, Режим)

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

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

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

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

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

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

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

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

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


КонецЦикла;


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



Не получается посмотреть результат запроса с помощью точки останова. Делаю следующее:
Ставлю точку останова на строчку с ВыборкаДетальныеЗаписи = Результат.Выбрать();, затем после перепроведения одного из документов, выделяю в коде переменную ТЗ и жму вычислить выражение, но таблица значений не заполняется


oleg-x

А где у тебя в коде ТЗ? И если хочешь запрос выгрузить в ТЗ, тогда добавь выгрузку
выбрать().выгрузить();
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Dethmontt

Цитата: Dmitry Qwe от 17 июл 2017, 16:26Результат = Запрос2.Выполнить();
                    ТЗ = Результат.Выгрузить();

Так есть же.

Результат запроса ПУСТОЙ
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск