8.3 Модуль объекта

1. AR18 30.01.19 16:28 Сейчас в теме
Бухгалтерия предприятия, редакция 3.0 (3.0.49.23) , 1С:Предприятие 8.3 (8.3.10.2580)
Внешняя обработка

Ребята не получается обратиться с формы объекта к экспортной процедуре которая находиться в модуле объекта, тупо ругается Метод не обнаружен

Процедура в модуле объекта называется РаботаСканПДФ()

Вот так я пытаюсь к ней обратиться
Это на форме
&НаСервере
Процедура РаспознатьНаСервере()
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	ОбработкаОбъект.РаботаСканПДФ();
КонецПроцедуры

&НаКлиенте
Процедура Распознать(Команда)
	РаспознатьНаСервере();
КонецПроцедуры;


Вот как в модуле объекта
&НаКлиенте
Процедура РаботаСканПДФ() Экспорт
*******************
*******************
******************* 
КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
13. sertak 324 30.01.19 17:01 Сейчас в теме
(9)
Перенесите
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.Фильтр = НСтр("ru = ""Текст""; en = ""Text""")+"(*.pdf)|*.pdf";
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
Если Не ДиалогОткрытияФайла.Выбрать() Тогда
Возврат;
КонецЕсли;

ФайлPDF = ДиалогОткрытияФайла.ПолноеИмяФайла;


в модуль формы, это будет выполняться &НаКлиенте.
В процедуру Процедура РаботаСканПДФ нужно передавать параметр ФайлPDF, перед процедурой не должно быть никаких ни &НаСервере, ни &НаКлиенте:
Процедура РаботаСканПДФ(ФайлPDF) Экспорт

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

&НаКлиенте
Процедура Распознать(Команда)
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.Фильтр = НСтр("ru = ""Текст""; en = ""Text""")+"(*.pdf)|*.pdf";
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
Если Не ДиалогОткрытияФайла.Выбрать() Тогда
Возврат;
КонецЕсли;

ФайлPDF = ДиалогОткрытияФайла.ПолноеИмяФайла;

РаспознатьНаСервере(ФайлPDF );
КонецПроцедуры; 
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. Xershi 1555 30.01.19 16:52 Сейчас в теме
(1) пора переходить от ОФ на УФ. Если нужен клиент переносите в общий модуль или на форму код. У вас архитектурная ошибка!
2. user633533_encantado 11 30.01.19 16:30 Сейчас в теме
В модуле объекта не должно быть клиента, там все на сервере.
Xershi; alex-l19041; +2 Ответить
3. plevakin 30.01.19 16:31 Сейчас в теме
&НаСервере
Процедура РаспознатьНаСервере()
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ОбработкаОбъект.РаботаСканПДФ();
КонецПроцедуры

&НаКлиенте
Процедура РаботаСканПДФ() Экспорт

Выделил основное
4. AR18 30.01.19 16:35 Сейчас в теме
(3)

У меня так и есть
&НаКлиенте
Процедура РаботаСканПДФ() Экспорт
Это находится в Модуле объекта
Прикрепленные файлы:
5. lefthander 30.01.19 16:37 Сейчас в теме
(4)не должно быть у такой процедуры директивы на клиенте, так как модуль объекта работает в контексте сервера.
Xershi; alex-l19041; +2 Ответить
6. plevakin 30.01.19 16:38 Сейчас в теме
(4) Имелось в виду, что с сервера нельзя вызывать клиентские методы.
Клиентские методы нужно вызывать с клиента.
8. lefthander 30.01.19 16:41 Сейчас в теме
(4)Выносите эту процедуру в общий серверный модуль и вызывайте где надо.
7. d.batovskiy 30.01.19 16:41 Сейчас в теме
Уберите с модуля объекта &НаКлиенте
9. AR18 30.01.19 16:48 Сейчас в теме
(7)
(8)

&НаКлиенте
Процедура РаботаСканПДФ() Экспорт 
		ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогОткрытияФайла.Фильтр = НСтр("ru = ""Текст""; en = ""Text""")+"(*.pdf)|*.pdf";
	ДиалогОткрытияФайла.Заголовок = "Выберите файл";
	ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
	Если Не ДиалогОткрытияФайла.Выбрать() Тогда
		Возврат;
	КонецЕсли;
	
	ФайлPDF = ДиалогОткрытияФайла.ПолноеИмяФайла;
	
	КаталогВременныхФайлов = КаталогВременныхФайлов();

	МакетУтилиты = ПолучитьМакет("pdftotext");
	Адрес = ПоместитьВоВременноеХранилище(МакетУтилиты, Новый УникальныйИдентификатор);
	ФайлУтилиты1 = КаталогВременныхФайлов + "pdftotext.exe";
    ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
	УдалитьИзВременногоХранилища(Адрес);
	ДанныеХранилища.Записать(ФайлУтилиты1);
	
	МакетУтилиты = ПолучитьМакет("hstart");
	Адрес = ПоместитьВоВременноеХранилище(МакетУтилиты, Новый УникальныйИдентификатор);
	ФайлУтилиты2 = КаталогВременныхФайлов + "hstart.exe";
    ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
	УдалитьИзВременногоХранилища(Адрес);
	ДанныеХранилища.Записать(ФайлУтилиты2);
	
	МакетУтилиты = ПолучитьМакет("xpdfrc");
	Адрес = ПоместитьВоВременноеХранилище(МакетУтилиты, Новый УникальныйИдентификатор);
	ФайлУтилиты3 = КаталогВременныхФайлов + "xpdfrc";
    ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
	УдалитьИзВременногоХранилища(Адрес);
	ДанныеХранилища.Записать(ФайлУтилиты3);
	
	ТекстКоманды = """" + КаталогВременныхФайлов + "hstart.exe"" /NOCONSOLE /WAIT ""pdftotext.exe -layout """ + ФайлPDF + """ """ + КаталогВременныхФайлов + "temp.txt""""";
    
    WshShell = Новый COMОбъект("WScript.Shell");
    WshShell.Run(ТекстКоманды, 5, 1);
	
	Текст = Новый ЧтениеТекста(КаталогВременныхФайлов+"temp.txt", КодировкаТекста.UTF8);
	Стр = Текст.ПрочитатьСтроку();
	НомерСтроки = 0;
	Пока Стр <> Неопределено Цикл 
		
		Сообщить(Стр);
		
		Стр = Текст.ПрочитатьСтроку();
		
	КонецЦикла;
	
	Текст.Закрыть();
	
	УдалитьФайлы(КаталогВременныхФайлов + "temp.txt");
	УдалитьФайлы(КаталогВременныхФайлов + "pdftotext.exe");
    УдалитьФайлы(КаталогВременныхФайлов + "hstart.exe");
	УдалитьФайлы(КаталогВременныхФайлов + "xpdfrc");
	

КонецПроцедуры
Показать



Если Ставлю &НаСервере то у меня ощиба получается

{ВнешняяОбработка.СканПДФ.МодульОбъекта(4,30)}: Тип не определен (ДиалогВыбораФайла)
ДиалогОткрытияФайла = Новый <<?>>ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); (Проверка: Сервер)
11. d.batovskiy 30.01.19 16:56 Сейчас в теме
(9)А кто модуле объекта прописывает выбор диалога файлов.

Нужно тогда полностью переделывать механизм.
12. AR18 30.01.19 16:58 Сейчас в теме
(11) [IS-QUOTE]А кто модуле объекта прописывает выбор диалога файлов.

Подскажи на пальцах как механизм должен быть?)
13. sertak 324 30.01.19 17:01 Сейчас в теме
(9)
Перенесите
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.Фильтр = НСтр("ru = ""Текст""; en = ""Text""")+"(*.pdf)|*.pdf";
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
Если Не ДиалогОткрытияФайла.Выбрать() Тогда
Возврат;
КонецЕсли;

ФайлPDF = ДиалогОткрытияФайла.ПолноеИмяФайла;


в модуль формы, это будет выполняться &НаКлиенте.
В процедуру Процедура РаботаСканПДФ нужно передавать параметр ФайлPDF, перед процедурой не должно быть никаких ни &НаСервере, ни &НаКлиенте:
Процедура РаботаСканПДФ(ФайлPDF) Экспорт

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

&НаКлиенте
Процедура Распознать(Команда)
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.Фильтр = НСтр("ru = ""Текст""; en = ""Text""")+"(*.pdf)|*.pdf";
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
Если Не ДиалогОткрытияФайла.Выбрать() Тогда
Возврат;
КонецЕсли;

ФайлPDF = ДиалогОткрытияФайла.ПолноеИмяФайла;

РаспознатьНаСервере(ФайлPDF );
КонецПроцедуры; 
Показать
14. AR18 30.01.19 17:09 Сейчас в теме
(13) все четко, спасибо большое
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот