Имя: Пароль:
1C
1С v8
Обработка выбора программно созданного поля
0 vlasabo
 
21.02.17
15:36
Добрый день.
задача (Таблица значений программное добавление колонок) решена, спасибо пользователям указавшим на ошибку.
На данный момент: имею заполненную таблицу значений, содержащую колонки с названиями в виде ФИО сотрудников и строки их расписания.
Программно вывожу её на форму:

МассивТипаВыбора = Новый Массив;

МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));

ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);



МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы("табличка", ОписаниеТипаВыбора, "", "ТЗН"));

    
Для Каждого Колонка Из табличка.Колонки Цикл

        МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,"табличка",Колонка.Заголовок));
    КонецЦикла;

ИзменитьРеквизиты(МассивРеквизитов);      
ТаблицаПолейВыбора = Элементы.Добавить("ТЗН", Тип("ТаблицаФормы"));
ТаблицаПолейВыбора.ПутьКДанным = "табличка";
ТаблицаПолейВыбора.Отображение = ОтображениеТаблицы.Список;


    Для Каждого Колонка Из табличка.Колонки Цикл

    НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаПолейВыбора);      
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = "табличка." + Колонка.Имя;
    НовыйЭлемент.Высота=4;
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.УстановитьДействие("ПриИзменении", "МойОбработчик_ПриИзменении");
    КонецЦикла;
ЗначениеВРеквизитФормы(табличка, "табличка");


Процедура МойОбработчикПриИзменении()
    Сообщить("Это рабоатет");
КонецПроцедуры



Так вот - это, увы, НЕ работает. Почему, куда искать и что рыть?
Поясню задачу: треба чтобы пользователь с вот этой вот выведенной таблички мог менять расписание. Для этого мне неплохо было бы узнать КУДА он ткнул, т.е. имя колонки и номер строки. (не планирую изменять данные из ТЗ на форме, понимаю что это не возможно. Всё, что нужно - получить данные, содержащиеся в ячейке, на которую ткнул пользователь)

ЗЫ: 8.3
1 vlasabo
 
21.02.17
15:38
Разница в написании МойОбработчикПриИзменении и МойОбработчик_ПриИзменении - это опечатка при копировании кода сюда, дело не в этом
2 AlvlSpb
 
21.02.17
16:34
(0) Лучше было бы всю эту задачу выполнить не программным добавлением ТЗ, а расширением. Вставили нужную ТЗ на форму в расширении и делайте с ней все что хотите.
   И, уверены, что надо ПриИзменении(), если просто "ткнул пользователь", то ОбработкаАктивизации()?
3 vlasabo
 
21.02.17
16:48
(2) ОбработкаАктивизации(), всё верно. Это я в стадии отладки что первое на ум пришло, то и воткнул.
Что есть расширение я не очень понял. Увы, знаний у меня катастрофически мало, выручает только гугл. Сделано уже много, переделывать не хочется.
Пока из того что по теме и что смог сам:
Там где добавляем колонки, на сервере:
  НовыйЭлемент.УстановитьДействие("ПриИзменении", "МойОбработчикПриИзменении");

&НаКлиенте
Процедура МойОбработчикПриИзменении(элементформы1)    
    Сообщить(элементформы1.имя);
КонецПроцедуры

т.о. получаем имя колонки, к которой обращается пользователь(она равна ФИО сотруднкиа без пробелов, что позволяет нам потом дёрнуть из регистра нужные данные).
Осталось найти к какой строке обращается пользователь, т.о. узнаем какое именно время нам надо корректировать.
4 DrShad
 
21.02.17
16:57
текущая строка и будет та к которой обращается пользователь
5 vlasabo
 
21.02.17
17:14
(4) поясни подалуйста, как к ней обратиться? Где мне взять эту текущую строку?
6 AlvlSpb
 
21.02.17
17:26
(5)
// Получаем активированную строку
НашаСтрока = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные
// Выбираем нужную ячейку
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ""+НашаСтрока.Имя+"";
Сообщение.Сообщить();
7 vlasabo
 
21.02.17
17:47
(6) у меня, видимо, к концу дня  уже мозг не соображает.
У меня сейчас после програмного вывода на форму ТЗ (на сервере) стоит строчка:
    ЭтаФорма.Элементы.ТЗН.УстановитьДействие("ПриИзменении", "МойОбработчикПриИзменении");

Дальше есть мой обработчик:
&НаКлиенте
Процедура МойОбработчикПриИзменении(элементформы1)    
    ПутьКДаннымЯчейки = МояТабличнаяЧастьВыборНаСервере(элементформы1.Имя);
    Идентификатор = элементформы1.ТекущаяСтрока;
    Сообщить(Идентификатор);
КонецПроцедуры

что в результате выдаёт мне номер строки (в принципе, я уже могу с этим работать - ответы форумчан дали пищу для гугла)
Не очень понимаю как ты предлагаешь сделать
8 vlasabo
 
21.02.17
17:51
ПутьКДаннымЯчейки = МояТабличнаяЧастьВыборНаСервере(элементформы1.Имя);
*вот эта строка не нужна, это остатки попыток сделать различными способами
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший