Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:11

неправильные и отрицательные остатки через запрос УТ 10.3

Автор xgladosx, 10 мар 2016, 22:06

0 Пользователей и 1 гость просматривают эту тему.

xgladosx

обычный запрос на отображение остатков уже вбитых товаров, выдает рандомное число(не представляю откуда оно берется, но всегда одинковое для отдельно взятой номенклатуры), и сразу же повторно выдает его же отрицательное, т.е. считает каждый запрос за два на каждую строку. Без понятия где проблема, запрос стандартный, код ниже. Подскажите откуда могла взяться проблема, не могу разобраться.


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


Kironten

Цитата: xgladosx от 10 мар 2016, 22:06
обычный запрос на отображение остатков уже вбитых товаров, выдает рандомное число(не представляю откуда оно берется, но всегда одинковое для отдельно взятой номенклатуры), и сразу же повторно выдает его же отрицательное, т.е. считает каждый запрос за два на каждую строку. Без понятия где проблема, запрос стандартный, код ниже. Подскажите откуда могла взяться проблема, не могу разобраться.


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



Стандартный запрос? :xfbnsdfb:
Т.е. то, что вы для каждого элемента номенклатуры делаете свой запрос в цикле, да еще и потом идет запрос к наименованию номенклатуры, но уже через точку - это стандартный запрос? Это не считая того, что не используются параметры виртуальной таблицы.
Это, мягко говоря, очень серьезные ошибки.
А теперь по вопросу - берите отладчик и анализируйте, что у вас попало в выборку.
Вы накладываете отбор только на элемент номенклатуры. Я конечно не помню навскидку измерения регистра в 10.3, но как минимум еще и по складам есть разрез.

xgladosx

Цитата: Kironten от 10 мар 2016, 22:29
Цитата: xgladosx от 10 мар 2016, 22:06
обычный запрос на отображение остатков уже вбитых товаров, выдает рандомное число(не представляю откуда оно берется, но всегда одинковое для отдельно взятой номенклатуры), и сразу же повторно выдает его же отрицательное, т.е. считает каждый запрос за два на каждую строку. Без понятия где проблема, запрос стандартный, код ниже. Подскажите откуда могла взяться проблема, не могу разобраться.


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



Стандартный запрос? :xfbnsdfb:
Т.е. то, что вы для каждого элемента номенклатуры делаете свой запрос в цикле, да еще и потом идет запрос к наименованию номенклатуры, но уже через точку - это стандартный запрос? Это не считая того, что не используются параметры виртуальной таблицы.
Это, мягко говоря, очень серьезные ошибки.
А теперь по вопросу - берите отладчик и анализируйте, что у вас попало в выборку.
Вы накладываете отбор только на элемент номенклатуры. Я конечно не помню навскидку измерения регистра в 10.3, но как минимум еще и по складам есть разрез.

Да цикл не при чем, это не относится к сути вопроса. при обращении без циклов к одной единственной номенклатуре запрос с уточнением даты и склада выдает вместо пустого ответа 3 и -3, а вместо цифры "2" 9 и -9. откуда вообще могли взяться эти цифры? в остатках их нет ни за один день

p.s. пока отвечал на ум пришло вот что - а запрос учитывает разрез по организациям? в 10.2 точно нет, а в 10.3?

temrmal

Берем регистр Товары на складах в пользовательском режиме, через все функции, ставим отбор по какой нибудь позиции, и смотрим движения. Скрин можешь выложить, там видно будет

xgladosx

Цитата: temrmal от 11 мар 2016, 00:16
Берем регистр Товары на складах в пользовательском режиме, через все функции, ставим отбор по какой нибудь позиции, и смотрим движения. Скрин можешь выложить, там видно будет

это полное движение этого товара и остатки. выдает 3 и -3


DmitriyF

Цитата: xgladosx от 10 мар 2016, 22:06
обычный запрос на отображение остатков уже вбитых товаров, выдает рандомное число(не представляю откуда оно берется, но всегда одинковое для отдельно взятой номенклатуры), и сразу же повторно выдает его же отрицательное, т.е. считает каждый запрос за два на каждую строку. Без понятия где проблема, запрос стандартный, код ниже. Подскажите откуда могла взяться проблема, не могу разобраться.


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


Запрос в цикле вообще супер. Чем не устраивает запрос по остаткам с группировкой?

Теги:  

Похожие темы (5)

Рейтинг@Mail.ru

Поиск