Имя: Пароль:
1C
1C 7.7
v7: Помогите с запросом
, , ,
0 Mad88
 
20.09.17
12:35
Добрый день
//Остатки
РегОТ=СоздатьОбъект("Регистр.Склад");
Остатки = РегОТ.СводныйОстаток(,Товары.Номенклатура,,"Количество");
//Запрос
ТТ=СоздатьОбъект("ТаблицаЗначений");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Запросище)
|Подразделение = Регистр.Склад.Подразделение;
|Количество = Регистр.Склад.Количество;
|Функция КоличествоКонОст = КонОст(Количество);
|Условие(Номенклатура = Товары.Номенклатура);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    //Возврат;
КонецЕсли;
Запрос.Выгрузить(ТТ,0,0);
Пока ТТ.ПолучитьСтроку()=1 Цикл
    Сообщить(ТТ.КоличествоКонОст);
КонецЦикла;

В общем вот запрос, выгружаю его в ТЗ, затем делаю цикл по ТЗ, но в цикле делается ровно 0 итерацияй, то есть в Сообщить() не заходит, остатки есть, подскажите что делаю не так.
1 Джинн
 
20.09.17
12:39
Условие кривое.
2 Джинн
 
20.09.17
12:40
Да и период неплохо бы.
3 Builder
 
20.09.17
12:44
(2) Период не обязательно, остатки же.
А вот условие не в тему совсем.
4 Builder
 
20.09.17
12:47
Да и вообще зачем запрос если остаток уже получен тут:
Остатки = РегОТ.СводныйОстаток(,Товары.Номенклатура,,"Количество");
5 Mad88
 
20.09.17
12:53
(4) Хочу получить данные запросом, и что не так с условием? Мне по конкретной номенклатуре надо
6 Herby
 
20.09.17
12:53
условие возможно кривое, ну и группировки у тебя нет. а итоги ты в ТТ не выгружаешь
7 Builder
 
20.09.17
12:56
Для начала добавить в запрос номенклатуру.
|Номенклатура  = Регистр.Номенклатура;
8 Builder
 
20.09.17
12:57
+ к (7)
|Номенклатура  = Регистр.Склад.Номенклатура;
9 Джинн
 
20.09.17
12:58
(3) Тогда только не ТА будут.
10 1dvd
 
20.09.17
13:00
(5) Товары - эт чо?
11 Mad88
 
20.09.17
13:04
(10) Товары это табличная часть справочники, там все нормально так конкретная Номенклатура
12 1dvd
 
20.09.17
13:05
(11) и давно в клюшках у ТЧ есть имя?
13 Herby
 
20.09.17
13:15
(11) однако)
14 Mad88
 
20.09.17
13:20
(12) Ну кароче это справочник который выступает в роли табличной части
15 toypaul
 
гуру
20.09.17
13:21
без Группировка не будет работать
16 toypaul
 
гуру
20.09.17
13:22
вот что бывает когда 8шнки в 7ку лезут :)
17 Mad88
 
20.09.17
13:37
Не знаю мужики написал вот так

"//{{ЗАПРОС(Запросище)
|Номенклатура = Регистр.Склад.Номенклатура
|Количество = Регистр.Склад.Количество
|Функция КоличествоКонОст = КонОст(Количество)
|Группировка Номенклатура
|Условие(Номенклатура) = Товары.Номенклатура
|"//}}ЗАПРОС

Но чего - то не работает, возможно я чего то не понимаю.
18 Ёпрст
 
20.09.17
13:39
(17) Тебе еще в начале обсуждения сказали:
выкинь вот это |Условие(Номенклатура) = Товары.Номенклатура

к едрени фени.
19 Ёпрст
 
20.09.17
13:39
потом, сообщи общественности, что есть Товары у тебя
20 Ёпрст
 
20.09.17
13:39
ну и ; везде отсутствует в тексте запроса.
21 Zypse
 
20.09.17
13:50
(0) Мда
Перед циклом нужно ТТ.Выбратьстроки()
22 Mad88
 
20.09.17
13:53
(19) Справочник
23 Mad88
 
20.09.17
13:59
(18) а как без условия то тогда? Мне нужно по конкретной номенклатуре
24 povar
 
20.09.17
13:59
(22) где это в коде видно ?
25 Mad88
 
20.09.17
14:05
(24) Товары = СоздатьОбъект("Справочник.СпецпредложенияТовары");
    Товары.ИспользоватьВладельца(Пакет);
    Товары.ВыбратьЭлементы();
    Пока Товары.ПолучитьЭлемент() = 1 Цикл
        Если Товары.ПометкаУдаления() = 0 Тогда
            НоваяСтрока();
            Номенклатура = Товары.Номенклатура;
            Загружен = "Загружен";
            Количество = 1;
            ЕдИзм = СоздатьОбъект("Справочник.ЕдиницыИзмерения");
            ЕдИзм.ИспользоватьВладельца(Товары.Номенклатура);
            ЕдИзм.ВыбратьЭлементы();
            //Остатки
            РегОТ=СоздатьОбъект("Регистр.Склад");
            Остатки = РегОТ.СводныйОстаток(,Товары.Номенклатура,,"Количество");
            //Запрос
            ТТ=СоздатьОбъект("ТаблицаЗначений");
            Запрос = СоздатьОбъект("Запрос");
                ТекстЗапроса =
            "//{{ЗАПРОС(Запросище)
            |Номенклатура = Регистр.Склад.Номенклатура;
            |Количество = Регистр.Склад.Количество;
            |Функция КоличествоКонОст = КонОст(Количество);
            |Группировка Номенклатура;
            //|Условие(Номенклатура = Товары.Номенклатура);
            |"//}}ЗАПРОС
            ;
            // Если ошибка в запросе, то выход из процедуры
            Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
                //Возврат;
            КонецЕсли;
            Запрос.Выгрузить(ТТ,0,1);
            ТТ.ВыбратьСтроки();
            Пока ТТ.ПолучитьСтроку()=1 Цикл
                Сообщить(ТТ.КоличествоКонОст);
            КонецЦикла;
            Пока ЕдИзм.ПолучитьЭлемент() =  1 Цикл
                Если ЕдИзм.ПометкаУдаления() = 0 Тогда
                    Единица = ЕдИзм.БазоваяЕдиница;
                    Если ПустоеЗначение(Единица) = 0 Тогда
                        Прервать;
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
            ПриВыбореЗначения("Номенклатура");
        КонецЕсли;
    КонецЦикла;
26 skafandr
 
20.09.17
14:06
(22) Элементы номенклатуры в список значений и
Условие (Ноиенклатура в СЗ)
27 Builder
 
20.09.17
14:09
Ох йо, это документ с реквизитом Номенклатура.
И запрос в цикле, ппц полный.
Выкини запрос, он тут лишний, остаток ты уже получил.
И названия реквизитов в запросе не должны совпадать с реквизитами документа.
28 skafandr
 
20.09.17
14:10
Классный код

Фантазия на слове Номенклатура зациклилась?

Номенклатура = Товары.Номенклатура;
.....
|Номенклатура = Регистр.Склад.Номенклатура;
.....
|Условие(Номенклатура = Товары.Номенклатура
29 Herby
 
20.09.17
14:13
(25) страшное дело
30 Mad88
 
20.09.17
14:50
В общем написал вот так, но запрос почему то в тз выгружает аж 3 строчки с одним и тем же остатком, причем в одной строке номенклатура вообще пустая во второй другая в вот в третей то что нужно) это нормально или что?)

С таким условием - Условие (Номенклатура в СЗ), результат аналогичный

ТекстЗапроса =
    "//{{ЗАПРОС(Заказ)
    |Период с (НачГода(ТекущаяДата())) по (КонГода(ТекущаяДата()));
    |ОбрабатыватьДокументы все;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ТекущийДокумент = Документ.ЗаказПокупателя.ТекущийДокумент;
    |зНомерНаСайте = Документ.ЗаказПокупателя.НомерНаСайте;
    |Группировка Документ;
    |Условие(СокрЛП(зНомерНаСайте) = СокрЛП(НомерНаСайте));
    |"//}}ЗАПРОС
    ;
31 Mad88
 
20.09.17
14:51
(30) тьфу ты не то скопировал
    ТекстЗапроса =
            "//{{ЗАПРОС(Запросище)
            |зНоменклатура = Регистр.Склад.Номенклатура;
            |Количество = Регистр.Склад.Количество;
            |Функция КоличествоКонОст = КонОст(Количество);
            |Группировка зНоменклатура;
            |Условие (зНоменклатура = Ном);
            |"//}}ЗАПРОС
            ;
32 Ёпрст
 
20.09.17
14:52
(31)

|Группировка зНоменклатура Без Групп;
33 Ёпрст
 
20.09.17
14:53
Хотя, в свете (25) этот запрос не нужен
34 Mad88
 
20.09.17
14:55
(33) Мне еще нужно будет потом его дописать и выбрать остатки в разрезе подразделений, я не знаю как без запроса это сделать
35 Ёпрст
 
20.09.17
14:58
(34) озвучь всю задачу:
тебе нужно заполнить табличную часть какого-то документа данными из ....?
36 Mad88
 
20.09.17
15:08
(35) Табличная часть документа заполняется, но там есть еще реквизит подразделение, мне нужно найти на каких подразделениях числятся остатки и подставить туда первое попавшееся на котором есть хотя бы 1.