Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ИсходнаяТаблица() и вылет 1С (число прочтений - 3993 )
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
ИсходнаяТаблица() и вылет 1С
18. Февраля 2014 :: 14:09
Печать  
Есть некий внешний КЛАСС.ERT, в нем 2 печатные формы.

В одной из печатных форм есть строка, в которой у ячеек
установлен признак "Положение => Ориентация => 90 градусов"

Если такую форму подключать с параметром "путь"

[code]

// ВНУТРИ МЕТОДА ТОГО ЖЕ КЛАССА, ИЗ-ВНЕ - не знаю, не пробовал...

Таб2=СоздатьОбъект("Таблица");
Таб2.ИсходнаяТаблица("ПечатнаяФормаВКлассе","C:\asdgbhj\askdgb.ert");

[/code]

то 1С вылетает с ошибкой (см.вложение)

Я не знаю (времени тестировать все варианты не было)
- влияет количество печатных форм или нет
- влияет класс ли это или просто обработка...

Последовательность печатных форм
или последовательность вызова метода для этих форм
роли не играет.

Всегда спотыкается на той, где есть поворот 90%

Подтвердите, что это баг, плз.
Когда можно ждать исправления.

Версия 1С++ 3.2.4.1
Версия FormEx 2.0.5.109


  

formex_error.JPG ( 28 KB | Загрузки )
formex_error.JPG
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ИсходнаяТаблица() и вылет 1С
Ответ #1 - 19. Февраля 2014 :: 05:29
Печать  
А имя таблицы в классе (в обработке твоей) именно такое ?
"ПечатнаяФормаВКлассе" ?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ИсходнаяТаблица() и вылет 1С
Ответ #2 - 19. Февраля 2014 :: 06:14
Печать  
(0) так сделай тестовый внешний отчет который вызывает другую форму из другого ert.
Тогда этот тесто можно будет проверить.
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: ИсходнаяТаблица() и вылет 1С
Ответ #3 - 19. Февраля 2014 :: 16:37
Печать  
Собственно : ВСЁ, С ТАБЛИЦАМИ - ВО ВЛОЖЕНИИ

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



тело обработки, вызывающий этот метод (и "глюк" на таблице с ориентацией):
Код
Выбрать все
Процедура Сформировать()

	Класс = СоздатьОбъект("Класс");

	// без наворотов, предполагаем что класс внешний
	// если в составе МД - нужно (ессно) поправить согл.документации

	сПутьККлассу= Класс.ПолучитьПуть();

	--
	// ТаблицаСОриентациейВнутриКласса = расположена в классе
	// Formex вызывает ошибку (что на скрине)
	// и далее (после нажатия кнопки ОК ошибки) = 1С зависает намертво
	//
	// ПРИ ЭТОМ НЕ ВАЖНО ГДЕ РАСПОЛОЖЕН 'ИсходнаяТаблица()'
	// = в обработке
	// = в классе
	// Глюк будет в любом случае.
	--


//глюк = вызываем FormEx в контексте класса:
	Таб2 = Класс.ПолучитьТаблицу("ТаблицаСОриентациейВнутриКласса",сПутьККлассу);

//тоже глюк = вызываем FormEx в контексте обработки:
	Таб66=СоздатьОбъект("Таблица");
	Таб66.ИсходнаяТаблица("ТаблицаСОриентациейВнутриКласса",сПутьККлассу);


КонецПроцедуры
 

  

FormExError.zip ( 16 KB | Загрузки )
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ИсходнаяТаблица() и вылет 1С
Ответ #4 - 20. Февраля 2014 :: 09:35
Печать  
Вообще-то косвенно про этот "глюк" написано здесь:
http://www.1cpp.ru/docum/icpp/html/classes.html#id36

А так, решение проблемы -  примитив:
Код
Выбрать все
в классе:
Функция		ПолучитьТаблицу(Таб,сИмяТаблицы,сПутьКШаблону) Экспорт
	//Таб=СоздатьОбъект("Таблица");
	Таб.ИсходнаяТаблица(Таб,сИмяТаблицы,сПутьКШаблону);
	возврат Таб;
КонецФункции

в обработке
Сообщить("СЕЙЧАС усё ХОРОШО");
	Таб2 = Класс.ПолучитьТаблицу(СоздатьОбъект("Таблица"),сИмяТаблицы,сПутьКМакету); 




  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: ИсходнаяТаблица() и вылет 1С
Ответ #5 - 22. Февраля 2014 :: 09:19
Печать  
1) Если говорить об этом:


Eprst писал(а) 20. Февраля 2014 :: 09:35:
Вообще-то косвенно про этот "глюк" написано здесь:
http://www.1cpp.ru/docum/icpp/html/classes.html#id36



В выложенных мной примерах:
1) в обработке: переменная "Класс" не общая - она локальная в "Сформировать()"
2) в классе (метод "ПолучитьТаблицу"): переменная "Таб" опять же - локальная в методе

А значит - контекст класса (Таб от FormEx-а) нигде не сохраняется в атрибуте класса
(о чем говорит ATTENTION документации).

Или я не так и не то понял?
В чем СУТЬ "коссвенного описания" этого "глюка"?

Можно подробнее - дабы не наступать на грабли.

Моё предположение:

Я так понял что глюк появляется тогда (и только тогда), когда FormEx
не имеет возможности получить "КОНТЕКСТ ФОРМЫ"
от имени которой создается печатная форма.

И именно об этом в документации - ничего не сказано.

НО: этот глюк проявляется именно из-за ОРИЕНТАЦИИ текста в шаблоне печаной формы.
ВЕДЬ: шаблон БЕЗ ориентации - отрабатывает нормально (независимо от того где и как создана ТАБ)!!!
И при чем здесь "контекст создания переменной" - тогда совсем не понятно....


2) Решение типа "передать ТАБ в качестве параметра в метод класса"

- вполне понятно и применимо для цели "обойти глюк".

НО моя конечная цель - другая:
В моей конкретной задаче (выложенный глюк эту задачу не иллюстрирует)
я хочу создавать ТАБ не в обработке, а в классе:
возвращение "Таб" вовсе не предусмотрено (обработка ничего не знает о переменной ТАБ,
и более того - даже не будет знать об имени макета и пути к нему)
,
а возвращаться будет - РЕЗУЛЬТАТ работы над ТАБ
- после анализа печатной формы внутри метода класса
(и в обработке "Сформировать()" - сам ТАБ вовсе не нужен).

У меня видится такое решение (более универсально):

- передавать в метод класса "Контекст" обработки как параметр
- создавать "Таб" через "ВыполняемыйМодуль" в рамках этого контекста


3) От уважаемых гуру и уважаемого АЛьФ-а интересует ответ:

1) в чем СУТЬ ЭТОГО ГЛЮКА - чтобы не наступать на грабли
   - прав ли я в своем предположении в отношении "FormEx не может получить доступ к контексту формы"
   - сомневаюсь: так как не понятна зависимость "контекст формы = ориентация текста"

2) поправить документацию (чтобы было не "коссвенно" а явно
- телепатов ведь нет, а вдумываться, когда нужно "срочно работать" - не всегда есть возможность)
например, здесь: http://1cpp.ru/docum/icpp/html/SettingsManager.html
там где описано "EnableTableSourceTable / ТаблицаИсходнаяТаблица"
или еще где-нибудь: но явно.

3) и/или поправить глюк компоненты (хотя я понимаю - это быстрее всего просто не реальное желание  Плачущий)

ЗАДАЧА НЕ ОБОЙТИ ГЛЮК А РАЗОБРАТЬСЯ С ЕГО ПРИРОДОЙ ЧТОБЫ
1) НЕ НАСТУПАТЬ НА ГРАБЛИ
2) ОПИСАТЬ ЕГО ЯВНО В ДОКУМЕНТАЦИИ

« Последняя редакция: 22. Февраля 2014 :: 12:56 - kos »  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ИсходнаяТаблица() и вылет 1С
Ответ #6 - 24. Февраля 2014 :: 05:00
Печать  
глюк в этом
Код
Выбрать все
Предупреждение: нельзя сохранять контекст класса в его атрибуте 



у тебя аналогично - ты создаешь Таб в классе и кидаешь её наружу, не как атрибут класса, а как "самостоятельный" объект.

Если бы использовал потом как Таб = ИмяКласса.Таб; то проблем, надеюсь не было бы..
имхо.

ЗЫ: можно и так сделать, проблема исчезнет (объявить Таб атрибутом класса):

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

в поделке
	Таб = Класс.ПолучитьТаблицу(сПутьКШаблону,сПутьКМакету);
    Таб.Вывести();
    Таб.Показать(); 



« Последняя редакция: 24. Февраля 2014 :: 14:02 - Eprst »  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: ИсходнаяТаблица() и вылет 1С
Ответ #7 - 25. Февраля 2014 :: 19:57
Печать  
Eprst писал(а) 24. Февраля 2014 :: 05:00:
глюк в этом
Код
Выбрать все
Предупреждение: нельзя сохранять контекст класса в его атрибуте 



у тебя аналогично ... <skip>


Ничего не понятно. Ничего не убедительно.

Оставил Ваш пример без измененийвложил ЕГО ЖЕ вместе с моими таблицми - во вложении)

ГЛЮК ВСЁ ТОТ ЖЕ!!!!! (Вы его не увидели - т.к. у Вас ошибка в примере - см.ниже)

Уверен что это 100% баг FormEx:

метод "ИсходнаяТаблица" имеет БАГ, ОПИСАННЫЙ В ПЕРВОМ ПОСТЕ
для случая когда:
1) макет таблицы расположен ВНУТРИ КЛАССА
2) в макете есть ячейки с ориентацией текста
3) (наверное) метод "ИсходнаяТаблица()" вызывается с параметром "путь"
4) вызов метода формекса "завернут" внутрь публичного метода того же класса
(в примере: "ПолучитьТаблицу()")

Такое поведение ТОЛЬКО если есть ориентация текста в макете
и если этот макет расположен в САМОМ классе.

все остальные случаи - рабочие (вне зависимости от контекстов создания ТАБ)

Контексты создания переменной ТАБ
не играют никакой рояли в данной проблеме.

ПРОШУ:
1) либо исправить баг
2) либо описать его явно в документации (например, здесь: http://1cpp.ru/docum/icpp/html/SettingsManager.html)

Ваш пример (в моем вложении) - абсолютно наглядный.
Прошу подключить класс и проверить.

ПИСИ. В вашем примере ОШИБКА !!!!!
(см.предыдущий пост http://www.1cpp.ru/forum/YaBB.pl?num=1392732561/0#6)  
Поэтому-то Вы бага и не увидели:

Код
Выбрать все
в  классе

вместо
	Таб.ИсходнаяТаблица(Таб,сИмяТаблицы,сПутьКШаблону);
нужно
	Таб.ИсходнаяТаблица(сИмяТаблицы,сПутьКШаблону);

 



  

FormExError2.zip ( 16 KB | Загрузки )
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ИсходнаяТаблица() и вылет 1С
Ответ #8 - 26. Февраля 2014 :: 04:52
Печать  
Ну и забей болт тогда, используй как в  #4 посте. Врят ли кто сейчас будет править 1cpp, а кж тем более, АЛьФ формекс свой..
Все на снеговике ужо Печаль
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ИсходнаяТаблица() и вылет 1С
Ответ #9 - 15. Марта 2014 :: 12:49
Печать  
Eprst писал(а) 26. Февраля 2014 :: 04:52:
Ну и забей болт тогда, используй как в  #4 посте. Врят ли кто сейчас будет править 1cpp, а кж тем более, АЛьФ формекс свой..
Все на снеговике ужо Печаль


Да, это так. У меня после последней переустановки системы сейчас на домашнем компе даже С++ нет.
  

FormEx developer
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать