|
Количество остаток равно null | ☑ | ||
---|---|---|---|---|
0
Tolstiy Beremenniy
20.12.18
✎
12:21
|
Почему в переборе идет количество остаток null первой, как правильно переделать запрос? Там же идет преобразование ЕСТЬNULL !
Запрос.Текст = " |ВЫБРАТЬ | ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия, | ПеремещениеТоваровСписокНоменклатуры.Цена КАК Цена, | СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, | ПеремещениеТоваровСписокНоменклатуры.Ссылка КАК Ссылка |ПОМЕСТИТЬ ВТ_ДокТч |ИЗ | Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры |ГДЕ | ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ПеремещениеТоваровСписокНоменклатуры.Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия, | ПеремещениеТоваровСписокНоменклатуры.Цена, | ПеремещениеТоваровСписокНоменклатуры.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ДокТч.Номенклатура КАК Номенклатура, | ВТ_ДокТч.Партия КАК Партия, | МАКСИМУМ(ВТ_ДокТч.Количество) КАК Количество, | СУММА(ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток |ИЗ | ВТ_ДокТч КАК ВТ_ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродуктыНаСкладах.Остатки( | &Период, | Номенклатура В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ВТ_ДокТч.Номенклатура | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч) | И Партия В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ВТ_ДокТч.Партия | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч) | И Склад = &СкладИсточник) КАК ПродуктыНаСкладахОстатки | ПО ВТ_ДокТч.Номенклатура = ПродуктыНаСкладахОстатки.Номенклатура | И ВТ_ДокТч.Партия = ПродуктыНаСкладахОстатки.Партия | |СГРУППИРОВАТЬ ПО | ВТ_ДокТч.Номенклатура, | ВТ_ДокТч.Партия |ИТОГИ | СУММА(Количество) |ПО | Номенклатура, | Партия"; Запрос.УстановитьПараметр("Период", Дата); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("СкладИсточник", СкладИсточник); Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда |
|||
1
Кир Пластелинин
20.12.18
✎
12:24
|
а в общие итоги кто будет добавлять КоличествоОстаток?
|
|||
2
Tolstiy Beremenniy
20.12.18
✎
12:38
|
Как ещё можно сделать, если в тч указана партия что бы списывалось сначала с неё, а потом с других?
|
|||
3
Alexandr_U1982
20.12.18
✎
12:47
|
Попробуй, вот так:
|ВЫБРАТЬ | ВТ_ДокТч.Номенклатура КАК Номенклатура, | ВТ_ДокТч.Партия КАК Партия, | МАКСИМУМ(ВТ_ДокТч.Количество) КАК Количество, | СУММА(ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток |ИЗ | ВТ_ДокТч КАК ВТ_ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродуктыНаСкладах.Остатки( | &Период, | Склад = &СкладИсточник | И (Номенклатура, Партия) В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ВТ_ДокТч.Номенклатура, | ВТ_ДокТч.Партия | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч) | ) КАК ПродуктыНаСкладахОстатки | ПО ВТ_ДокТч.Номенклатура = ПродуктыНаСкладахОстатки.Номенклатура | И ВТ_ДокТч.Партия = ПродуктыНаСкладахОстатки.Партия | |СГРУППИРОВАТЬ ПО | ВТ_ДокТч.Номенклатура, | ВТ_ДокТч.Партия |ИТОГИ | СУММА(Количество), | СУММА(КоличествоОстаток) |ПО | Номенклатура, | Партия"; |
|||
4
Tolstiy Beremenniy
20.12.18
✎
12:50
|
(3) Это скомпонованный вариант (0) ?
А как списывать с партии что в тч документа? А потом по остальным? |
|||
5
Ненавижу 1С
гуру
20.12.18
✎
12:50
|
конструкция типа СУММА(ЕСТЬNULL(Чтото, 0)) бессмысленна
надо так: ЕСТЬNULL(СУММА(Чтото), 0) |
|||
6
RomanYS
20.12.18
✎
12:55
|
(5) почему? Оба варианта рабочие
|
|||
7
Ненавижу 1С
гуру
20.12.18
✎
13:45
|
(6) они разные
|
|||
8
VladZ
20.12.18
✎
13:58
|
(5) ЕСТЬNULL(СУММА(Чтото), 0) - так не надо. Если в какой то записи в "Что-то" будет null - весь итог у нас будет null.
|
|||
9
Ненавижу 1С
гуру
20.12.18
✎
14:36
|
(8) зачем говоришь неправду?
|
|||
10
RomanYS
20.12.18
✎
14:39
|
(8) нет.
|
|||
11
RomanYS
20.12.18
✎
14:47
|
(7) это понятно, почему "бессмысленна"?
Написал и сам осознал: СУММА(ЕСТЬNULL(Чтото, 0)) == СУММА(Чтото) |
|||
12
Ненавижу 1С
гуру
20.12.18
✎
15:17
|
(11) кстати нет, например если всего одна запись со значением NULL:
СУММА(ЕСТЬNULL(Чтото, 0)) => 0 СУММА(Чтото) => NULL |
|||
13
RomanYS
20.12.18
✎
15:23
|
(12)
ХЗ у меня в такой ситуации (всего одна запись со значением NULL) стабильно падает 8.3.9.2170: Ошибка SDBL: Недопустимое преобразование типов. |
|||
14
RomanYS
20.12.18
✎
15:27
|
(13) падает СУММА(ЕСТЬNULL(Чтото, 0)),
а СУММА(Чтото) - да возвращает NULL |
|||
15
Tolstiy Beremenniy
21.12.18
✎
04:01
|
Почему вот в этой выборке задваивается движение списания?
Почему 2 раза???? Движения.ПродуктыНаСкладах.Записывать = Истина; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия, | ПеремещениеТоваровСписокНоменклатуры.Цена КАК Цена, | СУММА(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество, | ПеремещениеТоваровСписокНоменклатуры.Ссылка КАК Ссылка |ПОМЕСТИТЬ ВТ_ДокТч |ИЗ | Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры |ГДЕ | ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ПеремещениеТоваровСписокНоменклатуры.Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия, | ПеремещениеТоваровСписокНоменклатуры.Цена, | ПеремещениеТоваровСписокНоменклатуры.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ДокТч.Номенклатура КАК Номенклатура, | ВТ_ДокТч.Партия КАК Партия, | ВТ_ДокТч.Цена КАК Цена, | ВТ_ДокТч.Количество КАК Количество, | ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток |ИЗ | ВТ_ДокТч КАК ВТ_ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродуктыНаСкладах.Остатки( | &Период, | Номенклатура В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ВТ_ДокТч.Номенклатура | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч) | И Партия В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ВТ_ДокТч.Партия | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч) | И Склад = &СкладИсточник) КАК ПродуктыНаСкладахОстатки | ПО ВТ_ДокТч.Номенклатура = ПродуктыНаСкладахОстатки.Номенклатура | И ВТ_ДокТч.Партия = ПродуктыНаСкладахОстатки.Партия | |УПОРЯДОЧИТЬ ПО | ВТ_ДокТч.Номенклатура |ИТОГИ | СУММА(Количество), | СУММА(КоличествоОстаток) |ПО | Номенклатура, | Партия"; Запрос.УстановитьПараметр("Период", Дата); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("СкладИсточник", СкладИсточник); Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Товара " + ВыборкаНоменклатура.Номенклатура + " на складе " + СкладИсточник + " недостаточно. На остатке:"+ ВыборкаНоменклатура.КоличествоОстаток; Сообщение.Сообщить(); Отказ = Истина; Продолжить; КонецЕсли; Выборка = ВыборкаНоменклатура.Выбрать(); Пока Выборка.Следующий() цикл Движение = Движения.ПродуктыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Склад = СкладИсточник; Движение.Номенклатура = Выборка.Номенклатура; Движение.Партия = Выборка.Партия; Движение.Количество = Выборка.Количество; Движение.Цена = Выборка.Цена; КонецЦикла; // Движение = Движения.ПродуктыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Склад = СкладПриемник; Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура; Движение.Партия = ВыборкаНоменклатура.Партия; Движение.Количество = ВыборкаНоменклатура.Количество; Движение.Цена = ВыборкаНоменклатура.Цена; КонецЦикла; // |
|||
16
Tolstiy Beremenniy
21.12.18
✎
04:21
|
(15) Что то с запросом не то ((((((
|
|||
17
Tolstiy Beremenniy
21.12.18
✎
04:31
|
||||
18
Tolstiy Beremenniy
21.12.18
✎
04:42
|
Как обходить такую выборку, что бы записи не задваивались
по партии????? http://joxi.ru/E2pjgl1i9Q5ler |
|||
19
Tolstiy Beremenniy
21.12.18
✎
04:50
|
(18) Как избавиться от задвоенных записей?
Или как их так отбирать без задвоения? |
|||
20
Tolstiy Beremenniy
21.12.18
✎
04:59
|
Так не задваивает.
|ВЫБРАТЬ | ПеремещениеТоваровСписокНоменклатуры.Номенклатура КАК Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия КАК Партия, | МАКСИМУМ(ПеремещениеТоваровСписокНоменклатуры.Цена) КАК Цена, | МАКСИМУМ(ПеремещениеТоваровСписокНоменклатуры.Количество) КАК Количество |ПОМЕСТИТЬ ВТ_ДокТч |ИЗ | Документ.ПеремещениеТоваров.СписокНоменклатуры КАК ПеремещениеТоваровСписокНоменклатуры |ГДЕ | ПеремещениеТоваровСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ПеремещениеТоваровСписокНоменклатуры.Номенклатура, | ПеремещениеТоваровСписокНоменклатуры.Партия |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ДокТч.Номенклатура КАК Номенклатура, | ВТ_ДокТч.Партия КАК Партия, | МАКСИМУМ(ВТ_ДокТч.Цена) КАК Цена, | МАКСИМУМ(ВТ_ДокТч.Количество) КАК Количество, | СУММА(ЕСТЬNULL(ПродуктыНаСкладахОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток |ИЗ | ВТ_ДокТч КАК ВТ_ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродуктыНаСкладах.Остатки( | &Период, | Номенклатура В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ВТ_ДокТч.Номенклатура | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч) | И Партия В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ВТ_ДокТч.Партия | ИЗ | ВТ_ДокТч КАК ВТ_ДокТч) | И Склад = &СкладИсточник) КАК ПродуктыНаСкладахОстатки | ПО ВТ_ДокТч.Номенклатура = ПродуктыНаСкладахОстатки.Номенклатура | И ВТ_ДокТч.Партия = ПродуктыНаСкладахОстатки.Партия | |СГРУППИРОВАТЬ ПО | ВТ_ДокТч.Номенклатура, | ВТ_ДокТч.Партия | |УПОРЯДОЧИТЬ ПО | ВТ_ДокТч.Номенклатура |ИТОГИ | МАКСИМУМ(Количество), | СУММА(КоличествоОстаток) |ПО | Номенклатура"; |
|||
21
Jokerman
21.12.18
✎
07:51
|
Выборка = ВыборкаНоменклатура.Выбрать();
здеся тоже ОбходРезультатаЗапроса.ПоГруппировкам добавь |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |