Имя: Пароль:
1C
1С v8
Запрос с регистратором.
,
0 mdv92
 
09.08.11
20:24
Давайте уже теорию, а то опять - та же байда.
Регистр накопления "остатки", мне из него надо вытащить остаток по конкретному документу - регистратору с реквизитами Контрагент, договор, комиссионер и т.д.
По идее - должна быть одна строчка по итогам работы запроса, а у меня получается 7, 6 из которых заполнены не полностью.
Что я делаю не так??
1 Wobland
 
09.08.11
20:28
>По идее - должна быть одна строчка
откуда такая уверенность? показывай запрос уже
2 Wobland
 
09.08.11
20:29
и что значит остаток по конкретному документу? исходная задача какова?
3 mdv92
 
09.08.11
20:30
(1) я уже аналогичную тему заводила, тогда мне помогли, но мысль я опять потеряла!
       ЗапросПоРекламе.Текст = "ВЫБРАТЬ
       |    ЯКос_РазмРекламы.ДоговорКомиссионера КАК Договор,
       //|    СтрОплата.Договоры КАК ДоговорКонтр,
       |    ЯКос_РазмРекламы.Издание КАК Номенклатура,
       //|    СтрОплата.Контрагент КАК Контрагент,
       |    ЯКос_РазмРекламы.ВидОперации КАК ВидОперации,
       |    ЯКос_РазмРекламы.СуммаКонечныйОстаток КАК ОстатокС,
       |    ЯКос_РазмРекламы.ВалСуммаКонечныйОстаток КАК ОстатокВ,
       |    ЯКос_РазмРекламы.Период КАК Период,
       |    ЯКос_РазмРекламы.Регистратор КАК Регистратор
       |ИЗ
       |    РегистрНакопления.ЯКос_РазмРекламы.ОстаткиИОбороты(&НачДата, &ДатаРасчета, Регистратор, , ) КАК ЯКос_РазмРекламы
       |ГДЕ
       |    ЯКос_РазмРекламы.ДоговорКомиссионера = &ДоговорКомиссионера
       |    И ЯКос_РазмРекламы.ВидОперации = &ВидОперации
       |    И ЯКос_РазмРекламы.Комиссионер = &Комиссионер
       //|    И СтрОплата.Контрагент = &Контрагент
       //|    И СтрОплата.Договоры = &ДоговорКонтр
       |ИТОГИ
       |    СУММА(ОстатокС),
       |    СУММА(ОстатокВ)
       |ПО
       |    Контрагент,
       |    Договор,
       |    Номенклатура,
       |    Регистратор";
       
       ВыборкаКонтр = ЗапросПоРекламе.Выполнить().Выгрузить();
4 mdv92
 
09.08.11
20:33
Было размещение рекламы (документ такой), он сформировал движение по регистру с видом операции "размещение", потом была оплата, скорее всего - одна, по регистру прошло движение с тем же контрагентом-договором и т.д. с видом операции "оплата", теперь мы заполняем автоматически документ "взаимозачет" - подбираем к каждой оплате размещение.
5 Wobland
 
09.08.11
20:35
а почему бы к физической таблице не обратится? ВЫБРАТЬ ВидОперации, ЧтоТоЕщё ИЗ РН.ТвойРегистр ГДЕ Регистратор=&НужнаяСсылка
6 Wobland
 
09.08.11
20:36
+(5) я так понимаю, нужна информация из шапки документа
7 mdv92
 
09.08.11
20:41
(5) А я не знаю как раз - по какому документу было размещение!
И в прошлый раз - меня как раз на виртуальную таблицу науськивали.
В каком случае какую надо брать?
8 Wobland
 
09.08.11
20:42
(7) в (0) было сказано по конкретному документу...
9 mdv92
 
09.08.11
20:43
(6) А еще мне непонятно теоретически - как лучше сделать? Комиссионер у меня в шапке, а контрагенты - в "строчке". Лучше по каждой строчке сделать запрос по конкретному контрагенту, или сделать один запрос по всем, а потом в таблице выбирать данные по нужному контрагенту?
10 mdv92
 
09.08.11
20:44
(8) Может, я не точно сформулировала - мне нужно найти именно документ, сделавший движение, т.е. регистратор, а не просто конечный остаток по сумме.
11 Wobland
 
09.08.11
20:45
потом была оплата.. эта оплата по тому же регистру движения делает?
задача в чём? для каждого регистратора РазмещениеРекламы найти документ оплаты?
что-то ночь у нас, тяжело соображаю
12 mdv92
 
09.08.11
20:49
(11) Наоборот! Но это не принципиально! В момент запроса я знаю оплату и ищу размещение с тем, чтобы закрыть обороты и по оплате и по размещению, ну и другие телодвижения сделать.
Меня волнует вопрос, почему у меня опять 7 строчек вместо одной??
А если я сделаю      только
ПО
       |    Регистратор";
, то где я возьму контрагента, договор и прочее?
13 mdv92
 
09.08.11
20:51
А еще - как вставить в запрос данные из строчки? (если рассчитывать в каждой строчке отдельно)
Я закомментировала те кусочки
 //|    И СтрОплата.Контрагент = &Контрагент
потому что - ругается!
14 hhhh
 
09.08.11
21:03
(13) если ты пишешь ИТОГИ, значит результат у тебя в виде дерева. 5 уровней: Контрагент, договор, номенклатура, регистратор и детальные записи. Как ты такое офигенное дерево из 5 уровней хочешь впихнуть в одну маленькую строчечку? Ничего не получится.
15 mdv92
 
09.08.11
21:05
(14) Давай уже без намеков! Что нужно написать вместо итогов?
16 mdv92
 
09.08.11
21:06
Мне нужно найти - было ли размещение по конкретному договору-контрагенту-комиссионеру-номенклатуре, и если было - получить сумму по нему.
17 hhhh
 
09.08.11
21:12
(16) ну этот запрос будет раз в 20 больше.
18 mdv92
 
09.08.11
21:12
Как это??
19 AlexNew
 
09.08.11
21:18
После Остаток по регистратору - можно не читать.
20 mdv92
 
09.08.11
21:19
(19) Ну пусть не остаток! Пусть - движение, всё равно с остатком по сути совпадает.
21 AlexNew
 
09.08.11
21:20
(20) Что с чем совпадает?
22 mdv92
 
09.08.11
21:23
Остаток с движением по документу. Либо движение было, тогда остаток ему равен, либо не было, ну и еще вариант, что движение уже закрыто (был и приход и расход) - тогда в выборку по запросу это не попадет. Правильно?
23 mdv92
 
09.08.11
21:24
В каком случае нужно обращаться к физической таблице, а в каком - к виртуальной?
24 Киборг
 
09.08.11
21:25
(0)
> Регистр накопления "остатки", мне из него надо вытащить остаток по конкретному документу - регистратору...

Из РН можно вытащить остатки по набору измерений на дату, а не по регистратору. Наверно задача звучит как-то по-другому?!
25 mdv92
 
09.08.11
21:27
Мне нужно найти документ, который сделал движение!
26 Киборг
 
09.08.11
21:28
это Регистратор в движении
27 AlexNew
 
09.08.11
21:28
(25) Движение, зачем ОстаткиИОбороты, мысль сформулируй.
28 mdv92
 
09.08.11
21:31
(27) Ну так мне нужен регистратор только если остаток есть!
А если уже всё закрылось - мне и регистратор не нужен!
29 Киборг
 
09.08.11
21:33
остаток это не движение, поэтому из него и нельзя получить регистратор
30 AlexNew
 
09.08.11
21:35
(28) Какой регистратор, последний док-т, к-рый сделал движение по регистру, где остаток остался?
31 mdv92
 
09.08.11
21:46
(30) Если я задам контрагента-номен. -договор и т.д. - то я получу либо единственное размещение, либо не получу ничего - размещение с таким набором параметров может быть только одно.
32 Киборг
 
09.08.11
21:51
попробуй тогда обороты взять развернутые по регистратору, может там будет то, что тебе надо
33 AlexNew
 
09.08.11
21:54
Сделать измерением не? А так Остатки с оборотами левое соединение макс по моменту времени сгруппировать по моментувремени и левое соединение опять же с оборотами.
34 mdv92
 
09.08.11
21:54
Так я нашла то, что мне надо! Только у меня строчек 7 вместо одной!
Я, конечно, могу теперь лишние выкинуть, но я хочу понять, как получить запросом сразу то, что нужно.
35 AlexNew
 
09.08.11
21:55
Сгруппировать не по моменту времени, а твоим измерениям.
36 mdv92
 
09.08.11
21:56
(33) Измерением мне кажется делать неправильно. Мне ведь его тогда тоже придется "закрывать", в общем, масло масляное.
Про "левое соединение" - мне вообще темный лес, к тому же - зачем оно? Мне кажется, нужно "покрасивше" написать то что есть и всё!
37 mdv92
 
09.08.11
21:56
(35) Ну как написать-то?
38 AlexNew
 
09.08.11
22:08
ВЫБРАТЬ
Обороты.Регистратор
ИЗ (
Выбрать
макс(Обороты.Регистратор.МоментВремени) КАК МоментВремени
ИЗ
ТвойРегитр.Остатки()
ЛЕВОЕ СОЕДИНЕНИЕ
ТвойРегистр.Обороты(,,Регистратор) как Обороты
ПО всем измерениям) КАК ВложенныйЗапрос

ЛЕВОЕ СОЕДИНЕНИЕ
ТвойРегистр.Обороты(,,Регистратор) как Обороты
ПО Обороты.Регистратор.МоментВремени = ВложенныйЗапрос.МоментВремени

Так и напиши, смысл ясен?
39 mdv92
 
09.08.11
22:14
(38) Спасибо!
Не, смысл совсем не ясен.
40 AlexNew
 
09.08.11
22:17
Сгруппировать забыл во вложенном запросе, но смысл ясен. Выбираешь максимальные регистраторы (момент времени), и дальше их получаешь.
41 mdv92
 
09.08.11
22:26
"ПО всем измерениям" - так и писать? Я ведь в запросах ну ничего не понимаю!
Мне кажется, что если я задам запрос на получение остатков со всеми нужными мне параметрами, да еще и добавлю группировку по регистратору - я как раз и получу ссылку на нужный документ!
42 Dethmont
 
09.08.11
22:55
Молодец...
Так и пиши: "Хочу все и сразу!!!"
Запрос тебе даст все что ты хочешь, правда...
И конечно же сделай группировку по регистратору, а то вдруг не до даст зарос)))
43 AlexNew
 
09.08.11
23:00
(42) Не надо там группировку по регистратору. По всем измерениям, какие у тебя в регистре. Но лучше бы пересмотреть его струкиуру.
44 mdv92
 
10.08.11
13:26
(43) Как пересмотреть его структуру? Пока я валю туда всё, что мне нужно, хотя особой необходимости нет. У меня там - комиссионер, договор комиссионера, контрагент, договор контрагента, хотя, наверное, можно было бы обойтись и только договорами, номенклатура, которая вообще на всякий случай, пусть будет, еще тип операции - "размещение", комиссия", оплата", "оплата комиссии", "оплата без размещения" - по всем типам мне придется делать приход и расход, чтобы закрыть оборот, правильно?
Так вместо "по всем измерениям" - написать ПО Контрагент, договор, и т.д.?