Не уход в минус при продаже товара, продажа по срокам годности

1. nevelin_storm 17.02.23 06:05 Сейчас в теме
РаботаСДокументамиМодуль
Функция АктуальныйСрокГодности(АктуальнаяДата, ЭлементТовара)  Экспорт
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПоступлениеТоваровСписокТоваров.Товар КАК Товар,
		|	ПоступлениеТоваровСписокТоваров.СрокГодности КАК СрокГодности
		|ИЗ
		|	Документ.ПоступлениеТоваров.СписокТоваров КАК ПоступлениеТоваровСписокТоваров
		|ГДЕ
		|	ПоступлениеТоваровСписокТоваров.Товар = &ЭлементТовара";
	
	Запрос.УстановитьПараметр("ЭлементТовара", ЭлементТовара);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	СрокиГодности = Новый Массив;
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		СрокиГодности.Добавить(ВыборкаДетальныеЗаписи.СрокГодности);
	КонецЦикла;                                                     
	
	Возврат СрокиГодности;
КонецФункции
Показать


РаботаСРегистромСведенийМодуль
Функция АктуальнаяЦена(АктуальнаяДата, ЭлементТовара) Экспорт
	Отбор = Новый Структура("Товар", ЭлементТовара);
	ЗначениеРесурсов = РегистрыСведений.ИзменениеЦены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
	Возврат ЗначениеРесурсов.Цена;
КонецФункции


ФормаДокументаПродажаТоваров
&НаКлиенте
Процедура СписокТоваровКоличествоПриИзмененииСуммы(Элемент)
	СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
	СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Сумма / СтрокаТабличнойЧасти.Количество;
КонецПроцедуры

&НаКлиенте
Процедура СписокТоваровКоличествоПриИзмененииКоличества(Элемент)
	СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
	СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры

&НаКлиенте
Процедура СписокТоваровЦенаПриИзмененииЦены(Элемент)
	СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
	СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры

&НаКлиенте
Процедура СписокТоваровКоличествоПриИзмененииТовара(Элемент)
	СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
	СтрокаТабличнойЧасти.Цена = РаботаРегистрСведений.АктуальнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Товар);
	
КонецПроцедуры


&НаКлиенте
Процедура СписокТоваровСрокГодностиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтрокаТабличнойЧасти = Элементы.СписокТоваров.ТекущиеДанные;
	
	СрокиГодности = Новый Массив;
	СрокиГодности = РаботаСДокументами.АктуальныйСрокГодности(Объект.Дата, СтрокаТабличнойЧасти.Товар);  
	
	Элемент.СписокВыбора.Очистить();
	
	Для каждого Дата ИЗ СрокиГодности Цикл
		Элемент.СписокВыбора.Добавить(Дата);
	КонецЦикла;

КонецПроцедуры
Показать


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


МодульПоступлениеТоваров
Процедура ОбработкаПроведения(Отказ, Режим)
	//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

	// регистр ОстаткиТоваров Приход
	Движения.ОстаткиТоваров.Записывать = Истина;
	Для Каждого ТекСтрокаСписокТоваров Из СписокТоваров Цикл
		Движение = Движения.ОстаткиТоваров.Добавить();
		Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
		Движение.Период = Дата;
		Движение.Товар = ТекСтрокаСписокТоваров.Товар;
		Движение.СрокГодности = ТекСтрокаСписокТоваров.СрокГодности;
		Движение.Количество = ТекСтрокаСписокТоваров.Количество;
	КонецЦикла;

	//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. XAKEP 17.02.23 08:33 Сейчас в теме
КОНСТРУКТОР

когда-то даже для печатной формы не сработал
нужно было подправлять.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот