Имя: Пароль:
1C
1C 7.7
v7: Запросы в 1с 7.7
,
0 Starhan
 
08.08.16
09:02
Имеется вот такой запрос. Структура метданных следующая, есть документ (ВыгрузкаДокумента) в шапке которого реквизит - ДокументНаВыгрузку (тип документ), надо запросом проверить есть ли уже документы с нужным документом и ВидомОперации на выгрузку



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

    // Подготовка к заполнению выходных форм данными запроса

    // Заполнение полей "Заголовок"

    Пока Запрос.Группировка() = 1 Цикл
        // Заполнение полей ЗапросДокументНаВыгрузке     
        Возврат 1;
    КонецЦикла;
    // Вывод заполненной формы

КонецФункции //ДокументНаВыгрузке(ТекДок,ВидОперации)


Проблема в том что запрос выполняется но всегда пустой (обход не проходит)

Что я делаю не так?
1 Ёпрст
 
08.08.16
09:11
Передаешь не ссылку на документ
2 LazyStranger
 
08.08.16
09:11
скорее всего впадает в ступор от условия
(ВидОперации = ВидОперации)

переименуй переменную в запросе
|запрВидОперации = Документ.ВыгрузкаДокумента.ВидОперации;
|Условие(запрВидОперации = ВидОперации);
3 Ёпрст
 
08.08.16
09:11
+ запрос в топку, весь
4 Остап Сулейманович
 
08.08.16
09:14
(0)
1. В запросе нет функции. Хотя бы счётчик.
2. Не указаны даты.
3. В семерке это проще сделать выборкой.
5 Ёпрст
 
08.08.16
09:16
(4)
1.для этого запроса они не нужны
2.аналогично
6 Builder
 
08.08.16
09:17
(4) В запросе по документам и справочникам функция не нужна.
Даты да, неплохо бы указать.
Выборкой по подчиненным тут будет скорее всего быстрее.
7 Starhan
 
08.08.16
09:33
(1) передаю как ТекущийДокумент()

это неправильно?
8 Starhan
 
08.08.16
09:33
(3) а как лучше я тонкостей 7.7. не помню совсем.
9 Ёпрст
 
08.08.16
09:35
(7) покажи, что передаешь
10 Ёпрст
 
08.08.16
09:36
ну и
|ОбрабатыватьДокументы Все;
для начала
11 Ёпрст
 
08.08.16
09:37
ну и выбратьподчиненныедокументы будет быстрее
12 Остап Сулейманович
 
08.08.16
09:37
(8)
Докс = СоздатьОбъект("Документ");
Докс.ВыбратьДокументы(начДата, конДата, ТекущийДокумент());
Пока Докс.ПолучитьДокумент() = 1 Цикл
    Если Докс.Проведен() = 1 Тогда
        Продолжить;
    КонецЕсли;
    Если Докс.Вид() = "ТвойВидДокумента" Тогда
        Если Докс.ВидОперации = ТвойВидОперации Тогда
            Возврат 1;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
Возврат 0;
13 Starhan
 
08.08.16
09:39
(9)
ДокументНаВыгрузке(ТекущийДокумент(),Перечисление.ВидыОперацийДокументНавыгрузку.Продажа);
14 Starhan
 
08.08.16
09:44
А может кто нибудь подсказать как этот запрос будет выглядить через ToySQL
15 Это_mike
 
08.08.16
09:46
(14) А почему Той?
Я, кстати, только одну контору виделЭ, которая той использовала (заморозчики)
16 Хуан
 
08.08.16
09:46
Используй выбратьподчиненныедокументы()
17 Это_mike
 
08.08.16
09:47
И да, зачем тебе в результтах запроса ВидОперации, если ты по нему фильтруешь
18 Starhan
 
08.08.16
09:48
(15) потому что в базе уже используется той скл

легаси :) Я не виноватый
19 Starhan
 
08.08.16
09:49
(16) это надо документ ВыгрузкаДокумента подчинить документу Чек (реквизит ДокументНаВыгрузку)?
20 Это_mike
 
08.08.16
09:51
(18) не помню, чем ToySQL отличается
(19) не надо, он уже сам подчинился - ссылку записал
21 Хуан
 
08.08.16
09:51
Условие(ДокументНаВыгрузку = ТекДок);

Судя по тексту запроса - он уже подчинен.
22 Starhan
 
08.08.16
09:53
(21) подчинен - является реквизитом документа?
23 Starhan
 
08.08.16
09:53
(20) ага понял.
24 Boroda
 
08.08.16
09:53
Запрос нао доработать с учетов данных советов и еще добавить строчку "Группировка Документ". Примерно вот так:
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ДатаНачала по Датаокончания;
    |Без итогов;
    |ТекДок = Документ.ПКО.ТекущийДокумент;
    |Основание = Документ.ПКО.ДокОснование;
    |КодОперации = Документ.ПКО.КодОперации;
    |Условие(Основание = ВыбДок);
    |Условие(КодОперации = ВыбКодОперации);
    |Группировка Документ;
    |"//}}ЗАПРОС
    ;
25 Хуан
 
08.08.16
09:54
(22) Да. На него есть ссылка в любом реквизите документа
26 Это_mike
 
08.08.16
09:56
а вообще, такой запрос должен жутко долго работать. надо (16), или если прямой - тотоже по 1scrdoc
27 Starhan
 
08.08.16
10:27
переписал на той скл по аналогии с тем что было в базе, заработало всем спасибо.
28 Это_mike
 
08.08.16
10:32
(27) кинь поглядеть, чем синтаксис ТойСКЛ отличается...
29 Starhan
 
08.08.16
13:40
ВремТаб = СоздатьОбъект("ТаблицаЗначений");

    ТекстЗапроса = "
    |SELECT TOP 1
    |    [Док.ДокументНаВыгрузку] ДокументНаВыгрузку
    |FROM
    |    [Документ.ВыгрузкаДокумента] Док WITH(NOLOCK)
    |WHERE
    |    [Док.ДокументНаВыгрузку]=[@ТекДок]  AND
    |    [Док.ВидОперации]=[@ВидОперации]
    |
    |";
    
    
    Если глЗапросSQL.МетаЗапрос(ТекстЗапроса) = 0 Тогда
        Сообщить(глЗапросSQL.Ошибка);
        Возврат 0;
    КонецЕсли;
    глЗапросSQL.Выгрузить(ВремТаб);
    
    Если ВремТаб.КоличествоСтрок() =  0 Тогда
        Возврат 0;
    Иначе
        Возврат 1;
    КонецЕсли;
Независимо от того, куда вы едете — это в гору и против ветра!