"Неизвестный идентификатор формы". Что за зверь?

1. dusha0020 1104 30.03.15 10:37 Сейчас в теме
1С 8.3.5.1186
Модуль УФ внешней обработки. Обычный в общем-то код клиент-серверной работы. По команде клиент вызывает несколько раз сервер. Главным образом для того, чтобы определить наличие нужных модулей БСП и не встроена ли обработка в конфигурацию. Обращения идут к Метаданным и РеквизитФормыВЗначение("Объект"). После определения всех необходимых параметров выбирается тот или иной способ дальнейшей обработки и вызывается то ли экспортная серверная процедура модуля обработки, то ли одна из процедур БСП.
Самый большой фокус в том, что первый запуск проходит отлично и без сбоев, а вот при попытке повторить обработку данных вываливается ошибка "Неизвестный идентификатор формы" на первой же попытке входа в серверную процедуру/функцию.
Типа того:
&НаКлиенте
	Процедура ТестированиеОбучения(СтатистикаПроцесса)
	Перем ВозможноВыполнитьвФоне;
	ВызовСервера(); //Здесь ошибка не входя в процедуру

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


Кто может помочь и подсказать в чем трабл?
adhocprog; CratosX; +2 Ответить
Вознаграждение за ответ
Показать полностью
Найденные решения
5. spacecraft 30.03.15 11:15 Сейчас в теме
(4) dusha0020, это?
При одновременной работе с несколькими внешними отчетами и обработками, может возникать ошибка "Неизвестный идентификатор формы".
Способ воспроизведения:
Возникает, когда внешние объекты имеют одинаковое имя объекта метаданных.
Причина неисправления:
Ошибка платформы.
yurowski; simgo83; aleksey2; AleksandrLeshkov; zko_it; DrAku1a; warrior1985; MLap; plevakin; user1257876; maksa2005; adhocprog; Innuil; cinex; jaroslav.h; EugeneMIPT; Мах; user811769; wowik; V_Izzy; A_Max; Summer_13; titoff; r71rustem; hartman620; Xershi; alex25ru; Denis211990; Fe9_min; Marvel805; TrofimovOK; bow; dusha0020; +33 Ответить
21. Serg2000mr 317 20.02.23 13:11 Сейчас в теме
Продублирую решение:

В модуле формы в процедуру ПриОткрытии добавьте код:

Процедура ПриОткрытии(Отказ)
    
    Если КлючУникальности = Неопределено Тогда
        ИмяОбработки = СтрРазделить(ЭтотОбъект.ИмяФормы, ".")[1];
        
        КлючУникальности = ИмяОбработки + XMLСтрока(ТекущаяДата());
        
    КонецЕсли;
    
КонецПроцедуры
Показать
Valerich; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dusha0020 1104 30.03.15 10:54 Сейчас в теме
$маней назначить забыл.
3. caponid 30.03.15 11:02 Сейчас в теме
код что предоставлен, отработает без ошибок... это и так видно..

надо показать то, что выдает ошибку...
есть подозрение что после вот этого РеквизитФормыВЗначение("Объект") проблемы и начинаются...
4. dusha0020 1104 30.03.15 11:13 Сейчас в теме
(3) caponid, У меня подозрение такое-же. Ну давайте попробуем разобраться...
Я модифицировал код и теперь направление обработки на сервере выполняется при открытии формы и сохраняется в ее (формы) реквизите. Следовательно, теперь На первом проходе выполняется всего одна серверная функция ЗапуститьВФонеВнешнююОбработку(). Вот ее текст:
&НаСервере
Функция ЗапуститьВФонеВнешнююОбработку(Статистика)
		
	ТекОбъект = РеквизитФормыВЗначение("Объект");
	ТекСсылка = НайтиВБазеТекущуюОбработку(); //Это тоже серверная процедура обрабатывает справочник дополнительных отчетов и обработок, надеюсь понятно как
	
	ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуПоРегламентномуЗаданию(ТекСсылка, "ОбучитьСервер");
	ЗначениеВРеквизитФормы(ТекОбъект, "Объект");
	ТекОбъект = Неопределено;
	
	Возврат Истина;//ЗаданиеЗапущено или вызовет исключение, пока не важно;
КонецФункции
Показать

Есть подозрение, что НайтиВБазеТекущуюОбработку() также перегоняет Объект в реквизит, при уже имеющемся Объекте в реквизите. Сложновато вышло... Сейчас буду упрощать, но интересует скорее причина ошибки в принципе, а не оптимизация кода.
Так что вопрос открыт по прежнему.
5. spacecraft 30.03.15 11:15 Сейчас в теме
(4) dusha0020, это?
При одновременной работе с несколькими внешними отчетами и обработками, может возникать ошибка "Неизвестный идентификатор формы".
Способ воспроизведения:
Возникает, когда внешние объекты имеют одинаковое имя объекта метаданных.
Причина неисправления:
Ошибка платформы.
yurowski; simgo83; aleksey2; AleksandrLeshkov; zko_it; DrAku1a; warrior1985; MLap; plevakin; user1257876; maksa2005; adhocprog; Innuil; cinex; jaroslav.h; EugeneMIPT; Мах; user811769; wowik; V_Izzy; A_Max; Summer_13; titoff; r71rustem; hartman620; Xershi; alex25ru; Denis211990; Fe9_min; Marvel805; TrofimovOK; bow; dusha0020; +33 Ответить
8. dusha0020 1104 30.03.15 11:26 Сейчас в теме
(5) spacecraft, Может быть... Я вызываю метод данной обработки из модуля БСП. То есть создаю еще один экземпляр этой обработки. Но самый большой фокус-покус в том, что мне теоретически не нужно создавать второй экземпляр объекта в текущей сессии - вызов метода через одно место предназначен для запуска задания в фоне. Это пока отладка. Сейчас попробую штатный запуск и создание нового экземпляра в фоновой сессии. Если пройдет хорошо то на ошибку можно забить:)
10. tarassov 112 31.03.15 11:08 Сейчас в теме
(8) dusha0020,
я получал у себя ошибку "Неизвестный идентификатор формы" когда при отладке было открыто несколько экземпляров одной и той же внешней обработки
roman_sktm; jaroslav.h; +2 Ответить
12. Xershi 1481 05.04.18 17:28 Сейчас в теме
(5) запустил внешнюю ПФ из меню файл. Затем пытался ее запустить через внешние печатные формы. Словил ошибку. Перезапустил 1С и второе действия без выполнения первого сработало на ура!
17. Serg2000mr 317 02.11.22 22:57 Сейчас в теме
(5) Платформа 8.3.21 2022 г.
Воз и ныне там.

Открыто две одинаковые внешние обработки с разными идентификаторами форм, но с одинаковыми заголовками.

Процедура НачатьПомещениеФайла(...)
...
КонецПроцедуры

Процедура ПомещениеФайлаЗавершение(...)
...
   Возврат;          //ОШИБКА - Неизвестный идентификатор формы. Платформа не понимает, в какую форму ей нужно вернуться
КонецПроцедуры



Вариант решения 1:


Вариант решения 2:
osyko; eufes; adhocprog; +3 Ответить
19. Serg2000mr 317 04.11.22 19:01 Сейчас в теме
(17) Ошибся, нужно было менять не заголовок формы, а ключ уникальности формы

Процедура ПриОткрытии(Отказ)
	
	Если КлючУникальности = Неопределено Тогда
		ИмяОбработки = СтрРазделить(ЭтотОбъект.ИмяФормы, ".")[1];
		
		КлючУникальности = ИмяОбработки + XMLСтрока(ТекущаяДата());
		
	КонецЕсли;
	
КонецПроцедуры
Показать
romankoav; eufes; adhocprog; +3 Ответить
20. eufes 02.02.23 10:28 Сейчас в теме
(19) Спасибо, добрый человек!!! :)
Serg2000mr; +1 Ответить
6. caponid 30.03.15 11:18 Сейчас в теме
ТекОбъект = Неопределено; - вот это убери
7. dusha0020 1104 30.03.15 11:21 Сейчас в теме
(6) caponid, Убрал даже "ТекОбъект = РеквизитФормыВЗначение("Объект")" - не помогло.
9. pavelyar 31.03.15 00:50 Сейчас в теме
ЭтотОбъект = Неопределено; может так?
11. dusha0020 1104 31.03.15 11:24 Сейчас в теме
Ошибка действительно из-за того, что создавался еще один экземпляр внешней обработки в той же сессии. Это была внештатная ситуация, так как я не мог отладить фоновое задание, которое запускалось из экземпляра внешней обработки, сохраненного в справочнике внешних отчетов и обработок. Так как предмет отладки появлялся уже в самой фоновой процедуре, то я никак не мог его подцепить отладчиком и пришлось отлаживать все на готовом экземпляре обработки. Чего мне стоила такая отладка - тема для отдельного разговора, но ровно один запуск (пока не был создан дубликат обработки) у меня был. Потом приходилось закрывать и открывать обработку, заново вводить данные и все по новой.
Но сейчас все отлажено, процедура переведена в фон. Все работает и вызов обработки в фоновой сессии никаких ошибок не вызывает.
Всем спасибо. Вознаграждение выдал тому, кто наиболее полно раскрыл суть проблемы.
simgo83; adhocprog; CratosX; Gazz; user8734; +5 Ответить
15. triviumfan 93 01.09.22 13:33 Сейчас в теме
(11) У меня такая же ошибка стала возникать, когда попытался сделать внешнюю обработку с запуском метода объекта в фоне.
&НаКлиенте
Процедура Прочитать(Команда)
	
	ТипОперации = "ЧтениеДанных";
	
	Если Не ПроверитьЗаполнение() Тогда Возврат; КонецЕсли;
	
	Лог.Очистить();
	
	ОповещениеПослеПомещения = Новый ОписаниеОповещения("ПрочитатьПродолжение", ЭтотОбъект);
	
	МассивФайлов = Новый Массив;
	МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу));
	МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайлаОбработки()));
	
	НачатьПомещениеФайловНаСервер(
		Новый ОписаниеОповещения("ПослеПомещенияФайловНаСервер", ЭтотОбъект, Новый Структура("Оповещение", ОповещениеПослеПомещения)),
		,
		,
		МассивФайлов,
		УникальныйИдентификатор);
	
КонецПроцедуры
	
&НаКлиенте
Процедура ПослеПомещенияФайловНаСервер(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = Неопределено Тогда	Возврат; КонецЕсли;
	
	АдресФайла 			= Результат[0].Адрес;
	РасширениеФайла 	= Результат[0].СсылкаНаФайл.Расширение;
	АдресФайлаОбработки = Результат[1].Адрес;
	
	ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура ПрочитатьПродолжение(Результат, ДополнительныеПараметры) Экспорт
	
	ДлительнаяОперация = ПрочитатьНаСервере();
	
	ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ПараметрыОжидания.ТекстСообщения = "Чтение данных...";
	ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
	ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
	ПараметрыОжидания.ОповещениеОПрогрессеВыполнения = Неопределено;
	ПараметрыОжидания.Интервал = 5;
	
	ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьДействиеЗавершение", ЭтотОбъект);
	ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
	
КонецПроцедуры

&НаСервере
Функция ПрочитатьНаСервере()
	
	ЭтоВнешняяОбработка = ЭтоВнешняяОбработка();
	ИмяОбработки = ?(ЭтоВнешняяОбработка, ЗаписьФайлаИзХранилища(АдресФайлаОбработки), РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя());
	
	ПараметрыВыполненияОбработки = Новый Структура;
	ПараметрыВыполненияОбработки.Вставить("ПутьКФайлу", 			ЗаписьФайлаИзХранилища(АдресФайла, РасширениеФайла));
	ПараметрыВыполненияОбработки.Вставить("ТипЗагрузки", 			ТипЗагрузки);
	ПараметрыВыполненияОбработки.Вставить("ЗагружатьПриОшибках", 	ЗагружатьПриОшибках);
	ПараметрыВыполненияОбработки.Вставить("ПерезаписыватьОбъекты", 	ПерезаписыватьОбъекты);
	ПараметрыВыполненияОбработки.Вставить("НомерСтроки", 			НомерСтрокиНачалаЗагрузки);
	
	ПараметрыЗадания = Новый Структура;
	ПараметрыЗадания.Вставить("ИмяОбработки",			ИмяОбработки);
	ПараметрыЗадания.Вставить("ИмяМетода",				"ПрочитатьДанные");
	ПараметрыЗадания.Вставить("ПараметрыВыполнения",	ПараметрыВыполненияОбработки);
	ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка",	ЭтоВнешняяОбработка);
	
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных из файлов'");
	ПараметрыВыполнения.ЗапуститьВФоне				= Истина;
	ПараметрыВыполнения.Вставить("ИдентификаторФормы", УникальныйИдентификатор); 
	
	ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки";
	Возврат ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);
	
КонецФункции
Показать

Не пойму как исправить, саму логику брал откуда-то с ИС.
(11)
Так как предмет отладки появлялся уже в самой фоновой процедуре, то я никак не мог его подцепить отладчиком и пришлось отлаживать все на готовом экземпляре обработки.

Звучит дико) Не расшифруешь подробнее?
ЗЫ: ошибка всегда возникнет после 20 минут (смены кеша), и ещё при каких-то специфических моментах.
А ещё помимо твоей описанной ошибки у меня периодически возникает

Ошибка при вызове метода контекста (НачатьПомещениеФайловНаСервер)
{ВнешняяОбработка.ЗагрузкаДанныхИзФайлов_УП.Форма.Форма.Форма(227)}: НачатьПомещениеФайловНаСервер(
по причине:
Каталог не обнаружен 'C:\Users\USR1CV8\AppData\Local\Temp\v8_6674_14'. 3(0x00000003): The system cannot find the path specified.
13. Светлый ум 406 02.06.19 17:16 Сейчас в теме
Мои 5 копеек:

Ошибка возникла при переносе ВПФ между разными конфигурациями:
- затерся реквизит "СсылкаНаОбъект", вернул на место заработало.
14. yura371 01.03.22 17:43 Сейчас в теме
У меня возникла данная ошибка при выполнении отладки отчета, вот способ исправить данную ошибку: Удалил временно из "внешних отчетов и обработок" свой отчет и запустил через файл-открыть.
16. GV. 1 16.10.22 10:42 Сейчас в теме
Условия возникновения:
Внешняя обработка открыта через файл-открыть. При вызове серверного метода еще одного экземпляра этой обработки, открытой параллельно через БСП из справочника ДополнительныеОтчетыИОбработки, экземпляр, открытый через файл-открыть, падает с вышеупомянутой ошибкой.

Решение:
Вместо открытия через файл запускать обработку из справочника ДополнительныеОтчетыИОбработки.

Для отладки, конечно, такое себе, но для готового постоянно используемого решения - вполне рабочий вариант.
18. Serg2000mr 317 03.11.22 05:09 Сейчас в теме
21. Serg2000mr 317 20.02.23 13:11 Сейчас в теме
Продублирую решение:

В модуле формы в процедуру ПриОткрытии добавьте код:

Процедура ПриОткрытии(Отказ)
    
    Если КлючУникальности = Неопределено Тогда
        ИмяОбработки = СтрРазделить(ЭтотОбъект.ИмяФормы, ".")[1];
        
        КлючУникальности = ИмяОбработки + XMLСтрока(ТекущаяДата());
        
    КонецЕсли;
    
КонецПроцедуры
Показать
Valerich; +1 Ответить
22. krashav@rols-isomarket 20.07.23 11:37 Сейчас в теме
при "Ошибка при вызове метода контекста (ЗапуститьОтчетНаСервере)"

помогло
(21)
Если КлючУникальности = Неопределено Тогда
ИмяОбработки = СтрРазделить(ЭтотОбъект.ИмяФормы, ".")[1];

КлючУникальности = ИмяОбработки + XMLСтрока(ТекущаяДата());

КонецЕсли;
23. andrey11_11 24.08.23 18:43 Сейчас в теме
(21) спасибо дружище
Serg2000mr; +1 Ответить
Оставьте свое сообщение

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