Имя: Пароль:
1C
1С v8
в печатной форме добавить остатки номенклатуры
0 who respawn
 
28.11.23
10:45
привет, есть печатная  форма у счета на оплату, нужно сделать в ней колонку остатки по конкретному складу

в общем там в цикле перебирается результат запроса для вывода параметров (номенклатура колво и т д)

я в цикле написал запрос

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

в консоли запросов остатки получаю, а в печатной форме в цикл не заходит отладка, мимо проскакивает
что не так?
1 p-soft
 
28.11.23
10:55
новое поколение умных платформ 1С: тут она видит попытку использования запроса в цикле и нагло игнорит!
2 who respawn
 
28.11.23
11:22
(1) это подсказка какая то? как связано что запрос в цикле и мочя проблема
3 SleepyHead
 
28.11.23
11:36
(2) Это был стёб, похоже. Вы не задаете параметры виртуальной таблицы остатков. Результат запроса у вас пустой.
4 who respawn
 
28.11.23
11:37
(3) ну я понял что стёб, в консоли же я тоже не задаю никакие параметры
5 Tatitutu
 
28.11.23
11:40
(2)

1.НужныйСклад = Справочники.Склады.НайтиПоКоду("Б346");
уже уберешь поиск каждый раз из цикла

2. Проверь отладчиком - значения параметров

3. Тебе подсказывают : что НЕХОРОШО так делать ,
в цикле Запрос каждый цикл выполнять

простое :

ОДНИМ ЗАПРОСОМ сначала получили все остатки в таблицу значений (с отбором по складу, номенклатуре и характеристике)
а потом уже в цикле - выводе на печать получай данные из ТЗ

по сложнее

ЗАПРОСОМ получили все остатки и объединили с запросом вывода на печать
6 who respawn
 
28.11.23
11:42
(5) 1) я понимаю это
2) параметры ок
3)понимаю, хочу сейчас просто чтобы результат не был пустым
7 Tatitutu
 
28.11.23
11:42
(3) все он задает, читай внимательнее

- у него Запрос и потом ВыборкаСтрокТовары

Запрос1.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоКоду("Б346"));
Запрос1.УстановитьПараметр("Номенклатура",ВыборкаСтрокТовары.Товар);
Запрос1.УстановитьПараметр("ХарактеристикаНоменклатуры",ВыборкаСтрокТовары.Характеристика );
8 Tatitutu
 
28.11.23
11:43
(6) ну и посмотри в отладчике на  строке:

Запрос1.УстановитьПараметр("ХарактеристикаНоменклатуры",ВыборкаСтрокТовары.Характеристика );

чему у тебя равно

Склад
ВыборкаСтрокТовары.Товар
ВыборкаСтрокТовары.Характеристика
9 who respawn
 
28.11.23
11:45
(8) я ж говорю всё ок с параметрами
склад - нужный мне склад
товар - номенклатура из документа, характеристика пустая, её нет в документе(не выбрана)
10 who respawn
 
28.11.23
11:46
(9) + этот же запрос в консоли получает остаток...
11 vicof
 
28.11.23
11:57
(10) Сохрани обработку и перезалей)
12 who respawn
 
28.11.23
11:58
(11) куда перезалить? я открываю через файл - открыть
13 vicof
 
28.11.23
11:59
(9) Ну и пустая это не очень однозначно.
ПустаяСсылка, Неопределено, NULL?
14 who respawn
 
28.11.23
12:00
(13) да я уже удалил вообще характеристику, просто остаток без характеристики получить хотел - тот же результат
15 Ногаминебить
 
28.11.23
12:04
Печатная форма в конфигурации или через внешнюю печатную форму? Может не там правишь вообще код?
"в печатной форме в цикл не заходит отладка, мимо проскакивает" вот этот момент подозрителен.
Посмотри, может он и перед циклом не остановится?
16 who respawn
 
28.11.23
12:04
(15) останавливается
печатная форма - внешняя обработка
17 Гена
 
28.11.23
12:04
А зачем в печатном счёте на оплату чужому покупателю знать какие-то наши остатки по нашему же складу?
18 who respawn
 
28.11.23
12:05
(17) да незачем, эта форма будет для личного пользования, по-людски не хотят, хотят так
19 Гена
 
28.11.23
12:06
(18) Чушь. Уточните. Скорее всего они хотят видеть остатки в ТЧ документа, но никак не в печатной форме.
20 who respawn
 
28.11.23
12:09
(19) нет) они хотят печатать "Счет на оплату покупателя" и видеть колонку "Остатки на конкретном складе"
21 Ногаминебить
 
28.11.23
12:17
(16)
Отладчиком смотрим Рез1.количество()
Если там 0 - проверяем тем же отладчиком параметры запроса. Особое внимание уделяем типам значений в этих параметрах.
Сравниваем с консолью.
22 who respawn
 
28.11.23
12:21
(21) дело в том, что я в консоли поставил значения, которые отладчик показал
23 who respawn
 
28.11.23
12:24
(21) конечно там 0, было бы не 0, отладчик бы не проскакивал
24 Доминошник
 
28.11.23
12:34
Из написанного выше - большое подозрение, что  Справочники.Склады.НайтиПоКоду("Б346") возвращает пустую ссылку

Или - несколько складов имеет одинаковый код.
25 who respawn
 
28.11.23
12:39
(24) точно нет
26 Галахад
 
28.11.23
12:41
Возможно ВыборкаСтрокТовары.Товар это строка.
27 Tatitutu
 
28.11.23
12:43
(0) ты в коде забыл

ТоварыНаСкладахОстатки.Номенклатура КАК  Номенклатура

//ну да, ладно


       НужныйСклад = Справочники.Склады.НайтиПоКоду("Б346");

Сообщить(НужныйСклад);


        Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Номенклатура КАК  Номенклатура,
    |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |    ТоварыНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладахОстатки.Остатки(, Склад = &НужныйСклад) КАК ТоварыНаСкладахОстатки";
    
    Запрос.УстановитьПараметр("НужныйСклад",НужныйСклад);
28 SleepyHead
 
28.11.23
14:06
(7) И где он в (0) задает параметры виртуальной таблицы?
29 who respawn
 
28.11.23
14:21
Не знаю, перезапустил конфигуратор, открыл - всё тоже самое и результат запроса не пустой(кеш не чистил)