Всем доброго времени суток.
Стоит задача, получить вес всех товаров в заказе покупателя.
Набросал функцию (за основу взял получение веса из ТОРГ-12
Вызываю ее из процедуры
&НаКлиенте
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)
Масса = ПолучитьВесЗаказа(Объект.Ссылка);
Все вроде работает, но есть одна проблема.
Если мы открыли документ и добавили в него новую строку, то в запрос она не попадает (новая строка).
В запрос попадают только строки, которые были в документе.
Что сделать чтобы запрос выполнялся правильно.
Стоит задача, получить вес всех товаров в заказе покупателя.
Набросал функцию (за основу взял получение веса из ТОРГ-12
&НаСервере
Функция ПолучитьВесЗаказа(Заказ)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказКлиентаТовары.Ссылка КАК Ссылка,
| ЗаказКлиентаТовары.Количество КАК Количество,
| ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
| ВЫРАЗИТЬ(ВЫРАЗИТЬ(ВЫБОР
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем)
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ОбъемЕдиницаИзмерения.Числитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ОбъемЧислитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ОбъемЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ОбъемЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ОбъемЧислитель / ЗаказКлиентаТовары.Номенклатура.ОбъемЗнаменатель КАК ЧИСЛО(15, 7))) * (ЗаказКлиентаТовары.Номенклатура.ВесЧислитель / ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель) * (ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ПлощадьЧислитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ПлощадьЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ПлощадьЧислитель / ЗаказКлиентаТовары.Номенклатура.ПлощадьЗнаменатель КАК ЧИСЛО(15, 7))) * (ЗаказКлиентаТовары.Номенклатура.ВесЧислитель / ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель) * (ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина)
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ДлинаЕдиницаИзмерения.Числитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ДлинаЧислитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ДлинаЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ДлинаЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ДлинаЧислитель / ЗаказКлиентаТовары.Номенклатура.ДлинаЗнаменатель КАК ЧИСЛО(15, 7))) * (ЗаказКлиентаТовары.Номенклатура.ВесЧислитель / ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель) * (ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Вес * ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))
| КОГДА (ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
| ИЛИ ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ПустаяСсылка)
| ИЛИ ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Ссылка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка))
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ВесЧислитель / ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель * (ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
| ИНАЧЕ 0
| КОНЕЦ / (ВЫРАЗИТЬ(1 КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7)) КАК ЧИСЛО(12, 3)) КАК ВесЕдиницы,
| ЗаказКлиентаТовары.Количество * (ВЫРАЗИТЬ(ВЫРАЗИТЬ(ВЫБОР
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем)
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ОбъемЕдиницаИзмерения.Числитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ОбъемЧислитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ОбъемЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ОбъемЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ОбъемЧислитель / ЗаказКлиентаТовары.Номенклатура.ОбъемЗнаменатель КАК ЧИСЛО(15, 7))) * (ЗаказКлиентаТовары.Номенклатура.ВесЧислитель / ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель) * (ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ПлощадьЧислитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ПлощадьЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ПлощадьЧислитель / ЗаказКлиентаТовары.Номенклатура.ПлощадьЗнаменатель КАК ЧИСЛО(15, 7))) * (ЗаказКлиентаТовары.Номенклатура.ВесЧислитель / ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель) * (ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина)
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ДлинаЕдиницаИзмерения.Числитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ДлинаЧислитель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ДлинаЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ДлинаЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7))) / (ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ДлинаЧислитель / ЗаказКлиентаТовары.Номенклатура.ДлинаЗнаменатель КАК ЧИСЛО(15, 7))) * (ЗаказКлиентаТовары.Номенклатура.ВесЧислитель / ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель) * (ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
| КОГДА ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Вес * ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))
| КОГДА (ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
| ИЛИ ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ПустаяСсылка)
| ИЛИ ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения.Ссылка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка))
| И ЗаказКлиентаТовары.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель, 0) <> 0
| И ЕСТЬNULL(ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ(ЗаказКлиентаТовары.Номенклатура.ВесЧислитель / ЗаказКлиентаТовары.Номенклатура.ВесЗнаменатель * (ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЗаказКлиентаТовары.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
| ИНАЧЕ 0
| КОНЕЦ / (ВЫРАЗИТЬ(1 КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7)) КАК ЧИСЛО(12, 3))) КАК ОбщийВес
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
| ЗаказКлиентаТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Заказ);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ИтогоВес = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.ОбщийВес = 0 Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не заполнен вес у номенклатуры "+ ВыборкаДетальныеЗаписи.Номенклатура;
Сообщение.Сообщить();
Продолжить;
КонецЕсли;
ИтогоВес = ИтогоВес + ВыборкаДетальныеЗаписи.ОбщийВес;
КонецЦикла;
Возврат ИтогоВес;
КонецФункции
ПоказатьВызываю ее из процедуры
&НаКлиенте
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)
Масса = ПолучитьВесЗаказа(Объект.Ссылка);
Все вроде работает, но есть одна проблема.
Если мы открыли документ и добавили в него новую строку, то в запрос она не попадает (новая строка).
В запрос попадают только строки, которые были в документе.
Что сделать чтобы запрос выполнялся правильно.
По теме из базы знаний
- Список заказов покупателей (новый взгляд)
- Журнал заказов покупателей. КА 1.1
- SynchroWB — интеграция 1С и Wildberries: автоматизация заказов и остатков по API с УТ, КА, ERP, УНФ, Розница 3
- Анализ отменённых заказов клиентов в ценах номенклатуры – упущенная прибыль, отмены в заказах клиентов
- Упаковочный лист из документа Реализация товаров и услуг – УТ 11.5, КА 2.5, ЕРП 2.5
Найденные решения
(1) Делай запрос не к документу в базе данных как сейчас:
а выгружай ТЧ в ТЗ и запрос к полученной ТЗ. Тогда все что меняешь попадет в результат
Ну и представленный запрос нормален для однократного применения (ТЧ заполнена полностью или док записан - получаем общий вес). На мой взгляд: делай кнопку ПосчитатьВес выполняй запрос и заполняй реквизит ОбщийВес. Этот реквизит сделай обязательным, чтобы не проводился незаполненным, а в КоличествоПриИзменении (и не только) просто очищай реквизит, чтобы пользователь обязан был снова нажать кнопку. Таким образом запрос будет выполняться от одного до незначительного количества раз, а не при заполнении десятков а то сотен наименований по количеству наименований
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
| ЗаказКлиентаТовары.Ссылка = &Ссылка
а выгружай ТЧ в ТЗ и запрос к полученной ТЗ. Тогда все что меняешь попадет в результат
Ну и представленный запрос нормален для однократного применения (ТЧ заполнена полностью или док записан - получаем общий вес). На мой взгляд: делай кнопку ПосчитатьВес выполняй запрос и заполняй реквизит ОбщийВес. Этот реквизит сделай обязательным, чтобы не проводился незаполненным, а в КоличествоПриИзменении (и не только) просто очищай реквизит, чтобы пользователь обязан был снова нажать кнопку. Таким образом запрос будет выполняться от одного до незначительного количества раз, а не при заполнении десятков а то сотен наименований по количеству наименований
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Делай запрос не к документу в базе данных как сейчас:
а выгружай ТЧ в ТЗ и запрос к полученной ТЗ. Тогда все что меняешь попадет в результат
Ну и представленный запрос нормален для однократного применения (ТЧ заполнена полностью или док записан - получаем общий вес). На мой взгляд: делай кнопку ПосчитатьВес выполняй запрос и заполняй реквизит ОбщийВес. Этот реквизит сделай обязательным, чтобы не проводился незаполненным, а в КоличествоПриИзменении (и не только) просто очищай реквизит, чтобы пользователь обязан был снова нажать кнопку. Таким образом запрос будет выполняться от одного до незначительного количества раз, а не при заполнении десятков а то сотен наименований по количеству наименований
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
| ЗаказКлиентаТовары.Ссылка = &Ссылка
а выгружай ТЧ в ТЗ и запрос к полученной ТЗ. Тогда все что меняешь попадет в результат
Ну и представленный запрос нормален для однократного применения (ТЧ заполнена полностью или док записан - получаем общий вес). На мой взгляд: делай кнопку ПосчитатьВес выполняй запрос и заполняй реквизит ОбщийВес. Этот реквизит сделай обязательным, чтобы не проводился незаполненным, а в КоличествоПриИзменении (и не только) просто очищай реквизит, чтобы пользователь обязан был снова нажать кнопку. Таким образом запрос будет выполняться от одного до незначительного количества раз, а не при заполнении десятков а то сотен наименований по количеству наименований
(3)
Хотя, может быть, у вас что личное с этим пользователем, что вы его так сильно его страпонить хотите, простите, извините еще раз.
просто очищай реквизит, чтобы пользователь обязан был снова нажать кнопку.
Простите, извините, а нельзя просто один раз при чтении посчитать этот общий вес, а потом при изменении таблицы просто корректировать его на запрошенный вес по одной отредактированной строке?
Хотя, может быть, у вас что личное с этим пользователем, что вы его так сильно его страпонить хотите, простите, извините еще раз.
(4) Прощаю, извиняю так и быть. Но тогда прошу прощения, что заставляю напрягать мысленные центры, но ответьте на вопрос, а в каком событии вы собираетесь делать эту корректировку? Уж не в ПриИзменении ли? Т.е. и при корректировке это событие сработает (то что надо), но оно же сработает и при заполнении таблицы (сто строк - сто раз?) И второй вопрос. А как вы собираетесь получать данные для корректировки пусть и по одной строке? Уж не запросом ли с отбором по номенклатуре? И тогда в чем сакральная разница между моим способом и вашим? Кроме попытки заставить запрос отрабатывать вместо одного раза по кнопке, выполнится н-ое кол-во раз, разницы не вижу. И преимуществ вашего способа как-то не наблюдаю, скорее наоборот. )))
(10) Читай (9), а не согласен, обоснуй. Это у тебя возражения, но ты их не озвучиваешь. Поднял вопрос, вот и объясняй при всех КАК все это работает., точнее как ты это понимаешь и почему вопросы И да, дописал, в то же время что ты писал свой ответ. Хорошо повторю. Я задал вопросы в (5). "Ты не соскальзывый" © Ответишь? Или по-твоему здесь только я держу ответ?
(11) Понятно.
Маленький, у тебя есть представление сколько платформенных запросов будет сделано при редактировании строки? И какое количество ресурсов при этом тратится? Ну там на получение представления, на переключение контекста...
Но скорей всего ты просто думаешь, что все, как и ты, пишут запросы так, что они для одного элемента выполняются по 40 минут. Видимо у вас с пользователямя это взаимное. Они страпонят тебя за эти 40 минут, а ты им мелко мстишь кнопками.
Видишь, я подумал, и решил тоже поправить своё сообщение пока ты писал свой ответ.
Маленький, у тебя есть представление сколько платформенных запросов будет сделано при редактировании строки? И какое количество ресурсов при этом тратится? Ну там на получение представления, на переключение контекста...
Но скорей всего ты просто думаешь, что все, как и ты, пишут запросы так, что они для одного элемента выполняются по 40 минут. Видимо у вас с пользователямя это взаимное. Они страпонят тебя за эти 40 минут, а ты им мелко мстишь кнопками.
Видишь, я подумал, и решил тоже поправить своё сообщение пока ты писал свой ответ.
(12) Все-таки игнорируешь мои вопросы, заданные превыми между прочим. Ну ладно, разжевываю, ликбез:
Цитата ТС
Цитата ТС
&НаКлиенте
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)
Т.е. процедура повешена на поле количество. ТЧ-Добавить-Выбор номенклатуры - установка количества - срабатывает процедура. 100, 1000 раз добавляем товар 100, 1000 раз срабатывает запрос вызываемый в ПРиИзменении. Разжевал? Теперь проглоти
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)
(17)
За то, что расходуешь их время и бесценный когнитивные способности, обязывая помнить, что после редактирования надо постоянно нажимать кнопочку.
За то, что считаешь себя умнее всех, подменя естественные сценарии работы больной фантазией, мотивируя это мифическими аргументами.
И тогда кто кого настрапонил
Пользователи. Тебя.
За то, что расходуешь их время и бесценный когнитивные способности, обязывая помнить, что после редактирования надо постоянно нажимать кнопочку.
За то, что считаешь себя умнее всех, подменя естественные сценарии работы больной фантазией, мотивируя это мифическими аргументами.
(18) Хе-хе! Так и предполагал. По сути поднятого вопроса сказать нечего, Стрелочки переводим. Придумываем отмазочки. Так все же 100 раз при ста строках?
(12) О! Хотел цитатки твои вставить, обнаружил новенькое для себя. Не видел, только прочитал. С сарказма перешел на хамство? Нет, любезный, с быдлотой не общаюсь. А по сути вопроса обтекай и не лезь со своими недостаточными знаниями, прикрываемые хамством, когда дядьки вопросы решают.
(12) О! Хотел цитатки твои вставить, обнаружил новенькое для себя. Не видел, только прочитал. С сарказма перешел на хамство? Нет, любезный, с быдлотой не общаюсь. А по сути вопроса обтекай и не лезь со своими недостаточными знаниями, прикрываемые хамством, когда дядьки вопросы решают.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот