Имя: Пароль:
1C
1С v8
Цикл в запросе СКД
,
0 ifoxy
 
01.11.13
11:00
Подскажите, как организовать цикл в запросе в СКД? Сдесь в одной теме вычитала советуют

в СКД:
ВЫБРАТЬ
    Контрагенты.Ссылка,
    ПолучитьСписокМенеджеров(Контрагенты.МенеджерыПокупателя.(
        Ссылка,
        НомерСтроки,
        МенеджерПокупателя
    )) КАК СписокМенеджеров
ИЗ
    Справочник.Контрагенты КАК Контрагенты
в глобальном модуле:

Функция ПолучитьСписокМенеджеров(ТаблицаМенеджеров)
    СтрокаМенеджеров = "";
    Для Каждого ТекСтрока Из ТаблицаМенеджеров Цикл
        СтрокаМенеджеров = СтрокаМенеджеров + ТекСтрока.МенеджерПокупателя + ", ";    
    КонецЦикла;

    Возврат СтрокаМенеджеров;

КонецФункции

но у меня так не получается, никакую функцию запрос признавать не хочет. Может быть существуют другие варианты зациклить запрос?
1 Ksandr
 
01.11.13
11:03
Какая задача стоит?
2 fisher
 
01.11.13
11:03
По дефолту использование внешних функций в СКД отключено. Смотри примеры программной компоновки.
Но вообще эту хрень можно реализовать без внешних функций.
Смотри примеры использования функции СКД ВычислитьВыражениеСГруппировкойМассив()
3 Ksandr
 
01.11.13
11:05
(2) Можно и просто Массив(ИмяПоля), автор получит, что хочет
4 Feunoir
 
01.11.13
11:10
(3) Я бы ещё добавил СоединитьСтроки на всякий случай

СоединитьСтроки(Массив(Контрагенты.МенеджерыПокупателя))
5 fisher
 
01.11.13
11:10
(3) И то верно. Привык к более сложным раскладам :)
6 fisher
 
01.11.13
11:10
(4) СоединитьСтроки() добавляется автоматом в случае (3). Это документировано.
7 fisher
 
01.11.13
11:12
Но можно вызвать явно, если нужен свой разделитель значений.
8 Feunoir
 
01.11.13
11:12
(6) Может быть, просто я тут давеча выводил массив чисел, он мне их как массив и вывел, не через запятую, а в столбик. Поэтому "на всякий случай".
9 fisher
 
01.11.13
11:15
(8) Хм... Может ты и прав. В СП пишут, что СоединитьСтроки() по дефолту юзает разделителем перевод строки. Странно. Вроде когда я ВычислитьВыражениеСГруппировкойМассив() юзал выводило через запятую...
10 ifoxy
 
01.11.13
11:32
забыла уточнить, у меня 8.1 хотя думаю особого значение это не имеет

(3) а можно поподробнее, что значит Массив(ИмяПоля) это мне в запросе такое написать или где?
11 fisher
 
01.11.13
11:42
(10) Боюсь, имеет. Кажись, в 8.1 этих функций еще не было.
12 fisher
 
01.11.13
11:43
В 8.2 это можно писать в выражениях вычисляемых полей и ресурсов СКД.
13 ifoxy
 
01.11.13
11:52
а можно тогда маленький примерчик, как бы это было в 8.2 и какой разультат получился, я просто не очень понимаю как можно зациклить одно поле если его результат зависит от даты например.
14 fisher
 
01.11.13
12:05
(13) Никакого зацикливания. Допустим, детальные записи у тебя содержат и контрагентов и их менеджеров (соединение с табличной частью).
Делается группировка по контрагентам, а Массив(Менеджер) выступает в качестве агрегатной функции ресурса.
15 fisher
 
01.11.13
12:07
(13) "Если результат зависит от даты" - если ты имеешь в виду что-то типа среза последних на даты из запроса, то это совсем другой случай. В книге знаний есть примеры. Решается или хитрым запросом к основной таблице регистра, или соединением наборов данных СКД.
16 fisher
 
01.11.13
12:09
(15) + В случае параметризированного соединения наборов данных в самом деле получается логика вложенного цикла.
17 ifoxy
 
01.11.13
12:14
ну да, соединение наборов данных мне как раз подходит, но в 8.1 есть особенность, в такой конструкции не работают отборы, а они очень нужны(((
18 fisher
 
01.11.13
12:20
(17) Если нужны отборы в правом наборе - тогда да, проблема.