Имя: Пароль:
1C
1С v8
Передача параметра в функцию по условию
,
0 dft2014
 
21.08.19
17:40
УФ

Помогите с алгоритмом! Есть таблица значений, отсортированная по "РЕГИОН". Мне надо передать (в новую функцию) подразделения в виде массива (или чего-то другого), сгруппированные по "РЕГИОНУ". Т.е. сначала должен передаться массив подразделений из региона "Восток", потом "Запад" и т.д. Как это запрограммировать? Ниже таблица значений:

ПОДРАЗДЕЛЕНИЕ       РЕГИОН
Подразделение7        Восток
Подразделение5        Восток
Подразделение1        Запад
Подразделение2        Север
Подразделение6        Север
Подразделение3        Север
Подразделение4        Юг
1 Cyberhawk
 
21.08.19
17:42
Получаешь различные значения колонки Регион.
Далее в цикле отбор строк из ТЗ по каждому региону и накопление сопутствующих данных.
2 dft2014
 
21.08.19
17:43
+(0) Код ниже передает последовательно по одному подразделению в функцию в качестве параметра. А мне надо передавать массив подразделений, сгруппированный по региону. Как это сделать?

Для каждого СтрокаТЗ из ТабЗнач Цикл
    ТабДок = СформироватьНаСервере(СтрокаТЗ.Подразделения, Дата);
КонецЦикла;
3 dft2014
 
21.08.19
17:44
(1) Вот как это делать?
4 hhhh
 
21.08.19
17:50
(3)     ТабДок = СформироватьНаСервере(массивподразделений, Дата);
5 dft2014
 
21.08.19
17:53
(4) Это очевидно! А вот как разнести подразделения по регионам?
6 eTmy
 
21.08.19
17:53
Это еще очевидней)))
7 IOANNscrp
 
21.08.19
17:54
(3) Свернуть тз по региону, пробежаться по каждому региону и найти в исходной таблице подразделения с этим регионом, сформировать массив подразделений и передать регион
ТабДок = СформироватьНаСервере(массивподразделений,регион, Дата);
8 hhhh
 
21.08.19
17:57
(7) ну регион можно не передавать
9 IOANNscrp
 
21.08.19
17:58
(8) соглы
10 dft2014
 
21.08.19
18:01
Вот так пишу, но получается какая-то чушь:

Если Объект.ТабличнаяЧасть.Количество()>0 Тогда
    Объект.ТабличнаяЧасть.Сортировать("Регион Возр");
    
    СтароеЗначение  = "";
    ТекущееЗначение = "";
    мПодразделения = Новый Массив;
    
    Для Каждого СтрокаТЧ из Объект.ТабличнаяЧасть Цикл
        ТекущееЗначение = СтрокаТЧ.Подразделение;  
        
        Если СтароеЗначение <> ТекущееЗначение Тогда
            Если СтрокаТЧ > 1 тогда
                ТабДок = СформироватьНаСервере(мПодразделения, Дата);
            КонецЕсли;    
            мПодразделения.Очистить();
        КонецЕсли;    
        
        мПодразделения.Добавить(СтрокаТЧ.Подразделения);
        ТабДок = СформироватьНаСервере(мПодразделения, Дата);
        
        СтароеЗначение = ТекущееЗначение;
        
    КонецЦикла;
    
КонецЕсли;
11 dft2014
 
21.08.19
20:05
Ап!
12 Dmitry77
 
21.08.19
21:14
Подсказка.

1. свернуть тз по регионам.
2. воспользоваться фуркцией "НайтиСтроки"
13 Alex87r
 
21.08.19
21:22
1. Копируешь ТЗ в новую таблицу
2. Сворачиваешь новую ТЗ по региону.
3. Запускаешь цикл по новой таблице, используя функцию найти строки
Код примерно такой
Для Каждого Регион ИЗ новаяТаб Цикл
МасСтрок = СтараяТЗ.НАйтиСтроки(Новый структура("регион", Регион));
ТвояНоваяФункция(масСтрок);
КонецЦикла
14 dft2014
 
22.08.19
16:52
(12), (13) СПАСИБО!!! Все получилось, ниже итоговый код:

&НаСервере
Процедура СформироватьНаСервере()
    
    ТаблЗнач = Новый ТаблицаЗначений;
    мПодразделения = Новый Массив;
    
    Если Объект.ТабличнаяЧасть.Количество()>0 Тогда
        
        ТаблЗнач = Объект.ТабличнаяЧасть.Выгрузить();
        ТаблЗнач.Свернуть("Регион");
        
        Для каждого СтрокаТЗ ИЗ ТаблЗнач Цикл
            
            Отбор = Новый Структура("Регион", СтрокаТЗ.Регион);
            мПодразделения = Объект.ТабличнаяЧасть.НайтиСтроки(Отбор);
            ТабДок = СформироватьНаСервере(мПодразделения, Объект.ДатаОтчета);
            
        КонецЦикла;
        
    КонецЕсли;
    
    
КонецПроцедуры

&НаКлиенте
Процедура Сформировать(Команда)
    СформироватьНаСервере();
КонецПроцедуры
15 Simod
 
23.08.19
11:26
(14) Тут еще есть что дорабатывать. И стоит вызов СформироватьНаСервере() из СформироватьНаСервере().