Вход | Регистрация


1С:Предприятие ::

Метки: 

Помогите, запутался в 2х запросах.

Я
   PuhUfa
 
23.11.17 - 11:23
Есть запрос №1

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Док.Номенклатура.Представление КАК НоменклатураПредставление,
        |    Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
        |    Док.Склад КАК Склад,
        |    Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |    Док.СерияНоменклатуры КАК СерияНоменклатуры,
        |    &Комиссионер КАК Комиссионер,
        |    СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК ЧИСЛО(15, 3))) КАК ДокументКоличество,
        |    ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0) КАК ОстатокКоличество,
        |    Остатки.Организация
        |ИЗ
        |    (ВЫБРАТЬ
        |        Док.Номенклатура КАК Номенклатура,
        |        Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |        Док.СерияНоменклатуры КАК СерияНоменклатуры,
        |        Док.Коэффициент КАК Коэффициент,
        |        Док.Качество КАК Качество,
        |        Док.Склад КАК Склад,
        |        Док.Количество КАК Количество
        |    ИЗ
        |        Документ.РеализацияТоваровУслуг.Товары КАК Док
        |    ГДЕ
        |        Док.Ссылка = &ДокументСсылка
        |        И НЕ Док.Номенклатура.Комплект
        |        И НЕ Док.Номенклатура.Услуга) КАК Док
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки(
        |                ,
        |                Номенклатура В
        |                        (ВЫБРАТЬ РАЗЛИЧНЫЕ
        |                            Документ.РеализацияТоваровУслуг.Товары.Номенклатура
        |                        ИЗ
        |                            Документ.РеализацияТоваровУслуг.Товары
        |                        ГДЕ
        |                            Документ.РеализацияТоваровУслуг.Товары.Ссылка = &ДокументСсылка
        |                            И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Комплект
        |                            И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Услуга)
        |                    И Организация = &Организация
        |                    И Комиссионер = &Комиссионер) КАК Остатки
        |        ПО Док.Номенклатура = Остатки.Номенклатура
        |            И Док.ХарактеристикаНоменклатуры = Остатки.ХарактеристикаНоменклатуры
        |            И Док.СерияНоменклатуры = Остатки.СерияНоменклатуры
        |            И Док.Качество = Остатки.Качество
        |
        |СГРУППИРОВАТЬ ПО
        |    Док.Номенклатура,
        |    Док.ХарактеристикаНоменклатуры,
        |    Док.СерияНоменклатуры,
        |    Док.Качество,
        |    Док.Склад,
        |    Док.Номенклатура.Представление,
        |    Док.Номенклатура.ЕдиницаХраненияОстатков.Представление,
        |    Остатки.Организация
        |
        |ДЛЯ ИЗМЕНЕНИЯ
        |    РегистрНакопления.ТоварыОрганизаций.Остатки";
    

    Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка.Ссылка);
    Запрос.УстановитьПараметр("Организация",    ДокументСсылка.Организация);
    Запрос.УстановитьПараметр("Комиссионер",      Справочники.Контрагенты.ПустаяСсылка());

Результат = Запрос.Выполнить().Выгрузить();

Результат:
Товар А
ДокументКоличество - 1
ОстатокКоличество - 1

Есть Запрос №2 (он одет сразу поле первого в одной процедуре) и представляет из себя кусок первого запроса (левое соединение в первом)

    З = Новый Запрос;
    З.Текст = 
        "ВЫБРАТЬ
        |    ТоварыОрганизацийОстатки.Организация,
        |    ТоварыОрганизацийОстатки.Номенклатура,
        |    ТоварыОрганизацийОстатки.КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.ТоварыОрганизаций.Остатки(
        |            ,
        |            Номенклатура В
        |                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        |                        Документ.РеализацияТоваровУслуг.Товары.Номенклатура
        |                    ИЗ
        |                        Документ.РеализацияТоваровУслуг.Товары
        |                    ГДЕ
        |                        Документ.РеализацияТоваровУслуг.Товары.Ссылка = &ДокументСсылка
        |                        И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Комплект
        |                        И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Услуга)
        |                И Организация = &Организация
        |                И Комиссионер = &Комиссионер) КАК ТоварыОрганизацийОстатки";
    
    з.УстановитьПараметр("ДокументСсылка", ДокументСсылка.Ссылка);
    з.УстановитьПараметр("Организация",    ДокументСсылка.Организация);
    з.УстановитьПараметр("Комиссионер",     Справочники.Контрагенты.ПустаяСсылка());

    р = з.Выполнить().Выгрузить();

В результате этого запроса я получаю 
КоличествоОстаток = 0

Как так? Почему в первом запросе, в результате левого соединения Остаток = 1... а во втором запросе Остаток = 0
 
  Рекламное место пустует
   DrShad
 
1 - 23.11.17 - 11:25
оба запроса в топку
   PuhUfa
 
2 - 23.11.17 - 11:27
(1) это не ко мне... это типовой из УТ 10
   DrShad
 
3 - 23.11.17 - 11:27
во втором запросе не выбираются характеристики
   DrShad
 
4 - 23.11.17 - 11:28
(2) и все равно в топку
   PuhUfa
 
5 - 23.11.17 - 11:32
(4) второй запрос возвращает пустой результат т.к. остатков нет... и это правильно...
но в первом запросе, когда идет левое соединение вдруг возникает остаток = 1... как может возникнуть остаток = 1 при левом соединение к пустой таблице?
   DrShad
 
6 - 23.11.17 - 11:32
(5) ты реально не видишь разницы в запросах?
   PuhUfa
 
7 - 23.11.17 - 11:37
(6) Нет, не вижу. Видел бы не просил помощи.
Проблема эта наблюдается только для 1 накладной... если в качестве параметра запроса указывать другую накладную (в т.ч. которой тоже товар с 0 остатком) то результаты запросов идентичны и правильны.
   DrShad
 
8 - 23.11.17 - 11:38
(7) читать (3) до просветления
   dezss
 
9 - 23.11.17 - 11:39
(8) опередил)
   PuhUfa
 
10 - 23.11.17 - 11:44
З = Новый Запрос;
    З.Текст = 
        "ВЫБРАТЬ
        |    ТоварыОрганизацийОстатки.Организация,
        |    ТоварыОрганизацийОстатки.Номенклатура,
        |    ТоварыОрганизацийОстатки.КоличествоОстаток,
        |    ТоварыОрганизацийОстатки.ХарактеристикаНоменклатуры
        |ИЗ
        |    РегистрНакопления.ТоварыОрганизаций.Остатки(
        |            ,
        |            Номенклатура В
        |                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        |                        Документ.РеализацияТоваровУслуг.Товары.Номенклатура
        |                    ИЗ
        |                        Документ.РеализацияТоваровУслуг.Товары
        |                    ГДЕ
        |                        Документ.РеализацияТоваровУслуг.Товары.Ссылка = &ДокументСсылка
        |                        И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Комплект
        |                        И НЕ Документ.РеализацияТоваровУслуг.Товары.Номенклатура.Услуга)
        |                И Организация = &Организация
        |                И Комиссионер = &Комиссионер) КАК ТоварыОрганизацийОстатки";
    
    з.УстановитьПараметр("ДокументСсылка", ДокументСсылка.Ссылка);
    з.УстановитьПараметр("Организация",    ДокументСсылка.Организация);
    з.УстановитьПараметр("Комиссионер",     Справочники.Контрагенты.ПустаяСсылка());

    р = з.Выполнить().Выгрузить();


результат запроса пустой.
т.к. з.УстановитьПараметр("Организация",    ДокументСсылка.Организация);
нет по этой Организации остатков ни с какими характеристиками
 
  Рекламное место пустует
   Torquader
 
11 - 23.11.17 - 11:54
Второй запрос выбирает данные из документов "Поступление" не проверяя проведённость - ну,ну.
   Torquader
 
12 - 23.11.17 - 12:03
И ещё, по количеству обычно суммируют.
В первом запросе мы получим максимум, а во-втором, несколько записей для одной номенклатуры, т.к. могут быть характеристики и т.п.
   PuhUfa
 
13 - 23.11.17 - 12:10
"Управление торговлей", редакция 10.3 (10.3.31.2)
Модуль набора записей РН ТоварыОрганизаций
Процедура КонтрольОстатков(ДокументОбъект, ИмяТабличнойЧасти, СтруктураШапкиДокумента, Отказ, Заголовок) Экспорт

И повторю, что косяк для 1 конкретной РТиУ... для других все работает правильно.
Сейчас попробую итоги пересчитать.
   DrShad
 
14 - 23.11.17 - 12:18
(13) такое написано в модуле набора записей!? ужас
   yavasya
 
15 - 23.11.17 - 12:18
(3) + серии не учитываются во втором запросе
   DrShad
 
16 - 23.11.17 - 12:18
интересно откуда в модуле НЗ ссылка на док? )))
   Torquader
 
17 - 23.11.17 - 12:21
(16) Магическое слово "Экспорт" позволяет творить чудеса, только вот зачем ?
   DrShad
 
18 - 23.11.17 - 12:22
(17) вот не верю я что это типовой запрос
   PuhUfa
 
19 - 23.11.17 - 12:29
(18) можешь скачать и проверить -) смысла мне тут что то пидумывать
   DrShad
 
20 - 23.11.17 - 12:30
(19) потому что в этом запросе нет смысла, т.к. ТО не только РТиУ двигает
   PuhUfa
 
21 - 23.11.17 - 12:34
(20) так эта процедура не делает движений по регистру. ее с таким же успехом можно в общий модуль вынести... но вот решили в 1С запилить ее в модуль набора записей с "Экспорт"
   h-sp
 
22 - 23.11.17 - 12:55
(21) открыл этот модуль, там вообще другое. Чего вы тут гоните?
   PuhUfa
 
23 - 23.11.17 - 13:14
(22) поставьте точку останова во время проведения документа и посмотрите отладчиком собранный запрос.
Смысл суда выкладывать портянку на 3 экрана вида:

    Запрос.Текст = "
    |ВЫБРАТЬ// Запрос, контролирующий остатки на складах

    |    Док.Номенклатура.Представление                         КАК НоменклатураПредставление,
    |    Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,"
    +?(ЕстьСкладВТабЧасти, "
    |Док.Склад                                                КАК Склад,","")
    + ?(ЕстьХарактеристика, "
    |    Док." + ТекстХарактеристикаНоменклатуры + "           КАК ХарактеристикаНоменклатуры,"
    ,"")
    + ?(ЕстьСерия, "
    |    Док." + ТекстСерияНоменклатуры + "                    КАК СерияНоменклатуры,"
    ,"") + "
    |   &Комиссионер                                           КАК Комиссионер," 
    + ?(ЕстьКоэффициент, "
    |    СУММА(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент /Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) КАК ДокументКоличество,", "
    |    СУММА(Док.Количество)                                  КАК ДокументКоличество,") + "
    |    ЕСТЬNULL(МАКСИМУМ(Остатки.КоличествоОстаток), 0)          КАК ОстатокКоличество,
    |    ЕСТЬNULL(МАКСИМУМ(ОстаткиКПередаче.КоличествоОстаток), 0) КАК ОстатокКПередаче,
    |    0                                                      КАК ОстатокКПередачеПоДокументу
    |ИЗ 
    |    "+ ТекстЗапросаРеквизитыДокумента + "


Такой текст совершенно нечитабелен на форуме
   Torquader
 
24 - 23.11.17 - 13:30
(22) Он, скорей всего, его текст через отладчик выдрал, т.к. в типовых просто запросов без сборки текста просто нет.
   h-sp
 
25 - 23.11.17 - 13:33
(24) там в первом запросе чисто физически нет обращения к регистру
   PuhUfa
 
26 - 23.11.17 - 13:43
(25) а при чем тут первый запрос который в типовой процедуре? вы процедуру то до конца дочитайте.


зы пересчет итогов не помог. но помогло старое доброе перепроведение ручками документов по этому товару. вечером проверю на рабочей базе.
   LeReve
 
27 - 23.11.17 - 13:44
(23) Кастрировать тех, кто пишет такие запросы...
   h-sp
 
28 - 23.11.17 - 13:54
(26) ну вы читайте (0)

Есть Запрос №2 (он одет сразу поле первого в одной процедуре) и представляет из себя кусок первого запроса

сами же написали.

А если открыть типовую, в первом запросе вообще нет обращения к остаткам. Непонятно откуда вы вообще его откопали. Думаю, два раза маханули второй запрос, но с разными данными.
   PuhUfa
 
29 - 23.11.17 - 14:00
(28) а я где то написал что запрос №2 из (0) есть в типовой? -)
В (0) первый запрос выдранный отладчиком из типовой процедуры и помещен во внешнюю обработку для отладки. второй запрос это часть первого и тоже находиться во внешней обработке сразу за первым... в одной процедуре -)
Если я где то немного не ясно выразился, ну прошу прощения -) Суть то вопроса в (0) была по результатам этих самых запросов.



Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует