Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 фев 2025, 17:02

Программное добавление колонок в таблицу, или не могу найти путей

Автор VGreen, 15 янв 2025, 22:36

0 Пользователей и 1 гость просматривают эту тему.

VGreen

В общем дело было так... Есть документ с табличной частью (Материалы), надо без помощи рук (то есть кодом) добавить 2 колонки И написать не сложный алгоритм, который будет брать данные, внесенные в первую колонку, совершать с ними не хитрые манипуляции и показать на форме во второй. Вот тут то и возникла проблема, с элементами все хорошо, они создаются, на них вешаются обработчики событий, но к вновь созданным реквизитам получить доступ не получается.
Все развлечения проводились в событии формы ПриСозданииНаСервере, сначала пробовал добавлять в то, что можно было бы назвать табличной частью документа т.е. в Объект.Материалы методом ИзменитьРеквизиты() и можно сказать почти успешно, при определенном стечении обстоятельств новые колонки можно даже увидеть в вычислителе выражений, видны даже значения, которые вносятся через форму ручками, но путь, что бы показать на элементе данные мне не понятен (и есть ли он вообще), потому что видел я точку зрения, что реквизит должен быть таблицей значений.
КоТ такой:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

   РеквизитНДС = Новый РеквизитФормы("НДС", Новый ОписаниеТипов("СправочникСсылка.СтавкиНДС"), "Объект.Материалы");                                                 
   РеквизитНДССумма = Новый РеквизитФормы("НДССумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)), "Объект.Материалы");
                                          
   НовыеРеквизиты = Новый Массив;
   НовыеРеквизиты.Добавить(РеквизитНДС);                                             
   НовыеРеквизиты.Добавить(РеквизитНДССумма);
   
   ИзменитьРеквизиты(НовыеРеквизиты);
   
   ЭлементНДС = Элементы.Добавить("НДС", Тип("ПолеФормы"), Элементы.Материалы);
   ЭлементНДС.Вид = ВидПоляФормы.ПолеВвода;
   ЭлементНДС.ПутьКДанным = "Объект.Материалы.НДС";
   ЭлементНДС.УстановитьДействие("ПриИзменении", "ОбработчикПриИзмененииНДС");
   
   ЭлементНДССумма = Элементы.Добавить("НДССумма", Тип("ПолеФормы"), Элементы.Материалы);
   ЭлементНДССумма.Вид = ВидПоляФормы.ПолеВвода;
   ЭлементНДССумма.ПутьКДанным = "Объект.Материалы.НДССумма";

КонецПроцедуры


&НаКлиенте                                                           
Процедура ОбработчикПриИзмененииНДС (Элемент)
   
   Сообщить("Обработчик работает");   
   Элементы.Материалы.НДССумма = 10;
   
   
КонецПроцедуры



antoneus

Элементы.Материалч.НДССумма - это элемент формы. Вам же нужно положить значение в реквизит ТЧ в конкретной строке. Улавливаете разницу?

antoneus

То есть:

&НаКлиенте                                                           
Процедура ОбработчикПриИзмененииНДС (Элемент)
     
   ТекДанные = Элементы.Материалы.ТекущиеДанные;
   Если ТекДанные = Неопределено Тогда
      Возврат
   КонецЕсли;
   
   ТекДанные.НДССумма = 10   
   
КонецПроцедуры

VGreen

antoneus, Спасибо! У меня была мысль запихнуть данные в свойство элемента (подходящее для этого свойство естественно не нашлось), но сделать это через текущие данные таблицы, мне в голову не пришло. Какой интересный опыт.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск