Имя: Пароль:
1C
1С v8
Ошибка "Получение элемента по индексу для значения не определено"
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) да, в структуре. как вы и сказали все закоментила, и сделала сначала по частям. вроде работает.