Имя: Пароль:
1C
1С v8
Запрос 1С 8 как сделать "Перемножение матриц"
0 MikeCurious
 
13.01.15
12:09
Есть 2 подзапроса (несложных):
1й возвращает таблицу с колонками: Счет, Товар, Сумма
2й возвращает таблицу с колонками: Счет, ДокументОплаты, СуммаОплаты

Естественно в каждом счете может быть несколько товаров, и оплат по 1 счету может быть несколько. Вопрос как получить таблицу следующего вида:
Счет, Товар, ДокументОплаты, Сумма, СуммаОплаты. Где на КАЖДУЮ комбинацию Товар+ДокументОплаты будет своя строка?

Пример (для простоты с 1 счетом):
Таблица 1: Счет1, Стул, 10
           Счет1, Стол, 30
Таблица 2: Счет1, ПКО1 от 01.10.14, 15
           Счет1, ПКО2 от 10.10.14, 25

Нужно получить: Счет1, Стул, 10, ПКО1, 15
                Счет1, Стул, 10, ПКО2, 25
                Счет1, Стол, 30, ПКО1, 15
                Счет1, Стол, 30, ПКО2, 25

Реально получить такую таблицу в запросе 1С8.3? (СКД).
1 mikecool
 
13.01.15
12:10
полное соединение по номенклатуре, не?
2 Cube
 
13.01.15
12:10
(1) По счету, ты хотел сказать?
3 MikeCurious
 
13.01.15
12:17
Вероятно схалявил с примером :) предположим что товаров 3. Тогда в рез.таблице должно стать 6 строк. А полное соединение может дать число строк максимум 2+2=4 строки.
4 mikecool
 
13.01.15
12:18
(3) как посчитал?
(2) я бы по разному попробовал, прежде бы чем спросил )))
5 mikecool
 
13.01.15
12:18
(3) полное соединение число строк 1 умножить на число строк 2
6 hhhh
 
13.01.15
12:27
(3) полное соединение даст 3*3 = 9 строк. Откуда сведения про 4 и про 6 строк?
7 PS_SP
 
13.01.15
12:27
Надо размазывать оплату по товарным позициям, насколько я понял. Ничего сложного нет на первом этапе. Или распределить по фифо. Это сложнее немного.  
Засада будет с копейками, если распределять,  и там где оплата попала не на тот счет. Те заплатили больше. Но вообще нежизненно. Никому не надо знать какой товар в счете оплачен, потому что в ПП это не пишут.
8 Жан Пердежон
 
13.01.15
12:31
фифо для нескольких поступлений/списаний гораздо проще в коде сделать, чем в запросе
9 MikeCurious
 
13.01.15
12:33
"Никому не надо знать какой товар в счете оплачен, потому что в ПП это не пишут." - Никому... кроме моего заказчика :)

Схему распределения я могу делать любую, поэтому беру по пропорциональной сумме каждого товара. т.е. если оплатили полсчета - это значит оплатили каждый товар на половину.

Кодом понятно что сделать можно, но тогда это нужно делать свой отчет в тонком клиенте без СКД...
10 MikeCurious
 
13.01.15
12:35
Кстати только что проверил полное соединение. Получается примерно как объединение таблиц. Идет вначале 1я, потом 2я (при одном счете).
11 MikeCurious
 
13.01.15
12:39
Хм, извиняюсь не прав. Если соединять только по счету. Получается то что надо :)
Огромное спс mikecool и Cube

Видимо я неправильно понимаю работу полного соединения...
12 Жан Пердежон
 
13.01.15
12:40
(9) если тупо пропорционально, делай в запросе, там еще округление надо будет не забыть "скинуть";
(10) судя по "перемножение матриц" и "проверил полное соедение" лучше позови специалиста
13 Лодырь
 
13.01.15
12:42
(12) Еще чуть чуть и он изобретет реляционную алгебру
14 PS_SP
 
13.01.15
12:45
(9) Передавай ему что он дебил. ) Если есть переплаты по счету, а они есть, тк платежи обязательно засандалят не туда, то задача распределением решается криво. Если принять что такого не могет быть, то умножай каждый платеж на товар, к примеру, и добавь колонку с общей суммой счета для поиска пропорции. Потом сгруппируешь. Вылезут копейки. С которыми потом еще надо будет бороться.
Но лучше научится делать фифо в запросе. Чтоб с копейками не бодаться и аванес вылазил.
Независимо от того, куда вы едете — это в гору и против ветра!