Имя: Пароль:
1C
1С v8
Как соединить две таблицы без дублей?
0 v_clim
 
20.11.12
23:57
Есть две таблицы
таблица 1  (регистрнакопления ПродажиОбороты)
Контрагент Номенклатура СуммаТ  
Клиент1     товар1      100
Клиент1     товар2      50
Клиент1     товар3      30
Клиент1     товар4      20

таблица 2  (регистрнакопления ТоварыПереданныеОстатки)
Контрагент Оборудование СуммаО  
Клиент1    Стойка       700


Необходимо получить следующее соединение (группируем по контрагенту)
Контрагент Номенклатура СуммаТ  Оборудование СуммаО  
Клиент1     товар1      100       Стойка       700
Клиент1     товар2      50        NULL         0
Клиент1     товар3      30      NULL           0
Клиент1     товар4      20        NULL         0

Но при левом соединении получаем дубли
Контрагент Номенклатура СуммаТ  Оборудование СуммаО  
Клиент1     товар1      100       Стойка       700
Клиент1     товар2      50        Стойка       700
Клиент1     товар3      30      Стойка       700
Клиент1     товар4      20        Стойка       700

Как избавиться от этих дблей?
1 Undefined vs NULL
 
20.11.12
23:59
вопрос такой, а почему к 1 товару, а не к второму?
2 cViper
 
20.11.12
23:59
(0) Какой смысл в колонке товар?
3 v_clim
 
21.11.12
00:01
Смысл этого всего в одном отчете показать продажи клиентов которые взяли оборудование в аренду. и какие товары они выбирают
4 cViper
 
21.11.12
00:03
(3) Так тебе надо показать все содержимое колонки с товаром а не одну позицию.
5 Undefined vs NULL
 
21.11.12
00:03
чем второй вариант
Клиент1     товар1      100       Стойка       700
Клиент1     товар2      50        Стойка       700
Клиент1     товар3      30      Стойка       700
Клиент1     товар4      20        Стойка       700

не устроил то?
6 cViper
 
21.11.12
00:04
(3) должны ли у тебя итоги по СУММАТ считаться и как?
7 zak555
 
21.11.12
00:04
(5)  он должен быть такой

Клиент1     товар1      100
Клиент1     товар2      50
Клиент1     товар3      30
Клиент1     товар4      20
Клиент1                         Стойка       700
8 cViper
 
21.11.12
00:07
Если (7) прав, то оставляй так
Клиент1     товар1      100       Стойка       700
Клиент1     товар2      50        Стойка       700
Клиент1     товар3      30      Стойка       700
Клиент1     товар4      20        Стойка       700

и добавь сюда иерархическую запись. Потом при выводе не нужные поля не выводи.
9 wertyu
 
21.11.12
00:16
объединить
10 v_clim
 
21.11.12
00:23
В этом варианте
Клиент1     товар1      100       Стойка       700
Клиент1     товар2      50        Стойка       700
Клиент1     товар3      30      Стойка       700
Клиент1     товар4      20        Стойка       700
Он суммирует стойку и в итоге по Стойке выдаст 2800, а должен 700
11 zak555
 
21.11.12
00:24
(10) покажи свой код запроса
12 v_clim
 
21.11.12
00:24
Вариант (7) вроде нормальный буду пробовать. Это все на СКД надо будет сделать
13 v_clim
 
21.11.12
00:25
ВЫБРАТЬ
   ТоварыПереданныеОстатки.Контрагент КАК КонтрагентК,
   ТоварыПереданныеОстатки.Номенклатура КАК Оборудование,
   ТоварыПереданныеОстатки.КоличествоОстаток КАК КоличествоОборудования,
   ТоварыПереданныеОстатки.СуммаВзаиморасчетовОстаток КАК СуммаК,
   ТоварыПереданныеОстатки.СуммаВзаиморасчетовОстаток / ТоварыПереданныеОстатки.КоличествоОстаток КАК ЦенаПродажи
ПОМЕСТИТЬ Комиссия
ИЗ
   РегистрНакопления.ТоварыПереданные.Остатки(, Контрагент = &Контр) КАК ТоварыПереданныеОстатки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ПродажиОбороты.Контрагент,
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.КоличествоОборот КАК Количество,
   ПродажиОбороты.СтоимостьОборот КАК Сумма
ПОМЕСТИТЬ Продажи
ИЗ
   РегистрНакопления.Продажи.Обороты(, , , Контрагент = &Контр) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Продажи.Контрагент КАК Контрагент,
   Продажи.Номенклатура,
   СУММА(Продажи.Количество) КАК Количество,
   СУММА(Продажи.Сумма) КАК Сумма,
   Комиссия.КонтрагентК,
   Комиссия.Оборудование,
   СУММА(Комиссия.КоличествоОборудования) КАК КоличествоОборудования,
   СУММА(Комиссия.СуммаК) КАК СуммаК,
   СУММА(Комиссия.ЦенаПродажи) КАК ЦенаПродажи
ИЗ
   Комиссия КАК Комиссия
       ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
       ПО Комиссия.КонтрагентК = Продажи.Контрагент

СГРУППИРОВАТЬ ПО
   Комиссия.Оборудование,
   Продажи.Контрагент,
   Продажи.Номенклатура,
   Комиссия.КонтрагентК
ИТОГИ
   СУММА(Сумма),
   СУММА(СуммаК)
ПО
   ОБЩИЕ
14 zak555
 
21.11.12
00:29
выбрать
р1.контрагент как клиент,
р1.Номенклатура как товар,
р1.Сумма как СуммаТ,
null,
0

из РегистрНакопления.Продажи.Обороты как р1

объеденить всё

выбрать
р2.контрагент как клиент,
NULL,
0,
р2.Номенклатура как Оборудование ,
р2.Сумма как СуммаО  


из егистрНакопления.ТоварыПереданные.Остатки как р2
15 Птица
 
21.11.12
00:34
(14) не получится. строки не сложатся как надо.
16 zak555
 
21.11.12
00:36
(15) ???
17 Птица
 
21.11.12
00:46
(0)
(0) здесь нужен счетчик строк. Если бы он был у каждой из таблиц, можно было бы добавить его в левое соединение, и все соединилось бы как надо.
а счетчик строк получается, например, соединением таблицы с самой собой:
ВЫБРАТЬ
Сумма(А.НомерСтроки) КАК НомерСтроки,
А.Номенклатура,
А.Клиент
ИЗ
(ВЫБРАТЬ
1 КАК НомерСтроки,
А1.Клиент КАК Клиент,
А1.Номенклатура КАК Номенклатура,
А2.Номенклатура КАК Номенклатура2
ИЗ А КАК А1
ЛЕВОЕ СОЕДИНЕНИЕ А КАК А2
ПО А1.Клиент = А2.Клиент И А1.Номенклатура >= A2.Номенклатура) КАК А
СГРУППИРОВАТЬ ПО
А.КЛИЕНТ,
А.Номенклатура

как-то так.
хотя, возможно появятся тормоза.
18 Птица
 
21.11.12
00:48
(16) нужно, чтобы в одной сстроке появились товар и оборудование. через (14) этого не произойдет - сначала будет строка с товаром, а потом - строка с оборудованием
19 Птица
 
21.11.12
00:54
+(17)хотя, возможно, операция сравнения на больше -меньше к ссылочному типу не применяется.  тогда нужно что -то другое, примитивного типа и уникальное. возможно, код.
20 zak555
 
21.11.12
00:55
(18) видел (12) ?
21 AlexITGround
 
21.11.12
01:02
только в 9 чувак сказал очевидную вещь
22 v_clim
 
21.11.12
01:22
Сделал объединение пойдет. Всем спасибо! :-)
23 zak555
 
21.11.12
01:23
(22) что ты сделал ?
24 v_clim
 
21.11.12
01:27
Просто объединил и сгруппировал по контрагенту. Все сделал в СКД. Закрыл глаза на то, что номенклатура и оборудование не в одной строке выводятся.
25 zak555
 
21.11.12
01:29
код покажи
26 v_clim
 
21.11.12
01:31
ВЫБРАТЬ
   ТоварыПереданныеОстатки.Контрагент,
   ТоварыПереданныеОстатки.Номенклатура КАК Оборудование,
   ТоварыПереданныеОстатки.КоличествоОстаток КАК КоличествоОборудования,
   ТоварыПереданныеОстатки.СуммаВзаиморасчетовОстаток КАК СуммаК,
   ТоварыПереданныеОстатки.СуммаВзаиморасчетовОстаток / ТоварыПереданныеОстатки.КоличествоОстаток КАК ЦенаПродажи,
   NULL КАК Номенклатура,
   NULL КАК Количество,
   NULL КАК Сумма
ИЗ
   РегистрНакопления.ТоварыПереданные.Остатки КАК ТоварыПереданныеОстатки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   ПродажиОбороты.Контрагент,
   NULL,
   NULL,
   NULL,
   NULL,
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.КоличествоОборот,
   ПродажиОбороты.СтоимостьОборот
ИЗ
   РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn