Имя: Пароль:
1C
1С v8
Помогите перешедшему с v7 создать запрос из двух регистров с объединением
,
0 Ashabad
 
30.11.11
23:24
Я недавно перешёл на v8 - не было необходимости. C SQL дружу плохо. Проблема такая:
Конфа Управление торговлей для Украины
Два регистра ВзаиморасчетыСКонтрагентами и ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.
Нужно выбрать по конкретному контрагенту и организации регистраторы из первого регистра и присединить к ним по по аналогичным условиям регистраторы из второго, но только те, которых нет в первом.
1 zak555
 
30.11.11
23:24
> Я недавно перешёл на v8

зря
2 zak555
 
30.11.11
23:25
если бы расписал структуру регистров - может что-то и  было
3 zak555
 
30.11.11
23:25
> C SQL дружу плохо

базу хоть прочти
4 Grusswelle
 
30.11.11
23:25
> Конфа Управление торговлей для Украины

хз, я только с российской знаком...
5 zak555
 
30.11.11
23:25
+ по сколько укр - пиши на eng
6 Ashabad
 
30.11.11
23:27
регистры накопления

В обоих регистрах есть измерения:

Организация
Контрагент
и ресурс
СуммаВзаиморасчетов
7 andrewks
 
30.11.11
23:27
какого вида таблицу надо получить?
8 zak555
 
30.11.11
23:28
(6) и всё ?
9 Ashabad
 
30.11.11
23:29
Организация, Контрагент, Регистратор, ОстатокСуммаВзаиморасетов
10 zak555
 
30.11.11
23:29
осталось узнать, что такое регистратор
11 Ashabad
 
30.11.11
23:29
(8) есть другие измерения и реквизиты, но мне они не нужны
12 Ashabad
 
30.11.11
23:30
(10) документ, сделавший движение
13 zak555
 
30.11.11
23:30
(12) измерение ?
14 zak555
 
30.11.11
23:31
(11) что в результате тхочешь ?
15 Ashabad
 
30.11.11
23:32
(14) Выборку из запроса
16 zak555
 
30.11.11
23:33
думается мне, что первый - более обощённый регс, чем второй => задание невыполнимо
17 Ashabad
 
30.11.11
23:36
(16) В данном случае мне нужен синтаксис запроса из двух регистров со сходной структурой. Типы описанных измерений и ресурсов совпадают. Аналога синтаксиса NOT EXIST я не нашёл.
18 zak555
 
30.11.11
23:37
правое соединение + есть нулл ?
19 Ashabad
 
30.11.11
23:39
(18) если можно - пример, ибо я пока не могу мыслить в восмёрошном языке запросов абстрактно.
20 zak555
 
30.11.11
23:41
(19) не умею
21 SnarkHunter
 
30.11.11
23:48
Элементарное объединение...
22 Ashabad
 
30.11.11
23:52
(21) для меня это пока не элементарно
23 zak555
 
30.11.11
23:56
(21) через соединение никак ?
24 Ashabad
 
01.12.11
00:00
(23) Наверно, через соединение. Но опыта нет. Да я вобщем обошёлся, некрасиво конечно, я стараюсь так не делать: два запроса с последующим сравнением. Но времени на изучение теории нет. Я обычно на форумы по таким вопросам не обращаюсь, чтобы не отвлекать умных людей.
25 КонецЦикла
 
01.12.11
01:26
(21) Объединение подразумевает объединение при условии одинакового набора данных
А тут неясна структура и "тех которых нет в первом"
(24) Левое соединение со вторым регистром по всем полям + те же условия + условие регистратор is null
26 viktor_vv
 
01.12.11
01:45
У меня как-то так получилось. Только учитывая " ОстатокСуммаВзаиморасетов" Надо было ОстаткиИОбороты брать. Чето меня всегда напрягает желание получить остатки по регистратору.

   ТекстЗапроса = "
   |ВЫБРАТЬ
     |    ВзаиморасчетыСКонтрагентамиОбороты.Организация КАК Организация,
     |    ВзаиморасчетыСКонтрагентамиОбороты.Контрагент КАК Контрагент,
     |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор КАК Регистратор
     |Поместить
     |   ВремВзаиморасчеты
     |ИЗ
     |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&ДатаНач,&ДатаКон , Регистратор,Контрагент = &Контрагент И Организация = &Организация ) КАК ВзаиморасчетыСКонтрагентамиОбороты
     |;
     |//////////////////////////////
     |Выбрать
     |Общая.Организация КАК Организация,
     |Общая.Контрагент КАК Контаргент,
     |Общая.Регистратор КАК Регистратор,
     |Общая.Добавленные Как Добавленные
     |
     |ИЗ
     |
     |(Выбрать
     |    ВремВзаиморасчеты.Организация КАК Организация,
     |    ВремВзаиморасчеты.Контрагент КАК Контрагент,
     | ВремВзаиморасчеты.Регистратор КАК Регистратор,
     | 0 КАК ДобавленныеИзРасчетов
     |  ИЗ
     |ВремВзаиморасчеты Как ВремВзаиморасчеты
     |
     |Объединить Все
     |
     |ВЫБРАТЬ
    |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Организация Как Организация,
    |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Контрагент КАК Контрагент,
    |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор КАК Регистратор,
    |    1 КАК ДобавленныеИзРасчетов
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(&ДатаНач,&ДатаКон , Регистратор, Контрагент = &Контрагент И Организация = &Организация) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты
    | Где
    |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор
    |        НЕ В (Выбрать Регистратор ИЗ ВремВзаиморасчеты)
    |    ) КАК Общая
    |
    |Упорядочить ПО Общая.Организация.Наименование , Общая.Контрагент.Наименование, Общая.Регистратор.Дата
   |";
   
   Запрос = Новый Запрос ;
   
   Запрос.УстановитьПараметр("ДатаНач",'20080101');
   Запрос.УстановитьПараметр("ДатаКон",КонецДня(ТекущаяДата()));
   Запрос.УстановитьПараметр("Организация",Организация);
   Запрос.УстановитьПараметр("Контрагент",Контрагент);
   Запрос.Текст = ТекстЗапроса ;
   
   ТЗ = Запрос.Выполнить().Выгрузить();
   
   ТЗ.ВыбратьСтроку();

Организация и Контаргент реквизиты отчета.

Правда судя по демобазе движения там делаются синхронно, специально добавил поле для проверки.
27 viktor_vv
 
01.12.11
02:35
Попрактикуюсь немного :).

Через полное так получаетя.

   ТекстЗапроса = "
    |     ВЫБРАТЬ
    |    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Организация,
    |    ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент,
    |    Выбор Когда ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор IS NULL Тогда 1 Иначе 0 Конец КАК Добавленные,
    |    IsNull(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор,ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Регистратор),
    |    IsNull(ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток,ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток) КАК СуммаОстаток
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(, , Регистратор, Движения, Контрагент = &Контрагент И Организация = &Организация) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
    |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(, , Регистратор, Движения, Контрагент = &Контрагент И Организация = &Организация) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты
    |        ПО ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Организация = ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Организация
    |            И ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент = ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Контрагент
    |            И ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор = ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Регистратор
    |";
   
   Запрос = Новый Запрос ;
   
   Запрос.УстановитьПараметр("ДатаНач",'20080101');
   Запрос.УстановитьПараметр("ДатаКон",КонецДня(ТекущаяДата()));
   Запрос.УстановитьПараметр("Организация",Организация);
   Запрос.УстановитьПараметр("Контрагент",Контрагент);
   Запрос.Текст = ТекстЗапроса ;
   
   ТЗ = Запрос.Выполнить().Выгрузить();
   
   ТЗ.ВыбратьСтроку();
28 Зеленый Кот
 
01.12.11
02:42
запросом впечатлился... восхищен!
29 Ashabad
 
01.12.11
02:54
(26-27) Искренне спасибо. Необходимо будет основательно это всё обдумать. Спасибо...
30 FIXXXL
 
01.12.11
03:03
(0) уверен, что там и там сходятся?
галки в конфе все стоят?
ты в принципе сравнить (соеденить) хочешь г..овно с ловатой
2 + 2 = 3.9999999999999999999999999999999...