Обработка не запускается из справочника "Внешние обработки"

1. Seraph6 10.02.20 11:06 Сейчас в теме
Речь идет про обработку от разработчика Клеверенс, для работы с их приложением для ТСД Mobile SMARTS Склад 15.

Суть проблемы в теме сообщения.
При этом обработка нормально запускается через меню "Файл - Открыть".
Но после загрузки ее в справочник внешних обработок и при попытке запустить оттуда - как будто мелькает интерфейс на долю секунды и все заканчивается.
Кнопка в меню, которая призвана запускать эту же обработку, тоже не работает, выдает ошибку:
{ОбщийМодуль.СоединенияИБКлиент.Модуль(143)}: Значение не является значением объектного типа (Открыть)
ВнешниеОбработки.Создать(ИмяФайлаОбработки).ПолучитьФорму().Открыть();

Нюанс в том, что одна из предыдущих версий той же самой обработки (полугодичной давности) прекрасно отрабатывает и из справочника, и по кнопке, и вообще любым способом.

Что могли поломать разработчики и можно ли с этим бороться на клиентской стороне?
Сами разработчики пока посоветовали только открывать ее через "Файл - Открыть", что весьма неудобно.

P.S. Конфигурация УПП 1.3.132.2, обычное приложение.
По теме из базы знаний
Найденные решения
13. Seraph6 11.02.20 10:32 Сейчас в теме
Задачу решил. Помогло поменять в свойствах обработки основную форму с "ГлавнаяФорма" на "ОФ_ГлавнаяФорма" (т.е. принудительно сразу запускать вариант для обычного режима).
Буду благодарен, если кто-нибудь объяснит, почему через "Файл - Открыть" оно переключалось на комплект форм "ОФ" самостоятельно.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 9 10.02.20 11:22 Сейчас в теме
(1) Видимо не работает ПолучитьФорму()

ВнешняяОбработка (ExternalDataProcessor)
ПолучитьФорму (GetForm)
Синтаксис:
ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>)
Параметры:
<Форма> (необязательный)
Тип: Строка, ОбъектМетаданных: Форма .
Имя формы, как оно задано в конфигураторе, или объект описания метаданного требуемой формы. Если параметр не указан, то используется основная форма, заданная в конфигураторе.
..............
Возвращаемое значение:
Тип: Форма, ФормаКлиентскогоПриложения, Неопределено.
Неопределено - если в обработчике ПриСозданииНаСервере установлен признак отказа от создания формы.

Если Через файл - открыть обработка открывается, значит основная форма указана. Следует, что ПриСозданииНаСервере где то Отказ = истина.

Если есть желание - ищите где это происходит, либо ждите официального исправления
3. Seraph6 10.02.20 12:07 Сейчас в теме
(2) Вы правы, ПолучитьФорму() возвращает "Неопределено".
Но все, что есть в процедуре основной формы обработки - это вот этот код:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	#Если НЕ ТолстыйКлиентОбычноеПриложение Тогда
		ПолноеИмяОбъекта = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя(); 
	#КонецЕсли

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

Да и он, похоже, не отрабатывает, т.к. в моем случае именно ТолстыйКлиентОбычноеПриложение.
5. dandykry 9 10.02.20 12:28 Сейчас в теме
(3)&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Вставить содержимое обработчика.
КонецПроцедуры

Может тут? Если Интерфейс успевает мигнуть, значит форма создалась и попыталась открыться
7. Seraph6 10.02.20 12:30 Сейчас в теме
(5) Не нашел. По всему коду главной формы переменная Отказ встречается трижды. Два раза - в определениях процедур ПриСозданииНаСервере и ПриОткрытии. А третий раз вот тут:
&НаКлиенте
Процедура ПерезапуститьОбработку(Команда)
	Отказ = Ложь;
	ПриОткрытии(Отказ);	
КонецПроцедуры

тоже никакого криминала.
9. dandykry 9 10.02.20 12:38 Сейчас в теме
(7)
Во всех 3х формах был поиск?

Можно путем добавления "Сообщить("Дошло до шага №123...")"; Вычислить где затык.

Можно обрамить Попытка Исключение ОписаниеОшибки() КонецПопытки

Вариантов поиска много.

Я полагаю в основной форме определяется какой интерфейс в конфигурации и на основании этого Открывается нужна форма.
Возможно разработчик не предусмотрел чего-то. Например в обычных и управляемый формах &НаСервере работает не одинаково в зависимости от sql или файловая база.

Обработки нет, поэтому помочь ничем не могу
11. Seraph6 10.02.20 12:50 Сейчас в теме
(9) В каких "всех трех"? Искал только в форме "ГлавнаяФорма", которая назначена основной.

Вы правы в том плане, что они пошли путем универсализации, и там на самом деле в списке форм их штук 40, причем ровно половина начинается с префикса "ОФ_" (обычные формы?)

Реверсинженирить, конечно, не вариант, слишком много времени уйдет. Я надеялся, что вылезет какой-то глючок на поверхности.

Вот насчет синтаксических ошибок. Ну, если заменить ЭлементыФормы на ЭтаФорма.ЭлементыФормы, то тут он ругаться перестает.
А вот что надо поставить перед ЭтотОбъект, что-то не соображу. Это же имеется в виду ОбработкаОбъект. По имени что ли сослаться на него?

И мне остается непонятной механика, почему из справочника не открывается обработка, а через Файл - Открыть - вполне себе?
4. Seraph6 10.02.20 12:28 Сейчас в теме
Я понял, что они сделали. В старой версии была отдельно обработка "КлеверенсТСД_ОбычныеФормы", отдельно "КлеверенсТСД_УправляемыеФормы". В новой версии добавился файл "КлеверенсТСД_ОсновнаяОбработка", а те два - идентичны ей, просто с другими названиями.

Любопытно, что код главной формы изначально не проходит синтакс-контроль в конфигураторе. Вот в этом куске кода:
//// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ

ТекущаяБазаСуществует = Ложь;
#Если ТолстыйКлиентОбычноеПриложение Тогда
	ПолноеИмяОбъекта = ЭтотОбъект.Метаданные().ПолноеИмя();
	Элементы = ЭлементыФормы;
	Объект = ЭтотОбъект;
#КонецЕсли

синтаксический помощник ругается, что он не знает что такое "ЭтотОбъект" и "ЭлементыФормы".

Но при всем при этом как-то она запускается и работает через "Файл - Открыть".
6. dandykry 9 10.02.20 12:30 Сейчас в теме
(4) В управляемом режиме эти строки не компилируются. Ругаться ругается, но это не мешает запускаться там, где это необходимо

Обратите внимание где не проходит эта проверка
(Проверка: Тонкий клиент)
(Проверка: Сервер).........
8. Seraph6 10.02.20 12:33 Сейчас в теме
(6) Это понятно. Но у меня-то запуск идет именно в этом режиме (толстый клиент, обычное приложение). И проверка - тоже.
ВнешняяОбработка.КлеверенсТСД_ОсновнаяОбработка.Форма.ГлавнаяФорма.Форма(2089,21)}: Переменная не определена (ЭтотОбъект)
ПолноеИмяОбъекта = <<?>>ЭтотОбъект.Метаданные().ПолноеИмя(); (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.КлеверенсТСД_ОсновнаяОбработка.Форма.ГлавнаяФорма.Форма(2091,11)}: Переменная не определена (ЭтотОбъект)
Объект = <<?>>ЭтотОбъект; (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.КлеверенсТСД_ОсновнаяОбработка.Форма.ГлавнаяФорма.Форма(2090,13)}: Переменная не определена (ЭлементыФормы)
Элементы = <<?>>ЭлементыФормы; (Проверка: Толстый клиент (обычное приложение))
10. dandykry 9 10.02.20 12:45 Сейчас в теме
(8) ЭтотОбъект в форме должен существовать. В управляемых это форма, в обычных это обработка. Этот код точно из формы? Если да, то возможно нужно попробовать на другой платформе.Процедура или функция случайно не выполняется с "БезКонтекста"
12. Seraph6 10.02.20 12:57 Сейчас в теме
(10) Да, из главной формы. Приведенный целиком кусок кода (где ошибки вылезают) находится в самом конце в блоке ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ, после всех процедур и не предваряется ни "&НаКлиенте", ни "&НаСервере" вообще.
13. Seraph6 11.02.20 10:32 Сейчас в теме
Задачу решил. Помогло поменять в свойствах обработки основную форму с "ГлавнаяФорма" на "ОФ_ГлавнаяФорма" (т.е. принудительно сразу запускать вариант для обычного режима).
Буду благодарен, если кто-нибудь объяснит, почему через "Файл - Открыть" оно переключалось на комплект форм "ОФ" самостоятельно.
Оставьте свое сообщение

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