|
Индекс находится за границами массива | ☑ | ||
---|---|---|---|---|
0
amadeus2010
16.05.12
✎
12:35
|
Добрый день есть файл ексель с колонкой День посещения и числовым значением от 1 до 7 (дни недели).Загружаю этот файл в 1С документ.Вот этот код:
DAY = ?(ЕстьНеЦифрыВСтроке(СокрЛП(Лист.Cells(ПоСтрокам,4).Value)) , 0, Число(СокрЛП(Лист.Cells(ПоСтрокам,4).Value))); Если DAY=0 Тогда Строка.ДеньПосещения=Перечисления.ДниПосещения.ПустаяСсылка(); Иначе Строка.ДеньПосещения=Перечисления.ДниПосещения[DAY-1]; КонецЕсли; Интереса ради ввел например число 24,потому что пользователь также может ввести любое число.Естественно программа выдала такую ошибку: {Документ.К_ЗакреплениеКлиентов.Форма.ФормаДокумента(285)}: Индекс находится за границами массива Строка.ДеньПосещения=Перечисления.ДниПосещения[DAY-1]; Как можно обойти такую ошибку. |
|||
1
Error pro
16.05.12
✎
12:36
|
(0) Посмотреть Перечисления.ДниПосещения, явно там не все заполнено
|
|||
2
Mort
16.05.12
✎
12:38
|
Мда...
|
|||
3
del123
16.05.12
✎
12:38
|
если DAY < 6 тогда по рукам пользователю)
|
|||
4
Галахад
гуру
16.05.12
✎
12:38
|
?(day > 7, 0, day)
|
|||
5
del123
16.05.12
✎
12:38
|
(3) ой >
|
|||
6
Fish
16.05.12
✎
12:39
|
(0) Подумать головой и написать правильно условие :))
|
|||
7
cViper
16.05.12
✎
12:40
|
try{
}catch(ArrayIndexOutOfBoundsException ex){ } |
|||
8
cViper
16.05.12
✎
12:41
|
Отлавливай и сообщай об ошибке пользователя.
|
|||
9
amadeus2010
16.05.12
✎
12:45
|
В принципе можно использовать такую конструкцию
DAY = ?(ЕстьНеЦифрыВСтроке(СокрЛП(Лист.Cells(ПоСтрокам,4).Value)) , 0, Число(СокрЛП(Лист.Cells(ПоСтрокам,4).Value))); Если DAY=0 Тогда Строка.ДеньПосещения=Перечисления.ДниПосещения.ПустаяСсылка(); Иначе Попытка Строка.ДеньПосещения=Перечисления.ДниПосещения[DAY-1]; Исключение Предупреждение("Указан неправильный день недели!" ) КонецПопытки; КонецЕсли; |
|||
10
Mort
16.05.12
✎
13:00
|
Т.е. когда 0 все пучком, а когда 24 неправильный день недели? Это раз.
А два - использовать тут исключение, это, простите, ПЦ. |
|||
11
amadeus2010
16.05.12
✎
14:55
|
я так думаю можно сделать Если DAY>0 Тогда...
Кстаи вопрос по ходу дела.Как можно в обработке проведения проверить заполнено поле табличного документа или нет.Если не заполнено то выдать сообщение о ошибке. Я пытался в коде сделать следующее.Написал в модуле формы Ошибка=0 как переменная НачальнаяСтрока=2; Ошибка=0; Для ПоСтрокам = НачальнаяСтрока По КоличествоИспользуемыхСтрок +1 Цикл // Индикатор = ПоСтрокам/КоличествоИспользуемыхСтрок*100; // Если Лист.Cells(ПоСтрокам,2).Value = Неопределено Тогда Продолжить; КонецЕсли; Строка = Контрагенты.Добавить(); Строка.Контрагент= ОбщегоНазначения.ПолучитьКонтрагентаПоКодуОракл(формат(Число(ВРег(СокрЛП(Лист.Cells(ПоСтрокам,1).Value))), "ЧГ=0")); Если ПустаяСтрока(Строка.Контрагент) Тогда Предупреждение("Заполните поле Контрагент "+Строка.Контрагент+" В строке "+(ПоСтрокам-1)); КонецЕсли; Строка.Ордтейкер = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(ВРег(СокрЛП(Лист.Cells(ПоСтрокам,2).Value))); Если ПустаяСтрока(Строка.Ордтейкер) Тогда Предупреждение("Укажите имя и фамилию ордертейкера "+Строка.Ордтейкер+" В строке "+(ПоСтрокам-1)); Строка.Ордтейкер=Справочники.СотрудникиОрганизаций.ПустаяСсылка(); КонецЕсли; Строка.Департамент = Справочники.Подразделения.НайтиПоНаименованию(СокрЛП(Лист.Cells(ПоСтрокам,3).Value)); Если Строка.Департамент.Родитель.Наименование<>"Коммерческий департамент" Тогда Предупреждение("Укажите правильный департамент "+Строка.Департамент+" В строке "+(ПоСтрокам-1)); Строка.Департамент=Справочники.Подразделения.ПустаяСсылка(); КонецЕсли; DAY = ?(ЕстьНеЦифрыВСтроке(СокрЛП(Лист.Cells(ПоСтрокам,4).Value)) , 0, Число(СокрЛП(Лист.Cells(ПоСтрокам,4).Value))); Если DAY=0 Тогда Строка.ДеньПосещения=Перечисления.ДниПосещения.ПустаяСсылка(); Иначе Попытка Строка.ДеньПосещения=Перечисления.ДниПосещения[DAY-1]; Исключение Предупреждение("Указан неправильный день недели!" ); КонецПопытки; КонецЕсли; //Если ПустаяСтрока(Строка.ДеньПосещения) Тогда // Предупреждение("Не заполнено поле Дни посещения! "+Строка.ДеньПосещения+" В строке "+(ПоСтрокам-1)); // //КонецЕсли; ОбработкаПрерыванияПользователя(); КонецЦикла; и в Обработка проведения Если Ордтейкер=0 тогда Предупреждение("Не заполнено поле Ордтейкер!"); Отказ=Истина; КонецЕсли; Если Департамент=0 Тогда Предупреждение("Не заполнено поле Департамент!"); Отказ=Истина; КонецЕсли; как уже можно догадаться документ проводиться без проверки на поставленные условия |
|||
12
cViper
16.05.12
✎
15:11
|
(11)Может просто Ордтейкер!=0
|
|||
13
cViper
16.05.12
✎
15:19
|
Думаю что ордертейкер переводится как продавец.
|
|||
14
amadeus2010
16.05.12
✎
16:02
|
в модуле документа вместо (11) поставил
Строка.Ордтейкер = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(ВРег(СокрЛП(Лист.Cells(ПоСтрокам,2).Value))); Если ПустаяСтрока(Строка.Ордтейкер) Тогда Предупреждение("Укажите имя и фамилию ордертейкера "+Строка.Ордтейкер+" В строке "+(ПоСтрокам-1)); Строка.Ордтейкер=Справочники.СотрудникиОрганизаций.ПустаяСсылка(); Отказ=Истина; КонецЕсли; и обработке проведения: Если Отказ тогда Предупреждение("Не заполнены необходимые данные,документ не будет проведен!"); КонецЕсли; документ все равно проводится даже если есть незаполненные поля.Есть какая стандартная процедура проверки на незаполненные поля в табличной части документа и отказ в проведении если условие не выполняется? Что наподобие Если Строка.Ордтейкер.Пустая() тогда Предупреждение("Не заполнены необходимые данные,документ не будет проведен!"); Отказ=Истина; Возврат; КонецЕсли; |
|||
15
hhhh
16.05.12
✎
16:13
|
а в какой процедуре находится это
Отказ = Истина; ? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |