ОБСУЖДЕНИЕ

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

4 ответов 4,9 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Здравствуйте, имеем 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) всегда равен 0 (неважно что я группирую)
Помогите, в чем проблема?
Потому что получается связка "летят два крокодила - один красный, другой на север" - нет связи между элементом справочника и документом. Вот когда ты пишешь |Спец = Документ.ЗаявлениеОПриеме.ТекущийДокумент.специальность;
- это работает. И когда ты пишешь

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

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

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


Еще по запросу - я бы добавил период, Обрабатывать и ОбрабатыватьДокументы
 
Код:
|Период с НачДата по КонДата;	 
|ЗОП = Документ.ЗаявлениеОПриеме.ТекущийДокумент;
|СпецД = Документ.ЗаявлениеОПриеме.специальность; 
|Группировка ЗОП Упорядочить по ЗОП.ДатаДок;
|Условие (СпецД в Спец);";

Вот так попробуй
 
Статус
Закрыто для дальнейших ответов.