Имя: Пароль:
1C
1С v8
СКД. Распределить в группировка сумму пропорционально
0 location
 
naïve
05.07.21
11:32
Подскажите как правильно сделать распределение или в запросе или в вычисляемых полях.
Есть документ доставки и документы реализации, в документе доставки может быть какое угодно число документов реализации в табличной часте. В документе доставки указана сумма доставки. Вот при выводе отчета надо эту сумму распределить по всем документам реализации пропорционально суммам продажи.

Пример отчета.
Док доставки - Сумма доставки
    Док РТУ   - Сумма доставки распределенная пропорционально сумме продажи
    Док РТУ2  - Сумма доставки распределенная пропорционально сумме продажи
    Док РТУ...- Сумма доставки распределенная пропорционально сумме продажи
1 fisher
 
05.07.21
11:47
С помощью ВычислитьВыражение в СКД можно обращаться к итогам вышестоящих группировок. Но для этого скорее всего придется делать явную группировку по документам доставки.
В запросе проще и универсальнее, ИМХО. Ну а в запросе все тривиально. Для пропорции тебе необходимо для каждой реализации иметь общую сумму доставки и общую сумму реализаций по этой доставке. Это получаешь подзапросом и соединяешь с исходным.
2 location
 
naïve
05.07.21
12:31
(1) а что делать с копейками, которые выскакивают в результате округления?
3 fisher
 
05.07.21
13:03
(2) Прикарманить. Если не будешь в запросе явно округлять, то погрешность будет невелика, но от нее никуда не деться и итоги группировок могут на копейки отличаться от суммы по детализации.
Обычно сабжевая задача стоит в рамках реального распределения (отражения результатов в учетных данных), а не виртуального (в отчете). Реальное распределение с учетом округлений имеет разные стратегии.
Мне больше всего нравится округление с учетом погрешности предыдущего округления. Тогда погрешность округлений размазывается в процессе и не накапливается. Но в запросе такое делать проблематично.
Если очень хочется, можно в запросе сделать аналог округления с отнесением погрешности на строку с наибольшим значением. Непонятно только нафига.
Берешь предыдущий алгоритм как первый этап. В нем выполняешь реальное округление. Вторым этапом (запросом) получаешь разницу между итогами округления и суммой транспортировки. Ну и в итоге выполняешь объединение итогов реального округления с получившейся погрешностью, отнеся ее на накладные с максимальной суммой (их получаешь отдельным подзапросом в рамках документов транспортировки).