Заполнение ТЧ в документе Данные для расчета зарплаты УФ

1. belousows 3 14.12.17 11:56 Сейчас в теме
В связи с переходом с НГ в ЗУПГУ3, потребовалось создать внешнюю обработку ТЧ для расчета показателя стаж,
данные в форме не обновляются. Код для форума упростил для большей наглядности.
Code:

&НаКлиенте

Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения) Экспорт
	Ссылка =  ОбъектыНазначения[0];
	Стаж  = 6;
	Для каждого Элемент из ОбъектыНазначения Цикл
		
		//Зададим ключ поиска документа, из которого вызвана данная обработка,
		//чтобы получить ссылку на редактирумый документ в удобном виде для
		//функции ОткрытьФорму()
		КлючПоиска = Новый Структура("Ключ", Элемент);
		Ключ =  Элемент;
		Окна = ПолучитьОкна();
		Для каждого Окно1 из Окна Цикл
				Форма = ОткрытьФорму("Документ.ДанныеДляРасчетаЗарплаты.Форма.ФормаДокумента",КлючПоиска,,,Окно);
//				//Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
//				//В объекте содержатся все реквизиты (элементы) формы
				НовыйОбъект = Форма.Объект;
            ЗаполнитьОбъект(НовыйОбъект, Ссылка);

	КонецЦикла;
	КонецЦикла;
		Форма.ОбновитьОтображениеДанных();
	
	
КонецПроцедуры

&НаСервере
Функция ЗаполнитьОбъект(НовыйОбъект,Знач Ссылка)
	Стаж  = 7;


Для Каждого СтрокаТЧ Из НовыйОбъект.ЗначенияПоказателей Цикл 
	
чение+"Показатель "+СтрокаТЧ.Показатель);
	СтрокаТЧ.Значение = Стаж;
	
КонецЦикла;
	Модифицированность = Истина;

	

КонецФункции
Показать
По теме из базы знаний
Найденные решения
4. belousows 3 15.12.17 10:08 Сейчас в теме
Бился сутки, решение нашел в теме https://infostart.ru/public/84119/.
Все можно делать не заходя на сервер. При регистрации обработки в модуле необходимо использовать код(он отличен от моего и в этом корень зла):
#Область РегистрацияОбработки

Функция СведенияОВнешнейОбработке() Экспорт
    
    Назначения = Новый Массив ;
    Назначения.Добавить("Документ.ДанныеДляРасчетаЗарплаты") ;
    
    ПараметрыРегистрации = Новый Структура ;
    ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Назначение",Назначения);
    ПараметрыРегистрации.Вставить("Наименование","ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Версия","1.0");
    ПараметрыРегистрации.Вставить("Информация","ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);
    
    Команды = ПолучитьТаблицуКоманд() ;
    ДобавитьКоманду(Команды, "Заполнить количество месяцев ЕДВ","ИзменитьДокумент","ВызовКлиентскогоМетода",Ложь);
    
    ПараметрыРегистрации.Вставить("Команды",Команды) ;
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений ;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")) ;
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")) ;
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")) ;
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")) ;
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")) ;
    Возврат Команды ;
КонецФункции    

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить() ;
    НоваяКоманда.Представление = Представление ;
    НоваяКоманда.Идентификатор = Идентификатор ;
    НоваяКоманда.Использование = Использование ;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение ;
    НоваяКоманда.Модификатор = Модификатор ;
КонецПроцедуры    

#КонецОбласти


В форме обработки все делается на клиенте используя ВладелецаФормы  код:

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

КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. belousows 3 14.12.17 12:49 Сейчас в теме
В НовомОбъекте ТЧ перебирается, значения присваиваются, на открытой форме ничего не изменятся
3. belousows 3 14.12.17 12:59 Сейчас в теме
пока упрощал лишнего удалил:
code:
&НаКлиенте

Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения) Экспорт
	Ссылка =  ОбъектыНазначения[0];
	Стаж  = 6;
	Для каждого Элемент из ОбъектыНазначения Цикл
		КлючПоиска = Новый Структура("Ключ", Элемент);
		Ключ =  Элемент;
		Окна = ПолучитьОкна();
		Для каждого Окно1 из Окна Цикл
				Форма = ОткрытьФорму("Документ.ДанныеДляРасчетаЗарплаты.Форма.ФормаДокумента",КлючПоиска,,,Окно);
//				//Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
//				//В объекте содержатся все реквизиты (элементы) формы
				НовыйОбъект = Форма.Объект;
            ЗаполнитьОбъект(НовыйОбъект, Ссылка);
			КопироватьДанныеФормы(НовыйОбъект, Форма.Объект); 

	КонецЦикла;
	КонецЦикла;
			Форма.ОбновитьОтображениеДанных();
	
		
КонецПроцедуры
Показать
4. belousows 3 15.12.17 10:08 Сейчас в теме
Бился сутки, решение нашел в теме https://infostart.ru/public/84119/.
Все можно делать не заходя на сервер. При регистрации обработки в модуле необходимо использовать код(он отличен от моего и в этом корень зла):
#Область РегистрацияОбработки

Функция СведенияОВнешнейОбработке() Экспорт
    
    Назначения = Новый Массив ;
    Назначения.Добавить("Документ.ДанныеДляРасчетаЗарплаты") ;
    
    ПараметрыРегистрации = Новый Структура ;
    ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Назначение",Назначения);
    ПараметрыРегистрации.Вставить("Наименование","ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Версия","1.0");
    ПараметрыРегистрации.Вставить("Информация","ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);
    
    Команды = ПолучитьТаблицуКоманд() ;
    ДобавитьКоманду(Команды, "Заполнить количество месяцев ЕДВ","ИзменитьДокумент","ВызовКлиентскогоМетода",Ложь);
    
    ПараметрыРегистрации.Вставить("Команды",Команды) ;
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений ;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")) ;
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")) ;
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")) ;
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")) ;
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")) ;
    Возврат Команды ;
КонецФункции    

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить() ;
    НоваяКоманда.Представление = Представление ;
    НоваяКоманда.Идентификатор = Идентификатор ;
    НоваяКоманда.Использование = Использование ;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение ;
    НоваяКоманда.Модификатор = Модификатор ;
КонецПроцедуры    

#КонецОбласти


В форме обработки все делается на клиенте используя ВладелецаФормы  код:

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

КонецПроцедуры
Показать
5. user633533_encantado 11 15.12.17 10:33 Сейчас в теме
Кода лишнего много, со знанием БСП для регистрации обработки нужна только одна процедура. Все эти "ПолучитьТаблицуКоманд" выдают новичка.
6. belousows 3 15.12.17 10:55 Сейчас в теме
Ну, да с БСП пока на Вы
Оставьте свое сообщение

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