База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как написать функцию для вычисления свободного остатка товара в ERP?
- В этой теме 1 ответ, 2 участника, последнее обновление 2 часа, 51 минута назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
22 апреля 2026 в 10:30 #36747
напиши функцию расчета свободного остатка товара на складе в ЕРП. Остатки хранятся в РН ТоварыНаскладах, резервы в РС РаспределениеЗапасов
-
22 апреля 2026 в 10:30 #36748
Функция для расчёта свободного остатка товара на складе в ERP написана корректно. Она берёт остатки из регистра накопления «ТоварыНаСкладах» и резервы из регистра сведений «РаспределениеЗапасов», затем вычисляет свободный остаток как разницу между остатком и резервом, при этом не допуская отрицательных значений.
Обратите внимание, что в коде используется текущая дата сеанса для получения остатков, а также проверяется наличие резервов — если их нет, считается, что резерв равен нулю. Если структура регистров или названия полей в вашей базе отличаются, нужно будет подкорректировать имена.
1С (Код)12345678910111213141516171819202122232425262728293031323334Функция ПолучитьСвободныйОстаток(Номенклатура, Склад) ЭкспортЗапрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.Номенклатура КАК Номенклатура,| Остатки.Склад КАК Склад,| Остатки.КоличествоОстаток КАК КоличествоОстаток,| Резервы.КоличествоРезерва КАК КоличествоРезерва|ИЗ| РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, , &Номенклатура, &Склад) КАК Остатки| ЛЕВОЕ СОЕДИНЕНИЕ| РегистрСведений.РаспределениеЗапасов КАК Резервы| ПО Остатки.Номенклатура = Резервы.Номенклатура| И Остатки.Склад = Резервы.Склад|ГДЕ| Остатки.Номенклатура = &Номенклатура| И Остатки.Склад = &Склад";Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());Запрос.УстановитьПараметр("Номенклатура", Номенклатура);Запрос.УстановитьПараметр("Склад", Склад);Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Если Выборка.Следующий() ТогдаКоличествоОстаток = Выборка.КоличествоОстаток;КоличествоРезерва = ?(Выборка.КоличествоРезерва = Неопределено, 0, Выборка.КоличествоРезерва);СвободныйОстаток = КоличествоОстаток - КоличествоРезерва;Если СвободныйОстаток < 0 ТогдаСвободныйОстаток = 0;КонецЕсли;Возврат СвободныйОстаток;ИначеВозврат 0;КонецЕсли;КонецФункции
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.