Имя: Пароль:
1C
1С v8
Помогите объеденить запрос
,
0 Boudybuilder
 
30.07.12
11:33
Нужно одним запросом вытянуть телефон Контрагента и его всех контактных лиц...

Двумя запросами понятно как это сделать.



ВЫБРАТЬ
   КонтактнаяИнформация.Представление,
   КонтактнаяИнформация.Объект
ИЗ
   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
   КонтактнаяИнформация.Объект = &Контрагент
   И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)





ВЫБРАТЬ
   КонтактнаяИнформация.Представление,
   КонтактнаяИнформация.Объект
ИЗ
   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
   И КонтактнаяИнформация.Объект.Владелец = &Контрагент




Как это сделать одним?
1 butterbean
 
30.07.12
11:34
между ними напиши ОБЪЕДИНИТЬ ВСЕ
2 butterbean
 
30.07.12
11:36
хот янаверно можно в условии написать
 КонтактнаяИнформация.Объект.Владелец = &Контрагент
    ИЛИ КонтактнаяИнформация.Объект= &Контрагент
3 Boudybuilder
 
30.07.12
11:39
(1) Можно подробнее?
4 Boudybuilder
 
30.07.12
11:40
(2)

ВЫБРАТЬ
   КонтактнаяИнформация.Представление,
   КонтактнаяИнформация.Объект
ИЗ
   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
       ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация1
       ПО КонтактнаяИнформация.Объект = КонтактнаяИнформация1.Объект.Владелец
ГДЕ
   КонтактнаяИнформация.Объект = &Контрагент
   И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
   ИЛИ КонтактнаяИнформация.Объект.Владелец = &Контрагент



Вот так получилось , но очень долго запрос работает.
5 Boudybuilder
 
30.07.12
11:40
Может проще както выборкой из регистра вытянуть?
6 butterbean
 
30.07.12
11:41
(4) я имел ввиду так:

ВЫБРАТЬ
   КонтактнаяИнформация.Представление,
   КонтактнаяИнформация.Объект
ИЗ
   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
   (КонтактнаяИнформация.Объект = &Контрагент
   ИЛИ КонтактнаяИнформация.Объект.Владелец = &Контрагент)    
И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
7 MaXpaT
 
30.07.12
11:42
ВЫБРАТЬ
   КонтактнаяИнформация.Представление,
   КонтактнаяИнформация.Объект
ИЗ
   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
   (  КонтактнаяИнформация.Объект = &Контрагент
   ИЛИ КонтактнаяИнформация.Объект.Владелец = &Контрагент)
   И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
8 MaXpaT
 
30.07.12
11:42
(7) пойдёт?
9 Baximilian
 
30.07.12
11:43
(4)
зачем полное соединение?

левого достаточно, да и как я понял человеку и вправду нужно объеденить или так как ты говорил в (2)

Получилось (7) :)
10 Boudybuilder
 
30.07.12
12:55
(7) Да - это самое правильное решение. Пасибо.
11 Boudybuilder
 
30.07.12
13:49
Продолжил над этим работать , создал на форме ТабличноеПоле с типом значения - ТаблицаЗначений. И добавляю туда. А добавляет туда тока один номер...
что я не так делаю..


Процедура ОтправитьСМСКонтрагенту(Элемент) Экспорт
   
   ФормаСМС = Обработки.ФанРассылкаSMS.ПолучитьФорму("СМС");
   Запрос = Новый Запрос;
   Запрос.Текст="ВЫБРАТЬ
                |    КонтактнаяИнформация.Представление,
                |    КонтактнаяИнформация.Объект
                |ИЗ
                |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                |ГДЕ
                |    (КонтактнаяИнформация.Объект = &Контрагент
                |            ИЛИ КонтактнаяИнформация.Объект.Владелец = &Контрагент)
                |    И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)";
                Запрос.УстановитьПараметр("Контрагент",Элемент.Ссылка);
                Рез = Запрос.Выполнить();
                Если Рез.Пустой() Тогда
                    Возврат
                Иначе
                    ФормаСМС = Обработки.ФанРассылкаSMS.ПолучитьФорму("СМС");
                    ФормаСМС.Справочник.Колонки.Добавить("Номер");
                    ФормаСМС.Справочник.Колонки.Добавить("Контакт");
                    ФормаСМС.ЭлементыФормы.Справочник.СоздатьКолонки();
                    НовСтр = ФормаСМС.Справочник.Добавить();
                    Выб = Рез.Выбрать();
                    Пока Выб.Следующий() Цикл
                        НовСтр.Номер   = Выб.Представление;
                        НовСтр.Контакт = Выб.Объект;
                    КонецЦикла;
                    ФормаСМС.Заголовок = "Отправка смс для "+ Выб.Объект +" ("+Выб.Представление+")";
                    ФормаСМС.ЭлементыФормы.Номер.Значение = Выб.Представление;
                    ФормаСМС.Открыть();
                КонецЕсли;
               
            КонецПроцедуры
12 Oleg_Kag
 
30.07.12
14:10
(11) Не полностью или не корректно ставишь задачу.
13 Boudybuilder
 
30.07.12
14:16
(12) В смысле?
14 hhhh
 
30.07.12
14:19
(13) а точно можно смс-ку на телефон сбросить? По идее МобильныйТелефон должно быть.
15 Boudybuilder
 
30.07.12
14:23
(14) Разве это имеет значение... Это уже совсем другая история. И там все в порядке ;)
16 Oleg_Kag
 
30.07.12
14:26
(13) Это процедура у тебя где? В цикле что-ли?
Запрос.УстановитьПараметр("Контрагент",Элемент.Ссылка);//<-ты выбираешь одного конкретного контрагента, а не список... или у тебя у каждого контрагента несколько телефонов забито?
17 Boudybuilder
 
30.07.12
14:43
(16)
Да там все нормально. Проверил в цикл добавил Сообщить(Выб.Представление);
И мне вполне адекватно показало все три номера контрагента и его контактных лиц!
А че тогда это НовСтр = ФормаСМС.Справочник.Добавить() не срабатывает?
18 Boudybuilder
 
30.07.12
14:46
(17) Засунул ее  НовСтр = ФормаСМС.Справочник.Добавить();
тоже в цикл , и все работает вроде. Щас так:





Запрос = Новый Запрос;
   Запрос.Текст="ВЫБРАТЬ
                |    КонтактнаяИнформация.Представление,
                |    КонтактнаяИнформация.Объект
                |ИЗ
                |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                |ГДЕ
                |    (КонтактнаяИнформация.Объект = &Контрагент
                |            ИЛИ КонтактнаяИнформация.Объект.Владелец = &Контрагент)
                |    И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)";
                Запрос.УстановитьПараметр("Контрагент",Элемент.Ссылка);
                Рез = Запрос.Выполнить();
                Если Рез.Пустой() Тогда
                    Возврат
                Иначе
                    ФормаСМС = Обработки.ФанРассылкаSMS.ПолучитьФорму("СМС");
                    ФормаСМС.Справочник.Колонки.Добавить("Номер");
                    ФормаСМС.Справочник.Колонки.Добавить("Контакт");
                    ФормаСМС.ЭлементыФормы.Справочник.СоздатьКолонки();
                    Выб = Рез.Выбрать();
                    Пока Выб.Следующий() Цикл
                        НовСтр = ФормаСМС.Справочник.Добавить();
                        НовСтр.Номер   = Выб.Представление;
                        НовСтр.Контакт = Выб.Объект;
                        Сообщить(Выб.Представление);
                    КонецЦикла;
                    ФормаСМС.Заголовок = "Отправка смс для "+ Выб.Объект +" ("+Выб.Представление+")";
                    ФормаСМС.ЭлементыФормы.Номер.Значение = Выб.Представление;
                    ФормаСМС.Открыть();
                КонецЕсли;




Все ли ОК?
19 Boudybuilder
 
30.07.12
17:20
Тут еще один вопросик , надеюсь последний уже...
Выгружаю запрос в СписокЗначений - "СписокНомеров".

И делаю в поле ввода так:




Процедура МасивНомеровНачалоВыбора(Элемент, СтандартнаяОбработка)
   
   СтандартнаяОбработка = Ложь;
   ВыбранЭлемент = СписокНомеров.ВыбратьЭлемент("Выберите номер");
   Если Не ВыбранЭлемент = Неопределено Тогда
       Элемент.Значение = ВыбранЭлемент.Значение;
   КонецЕсли;


КонецПроцедуры





Все работает , но через окно выбора значения , а мне хотелось бы чтобы из выпадающего списка я выбирал конкретное значение. Какие действия мне нужно проделать?
Буду благодарен за ответ , спасибо.
20 Boudybuilder
 
30.07.12
17:23
Да , и еще ...
Какая разница у Элементов Формы  "Поле ввода" и "Поле Выбора". Ведь набор кнопок у них похож...
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн