Имя: Пароль:
1C
 
запрос по двум регистрам
0 Valera
 
20.10.04
00:27
юди помогите! Не могу понять как работает запрос по двум регистрам. Он вообщем-то работает, но как-то коряво.

ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Поставщик = Регистр.Расчеты.Контрагент,Регистр.Продажи.Контрагент;
|Товар = Регистр.Расчеты.Товар,Регистр.Продажи.Товар;

|ОстатокТовара = Регистр.Расчеты.ОстатокТовара;
|СуммаДолга = Регистр.Расчеты.СуммаДолга;
|СуммаРасчета = Регистр.Расчеты.СуммаРасчета;

|ОстатокПродажи = Регистр.Продажи.ОстатокТовара;
|ПродСтоимость = Регистр.Продажи.ПродСтоимость;
|Функция Продажа = Расход(ПродСтоимость);

|Функция Приход = Приход(ОстатокТовара);
|Функция ДолгПоставщику = Приход(СуммаДолга);
|Функция Остаток = Расход(ОстатокТовара);
|Функция Расчет = Расход(СуммаРасчета);
|Функция ОстатокП = Расход(ОстатокПродажи);

|Условие (Поставщик = ВыбПост);
|Группировка Товар Упорядочить по Товар.Наименование, Товар.Размер, Товар.УчетнаяЦена, Товар.Завод, Товар.Артикул;
|"//}}ЗАПРОС

Если есть движения расхода по регистру Расчеты т.е. Запрос.Остаток, то вышибает Запрос.Приход, короче движения есть, но = 0.
Кто чем может помочь?
1 Морозов Александр
 
20.10.04
05:53
Да вроде все правильно... Единственное 1С не рекомендует называть свои функции зарезервированными словами :|Функция Приход = Приход(ОстатокТовара);
                                     ^^^^     ^^^^
2 Gorr
 
20.10.04
11:28
Использование нескольких источников в запросе неверно. Чтобы все работало корректно, источник должен быть один. Делай два запроса, используй метод Получить для пересечения.
3 AlexMan
 
20.10.04
11:33
(2) А авторы книги "Описалово языка" часть 2 так не считают.....
4 Gorr
 
20.10.04
12:11
(3)
1 попробуй!!!
2.такая вещь может и пройдет (в зависимости от контекста):
Поставщик = Регистр.Расчеты.Контрагент,Регистр.Продажи.Контрагент;
3.но такая нет:
СуммаРасчета = Регистр.Расчеты.СуммаРасчета;
ОстатокПродажи = Регистр.Продажи.ОстатокТовара;

Ну и для полноты счастья может примеры работающих запросов с несколькими источниками по регистрам приведешь?
5 AlexMan
 
20.10.04
12:18
(4) Описало языка часть 2 стр 802.
6 Gorr
 
20.10.04
13:10
(5) нет у меня этой страницы:)
7 AlexMan
 
20.10.04
13:15
(6) Заставь твоего работодателя купить лицензионную прогу тогда будет такая страница.
8 AlexP
 
20.10.04
13:44
(6) Синтаксис-Помощник/Встроенный язык/Запрос/Язык запросов/Внутренние переменные запроса.
9 Gorr
 
21.10.04
18:29
(8) это где там такое говориться что по нескольким регистрам запрос делать можно?
примерчик запроса в студию!!!
все с удовольствуем и посмотрим:))
10 Valera
 
21.10.04
20:47
Вобщем-то говориться про объявление внутренней переменной, я то так и делал, как написано, т.е.
Поставщик = Регистр.Расчеты.Контрагент,Регистр.Продажи.Контрагент;
Товар = Регистр.Расчеты.Товар,Регистр.Продажи.Товар;
Говорится про это. Но это все не то. Коряво все это работает.
Кстати про два запроса и использование метода Получить.
Напиши примерчик небольшой, а то я не могу врубиться как это написать.
11 vikking
 
22.10.04
12:10
Вот пример реально работающего запроса по нескольким регистрам (взаиморасчеты)
   Запрос = СоздатьОбъект("Запрос");
   ТЗ = "//{{ЗАПРОС(Взаиморасчеты)
   |Период с ДатаНач по ДатаКон;
   |Контрагент = Регистр.ДолгиПок.Контрагент, Регистр.ДолгиПост.Контрагент;
   |Валюта = Регистр.ДолгиПок.Валюта, Регистр.ДолгиПост.Валюта;
   |КредДок = Регистр.ДолгиПок.КредДокумент,Регистр.ДолгиПост.КредДокумент;
   |
   |ДолгПост = Регистр.ДолгиПост.Долг;
   |Функция ДолгПостНачОст = НачОст(ДолгПост);
   |Функция ДолгПостПриход = Приход(ДолгПост);
   |Функция ДолгПостРасход = Расход(ДолгПост);
   |Функция ДолгПостКонОст = КонОст(ДолгПост);
   |
   |ДолгПок = Регистр.ДолгиПок.Долг;
   |Функция ДолгПокНачОст = НачОст(ДолгПок);
   |Функция ДолгПокПриход = Приход(ДолгПок);
   |Функция ДолгПокРасход = Расход(ДолгПок);
   |Функция ДолгПокКонОст = КонОст(ДолгПок);
   |
   |Группировка Контрагент без групп;
   |Группировка Валюта;
   |Группировка КредДок;
   |
   |Условие(Контрагент в ВыбКлиент);
   |Условие(Вал в Валюта);
   |"//}}ЗАПРОС
   ;
12 Дмитрий
 
22.10.04
23:14
(0)
Думаю, если перед "Группировка Товар" поставить "Группировка Поставщик" все будет ОК.
13 Дмитрий
 
22.10.04
23:15
(+12) Естественно, при выборке результатов нужно обе эти группировки обходить.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс