Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Разработка класса-наследника объекта ТаблицаЗначений (число прочтений - 215 )
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Разработка класса-наследника объекта ТаблицаЗначений
12. Августа 2024 :: 15:32
Печать  
Решил расширить функционал ТаблицыЗначений с помощью класса.

Для начала хотел изменить метод Свернуть так, чтобы можно было оставлять колонки, которые не участвуют в свертке. Знаю, что ИТЗ умеет такое, но решил попробовать сделать класс.

По идее всё просто.

Запуск класса:
Код (SQL)
Выбрать все
класс ТаблицаЗначений=РасширениеТаблицыЗначений.ert : ValueTable {} 



Т.е. он будет наследовать все методы внутреннего объекта ТаблицаЗначений (она же ValueTable).
Класс назван ТаблицаЗначений для того, чтобы в коде нигде не менять объявление переменных ТЗ.


И собственно содержимое класса


Код (PHP)
Выбрать все
Функция Сам(Конт) Возврат Конт; КонецФункции

Функция БазоваяТаблица()
	Перем ОбъектТабл;
	ОбъектТабл = Сам(Контекст).ПолучитьБазовыйКласс("ТаблицаЗначений");
	Возврат ОбъектТабл;
КонецФункции

Функция Свернуть(ГруппКолонки="",СуммКолонки="",СохранитьСтруктуру=0) Экспорт //+Al 2018-04-02 11:31:06 Переопределение стандартного метода для ТаблицыЗначений. Добавлен новый параметр СохранитьСтруктуру
	Перем ОбъектТабл,Структура_ТЗ,КакиеКолонкиЕсть;
	ОбъектТабл = БазоваяТаблица();

	Если СохранитьСтруктуру=1 Тогда
		Структура_ТЗ=СтруктураТЗ(ОбъектТабл);
	КонецЕсли;

	ОбъектТабл.GroupBy(ГруппКолонки,СуммКолонки);//Здесь используется только Англ имя метода, чтобы класс не зациклился, перехватив самого себя!!!

	Если СохранитьСтруктуру=1 Тогда
		КакиеКолонкиЕсть=","+ГруппКолонки+","+СуммКолонки+",";
		Структура_ТЗ.ВыбратьСтроки();
		Пока Структура_ТЗ.ПолучитьСтроку()=1 Цикл
			ИДКолонки	=Структура_ТЗ.ИДКолонки;
			Если Найти(КакиеКолонкиЕсть,","+ИДКолонки+",")>0 Тогда
				Продолжить;
			КонецЕсли;
			Тип			=Структура_ТЗ.Тип;
			Длина		=Структура_ТЗ.Длина;
			Точн		=Структура_ТЗ.Точн;
			Заголовок	=Структура_ТЗ.Заголовок;
			Ширина		=Структура_ТЗ.Ширина;
			ФорматКол	=Структура_ТЗ.ФорматКол;
			Положение	=Структура_ТЗ.Положение;
			ОбъектТабл.ВставитьКолонку(ИДКолонки, Структура_ТЗ.НомерСтроки, Тип, Длина, Точн, Заголовок, Ширина, ФорматКол, Положение);
		КонецЦикла;
	КонецЕсли;
КонецФункции 



Здесь только есть вызов СтруктураТЗ() - это функция прописана в глобальнике. Она возвращает ТЗ с описанием всех колонок и их параметров.

Вот, собственно, и всё. Вроде как работает. Но при выходе из 1С - Предприятие падает!

И не понятно почему. Есть какие идеи - почему падение может происходить?

  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 65
Зарегистрирован: 06. Февраля 2019
Re: Разработка класса-наследника объекта ТаблицаЗначений
Ответ #1 - 13. Августа 2024 :: 14:20
Печать  
Свернуть не должно ли быть процедурой?
Помнится кто-то уже делал подобное и были там какие-то нерешаемые проблемы.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Разработка класса-наследника объекта ТаблицаЗначений
Ответ #2 - 19. Августа 2024 :: 06:27
Печать  
ОбъектТабл = Сам(Контекст).ПолучитьБазовыйКласс("ValueTable");
  

1&&2&&3
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Разработка класса-наследника объекта ТаблицаЗначений
Ответ #3 - 19. Августа 2024 :: 11:10
Печать  
trad писал(а) 19. Августа 2024 :: 06:27:
ОбъектТабл = Сам(Контекст).ПолучитьБазовыйКласс("ValueTable");


Не помогло...
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Разработка класса-наследника объекта ТаблицаЗначений
Ответ #4 - 20. Августа 2024 :: 07:59
Печать  
На мой взгляд использовать имя штатного класса для КОП плохая идея.
Даже если тебе удастся избавится от падения, это потом может привести к неоднозначности и проблемам.
Например, получается что рс.ВыполнитьИнструкцию() или Запрос.Выгрузить() вернет ТЗ не того же класса что СоздатьОбъект("ТаблицаЗначений")
Имхо такой расклад - это источник проблем
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Разработка класса-наследника объекта ТаблицаЗначений
Ответ #5 - 20. Августа 2024 :: 08:06
Печать  
вот даже обсуждение древнее есть
https://www.1cpp.ru/forum/YaBB.pl?num=1181143124/all
  

1&&2&&3
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Разработка класса-наследника объекта ТаблицаЗначений
Ответ #6 - 20. Августа 2024 :: 08:31
Печать  
Понял. Спасибо за ссылку!
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать