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





По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот