Запрос

1. Tsprogrammist1 85 15.01.09 13:41 Сейчас в теме
Всем привет.
Это задача не имеет ничего общего с реальными задачами :) (просто учусь писать запросы)...

Задача такая: находим документ РеализацияТоваровУслугТовары мне нужно получить остатки по всем номенкл. из табличной части "Товары".

Проблема: Сообщение выводиться столько раз сколько строк в документе... но РезультатЗапроса.Субконто1(сче 41.1 номенклатура)-пустое значение, а РезультатЗапроса.Номенклатура-нормально выводит подскажите плиз че не так?

Запрос=Новый Запрос;
    Запрос.УстановитьПараметр("ДатаКон",ПолеВвода1);
    Запрос.УстановитьПараметр("СчетФормы",СчетФорм1); //сче 41.1
    Запрос.УстановитьПараметр("номерДок",Номер1);
    Запрос.УстановитьПараметр("ОрганизацияФ",Орг);
    Запрос.УстановитьПараметр("СкладФ",Склад1);
    Запрос.УстановитьПараметр("номерДок",СокрЛП(Номер1));
    Запрос.Текст=
    "ВЫБРАТЬ
    |    РеализацияТоваровУслугТовары.Номенклатура,
    |    ХозрасчетныйОстатки.КоличествоОстаток,
    |    ХозрасчетныйОстатки.КоличествоОстатокКт,
    |    ХозрасчетныйОстатки.КоличествоОстатокДт,
    |    ХозрасчетныйОстатки.Субконто1
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
    |                &ДатаКон,
    |                Счет.Код = &СчетФормы,
    |                ,
    |                Организация = &ОрганизацияФ
    |                    И Субконто2 = &СкладФ) КАК ХозрасчетныйОстатки
    |        ПО РеализацияТоваровУслугТовары.Номенклатура = ХозрасчетныйОстатки.Субконто1
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |        ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка
    |ГДЕ
    |    РеализацияТоваровУслуг.Номер = &номерДок"
    ;
    РезультатЗапроса=Запрос.Выполнить().Выбрать();
    
    Пока РезультатЗапроса.Следующий()Цикл
         Сообщить(""+РезультатЗапроса.Номенклатура+РезультатЗапроса.Субконто1+" "+РезультатЗапроса.КоличествоОстаток+" "+РезультатЗапроса.КоличествоОстатокДт);
    КонецЦикла;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. menicheka 11 16.01.09 08:12 Сейчас в теме
не нужно использовать лишние таблицы - достаточно было прописать :
РеализацияТоваровУслугТовары.Ссылка.Номер = &номерДок
и счет. код - заменить на счет.ссылка - и передовать туда ссылку Счета
6. tsd 106 18.01.09 14:58 Сейчас в теме
Можно так
"ВЫБРАТЬ
|   ВложенныйЗапрос.Номенклатура КАК Номенклатура,
|   ХозрасчетныйОстатки.СуммаОстаток КАК Сумма,
|   ХозрасчетныйОстатки.КоличествоОстаток КАК Количество
|ИЗ
|  (ВЫБРАТЬ
|  РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
|  ИЗ
|  Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|  ГДЕ
|  РеализацияТоваровУслугТовары.Ссылка = &Реализация) КАК ВложенныйЗапрос
|  ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&ПериодОтчета, Счет = &СчетНоменклатуры, , ) КАК ХозрасчетныйОстатки
|  ПО ВложенныйЗапрос.Номенклатура = ХозрасчетныйОстатки.Субконто1
|ИТОГИ
|  СУММА(Сумма),
|  СУММА(Количество)
|ПО
|  ОБЩИЕ,
|  Номенклатура"

Показать


(2) вот интересно, сколько документов будет отобрано в запрос если уникальность номеров документов данного вида в пределах года и мы имеем базу за пару-тройку лет?


Кстати, не стоит в запросах получать полные ссылки на объекты. Имеется в виду следующее,
если Вы выбирете РеализацияТоваровУслугТовары.Номенклатура, то фактически получите указатель на объект, а если выбирете РеализацияТоваровУслугТовары.Номенклатура.ССЫЛКА, то фактически получите полную ссылку на объект (читайте точка фактически работает как левое соединение в запросе), т.е. будут подтянуты все связанные данные, что может резко замедлить скорость работы запросов. Особенно это заметно на достаточно объемных базах.
7. alexk-is 6546 18.01.09 16:34 Сейчас в теме
(6) Что означает "получите полную ссылку на объект"? Где можно почитать про полную ссылку? И чем "указатель на объект" отличается от ссылки?
3. menicheka 11 16.01.09 08:19 Сейчас в теме
ну вот так например:

|ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура,
| ХозрасчетныйОстатки.КоличествоОстаток,
| ХозрасчетныйОстатки.КоличествоОстатокКт,
| ХозрасчетныйОстатки.КоличествоОстатокДт
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
| &ДатаКон,
| Счет.Ссылка = &СчетФормы,
| ,
| Организация = &ОрганизацияФ
| И Субконто3 = &СкладФ) КАК ХозрасчетныйОстатки
| ПО РеализацияТоваровУслугТовары.Номенклатура = ХозрасчетныйОстатки.Субконто1
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Ссылка = &СсылкаДок
4. Tsprogrammist1 85 16.01.09 18:01 Сейчас в теме
5. alexk-is 6546 18.01.09 13:58 Сейчас в теме
Может так?
Запрос = Новый Запрос("
|ВЫБРАТЬ
|    РеализацияТоваровУслугТовары.Номенклатура,
|    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
|    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстатокКт, 0) КАК КоличествоОстатокКт,
|    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстатокДт, 0) КАК КоличествоОстатокДт
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
|                &ДатаКон,
|                Счет = &СчетФормы,
|                ,
|                Организация = &ОрганизацияФ
|                    И Субконто3 = &СкладФ
|                    И Субконто1 В
|                        (ВЫБРАТЬ
|                            РеализацияТоваровУслугТовары.Номенклатура
|                        ИЗ
|                            Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|                        ГДЕ
|                            РеализацияТоваровУслугТовары.Ссылка = &СсылкаДок)) КАК ХозрасчетныйОстатки
|        ПО РеализацияТоваровУслугТовары.Номенклатура = ХозрасчетныйОстатки.Субконто1
|            И (РеализацияТоваровУслугТовары.Ссылка = &СсылкаДок)");

Показать
8. Tsprogrammist1 85 19.01.09 22:17 Сейчас в теме
Всем огромное СПАСИБО, все получилось :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот