Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Как сделать из Процедуры Метод объекта? (число прочтений - 5778 )
Roman_K
Junior Member
**
Отсутствует


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Как сделать из Процедуры Метод объекта?
14. Октября 2008 :: 05:28
Печать  
У меня есть процедура в модуле формы документа (А), назначение: печатает текущий документ. Как мне можно ее вызвать из модуля формы другого документа (В)? Ссылка на документ А в документе В есть.
  

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #1 - 14. Октября 2008 :: 05:34
Печать  
Нужно открыть форму этого документа, и обращатся к этой процедуре через контекст этой открытой формы
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #2 - 14. Октября 2008 :: 06:10
Печать  
Nick писал(а) 14. Октября 2008 :: 05:34:
Нужно открыть форму этого документа, и обращатся к этой процедуре через контекст этой открытой формы

+1
Добавлю только, что это возможно только при загруженных ВК 1С++ или TurboBL
  

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


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #3 - 14. Октября 2008 :: 06:45
Печать  
процедурно это как сделать? (и чтобы сама форма от пользователя была скрыта)
  

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #4 - 14. Октября 2008 :: 06:54
Печать  
Roman_K писал(а) 14. Октября 2008 :: 06:45:
процедурно это как сделать? (и чтобы сама форма от пользователя была скрыта)

1. Чтобы форма была скрыта от пользователя, выход только один - переносишь эту процедуру в другое место - класс 1С++, ГМ и т.д.
Иначе никак, т.к. эта процедура принадлежит модуля формы, а чтобы этот модуль заработал, нужна открытая форма.

2. Ну или штатный вариант от 1С - меняешь процедуру ПриОткрытии данного модуля, анализируешь Форма.Параметр и в зависимости от его значения, выполняешь нужный код.
очень неудобно, но все-таки можно.
  

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


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #5 - 14. Октября 2008 :: 07:16
Печать  
Биг сэнкс!
Буду использовать ...универсальный интерфейс: сделаю через ОткрытьФорму, в качестве параметра передам строку "РаспечататьДокумент". В ПриОткрытии буду анализировать параметр, печатать, возвращать нолик в СтатусВозврата.

Класс создавать не буду, потаму как еще не знаю как (я только С++ знаю, а не 1С++  Смущённый ).

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

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #6 - 14. Октября 2008 :: 07:27
Печать  
Форма документа:
Код
Выбрать все
Процедура ПриОткрытии()
	Если оЭтотДок.ПриОткрытииФормы() = 0 Тогда СтатусВозврата(0); Возврат; КонецЕсли;
....
// операторы основной программы
оЭтотДок = СоздатьОбъект("ТДокумент."+Вид());
оЭтотДок.НазначитьКонтекст(Контекст);
 



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

	Парам = Сам().Форма.Параметр;
	Если ТипЗначенияСтр(Парам)="СписокЗначений" Тогда

		Если Парам.Получить("Команда") = "ПечатьНаПринтер" Тогда
			КолЭкз = Макс(Число(Парам.Получить("КолЭкз")), 1);
			оПечатныеФормы.Печать(1, КолЭкз);
			Возврат 0;

		ИначеЕсли Парам.Получить("Команда") = "ПечатьНаЭкран" Тогда
			оПечатныеФормы.Печать(0, 1);
			Возврат 0;

		КонецЕсли;
	КонецЕсли;

	Возврат 1;
КонецФункции // ПроверитьВходныеПараметры()
 



класс ПечатныеФормы... грубо - калька стандартного механизма печатных форм, только вынесенная наружу. работает с теми же стандартными efd и ert.
  

_____________.rar ( 8 KB | Загрузки )
Наверх
IP записан
 
Roman_K
Junior Member
**
Отсутствует


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #7 - 14. Октября 2008 :: 08:14
Печать  
Ужас Хочеться рвать волосы на голове!!!
От прозы к практике:

Вызываю я из ПриОткрытии нужную мне процедуру, но вот не задача - текущий документ то отсутсвует, а формирование отчета базируется на существовании Текущего документа. Что делать?
  

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #8 - 14. Октября 2008 :: 09:49
Печать  
ключ вот тута:
Код
Выбрать все
оЭтотДок.НазначитьКонтекст(Контекст); 



модуль класса документа:
Код
Выбрать все
Процедура НазначитьКонтекст(Конт) Экспорт
	Сам().ПолучитьБазовыйКласс("ТДокумент").ЗаменитьБазовыйОбъект("Документ", Конт);
КонецПроцедуры 

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


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #9 - 14. Октября 2008 :: 09:49
Печать  
сам, помнится, когда разбирался с этим всем - чуть не повешался от собственной тупости  Ужас
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #10 - 14. Октября 2008 :: 10:18
Печать  
EugenVitla писал(а) 14. Октября 2008 :: 07:27:
Форма документа:
Код
Выбрать все
Процедура ПриОткрытии()
	Если оЭтотДок.ПриОткрытииФормы() = 0 Тогда СтатусВозврата(0); Возврат; КонецЕсли;
....
// операторы основной программы
оЭтотДок = СоздатьОбъект("ТДокумент."+Вид());
оЭтотДок.НазначитьКонтекст(Контекст);
 



Сейчас аналогичный код без изменения формы документа можно сделать с помощью Перехватчика.
Рекомендую Улыбка
Удобно, хотя в начале изучения может показаться и сложным, и неудобным.
Но тем, кто знает ООП, вполне по силам.
  

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


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #11 - 14. Октября 2008 :: 12:21
Печать  
Как не крути, а таки перехватчик....

По Перехватчику у меня уже есть вводная дока, а можно о принципах 1С++ (только не смейтесь), основная идея, в общем каркас, чтобы иметь общее представление, для начала. Было б хорошо, если есть для тех, кто уже знает С++.  Улыбка
  

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #12 - 14. Октября 2008 :: 12:28
Печать  
мне сама идея Перехватчика почему-то не по нутру. бывает такое.
а конфа уже тыщщу лет как типовой быть перестала, так что проблем с переписыванием - нуль Подмигивание
  
Наверх
IP записан
 
Roman_K
Junior Member
**
Отсутствует


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #13 - 15. Октября 2008 :: 13:26
Печать  
Вопрос относительно терминологии:
EugenVitla, когда ты говоришь "Код класса документа", то подразумеваешь Модуль документа, либо что говоришь, то и подразумеваешь? и где его искать, этот класс документа?  Улыбка
  

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: Как сделать из Процедуры Метод объекта?
Ответ #14 - 15. Октября 2008 :: 14:04
Печать  
Стандартный объект - Документ.
класс ТДокумент = ТДокумент@md : Документ {}
класс ТДокумент.ЗаявкаПокупателя = ТЗаявка@md : ТДокумент {}
(хотя сам предпочитаю классы во внешних обработках держать - мне так отлаживать удобнее)

модуль класса документа - это модуль класса ТДокумент.ЗаявкаПокупателя. ну, или ТДокумент, если другого предка не планировалось Подмигивание

ну да. обобщая - модуль класса-наследника стандартного Документа. во как =)
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать