База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как написать формулу расчета суммы проводки в 1С с учетом остатков? › Ответ в теме: Как написать формулу расчета суммы проводки в 1С с учетом остатков?
Для расчёта суммы проводки по формуле:
Сумма = (Суммовой остаток по счету 130001.1006 на момент времени документа) / (Количественный остаток по счету 130001.1006 на момент времени документа) * Количество в проводке
нужно получить остатки по счету на дату документа и умножить на количество из текущей записи.
Пример кода на 1С (8.3), который можно использовать в обработке документа или общем модуле:
|
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 35 36 |
Функция РассчитатьСуммуПроводки(ДатаДокумента, КоличествоПроводки) Экспорт // Получаем суммовой остаток по счету 130001.1006 на дату документа ЗапросСумма = Новый Запрос; ЗапросСумма.Текст = "ВЫБРАТЬ | Остатки.Счет КАК Счет, | СУММА(Остатки.Сумма) КАК СуммовойОстаток, | СУММА(Остатки.Количество) КАК КоличественныйОстаток |ИЗ | РегистрНакопления.ОстаткиПоСчету КАК Остатки |ГДЕ | Остатки.Счет = &Счет | И Остатки.Период <= &Дата |СГРУППИРОВАТЬ ПО | Остатки.Счет"; ЗапросСумма.УстановитьПараметр("Счет", "130001.1006"); ЗапросСумма.УстановитьПараметр("Дата", ДатаДокумента); Результат = ЗапросСумма.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() Тогда Если Выборка.КоличественныйОстаток = 0 Тогда // Чтобы избежать деления на ноль Возврат 0; КонецЕсли; // Формула расчёта суммы СуммаПроводки = (Выборка.СуммовойОстаток / Выборка.КоличественныйОстаток) * КоличествоПроводки; Возврат СуммаПроводки; Иначе // Если остатков нет, возвращаем 0 Возврат 0; КонецЕсли; КонецФункции |
Объяснение:
- В запросе берём суммовой и количественный остаток по счету 130001.1006 на дату документа (или на момент времени документа).
- Делим суммовой остаток на количественный, получаем среднюю цену.
- Умножаем на количество в текущей проводке.
- Обрабатываем случай деления на ноль.
Если у вас остатки хранятся в другом регистре или структуре, замените имя регистра и поля соответственно.
Если нужно использовать в обработчике документа, то вызов будет примерно так:
|
1 2 3 4 |
Количество = ТекущаяСтрокаТабличнойЧасти.Количество; ДатаДокумента = ДокументОбъект.Дата; Сумма = РассчитатьСуммуПроводки(ДатаДокумента, Количество); ТекущаяСтрокаТабличнойЧасти.Сумма = Сумма; |
Если нужна помощь с конкретным регистром или деталями, уточните структуру данных.