Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Возможность вызова Шаблон в КОП для контекста форм (число прочтений - 11335 )
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #15 - 03. Июня 2008 :: 15:51
Печать  
Проблема метода ПолучитьКонтекстОкружения() в том, что класс получает контекст формы, что-то с ним делает, а форма об этом ни сном, ни духом. Причем ситуация усугубляется тем, что ПолучитьКонтекстОкружения() можно вызвать в каком-нибудь из базовых классов. Или в классе может быть вызван метод другого класса, который и вызывает ПолучитьКонтекстОкружения(). Эту цепочку можно удлиннять и комбинировать.

Таким образом, мы получаем ситуацию, когда теоретически любая форма может быть изменена в любом классе. И найти, кто же и что нам поменял, можно только глобальным контекстным поиском.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #16 - 03. Июня 2008 :: 15:56
Печать  
Вот еще ДмитрО в свое время зажог: http://itland.ru/forum//index.php?showtopic=12465
  
Наверх
www  
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #17 - 03. Июня 2008 :: 16:19
Печать  
Спасибо, fez, в голове начало что-то проявляться...
... возможные проблемы, которые я списывал на всё что угодно, вплоть до перезагрузки.
Или это от пива выпитого...  Улыбка

Вообще, я где-то читал, что "правильно" работающие классы не принимают "параметры по-умолчанию" и необходимо четко и ясно указать что, где и с кем этот класс должен делать.

Попробую изменить подход при использовании 1С++, возможно потом вам спасибо скажу  Улыбка
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #18 - 04. Июня 2008 :: 04:38
Печать  
fez писал(а) 03. Июня 2008 :: 15:51:
Проблема метода ПолучитьКонтекстОкружения() в том, что класс получает контекст формы, что-то с ним делает, а форма об этом ни сном, ни духом. Причем ситуация усугубляется тем, что ПолучитьКонтекстОкружения() можно вызвать в каком-нибудь из базовых классов. Или в классе может быть вызван метод другого класса, который и вызывает ПолучитьКонтекстОкружения(). Эту цепочку можно удлиннять и комбинировать.

Таким образом, мы получаем ситуацию, когда теоретически любая форма может быть изменена в любом классе. И найти, кто же и что нам поменял, можно только глобальным контекстным поиском.

Вставил цитату в официальную доку (2.5 и 3.0) для ПолучитьКонтекстОкружения + ссылка на пост с итланда.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #19 - 07. Июня 2008 :: 05:31
Печать  
Федор, просьба - пожалуйста, перенеси ветку в раздел "Репозитарий".
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #20 - 09. Июня 2008 :: 04:46
Печать  
Спасибо, Федор.
  

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


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #21 - 29. Июля 2008 :: 09:57
Печать  
Вчера налетел на глюк функции "Шаблон" в классе...
3 часа потратил, пока вылечил...
Заменил на использование выполняемого модуля, вроде взлетело.
Самое смешное, что работы с какими либо контекстами не происходит, вот текст модуля
Код
Выбрать все
Функция ОстатокТовара(_Товар,_Накл = "",_Поставщик = "",_Договор = "") Экспорт
   Если _Товар.Выбран() = 0 Тогда Возврат 0; КонецЕсли;

  _Формула = "[Регистр.ОстаткиТовара.СводныйОстаток(";
  _Формула = _Формула + ?(_Договор = "",",","_Договор,");
  _Формула = _Формула + ?(_Поставщик = "",",","_Поставщик.ТекущийЭлемент(),");
  _Формула = _Формула + "_Товар.ТекущийЭлемент(),";
  _Формула = _Формула + ?(_Накл = "",",","_Накл.ТекущийДокумент(),");
  _Формула = _Формула + """Кол"")]";

  Возврат Число(Шаблон(_Формула));
КонецФункции 


Пришел домой, думаю, ща быстренько тест нарисую, как Артур любит Улыбка
Хренов-дров, воспроизвести по быстрому не получилось Печаль
Похоже, что проблема возникает в результате комплекса факторов, что бы выловить, надо день потратить...
Единственное, что смог уловить - проблема снимается, если класс, в котором этот метод, создавать непосредственно в месте использования метода, в то время как в боевой конфе он создается как глобальный объект в процедуре "ПриНачалеРаботыСистемы".
Пока отложил, как будет время, попробую тест нарисовать.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #22 - 29. Июля 2008 :: 10:08
Печать  
CaBaT писал(а) 29. Июля 2008 :: 09:57:
Пришел домой, думаю, ща быстренько тест нарисую, как Артур любит Улыбка
Хренов-дров, воспроизвести по быстрому не получилось Печаль
Похоже, что проблема возникает в результате комплекса факторов, что бы выловить, надо день потратить...
Единственное, что смог уловить - проблема снимается, если класс, в котором этот метод, создавать непосредственно в месте использования метода, в то время как в боевой конфе он создается как глобальный объект в процедуре "ПриНачалеРаботыСистемы".
Пока отложил, как будет время, попробую тест нарисовать.

Вот поэтому я и люблю тесты, что при их создании многое становится ясным.
И очень часто выявляется собственная ошибка, а не ошибка АПИ Улыбка

А у тебя вполне может быть сочетание/пересечение различных переменных в различных модулях - модуль формы, модуль класса, модуль ГМ. Т.е. возможно, где-то в них есть одинаковые переменные Печаль
Т.е. неоднозначность использования Печаль
Изучай свой код, попробуй его изолировать от других модулей.
  

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


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #23 - 29. Июля 2008 :: 10:14
Печать  
что меня удивляет, так это то, что простая замена на такой код решила проблему
Код
Выбрать все
Функция ОстатокТовара(_Товар,_Накл = "",_Поставщик = "",_Договор = "") Экспорт
 _ВМОстатокТовара = СоздатьОбъект("ВыполняемыйМодуль");
 _Текст = "
 |Функция Остаток(_Товар,_Накл = """",_Поставщик = """",_Договор = """")
 | _Формула = ""[Регистр.ОстаткиТовара.СводныйОстаток("";
 | _Формула = _Формула + ?(_Договор = """","","",""_Договор,"");
 | _Формула = _Формула + ?(_Поставщик = """","","",""_Поставщик.ТекущийЭлемент(),"");
 | _Формула = _Формула + ""_Товар.ТекущийЭлемент(),"";
 | _Формула = _Формула + ?(_Накл = """","","",""_Накл.ТекущийДокумент(),"");
 | _Формула = _Формула + """"""Кол"""")]"";
 | Возврат Число(Шаблон(_Формула));
 |КонецФункции";
 _ВМОстатокТовара.УстановитьМодуль(_Текст);
 _ВМОстатокТовара.КомпилироватьМодуль();
 _ВМОстатокТовара.ВыполнитьМодуль();
 Возврат _ВМОстатокТовара.Остаток(_Товар,_Накл,_Поставщик,_Договор);
КонецФункции
 


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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #24 - 29. Июля 2008 :: 10:21
Печать  
Нет, не только, были еще какие-то баги при использовании Шаблон внутри класса Улыбка
Поэтому и пришлось родить подобную функцию
  

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


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #25 - 29. Июля 2008 :: 10:23
Печать  
ясно, короче для себя я записал, что шаблон нежелательно использовать в классах до выяснения... Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #26 - 29. Июля 2008 :: 10:29
Печать  
Давно известно, что Шаблон это функция, имеющая неявное поведение, чем и опасна Печаль
Плюс изнутри Шаблон не работают исключения, сообщения и т.п.
Я лично выложил свой код как пример для быстрого перехода на классы некоторых специализированных участков.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #27 - 29. Июля 2008 :: 10:33
Печать  
А вообще тест было бы интересно посмотреть.
Его сделать просто - все переменные в своей функции обзываешь уникально, с каким-нибудь префиксом/постфиксом, типа _Товар_5976, этим ты достигаешь отсутствия влияние внешних модулей. Соответственно меняешь код функции и проверяешь выполнение Шаблон изнутри класса.
Очень может быть, что Шаблон сработает неверно Улыбка
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможность вызова Шаблон в КОП для контекста
Ответ #28 - 29. Июля 2008 :: 10:34
Печать  
И кстати, я лично Шаблон практически не юзаю Улыбка
  

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