Помогите пожалуйста с запросом

Тема в разделе "1C и всё что с ней связано", создана пользователем alkinoos, 23 авг 2010.

Статус темы:
Закрыта.
  1. alkinoos

    alkinoos Гость

    Здравствуйте, имеем 1С 7.7
    формирую маленький запрос

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

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    НомСтроки = 0;
    Всего=0;
    Пока Запрос.Группировка(1) = 1 Цикл
    Пока Запрос.Группировка(2) = 1 Цикл
    НомСтроки=НомСтроки+1;
    Если Запрос.ЗОП.Специальность = Запрос.Спец.ТекущийЭлемент() Тогда Всего=Всего+1; КонецЕсли;
    Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    КонецЦикла;

    Если убираю вторую группировку(и цикл вывода соответсвенно) - выводит список СПЕЦиальностей,
    Меняю группировки местами в запросе - выводит документы (при наличии одной группировки)

    НО почему когда группировки две(как в запросе выше) Запрос.Группировка(2) всегда равен 0 (неважно что я группирую)
    Помогите, в чем проблема?

    Другими словами если оставлю так

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

    Тогда выводятся Специальности
    И наоборот если так

    |Период с НачДата по КонДата;
    |Спец = Справочник.Специальности.ТекущийЭлемент;
    |ЗОП = Документ.ЗаявлениеОПриеме.ТекущийДокумент;
    |Группировка ЗОП;
    |";//}}ЗАПРОС
    ...
    Пока Запрос.Группировка(1) = 1 Цикл
    НомСтроки=НомСтроки+1;
    // Если Запрос.ЗОП.Специальность = Запрос.Спец.ТекущийЭлемент() Тогда
    // Всего=Всего+1; КонецЕсли;
    Таб.ВывестиСекцию("Строка"); // в строке таблицы выражение <Запрос.Спец>
    КонецЦикла;

    Выводятся (все) документы нужного типа

    В документах есть несколько полей где могут быть указаны специальности,
    так вот нужно чтобы выводилась сама специальность и подсчитывалось количество документов
    в которых она встречается.
     
  2. Natalya

    Natalya Active Member

    Регистрация:
    2 фев 2008
    Сообщения:
    25
    Симпатии:
    0
    Если вы в документе выбираеете специальность из справочника "Специальности", сделайте выборку по документам, Спец = Справочник.Специальности.ТекущийЭлемент - это писать не нужно.
    Можно попробовать так:
    Код (Text):
    |Период с НачДата по КонДата;
    |ЗОП = Документ.ЗаявлениеОПриеме.ТекущийДокумент;
    |Спец = ЗОП.специальность;
    |Группировка Спец;";
     
  3. alkinoos

    alkinoos Гость


    выдает
    Неверно заданный путь "ЗОП" и
    Переменная "Спец" не определена

    а вот так что то считает
    |Спец = Документ.ЗаявлениеОПриеме.ТекущийДокумент.специальность;

    (сейчас проверю)
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Потому что получается связка "летят два крокодила - один красный, другой на север" - нет связи между элементом справочника и документом. Вот когда ты пишешь |Спец = Документ.ЗаявлениеОПриеме.ТекущийДокумент.специальность;
    - это работает. И когда ты пишешь

    |Спец = Документ.ЗаявлениеОПриеме.ТекущийДокумент.специальность, Справочник.Специальности.ТекущийЭлемент; - это тоже работает

    а иначе получается "А что там у нас в справочнике? а рядом положите документики. А дальше что - а дальше ничего."

    Чтоб поймать какие элементы есть в документах проше добавить функцию счетчик - у элементов из документов он будет отличным от 1.


    Еще по запросу - я бы добавил период, Обрабатывать и ОбрабатыватьДокументы
     
  5. User1C

    User1C Гость

    Код (Text):
    |Период с НачДата по КонДата;     
    |ЗОП = Документ.ЗаявлениеОПриеме.ТекущийДокумент;
    |СпецД = Документ.ЗаявлениеОПриеме.специальность;
    |Группировка ЗОП Упорядочить по ЗОП.ДатаДок;
    |Условие (СпецД в Спец);";
    Вот так попробуй
     
Загрузка...
Похожие Темы - Помогите пожалуйста запросом
  1. МарФа
    Ответов:
    4
    Просмотров:
    1.654
  2. limbra
    Ответов:
    3
    Просмотров:
    46
  3. uxbmw3w
    Ответов:
    0
    Просмотров:
    65
  4. GREED
    Ответов:
    1
    Просмотров:
    536
  5. Рая
    Ответов:
    3
    Просмотров:
    788
Статус темы:
Закрыта.

Поделиться этой страницей