Переключение на Главную Страницу Страницы: 1 [2] 3 4 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите. Как сделать правильно? (число прочтений - 17031 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #15 - 18. Апреля 2008 :: 11:53
Печать  
kiruha писал(а) 18. Апреля 2008 :: 11:38:
Уже напарывался
http://www.1cpp.ru/forum/YaBB.pl?num=1208158731
Код
Выбрать все
Функция Создать(Конт, ЭлементДиалога) Экспорт  

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

Возврат ТаблПоле;
КонецФункции   



Примерно про это я говорил в 3-м посте
Но, мне показалось, что это как-то некрасиво выглядит.
Т.е. если я захочу в своей обработке добавить колонку к ТП я должен буду написать:
Код
Выбрать все
тпНаФорме=СоздатьОбъект("ТПЗапросТЗ");
ЕщёОдноТП=тпНаФорметпНаФорме.Создать("тпНаФорме", Контекст);
НоваяКолонка=ЕщёОдноТП.Колонки.Добавить() 


и в классе обрабатывать, добавив глобальную переменную ТаблПоле:
Код
Выбрать все
НоваяКолонка=ТаблПоле.Колонки.Добавить() 



другого выхода нет?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Помогите. Как сделать правильно?
Ответ #16 - 18. Апреля 2008 :: 12:02
Печать  
Не понял насчет обрабатывать в классе.
Работает без обработки в классе.
Достаточно только
Код
Выбрать все
НоваяКолонка=ЕщёОдноТП.Колонки.Добавить()
 


  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #17 - 18. Апреля 2008 :: 12:02
Печать  
А кто мешает выполнить замену базового класса через ЗаменитьБазовыйОбъект ?
Если уж другие вариант не проходят, кстати, их еще нужно проанализировать, неужели простые варианты исчерпаны?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #18 - 18. Апреля 2008 :: 12:05
Печать  
kiruha писал(а) 18. Апреля 2008 :: 12:02:
Не понял насчет обрабатывать в классе.
Работает без обработки в классе.
Достаточно только
Код
Выбрать все
НоваяКолонка=ЕщёОдноТП.Колонки.Добавить()
 



В классе есть процедура:
Код
Выбрать все
Процедура СоздатьКолонкиПоИсточнику(тзСсылка, фИзменениеРазмера=1, фНомерСтроки=0) Экспорт
	Перем Заголовок, Ширина, Положение;
	Если фНомерСтроки=1 Тогда
		НоваяКолонка=ТаблПоле.Колонки.Добавить("НомерСтроки"); ///ВОТ ТУТ ХОТЕЛ САМ()
		НоваяКолонка.Заголовок="№ строки";
		НоваяКолонка.Данные="НомерСтроки";
		НоваяКолонка.Ширина=30;
		НоваяКолонка.ИзменениеРазмера=фИзменениеРазмера;
	КонецЕсли;
	Для ъ=1 По тзСсылка.КоличествоКолонок() Цикл
		идКолонки=тзСсылка.ПолучитьПараметрыКолонки(ъ,,,, Заголовок, Ширина,, Положение);
		Если тзСсылка.ВидимостьКолонки(идКолонки)=0 Тогда Продолжить; КонецЕсли;
		НоваяКолонка=ТаблПоле.Колонки.Добавить(идКолонки); //И ТУТ ТОЖЕ ХОТЕЛ САМ()
		НоваяКолонка.Заголовок=Заголовок;
		НоваяКолонка.Данные=идКолонки;
		НоваяКолонка.ГоризонтальноеВыравнивание=Положение;
		НоваяКолонка.Ширина=?(Ширина>0, Ширина, 15)*6.2;
		НоваяКолонка.ИзменениеРазмера=фИзменениеРазмера;
	КонецЦикла;
КонецПроцедуры 


ну и при выполнении и отображении хочу, чтобы сразу на форму падало нормальное ТП, передав только текст запроса:
Код
Выбрать все
Функция ВыполнитьИОтобразить(ТекстЗапроса, флОтладка=0) Экспорт
	тзИсточник=Сам().Выполнить(ТекстЗапроса, флОтладка);
	Сам().ПоставщикДанных = "";
	//НоваяКолонка=_БазаТП.Колонки.Добавить("Первая");
	Сам().СоздатьКолонкиПоИсточнику(тзИсточник,1,1);
	Поставщик=СоздатьОбъект("ПоставщикДанныхТЗ");
	Поставщик.УстТаблицуЗначений(тзИсточник);
	Сам().ПоставщикДанных = Поставщик;

	//Сам().ОбновитьСтроки();
	Возврат тзИсточник;
КонецФункции// ВыполнитьИОтобразить 

  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Помогите. Как сделать правильно?
Ответ #19 - 18. Апреля 2008 :: 12:09
Печать  
В СоздатьКолонкиПоИсточнику
Код
Выбрать все
Этот=Сам(Контекст);
ТекБазовыйКласс=Этот.ПолучитьБазовыйКласс();
ТекБазовыйКласс.Колонки.Добавить()
 

  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #20 - 18. Апреля 2008 :: 12:11
Печать  
artbear писал(а) 18. Апреля 2008 :: 12:02:
А кто мешает выполнить замену базового класса через ЗаменитьБазовыйОбъект ?
Если уж другие вариант не проходят, кстати, их еще нужно проанализировать, неужели простые варианты исчерпаны?

А можешь поподробнее для тугодумов?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #21 - 18. Апреля 2008 :: 12:14
Печать  
kiruha писал(а) 18. Апреля 2008 :: 12:09:
В СоздатьКолонкиПоИсточнику
Код
Выбрать все
Этот=Сам(Контекст);
ТекБазовыйКласс=Этот.ПолучитьБазовыйКласс();
ТекБазовыйКласс.Колонки.Добавить()
 


Пробовал с самого начала:
Код
Выбрать все
Перем _БазаТП;
Процедура Конструктор()
	_БазаТП = Этот(Контекст).ПолучитьБазовыйКласс("ТабличноеПоле");
КонецПроцедуры // Конструктор 


и в проц-ре "СоздатьКолонкиПоИсточнику":
Код
Выбрать все
НоваяКолонка=_БазаТП.Колонки.Добавить("НомерСтроки"); 


  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Помогите. Как сделать правильно?
Ответ #22 - 18. Апреля 2008 :: 12:23
Печать  
_БазаТП должна быть Экспорт ,
или экземпляр класса должен быть определен в вызыв форме в секции перем
или _БазаТП должна быть определена в момент создания колонок -
без этого она не сохранится
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #23 - 18. Апреля 2008 :: 12:38
Печать  
Либо я куда-то не туда поехал, либо мне вообще за руль садиться нельзя.
В классе в процедуре "ВыполнитьИОтобразить" пишу:
Код
Выбрать все
тзИсточник=Сам().Выполнить(ТекстЗапроса, флОтладка);
	Сам().ПоставщикДанных = "";
	НоваяКолонка=Сам().ПолучитьБазовыйКласс().Колонки.Добавить("Первая"); 


Всё то же самое  Плачущий
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #24 - 18. Апреля 2008 :: 13:00
Печать  
Покажи описание класса в прм-файле
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Помогите. Как сделать правильно?
Ответ #25 - 18. Апреля 2008 :: 13:01
Печать  
Ну, я подожду, когда тебе захочется ответить на мой вопрос.
Впрочем, не особо настаиваю, я же понимаю фан от найденного самостоятельно решения. Подмигивание
  

De quelle planète es-tu?
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #26 - 18. Апреля 2008 :: 13:08
Печать  
artbear писал(а) 18. Апреля 2008 :: 13:00:
Покажи описание класса в прм-файле

Цитата:
class ТПЗапросТЗ = #Классы\ТПЗапросТЗ.ert : ТабличноеПоле
{};
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Помогите. Как сделать правильно?
Ответ #27 - 18. Апреля 2008 :: 13:09
Печать  
Код
Выбрать все
Функция Сам(Конт) Возврат Конт; КонецФункции
Процедура СоздатьКолонкуТП(идКолонки)   Экспорт

	    НоваяКолонка=Сам(Контекст).Колонки.Добавить(идКолонки);
		НоваяКолонка.Заголовок=идКолонки;
КонецПроцедуры  



Проверил - прекрасно отрабатывает и без базового класса  Озадачен
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #28 - 18. Апреля 2008 :: 13:11
Печать  
kms писал(а) 18. Апреля 2008 :: 13:01:
Ну, я подожду, когда тебе захочется ответить на мой вопрос.
Впрочем, не особо настаиваю, я же понимаю фан от найденного самостоятельно решения. Подмигивание

Если ты про это:
Цитата:
Ты пока не ответил (тип значения).

То вот:
Цитата:
типзначенияСтр(Колонки) = ""
типЗначенияСтр(_БазаТП.Колонки) = ""
типЗначенияСтр(_БазаТП) = "ТабличноеПоле"
ТипЗначенияСтр(Сам()) = "ТПЗапросТЗ"
ТипЗначенияСтр(Сам().Колонки) = ""

Или опять не про это? Ты если что - тычь, не стесняйся. Я не прикидываюсь, что не понимаю.  Смущённый

Найденное самостоятельное решение изначально показалось мне явно беспонтовым, поэтому и пришёл спрашивать знающих людей о нормальном решении.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите. Как сделать правильно?
Ответ #29 - 18. Апреля 2008 :: 13:11
Печать  
А теперь список всех Переменных класса.
Всю секцию до первой функции Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 5
ОтправитьПечать