Имя: Пароль:
1C
1С v8
Выбрать по одной строке для значения поля
,
0 sbabay
 
05.12.12
09:02
Есть две таблицы:
1)втРасходы с колонками: Контрагент, Услуга, Товар, ПриходДок
2)втДолги с колонками: Контрагент, Сумма

Во второй таблице "Контрагент" - уникальное. В первой уникальность по совокупности столбцов.
Нужно дополнить ЛЮБУЮ ОДНУ строку первой значением столбца "Сумма" второй таблицы для каждого контрагента.

Пример.
1) втРасходы:
Контрагент1, Продажа, Костыль, Док1
Контрагент1, Продажа, Костыль2, Док1
Контрагент1, Продажа, Костыль, Док2
Контрагент2, Продажа, Цветок, Док2
20 втДолги:
Контрагент1, 100
Контрагент2, 200

Итоговая таблица:
Контрагент1, Продажа, Костыль, Док1, 100
Контрагент1, Продажа, Костыль2, Док1, 0
Контрагент1, Продажа, Костыль, Док2, 0
Контрагент2, Продажа, Цветок, Док2, 200

Ес-но надо в запросе
1 sbabay
 
05.12.12
09:04
Первое что приходит на ум - вложенные запросы, причем уровень вложенности будет равен количеству колонок, по которому первая таблица имеет уникальный ключ, т.е. в данном случае = 4.
Но хочется более изящного и простого решения.
Есть идеи?
2 butterbean
 
05.12.12
09:09
делаешь запрос к таблице1: Контрагент, МАКСИМУМ(Услуга),МАКСИМУМ(Товар),МАКСИМУМ(ПриходДок)
к ней левым соединением цепляешь таблицу2
получившуюся таблицу левым соединением по всем полям цепляешь к таблице1
3 sbabay
 
05.12.12
09:11
(2) и в итоге ни с чем не соединится, ибо МАКСИМУМЫ пришли из разных строк
4 butterbean
 
05.12.12
09:12
(3) а, ну да...
5 mzelensky
 
05.12.12
09:14
(3) ну можно не максимум, можно просто взять первую строку.

а потом как в (2)
6 sbabay
 
05.12.12
09:16
(5) и как "просто взять первую строку"?
7 butterbean
 
05.12.12
09:18
а может так:
соединить 1-ю и 2-ю
потом запрос к первой типа: Контрагент,КОЛИЧЕСТВО(Контрагент)
потом соединить их по Контрагент, а поле Сумма разделить на КОЛИЧЕСТВО(Контрагент)
ну как-то так
8 mzelensky
 
05.12.12
09:21
А может как-то проиндеквировать первую таблицу.Типа

Контрагент1, Продажа, Костыль, Док1    - ИД1
Контрагент1, Продажа, Костыль2, Док1    - ИД2
Контрагент1, Продажа, Костыль, Док2    - ИД3
Контрагент2, Продажа, Цветок, Док2    - ИД2

А потом делать соединение второй по условию ИД = ИД1
9 sbabay
 
05.12.12
09:22
(7) Т.е. предлагаешь в примере из (0) разбить 100 на 3 и вписать в каждую строку по 33, 33(3)?
Если да, то так нельзя по условию задачи.
Если нет, то не понял как.
10 sbabay
 
05.12.12
09:24
(8) об этом тоже думал, но не знаю как проиндексировать. Ведь в языке запросов от 1С нет ни НьюИД(), ни РоИД, ни преобразования ссылки в строку.
Сквозную нумерацию к такой таблице тоже прилепить сложно.
11 jenny_tea
 
05.12.12
09:25
Левое соединение втРасходы и втДолги по Контрагент естесно

а поле сумма прописать как естьNull(втДолги.Сумма,0)
12 jenny_tea
 
05.12.12
09:27
сорри так будет во всех по контагенту
13 sbabay
 
05.12.12
11:52
есть еще у кого-нибудь мысли?
14 butterbean
 
05.12.12
13:59
(13) изврат конечно, но можно как в (2) только делать МАКСИМУМ(Услуга.Код + Товар.Код + и т.д.) так должно прокатить :-)
15 sbabay
 
05.12.12
14:02
(14) так прокатит если коды уникальны, а это необязательное требование (как и уникальные наименования)