Имя: Пароль:
1C
1С v8
Произошла исключительная ситуация: Значение индекса выходит за границы диапазона
0 Frostik
 
25.09.12
05:45
Есть Функция :

Функция КОМвТЗ(КОМ)
   Тз = новый ТаблицаЗначений;
   КЧ = Новый КвалификаторыЧисла(12,2);
   КС = Новый КвалификаторыСтроки(150);
   КД = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
   
   
   Массив = Новый Массив;
   Массив.Добавить(Тип("Строка"));
   ОС = Новый ОписаниеТипов(Массив, , КС);
   Массив.Очистить();
   Массив.Добавить(Тип("Число"));
   ОЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
   Массив.Очистить();
   Массив.Добавить(Тип("Дата"));
   ОД = новый ОписаниеТипов(Массив, , ,КД);
   Массив.Очистить();
   Массив.Добавить(Тип("Булево"));
   ОБ    = Новый ОписаниеТипов(Массив);
   
   Массив.Очистить();
   Массив.Добавить(Тип(Открытие.перечисления.СистемаОплаты));
   Осс    = Новый ОписаниеТипов(Массив);
   
   //цикл создает колонки в ТЗ с соответсвующими типами данных
   //данный цикл необходим для четкого определения типа значений в полях Тз
   //иначе возникает ошибка
   Для каждого тайтл Из  КОМ.Columns Цикл
       имяКОМколонка = Тайтл.Title;
       
       КК = ?(ТипЗнч(КОМ.Получить(0)[имяКомколонка]) = Тип("Строка"),КС, КК);
       ОК = ?(ТипЗнч(КОМ.Получить(0)[имяКомколонка]) = Тип("Строка"),ОС, ОК);
       КК = ?(ТипЗнч(КОМ.Получить(0)[имяКомколонка]) = Тип("Число"),Кч,КК);
       ОК = ?(ТипЗнч(КОМ.Получить(0)[имяКомколонка]) = Тип("Число"),ОЧ, ОК);
       КК = ?(ТипЗнч(КОМ.Получить(0)[имяКомколонка]) = Тип("Дата"),Кд,КК);
       ОК = ?(ТипЗнч(КОМ.Получить(0)[имяКомколонка]) = Тип("Дата"),ОД, ОК);
       ОК = ?(ТипЗнч(КОМ.Получить(0)[имяКомколонка]) = Тип("БУлево"),ОБ,ОК);
       ОК = ?(ТипЗнч(КОМ.Получить(0)[имяКомколонка]) = Тип(Открытие.перечисления.СистемаОплаты),Осс,ОК);
       ТЗ.Колонки.Добавить(имяКОМколонка,ОК);
   КонецЦикла;
   
   //двойной цикл проходящий по КОМ таблице,полученной из запрос внешней БД
   //и переносящий значений в ТЗ соответсвенно именам колонок
   Для каждого КОМстр Из КОМ Цикл
       ТЗстр = ТЗ.Добавить();
       
       Для каждого тайтл Из КОМ.Columns Цикл
           имяКОМколонка = Тайтл.Title;
           ТЗстр[имяКОМколонка]= КОМстр[имяКОМколонка];
       КонецЦикла;
       
   КонецЦикла;
   //возвращаемое значение отработанной функции
   Возврат ТЗ;    
КонецФункции
1 Frostik
 
25.09.12
05:46
При выполнении выдает ошибку

Ошибка при вызове метода контекста (Получить): Произошла исключительная ситуация: Значение индекса выходит за границы диапазона
       КК = ?(ТипЗнч(КОМ.Получить(0)[имяКомколонка]) = Тип("Строка"),КС, КК);
2 Tymoha
 
25.09.12
05:49
ты таблицу значений так копируешь чтоль?
3 Frostik
 
25.09.12
05:51
Создаю выходную таблицу
4 Tymoha
 
25.09.12
05:53
ну так а почему просто не скопировать ТЗ?
5 Frostik
 
25.09.12
05:58
Значения получаю по КОМ соединению из внешней БД, если просто скопировать не будет соответствовать поставленным задачам
6 Рэйв
 
25.09.12
06:03
Значит нет у тебя строк в КОМ вообще
7 Frostik
 
25.09.12
06:09
то есть нету таких строк во внешней БД откуда я получаю данные?
8 Рэйв
 
25.09.12
06:12
(6)Да, она пустая.  Потому .Получить(0) выходит за границу. Нет у тебя там строки с индексом 0
9 Рэйв
 
25.09.12
06:13
Если хочешь, проверь в табло

КОМ.Количество()
10 Frostik
 
25.09.12
06:14
Подскажите пж как решить проблему?
P.S я не столь давно начал разрабатывать прикладные решения на платформе 1с
11 Рэйв
 
25.09.12
06:17
В начале функции вставь код
//---

Если КОМ.Количество()= Тогда
  Сообщить("Полученная по СОМ таблица пуста!");
  Возврат;
КонецЕсли;
//-----

И ошибку выдавать перестанет:-) а почему она пустая -- это уж сам смотри.
12 Рэйв
 
25.09.12
06:17
КОМ.Количество()= 0

нумлок отрубился:-)
13 Рэйв
 
25.09.12
06:19
+и раз уж функция , то не просто

Возврат;

а

Возврат КОМ;
14 Tymoha
 
25.09.12
06:20
(11) если я правильно понял, КОМ в данной ситуации вообще не таблица значений ...
15 Рэйв
 
25.09.12
06:21
(14)Какая то коллекция точно. Иначе ругалось бы не на выход за границу индексов а на  отстутствие методе .Получить();

Раз метод есть, значит коллекция
16 Tymoha
 
25.09.12
06:25
(15) угу ... согласен ... уговорил )))
17 Frostik
 
25.09.12
06:27
Да Ком пуста...
18 Прохожий
 
25.09.12
06:28
До чего довел планету это фигляр ПэЖэ...
19 Прохожий
 
25.09.12
06:28
Пацаки чатланам на голову сели, метод Количество() курить не хотят...
20 Frostik
 
25.09.12
06:32
мда...
21 Frostik
 
25.09.12
06:40
Спасибо  всем за помощь)