Имя: Пароль:
1C
1С v8
Помогите с запросом. В результат попадают не все контрагенты
,
0 Мистикан
 
27.10.15
09:34
Есть запрос
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Контрагенты.Ссылка,
        |   Контрагенты.Наименование,
        |   КонтактнаяИнформация.Представление КАК ФактАдрес,
        |   КонтактнаяИнформация1.Представление КАК Телефон
        |ИЗ
        |   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация1
        |       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        |           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |           ПО (КонтактнаяИнформация.Объект = Контрагенты.Ссылка)
        |       ПО КонтактнаяИнформация1.Объект = Контрагенты.Ссылка
        |ГДЕ
        |   КонтактнаяИнформация.Вид = &Адрес
        |   И КонтактнаяИнформация1.Вид = &Телефон";
    
        
        Запрос.Параметры.Вставить("Адрес",Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008"));
        Запрос.Параметры.Вставить("Телефон",Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00005"));
        РезультатЗапроса = Запрос.Выполнить().Выгрузить();

в результат попадают не все контрагенты (2027 записей)


вот так если
    
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Контрагенты.Ссылка
        |ИЗ
        |   Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |   Контрагенты.ЭтоГруппа = ЛОЖЬ";
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    РезультатЗапроса.Свернуть("Ссылка");
    РезультатЗапроса.Колонки.Добавить("Адрес");
    РезультатЗапроса.Колонки.Добавить("Телефон");
    Для каждого Строка Из РезультатЗапроса Цикл
        Рег = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
        Рег.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00005"));
        Рег.Отбор.Объект.Установить(Строка.Ссылка);
        Рег.Прочитать();
        Для каждого Запись Из рег Цикл
            Строка.Телефон = Запись.Представление;
        КонецЦикла;
        Рег = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
        Рег.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008"));
        Рег.Отбор.Объект.Установить(Строка.Ссылка);
        Рег.Прочитать();
        Для каждого Запись Из рег Цикл
            Строка.Адрес = Запись.Представление;
        КонецЦикла;
    КонецЦикла;
    
в результате 4147 записей. но это неправильно (((
1 Альбатрос
 
27.10.15
09:36
Ничоси запрос
2 Мистикан
 
27.10.15
09:36
результат должен быть таблица контрагент,адрес,телефон
3 Александр с АвтоВАЗа
 
27.10.15
09:36
(0) почему бы просто не взять выборку записей из РС с отбором по коду?

И эти виды контактной информации -  предопределенные элементы либо добавленные?
4 Мистикан
 
27.10.15
09:37
страдает у меня обработка данных в теле запроса через временные таблицы ((
5 Альбатрос
 
27.10.15
09:37
(3) Судя по вашим авто, я бы не стал прислушиваться к вашим советам =)
6 Мистикан
 
27.10.15
09:38
(3) каждая запись отдельная
7 Альбатрос
 
27.10.15
09:38
(4) Чо получить то хочешь?
8 Александр с АвтоВАЗа
 
27.10.15
09:39
(5) судя по наличию у вас нед@лекого ума обсуждать негативно производство российского автопрома, я бы тоже не стал прислушиваться к вашим советам
9 Мистикан
 
27.10.15
09:39
для каждого контрагента собрать его факт адрес и телефон, чтоб потом закинуть в веб сервис
10 Альбатрос
 
27.10.15
09:40
(8) Обиделся? Забыл показать табличку "Сарказм".
11 Мистикан
 
27.10.15
09:40
контактная информация должна быть в одну строку, без дублей контрагента. записей и так 4к
12 Александр с АвтоВАЗа
 
27.10.15
09:41
По теме ... сделай проще ...


ВЫБРАТЬ

Контрагент,
МАКСИМУМ(Адрес),
МАКСИМУМ(Телефон)

ИЗ

(ВЫБРАТЬ
    ДанныеРС.Контрагент,
    ДанныеРС.Адрес,
    "" КАК Телефон
    ИЗ Данные РС КАК ДанныеРС ГДЕ ...

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ДанныеРС.Контрагент,
    "",
    ДанныеРС.Телефон КАК Телефон
    ИЗ Данные РС КАК ДанныеРС ГДЕ ...)

СГРУППИРОВАТЬ ПО Контрагент
13 patria0muerte
 
27.10.15
09:46
Че за наркомань в 1-ом запросе. Нафига выбирать КИ, к ней джойнить контрагентов, а к ним еще 1 КИ?

Лучше так:

ВЫБРАТЬ К.Ссылка, К.Наименование, ЕСТЬNULL(КИТелефон.Представление, "") КАК Телефон, ЕСТЬNULL(КИАдрес.Представление, "") КАК Адрес
ИЗ Справочник.Контрагенты КАК К
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИТелефон ПО КИТелефон.Объект = К.Ссылка И КИТелефон.Вид = &ВидКИТелефон
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИАдрес ПО КИАдрес.Объект = К.Ссылка И КИАдрес.Вид = &ВидКИАдрес
14 Мистикан
 
27.10.15
09:53
(13) Спасибо
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший