1. Проверка форм. Форма документа.
В процедуре ГлобальныйТестФорм запускается тест формы через Код
Тестироватьформу(Форма, ИмяОперации);
Но перед этим не проверяется, что Форма=Неопределено. Точнее сказать проверяется, но после этого происходит попытка получить форму ещё раз:
Код
Форма = ПолучитьНовуюФорму(МетаФорма, ВнешнийОбъект, КлючВременнойФормы, ПараметрыФормы);
Если Форма = Неопределено Тогда
ОтменитьТранзакцию();
Продолжить;
КонецЕсли;
...
Если ЭтоФормаСсылочногоОбъекта Тогда
....
Если Выборка.Следующий() Тогда
ПараметрыФормы.Вставить("ЗначениеКопирования", Выборка.Ссылка);
КонецЕсли;
Форма = ирОбщий.ПолучитьФормуЛкс(МетаФорма.ПолноеИмя(), ПараметрыФормы, , КлючВременнойФормы);
//Тут мы получаем Неопределено
....
КонецЕсли;
...
Тестироватьформу(Форма, ИмяОперации);
Внутри этой функции происходит открытие через "ПолучитьФорму", которое может возвращать "Неопределено" если в ПриСозданииНаСервере Отказ=Истина. Если разработчик даст вам получить форму, но принудительно сделает Отказ=Истина, если ЗначениеЗаполнено(ЗначениеКопирования), то в первый раз всё будет нормально, а потом Неопределено. Дальше выйдет ошибка, т.к. дальше идёт попытка открыть форму, а форма у нас = Неопределено.
2. Проверка элементов форм.
Есть такой код:
Код
ирОбщий.ИнтерактивноЗаписатьВЭлементУправленияЛкс(ПолеФормы, НепустоеЗначение);
В переменную ПолеФормы в Управляемых формах часто передаётся тип "ПолеФормы". В элементе этого типа нет свойства "Значение", а в процедуре далее идёт:
Код
Результат = ЭлементУправления.Значение = Значение;
Возникает ошибка.Добавлено (16.02.2017, 14:29)
---------------------------------------------
3. Проверка форм.
Предлагаю изменить код на форме обработки:
Код
Функция ПолучитьНовуюФорму(МетаФорма, ВнешнийОбъект = Неопределено, КлючВременнойФормы = Неопределено, ПараметрыФормы = Неопределено)
Если ВнешнийОбъект <> Неопределено Тогда
Форма = ВнешнийОбъект.ПолучитьФорму(МетаФорма.Имя, , КлючВременнойФормы);
Иначе
//Форма = МенеджерТипа.ПолучитьФорму(МетаФорма.Имя, , КлючВременнойФормы);
Форма = ирОбщий.ПолучитьФормуЛкс(МетаФорма.ПолноеИмя(), ПараметрыФормы, , КлючВременнойФормы);
КонецЕсли;
Если ПараметрыФормы <> Неопределено Тогда //Старый код
Если ПараметрыФормы <> Неопределено И Форма <> Неопределено Тогда //Новый код
ЗаполнитьЗначенияСвойств(Форма, ПараметрыФормы);
КонецЕсли;
Возврат Форма;
КонецФункции
Причины: как и в сообщении выше, бывают случаи отказа ПриСозданииНаСервере, Форма=Неопределено и на ЗаполнитьЗначениеСвойств выходит ошибка. Например БП 3.0 Справочник.БанковскийСчет выдаст ошибку.