Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Расшифровка таблицы по клику в 1с 7.7 - просьба помочь (число прочтений - 9579 )
Отражение луны
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 11. Ноября 2011
Расшифровка таблицы по клику в 1с 7.7 - просьба помочь
11. Ноября 2011 :: 09:32
Печать  
Итак, вообщем конечная задача у меня такая - сделать так. чтобы расшифровка ячейки печатной таблицы запускалась по клику. Гугл сказал, что умеют это 2 компоненты - Ёксель и Таблдок. Ёксель отметаем, т.к. для задействования возможности фактически придется переписывать все алгоритмы формирования таблиц, иба компонента реализует свой класс, а не дополняет стандартный. С таблдоком лучше - поискал, сделал, все работает, но... 1Ска благополучно падает после вызова Таб.Показать(,,-1). Как результат - использовать её невозможно. Да и факт того, что обработчик события нельзя расместить в глобальнике тоже нагоняет тоску.

А просьба о помощи заключается вот в чем. Как создать свою компоненту я представляю, как получить хендл окна с таблицей - тоже.  Но как взаимодойствовать с ней после этого (получить событие onclick и вызвать определенную процедуру (а то может и сразу же расшифровку) с координатами ячейки в которую ткнули)  - мне не понятно. И может быть только бы самого события и хватило, если бы метод ЗначениеТекущейЯчейки возвращал бы правильные координаты.

Вообщем если есть у кого нибудь какие либо исходники или мануалы на тему, или же просто информация из личного опыта - все это мне оч поможет. Заранее спасибо.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Расшифровка таблицы по клику в 1с 7.7 - просьба помочь
Ответ #1 - 11. Ноября 2011 :: 09:49
Печать  
Из документации:

Цитата:
Синтаксис: ПриАктивизацииЯчейки(Таблица, Действие, ТекСтрока, ТекСтолбец, НомерВида)

Описание: Событие вызывается при любых действиях связанных с активизацией/деакивизацией ячейки таких как изменение текущей ячейки, обновление окна.


Показать(,, -1), судя по всему, вызывает обновление окна и вызов события для каждой ячейки.
Что сваливает тебя в рекурсию.
  
Наверх
 
IP записан
 
Отражение луны
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 11. Ноября 2011
Re: Расшифровка таблицы по клику в 1с 7.7 - просьба помочь
Ответ #2 - 11. Ноября 2011 :: 09:54
Печать  
Используется событие "ПриНажатииЛевойКнопки", а 1ска вешается не сразу - при повторной активации формы. ( но работает нормально при закоментированном таб.показать)Причем вылетает в ошибку приложения (венда предлагает отчет отправить).
Скорее всего ошибка связана с попыткой менеджера обратиться к уже несуществующей таблице. Но "освобождение" менеджера ничего не дает.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Расшифровка таблицы по клику в 1с 7.7 - просьба помочь
Ответ #3 - 11. Ноября 2011 :: 10:02
Печать  
Приведи код, хотя бы примерный.

PS использовать ПриОтжатииЛевойКнопки пробовал?
иногда бывает полезнее
  
Наверх
 
IP записан
 
Отражение луны
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 11. Ноября 2011
Re: Расшифровка таблицы по клику в 1с 7.7 - просьба помочь
Ответ #4 - 11. Ноября 2011 :: 10:23
Печать  
Код
Выбрать все
Процедура ОбновлениеТаблицы()
Таб.Очистить();
НомерОтображаемойСтроки=1;
ТабЗН.ВыбратьСтроки();
Пока ТабЗН.ПолучитьСтроку()=1 цикл
	Если ТабЗн.НомерСтроки/8>НомерОтображаемойСтроки тогда
		Таб.ВывестиСекцию("Отступ");
		НомерОтображаемойСтроки=НомерОтображаемойСтроки+1;
	КонецЕсли;
	Секция = Таб.ПолучитьСекцию("Строка|Информация");
	Если ТабЗн.ИмяРеквизита=Перечисление.Логика.Да тогда
		Секция.Область(1,1,1,1).ЦветФона(72, 132, 54);
		Секция.Область().ЦветРамки(72, 132, 54);
	Иначе
		Секция.Область(1,1,1,1).ЦветФона(128, 0, 0);
		Секция.Область().ЦветРамки(128, 0, 0);
	Конецесли;
	Таб.ПрисоединитьСекцию(Секция);
КонецЦикла;
Таб.ПрисоединитьСекцию("Строка|Кнопки");
Таб.ВывестиСекцию("Отступ");
Таб.ВывестиСекцию("Расшифровка");
Таб.Опции(0,0,0,0);
Таб.Защита(1);
Таб.Показать();  
КонецПроцедуры

Процедура МенеджерТаблДокПриОтжатииЛевойКнопки(Менеджер, Флаги, X, Y, ФСО, Таб)
    Перем Стр, Кол;  
    Если Менеджер.ПроверкаПопадания(X, Y, Стр, Кол) = 0 Тогда
	  Если (Стр<=Таб.ВысотаТаблицы()) И (Кол<=Таб.ШиринаТаблицы()) Тогда
		Расш = Таб.Область(Стр, Кол).Расшифровка();  
			Если ПустоеЗначение(Расш)=0 тогда ОбработкаЯчейкиТаблицы(Расш)
			Иначе Расш = Таб.Область(Стр+1, Кол).Расшифровка();
				Если ПустоеЗначение(Расш)=0 тогда ОбработкаЯчейкиТаблицы(Расш); Конецесли;
			КонецЕсли;
	  КонецЕсли;
    КонецЕсли;
КонецПроцедуры  

Процедура Открыть()
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Тестовая");  
МенеджерТаблицы=СоздатьОбъект("МенеджерТабличногоДокумента");
МенеджерТаблицы.УстановитьТаблицу(Таб, Форма);
ОбновлениеТаблицы();
КонецПроцедуры

Процедура ОбработкаЯчейкиТаблицы(ПЗначение)
Таб.Показать(,,-1);
....
Форма.ИспользоватьСлой("Слой",2);
ОткрытьФормуМодально("Обработка.Авторизация");
Форма.ИспользоватьСлой("Основной", 2);
Предупреждение("Мы дошли до конца");
КонецПроцедуры;
*Краш*  :(

 




как то так. Сама же компонента загружается при старте. немаловажно - в таком режиме работает 2 таблицы, которые почти всегда запущены одновременно. Но с первой проблем не возникает, так как нет необходимости её закрывать программно. Прочем, если даже её отрубить проблема сохраняется
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Расшифровка таблицы по клику в 1с 7.7 - просьба помочь
Ответ #5 - 11. Ноября 2011 :: 12:07
Печать  
могу предложить только такое решение:

Код
Выбрать все
Перем Таб,МенеджерТаблицы;
Перем ЗакрытьТаблицу;

Процедура ОбновлениеТаблицы()
	Таб.Очистить();
	НомерОтображаемойСтроки=1;
	//ТабЗН.ВыбратьСтроки();
	//Пока ТабЗН.ПолучитьСтроку()=1 цикл
	//	Если ТабЗн.НомерСтроки/8>НомерОтображаемойСтроки тогда
	//		Таб.ВывестиСекцию("Отступ");
	//		НомерОтображаемойСтроки=НомерОтображаемойСтроки+1;
	//	КонецЕсли;
	//	Секция = Таб.ПолучитьСекцию("Строка|Информация");
	//	Если ТабЗн.ИмяРеквизита=Перечисление.Логика.Да тогда
	//		Секция.Область(1,1,1,1).ЦветФона(72, 132, 54);
	//		Секция.Область().ЦветРамки(72, 132, 54);
	//	Иначе
	//		Секция.Область(1,1,1,1).ЦветФона(128, 0, 0);
	//		Секция.Область().ЦветРамки(128, 0, 0);
	//	Конецесли;
	//	Таб.ПрисоединитьСекцию(Секция);
	//КонецЦикла;
	Таб.ПрисоединитьСекцию("Строка|Кнопки");
	Таб.ВывестиСекцию("Отступ");
	Таб.ВывестиСекцию("Расшифровка");
	Таб.Опции(0,0,0,0);
	Таб.Защита(1);
	Таб.Показать();  
КонецПроцедуры

Процедура ПриЗакрытии()
	Если ПустоеЗначение(ЗакрытьТаблицу)=0 Тогда
		ЗакрытьТаблицу=0;
		СтатусВозврата(0);
		Таб.Показать(,,-1);
	КонецЕсли;
КонецПроцедуры

Процедура ОбработкаЯчейкиТаблицы(ПЗначение)
	ЗакрытьТаблицу=1;
	Форма.Закрыть();

	Форма.ИспользоватьСлой("Слой",2);
	//ОткрытьФормуМодально("Обработка.Авторизация");
	Форма.ИспользоватьСлой("Основной", 2);
	Предупреждение("Мы дошли до конца");
КонецПроцедуры

Процедура _МенеджерТаблДокПриОтжатииЛевойКнопки(Менеджер, Флаги, X, Y, ФСО, Таб)
	Перем Стр, Кол;  
	Если Менеджер.ПроверкаПопадания(X, Y, Стр, Кол) = 0 Тогда
		Если (Стр<=Таб.ВысотаТаблицы()) И (Кол<=Таб.ШиринаТаблицы()) Тогда
			Расш = Таб.Область(Стр, Кол).Расшифровка();  
			Если ПустоеЗначение(Расш)=0 тогда
				ОбработкаЯчейкиТаблицы(Расш)
			Иначе Расш = Таб.Область(Стр+1, Кол).Расшифровка();
				Если ПустоеЗначение(Расш)=0 тогда ОбработкаЯчейкиТаблицы(Расш); Конецесли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры  

Процедура Открыть()
	Таб=СоздатьОбъект("Таблица");
	Таб.ИсходнаяТаблица("Тестовая");  
	МенеджерТаблицы=СоздатьОбъект("МенеджерТабличногоДокумента");
	МенеджерТаблицы.УстановитьТаблицу(Таб, Форма);
	ОбновлениеТаблицы();
КонецПроцедуры
 

« Последняя редакция: 11. Ноября 2011 :: 15:12 - trad »  

1&&2&&3
Наверх
 
IP записан
 
Отражение луны
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 11. Ноября 2011
Re: Расшифровка таблицы по клику в 1с 7.7 - просьба помочь
Ответ #6 - 11. Ноября 2011 :: 12:25
Печать  
Не работает. Что оставляет некую надежду, что проблема таки не в законментированной части и как то это сделать всетаки возможно.
И на том спасибо. Продолжаю искать...
Так же буду рад альтернативным решениям, если ктото такое предложит.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Расшифровка таблицы по клику в 1с 7.7 - просьба помочь
Ответ #7 - 11. Ноября 2011 :: 15:12
Печать  
Цитата:
Что оставляет некую надежду, что проблема таки не в законментированной части
закомментированная часть это лишь для того что бы я смог у себя проверить.
там кроме этого есть дополнения - посмотри внимательнее.
  

1&&2&&3
Наверх
 
IP записан
 
Отражение луны
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 11. Ноября 2011
Re: Расшифровка таблицы по клику в 1с 7.7 - просьба помочь
Ответ #8 - 11. Ноября 2011 :: 17:22
Печать  
Пропустил, спасибо)) (заработался немног).
Вообщем разобрался как решить задачу на уровне апи венды (что позволит не шаманить лишний раз с кодом). Так что всем большое спасибо, тему можн закрыть. Если кому то вдруг понадобится пишите, выложу решение.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать