Проверка наличия цен и остатков в перемещении. Розница 3

Клиенту нужен был собственный контроль остатков, потому что типовой был выключен. Чтобы допустимый остаток мог опускаться до минус одного.

А также контроль цен, чтобы при перемещении на точку по всем товарам был задан вид цен этой точки.

Код проверки получился простой и лаконичный:


&Перед("ПередЗаписью")
Процедура дор_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)  
	
	//Какой допустимый остаток возможен после проведения документа
	ДопустимыйПорогОстатка = -1; 
	
	//Контролируем остатки и наличие цен     
	//только если отправитель - главный склад
	Если РежимЗаписи = РежимЗаписиДокумента.Проведение И ЭтотОбъект.СтруктурнаяЕдиница = дор_С.ГлавныйСклад() Тогда
		
		ТЗ = ЭтотОбъект.Запасы.Выгрузить(, "НомерСтроки, Номенклатура, Характеристика, Количество");
		З = Новый Запрос();
		З.Текст =
		"ВЫБРАТЬ
		|	Т.НомерСтроки КАК НомерСтроки,
		|	Т.Номенклатура КАК Номенклатура,
		|	Т.Характеристика КАК Характеристика,
		|	Т.Количество КАК Количество
		|ПОМЕСТИТЬ ТН
		|ИЗ
		|	&ТЗ КАК Т
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ТН.НомерСтроки КАК НомерСтроки,
		|	ТН.Номенклатура КАК Номенклатура,
		|	ТН.Характеристика КАК Характеристика,
		|	ЕСТЬNULL(ТЦ.Цена, 0) КАК Цена,
		|	ЕСТЬNULL(ТО.КоличествоОстаток, 0) КАК Остаток,
		|	ТН.Количество КАК Количество
		|ИЗ
		|	ТН КАК ТН
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &ВидЦен) КАК ТЦ
		|		ПО ТН.Номенклатура = ТЦ.Номенклатура
		|			И ТН.Характеристика = ТЦ.Характеристика
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки(
		|				&Дата,
		|				Организация = &Организация
		|					И СтруктурнаяЕдиница = &СкладОтправитель) КАК ТО
		|		ПО ТН.Номенклатура = ТО.Номенклатура
		|			И ТН.Характеристика = ТО.Характеристика";
		Если ЭтотОбъект.Ссылка.Пустая() Тогда
			Граница = Новый Граница(ЭтотОбъект.Дата, ВидГраницы.Исключая);
		Иначе
			Граница = Новый Граница(ЭтотОбъект.МоментВремени(), ВидГраницы.Исключая);
		КонецЕсли;
		З.УстановитьПараметр("Дата", Граница);
		З.УстановитьПараметр("ТЗ", ТЗ);
		З.УстановитьПараметр("ВидЦен", ЭтотОбъект.СтруктурнаяЕдиницаПолучатель.РозничныйВидЦен);
		З.УстановитьПараметр("СкладОтправитель", ЭтотОбъект.СтруктурнаяЕдиница);
		З.УстановитьПараметр("Организация", ЭтотОбъект.Организация);
		
		
		Выборка = З.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			
			Если Выборка.Цена = 0 Тогда
				Сообщить("У товара не назначена цена: " + Выборка.Номенклатура + " " + Выборка.Характеристика);
				Отказ = истина;
			КонецЕсли;
			
			Остаток = Выборка.Остаток - Выборка.Количество;
			Если Остаток < ДопустимыйПорогОстатка Тогда
				Сообщить(
				"У товара перемещается: " + Выборка.Количество 
				+ " на остатке: " +  Выборка.Остаток 
				+ " после проведения остаток: " + Остаток 
				+ ", что меньше допустимого: " + ДопустимыйПорогОстатка + "! "
				+ " " + Выборка.Номенклатура + " " + Выборка.Характеристика);
				Отказ = истина;
			КонецЕсли;
			
		КонецЦикла;                                  
	КонецЕсли;
	
	
КонецПроцедуры




Среда: Розница 3.0.12.237 Объем: 1 час

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

1 комментарий

  1. rzd:

    банальное исправление «вчерашнего» документа приведет к нарушению контроля остатков. Я уже не говорю про другие виды документов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *