|
v7: Объединить два запроса | ☑ | ||
---|---|---|---|---|
0
bizon2008
24.08.11
✎
13:05
|
Объединить два запроса. Заплутал.
Первый "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |Товар = Справочник.Цены.Владелец; |ТипЦены = Справочник.Цены.КатегорияЦены; |Значение = Справочник.Цены.Цена; |Группировка Товар; |Условие(ТипЦены = ВыбТипЦены); |Условие(Товар в ВыбТовар); |"//}}ЗАПРОС Работает. Возвращает список товара с указанной ценой. Второй "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Товар = Регистр.ОстаткиТоваров.Товар; |Склад = Регистр.ОстаткиТоваров.Склад; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Товар без групп; |Условие(Склад = ВыбСклад); |"//}}ЗАПРОС Работает. Возвращает список товара с остатком. Объединил. Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |Товар = Справочник.Цены.Владелец; |ТипЦены = Справочник.Цены.КатегорияЦены; |Значение = Справочник.Цены.Цена; |Группировка Товар; |Условие(ТипЦены = ВыбТипЦены); |Условие(Товар в ВыбТовар); |"//}}ЗАПРОС На выходе пусто. Понято что чего перемудрил. Надо где-то указать владельца. А вот где не соображу. Заранее огромное спасибо. |
|||
1
bizon2008
24.08.11
✎
13:33
|
Всю типовую перешерстил. Примера пока нашел.
|
|||
2
ДенисЧ
24.08.11
✎
13:34
|
что-то я первый от третьего отличить никак не могу...
Старый, наверное, стал... Слепой... |
|||
3
1dvd
24.08.11
✎
13:38
|
(2) ну, уж, как объединил :)
|
|||
4
Lepochkin
24.08.11
✎
13:38
|
Как вариант выгрузи в тз первый запрос, перебирай его, а второй запускай с условием Товар=Тз.Товар
|
|||
5
bizon2008
24.08.11
✎
13:42
|
(2)Ошибся. Вот третий.
ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Товар = Регистр.ОстаткиТоваров.Товар; |Склад = Регистр.ОстаткиТоваров.Склад; |ТипЦены = Справочник.Цены.КатегорияЦены; |Значение = Справочник.Цены.Цена; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Товар без групп; |Условие(Склад = ВыбСклад); |Условие(ТипЦены = ВыбТипЦены); |"//}}ЗАПРОС |
|||
6
andrewks
24.08.11
✎
13:43
|
а где объеединение-то???
и, это, объединение справочника и регситра в 7-ке корявое |
|||
7
ДенисЧ
24.08.11
✎
13:43
|
|Товар = Регистр.ОстаткиТоваров.Товар,Справочник.Цены.Владелец;
так пробовал? |
|||
8
bizon2008
24.08.11
✎
13:45
|
(7)Да. Пустой.
|
|||
9
bizon2008
24.08.11
✎
13:46
|
(8)Вот.
"//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Товар = Регистр.ОстаткиТоваров.Товар, Справочник.Цены.Владелец; |Склад = Регистр.ОстаткиТоваров.Склад; |ТипЦены = Справочник.Цены.КатегорияЦены; |Значение = Справочник.Цены.Цена; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Товар без групп; |Условие(Склад = ВыбСклад); |Условие(ТипЦены = ВыбТипЦены); |"//}}ЗАПРОС |
|||
10
Ёпрст
24.08.11
✎
13:54
|
(0)
всё делается с помощью внешней функции в тексте запроса |
|||
11
bizon2008
24.08.11
✎
13:55
|
(10)Это как?
|
|||
12
Ёпрст
24.08.11
✎
13:57
|
типо так:
|Период с ВыбНачПериода по ВыбКонПериода; |Товар = Регистр.ОстаткиТоваров.Товар; |Склад = Регистр.ОстаткиТоваров.Склад; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Функция ЦенаТовараИзСправочника = Максимум(глПоиметьЦенуДляТовара(Товар,ТипЦены)); |Группировка Товар без групп; |Условие(Склад = ВыбСклад); |
|||
13
bizon2008
24.08.11
✎
14:02
|
(12)Спасибо. По ходу те же яйца что и в классике, только с боку.
Отчет по неходовым товарам Далее приведен пример нетривиального использования запроса для просмотра одновременно многих видов документов. Цель данной процедуры — вывести в отчет перечень неходовых товаров, которые совсем не продавались за заданный период и показать в каждой строке текущий остаток и стоимость этих товаров. В данном примере запрос формируется с целью определить, что в него не вошло. Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; Рег = СоздатьОбъект("Регистр.ОстаткиТовара"); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период С ДатаНачала По ДатаКонца; |ТОВАР = Документ.РасходнаяБН.Товар, | Документ.РасходнаяКредит.Товар, Документ.РасходнаяНал.Товар, | Документ.РасходнаяРеализ.Товар, Документ.Счет.Товар; |Группировка ТОВАР упорядочить по ТОВАР.Наименование без групп; |"//}}ЗАПРОС ; Если ДатаКонца >= ПолучитьДатуТА() Тогда ТекстЗапроса = ТекстЗапроса + "Период С ДатаНачала;"; Иначе ТекстЗапроса = ТекстЗапроса + "Период С ДатаНачала По ДатаКонца;"; Per.ВременныйРасчет(); РассчитатьРегистрыНа(ДатаКонца); КонецЕсли; // Выполнение Запроса Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Тов = СоздатьОбъект("Справочник.Товары"); // обход включая группировки Тов.ВключатьПодчиненные(1); // упорядочить по наименованиям Тов.ПорядокНаименозаний(); ИтогоОстаток = 0; ИтогоСумма = 0; Таб = СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Отчет"); Состояние("В отчет выведено " + ЧислоСтрок + " строк."); // Запускаем полный цикл по товарам Справочника Тов.ВыбратьЭлементы(); Пока Тов.ПолучитьЭлемент() > 0 Цикл Флаг = 0; Товар = Тов.ТекущийЭлемент(); Если Товар.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли; // Здесь пытаемся получить из Запроса информацию о товаре, // но используем просто сам факт того, что товар попал во // временный набор данных Запроса. // Если товар есть в Запросе, то значит он упоминался в // каких то документах, // иначе — товар не пользуется спросом — неходовой. Если Запрос.Получить(Товар) = 1 Тогда Продолжить; КонецЕсли; // находим остатки неходового товара на складе Рег.СводныеОстатки(Товар, ); ТекОстаток = Рег.ОстатокТовара; ТекСумма = Рег.БазоваяСтоимость; Если ТекОстаток = 0 Тогда Продолжить; КонецЕсли; Таб.ВывестиСекцию("Товар"); ИтогоОстаток = ИтогоОстаток + ТекОстаток; ИтогоСумма = ИтогоСумма + ТекСумма; КонецЦикла; Таб.ВывестиСекцию("Итоги"); Таб.ТолькоПросмотр(1); Таб.Опции(0, 0, 3, 0); Таб.Показать("Отчет о неходовых товарах", ""); КонецПроцедуры ДатаКонца = РабочаяДата(); ДатаНачала = ДатаКонца — Константа.ПериодАнализа; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |