|
Ошибка "Получение элемента по индексу для значения не определено" | ☑ | ||
---|---|---|---|---|
0
NepomAR
21.12.21
✎
09:57
|
Здравствуйте! Подскажите пожалуйста как исправить ошибку, первый раз с такой сталкиваюсь. Есть 2 управляемые формы,основной документ с табличной частью и доп форма для ввода значений. Вводишь значение в доп форме, в основной оно обрабатывается и записывается в колонку табличной части.
ссылки на скриншоты форм https://transfiles.ru/p9aw4 Код процедуры: Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Если Тип(ВыбранноеЗначение)=Тип("ДокументСсылка.ртЗаказ") Тогда ЗаполнениеТаблЧастиНаСервереИзЗаказаНаПроект(ВыбранноеЗначение); ИначеЕсли ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда ЗаполнитьВыделенныеСтрокиПоДаннымВыбораНаКлиенте(ВыбранноеЗначение); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьВыделенныеСтрокиПоДаннымВыбораНаКлиенте(ИсточникВыбора,ВыбранноеЗначение) МассивСтрок = ЭтаФорма.Элементы.Товары.ВыделенныеСтроки; Для Каждого СтрМассива Из МассивСтрок Цикл ТекСтрока=Объект.Товары.НайтиПоИдентификатору(СтрМассива); Если ИсточникВыбора.ВидОперации ="Расчет процентом" Тогда Если ВыбранноеЗначение.КомиссияТараТрансп = "Комиссия" Тогда СтрокаКолонки = "ЦенаКомиссии"; ИначеЕсли ВыбранноеЗначение.КомиссияТараТрансп = "Тара" Тогда СтрокаКолонки = "ЦенаТары"; ИначеЕсли ВыбранноеЗначение.КомиссияТараТрансп = "Транспорт" Тогда СтрокаКолонки = "ЦенаТранспорта"; КонецЕсли; конецЕсли; ТекСтрока[СтрокаКолонки] = Окр(ТекСтрока.ЦенаЧистая * ВыбранноеЗначение.Процент/100,2); ТекСтрока.ЦенаЧистая = ТекСтрока.Цена - ТекСтрока.ЦенаТары - ТекСтрока.ЦенаТранспорта - ТекСтрока.ЦенаКомиссии; Если ИсточникВыбора.ВидОперации ="Расчет суммой" Тогда Если ВыбранноеЗначение.КомиссияТараТрансп = "Комиссия" Тогда СтрокаКолонки1 = "ЦенаКомиссии"; ИначеЕсли ВыбранноеЗначение.КомиссияТараТрансп = "Тара" Тогда СтрокаКолонки1 = "ЦенаТары"; ИначеЕсли ВыбранноеЗначение.КомиссияТараТрансп = "Транспорт" Тогда СтрокаКолонки1 = "ЦенаТранспорта"; КонецЕсли; КонецЕсли; ТекСтрока[СтрокаКолонки1] = ВыбранноеЗначение.СуммаРасчет; ТекСтрока.ЦенаЧистая = ТекСтрока.Цена - ТекСтрока.ЦенаТары - ТекСтрока.ЦенаТранспорта - ТекСтрока.ЦенаКомиссии; ТекСтрока.Сумма = ТекСтрока.Цена * ТекСтрока.Количество; ТекСтрока.СуммаЧистая = ТекСтрока.ЦенаЧистая * ТекСтрока.Количество; Если ТекСтрока.КоличествоШт <> 0 Тогда ТекСтрока.ЦенаШт = ТекСтрока.Сумма/ТекСтрока.КоличествоШт; КонецЕсли; конецЦикла; КонецПроцедуры несколько раз проверяла все работало, сейчас начинаю опять проверять выходит ошибка "Получение элемента по индексу для значения не определено ТекСтрока[СтрокаКолонки1] = ВыбранноеЗначение.СуммаРасчет; " |
|||
1
Мультук
гуру
21.12.21
✎
10:04
|
1)
ТекСтрока=Объект.Товары.НайтиПоИдентификатору(СтрМассива); Если Значениезаполнено(ТекСтрока) Тогда //делаем Иначе Сообщить("Как так то???"); КонецЕсли; 2) Если ВыбранноеЗначение.КомиссияТараТрансп = "Комиссия" Тогда СтрокаКолонки1 = "ЦенаКомиссии"; ИначеЕсли ВыбранноеЗначение.КомиссияТараТрансп = "Тара" Тогда СтрокаКолонки1 = "ЦенаТары"; ИначеЕсли ВыбранноеЗначение.КомиссияТараТрансп = "Транспорт" Тогда СтрокаКолонки1 = "ЦенаТранспорта"; Иначе Сообщить("Произошла неведомая фигня: " + Строка(ВыбранноеЗначение.КомиссияТараТрансп)); КонецЕсли; |
|||
2
Ryzeman
21.12.21
✎
10:08
|
(0) если есть наставник, попроси научить пользоваться отладчиком
|
|||
3
NepomAR
21.12.21
✎
10:17
|
(2) уже разобралась. Спасибо.
|
|||
4
NepomAR
21.12.21
✎
10:25
|
(2) ошибка эта выскакивать перестала, и код вроде бы работает. но что то все же я упускаю так как заполнение нескольких колонок происходит не верно.
если заполняешь значения расчетом по сумме то значения в колонках сумма и цена стираются. https://transfiles.ru/p9aw4 |
|||
5
NepomAR
21.12.21
✎
10:25
|
(2) МассивСтрок = ЭтаФорма.Элементы.Товары.ВыделенныеСтроки;
Для Каждого СтрМассива Из МассивСтрок Цикл ТекСтрока=Объект.Товары.НайтиПоИдентификатору(СтрМассива); Если ВыбранноеЗначение.Комиссия = "Комиссия" Тогда СтрокаКолонки = "ЦенаКомиссии"; ИначеЕсли ВыбранноеЗначение.Комиссия = "Тара" Тогда СтрокаКолонки = "ЦенаТары"; ИначеЕсли ВыбранноеЗначение.Комиссия = "Транспорт" Тогда СтрокаКолонки = "ЦенаТранспорта"; КонецЕсли; Если ВыбранноеЗначение.ВидОперации ="Расчет процентом" Тогда ТекСтрока[СтрокаКолонки] = Окр(ТекСтрока.ЦенаЧистая * ВыбранноеЗначение.Процент/100,2); КонецЕсли; Если ВыбранноеЗначение.ВидОперации ="Расчет суммой" Тогда ТекСтрока[СтрокаКолонки] = ВыбранноеЗначение.СуммаРасчет; КонецЕсли; ТекСтрока.ЦенаЧистая = ТекСтрока.Цена - ТекСтрока.ЦенаТары - ТекСтрока.ЦенаТранспорта - ТекСтрока.ЦенаКомиссии; ТекСтрока.Сумма = ТекСтрока.Цена * ТекСтрока.Количество; ТекСтрока.СуммаЧистая = ТекСтрока.ЦенаЧистая * ТекСтрока.Количество; Если ТекСтрока.КоличествоШт <> 0 Тогда ТекСтрока.ЦенаШт = ТекСтрока.Сумма/ТекСтрока.КоличествоШт; КонецЕсли; конецЦикла; |
|||
6
Kassern
21.12.21
✎
10:31
|
(0) я дал эту конструкцию "ТекСтрока[СтрокаКолонки1] = ВыбранноеЗначение.СуммаРасчет; " не для того, чтобы потом вы в процедуре писали "Если ВыбранноеЗначение.Комиссия = "Комиссия" Тогда", а для того, чтобы в форме подбора возвращали нормальную структуру с фиксированными полями и верными ключами. В этому случае уже никакие Если/Тогда тут не нужны, заполняем поля ТЧ из структуры и пересчитываем поля по формулам.
|
|||
7
Kassern
21.12.21
✎
10:37
|
разбейте задачу на части:
1) Укажите верную структуру, где ключи совпадают с именами колонок ТЧ (там где надо 1в1 перенести) 2) Ключи структуры к которым вы обращаетесь должны быть всегда указаны, чтобы не было доп проверок на наличие свойств. 3) Разберите все случаи, которые вам нужно обработать и по каждому случаю опишите логику работы. 4) Научитесь пользоваться отладчиком, он ваш самый лучший друг и помощник в 1с. Вы всегда сможете проследить логику работы программы и значения переменных. 5) Не можете сразу решить задачу полностью, решайте частями. Вначале напишите код для 1 конкретного случая, проверьте, что все корректно отрабатывает, потом для 2ого, для 3его. (можно по отдельности). Далее оцените 3 куска кода которые у вас получились и попробуйте их объединить. |
|||
8
Kassern
21.12.21
✎
10:37
|
иногда полезно просто взять и закоментить весь код и начать с начала по пунктам.
|
|||
9
NepomAR
21.12.21
✎
10:39
|
(8) поняла вас. Спасибо
|
|||
10
Kassern
21.12.21
✎
10:42
|
(9) К примеру, в структуре вместо "Комиссия" возвращать "ЦенаКомиссии", вместо "Тара" - "ЦенаТары", тогда не нужно будет городить условия при заполнении.
|
|||
11
Kassern
21.12.21
✎
10:47
|
либо вообще возвращать Новый Структура("ЦенаКомиссии, ЦенаТары, ЦенаТранспорта, Процент, Операция",ЦенаКомиссии,ЦенаТары,ЦенаТранспорта,Процент,Операция)
Тогда еще проще при заполнении: ЗаполнитьЗначенияСвойств(ТекСтрока,СтруктураЗаполнения) Все поля одноименные будут заполнены из структуры, которая вам из формы подбора пришла. |
|||
12
NepomAR
21.12.21
✎
12:36
|
(11) Спасибо большое! все получилось !
|
|||
13
Kassern
21.12.21
✎
12:39
|
(12) в чем ошибка была разобрались?
|
|||
14
NepomAR
21.12.21
✎
12:57
|
(13) да, в структуре. как вы и сказали все закоментила, и сделала сначала по частям. вроде работает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |