Переключение на Главную Страницу Страницы: 1 2 [3] 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Установка заголовка колонки МНЧ. (число прочтений - 14752 )
rassik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 30. Сентября 2007
Re: Установка заголовка колонки МНЧ.
Ответ #30 - 02. Октября 2007 :: 17:17
Печать  
Улыбка
Ждем АЛЬФа.
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Установка заголовка колонки МНЧ.
Ответ #31 - 02. Октября 2007 :: 19:13
Печать  
А я в кино был. Вот!
Проверил. Действительно падает.
Завтра буду править.
Я там еще неудачно исходники Артура залил, поэтому все равно надо будет завтра все досконально сверить и собрать новую сборку.
  

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



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Установка заголовка колонки МНЧ.
Ответ #32 - 02. Октября 2007 :: 19:16
Печать  
Цитата:
Проверил. Действительно падает.

Не падает. (только спать не посылай Улыбка)
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Установка заголовка колонки МНЧ.
Ответ #33 - 02. Октября 2007 :: 19:30
Печать  
vip писал(а) 02. Октября 2007 :: 19:16:
Цитата:
Проверил. Действительно падает.

Не падает. (только спать не посылай Улыбка)

А вот и падает!
В документе в ПриОткрытии поместил такой код:
Код
Выбрать все
	ФормаРасш = СоздатьОбъект("РасширениеФормы");
	Для инд = 0 По ФормаРасш.КоличествоАтрибутов() - 1 Цикл
		Атр = ФормаРасш.ПолучитьАтрибут(инд);
		Сообщить(""+инд+" : """+Атр.Заголовок+"""");
		Атр.Заголовок = "Реквизит №"+инд;
	КонецЦикла;
 


И в аут...
Проблема в том, что в этот момент метод pDoc->ExistWindow() возвращает, что окно уже создано (фактически формы еще нет, как мы давно знаем). А вот при попытке получить многострочную часть возвращается NULL, на который я не поставил проверку. Отсюда и падение.
  

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



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Установка заголовка колонки МНЧ.
Ответ #34 - 02. Октября 2007 :: 19:53
Печать  
Цитата:
vip писал(а) 02. Октября 2007 :: 19:16:
Цитата:
Проверил. Действительно падает.

Не падает. (только спать не посылай Улыбка)

А вот и падает!
В документе в ПриОткрытии поместил такой код:
Код
Выбрать все
	ФормаРасш = СоздатьОбъект("РасширениеФормы");
	Для инд = 0 По ФормаРасш.КоличествоАтрибутов() - 1 Цикл
		Атр = ФормаРасш.ПолучитьАтрибут(инд);
		Сообщить(""+инд+" : """+Атр.Заголовок+"""");
		Атр.Заголовок = "Реквизит №"+инд;
	КонецЦикла;
 


И в аут...
Проблема в том, что в этот момент метод pDoc->ExistWindow() возвращает, что окно уже создано (фактически формы еще нет, как мы давно знаем). А вот при попытке получить многострочную часть возвращается NULL, на который я не поставил проверку. Отсюда и падение.

Да это понятно. Даже если поставишь проверку, заголовок не изменится. Просто падения не будет.
Все равно надо в доке указать, что сработает после физического создания формы.
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Установка заголовка колонки МНЧ.
Ответ #35 - 02. Октября 2007 :: 20:02
Печать  
vip писал(а) 02. Октября 2007 :: 19:53:
Да это понятно. Даже если поставишь проверку, заголовок не изменится. Просто падения не будет.
Все равно надо в доке указать, что сработает после физического создания формы.

Угу. Все точно.
  

FormEx developer
Наверх
www  
IP записан
 
rassik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 30. Сентября 2007
Re: Установка заголовка колонки МНЧ.
Ответ #36 - 03. Октября 2007 :: 07:10
Печать  
Еще один баг.

Есть такая прцедура глоб. модуля.

Код
Выбрать все
Функция глКНОтобразитьКолонки(ИдФормы, Конт) экспорт
		Атр = СоздатьОбъект("АтрибутФормы");
	ИдРек 		= "ЗначениеКН";
	ТблНастр 	= глКНПолучитьНастройки(ИдФормы);
		ТблНастр.ВыбратьСтроки();
	Пока ТблНастр.ПолучитьСтроку() = 1 Цикл
			В		  = ТблНастр.ВидИтога;
		Формула  = "ЗначениеКН(" + Строка(ТблНастр.НомерСтроки) + ")";
		НАтр	    = 0;

		глАтрибутПоФормуле(Конт.Форма, Формула, НАтр); // !!!!! Здесь сбивается ТблНастр.НомерСтроки
																		 //  т.е. после первого вызова
																		 // ТблНастр.НомерСтроки  становится равным 6
																		// хоя по идее не должен измениться
		Если НАтр <> 0 Тогда
			Атр.УстановитьАтрибут(Конт.Форма, НАтр);
			Атр.Видимость	= глНЕ(ПустоеЗначение(ТблНастр.ВидИтога));
			Атр.Заголовок	= глКНЗаголовок(ТблНастр);
		КонецЕсли;
	КонецЦикла;
 



ТблНастр - таблица (ТЗ) с настройками параметров колонок МНЧ
каждая строка - параметры соотв колонки МНЧ
Идем по таблице, получаем параметры и устанавливаем их для соотв. колонки

Так вот обойти всю ТблНастр не удается, т.к. сбивается ТблНастр.НомерСтроки после первого вызова глАтрибутПоФормуле.

Перепробовал разные варианты процедуры. Помогает только цикл с получением строки через ПолучитьСтрокуПоНомеру, послу вызова глАтрибутПоФормуле, всеравно сбивается НомерСтроки, но я перед вызовом Атр.Видимость и т.д еще раз вызываю ПолучитьСтрокуПоНомеру, чтобы вернуться на нужную строку.

Так пока работает, но боюсь, что это не стабильное решение.
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Установка заголовка колонки МНЧ.
Ответ #37 - 03. Октября 2007 :: 07:50
Печать  
А не пробовал сделать так?
Код
Выбрать все
Функция глКНОтобразитьКолонки(ИдФормы, Конт) экспорт
     Перем ТблНастр;
     ..... 

  
Наверх
ICQ  
IP записан
 
rassik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 30. Сентября 2007
Re: Установка заголовка колонки МНЧ.
Ответ #38 - 03. Октября 2007 :: 08:01
Печать  
Что это даст?
  
Наверх
 
IP записан
 
rassik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 30. Сентября 2007
Re: Установка заголовка колонки МНЧ.
Ответ #39 - 03. Октября 2007 :: 08:03
Печать  
Без вызова глАтрибутПоФормуле обход работает нормально.
  
Наверх
 
IP записан
 
rassik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 30. Сентября 2007
Re: Установка заголовка колонки МНЧ.
Ответ #40 - 03. Октября 2007 :: 08:04
Печать  
ИМХО счетчик не должен сбиваться от вызова функции.
Это вообще очень плохо, т.к. в следующий раз может сбиться еще, что-нибудь более важное.
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Установка заголовка колонки МНЧ.
Ответ #41 - 03. Октября 2007 :: 08:21
Печать  
rassik писал(а) 03. Октября 2007 :: 08:04:
ИМХО счетчик не должен сбиваться от вызова функции.
Это вообще очень плохо, т.к. в следующий раз может сбиться еще, что-нибудь более важное.

Ничего не понял. Ты код приводи попроще, в котором суть проблемы видна.
Я вот вчера так и не понял, что возвращает у тебя глАтрибутПоФормуле - в одном вызове атрибут, в другом номер атрибута.
Дай примитивный код, в котором четко видна проблема.
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Установка заголовка колонки МНЧ.
Ответ #42 - 03. Октября 2007 :: 08:22
Печать  
1. Очень сильно подозреваю, что глКНОтобразитьКолонки() у тебя вызывается лишний раз (даже не по твоей вине), поставь Сообщить( ЧтоНибудь ) в её начало, посмотри, сколько вызовов.

2. Что это даст? Действительно, если глКНПолучитьНастройки(ИдФормы) возвращает ссылку на некую общую таблу, то "Перем" здесь не поможет, и при двойном вызове может произойти бяка.

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


ЗЫ: Используй для форматирования кода кнопку [ # ]
  
Наверх
ICQ  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Установка заголовка колонки МНЧ.
Ответ #43 - 03. Октября 2007 :: 08:27
Печать  
rassik писал(а) 03. Октября 2007 :: 08:04:
ИМХО счетчик не должен сбиваться от вызова функции.
Это вообще очень плохо, т.к. в следующий раз может сбиться еще, что-нибудь более важное.

Не должен. Плохо.
Поэтому рекомендую пройтись пошагово отладчиком и посмотреть на какой именно строке кода изменяется позиционирование в ТЗ.
  

FormEx developer
Наверх
www  
IP записан
 
rassik
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 30. Сентября 2007
Re: Установка заголовка колонки МНЧ.
Ответ #44 - 03. Октября 2007 :: 08:56
Печать  
Процедуры достаточно простые. если нужны комменты - пишите.

Коды процедур:

Код
Выбрать все
Функция глАтрибутПоФормуле(Форма, Формула, НАтр = "") экспорт
	глФормекс = СоздатьОбъект("РасширениеФормы");
	глФормекс.УстановитьФорму(Форма);
	Для Н = 0 по глФормекс.КоличествоАтрибутов() - 1 Цикл
		Рек = глФормекс.ПолучитьАтрибут(Н);
		Если СокрЛП(Рек.Формула) = Формула Тогда
			НАтр = Н;
			глФормекс = 0;
			Возврат Рек;
		КонецЕсли;
	КонецЦикла;
	глФормекс = 0;
	Возврат 0;
КонецФункции // глАтрибутМНЧПоФормуле()

Функция глКНОтобразитьКолонки(ИдФормы, Конт) экспорт
		ИдРек 		= "ЗначениеКН";
		ТблНастр 	= глКНПолучитьНастройки(ИдФормы);
		ТблНастр.ВыбратьСтроки();
	Пока ТблНастр.ПолучитьСтроку() = 1 Цикл
		    В 		= ТблНастр.ВидИтога;
		    Формула = "ЗначениеКН(" + Строка(ТблНастр.НомерСтроки) + ")";
		    НАтр	= 0;
		    глАтрибутПоФормуле(Конт.Форма, Формула, НАтр);	    // !!!!!! - ЗДЕСЬ СБОЙ
		    Если НАтр <> 0 Тогда
				 Атр.УстановитьАтрибут(Конт.Форма, НАтр);
				 Атр.Видимость	= глНЕ(ПустоеЗначение(ТблНастр.ВидИтога));
				 Атр.Заголовок	= глКНЗаголовок(ТблНастр);
		    КонецЕсли;
		 КонецЦикла;
КонецФункции // глКНОтобразитьКолонки()
 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать