Имя: Пароль:
1C
 
Помогите построить запрос
0 seraf
 
12.08.10
23:43
добрый вечер, помогите пожалуйста, есть РС соответствия счетов Хоз. и Упр, в нем три субконто.
Цель - найти запросом наиболее детальную запись из регистра, сначала по всем трем субконто, потом по двум, по одному.. аналог СчетаУчетаНоменклатуры но я там ничего не понял.
текст запроса, уникальные записи по трем соответствиям получены, как теперь объединиться с еще несколькими результатами запроса чтобы строки не дублировались а реквизиты СчетУправленческийДт и СчетУправленческийКт были заполнены по убыванию наиболее детальной записью

ВЫБРАТЬ
   ХозрасчетныйДвиженияССубконто.УникальныйНомер КАК УникальныйНомерПроводки,
   ХозрасчетныйДвиженияССубконто.ДатаСозданияПроводки,
   ХозрасчетныйДвиженияССубконто.СчетДт,
   СоответствиеСчетовДт.СчетУправленческий КАК СчетУправленческийДт,
   ХозрасчетныйДвиженияССубконто.СубконтоДт1,
   ХозрасчетныйДвиженияССубконто.СубконтоДт2,
   ХозрасчетныйДвиженияССубконто.СубконтоДт3,
   ХозрасчетныйДвиженияССубконто.СчетКт,
   СоответствиеСчетовКт.СчетУправленческий КАК СчетУправленческийКт,
   ХозрасчетныйДвиженияССубконто.СубконтоКт1,
   ХозрасчетныйДвиженияССубконто.СубконтоКт2,
   ХозрасчетныйДвиженияССубконто.СубконтоКт3,
   ХозрасчетныйДвиженияССубконто.Регистратор.Номер КАК НомерДокумента,
   ХозрасчетныйДвиженияССубконто.Регистратор.Дата КАК ДатаДокумента,
   ХозрасчетныйДвиженияССубконто.Содержание КАК ОписаниеПроводки,
   ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.ВалютаДт, 0) КАК ВалютаДт,
   ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаДт, 0) КАК ВалютнаяСуммаДт,
   ХозрасчетныйДвиженияССубконто.ВидСубконтоДт1,
   ХозрасчетныйДвиженияССубконто.ВидСубконтоДт2,
   ХозрасчетныйДвиженияССубконто.ВидСубконтоДт3,
   ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.ВалютаКт, 0) КАК ВалютаКт,
   ЕСТЬNULL(ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаКт, 0) КАК ВалютнаяСуммаКт,
   ХозрасчетныйДвиженияССубконто.ВидСубконтоКт1,
   ХозрасчетныйДвиженияССубконто.ВидСубконтоКт2,
   ХозрасчетныйДвиженияССубконто.ВидСубконтоКт3,
   ХозрасчетныйДвиженияССубконто.Сумма
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&НачПериода, &КонПериода, ) КАК ХозрасчетныйДвиженияССубконто
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеСчетов КАК СоответствиеСчетовДт
       ПО ХозрасчетныйДвиженияССубконто.СчетДт = СоответствиеСчетовДт.СчетХозрасчетный
           И ХозрасчетныйДвиженияССубконто.СубконтоДт1 = СоответствиеСчетовДт.Субконто1
           И ХозрасчетныйДвиженияССубконто.СубконтоДт2 = СоответствиеСчетовДт.Субконто2
           И ХозрасчетныйДвиженияССубконто.СубконтоДт3 = СоответствиеСчетовДт.Субконто3
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеСчетов КАК СоответствиеСчетовКт
       ПО ХозрасчетныйДвиженияССубконто.СчетКт = СоответствиеСчетовКт.СчетХозрасчетный
           И ХозрасчетныйДвиженияССубконто.СубконтоКт1 = СоответствиеСчетовКт.Субконто1
           И ХозрасчетныйДвиженияССубконто.СубконтоКт2 = СоответствиеСчетовКт.Субконто2
           И ХозрасчетныйДвиженияССубконто.СубконтоКт3 = СоответствиеСчетовКт.Субконто
1 levlvov
 
13.08.10
00:56
счас, ачиридную бутылку пива допью и памагу, иЫйк...
2 Cube
 
13.08.10
04:58
(0) Самый простой вариант: делай первый запрос без субконто. Затем делай второй запрос, вложенный в первый, по одному субконто. Затем делай третий запрос, вложенный во второй по двум субконто. Затем делай четвертый запрос, вложенный в третий по трем субконто. Затем в каждом запросе добавь колонку "Приоритет" - тип будет простое число, так ты пронумеруешь запросы (допустим так: запрос по трем субконто имеет приоритет 1, по двум - 2, по одному - 3, без субконто - 4). Потом берешь полученный запрос и помещаешь его во вложенный, чтобы вне вложенного запроса можно было наложить сортировку на твой список по приоритету, также можно добавить ПЕРВЫЕ 1.
3 seraf
 
13.08.10
13:53
(2) спасибо сейчас буду пробовать, кашу без запросов делать не хочется, а с запросом вчера полночи просидел так и не придумал
4 seraf
 
13.08.10
14:04
вот первый запрос без субконто

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


по идее первым запросом нужно взять из регистра только строки с пустыми значениями субконто, это поля

поля

   СоответствиеСчетовДт.Субконто1 КАК РССубконтоДт1,
   СоответствиеСчетовДт.Субконто2 КАК РССубконтоДт2,
   СоответствиеСчетовДт.Субконто3 КАК РССубконтоДт3,
   СоответствиеСчетовКт.Субконто1 КАК РССубконтоКт1,
   СоответствиеСчетовКт.Субконто2 КАК РССубконтоКт2,
   СоответствиеСчетовКт.Субконто3 КАК РССубконтоКт3

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