1. user1202776 13.01.20 16:02 Сейчас в теме

Перенести функция в запрос

Как этот код перенести в запрос,чтобы в запросе считалось так:
Если Цел(Стр.Количество/Стр.ВМесте) = Стр.Количество/Стр.ВМесте Тогда
			Стр.Мест = Цел(Стр.Количество/Стр.ВМесте);
		Иначе
			Стр.Мест = Цел(Стр.Количество/Стр.ВМесте)+1;
		КонецЕсли;	
		//
		Если Стр.ВесМеста > 0 Тогда
			Стр.Вес = Стр.ВесМеста*Стр.Мест;
		Иначе
			Стр.Вес = Стр.ВесШтуки*Стр.Количество;
		КонецЕсли;
Показать

Сделал так,но в некоторых документах считает корректно, а в некоторых считает некорректно
ВЫБРАТЬ
	МаршрутноеЗаданиеДокументыРеализации.Ссылка КАК МЗ,
	ЗаказПокупателяТовары.Ссылка КАК Реализация,
	ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
	СУММА(МаршрутноеЗаданиеДокументыРеализации.Вес) КАК Вес,
	СУММА(МаршрутноеЗаданиеДокументыРеализации.Ссылка.ВесГруза) КАК ВесГруза,
	ВЫБОР
		КОГДА (ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 0))) = ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент
			ТОГДА (ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 0))) + 1
		ИНАЧЕ ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 0))
	КОНЕЦ КАК КоличествоИКоэфф,
	СУММА(ЗаказПокупателяТовары.Количество) КАК Количество,
	ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент,
	ВЫБОР
		КОГДА ЕСТЬNULL(ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест, НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
				И ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест <> ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)
			ТОГДА ЕСТЬNULL(ЗаказПокупателяТовары.ЕдиницаИзмеренияМест.Вес, 0)
		ИНАЧЕ 0
	КОНЕЦ КАК ВесМеста
ПОМЕСТИТЬ ВТ
ИЗ
	Документ.МаршрутноеЗадание.ДокументыРеализации КАК МаршрутноеЗаданиеДокументыРеализации
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
		ПО МаршрутноеЗаданиеДокументыРеализации.Заявка = ЗаказПокупателяТовары.Ссылка
ГДЕ
	ЗаказПокупателяТовары.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
	ЗаказПокупателяТовары.Ссылка,
	МаршрутноеЗаданиеДокументыРеализации.Ссылка,
	ЗаказПокупателяТовары.Номенклатура,
	ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент,
	ВЫБОР
		КОГДА ЕСТЬNULL(ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест, НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО
				И ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест <> ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)
			ТОГДА ЕСТЬNULL(ЗаказПокупателяТовары.ЕдиницаИзмеренияМест.Вес, 0)
		ИНАЧЕ 0
	КОНЕЦ,
	ВЫБОР
		КОГДА (ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 0))) = ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент
			ТОГДА (ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 0))) + 1
		ИНАЧЕ ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 0))
	КОНЕЦ

ИНДЕКСИРОВАТЬ ПО
	Реализация,
	Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ.МЗ,
	ВТ.Реализация,
	ВТ.Номенклатура,
	СУММА(ВТ.Вес) КАК Вес,
	СУММА(ВТ.ВесГруза) КАК ВесГруза,
	СУММА(ВТ.Количество) КАК Количество,
	ЗаказПокупателяТовары.Номенклатура КАК Номенклатура1,
	СУММА(ВТ.НоменклатураЕдиницаИзмеренияМестКоэффициент) КАК НоменклатураЕдиницаИзмеренияМестКоэффициент,
	СУММА(ВЫБОР
			КОГДА ЗаказПокупателяТовары.ЕдиницаИзмеренияМест.Вес > 0
				ТОГДА ВТ.ВесМеста * ВТ.КоличествоИКоэфф
			ИНАЧЕ ЗаказПокупателяТовары.Номенклатура.ЕдиницаХраненияОстатков.Вес * ЗаказПокупателяТовары.Количество
		КОНЕЦ) КАК ВестМест,
	ВТ.ВесМеста,
	ВТ.КоличествоИКоэфф КАК КоличествоИКоэфф1,
	ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК НоменклатураЕдиницаИзмеренияМестКоэффициент1,
	ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Вес
ИЗ
	ВТ КАК ВТ
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
		ПО (ЗаказПокупателяТовары.Ссылка = ВТ.Реализация)
			И ВТ.Номенклатура = ЗаказПокупателяТовары.Номенклатура

СГРУППИРОВАТЬ ПО
	ЗаказПокупателяТовары.Номенклатура,
	ВТ.МЗ,
	ВТ.Номенклатура,
	ВТ.Реализация,
	ВТ.ВесМеста,
	ВТ.КоличествоИКоэфф,
	ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент,
	ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Вес
ИТОГИ
	СУММА(Вес),
	СУММА(ВесГруза),
	СУММА(Количество),
	СУММА(ВестМест)
ПО
	ОБЩИЕ
Показать
Ответы
Избранное Подписка Сортировка: Древо
2. coollerinc 40 13.01.20 16:29 Сейчас в теме
вы 1 не там прибавляете, нужно после иначе
5. user1202776 13.01.20 16:33 Сейчас в теме
(2) спасибо, не заметил. Так теперь вроде правильно считает
6. user1202776 13.01.20 17:27 Сейчас в теме
(2)все равно погрешность есть, но уже погрешность меньше. Думаю, что неправильно округляю. Как округлить в запросе так, как округляется в коде?
3. user1202776 13.01.20 16:30 Сейчас в теме
Когда в документе Заказ покупателя одна номенклатура, то считает не корректно.Из-за чего так может происходит?
4. Ганс 13.01.20 16:32 Сейчас в теме
не вдаваясь в детали, возможно проблема в этом: ВЫРАЗИТЬ - округляет число(т.е. если 1,6 на выходе вы получите 2) , а цел просто отсекает(если 1,6 то получите 1)
7. user1202776 13.01.20 17:27 Сейчас в теме
(4) думаю да. Как округлить в запросе так, как округляется в коде?
8. user1202776 13.01.20 18:20 Сейчас в теме
(4)
ВЫБОР
	КОГДА (ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 0))) = ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент
		ТОГДА ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 0))
	ИНАЧЕ ВЫБОР
			КОГДА ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент > 0
				ТОГДА ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент - 0.5 КАК ЧИСЛО(10, 0))
			ИНАЧЕ ВЫРАЗИТЬ(ЗаказПокупателяТовары.Количество / ЗаказПокупателяТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент + 0.5 КАК ЧИСЛО(10, 0))
		КОНЕЦ
КОНЕЦ
Показать
сделал так, но все равно погрешность есть,то есть считает не правильно
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Консультант по 1С:Документооборот
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист по 1С:Бухгалтерии
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист по 1С:ЗУП
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 150 000 руб.
Полный день