Вход | Регистрация

1С:Предприятие ::

Метки:запросы, Запросы и построители

Как объединить 2 запроса в 1?

Я
   Velenok
 
09.12.04 - 08:46
Как объединить 2 запроса в 1?
Есть путевой лист, нужно выбрать расходные накладные с тем же водителем, маршрутом , датой что и в путевом листе.
Как можно объединить 2 запроса в 1?
Почему если использовать Счётчик() для суммирования количества расходных накладных, нельзя получить количество по накладной.
ТекстЗапроса=
//{{Запрос(Сформ

| Период с НачДата по КонДата;
|ТекущийДокумкент=Документ.ПутевойЛист.ТекущийДокумент;
| ДатаДок= Документ.ПутевойЛист.ДатаДок;
| Маршрут= Документ.ПутевойЛист.Маршрут;
| Водитель=Документ. Документ.ПутевойЛист.Водитель;
|Функция Счётчик=Счётчик();
|Группировка ТекущийДокумент
|Группировка Водитель без групп;
|//}}

;

ТекстЗапроса1=
//{{Запрос(Расход)

| Период с НачДата по КонДата;
|Расх=Документ.РасходнаяНакладная.ТекущийДокумент;
| ДатаДок= Документ.РасходнаяНакладная.ДатаДок;
| Маршрут=Документ.РасходнаяНакладная.Маршрут;
//| Колво= Документ.РасходнаяНакладная.Количество;    

| Водитель=Документ.РасходнаяНакладная.Водитель;
|Функция КолвоДок=Счётчик();
|    Группировка Расход;
|Условие (Водитель=Запрос.ТекущийДокумент.Водитель;
|Условие (ДатаДок=Запрос.ТекущийДокумент.ДатаДок;
|//}}

;
 
 
   321
 
1 - 09.12.04 - 08:59
А ты каждой переменной запроса присвой через зпт параметры обоих доков, они же совпадают
   Valery
 
2 - 09.12.04 - 09:00
Можно так 
|Маршрут=Документ.РасходнаяНакладная.Маршрут, Документ.ПутевойЛист.Маршрут; 
|Водитель=Документ.РасходнаяНакладная.Водитель,Документ.ПутевойЛист.Водитель;
   Velenok
 
3 - 09.12.04 - 09:38
А если мне нужно по каждому путевому листу получить количество расходных накладных, сразу в запросе это можно сделать, или в группировках их посчитать?
   Valery
 
4 - 09.12.04 - 09:45
Если Расходные накладные каким-то чудом связаны с конкретным путевым листом, то можно, если связи нет, то на нет с суда нет.
Водитель в данной ситуации такой связкой не может служить.
   Velenok
 
5 - 09.12.04 - 10:24
Путевой лист создается программно в конце дня. Выбираются расходные накладные за день. Учитывается водитель, маршрут, машина. Иду от обратного нужно получить сколько накладных приходится на этот лист. Делаю реестр по путквым листам.
   Valery
 
6 - 09.12.04 - 11:12
Тебя и спрашивают. Связь какая-то между документами есть?
   Velenok
 
7 - 09.12.04 - 11:20
Вот кусок модуля гдн создается пут.лист
Функция ПроверкаСуществованияДокумент(выбВодитель, выбАвто, выбМаршрут)
    Перем ЕстьДокумент;
    Перем Запрос, ТекстЗапроса;
    Запрос = СоздатьОбъект("Запрос");
    ЕстьДокумент = 0;
    ТекстЗапроса = "Период С ДатаР по ДатаР;
    |ОбрабатыватьДокументы Все;
    |Док = Документ.ПутевойЛистЧастника.ТекущийДокумент;
    |Водитель = Документ.ПутевойЛистЧастника.Водитель;
    |Авто = Документ.ПутевойЛистЧастника.Авто;
    |Маршрут = Документ.ПутевойЛистЧастника.Маршрут;
    |Условие (Водитель = выбВодитель);
    |Условие (Авто = выбАвто);
    |Условие (Маршрут = выбМаршрут);
    |Группировка Док;
    |Функция КолвоЗаписей = Счётчик();";
    Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
        ЕстьДокумент = Запрос.КолвоЗаписей;
    КонецЕсли;
    Возврат ЕстьДокумент;
КонецФункции
//*******************************************

Процедура СоздатьДокумент(Водитель, Авто, тзМаршрутов)
    Док = СоздатьОбъект("Документ.ПутевойЛистЧастника");
    Док.Новый();
    Док.Водитель = Водитель;
    Док.Авто = Авто;
    Док.ДатаДок = ДатаР;
    Док.АвтоВремяКонецДня();
    Если Водитель.Выбран() = 1 Тогда
        Предпр = Водитель.Предприниматель.Получить(ДатаР);
        Если Предпр.Выбран() = 1 Тогда
            Док.Предприниматель = Предпр;
        Иначе
            Док.Предприниматель = Водитель;
        КонецЕсли;
    КонецЕсли;
    тзМаршрутов.ВыбратьСтроки();
    Пока тзМаршрутов.ПолучитьСтроку() = 1 Цикл
        Док.НоваяСтрока();
        Док.Маршрут = тзМаршрутов.Маршрут;
    КонецЦикла;
    Док.Записать();
    Док.Провести();
КонецПроцедуры
//*******************************************

Процедура Выполнить()
    Перем Запрос, ТекстЗапроса;
    Запрос = СоздатьОбъект("Запрос");
    спВодителей = СоздатьОбъект("СписокЗначений");
    тзВодители.Выгрузить(спВодителей,,,"Водитель");

    спрМаршруты=СоздатьОбъект("Справочник.Маршруты");
    тзМаршрутов = СоздатьОбъект("ТаблицаЗначений");
    тзМаршрутов.НоваяКолонка("Маршрут");
    ТекстЗапроса = "Период с ДатаР По ДатаР;
    |Док = Документ.РасходнаяНакладная.ТекущийДокумент;
    |Водитель = Документ.РасходнаяНакладная.Водитель;
    |Маршрут = Документ.РасходнаяНакладная.Маршрут;
    |Авто = Документ.РасходнаяНакладная.Машина;
    |Условие (Водитель в спВодителей);
    |Группировка Водитель;
    |Группировка Авто;
    |Группировка Маршрут;";
    Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
        Пока Запрос.Группировка("Водитель") = 1 Цикл
            Пока Запрос.Группировка("Авто") = 1 Цикл
                Водитель = Запрос.Водитель;
                Авто = Запрос.Авто;
                тзМаршрутов.УдалитьСтроки();
                Пока Запрос.Группировка("Маршрут") = 1 Цикл
                   // определяем маршрут по номеру

                    МаршрутЧисло = Запрос.Маршрут;
                    Если спрМаршруты.НайтиПоКоду(МаршрутЧисло)=0 Тогда
                        Предупреждение("Выбран не существующий маршрут", "!");
                        Продолжить;
                    КонецЕсли;
                    Маршрут = спрМаршруты.ТекущийЭлемент();
                   // Проверка что не такого документа уже

                    Если ПроверкаСуществованияДокумент(Водитель, Авто, Маршрут) = 0 Тогда
                        тзМаршрутов.НоваяСтрока();
                        тзМаршрутов.Маршрут = Маршрут;
                    КонецЕсли;
                КонецЦикла;
               // создаем документ

                Если тзМаршрутов.КоличествоСтрок() > 0 Тогда
                    СоздатьДокумент(Водитель, Авто, тзМаршрутов);
                    Сообщить("Сформирован путевой лист. Водитель: " + Строка(Водитель) + ", автомобиль: " + Строка(Авто));
                КонецЕсли
            КонецЦикла;
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

//*******************************************

//
Процедура ПриОткрытии()
    ДатаР = РабочаяДата();
    тзВодители.НоваяКолонка("Водитель", "Справочник.Сотрудники");
    тзВодители.НоваяКолонка("Организация", "Справочник.ТранспортныеОрганизации");
    спПараметров = Форма.Параметр;
    Если ТипЗначенияСтр(спПараметров) = "СписокЗначений" Тогда
        ДатаР = спПараметров.Получить("ДатаНа");
        ВыбМаршрут = спПараметров.Получить("Маршрут");
            КонецЕсли;
КонецПроцедуры

Меня терзают смутные сомнения, что нет.
   Valery
 
8 - 09.12.04 - 11:34
Само собой что нет. Запросом их не свяжешь. Надо в док Путевка добавить реквизит
накладная. Тогда они свяжутвся.
   Velenok
 
9 - 09.12.04 - 12:09
На 1 пут. лист идет несколько расходных. По Ходу дела их так не связать.
Valery, спасибо большое  за помощь.


Список тем форума
Рекламное место пустует   Рекламное место пустует
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует