Есть документ продажи товаров и услуг. В документе часть продажи разных ответственных.
Документ оплачивают разными видами оплат.
Нужно оплаты распределить пропорционально продажам в документе.

Даны 2 таблицы:
ПРОДАЖИ

```1c
    -------------------------------
    | Ответственный | СуммаПродаж |
    -------------------------------
    | Иванов | 30 |
    | Петров | 90 |
    -------------------------------
```

ОПЛАТЫ

```1c
    ---------------------------
    | ВидОплаты | СуммаОплат |
    ---------------------------
    | Наличными | 40 |
    | Картой | 80 |
    ---------------------------
```

Необходимо получить таблицу:
ПРОДАЖИ И ОПЛАТЫ

```1c
    ------------------------------------------
    | Ответственный | ВидОплаты | СуммаОплат |
    ------------------------------------------
    | Иванов | Наличными | 10 |
    | Иванов | Картой | 20 |
    | Петров | Наличными | 30 |
    | Петров | Картой | 60 |
    ------------------------------------------
```

P.S. Количество видов оплат и число ответственных может быть различным. Так же необходимо учесть проблему округления (последней копейки), чтобы общая сумма оплат совпадала с суммой оплат в третьей таблице.
---
```1c
    тз=Новый ТаблицаЗначений;
    тз.Колонки.Добавить("Ответственный");
    тз.Колонки.Добавить("ВидОплаты");
    тз.Колонки.Добавить("Сумма");

    ИтогСуммаОплат=тзОплат.Итог("Сумма");

    Для каждого стрП из тзПродаж Цикл
    ТекСуммаП=0;
    Для каждого стрО из тзОплат Цикл
    стрНов=тз.Добавить();
    стрНов.Ответственный=стрП.Ответственный;
    стрНов.ВидОплаты=стрО.ВидОплаты;
    стрНов.Сумма=Окр((стрО.Сумма/ИтогСуммаОплат)*стрП.Сумма,2);
    ТекСуммаП=ТекСуммаП+стрНов.Сумма;
    КонецЦикла;
    Если ТекСуммаП<>стрП.Сумма Тогда
    стрНов.Сумма=стрНов.Сумма+(стрП.Сумма-ТекСуммаП);
    КонецЕсли;
    КонецЦИкла;
```
---
Алгоритм что ли нужен?
---
да
---
Это отчет, или обработка, или при проведении оплаты распределять ее на реализацию? (непонятно в каком виде нужен алгоритм, одним запросом, или можно кодом, или еще как)
---
это таблица, которая в регистр накопления будет записана
---
Нужно оплаты распределить пропорционально продажам в документе. Переплаты (авансы) возможны?
Необходимо получить таблицу: Код написать?
Так же необходимо учесть проблему округления (последней копейки), чтобы общая сумма оплат совпадала с суммой оплат в третьей таблице. Ну, с этим проще, алгоритм известен:
1. Подсчитываем общую сумму продаж - это будет БазаРаспределения.
2. По каждому виду оплаты подсчитываем общую СуммуОплаты, которую надо распределить.
3. Перебираем строки в таблице продаж, для каждого ответственного вычисляем процент СуммаПродаж/БазаРаспределения.
4. Вычисляем ДолюОплаты как СуммаОплаты*СуммаПродаж/БазаРаспределения, округляем по необходимости.
5. Из общей СуммыОплаты вычитаем рассчитанную ДолюОплаты, а из БазыРаспределения - текущую СуммуПродаж, именно этим достигается решение проблемы "последней копейки": на последней строке оказывается БазаРаспределения=СуммаПродаж и в нее ляжет весь нераспределенный остаток суммы оплаты, до копейки.

Повторяем это для каждого вида оплаты.
---
Переплаты (авансы) возможны?
Нет, сумма оплат = сумме продаж

Код написать?
Ага :)
---
Ага :) "Малавата будет! Малавата!" (с)
---
Ага :)

ну если подождешь чутка, то накатаю. там ведь не сложно делается.
---
```1c
    тз=Новый ТаблицаЗначений;
    тз.Колонки.Добавить("Ответственный");
    тз.Колонки.Добавить("ВидОплаты");
    тз.Колонки.Добавить("Сумма");

    ИтогСуммаОплат=тзОплат.Итог("Сумма");

    Для каждого стрП из тзПродаж Цикл
    ТекСуммаП=0;
    Для каждого стрО из тзОплат Цикл
    стрНов=тз.Добавить();
    стрНов.Ответственный=стрП.Ответственный;
    стрНов.ВидОплаты=стрО.ВидОплаты;
    стрНов.Сумма=Окр((стрО.Сумма/ИтогСуммаОплат)*стрП.Сумма,2);
    ТекСуммаП=ТекСуммаП+стрНов.Сумма;
    КонецЦикла;
    Если ТекСуммаП<>стрП.Сумма Тогда
    стрНов.Сумма=стрНов.Сумма+(стрП.Сумма-ТекСуммаП);
    КонецЕсли;
    КонецЦИкла;
```
---
спасибо!
---
пожалуйста;)