Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Накладные по телефону

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

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

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

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

    ТекстЗапроса="
    |ОбрабатыватьДокументы Все;
    |_Клиент=Документ.Продажа.Клиент;
    |_Лицо=Документ.Продажа.Лицо;
    |Условие(ЕстьТелефон(_Клиент,тТелефон)=1);
    |Группировка Документ;
    |"
   Ёпрст
 
4 - 30.10.20 - 08:55
ТекстЗапроса="
    |ОбрабатыватьДокументы Все;
    |_Клиент=Документ.Продажа.Клиент,
    |
    |Справочник.КлиентыТелефоны.Владелец;
    |_Телефон=Справочник.КлиентыТелефоны.Наименование;
    |
    |Условие(_Телефон=тТелефон);
    |Группировка Документ;
   МимохожийОднако
 
5 - 30.10.20 - 09:35
ОФФ: Заманивающая тема сабжа. А внутри ветки-как обычно...)
   Anempadest
 
6 - 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
хотя, тоже не заработает
   johnnik
 
10 - 30.10.20 - 13:19
а что за переменная тТелефон? Она в условии участвует, а не запросе не описана
   Ёпрст
 
11 - 30.10.20 - 13:22
(10) это аналог  = &Вася в снеговике,так понятнее ?
   Карст
 
12 - 30.10.20 - 13:24
через функцию заработает
   Builder
 
13 - 30.10.20 - 13:27
1 запрос - найти клиентов с таким телефоном, добавить из в список
2 запрос - выбрать документы по клиентам из списка.
   Ёпрст
 
14 - 30.10.20 - 13:29
(12) заработает, только мееееедлеееннно. Особенно, если sql
   Anempadest
 
15 - 30.10.20 - 21:00
(13) Спасибо за подсказку.
Остановился на таком варианте.
//шапка

    тФирма=Константа.Фирма.Представление;
    тТелефон=гТелефонМаска(Телефон);
    Т.ВывестиСекцию("Шапка");
    //запрос Клиенты

    Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса="
    |_Клиент=Справочник.КлиентыТелефоны.Владелец;
    |_Телефон=Справочник.КлиентыТелефоны.ТекущийЭлемент;
    |Условие(_Телефон.Наименование=тТелефон);
    |Группировка _Клиент Без Групп;
    |";
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
        Возврат;
    КонецЕсли;
    //выгрузить

    Список=СоздатьОбъект("СписокЗначений");
    Пока Запрос.Группировка(1)=1 Цикл
        Список.ДобавитьЗначение(Запрос._Клиент);
    КонецЦикла;
    //запрос Продажи

    ТекстЗапроса="
    |ОбрабатыватьДокументы Все;
    |_Клиент=Документ.Продажа.Клиент;
    |_Лицо=Документ.Продажа.Лицо;
    |Условие(_Клиент В Список);
    |Группировка Документ;
    |";
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
        Возврат;
    КонецЕсли;
    //накладные

    Пока Запрос.Группировка(1)=1 Цикл
        тДокумент=гПредставлениеДокумента(Запрос.Документ,"ДатаВидНомер");
        тКлиент=Запрос._Клиент;
        тЛицо=Запрос._Лицо;
        Состояние(тДокумент);
        //строка

        Т.ВывестиСекцию("Строка");
    КонецЦикла;

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
2 + 2 = 3.9999999999999999999999999999999...
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.