Имя: Пароль:
1C
1С v8
Проблема с Запросом
,
0 Kamich
 
19.06.13
12:44
Добрый день,форумчане!

Нужна ваша помощь.
Есть Таблица в Макете с Параметром "НомерТелефона".

В запросе участвуют два документа-это Входящие и Исходящие вызовы.

Проблема вот в чем: После вывода области макета документа, выводится не те данные,т.е. выводятся только Входящие вызовы. Вот сам код, что не так в нем?

Запрос=Новый Запрос();
Запрос.Текст="ВЫБРАТЬ
            //Исходяшие зв.
            |    ЕСТЬNULL(ИсходящиеЗвонки.Дата, 0) КАК Дата,
            |    ЕСТЬNULL(ИсходящиеЗвонки.Номер, 0) КАК Номер,
            |    ЕСТЬNULL(ИсходящиеЗвонки.НомерТелефона, 0) КАК НомерТелефонаИВ,
            |    ЕСТЬNULL(ИсходящиеЗвонки.Кому, 0) КАК Кому,
            |    ЕСТЬNULL(ИсходящиеЗвонки.Зачем, 0) КАК Зачем,
            |    ЕСТЬNULL(ИсходящиеЗвонки.ОЧД, 0) КАК ОЧД,
            //Входяшие зв.
            |    ЕСТЬNULL(ВходящиеЗвонки.Дата, 0) КАК Дата1,
            |    ЕСТЬNULL(ВходящиеЗвонки.Номер, 0) КАК Номер1,
            |    ЕСТЬNULL(ВходящиеЗвонки.НомерТелефона, 0) КАК НомерТелефонаВВ,
            |    ЕСТЬNULL(ВходящиеЗвонки.Кто, 0) КАК Кто,
            |    ЕСТЬNULL(ВходящиеЗвонки.Зачем, 0) КАК Зачем1,
            |    ЕСТЬNULL(ВходящиеЗвонки.ОЧД, 0) КАК ОЧД1
            |ИЗ
            |    Документ.ИсходящиеЗвонки КАК ИсходящиеЗвонки,
            |    Документ.ВходящиеЗвонки КАК ВходящиеЗвонки
            |ГДЕ
            |    ИсходящиеЗвонки.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
            |    И ВходящиеЗвонки.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";    
   Запрос.УстановитьПараметр("ДатаНачала", ЭлементыФормы.С.Значение);
   Запрос.УстановитьПараметр("ДатаОкончания", ЭлементыФормы.По.Значение );

   Результат = Запрос.Выполнить();
   
   ВыборкаДетали = Результат.Выбрать();
   

Пока ВыборкаДетали.Следующий() Цикл
       Область = Макет.ПолучитьОбласть("Детали");
       Область.Параметры.НомерТелефона="Исх.Выз "+ ВыборкаДетали.НомерТелефонаИВ;
       Область.Параметры.НомерТелефона="Вх.Выз "+ ВыборкаДетали.НомерТелефонаВВ;
       ТабДок.Вывести(Область);
КонецЦикла;
     
                               
       
       ТабДок.ОтображатьСетку = Ложь;
       ТабДок.Защита = Ложь;
       ТабДок.ТолькоПросмотр = Ложь;
       ТабДок.ОтображатьЗаголовки = Ложь;
       ТабДок.Показать();
1 zak555
 
19.06.13
12:45
документооборот что ли ?
2 Ненавижу 1С
 
гуру
19.06.13
12:46
тебе объединение нужно
3 Kamich
 
19.06.13
12:46
(1) Нет,самописка
(2) Объединять по дате?!
4 zak555
 
19.06.13
12:47
(3) 2. по полям
5 Ненавижу 1С
 
гуру
19.06.13
12:47
(3) "ОБЪЕДИНИТЬ ВСЕ"
6 Галахад
 
гуру
19.06.13
12:47
ВЫБРАТЬ
..
ИЗ
        Документ.ИсходящиеЗвонкиКАК Приходная
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
...
ИЗ
        Документ.ВходящиеЗвонки КАК Расходная
7 Kamich
 
19.06.13
12:56
Запрос=Новый Запрос();
Запрос.Текст="ВЫБРАТЬ
            |    ЕСТЬNULL(ИсходящиеЗвонки.Дата, 0) КАК Дата,
            |    ЕСТЬNULL(ИсходящиеЗвонки.Номер, 0) КАК Номер,
            |    ЕСТЬNULL(ИсходящиеЗвонки.НомерТелефона, 0) КАК НомерТелефонаИВ,
            |    ЕСТЬNULL(ИсходящиеЗвонки.Кому, 0) КАК Кому,
            |    ЕСТЬNULL(ИсходящиеЗвонки.Зачем, 0) КАК Зачем,
            |    ЕСТЬNULL(ИсходящиеЗвонки.ОЧД, 0) КАК ОЧД,
            |    NULL КАК Дата1,
            |    NULL КАК Номер1,
            |    NULL КАК НомерТелефона,
            |    NULL КАК Кто,
            |    NULL КАК Зачем1,
            |    NULL КАК ОЧД1
            |ИЗ
            |    Документ.ИсходящиеЗвонки КАК ИсходящиеЗвонки
            |ГДЕ
            |    ИсходящиеЗвонки.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
            |
            |ОБЪЕДИНИТЬ ВСЕ
            |
            |ВЫБРАТЬ
            |    NULL,
            |    NULL,
            |    NULL,
            |    NULL,
            |    NULL,
            |    NULL,
            |    ВходящиеЗвонки.Дата,
            |    ВходящиеЗвонки.Номер,
            |    ВходящиеЗвонки.НомерТелефона КАК НомерТелефона,
            |    ВходящиеЗвонки.Кто,
            |    ВходящиеЗвонки.Зачем,
            |    ВходящиеЗвонки.ОЧД
            |ИЗ
            |    Документ.ВходящиеЗвонки КАК ВходящиеЗвонки
            |ГДЕ
            |    ВходящиеЗвонки.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";    
   Запрос.УстановитьПараметр("ДатаНачала", ЭлементыФормы.С.Значение);
   Запрос.УстановитьПараметр("ДатаОкончания", ЭлементыФормы.По.Значение );

   Результат = Запрос.Выполнить();
   
   ВыборкаДетали = Результат.Выбрать();
   

Пока ВыборкаДетали.Следующий() Цикл
       Область = Макет.ПолучитьОбласть("Детали");
       Область.Параметры.НомерТелефона="Исх.Выз "+ ВыборкаДетали.НомерТелефонаИВ;
       Область.Параметры.НомерТелефона="Вх.Выз "+ ВыборкаДетали.НомерТелефона;
       ТабДок.Вывести(Область);
КонецЦикла;
8 Kamich
 
19.06.13
12:56
(6) (5) Объединил,выводит не те данные
9 Ненавижу 1С
 
гуру
19.06.13
12:59
(8) бывает
10 Kamich
 
19.06.13
13:01
(9) Что не правильно
11 Ненавижу 1С
 
гуру
19.06.13
13:03
(10) не знаю, честно
даже не знаю почему ты решил, что "выводит не те данные"
12 salvator
 
19.06.13
13:03
(10) Сопоставляй поля логически. Дату с датой, номер с номером. А пустые поля выкинь.
13 salvator
 
19.06.13
13:04
+(12) Плюс проверь даты в параметрах запроса.
14 Kamich
 
19.06.13
13:05
(11) (13)  Что касается этой строки,может тут что-то не так?

Пока ВыборкаДетали.Следующий() Цикл
       Область = Макет.ПолучитьОбласть("Детали");
       Область.Параметры.НомерТелефона="Исх.Выз "+ ВыборкаДетали.НомерТелефонаИВ;
       Область.Параметры.НомерТелефона="Вх.Выз "+ ВыборкаДетали.НомерТелефонаВВ;
       ТабДок.Вывести(Область);
КонецЦикла;
15 salvator
 
19.06.13
13:06
Получение области вынеси перед циклом.
16 Kamich
 
19.06.13
13:07
(15)

{Обработка.Отчет.Форма.Форма.Форма(72)}: Поле объекта не обнаружено (НомерТелефонаВВ)
       Область.Параметры.НомерТелефона="Вх.Выз "+ ВыборкаДетали.НомерТелефонаВВ;
17 salvator
 
19.06.13
13:08
(16) Продолжайте наблюдения.
18 vicof
 
19.06.13
13:09
(16) Псевдонимы у полей задай
19 GANR
 
19.06.13
13:19
(0) Короче, автор - это будет очень длинная ветка с многочисленными "не понял - повтори". Либо подключи кого-то по удаленке с полностью поставленной задачей, либо учись на http://sql-ex.ru/ работать с запросами, да и отладчиком, судя по (16) хорошо бы подучиться пользоваться. Почему запрос из топика должен работать - ума не приложу - это же декартово произведение без условия соединения, которое при большом объеме данных попросту может завалить сервак (не только текущую базу) и вырубить всех пользователей, работающих с MS SQL-базами.
20 Kamich
 
19.06.13
13:35
Сделал следующий запрос:

Запрос=Новый Запрос();
Запрос.Текст="ВЫБРАТЬ
            |    ИсходящиеЗвонки.Дата,
            |    ИсходящиеЗвонки.Номер,
            |    ИсходящиеЗвонки.НомерТелефона КАК НомерТелефонаИВ,
            |    ИсходящиеЗвонки.Кому,
            |    ИсходящиеЗвонки.Зачем,
            |    ИсходящиеЗвонки.ОЧД,
            |    NULL КАК НомерТелефонаВВ
            |ИЗ
            |    Документ.ИсходящиеЗвонки КАК ИсходящиеЗвонки
            |ГДЕ
            |    ИсходящиеЗвонки.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
            |
            |ОБЪЕДИНИТЬ
            |
            |ВЫБРАТЬ
            |    ВходящиеЗвонки.Дата,
            |    ВходящиеЗвонки.Кто,
            |    NULL,
            |    ВходящиеЗвонки.Зачем,
            |    ВходящиеЗвонки.ОЧД,
            |    ВходящиеЗвонки.Номер,
            |    ВходящиеЗвонки.НомерТелефона КАК НомерТелефонаВВ
            |ИЗ
            |    Документ.ВходящиеЗвонки КАК ВходящиеЗвонки
            |ГДЕ
            |    ВходящиеЗвонки.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";    
   Запрос.УстановитьПараметр("ДатаНачала", ЭлементыФормы.С.Значение);
   Запрос.УстановитьПараметр("ДатаОкончания", ЭлементыФормы.По.Значение );

   Результат = Запрос.Выполнить();
   
   ВыборкаДетали = Результат.Выбрать();
   Область = Макет.ПолучитьОбласть("Детали");
 
Пока ВыборкаДетали.Следующий() Цикл
   Область.Параметры.НомерТелефона="Исх.Выз "+ ВыборкаДетали.НомерТелефонаИВ;
   Область.Параметры.НомерТелефона="Вх.Выз "+ ВыборкаДетали.НомерТелефонаВВ;
   ТабДок.Вывести(Область);    
   КонецЦикла;


Вывел:
       Вх.Выз            
       Вх.Выз            
       Вх.Выз 5555555            

Хотя Исходящие то же есть(но они пустые и отображаются как "Вх.Вызов         ")
21 Ненавижу 1С
 
гуру
19.06.13
13:48
Запрос.Текст="ВЫБРАТЬ
            |    ИсходящиеЗвонки.Дата,
            |    ИсходящиеЗвонки.Номер,
            |    ИсходящиеЗвонки.НомерТелефона КАК НомерТелефона,
            |    ИсходящиеЗвонки.Кому,
            |    ИсходящиеЗвонки.Зачем,
            |    ИсходящиеЗвонки.ОЧД,
| ""Исх.Выз "" КАК Метка
            |ИЗ
            |    Документ.ИсходящиеЗвонки КАК ИсходящиеЗвонки
            |ГДЕ
            |    ИсходящиеЗвонки.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
            |
            |ОБЪЕДИНИТЬ
            |
            |ВЫБРАТЬ
            |    ВходящиеЗвонки.Дата,
            |    ВходящиеЗвонки.Номер,
            |    ВходящиеЗвонки.НомерТелефона,
| NULL,
            |    ВходящиеЗвонки.Зачем,
            |    ВходящиеЗвонки.ОЧД,
| "Вх.Выз "
            |ИЗ
            |    Документ.ВходящиеЗвонки КАК ВходящиеЗвонки
            |ГДЕ
            |    ВходящиеЗвонки.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";  

....

Пока ВыборкаДетали.Следующий() Цикл
   Область.Параметры.НомерТелефона=ВыборкаДетали.Метка+ ВыборкаДетали.НомерТелефона;
   ТабДок.Вывести(Область);    
   КонецЦикла;
22 Ненавижу 1С
 
гуру
19.06.13
13:49
+(21)

| ""Вх.Выз ""
23 vicof
 
19.06.13
13:49
Давай уже, вруби отладчик на полную, на сегодня телепатии хватит
24 Kamich
 
19.06.13
14:00
(22) Спасибо)!!!))))
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.