|
Помогите, запутался в 2х запросах. | ☑ | ||
---|---|---|---|---|
0
PuhUfa
23.11.17
✎
11:23
|
Есть запрос №1
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Док.Номенклатура.Представление КАК НоменклатураПредставление, | Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление, | Док.Склад КАК Склад, | Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | Док.СерияНоменклатуры КАК СерияНоменклатуры, | &Комиссионер КАК Комиссионер, | СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК ЧИСЛО(15, 3))) КАК ДокументКоличество, | ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) КАК ОстатокКоличество, | Остатки.Организация |ИЗ | (ВЫБРАТЬ | Док.Номенклатура КАК Номенклатура, | Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | Док.СерияНоменклатуры КАК СерияНоменклатуры, | Док.Коэффициент КАК Коэффициент, | Док.Качество КАК Качество, | Док.Склад КАК Склад, | Док.Количество КАК Количество | ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК Док | ГДЕ | Док.Ссылка = &ДокументСсылка | И НЕ Док.Номенклатура.Комплект | И НЕ Док.Номенклатура.Услуга) КАК Док | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки( | , | Номенклатура В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | Документ.РеализацияТоваровУслуг.Товары.Номенклатура | ИЗ | Документ.РеализацияТоваровУслуг.Товары | ГДЕ | Документ.РеализацияТоваровУслуг.Товары.Ссылка = &ДокументСсылка | И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Комплект | И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Услуга) | И Организация = &Организация | И Комиссионер = &Комиссионер) КАК Остатки | ПО Док.Номенклатура = Остатки.Номенклатура | И Док.ХарактеристикаНоменклатуры = Остатки.ХарактеристикаНоменклатуры | И Док.СерияНоменклатуры = Остатки.СерияНоменклатуры | И Док.Качество = Остатки.Качество | |СГРУППИРОВАТЬ ПО | Док.Номенклатура, | Док.ХарактеристикаНоменклатуры, | Док.СерияНоменклатуры, | Док.Качество, | Док.Склад, | Док.Номенклатура.Представление, | Док.Номенклатура.ЕдиницаХраненияОстатков.Представление, | Остатки.Организация | |ДЛЯ ИЗМЕНЕНИЯ | РегистрНакопления.ТоварыОрганизаций.Остатки"; Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка.Ссылка); Запрос.УстановитьПараметр("Организация", ДокументСсылка.Организация); Запрос.УстановитьПараметр("Комиссионер", Справочники.Контрагенты.ПустаяСсылка()); Результат = Запрос.Выполнить().Выгрузить(); Результат: Товар А ДокументКоличество - 1 ОстатокКоличество - 1 Есть Запрос №2 (он одет сразу поле первого в одной процедуре) и представляет из себя кусок первого запроса (левое соединение в первом) З = Новый Запрос; З.Текст = "ВЫБРАТЬ | ТоварыОрганизацийОстатки.Организация, | ТоварыОрганизацийОстатки.Номенклатура, | ТоварыОрганизацийОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыОрганизаций.Остатки( | , | Номенклатура В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | Документ.РеализацияТоваровУслуг.Товары.Номенклатура | ИЗ | Документ.РеализацияТоваровУслуг.Товары | ГДЕ | Документ.РеализацияТоваровУслуг.Товары.Ссылка = &ДокументСсылка | И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Комплект | И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Услуга) | И Организация = &Организация | И Комиссионер = &Комиссионер) КАК ТоварыОрганизацийОстатки"; з.УстановитьПараметр("ДокументСсылка", ДокументСсылка.Ссылка); з.УстановитьПараметр("Организация", ДокументСсылка.Организация); з.УстановитьПараметр("Комиссионер", Справочники.Контрагенты.ПустаяСсылка()); р = з.Выполнить().Выгрузить(); В результате этого запроса я получаю КоличествоОстаток = 0 Как так? Почему в первом запросе, в результате левого соединения Остаток = 1... а во втором запросе Остаток = 0 |
|||
1
DrShad
23.11.17
✎
11:25
|
оба запроса в топку
|
|||
2
PuhUfa
23.11.17
✎
11:27
|
(1) это не ко мне... это типовой из УТ 10
|
|||
3
DrShad
23.11.17
✎
11:27
|
во втором запросе не выбираются характеристики
|
|||
4
DrShad
23.11.17
✎
11:28
|
(2) и все равно в топку
|
|||
5
PuhUfa
23.11.17
✎
11:32
|
(4) второй запрос возвращает пустой результат т.к. остатков нет... и это правильно...
но в первом запросе, когда идет левое соединение вдруг возникает остаток = 1... как может возникнуть остаток = 1 при левом соединение к пустой таблице? |
|||
6
DrShad
23.11.17
✎
11:32
|
(5) ты реально не видишь разницы в запросах?
|
|||
7
PuhUfa
23.11.17
✎
11:37
|
(6) Нет, не вижу. Видел бы не просил помощи.
Проблема эта наблюдается только для 1 накладной... если в качестве параметра запроса указывать другую накладную (в т.ч. которой тоже товар с 0 остатком) то результаты запросов идентичны и правильны. |
|||
8
DrShad
23.11.17
✎
11:38
|
(7) читать (3) до просветления
|
|||
9
dezss
23.11.17
✎
11:39
|
(8) опередил)
|
|||
10
PuhUfa
23.11.17
✎
11:44
|
З = Новый Запрос;
З.Текст = "ВЫБРАТЬ | ТоварыОрганизацийОстатки.Организация, | ТоварыОрганизацийОстатки.Номенклатура, | ТоварыОрганизацийОстатки.КоличествоОстаток, | ТоварыОрганизацийОстатки.ХарактеристикаНоменклатуры |ИЗ | РегистрНакопления.ТоварыОрганизаций.Остатки( | , | Номенклатура В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | Документ.РеализацияТоваровУслуг.Товары.Номенклатура | ИЗ | Документ.РеализацияТоваровУслуг.Товары | ГДЕ | Документ.РеализацияТоваровУслуг.Товары.Ссылка = &ДокументСсылка | И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Комплект | И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Услуга) | И Организация = &Организация | И Комиссионер = &Комиссионер) КАК ТоварыОрганизацийОстатки"; з.УстановитьПараметр("ДокументСсылка", ДокументСсылка.Ссылка); з.УстановитьПараметр("Организация", ДокументСсылка.Организация); з.УстановитьПараметр("Комиссионер", Справочники.Контрагенты.ПустаяСсылка()); р = з.Выполнить().Выгрузить(); результат запроса пустой. т.к. з.УстановитьПараметр("Организация", ДокументСсылка.Организация); нет по этой Организации остатков ни с какими характеристиками |
|||
11
Torquader
23.11.17
✎
11:54
|
Второй запрос выбирает данные из документов "Поступление" не проверяя проведённость - ну,ну.
|
|||
12
Torquader
23.11.17
✎
12:03
|
И ещё, по количеству обычно суммируют.
В первом запросе мы получим максимум, а во-втором, несколько записей для одной номенклатуры, т.к. могут быть характеристики и т.п. |
|||
13
PuhUfa
23.11.17
✎
12:10
|
"Управление торговлей", редакция 10.3 (10.3.31.2)
Модуль набора записей РН ТоварыОрганизаций Процедура КонтрольОстатков(ДокументОбъект, ИмяТабличнойЧасти, СтруктураШапкиДокумента, Отказ, Заголовок) Экспорт И повторю, что косяк для 1 конкретной РТиУ... для других все работает правильно. Сейчас попробую итоги пересчитать. |
|||
14
DrShad
23.11.17
✎
12:18
|
(13) такое написано в модуле набора записей!? ужас
|
|||
15
yavasya
23.11.17
✎
12:18
|
(3) + серии не учитываются во втором запросе
|
|||
16
DrShad
23.11.17
✎
12:18
|
интересно откуда в модуле НЗ ссылка на док? )))
|
|||
17
Torquader
23.11.17
✎
12:21
|
(16) Магическое слово "Экспорт" позволяет творить чудеса, только вот зачем ?
|
|||
18
DrShad
23.11.17
✎
12:22
|
(17) вот не верю я что это типовой запрос
|
|||
19
PuhUfa
23.11.17
✎
12:29
|
(18) можешь скачать и проверить -) смысла мне тут что то пидумывать
|
|||
20
DrShad
23.11.17
✎
12:30
|
(19) потому что в этом запросе нет смысла, т.к. ТО не только РТиУ двигает
|
|||
21
PuhUfa
23.11.17
✎
12:34
|
(20) так эта процедура не делает движений по регистру. ее с таким же успехом можно в общий модуль вынести... но вот решили в 1С запилить ее в модуль набора записей с "Экспорт"
|
|||
22
h-sp
23.11.17
✎
12:55
|
(21) открыл этот модуль, там вообще другое. Чего вы тут гоните?
|
|||
23
PuhUfa
23.11.17
✎
13:14
|
(22) поставьте точку останова во время проведения документа и посмотрите отладчиком собранный запрос.
Смысл суда выкладывать портянку на 3 экрана вида: Запрос.Текст = " |ВЫБРАТЬ // Запрос, контролирующий остатки на складах | Док.Номенклатура.Представление КАК НоменклатураПредставление, | Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление," +?(ЕстьСкладВТабЧасти, " |Док.Склад КАК Склад,","") + ?(ЕстьХарактеристика, " | Док." + ТекстХарактеристикаНоменклатуры + " КАК ХарактеристикаНоменклатуры," ,"") + ?(ЕстьСерия, " | Док." + ТекстСерияНоменклатуры + " КАК СерияНоменклатуры," ,"") + " | &Комиссионер КАК Комиссионер," + ?(ЕстьКоэффициент, " | СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) КАК ДокументКоличество,", " | СУММА(Док.Количество) КАК ДокументКоличество,") + " | ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) КАК ОстатокКоличество, | ЕСТЬNULL(МАКСИМУМ(ОстаткиКПередаче.КоличествоОстаток), 0) КАК ОстатокКПередаче, | 0 КАК ОстатокКПередачеПоДокументу |ИЗ | "+ ТекстЗапросаРеквизитыДокумента + " Такой текст совершенно нечитабелен на форуме |
|||
24
Torquader
23.11.17
✎
13:30
|
(22) Он, скорей всего, его текст через отладчик выдрал, т.к. в типовых просто запросов без сборки текста просто нет.
|
|||
25
h-sp
23.11.17
✎
13:33
|
(24) там в первом запросе чисто физически нет обращения к регистру
|
|||
26
PuhUfa
23.11.17
✎
13:43
|
(25) а при чем тут первый запрос который в типовой процедуре? вы процедуру то до конца дочитайте.
зы пересчет итогов не помог. но помогло старое доброе перепроведение ручками документов по этому товару. вечером проверю на рабочей базе. |
|||
27
LeReve
23.11.17
✎
13:44
|
(23) Кастрировать тех, кто пишет такие запросы...
|
|||
28
h-sp
23.11.17
✎
13:54
|
(26) ну вы читайте (0)
Есть Запрос №2 (он одет сразу поле первого в одной процедуре) и представляет из себя кусок первого запроса сами же написали. А если открыть типовую, в первом запросе вообще нет обращения к остаткам. Непонятно откуда вы вообще его откопали. Думаю, два раза маханули второй запрос, но с разными данными. |
|||
29
PuhUfa
23.11.17
✎
14:00
|
(28) а я где то написал что запрос №2 из (0) есть в типовой? -)
В (0) первый запрос выдранный отладчиком из типовой процедуры и помещен во внешнюю обработку для отладки. второй запрос это часть первого и тоже находиться во внешней обработке сразу за первым... в одной процедуре -) Если я где то немного не ясно выразился, ну прошу прощения -) Суть то вопроса в (0) была по результатам этих самых запросов. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |