|
v7: ТабличноеПоле: Вылетает 1С при исполнении метода "ПриВыбореФлажка" | ☑ | ||
---|---|---|---|---|
0
Zhuravlik
18.11.12
✎
19:49
|
Добрый вечер. Помогите с табличным полем, пожалуйста, вот код как я его создаю:
//==================================================== Процедура ФормаПриСоздании(_Форма) ТП=_Форма.СоздатьЭлементУправления("ТабличноеПоле", Форма.ТаблПоле_); ТП.ПоставщикДанных=СоздатьОбъект("ПоставщикДанныхИТ"); ТП.ПоставщикДанных.ИндексированнаяТаблица = тзПоставщикДанных; ТП.ФиксацияСлева = 1; ТП.СтильЗаголовков = 1; ТП.РежимВыделенияСтроки = 2; ТП.ЦветФонаВыделения2 = глПолучитьЦвет(231, 234, 254); тзПодвал = СоздатьОбъект("ТаблицаЗначений"); тзПодвал.НоваяСтрока(); тзПодвал.НоваяСтрока(); тзПодвал.НоваяКолонка("Флажок"); тзПодвал.УстановитьЗначение(1, "Флажок", "Выбрано: "); тзПодвал.УстановитьЗначение(2, "Флажок", тзПоставщикДанных.Итог("Флажок")); тзПодвал.НоваяКолонка("НомСтр"); тзПодвал.УстановитьЗначение(1, "НомСтр", "Всего строк: "); тзПодвал.УстановитьЗначение(2, "НомСтр", тзПоставщикДанных.КоличествоСтрок()); Для счКол=1 По тзПоставщикДанных.КоличествоКолонок() Цикл ИмяКол = тзПоставщикДанных.ИмяКолонки(счКол); Зг = ИмяКол; ТП.Колонки.Добавить(ИмяКол).Данные = ИмяКол; ТП.Колонки.Получить(ИмяКол).Заголовок = Зг; Если ИмяКол = "НомСтр" Тогда ТП.Колонки.Получить(ИмяКол).ЗнакУпорядочивания = 1; КонецЕсли; Если счКол < 3 Тогда Продолжить; КонецЕсли; тзПодвал.НоваяКолонка(ИмяКол); Итог = тзПоставщикДанных.Итог(ИмяКол); Если Итог > 0 Тогда тзПоставщикДанных.ДобавитьИндекс("_" + ИмяКол, "Флажок, " + ИмяКол, 0); зн_Имя = "Итого:"; зн = Итог; Иначе //Здесь показываю количество уникальных элементов зн_Имя = "Всего значений: "; тзПоставщикДанных.ДобавитьИндекс("_у" + ИмяКол, "Флажок, " + ИмяКол, 1); тзПоставщикДанных.ДобавитьИндекс(ИмяКол, ИмяКол, 1); зн = тзПоставщикДанных.КоличествоСтрок(ИмяКол); КонецЕсли; тзПодвал.УстановитьЗначение(1, ИмяКол, зн_Имя); тзПодвал.УстановитьЗначение(2, ИмяКол, зн); КонецЦикла; ТП.Подвал.ПоставщикДанных = СоздатьОбъект("ПоставщикДанныхТЗ"); ТП.Подвал.ПоставщикДанных.УстТаблицуЗначений(тзПодвал); ТП.Подвал.ЦветФона = глПолучитьЦвет(254, 253, 194); ТП.ОбновитьСтроки(); ТаблПоле_ПриАктивизацииКолонки(ТП); КонецПроцедуры Вот процедура, ПриВыбореФлажка, если выбираю несколько элементов - то 1С вылетает: //==================================================== Процедура ТаблПоле_ПриВыбореФлажка(ТП, НомерСтроки, Колонка, ТипРегиона, ФлагВыбора) зн = 1 - тзПоставщикДанных.ПолучитьЗначение(НомерСтроки, "Флажок"); тзПоставщикДанных.УстановитьЗначение(НомерСтроки, "Флажок", зн); ТП.ОбновитьСтроки(); ИТ_флажок = тзПоставщикДанных.Итог("Флажок"); тзПодвал.УстановитьЗначение(1, "Флажок", "Выбрано: "); тзПодвал.УстановитьЗначение(2, "Флажок", ИТ_флажок); ТП.Подвал.ОбновитьСтроки(); КонецПроцедуры |
|||
1
oslokot
18.11.12
✎
20:25
|
двойной вызов ОбновитьСтроки()
у мена тоже при этом падала |
|||
2
Zhuravlik
18.11.12
✎
20:27
|
(1) Без обновления строк подвала тоже вылетает.
|
|||
3
Zhuravlik
18.11.12
✎
20:28
|
(1) + Даже убираю вообще ОбновитьСтроки, и натыкиваю по флажкам - вылет.
|
|||
4
oslokot
18.11.12
✎
20:31
|
странно, лови отладчиком в процедуре...
другого на ум ничего не приходит п.с. у меня такая же задача - не падает правда содержимое проц ПриВыбореФлажка проще |
|||
5
Zhuravlik
18.11.12
✎
20:33
|
(4) А как вы в поставщик данных устанавливаете текущее значение флага? Мне кажется, у меня тут куда уж проще...
|
|||
6
oslokot
18.11.12
✎
20:36
|
не помню, завтра на работе посмотрю. я дома на выходных изолирован от 1с :)
|
|||
7
oslokot
18.11.12
✎
20:39
|
Завтра, я думаю, ADirks подтянется, подскажет. Он разработчик
|
|||
8
Zhuravlik
18.11.12
✎
20:41
|
Буду ждать тогда, спасибо за беспокойство. Я на отпуске, решил вот с 1С++ разобраться, но что-то это крепковатый для меня орех) И доки мало.
|
|||
9
Zhuravlik
18.11.12
✎
22:05
|
Вот, докину на всякий, просто тут у меня точно есть косяк, только как победить его не знаю, может из-за этого и вылетает?
//==================================================== Процедура ТаблПоле_ПриВыводеСтроки(ТП, ОформлениеСтроки, ДанныеСтроки, ТипРегиона) ИмяКол = "Флажок"; Попытка Если ТипРегиона = 3 Тогда ОбъектЯчейка=ОформлениеСтроки.Ячейки.Получить(ИмяКол); ТекДанные = ДанныеСтроки.Получить(ИмяКол); ОбъектЯчейка.ОтображатьТекст = 0 ; ОбъектЯчейка.ОтображатьФлажок = 1 ; ОбъектЯчейка.ЗначениеФлажка = ТекДанные; Если ТекДанные = 1 Тогда ОформлениеСтроки.ЦветФона = глПолучитьЦвет(211, 254, 217); Иначе ОформлениеСтроки.ЦветФона = -1; КонецЕсли; КонецЕсли; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры // ТаблПолеПриВыводеСтроки ОписаниеОшибки() - сообщает "Недопустимый параметр" |
|||
10
ADirks
19.11.12
✎
07:59
|
Так на чём вылетает то, не пойму? Вроде криминала нет.
И что значит "выбираю несколько элементов" ? Несколько строк в ТП выделяешь что-ли? |
|||
11
oslokot
19.11.12
✎
10:14
|
(0) Вот как у меня:
// =============================== Процедура тпСрокиПоставки_ПриВыбореФлажка(ТП, НомерСтроки, НомерКолонки, ТипРегиона) ТЗ_СрокиПоставки.ПолучитьСтрокуПоНомеру(НомерСтроки); ТЗ_СрокиПоставки.Выбор = 1 - ТЗ_СрокиПоставки.Выбор; ТП.ОбновитьСтроки(); КонецПроцедуры // тпСрокиПоставки_ПриВыбореФлажка // =============================== Процедура тпСрокиПоставки_ПриВыводеСтроки(ТП,ОформлениеСтроки,ДанныеСтроки) ОформлениеСтроки.Ячейки.Номер.ОтображатьФлажок = 1; Если ТП.ПоставщикДанных.ТаблицаЗначений.ПолучитьЗначение(ДанныеСтроки.НомерСтроки,"Выбор") = 1 Тогда ОформлениеСтроки.Ячейки.Номер.ЗначениеФлажка = 1; Иначе ОформлениеСтроки.Ячейки.Номер.ЗначениеФлажка = 0; КонецЕсли; КонецПроцедуры // тпСрокиПоставки_ПриВыводеСтроки Колонка "Выбор" невидимая, в ней хранится результат отметки (1,0) Все работает нормально, не падает. 1с++ свежий релиз (2 мес. давности) 7.7. 25 релиз |
|||
12
antoneus
19.11.12
✎
12:13
|
а чего вы УстановитьФлажок() не юзаете?
|
|||
13
Zhuravlik
19.11.12
✎
15:39
|
(10) Устанавливаю несколько флажков. Обнаружилось, когда я отлаживал и отмечал произвольные значения, несколько раз отметил - вылет, причем даже если не пользуюсь функцией ОбновитьСтроки(). Это наверное из-за того, что пользовался ПоставщикДанныхИТ, сейчас уже переписал на ПоставщикДанныхТЗ, такого вылета нет.
Еще в (9) выходила ошибка, решил ее через попытку-исключение, но это наверное не очень корректно? Не мог найти доку, как работать с типом значения "ФиксированнаяКоллекция", сделал через ж... Вот в (11): ОформлениеСтроки.Ячейки.*Номер*.ЗначениеФлажка - откуда взялся номер? Где можно посмотреть методы? (12) Просто как-то не дошел еще до него. ТП только начинаю пользоваться, не знаю еще даже как его применять. |
|||
14
oslokot
19.11.12
✎
16:07
|
(13) не-не, "Номер" это имя колонки в которой у меня отображается флажок
|
|||
15
ADirks
19.11.12
✎
17:28
|
Фиксированная коллекция - это коллекция, к элементам которой можно обращаться как по индексу, так и по имени. Например
ДанныеСтроки.Получить("Флажок"); ДанныеСтроки.Получить(0); ДанныеСтроки.Флажок; //вот это по имени То же самое с оформлением ячейки. Также у ФК есть полезный метод .Индес(<Имя>) Например можно написать так Если ОформлениеСтроки.Ячейки.Индекс(ИмяКол) <> -1 Тогда Яч = ОформлениеСтроки.Ячейки.Получить(ИмяКол); ... КонецЕсли; На какой строке из (9) ошибка вылетала? |
|||
16
Zhuravlik
20.11.12
✎
14:18
|
Извините за молчание, отвлекался на другое.
(15) ОбъектЯчейка=ОформлениеСтроки.Ячейки.Получить(ИмяКол); Сейчас сделаю как в (11) |
|||
17
Ёпрст
20.11.12
✎
14:20
|
(16) 1cpp и формекс какой версии хоть ?
|
|||
18
Zhuravlik
20.11.12
✎
14:22
|
(11) все выводит, но все-равно есть ошибка
"Поле агрегатного объекта не обнаружено (Номер)", я так понимаю, это потому что при выводе строки проходится по всем колонкам, я просто не могу найти методы, как мне задать условие, чтобы только определенную колонку обрабатывал? (17) Только недавно все обновлял 1С++ - 3.2.3.20 Formex - 2.05.108 |
|||
19
Zhuravlik
20.11.12
✎
14:24
|
(11) Тьфу, дурак))) "Номер", я не сразу понял.
|
|||
20
Zhuravlik
20.11.12
✎
14:26
|
(11) Заменил из вашего примера название колонки "номер" на свой - "флажок", все-равно ошибка
ОформлениеСтроки.Ячейки.Флажок.ОтображатьФлажок = 1; {Обработка.АДМ_ВыборЗначенияИзМатрицы.Форма.Модуль(174)}: Поле агрегатного объекта не обнаружено (Флажок) |
|||
21
Zhuravlik
20.11.12
✎
14:29
|
Если ОформлениеСтроки.Ячейки.Индекс("Флажок") <> -1 Тогда
ОформлениеСтроки.Ячейки.Флажок.ОтображатьФлажок = 1; Если ТП.ПоставщикДанных.ТаблицаЗначений.ПолучитьЗначение(ДанныеСтроки.НомерСтроки,"Флажок") = 1 Тогда ОформлениеСтроки.Ячейки.Флажок.ЗначениеФлажка = 1; Иначе ОформлениеСтроки.Ячейки.Флажок.ЗначениеФлажка = 0; КонецЕсли; КонецЕсли; (11), (15) - спасибо) Долго догонял. |
|||
22
Zhuravlik
20.11.12
✎
14:42
|
Окончательный вариант такой:
Если ОформлениеСтроки.Ячейки.Индекс("Флажок") <> -1 Тогда фл = ТП.ПоставщикДанных.ТаблицаЗначений.ПолучитьЗначение(ДанныеСтроки.НомерСтроки,"Флажок"); Яч = ОформлениеСтроки.Ячейки.Флажок; ЯЧ.ОтображатьТекст = 0; Яч.УстановитьФлажок(фл); ОформлениеСтроки.ЦветФона = ?(фл = 1,глПолучитьЦвет(211, 254, 217), -1); КонецЕсли; |
|||
23
antoneus
20.11.12
✎
14:50
|
(22) фл = ДанныеСтроки.Флажок;
проще надо быть) |
|||
24
Zhuravlik
20.11.12
✎
14:52
|
(23) Учел :)
А не подскажете, как мне узнать текущую колонку табличного поля? |
|||
25
Zhuravlik
20.11.12
✎
14:53
|
(24) Все, понял...
|
|||
26
antoneus
20.11.12
✎
14:54
|
ТП.ТекущаяКолонка (атрибут, не метод).
возвращает тип КолонкаТабличногоПоля |
|||
27
Zhuravlik
20.11.12
✎
15:16
|
Вылетало из-за моего г****кода в (9), сейчас переписал с ИТЗ, с учетом изменений в (22) все работает отлично.
Спасибо всем за помощь и советы) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |