База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как написать функцию для вычисления свободного остатка товара в ERP? › Ответ в теме: Как написать функцию для вычисления свободного остатка товара в ERP?
Функция для расчёта свободного остатка товара на складе в ERP написана корректно. Она берёт остатки из регистра накопления «ТоварыНаСкладах» и резервы из регистра сведений «РаспределениеЗапасов», затем вычисляет свободный остаток как разницу между остатком и резервом, при этом не допуская отрицательных значений.
Обратите внимание, что в коде используется текущая дата сеанса для получения остатков, а также проверяется наличие резервов — если их нет, считается, что резерв равен нулю. Если структура регистров или названия полей в вашей базе отличаются, нужно будет подкорректировать имена.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Функция ПолучитьСвободныйОстаток(Номенклатура, Склад) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Остатки.Номенклатура КАК Номенклатура, | Остатки.Склад КАК Склад, | Остатки.КоличествоОстаток КАК КоличествоОстаток, | Резервы.КоличествоРезерва КАК КоличествоРезерва |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, , &Номенклатура, &Склад) КАК Остатки | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.РаспределениеЗапасов КАК Резервы | ПО Остатки.Номенклатура = Резервы.Номенклатура | И Остатки.Склад = Резервы.Склад |ГДЕ | Остатки.Номенклатура = &Номенклатура | И Остатки.Склад = &Склад"; Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса()); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("Склад", Склад); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() Тогда КоличествоОстаток = Выборка.КоличествоОстаток; КоличествоРезерва = ?(Выборка.КоличествоРезерва = Неопределено, 0, Выборка.КоличествоРезерва); СвободныйОстаток = КоличествоОстаток - КоличествоРезерва; Если СвободныйОстаток < 0 Тогда СвободныйОстаток = 0; КонецЕсли; Возврат СвободныйОстаток; Иначе Возврат 0; КонецЕсли; КонецФункции |