Имя: Пароль:
1C
1C 7.7
v7: Накладные по телефону
0 Anempadest
 
30.10.20
02:15
Прошу помочь написать текст запроса. Задача такая.
Есть номер телефона.
Нужно выбрать накладные по клиенту с данным телефоном.
Телефоны - это подчинённый справочник к справочнику Клиенты.

На данный момент меня хватило только на это:
ТекстЗапроса="
    |ОбрабатыватьДокументы Все;
    |_Клиент=Документ.Продажа.Клиент;
    |_Лицо=Документ.Продажа.Лицо;
    |_Владелец=Справочник.КлиентыТелефоны.Владелец;
    |_Телефон=Справочник.КлиентыТелефоны.Наименование;
    |Условие(_Владелец=_Клиент);
    |Условие(_Телефон=тТелефон);
    |Группировка Документ;
    |";

Но запрос не выдаёт ничего. Прошу помочь.
1 GreyK
 
30.10.20
02:38
(0) Возможно длина строки _Телефон и тТелефон не совпадает.
2 osa1C
 
30.10.20
03:07
Прямой запрос не предлагать?
3 Anempadest
 
30.10.20
03:11
(2) Пока решил так.

Функция ЕстьТелефон(аКлиент,аТелефон)
    С=СоздатьОбъект("Справочник.КлиентыТелефоны");
    С.ИспользоватьВладельца(аКлиент);
    Возврат С.НайтиПоНаименованию(аТелефон,1,1);
КонецФункции

    ТекстЗапроса="
    |ОбрабатыватьДокументы Все;
    |_Клиент=Документ.Продажа.Клиент;
    |_Лицо=Документ.Продажа.Лицо;
    |Условие(ЕстьТелефон(_Клиент,тТелефон)=1);
    |Группировка Документ;
    |"
4 Ёпрст
 
30.10.20
08:55
ТекстЗапроса="
    |ОбрабатыватьДокументы Все;
    |_Клиент=Документ.Продажа.Клиент,
    |
    |Справочник.КлиентыТелефоны.Владелец;
    |_Телефон=Справочник.КлиентыТелефоны.Наименование;
    |
    |Условие(_Телефон=тТелефон);
    |Группировка Документ;
5 Мимохожий Однако
 
30.10.20
09:35
ОФФ: Заманивающая тема сабжа. А внутри ветки-как обычно...)
6 Anempadest
 
30.10.20
12:52
(4) Если такой запрос...

    ТекстЗапроса="
    |ОбрабатыватьДокументы Все;
    |_Клиент=Документ.Продажа.Клиент, Справочник.КлиентыТелефоны.Владелец;
    |_Телефон=Справочник.КлиентыТелефоны.Наименование;
    |Условие(_Телефон=тТелефон);
    |Группировка Документ;
    |";

...то выводит все накладные. Абсолютно все. Хотя это странно, ведь должно работать Условие.
7 Ёпрст
 
30.10.20
13:05
(6) проще переписать на прямой запрос
8 Ёпрст
 
30.10.20
13:06
ну и так попробуй..
    ТекстЗапроса="
    |ОбрабатыватьДокументы Все;
    |_Клиент=Справочник.КлиентыТелефоны.Владелец,Документ.Продажа.Клиент;
    |_Телефон=Справочник.КлиентыТелефоны.Наименование;
    |Условие(_Телефон=тТелефон);
    |Группировка Документ;
    |";
9 Ёпрст
 
30.10.20
13:07
хотя, тоже не заработает
10 johnnik
 
30.10.20
13:19
а что за переменная тТелефон? Она в условии участвует, а не запросе не описана
11 Ёпрст
 
30.10.20
13:22
(10) это аналог  = &Вася в снеговике,так понятнее ?
12 Карст
 
30.10.20
13:24
через функцию заработает
13 Builder
 
30.10.20
13:27
1 запрос - найти клиентов с таким телефоном, добавить из в список
2 запрос - выбрать документы по клиентам из списка.
14 Ёпрст
 
30.10.20
13:29
(12) заработает, только мееееедлеееннно. Особенно, если sql
15 Anempadest
 
30.10.20
21:00
(13) Спасибо за подсказку.
Остановился на таком варианте.

//шапка
    тФирма=Константа.Фирма.Представление;
    тТелефон=гТелефонМаска(Телефон);
    Т.ВывестиСекцию("Шапка");
    //запрос Клиенты
    Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса="
    |_Клиент=Справочник.КлиентыТелефоны.Владелец;
    |_Телефон=Справочник.КлиентыТелефоны.ТекущийЭлемент;
    |Условие(_Телефон.Наименование=тТелефон);
    |Группировка _Клиент Без Групп;
    |";
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
        Возврат;
    КонецЕсли;
    //выгрузить
    Список=СоздатьОбъект("СписокЗначений");
    Пока Запрос.Группировка(1)=1 Цикл
        Список.ДобавитьЗначение(Запрос._Клиент);
    КонецЦикла;
    //запрос Продажи
    ТекстЗапроса="
    |ОбрабатыватьДокументы Все;
    |_Клиент=Документ.Продажа.Клиент;
    |_Лицо=Документ.Продажа.Лицо;
    |Условие(_Клиент В Список);
    |Группировка Документ;
    |";
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
        Возврат;
    КонецЕсли;
    //накладные
    Пока Запрос.Группировка(1)=1 Цикл
        тДокумент=гПредставлениеДокумента(Запрос.Документ,"ДатаВидНомер");
        тКлиент=Запрос._Клиент;
        тЛицо=Запрос._Лицо;
        Состояние(тДокумент);
        //строка
        Т.ВывестиСекцию("Строка");
    КонецЦикла;

Работает.
16 Mikeware
 
31.10.20
12:02
на что только люди не идут - лишь бы нормальные запросы не использовать...
17 trdm
 
31.10.20
13:58
кто-нить из скулеводов растолкует, чем в 2005-м скуле заменить EVENT SESSION?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан