Имя: Пароль:
1C
1C 7.7
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);

  Таб.Показать("Отчет о неходовых товарах", "");

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



ДатаКонца = РабочаяДата();

ДатаНачала = ДатаКонца — Константа.ПериодАнализа;
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан