|
Запрос для вывода нулевых остатков | ☑ | ||
---|---|---|---|---|
0
antihacker
29.12.14
✎
16:46
|
Вот запрос.
выбСписСклады=новый списокзначений; выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("000000001")); выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("00000001t")); выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("000000098")); выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("000000091")); ДЛЯ КАЖДОГО склад ИЗ выбСписСклады ЦИКЛ запрос=новый запрос; запрос.Текст="ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &ДатаОст, | Склад В (&выбСписСклады) | И Номенклатура.Монолит = ИСТИНА) КАК ТоварыНаСкладахОстатки | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Номенклатура |ИТОГИ | СУММА(КоличествоОстаток) |ПО | Номенклатура"; выборкаТовар=запрос.Выполнить().Выбрать(обходрезультатазапроса.ПоГруппировкам,"Номенклатура"); КОНЕЦЦИКЛА Работает правильно. Но не выводит нулевые остатки. Полчему и как сделать что бы получить нулевые и не нулевые остатки. Спасибо. |
|||
1
Волшебник
модератор
29.12.14
✎
16:47
|
запрос к справочнику + левое внешние соединение к регистру
|
|||
2
vicof
29.12.14
✎
16:47
|
В таблице остатков нет нулевых остатков. Соединяй с номенклатурой.
|
|||
3
vicof
29.12.14
✎
16:47
|
А за запрос в цикле расстрел.
|
|||
4
разработчик 1с
29.12.14
✎
16:53
|
а вообще зачем цикл, если склад в списке
|
|||
5
bolobol
29.12.14
✎
17:13
|
(0) А нулевые остатки за какой период нужны?
|
|||
6
antihacker
29.12.14
✎
18:19
|
Волшебник, а что это означает ?
Не получается придумать. Покажи класс ;-) |
|||
7
asady
29.12.14
✎
18:49
|
(0) тебе нужно по всей номенклатуре которая есть в справочнике?
а если у тебя там тыщи миллионов элементов - по всем бублик рисовать что-ли? |
|||
8
antihacker
29.12.14
✎
19:51
|
В запросе есть строка
Номенклатура.Монолит = ИСТИНА По идее она должна вытащить те номенклатуры у которых есть этот признак. |
|||
9
GROOVY
29.12.14
✎
19:54
|
Сгруппировать - нафиг? Там нет повторяющихся значений.
Итоги нафига? Колбасу и Отвертки складывать? Цикл вообще зачем? |
|||
10
GROOVY
29.12.14
✎
19:54
|
"В запросе есть строка
Номенклатура.Монолит = ИСТИНА По идее она должна вытащить те номенклатуры у которых есть этот признак." Эта строка должна ограничить выбор записей по этому признаку. |
|||
11
antihacker
29.12.14
✎
20:07
|
GROOVY, не усложняй и не отвлекай. Пожалуйста по теме. Можешь предложить вариант ?
|
|||
12
antihacker
29.12.14
✎
20:07
|
Как надо писать запрос ?
|
|||
13
GROOVY
29.12.14
✎
20:12
|
Могу.
Убираем группировки, цикл и итоги, делаем левое соединение справочника с регистром накопления. Причем сначала выбираем из справочника всех Монолист, а потом этот результат используем и как таблицу справочника и как значение фильтра для расчета виртуальной таблицы. Думаю тут хорошо впишется использование временной таблицы. И надеюсь Монолист - проиндексированный реквизит! |
|||
14
antihacker
30.12.14
✎
06:04
|
Ну в теории я так и понял ) А примерчик ?
|
|||
15
SeraFim
30.12.14
✎
06:07
|
(14)а зарплату тоже GROOVY за тебя будет получать?
Если понял, поправь сам. Если не получилось - покажи что же в итоге ты сделал. |
|||
16
Oleg_ka
30.12.14
✎
06:13
|
Вот пример http:// infostart.ru/public/153851/ (пробел убери после http://)
|
|||
17
antihacker
30.12.14
✎
07:34
|
Вот так
| ТоварыНаСкладахОстатки.Склад КАК Склад, | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток |ИЗ | Справочники.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &ДатаОст, | Склад В (&выбСписСклады) | И Номенклатура.Монолит = ИСТИНА Номенклатура=СпрНоменклатура) КАК ТоварыНаСкладахОстатки | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Склад, | ТоварыНаСкладахОстатки.Номенклатура |ИТОГИ | СУММА(КоличествоОстаток) |ПО | Склад, | Номенклатура"; но ошибка {ВнешняяОбработка.Монолит21(682)}: Ошибка при вызове метода контекста (Выполнить): {(13, 1)}: Ожидается имя таблицы <<?>>СГРУППИРОВАТЬ ПО выборкаСклад=запрос.Выполнить().Выбрать(обходрезультатазапроса.ПоГруппировкам,"Склад"); |
|||
18
antihacker
30.12.14
✎
07:38
|
Исправил вот так.
| ТоварыНаСкладахОстатки.Склад КАК Склад, | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &ДатаОст, | Склад В (&выбСписСклады) | И Номенклатура.Монолит = ИСТИНА ) КАК ТоварыНаСкладахОстатки по Справочник.Номенклатура=Номенклатура | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Склад, | ТоварыНаСкладахОстатки.Номенклатура |ИТОГИ | СУММА(КоличествоОстаток) |ПО | Склад, | Номенклатура"; но {ВнешняяОбработка.Монолит21(682)}: Ошибка при вызове метода контекста (Выполнить): {(11, 69)}: Поле не найдено "Справочник.Номенклатура" И Номенклатура.Монолит = ИСТИНА ) КАК ТоварыНаСкладахОстатки по <<?>>Справочник.Номенклатура=Номенклатура выборкаСклад=запрос.Выполнить().Выбрать(обходрезультатазапроса.ПоГруппировкам,"Склад"); |
|||
19
GenAcid
30.12.14
✎
07:42
|
по СпрНоменклатура.Номенклатура=ТоварыНаСкладахОстатки .Номенклатура
|
|||
20
antihacker
30.12.14
✎
07:42
|
Исправил вот так
| ТоварыНаСкладахОстатки.Склад КАК Склад, | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &ДатаОст, | Склад В (&выбСписСклады) | И Номенклатура.Монолит = ИСТИНА ) КАК ТоварыНаСкладахОстатки по СпрНоменклатура.Наименование=Номенклатура | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Склад, | ТоварыНаСкладахОстатки.Номенклатура |ИТОГИ | СУММА(КоличествоОстаток) |ПО | Склад, | Номенклатура"; |
|||
21
GenAcid
30.12.14
✎
07:43
|
Скорее всего даже так
по СпрНоменклатура.Ссылка=ТоварыНаСкладахОстатки .Номенклатура |
|||
22
patria0muerte
30.12.14
✎
07:43
|
.Наименование то зачем? facepalm.jpg
|
|||
23
patria0muerte
30.12.14
✎
07:44
|
Чего вообще с результатом запроса делать собираешься?
|
|||
24
antihacker
30.12.14
✎
07:47
|
Запрос вроде выполняется но далее вот так
выборкаСклад=запрос.Выполнить().Выбрать(обходрезультатазапроса.ПоГруппировкам,"Склад"); пока выборкаСклад.Следующий()цикл Файл.ЗаписатьНачалоЭлемента("r"); Файл.ЗаписатьНачалоЭлемента("f"); файл.ЗаписатьТекст(выборкаСклад.склад.код); Файл.ЗаписатьКонецЭлемента(); Файл.ЗаписатьНачалоЭлемента("f"); И тут ошибка {ВнешняяОбработка.Монолит21(686)}: Значение не является значением объектного типа (код) файл.ЗаписатьТекст(выборкаСклад.склад.код); |
|||
25
Peltzer
30.12.14
✎
07:48
|
Потому что Null
|
|||
26
Любопытная
30.12.14
✎
07:49
|
(24) Номенклатуру выбирай из справочника, а не из регистра
|
|||
27
antihacker
30.12.14
✎
07:53
|
Это где я выбираю из регистра ?
|
|||
28
antihacker
30.12.14
✎
07:53
|
Peltze,
пробовал вот так СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток не помог |
|||
29
Любопытная
30.12.14
✎
07:54
|
(27) | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, - Это вот здесь ты выбираешь из регистра. А надо из справочника
|
|||
30
Peltzer
30.12.14
✎
07:58
|
Да бесполезно лечить усопшего...
И помогать тебе тоже бесполезно. ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад, ВЫБОР КОГДА ТоварыНаСкладахОстатки.Склад ЕСТЬ NULL ТОГДА "" ИНАЧЕ ТоварыНаСкладахОстатки.Склад.Код КОНЕЦ КАК КодСклада, СпрНоменклатура.Номенклатура, ISNULL(ТоварыНаСкладахОстатки.КоличествоОстаток,0) КАК КоличествоОстаток ИЗ Справочники.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.КоличествоОстаток РегистрНакопления.ТоварыНаСкладах.Остатки( &ДатаОст, Склад В (&выбСписСклады)) КАК ТоварыНаСкладахОстатки)КАК ТоварыНаСкладахОстатки ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура ГДЕ СпрНоменклатура.Монолит = ИСТИНА |
|||
31
Peltzer
30.12.14
✎
08:00
|
Но и это не даст решения - надо ещё полное соединение по складам до левого соединения с остатками
|
|||
32
Любопытная
30.12.14
✎
08:04
|
А вложенный запрос зачем?
|
|||
33
Любопытная
30.12.14
✎
08:05
|
Чего надо-то изначально?
|
|||
34
Любопытная
30.12.14
✎
08:06
|
Ему нужны остатки общие по всем указанным складам, в том числе нулевые, судя по запросу в (0), зачем тащить склад и усложнять все?
|
|||
35
Peltzer
30.12.14
✎
08:10
|
Ну, если остатка по данному складу вообще не будет, то в результате запроса не будет записей с нулевыми остатками, потому что их просто нет в вирт.таблице
|
|||
36
Peltzer
30.12.14
✎
08:11
|
(34) А, ну да, тогда достаточно сгруппировать запрос из (30)
|
|||
37
Peltzer
30.12.14
✎
08:12
|
А в (24) он обходит по складам и пытается вывести остатки.
|
|||
38
patria0muerte
30.12.14
✎
08:18
|
Его конечно хрен разберешь, но походу что то типа:
ВЫБРАТЬ Номенклатура.Ссылка ПОМЕСТИТЬ ВТНоменклатура ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Монолит ; ВЫБРАТЬ Склады.Ссылка, Склады.Код ПОМЕСТИТЬ ВТСклады ИЗ Справочник.Склады КАК Склады ГДЕ Склады.Ссылка В(&СписокСкладов) ; ВЫБРАТЬ ВТНоменклатура.Ссылка КАК Номенклатура, ВТСклады.Ссылка КАК Склад, ВТСклады.Код КАК КодСклада ПОМЕСТИТЬ ВТНоменклатураСклад ИЗ ВТНоменклатура КАК ВТНоменклатура ПОЛНОЕ СОЕДИНЕНИЕ ВТСклады КАК ВТСклады ПО (ИСТИНА) ; ВЫБРАТЬ ВТНоменклатураСклад.Номенклатура, ВТНоменклатураСклад.Склад, ВТНоменклатураСклад.КодСклада, ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток ИЗ ВТНоменклатураСклад КАК ВТНоменклатураСклад, РегистрНакопления.ТоварыНаСкладах.Остатки( &Период, (Номенклатура, Склад) В (ВЫБРАТЬ ВТ.Номенклатура, ВТ.Склад ИЗ ВТНоменклатураСклад КАК ВТ)) КАК ТоварыНаСкладахОстатки |
|||
39
patria0muerte
30.12.14
✎
08:19
|
+(38)При условии, что необходима информация о том, на каком складе чего нет (Хотя нафиг это надо - непонятно)
|
|||
40
antihacker
30.12.14
✎
08:31
|
Любопытна,
по поводу ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, это я потом буду сравнивать с тем же справочником вот здесь ? СпрНоменклатура.Наименование=Номенклатура |
|||
41
Любопытная
30.12.14
✎
08:38
|
(40) зачем?
|
|||
42
antihacker
30.12.14
✎
08:39
|
Ну как ? Запрос посмотри. Я из справочника беру через
| Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ |
|||
43
Любопытная
30.12.14
✎
08:40
|
(42) ты ничего не берешь из справочника, ты только соединяешь с ним
|
|||
44
antihacker
30.12.14
✎
08:44
|
Соединить справочник с тем же справочником ?
|
|||
45
Любопытная
30.12.14
✎
08:45
|
(44) выбрать номенклатуру из справочника!
|
|||
46
antihacker
30.12.14
✎
08:47
|
В чем прикол ? Выбрать из справочника и и еще раз выбрать из справочника потом с ними что делать.
|
|||
47
Oleg_ka
30.12.14
✎
08:49
|
(46)
Вместо | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, напиши | СпрНоменклатура.Номенклатура КАК Номенклатура, |
|||
48
antihacker
30.12.14
✎
08:54
|
СпрНоменклатура уже Справочник.Номенклатура. От туда еще раз номенклатуру ?
|
|||
49
katc
30.12.14
✎
08:58
|
Попахивает феерическим кретинизмом.
|
|||
50
SeraFim
30.12.14
✎
08:58
|
(48) читай (38)
|
|||
51
antihacker
30.12.14
✎
09:03
|
Ну написал. Получил то что ожидал.
{ВнешняяОбработка.Монолит21(683)}: Ошибка при вызове метода контекста (Выполнить): {(3, 18)}: Поле не найдено "СпрНоменклатура.Номенклатура" СпрНоменклатура.<<?>>Номенклатура КАК Номенклатура, выборкаСклад=запрос.Выполнить().Выбрать(обходрезультатазапроса.ПоГруппировкам,"Склад"); |
|||
52
Любопытная
30.12.14
✎
09:06
|
(51) Вы че там, уже праздновать начали?
|
|||
53
Любопытная
30.12.14
✎
09:06
|
| СпрНоменклатура.Ссылка КАК Номенклатура,
|
|||
54
patria0muerte
30.12.14
✎
09:07
|
(52) Походу и не заканчивали...
|
|||
55
antihacker
30.12.14
✎
09:10
|
{ВнешняяОбработка.Монолит21(683)}: Ошибка при вызове метода контекста (Выполнить): {(3, 2)}: Поле не входит в группу "СпрНоменклатура.Ссылка"
<<?>>СпрНоменклатура.Ссылка КАК Номенклатура, выборкаСклад=запрос.Выполнить().Выбрать(обходрезультатазапроса.ПоГруппировкам,"Склад"); по причине: {(3, 2)}: Поле не входит в группу "СпрНоменклатура.Ссылка" <<?>>СпрНоменклатура.Ссылка КАК Номенклатура, |
|||
56
Любопытная
30.12.14
✎
09:15
|
о боги...
(55) Может пора включить голову, а не тупо копипастить с форума? |
|||
57
patria0muerte
30.12.14
✎
09:16
|
(55) Не тупи, возьми запрос из (38) и обходи как тебе надо... Или позови кого нибудь из взрослых, коли сам читать ошибки не умеешь...
|
|||
58
antihacker
30.12.14
✎
09:20
|
Ну сделал так
| |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Склад, | СпрНоменклатура.Ссылка Все равно здесь ошибка выборкаСклад=запрос.Выполнить().Выбрать(обходрезультатазапроса.ПоГруппировкам,"Склад"); пока выборкаСклад.Следующий()цикл Файл.ЗаписатьНачалоЭлемента("r"); Файл.ЗаписатьНачалоЭлемента("f"); файл.ЗаписатьТекст(выборкаСклад.склад.код); Такая ошибка. Выше писал {ВнешняяОбработка.Монолит21(687)}: Значение не является значением объектного типа (код) файл.ЗаписатьТекст(выборкаСклад.склад.код); |
|||
59
patria0muerte
30.12.14
✎
09:22
|
(58) Сам угадаешь почему ошибка?
|
|||
60
Любопытная
30.12.14
✎
09:22
|
(59) Мне кажется - он прикалывается.
|
|||
61
patria0muerte
30.12.14
✎
09:23
|
(60) Тогда талант. Я бы так при желании не смог.
|
|||
62
antihacker
30.12.14
✎
09:23
|
А ХЗ. Не стал бы спрашивать если знал.
|
|||
63
patria0muerte
30.12.14
✎
09:24
|
(62) А че взялся, если не знаешь?
|
|||
64
antihacker
30.12.14
✎
09:25
|
А ты родился сразу вундеркиндом ? Ни изучал и ни кто не помогал ?
|
|||
65
Любопытная
30.12.14
✎
09:26
|
(62) Судя по вопросам, ты даже не пытаешься понять, а это самое плохое. Попроси кого-нить написать это за тебя и не мучайся
|
|||
66
antihacker
30.12.14
✎
09:26
|
Так вед он код видел до левого соединения.
|
|||
67
antihacker
30.12.14
✎
09:27
|
Что тут изменилось. Вот что не могу понять.
|
|||
68
ktvladimir
30.12.14
✎
09:27
|
ыыы). смысл человеку объяснять? он не хочет понимать он хочет чтоб за него сделали. бог с ним с группировками и циклом, но чел тупо не хочет даже понимать что он делает.
|
|||
69
Любопытная
30.12.14
✎
09:27
|
(66) Еще раз: левое соединение у тебя со справочником Номенклатура, а ругается на поле Склад.Код. А склада нет, судя по всему.
|
|||
70
Любопытная
30.12.14
✎
09:28
|
(67) консоль запросов возьми, и посмотри, что у тебя выбирается в запросе, какие поля получаются, какие данные. Тогда станет понятнее, как их обрабатывать дальше
|
|||
71
antihacker
30.12.14
✎
09:29
|
Я хочу остатки нулевые и не нулевые. Сказали через левое соединения с справочником номенклатуры. Написал. Код не видит. Вот спрашиваю почему ? Если подсказали значить подскажите до конца.
|
|||
72
Любопытная
30.12.14
✎
09:30
|
(71) ПОТОМУ ЧТО КОД СКЛАДА, А НЕ НОМЕНКЛАТУРЫ!!!!!!!!!
|
|||
73
SeraFim
30.12.14
✎
09:32
|
(57) только ты там забыл соединение прописать. Опять тупизма на 50 постов будет...
|
|||
74
patria0muerte
30.12.14
✎
09:34
|
(73) О, кстати точно, не заметил...
|
|||
75
antihacker
30.12.14
✎
09:51
|
Любопытна, я там хочу видеть КОД склада. При чем тут номенклатура ?
И где я не написал соединение ? Вот код. Повторяю запрос=новый запрос; запрос.Текст="ВЫБРАТЬ | ТоварыНаСкладахОстатки.Склад КАК Склад, | СпрНоменклатура.Ссылка КАК Номенклатура, | СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток //| СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &ДатаОст, | Склад В (&выбСписСклады) | И Номенклатура.Монолит = ИСТИНА ) КАК ТоварыНаСкладахОстатки по СпрНоменклатура.Ссылка=Номенклатура | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Склад, | СпрНоменклатура.Ссылка |ИТОГИ | СУММА(КоличествоОстаток) |ПО | Склад, | Номенклатура"; датаост=конецдня(ДатаСозданияЗаказов); запрос.УстановитьПараметр("ДатаОст",датаост); выбСписСклады=новый списокзначений; выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("000000001")); выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("00000001t")); выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("000000098")); выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("000000091")); запрос.УстановитьПараметр("выбСписСклады",выбСписСклады); выборкаСклад=запрос.Выполнить().Выбрать(обходрезультатазапроса.ПоГруппировкам,"Склад"); пока выборкаСклад.Следующий()цикл Файл.ЗаписатьНачалоЭлемента("r"); Файл.ЗаписатьНачалоЭлемента("f"); файл.ЗаписатьТекст(выборкаСклад.склад.код); Файл.ЗаписатьКонецЭлемента(); Файл.ЗаписатьНачалоЭлемента("f"); |
|||
76
SeraFim
30.12.14
✎
09:58
|
(75) Ну нету у тебя склада!
На пальцах объясняю: Есть справочник номенклатуры: Колбаса Печеньки Тортик Остатки: Колбаса Склад 1 - 10 Колбаса Склад 2 - 15 Тортик Склад 2 - 7 А печенек нету нигде! Левое соединение означает, что нужно выбрать ВСЕ записи из первой таблицы и только НЕКОТОРЫЕ (удовлетворяющие условию соединения) из второй. То есть у тебя получается: Колбаса Колбаса Склад 1 - 10 Колбаса Колбаса Склад 2 - 15 Печеньки -------------------- Тортик Тортик Склад 2 - 7 |
|||
77
Бертыш
30.12.14
✎
10:20
|
Талант
|
|||
78
Peltzer
30.12.14
✎
10:24
|
в (25) я уже отвечал, почему ошибка, не пробил, нужно калибр побольше или бронепробитие повыше.
|
|||
79
antihacker
30.12.14
✎
11:15
|
Мало того что я не могу вытащить товар с нулевыми остатками а теперь еще и склад исчез ?
|
|||
80
hhhh
30.12.14
✎
11:24
|
(79) ну так
|ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК СпрСклады ПО ИСТИНА |
|||
81
antihacker
30.12.14
✎
12:01
|
Мдяяяя по п*****ли по п*****ли в итоге в все запросе увидели то чего хотят сами , а не то что хочу. Спасибо помогли )
|
|||
82
GROOVY
30.12.14
✎
12:56
|
antihacker, ну ты обращайся если что! С наступающим!
|
|||
83
Peltzer
30.12.14
✎
12:59
|
(81) у тебя талант не видеть решения, или ты сам не знаешь чего хочешь, с новым годом
|
|||
84
antihacker
30.12.14
✎
13:02
|
Ну япросил добить запрос. Там не выодит нулевые остатки. В и тоге ваш запрос не выводит и склад тоже. Вот результат.
тебя так же |
|||
85
Peltzer
30.12.14
✎
13:03
|
Слушай, а ты случайно не программист? А то мне тут надо отчетик написать, не поможешь?
|
|||
86
antihacker
30.12.14
✎
13:06
|
Надеюсь там не нужны нулевые остатки
|
|||
87
Peltzer
30.12.14
✎
13:08
|
Да не, просто тыща строчек кода забесплатно
|
|||
88
GROOVY
модератор
30.12.14
✎
13:11
|
(87) Заканчивай стебатся.
|
|||
89
antihacker
30.12.14
✎
13:11
|
Вроде я не просил за меня написать. Решение свой показал. Не на голом месте. Ну ребята не смогли значит не смогли. Зачем теперь отмазки какие то. Вопрос простой был.
|
|||
90
Black Dragon
30.12.14
✎
13:56
|
так консоль запросов то есть?
|
|||
91
ktvladimir
30.12.14
✎
14:35
|
(89) Смешно.
|
|||
92
antihacker
31.12.14
✎
09:08
|
Всем привет !
Все таки добил эту суку. выбСписСклады=новый списокзначений; выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("000000001")); выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("00000001t")); выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("000000098")); выбСписСклады.Добавить(справочники.Склады.НайтиПоКоду("000000091")); запрос.УстановитьПараметр("выбСписСклады",выбСписСклады); ДЛЯ КАЖДОГО склад ИЗ выбСписСклады ЦИКЛ // запрос по элементам запрос=новый запрос; запрос.Текст= "ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура , | ЕСТЬNULL(СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток),0) КАК КоличествоОстаток КоличествоОстаток |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | &ДатаОст, | Склад В (&выбСписСклады) | И Номенклатура.Монолит = ИСТИНА) КАК ТоварыНаСкладахОстатки | ПО СпрНоменклатура.Ссылка = Номенклатура ГДЕ СпрНоменклатура.Монолит = ИСТИНА СпрСклады ПО ИСТИНА выбСписСклады И СпрНоменклатура.Монолит=ИСТИНА И ТоварыНаСкладахОстатки.Период=&ДатаОст |СГРУППИРОВАТЬ ПО | СпрНоменклатура.Ссылка, | ТоварыНаСкладахОстатки.Номенклатура "; |
|||
93
ktvladimir
31.12.14
✎
09:31
|
из минусов не нужная группировка, запрос в цикле конструкция Номенклатура.Монолит = Истина (Если Монолит это булевый Тип то лучше было бы указать просто Номенклатура.Монолит)
|
|||
94
ktvladimir
31.12.14
✎
09:34
|
"ВЫБРАТЬ
| Спр.Ссылка КАК Номенклатура |ПОМЕСТИТЬ | втНоменклатура |ИЗ | Справочник.Номенклатура КАК Спр |ГДЕ | Спр.Монолит | |; | |ВЫБРАТЬ | СкладыНоменклатура.Номенклатура, | СкладыНоменклатура.Склад, | ЕСТЬNULL(Остатки.КоличествоОстаток,0) КАК КоличествоОстаток |ИЗ | (ВЫБРАТЬ | втНоменклатура.Номенклатура, | Спр.Склад, | ИЗ | втНоменклатура КАК втНоменклатура | ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Спр | ПО ИСТИНА | ГДЕ | Спр.Ссылка В (&выбСписСклады)) КАК СкладыНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | &ДатаОст, | Склад В (&выбСписСклады) | И Номенклатура В (ВЫБРАТЬ | Номенклатура | ИЗ | втНоменклатура)) КАК Остатки | ПО | СкладыНоменклатура.Номенклатура = Остатки.Номенклатура | И СкладыНоменклатура.Склад = Остатки.Склад |ИТОГИ ПО | Склад"; ВыборкаСклада = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСклада.Следующий() Цикл //Вывод склада Выборка = ВыборкаСклада.Выбрать(); Пока Выборка.Следующий() Цикл //Вывод номенклатуры и остатков КонецЦикла; КонецЦикла; |
|||
95
antihacker
31.12.14
✎
09:50
|
Зачем так усложнять ?
И если убрать группировку то {ВнешняяОбработка.Монолит21(719)}: Ошибка при вызове метода контекста (Выполнить): {(2, 4)}: Поле не входит в группу "СпрНоменклатура.Ссылка" <<?>>СпрНоменклатура.Ссылка КАК Номенклатура , выборкаТовар=запрос.Выполнить().Выбрать();//(обходрезультатазапроса.ПоГруппировкам,"СпрНоменклатура.Ссылка"); по причине: {(2, 4)}: Поле не входит в группу "СпрНоменклатура.Ссылка" <<?>>СпрНоменклатура.Ссылка КАК Номенклатура , |
|||
96
ktvladimir
31.12.14
✎
09:57
|
в твоем случае сервер будет дергаться н раз Н это количество складов. те ресурсов будет потрачен в н раз больше. если ты убираешь группировку то нужно убрать и конструкцию сумма.
в данном случае остатки тебе и так выдадут в единичном экземпляре и группировка бессмысленна, те в твоем коде | ЕСТЬNULL(СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток),0) КАК КоличествоОстаток заменить на | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток,0) КАК КоличествоОстаток и убрать строки |СГРУППИРОВАТЬ ПО | СпрНоменклатура.Ссылка, | ТоварыНаСкладахОстатки.Номенклатура |
|||
97
antihacker
31.12.14
✎
10:02
|
{ВнешняяОбработка.Монолит21(718)}: Ошибка при вызове метода контекста (Выполнить): {(3, 4)}: Поле не входит в группу "ТоварыНаСкладахОстатки.КоличествоОстаток"
<<?>>ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток выборкаТовар=запрос.Выполнить().Выбрать();//(обходрезультатазапроса.ПоГруппировкам,"СпрНоменклатура.Ссылка"); |
|||
98
ktvladimir
31.12.14
✎
10:09
|
сделай проще верни как было открой конструктором и удали строки с двух окошек справа на закладке Группировка "Групповое поле" и "Суммируемое поле". а так я вижу что ты что то не очистил, но что именно сказать не могу так как не вижу запроса. скопировать твой запрос тоже не могу так как у меня нет типовых баз)
|
|||
99
ktvladimir
31.12.14
✎
10:12
|
ну а вообще если ты убрал сумму в ЕСТЬNULL(СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток),0) КАК КоличествоОстаток
и удалил все группировки включая команду СГРУППИРОВАТЬ ВСЕ то все должно было работать.. что то не очистил |
|||
100
antihacker
31.12.14
✎
10:12
|
Да нет
Исправил. Тока вот пока что и склад тоже брать одним запросом потом обхдить по его группировке мозгов не хватает. Пробовал. Опять нулевые остатки исчезают. "ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура , | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | &ДатаОст, | Склад В (&выбСписСклады) | И Номенклатура.Монолит = ИСТИНА) КАК ТоварыНаСкладахОстатки | ПО СпрНоменклатура.Ссылка = Номенклатура ГДЕ СпрНоменклатура.Монолит = ИСТИНА "; |
|||
101
antihacker
31.12.14
✎
10:14
|
А вообще не знаю как писать два соединения в одном запросе
|
|||
102
ktvladimir
31.12.14
✎
10:26
|
ты убрал естьNULL
ТоварыНаСкладахОстатки.КоличествоОстаток должно быть ЕстьNULL(ТоварыНаСкладахОстатки.КоличествоОстаток,0) КАК КоличествоОстаток |
|||
103
ktvladimir
31.12.14
✎
10:34
|
(100, 101) я привел пример кода в (94)
Сперва мы получаем таблицу необходимой нам номенклатуры с отбором по монолитом далее мы делаем декартово произведение номенклатур и складов те для каждой номенклатуры приделываем склад из спсика, потом к этой таблицы левым соединением цепляем остатки, таким образом получаем для КАЖДОЙ номенклатуры и склада остаток. 0 Если такого остатка нет (конструкция естьNULL) |
|||
104
ktvladimir
31.12.14
✎
10:40
|
далее я описал как делать выборку
ВыборкаСклада = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСклада.Следующий() Цикл те тут мы получаем информацию о складе ВыборкаСклада.Склад Выборка = ВыборкаСклада.Выбрать(); Пока Выборка.Следующий() Цикл // тут уже доступ ко всей остальной информации через выборка. КонецЦикла; КонецЦикла; это мы получили исходя из ИТОГИ ПО | Склад те у нас есть группировка склад и вторая это детальные записи те все поля если бы у нас было скажем ИТОГИ ПО | Склад, Номенклатура то было бы ВыборкаСклада = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСклада.Следующий() Цикл //Склад ВыборкаСклада.Склад ВыборкаНоменклатуры = ВыборкаСклада.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатуры .Следующий() Цикл // Номенклатура ВыборкаНоменклатуры .Номенклатура Выборка = ВыборкаНоменклатуры.Выбрать(); Пока Выборка.Следующий().... КонецЦикла; КонецЦикла; КонецЦикла; |
|||
105
antihacker
31.12.14
✎
12:08
|
Брат, спасибо что так стараешься !
|
|||
106
tank68
31.12.14
✎
13:09
|
http://1c-wiki.ru/wiki/Ежедневные_остатки
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |