|
Индекс находится за пределами массива | ☑ | ||
---|---|---|---|---|
0
black_cat1305
30.07.13
✎
09:36
|
Добрый день! Прошу вас не закидывайте меня комнями!!!! Помогите разобраться в чем дело?! Написала обработку, но при проведении выдает сообщение "индекс находится за пределами массива". Отладчиком проверяю все нормально, уже и незнаю где и в каком месте рыть(((
Вот сама обработка Процедура СформироватьРоли(ТабДок) Макет = ПолучитьМакет("Макет"); Макет.ПолучитьОбласть("Шапка|ПервыйСтолбец"); ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка|ПервыйСтолбец")); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ku_ФункционалПользователя.Наименование КАК Функционал |ИЗ | РегистрСведений.ku_ФункционалПользователя КАК ku_ФункционалПользователя | |СГРУППИРОВАТЬ ПО | ku_ФункционалПользователя.Наименование"; РезультатФункционал = Запрос.Выполнить().Выгрузить(); Для Каждого Функционал из РезультатФункционал Цикл Область = Макет.ПолучитьОбласть("Шапка|Столбец"); Область.Параметры.Роль = Функционал.Функционал; ТабДок.Присоединить(Область); КонецЦикла; ТабДок.Присоединить(Макет.ПолучитьОбласть("Шапка|ПоследнийСтолбец")); ТабПользователей = Новый ТаблицаЗначений; ТабПользователей.Колонки.Добавить("Пользователь"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ku_ФункционалПользователя.Пользователь, | ku_ФункционалПользователя.Пользователь.ФизЛицо.Наименование КАК ПользовательФизЛицоНаименование |ИЗ | РегистрСведений.ku_ФункционалПользователя КАК ku_ФункционалПользователя | |СГРУППИРОВАТЬ ПО | ku_ФункционалПользователя.Пользователь, | ku_ФункционалПользователя.Пользователь.ФизЛицо.Наименование | |УПОРЯДОЧИТЬ ПО | ПользовательФизЛицоНаименование Возр" ; РезультатПользователь = Запрос.Выполнить().Выгрузить(); Для Каждого Пользователь Из РезультатПользователь Цикл НоваяСтрока = ТабПользователей.Добавить(); НоваяСтрока.Пользователь = Пользователь; КонецЦикла; ТабПользователей.Сортировать("Пользователь Возр"); Для Каждого СтрокаТЗ из ТабПользователей Цикл Пользователь = СтрокаТЗ.Пользователь; Область = Макет.ПолучитьОбласть("Строка|ПервыйСтолбец"); Область.Параметры.Пользователь = Пользователь.Пользователь; ТабДок.Вывести(Область); инд = 0; Для Каждого Пользователи из РезультатПользователь Цикл Область = Макет.ПолучитьОбласть("Строка|Столбец"); //??? Значение = СодержитЛиФункц(Пользователь.Пользователь,РезультатФункционал[инд]); // Ошибка Индекс находится за границами массива инд = инд + 1; Область.Параметры.Функционал = Значение; ТабДок.Присоединить(Область); КонецЦикла; ТабДок.Присоединить(Макет.ПолучитьОбласть("Строка|ПоследнийСтолбец")); КонецЦикла; КонецПроцедуры Функция СодержитЛиФункц(Пользователь,РезультатФункционал) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ku_ФункционалПользователя.Наименование, | ku_ФункционалПользователя.Пользователь.ФизЛицо.Наименование КАК ПользовательФизЛицоНаименование |ИЗ | РегистрСведений.ku_ФункционалПользователя КАК ku_ФункционалПользователя |ГДЕ | ku_ФункционалПользователя.Пользователь = &Пользователь | И ku_ФункционалПользователя.Наименование = &Наименование | |УПОРЯДОЧИТЬ ПО | ПользовательФизЛицоНаименование Возр"; Запрос.УстановитьПараметр("Пользователь",Пользователь); Запрос.УстановитьПараметр("Наименование",РезультатФункционал.Функционал); Результат = Запрос.Выполнить().Выбрать(); Флаг = ложь; Если Результат.Количество()>0 тогда Флаг=Истина; КонецЕсли; Возврат Флаг; КонецФункции |
|||
1
ДенисЧ
30.07.13
✎
09:39
|
Кто угадает, в каком месте ошибка, тот получит приз! Так?
|
|||
2
Maxus43
30.07.13
✎
09:39
|
в ошибке вобще то пишется и в какой строке ошибка
|
|||
3
SeraFim
30.07.13
✎
09:39
|
количество строчек в "РезультатФункционал" меньше, чем количество строк в "РезультатПользователь"
Например в РезультатПользователь - 10 строк, а в РезультатФункционал - 5. ты пытаешься обратиться к РезультатФункционал[9] - а его просто нету |
|||
4
SeraFim
30.07.13
✎
09:40
|
(1) там отмечено комментарием, где ошибка))
|
|||
5
SeraFim
30.07.13
✎
09:41
|
ой, прелесть-то какая: запрос в цикле!
|
|||
6
ДенисЧ
30.07.13
✎
09:41
|
(4) Чо, я всю портянку читать долден?
|
|||
7
Maxus43
30.07.13
✎
09:42
|
(4) молодец, приз предоставит автор, как не самому ленивому)
|
|||
8
Godofsin
30.07.13
✎
09:42
|
(6) не долден, не долден )))
|
|||
9
black_cat1305
30.07.13
✎
09:42
|
тогда как мне можно обойти данную ошибку, так как в запросе РезультатПользователей может быть много пользователей, а во втором запросе РезультатФункционал меньше(((
|
|||
11
black_cat1305
30.07.13
✎
09:43
|
простите меня о великие люди 1С!!! Я только учусь
|
|||
13
Godofsin
30.07.13
✎
09:44
|
(0) А чо ты там отладчиком проверяла? Сравнивала РезультатФункционал.Количество() и инд?
|
|||
14
black_cat1305
30.07.13
✎
09:44
|
я так и знала что в ход пойдут камни
|
|||
15
Godofsin
30.07.13
✎
09:45
|
(11) Дааа.... вот это нам нравится ))))
|
|||
16
Maxus43
30.07.13
✎
09:45
|
(14) тут проблема не программирования, а логики. Ты же понимаешь причину? разное количество строк в коллекциях. Как её обойти - зависит от задачи, и простой логики
|
|||
17
aka AMIGO
модератор
30.07.13
✎
09:45
|
||||
18
Starhan
30.07.13
✎
09:46
|
(14) У тебя в той строке где ошибка
Значение инд больше чем строчек в запросе - 1. |
|||
19
Starhan
30.07.13
✎
09:46
|
(18) вывод плохо проверяла отладчиком.
|
|||
20
Maxus43
30.07.13
✎
09:47
|
в РегистрСведений.ku_ФункционалПользователя нет Пользователь?
|
|||
21
black_cat1305
30.07.13
✎
09:47
|
Это я уже поняла, что плохо проверяла, моя ошибка
|
|||
22
Starhan
30.07.13
✎
09:47
|
(18)чем строчек в таблице РезультатФункционал*
|
|||
23
black_cat1305
30.07.13
✎
09:48
|
в Регистре есть пользователь
|
|||
24
Infsams654
30.07.13
✎
09:48
|
(14) так в 1-м запросе в ТЗ надо бы еще пользователя выгрузить, а потом в том месте где ошибка искать в этом ТЗ нужного пользователя, т.к. [инд] никаким боком к нему не относится
|
|||
25
black_cat1305
30.07.13
✎
09:49
|
понятно, сейчас попробую сделать
|
|||
26
Maxus43
30.07.13
✎
09:50
|
(23) ну логично предположить что функционал надо проверять конкретного пользователя, а не всех.
СодержитЛиФункц( - зачем эта функция вобще, если уже есть список пользователей и их функционалов в одном регистре? Или я плохо вижу, или все 3 запроса практически одинаковы, и вытащить всё можно одним |
|||
27
Godofsin
30.07.13
✎
09:52
|
(26) +1
|
|||
28
black_cat1305
30.07.13
✎
09:53
|
я через эти запросы пытаюсь вывести отчет. Выгружаю всех пользователей и функционал и проставляю соответствующие галочки (в зависимости у пользователя какой функционал)
|
|||
29
black_cat1305
30.07.13
✎
09:54
|
поэтому запросы все почти одинаковы
|
|||
30
black_cat1305
30.07.13
✎
09:55
|
по вертикали у меня пользователи, а по горизонтали функционал
|
|||
31
Maxus43
30.07.13
✎
09:55
|
(28) я верю, но зачем 3 запроса?
Я вижу: 1. вытаскиваем функционал (игноря что там есть и пользователь) 2. тоже что и п.1 только по пользователям 3. у кажного пользователя из п.2 ПОРВЕРЯЮ есть ли функционал из п.1 Ну ты же и так знаешь уже у какого пользователя что есть. |
|||
32
Godofsin
30.07.13
✎
09:56
|
(28) ЛевоеСоединение тебе помощь и проверка на НУЛЛ
|
|||
33
Infsams654
30.07.13
✎
09:56
|
(26)+1, (30) а у пользователя может быть несколько функционалов ?
|
|||
34
black_cat1305
30.07.13
✎
09:56
|
может быть очень много функционалов
|
|||
35
Godofsin
30.07.13
✎
09:57
|
"Функционал" в регистре сведений что из себя представляет?
|
|||
36
Starhan
30.07.13
✎
09:58
|
(31) видимо это она так пытается в отчете столбцы по функционалу вывести.
|
|||
37
black_cat1305
30.07.13
✎
09:59
|
я только новичок в этом(знаю что это не опровдание). Вы правы я пытаюсь вывести по функционалу столбцы
|
|||
38
Infsams654
30.07.13
✎
09:59
|
(34) так тогда бери всех пользователей одним запросом из РС вместе с функционалом и выводи. Если РС периодический, то на дату
|
|||
39
black_cat1305
30.07.13
✎
09:59
|
функционал - строка (наимнование профиля
) |
|||
40
Maxus43
30.07.13
✎
10:00
|
(34) безразницы.
надо так наверно: 1. Вытащить список всех возможных функционалов. 2. вытащить список пользователей с ИХ функционалами 3. Столбцы выводишь по п.1, а по п.2 понимаешь что данный функционал есть, и ставишь в столбце крыжик. Как то так наверно |
|||
41
black_cat1305
30.07.13
✎
10:02
|
я все никак не соображу как мне сделать тогда 3. Столбцы выводишь по п.1, а по п.2 понимаешь что данный функционал есть, и ставишь в столбце крыжик.
|
|||
42
black_cat1305
30.07.13
✎
10:03
|
простите за мою тупость(((
|
|||
43
Maxus43
30.07.13
✎
10:24
|
ВсеФункционалы - Массив со всеми возможными. не повторяющимися
ВсеПользователи - массив со всеми порльзователями, не повторяющимися ТаблицаЮзеров - запрос в регистру по полям Юзер и функционал. Далее Цикл1 - по ВсеПользователи, выводишь строку с юзером цикл2 - по ВсеФункционалы, выводишь столбец с функционалом. внутри цикла2 Отбор = НовыйСтруктура("Пользователь, Функционал", Юзер, Функционал); Рез = ТаблицаЮзеров.НайтиСтроки(Отбор); Если Рез.Количество()>0 ТОгда этот функционал есть у юзера. Ставь крыжик, иначе нету |
|||
44
Infsams654
30.07.13
✎
10:27
|
(41) ну наверное, надо сначала определить сколько возможных функционалов может быть, из запроса, построить из макета строку без вывода
ТабДок.Присоединить( а затем заполнять копированием этой строки в макет с соответствующими галочками |
|||
45
black_cat1305
30.07.13
✎
10:35
|
спасибо вам большое всем!!!
|
|||
46
Maxus43
30.07.13
✎
10:42
|
>>ну наверное, надо сначала определить сколько возможных функционалов может быть
>>ВсеФункционалы - Массив со всеми возможными. не повторяющимися |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |