|   |   | 
| 
 | Ошибка "Получение элемента по индексу для значения не определено" | ☑ | ||
|---|---|---|---|---|
| 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) да, в структуре. как вы и сказали все закоментила, и сделала сначала по частям. вроде работает.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |