Элементы формы бизнес-процесса в зависимости от вида документа

1. Svet_Serg 17.04.19 11:48 Сейчас в теме
1С:Предприятие 8.3
Документооборот 8 КОРП, редакция 2.1
--

Помогите с кодом, пожалуйста!
Нужно, чтобы в форме бизнес-процесса, в зависимости от типа документа, менялись названия элементов формы. Как скрыть кнопки или переименовать элементы могу написать, а вот как привязаться к виду документа - нет ((

Для примера: Есть вид внутреннего документа "Оценка риска". По нему запущен комплексный процесс. В бизнес-процессе "Исполнить" для этого вида документа элемент формы "Исполнено" нужно переименовать "Оценка".
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
21. melenaspb 208 17.04.19 16:18 Сейчас в теме
(18) А вот так попробуйте
ПредметыВыборка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "Предметы");
Svet_Serg; +1 Ответить
25. melenaspb 208 29.04.19 17:08 Сейчас в теме
(24)Может из-за того что когда файл добавляют нет основного предмета ( файл будет вспомогательным)

Перед строкой
ВидДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ , "ВидДокумента"); 

попробуйте добавить проверку
Документ = ОбзорЗадачВызовСервера.ПолучитьОсновнойПредметДокумент(Предметы); 
Если ЗначениеЗаполнено(Документ )  и ТипЗнч(Документ) = Тип("СправочникСсылка.ВнутренниеДокументы")  тогда
        ВидОценкаРиска = Справочники.ВидыВнутреннихДокументов.НайтиПонаименованию("Оценка риска");
        ВидДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ , "ВидДокумента"); 
        Если ВидДокумента  = ВидОценкаРиска тогда
        ........
        КонецЕсли;
КонецЕсли;
Svet_Serg; +1 Ответить
15. melenaspb 208 17.04.19 14:14 Сейчас в теме +1 $m
(14)
ПредметыВыборка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект, "Предметы"); 
Предметы = ПредметыВыборка.Выгрузить(); 

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

Если ВидДокумента  = ВидОценкаРиска тогда
........
КонецЕсли;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. arsen_botashev 17.04.19 12:25 Сейчас в теме
(1)Укажите в бизнес процессе Документ Основание
И записывайте туда документ по которому создается бизнес процесс
3. arsen_botashev 17.04.19 12:26 Сейчас в теме
(1) А вообще указывается в бп документ?
5. Svet_Serg 17.04.19 13:06 Сейчас в теме
(3) да, как основной предмет
7. arsen_botashev 17.04.19 13:14 Сейчас в теме
(5)Ну вот, при создании на сервере проверяете, как в (4) написано, с помощью типЗнч. но так надо будет для каждого документа делать.
4. user995537 38 17.04.19 12:44 Сейчас в теме
(1)Для изменения имени отображаемого реквизита формы можно в переменной документ соответственно должен быть Ваш документ, не обязательно в процедуре ПриСозданииНаСервере главное в серверной процедуре
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если НЕ Элементы.Найти("Исполнено") = Неопределено Тогда
		Если ТипЗнч(Документ) = Тип("ДокументСсылка.ОценкаРиска") Тогда 	
			Элементы.Исполнено.Заголовок = "Оценка";
		КонецЕсли;
	КонецЕсли;	
КонецПроцедуры
user705522_constantin_h; +1 Ответить
8. Svet_Serg 17.04.19 13:19 Сейчас в теме
(4) Ошибка при сохранении конфигурации:

{БизнесПроцесс.Исполнение.Форма.ФормаЗадачиИсполнителя.Форма(9,13)}: Переменная не определена (Документ)
Если ТипЗнч(<<?>>Документ) = Тип("ДокументСсылка.ОценкаРиска") Тогда (Проверка: Сервер)
9. melenaspb 208 17.04.19 13:35 Сейчас в теме
(8) Да нету у задачи такого реквизита "Документ" .
12. user995537 38 17.04.19 13:59 Сейчас в теме
(9)Еще раз - это не реквизит, не глобальная переменная я имел ввиду что в условии
Если ТипЗнч(...) = Тип("ДокументСсылка.ОценкаРиска") - вместо документ нужно указать переменную или реквизит или то, что должно проверять данное условие!
10. user995537 38 17.04.19 13:42 Сейчас в теме
(8)Документ - это переменная в которой должен хранится Ваш внутренний документ - например "Оценка риска".
11. melenaspb 208 17.04.19 13:47 Сейчас в теме
(8)
 ПредметыВыборка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект, "Предметы");
Предметы = ПредметыВыборка.Выгрузить();
	
	Документ = ОбзорЗадачВызовСервера.ПолучитьОсновнойПредметДокумент(Предметы);
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ОценкаРиска") Тогда
........
КонецЕсли;
14. melenaspb 208 17.04.19 14:09 Сейчас в теме
(11) Если ТипЗнч(Документ) = Тип("ДокументСсылка.ОценкаРиска") Тогда - вот это тоже неправильно, скопировала не глядя.
Вам надо проверять что вид внутреннего документа это ОценкаРиска.
15. melenaspb 208 17.04.19 14:14 Сейчас в теме +1 $m
(14)
ПредметыВыборка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект, "Предметы"); 
Предметы = ПредметыВыборка.Выгрузить(); 

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

Если ВидДокумента  = ВидОценкаРиска тогда
........
КонецЕсли;
Показать
18. Svet_Serg 17.04.19 16:01 Сейчас в теме
(15)Возможно мой вопрос будет снова не оч. умным ))

При попытке войти в задачу появляется ошибка:

{ОбщийМодуль.ОбщегоНазначения.Модуль(86)}: Метод объекта не обнаружен (Метаданные)
Запрос.Текст =
19. user705522_constantin_h 35 17.04.19 16:02 Сейчас в теме
(18)
Запрос.Текст =

А что в тексте запроса?
20. Svet_Serg 17.04.19 16:10 Сейчас в теме
(19)
Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты) Экспорт
	
	Если ТипЗнч(Реквизиты) = Тип("Строка") Тогда
		Если ПустаяСтрока(Реквизиты) Тогда
			Возврат Новый Структура;
		КонецЕсли;
		Реквизиты = СтрРазделить(Реквизиты, ",", Ложь);
	КонецЕсли;
	
	СтруктураРеквизитов = Новый Структура;
	Если ТипЗнч(Реквизиты) = Тип("Структура") Или ТипЗнч(Реквизиты) = Тип("ФиксированнаяСтруктура") Тогда
		СтруктураРеквизитов = Реквизиты;
	ИначеЕсли ТипЗнч(Реквизиты) = Тип("Массив") Или ТипЗнч(Реквизиты) = Тип("ФиксированныйМассив") Тогда
		Для Каждого Реквизит Из Реквизиты Цикл
			СтруктураРеквизитов.Вставить(СтрЗаменить(Реквизит, ".", ""), Реквизит);
		КонецЦикла;
	Иначе
		ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный тип второго параметра Реквизиты: %1'"), Строка(ТипЗнч(Реквизиты)));
	КонецЕсли;
	
	ТекстПолей = "";
	Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
		ИмяПоля   = ?(ЗначениеЗаполнено(КлючИЗначение.Значение),
		              СокрЛП(КлючИЗначение.Значение),
		              СокрЛП(КлючИЗначение.Ключ));
		
		Псевдоним = СокрЛП(КлючИЗначение.Ключ);
		
		ТекстПолей  = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + "
		|	" + ИмяПоля + " КАК " + Псевдоним;
	КонецЦикла;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	Запрос.Текст =
	"ВЫБРАТЬ
	|" + ТекстПолей + "
	|ИЗ
	|	" + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы
	|ГДЕ
	|	ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
	|";
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	
	Результат = Новый Структура;
	Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
		Результат.Вставить(КлючИЗначение.Ключ);
	КонецЦикла;
	ЗаполнитьЗначенияСвойств(Результат, Выборка);
	
	Возврат Результат;
	
КонецФункции
Показать
21. melenaspb 208 17.04.19 16:18 Сейчас в теме
(18) А вот так попробуйте
ПредметыВыборка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "Предметы");
Svet_Serg; +1 Ответить
22. Svet_Serg 17.04.19 16:28 Сейчас в теме
(21) Всё отлично! Спасибо!
24. Svet_Serg 29.04.19 15:39 Сейчас в теме
(21) Не поможете с неожиданно возникшей и вполне логичной ошибкой?

Всё хорошо работало, все были счастливы, пока кто-то не решил создать отдельно процесс и прикрепил к нему файл.

На формах, где добавлен ваш код возникает ошибка
{ОбщийМодуль.ОбщегоНазначения.Модуль(86)}: Значение не является значением объектного типа (Метаданные)
Запрос.Текст =
25. melenaspb 208 29.04.19 17:08 Сейчас в теме
(24)Может из-за того что когда файл добавляют нет основного предмета ( файл будет вспомогательным)

Перед строкой
ВидДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ , "ВидДокумента"); 

попробуйте добавить проверку
Документ = ОбзорЗадачВызовСервера.ПолучитьОсновнойПредметДокумент(Предметы); 
Если ЗначениеЗаполнено(Документ )  и ТипЗнч(Документ) = Тип("СправочникСсылка.ВнутренниеДокументы")  тогда
        ВидОценкаРиска = Справочники.ВидыВнутреннихДокументов.НайтиПонаименованию("Оценка риска");
        ВидДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ , "ВидДокумента"); 
        Если ВидДокумента  = ВидОценкаРиска тогда
        ........
        КонецЕсли;
КонецЕсли;
Svet_Serg; +1 Ответить
23. Svet_Serg 19.04.19 16:33 Сейчас в теме
(15) В форме бизнес-процессов всё работает отлично.

По образу и подобию подправила для элемента Согласовано в форме Задачи ЗадачиИсполнителя ЗадачиМне, процедура:
Процедура ПолучитьРеквизитыИСвойстваЗадачиСогласованиеСогласовать(Задача, Знач РеквизитыЗадачи, ДополнительныеРеквизиты, СвойстваЭлементов)


Что может быть не так с Подсказкой? Поле не найдено.

//Наименования кнопок в задаче согласование в зависимости от вида документа (Реестр Рисков)
    ПредметыВыборка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Задача, "Предметы");
	Предметы = ПредметыВыборка.Выгрузить();
	ПредметДокумент = ОбзорЗадачВызовСервера.ПолучитьОсновнойПредметДокумент(Предметы);
	ВидРеестрРисков = Справочники.ВидыВнутреннихДокументов.НайтиПонаименованию("Реестр рисков");
	РеквизитыЗадачи.Вставить("ПредметДокумент", ПредметДокумент);
	ВидДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПредметДокумент, "ВидДокумента");	
	
// заголовки и видимость команд
	
	СвойстваЭлементов.Вставить("Согласовано", Новый Соответствие);
	СвойстваЭлементов.Вставить("НеСогласовано", Новый Соответствие);
        СвойстваЭлементов.Вставить("СогласованоСЗамечаниями", Новый Соответствие);
	
Если ВидДокумента = ВидРеестрРисков тогда
	 ЗаголовокСогласовано = "Отправить";
	 ПодсказкаСогласовано = ЗаголовокСогласовано;
	 ВидимостьНеСогласовано = Ложь;
	 ВидимостьСогласованоСЗамечаниями = Ложь;
	
КонецЕсли;
	 СвойстваЭлементов.Согласовано.Вставить("Заголовок", ЗаголовокСогласовано);
	 СвойстваЭлементов.Согласовано.Вставить("Подсказка", ПодсказкаСогласовано);
	 СвойстваЭлементов.НеСогласовано.Вставить("Видимость", ВидимостьНеСогласовано);
	 СвойстваЭлементов.СогласованоСЗамечаниями.Вставить("Видимость", ВидимостьСогласованоСЗамечаниями);
Показать
16. Svet_Serg 17.04.19 15:54 Сейчас в теме
(14)
огда - вот это тоже неправильно, скопировала не глядя.
Вам надо проверять что вид внутреннего документа это ОценкаРиска.

Я к сожалению, не программист, мне дали ДО и сказали "Делай", поэтому я вынуждена изучать с нуля методом проб и ошибок) Иногда делаю очень тупые вещи)
17. user705522_constantin_h 35 17.04.19 16:01 Сейчас в теме
(16)
поэтому я вынуждена изучать с нуля методом проб и ошибок)

Остановились в отладчике на
Если ТипЗнч(Документ) = Тип("ДокументСсылка.ОценкаРиска") Тогда

И посмотрели, где находится нужный вам документ.
Svet_Serg; +1 Ответить
13. arsen_botashev 17.04.19 13:59 Сейчас в теме
(8)ТипЗнач(тут должен быть ваш реквизит в котором указывается документ)
6. melenaspb 208 17.04.19 13:13 Сейчас в теме
Определяйте по основному предмету.
У бизнес-процесса есть таб.часть Предметы, отбираете тот у кого РольПредмета = Перечисление.РолиПредметов.Основной, проверяете что у предмета нужный вам тип внутр. документа
Оставьте свое сообщение

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