• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы alkinoos
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

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; КонецЕсли;
Таб.ВывестиСекцию("Строка"); // в строке таблицы выражение <Запрос.Спец>
КонецЦикла;

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

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

Natalya

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

alkinoos

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


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

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

(сейчас проверю)
 
P

puh14

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

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

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

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


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

User1C

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!