Имя: Пароль:
1C
1С v8
Задвоение в запросе
,
0 Yeahkaterina
 
04.10.11
21:52
Здравствуйте! Подскажите пожалуйста, как правильно реализовать запрос. Запрос такой:


ВЫБРАТЬ
   ХозрасчетныйОстаткиИОбороты.Субконто1 КАК КонтрагентРег,
   ВложенныйЗапрос.Контрагент КАК КонтрагентДок,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
   ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот, 0) КАК СуммаОбРег,
   ВложенныйЗапрос.Дебет КАК Дебет,
   ВложенныйЗапрос.Кредит КАК Кредит,
   ВложенныйЗапрос.Суммавдок КАК СуммаОбДок,
   ВложенныйЗапрос.ДоговорВидДоговора,
   ВложенныйЗапрос.АктВзаим
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
       ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СУММА(ЕСТЬNULL(АктСверкиВзаиморасчетовПоДаннымОрганизации.Дебет - АктСверкиВзаиморасчетовПоДаннымОрганизации.Кредит, 0)) КАК Суммавдок,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка.Контрагент КАК Контрагент,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Договор.ВидДоговора КАК ДоговорВидДоговора,
           СУММА(АктСверкиВзаиморасчетовПоДаннымОрганизации.Дебет) КАК Дебет,
           СУММА(АктСверкиВзаиморасчетовПоДаннымОрганизации.Кредит) КАК Кредит,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка КАК АктВзаим
       ИЗ
           Документ.АктСверкиВзаиморасчетов.ПоДаннымОрганизации КАК АктСверкиВзаиморасчетовПоДаннымОрганизации
       ГДЕ
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Дата МЕЖДУ &НачПериода И &КонПериода
           И АктСверкиВзаиморасчетовПоДаннымОрганизации.Договор.ВидДоговора = &ВидДоговора
           И АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка.Организация = &Организация
       
       СГРУППИРОВАТЬ ПО
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка.Контрагент,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Договор.ВидДоговора,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка) КАК ВложенныйЗапрос
       ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ВложенныйЗапрос.Контрагент

УПОРЯДОЧИТЬ ПО
   КонтрагентРег,
   КонтрагентДок


Дело в том, что необходимо выбрать еще счет из ХозрасчетныйОстаткиИОбороты. Но если в запросе указать еще счет :

ВЫБРАТЬ
   ХозрасчетныйОстаткиИОбороты.Субконто1 КАК КонтрагентРег,
   ВложенныйЗапрос.Контрагент КАК КонтрагентДок,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
   ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот, 0) КАК СуммаОбРег,
   ВложенныйЗапрос.Дебет КАК Дебет,
   ВложенныйЗапрос.Кредит КАК Кредит,
   ВложенныйЗапрос.Суммавдок КАК СуммаОбДок,
   ВложенныйЗапрос.ДоговорВидДоговора,
   ВложенныйЗапрос.АктВзаим,
   [b]ХозрасчетныйОстаткиИОбороты.Счет[/b]
          .
          .
          .
          .
Тогда контрагенты задваиваются и обороты показываются неправильные. Подскажите пожалуйста как поступить
1 zak555
 
04.10.11
22:21
точно Пол:    Мужской ?
2 Yeahkaterina
 
04.10.11
22:25
не заметила)
3 zak555
 
04.10.11
22:26
что за вложенный запрос и что нужно получить ?
4 Yeahkaterina
 
04.10.11
22:33
Вообще это будет внешняя обработка для формирования и печати актов сверки. Все  выводится в ТЧ и необходимо, чтоб при двойном щелчке на ячейке с оборотами выводилась ОСВ по данному контрагенту  и счету.
Вложеный запрос - из документа АктСверкиВзаиморасчетов.


Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("НачПериода", НачПериода);
   Запрос.УстановитьПараметр("КонПериода", КонПериода);
   Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("62"));
   Запрос.УстановитьПараметр("ВидДоговора", Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);
   Запрос.УстановитьПараметр("Организация", Организация);
   
   ВЫБРАТЬ
   ХозрасчетныйОстаткиИОбороты.Субконто1 КАК КонтрагентРег,
   ВложенныйЗапрос.Контрагент КАК КонтрагентДок,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
   ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
   ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот, 0) КАК СуммаОбРег,
   ВложенныйЗапрос.Дебет КАК Дебет,
   ВложенныйЗапрос.Кредит КАК Кредит,
   ВложенныйЗапрос.Суммавдок КАК СуммаОбДок,
   ВложенныйЗапрос.ДоговорВидДоговора,
   ВложенныйЗапрос.АктВзаим,
   ХозрасчетныйОстаткиИОбороты.Счет
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
       ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СУММА(ЕСТЬNULL(АктСверкиВзаиморасчетовПоДаннымОрганизации.Дебет - АктСверкиВзаиморасчетовПоДаннымОрганизации.Кредит, 0)) КАК Суммавдок,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка.Контрагент КАК Контрагент,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Договор.ВидДоговора КАК ДоговорВидДоговора,
           СУММА(АктСверкиВзаиморасчетовПоДаннымОрганизации.Дебет) КАК Дебет,
           СУММА(АктСверкиВзаиморасчетовПоДаннымОрганизации.Кредит) КАК Кредит,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка КАК АктВзаим
       ИЗ
           Документ.АктСверкиВзаиморасчетов.ПоДаннымОрганизации КАК АктСверкиВзаиморасчетовПоДаннымОрганизации
       ГДЕ
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Дата МЕЖДУ &НачПериода И &КонПериода
           И АктСверкиВзаиморасчетовПоДаннымОрганизации.Договор.ВидДоговора = &ВидДоговора
           И АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка.Организация = &Организация
       
       СГРУППИРОВАТЬ ПО
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка.Контрагент,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Договор.ВидДоговора,
           АктСверкиВзаиморасчетовПоДаннымОрганизации.Ссылка) КАК ВложенныйЗапрос
       ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ВложенныйЗапрос.Контрагент

УПОРЯДОЧИТЬ ПО
   КонтрагентРег,
   КонтрагентДок
5 Лефмихалыч
 
04.10.11
22:35
а какая религия запрещает формировать именно непосредственно ОСВ с заранее программно установленными отборами?
6 Yeahkaterina
 
04.10.11
22:38
Извините, не поняла Вас(
Можно по-подробнне?
7 MikleV
 
04.10.11
22:39
(5)совсем разучился человечьим языком разговаривать:D
8 Лефмихалыч
 
04.10.11
22:42
(6) в конфигурации уже присутствует отчет ОСВ, зачем писать такой же, но другой, который к тому же еще и не работает?
9 Yeahkaterina
 
04.10.11
22:50
Я знаю, что в конфигурации уже присутствует отчет ОСВ. я вызываю его из своей внешней обработки т.к. процедура ОткрытьОСВ Экспортная:

ОткрытьОСВ (Организация, ПланыСчетов.Хозрасчетный.РасчетыСПокупателямиИЗаказчиками,НачПериода, КонПериода, ВыбраннаяСтрока.Контрагент)

И у меня открывается ОСВ по выбраному контрагенту, но открывается она по всему счету 62, а мне нужно именно по счету 62.01 или 62.02. для этого и хочу добавить в запросе поле счет.
10 MikleV
 
04.10.11
22:53
ОткрытьОСВ (Организация, ПланыСчетов.Хозрасчетный.РасчетыСПокупателями,НачПериода, КонПериода, ВыбраннаяСтрока.Контрагент)
11 MikleV
 
04.10.11
22:54
ОткрытьОСВ (Организация, ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным,НачПериода, КонПериода, ВыбраннаяСтрока.Контрагент)
12 MikleV
 
04.10.11
22:54
не?
13 Yeahkaterina
 
04.10.11
22:59
неа
14 Yeahkaterina
 
04.10.11
23:05
Я же не знаю в каком случае какой параметр мне передавать
15 ChAlex
 
04.10.11
23:09
У вас во вложенном запросе формируется таблица где по каждому клиенту несколько записей (в разрезе АктВзаим и ДоговорВидДоговора) которая потом соединяется с остаками регистра - естесвенно будет не то что удваиваться, а и утраиваться и т.п. Остается обход выборки методом СледующийПоЗначению()
16 ChAlex
 
04.10.11
23:11
А нафиг аж 2 контрагента в конечном запросе?
17 ChAlex
 
04.10.11
23:12
Используйте ЕстьNULL(ХозрасчетныйОстаткиИОбороты.Субконто1,ВложенныйЗапрос.Контрагент) КАК Контрагент

вместо двух полей

   ХозрасчетныйОстаткиИОбороты.Субконто1 КАК КонтрагентРег,
   ВложенныйЗапрос.Контрагент КАК КонтрагентДок,
18 Yeahkaterina
 
04.10.11
23:12
Это для себя (для наглядности)
19 ChAlex
 
04.10.11
23:14
(18) - ну и какая наглядность может быть в бардаке? Чем больше кода, тем больше ошибок - мимнимзируйте по возможности любой код - и многое сложное сразу станет прозрачней и ясней
20 Yeahkaterina
 
04.10.11
23:14
Если я не выбираю из регистра счет, то все обороты показываются правильные
21 Yeahkaterina
 
04.10.11
23:15
Это творческий беспорядок)))))
22 ChAlex
 
04.10.11
23:16
(20) ну так те же грабли - (В ИЕРАРХИИ!!!) а это значит что в выборке и обороты по субсчетам и тоже по одному клиенту несколько записей. Тогда группируйте и остатки регистра по клиенту
23 ChAlex
 
04.10.11
23:18
И все равно в данном варианте грамотней строить выборку с обходом в 3-х циклах (по числу измерений вашей конечной таблицы)
24 ChAlex
 
04.10.11
23:19
Пока Выборка.СледующийПоЗначениюПоля("Контрагент) Цикл
Пока Выборка.СледующийПоЗначениюПоля("ДоговорВидДоговоа) Цикл
Пока Выборка.СледующийПоЗначениюПоля("Акт взаим) Цикл

.. а вот тут и смотреть ваши цифры
25 ChAlex
 
04.10.11
23:20
(24) :) слегка буквочки попропуска - сорри
Ошибка? Это не ошибка, это системная функция.