1. sasha-asn 10.06.19 09:47 Сейчас в теме

ПроверкаПроведения, и неприятный запрос

Доброго времени суток, уважаемые эксперты!

Прошу подсказать как обойти Проверку в запросе – есть Упаковки у данной номенклатуры и коэффициент (кол-во ШТ в УПаковке), при проведении ругается запрос на проверку Кол-ва ШТ в УПаковке. Хотя в справочнике и в документах, подчиненных при продаже всё правильной указанно и Кол-Во, и Упаковки…. Запрос самописный, может как-то можно убрать проверку для коэффициентов ? Очень прошу вашей помощи, а то при возникновение проверки, приходится через Отладчик проводить (Отказ = Ложь)

Запрос = Новый Запрос; 
    Запрос.Текст = "ВЫБРАТЬ 
                   |    РеализацияТоваровУслугТовары.Номенклатура, 
                   |    РеализацияТоваровУслугТовары.ЗаказПокупателя, 
                   |    ВЫБОР 
                   |        КОГДА ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) - РеализацияТоваровУслугТовары.Количество * РеализацияТоваровУслугТовары.Коэффициент < 0 
                   |            ТОГДА ИСТИНА 
                   |        ИНАЧЕ ЛОЖЬ 
                   |    КОНЕЦ КАК Запрет 
                   |ИЗ 
                   |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары 
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки(&Период, ) КАК ЗаказыПокупателейОстатки 
                   |        ПО РеализацияТоваровУслугТовары.Номенклатура = ЗаказыПокупателейОстатки.Номенклатура 
                   |            И РеализацияТоваровУслугТовары.ЗаказПокупателя = ЗаказыПокупателейОстатки.ЗаказПокупателя 
                   |ГДЕ 
                   |    РеализацияТоваровУслугТовары.Ссылка = &Ссылка 
                   |    И РеализацияТоваровУслугТовары.СпособСписанияОстаткаТоваров = ЗНАЧЕНИЕ(Перечисление.СпособыСписанияОстаткаТоваров.ИзРезерва) 
                   | 
                   |СГРУППИРОВАТЬ ПО 
                   |    РеализацияТоваровУслугТовары.Номенклатура, 
                   |    РеализацияТоваровУслугТовары.ЗаказПокупателя, 
                   |    ВЫБОР 
                   |        КОГДА ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) - РеализацияТоваровУслугТовары.Количество * РеализацияТоваровУслугТовары.Коэффициент < 0 
                   |            ТОГДА ИСТИНА 
                   |        ИНАЧЕ ЛОЖЬ 
                   |    КОНЕЦ"; 
     
    Запрос.УстановитьПараметр("Ссылка", Ссылка); 
    Запрос.УстановитьПараметр("Период", Ссылка.Дата); 
     
    Результат = Запрос.Выполнить(); 
    Выборка = Результат.Выбрать(); 
     
    Пока Выборка.Следующий() Цикл 
        Если Выборка.Запрет Тогда 
             
            Сообщить("Ошибка! слишком много по заказу покупателя: " + Выборка.Номенклатура.Артикул  + " - " +  Выборка.Номенклатура, СтатусСообщения.Важное); 
             
            Отказ = Истина; 
             
        КонецЕсли; 
    КонецЦикла;
Показать
Ответы
Избранное Подписка Сортировка: Древо
3. alex-l19041 9 10.06.19 10:12 Сейчас в теме
(1) если
Запрос самописный
и эта проверка больше не нужна, то лучше отключить всю эту проверку, чтобы быстрее проводилось...
5. sasha-asn 10.06.19 10:15 Сейчас в теме
(3) ПроверкаПроведения нужна для проверки Коэффициентов упаковок ... Как я понимаю это....
8. alex-l19041 9 10.06.19 10:19 Сейчас в теме
(5) нет...
ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) - РеализацияТоваровУслугТовары.Количество * РеализацияТоваровУслугТовары.Коэффициент < 0
здесь сравнивается остаток по регистру ЗаказыПокупателей и количество в документе
sasha-asn; +1 Ответить
10. sasha-asn 10.06.19 10:32 Сейчас в теме
(8) подскажите пожалуйста, тогда какой вариант ещё есть? чтобы избегать
("Ошибка! слишком много по заказу покупателя: " + Выборка.Номенклатура.Артикул + " - " + Выборка.Номенклатура, СтатусСообщения.Важное);

Ведь всё верно по Заказу и по Реализации верное кол-во ШТ в упаковке... Как лучше исправить ошибку? Заранее благодарен за совет
13. alex-l19041 9 10.06.19 10:47 Сейчас в теме
(10) надо выяснить почему

РегистрНакопления.ЗаказыПокупателей.Остатки(&Период, ) для конкретной номенклатуры и заказа возвращает остаток меньше, чем пытаетесь списать в документе
2. Oldsad 10.06.19 09:55 Сейчас в теме
 И РеализацияТоваровУслугТовары.СпособСписанияОстаткаТоваров = ЗНАЧЕНИЕ(Перечисление.СпособыСписанияОстаткаТоваров.ИзРезерва) 
                   | 

можно указать в документе что товар списывается не из резерва, и тогда проверки не будет
alex-l19041; sasha-asn; +2 Ответить
4. sasha-asn 10.06.19 10:12 Сейчас в теме
6. sasha-asn 10.06.19 10:18 Сейчас в теме
(2)
И РеализацияТоваровУслугТовары.СпособСписанияОстаткаТоваров = ЗНАЧЕНИЕ(Перечисление.СпособыСписанияОстаткаТоваров.ИзРезерва)

Упс, так у меня товар теперь списывается не из Резерва? или это проверка что не проверяет Резерв ?
14. alex-l19041 9 10.06.19 10:53 Сейчас в теме
(6) это условие оставляет только те строки таблицы Товары, где СпособСписанияОстаткаТоваров " из резерва"
sasha-asn; +1 Ответить
17. sasha-asn 10.06.19 11:03 Сейчас в теме
(6)

И РеализацияТоваровУслугТовары.СпособСписанияОстаткаТоваров = ЗНАЧЕНИЕ(Перечисление.СпособыСписанияОстаткаТоваров.ИзРезерва)
более мягкое исключение для резерва может придумать?
18. alex-l19041 9 10.06.19 11:13 Сейчас в теме
(17) "мягкое" - ??? поменяйте СпособСписанияОстаткаТоваров и вопрос отпадет...
sasha-asn; +1 Ответить
20. sasha-asn 10.06.19 11:23 Сейчас в теме
(18) спасибо! вот тут мысли уже появились у меня
7. sasha-asn 10.06.19 10:18 Сейчас в теме
9. Oldsad 10.06.19 10:22 Сейчас в теме
(7)
скорее всего это так, перед списанием из резерва идет проверка что бы в минуса не улететь
alex-l19041; sasha-asn; +2 Ответить
11. sasha-asn 10.06.19 10:43 Сейчас в теме
Господа как лучше дописать Запрос? Подскажите пожалуйста...
12. alex-l19041 9 10.06.19 10:45 Сейчас в теме
(11) что хотите изменить ?
sasha-asn; +1 Ответить
15. sasha-asn 10.06.19 10:59 Сейчас в теме
(12) ругается сообщением что Товара одновременно слишком много и слишком мало... Отладчиком падаю на два запроса... Запрос как то косячно выдаёт ошибку проверки... Я вот думаю может как то можно было сделать мягкую ПроверкуПроведения? Но тут же опять Резервы, остатки...

Вот второй запрос
Процедура ПроверитьНаличияРезерваПодИсточник(Ссылка, Отказ, РеквизитИсточника) ЭКСПОРТ
		
		Если Ссылка.дата > Дата("20150101") Тогда
			Запрос = Новый Запрос;
			Запрос.Текст = "ВЫБРАТЬ
			|	Док.Номенклатура,
			|	Док.СерияНоменклатуры,
			|	Док." + ?(Ссылка.Метаданные().Имя = "_КорректировкаРезерва", "Ссылка." + РеквизитИсточника, "ЗаказПокупателя") + " КАК ЗаказПокупателя,
			|	СУММА( " + ?(Ссылка.Метаданные().Имя = "_КорректировкаРезерва", "Док.НовоеКоличество)", "Док.Количество * Док.Коэффициент)") + " КАК КоличествоОтгрузка,
			|	Док.ХарактеристикаНоменклатуры
			|ПОМЕСТИТЬ ВТ_Отгрузка
			|ИЗ
			|	Документ." + ?(Ссылка.Метаданные().Имя = "_КорректировкаРезерва", "_КорректировкаРезерва.ТоварыВРезерве", "РеализацияТоваровУслуг.Товары") + " КАК Док
			|ГДЕ
			|	Док.Ссылка = &Ссылка
			|	" + ?(Ссылка.Метаданные().Имя = "_КорректировкаРезерва", "", "И Док.СпособСписанияОстаткаТоваров = ЗНАЧЕНИЕ(Перечисление.СпособыСписанияОстаткаТоваров.ИзРезерва)")
			+ " 
			|СГРУППИРОВАТЬ ПО
			|	Док.Номенклатура,
			|	Док.СерияНоменклатуры,
			|	Док." + ?(Ссылка.Метаданные().Имя = "_КорректировкаРезерва", "Ссылка." + РеквизитИсточника, "ЗаказПокупателя") +",
			|	Док.ХарактеристикаНоменклатуры
			|;
			|
			|////////////////////////////////////////////////////////////­////////////////////
			|ВЫБРАТЬ
			|	ТоварыВРезервеНаСкладахОстатки.Номенклатура,
			|	ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры,
			|	ТоварыВРезервеНаСкладахОстатки.ДокументРезерва,
			|	ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры,
			|	СУММА(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
			|ПОМЕСТИТЬ ВТ_РезервыСделки
			|ИЗ
			|	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Период, ДокументРезерва = &Сделка) КАК ТоварыВРезервеНаСкладахОстатки
			|
			|СГРУППИРОВАТЬ ПО
			|	ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры,
			|	ТоварыВРезервеНаСкладахОстатки.Номенклатура,
			|	ТоварыВРезервеНаСкладахОстатки.ДокументРезерва,
			|	ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
			|;
			|
			|////////////////////////////////////////////////////////////­////////////////////
			|ВЫБРАТЬ
			|	ВТ_Отгрузка.Номенклатура,
			|	ВТ_Отгрузка.СерияНоменклатуры,
			|	ВТ_Отгрузка.ЗаказПокупателя,
			|	ЕСТЬNULL(ВТ_РезервыСделки.КоличествоОстаток, 0) - ВТ_Отгрузка.КоличествоОтгрузка КАК ОстаткиКОтгрузки
			|ПОМЕСТИТЬ ВТ_АнализВыполнение
			|ИЗ
			|	ВТ_Отгрузка КАК ВТ_Отгрузка
			|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РезервыСделки КАК ВТ_РезервыСделки
			|		ПО ВТ_Отгрузка.Номенклатура = ВТ_РезервыСделки.Номенклатура
			|			И ВТ_Отгрузка.СерияНоменклатуры = ВТ_РезервыСделки.СерияНоменклатуры
			|			И ВТ_Отгрузка.ЗаказПокупателя = ВТ_РезервыСделки.ДокументРезерва
			|			И ВТ_Отгрузка.ХарактеристикаНоменклатуры = ВТ_РезервыСделки.ХарактеристикаНоменклатуры
			|;
			|
			|////////////////////////////////////////////////////////////­////////////////////
			|ВЫБРАТЬ
			|	ВТ_АнализВыполнение.Номенклатура,
			|	ВТ_АнализВыполнение.СерияНоменклатуры,
			|	ВТ_АнализВыполнение.ЗаказПокупателя,
			|	ВЫБОР
			|		КОГДА ВТ_АнализВыполнение.ОстаткиКОтгрузки < 0
			|			ТОГДА ИСТИНА
			|		ИНАЧЕ ЛОЖЬ
			|	КОНЕЦ КАК Запрет
			|ИЗ
			|	ВТ_АнализВыполнение КАК ВТ_АнализВыполнение";
			
			Запрос.УстановитьПараметр("Ссылка", Ссылка);
			Запрос.УстановитьПараметр("Период", Ссылка.Дата);
			Запрос.УстановитьПараметр("Сделка", Ссылка[РеквизитИсточника]);
			
 			Результат = Запрос.Выполнить();
			Выборка = Результат.Выбрать();
			
			Пока Выборка.Следующий() Цикл
				Если Выборка.Запрет Тогда
					
					Сообщить("Внимание! этого товара недостаточно в резерве: " + Выборка.Номенклатура.Артикул  + " - " +  Выборка.Номенклатура + " (" + Выборка.СерияНоменклатуры + ")", СтатусСообщения.Важное);
					Отказ = Истина;
					
				КонецЕсли; 
			КонецЦикла;
			
		КонецЕсли;
	КонецПроцедуры
Показать
19. alex-l19041 9 10.06.19 11:17 Сейчас в теме
(15) если видите "Внимание! этого товара недостаточно в резерве:" и хотите списывать из резерва, то надо выяснять причину остатков в резерве
sasha-asn; +1 Ответить
16. sasha-asn 10.06.19 11:01 Сейчас в теме
(12) сложно понять, как убрать ошибку проведения - чтобы не было слишком много и слишком мало одновременно... Мне кажется какая та проблема в проверке коэффициента упаковок в Запросе?
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Бобров
зарплата от 100 000 руб. до 150 000 руб.
Временный (на проект)

Студент (стажер) 1С
Нижний Новгород
зарплата от 25 000 руб.
Полный день

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

Программист 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день

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