|
Передача параметра в функцию по условию | ☑ | ||
---|---|---|---|---|
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) Тут еще есть что дорабатывать. И стоит вызов СформироватьНаСервере() из СформироватьНаСервере().
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |