Управляемое приложение. Внешняя обработка. Заполнение объекта

0. Андрей Чунихин (ApocalypseNTC) 765 15.04.11 07:48 Сейчас в теме
Пример интерактивного изменения данных в форме документа из внешней обработки заполнения на управляемом приложении.

Перейти к публикации

Комментарии
1. Артур Аюханов (artbear) 867 15.04.11 07:49 Сейчас в теме
В чем разница сабжа и http://infostart.ru/public/84001/ ?
одну из них удали или опиши различия или одну из них (сабж) удалю я.
2. Денис Плясовских (Denizzz) 15.04.11 08:09 Сейчас в теме
Вроде как в первом случае используется СозданиеСвязанныхОбъектов
а во втором ЗаполнениеОбъекта
в принципе задача то одна, а вот решения разные. Обратил внимание на ВыполнитьКоманду
3. Сергей Ожерельев (Поручик) 3563 15.04.11 08:17 Сейчас в теме
(1) Не разбираешься, не лезь. И описывать различия не требуется, кто в теме, в курсе.

Разница такая, что в этой статье описана методика заполнения объекта (аналог из УПП 1.2 или УТ 10.3 - заполнение табличных частей), а в другой - описание создания связанных объектов или ввода на основании.
Статья полезная, сам думал, как бы это сделать пооптимальней. Намудили Намудрили разработчики с БСП.
Lo1jke; kambl; Spacer; tkv44; shard; biz-intel; KazeNoYaida; ShyThun; kote; Cobalt River; Nuobu; Denizzz; +12 1 Ответить 1
4. Сергей Ожерельев (Поручик) 3563 15.04.11 08:18 Сейчас в теме
>>> в принципе задача то одна
Нет, это разные задачи.
5. Денис Плясовских (Denizzz) 15.04.11 08:21 Сейчас в теме
В данном контексте читать как "Результат один"
Понимаю, что основной задаче для автора является ее реализация.
6. Денис Плясовских (Denizzz) 15.04.11 08:23 Сейчас в теме
Поручик пишет:
Намудрили разработчики с БСП.

полностью согласен. БСП еще допиливать и допиливать
7. Артур Аюханов (artbear) 867 15.04.11 10:16 Сейчас в теме
(0) Автор, все еще жду ответа и исправления в описании!

(3) 1. Будь вежливее.
2. Цель моего предложения в (1) - автор ДОЛЖЕН расписать отличие одной обработки от другой, чтобы пользователь сайта, который не разбирается в этом (а ведь статья именно для таких пользователей! ), мог понять отличие и назначение каждой статьи.
Если ТЕБЕ эта моя цель непонятна/недоступна, это твои проблемы!
Уважаю тебя за твои работы, но здесь ты неправ.

ЗЫ На будущее - Не лезь и не обсуждай работу Модераторов.
www2000; altimait; +2 2 Ответить
8. Андрей Чунихин (ApocalypseNTC) 765 15.04.11 12:16 Сейчас в теме
Разница публикаций очевидна из их названия.
Поясню:
1) Создание связанных объектов
2) Заполнение объекта

Задачи поставлены разные.
1) Создать документ счет-фактура выданный аванс на основании документа поступление безналичных денежных средств
2) В форме документа счет-фактура выданный аванс заполнить табличную часть Авансы

Частично одинаков код модуля обработок, он приведен на тот случай, если человек не делал до этого внешних обработок на управляемом приложении и читает публикацию по этой теме впервые.

Я мог конечно написать только суть и даже не публиковать обработку, но тогда по собственному опыту скажу, что были бы только вопросы и плевки в мою сторону, особенно у новичков.
baracuda; KarV; svartemov; drcrasher; Denizzz; Поручик; +6 Ответить
9. Сергей Ожерельев (Поручик) 3563 15.04.11 12:25 Сейчас в теме
11. Сергей Ожерельев (Поручик) 3563 15.04.11 12:38 Сейчас в теме
(10) Успокойся, здесь люди всё таки адекватные, статью не удалят.
Это две разные публикации о разных задачах. Заявляю, как человек постоянно с прошлого года работающий с УТ 11 и вообще с БСП.
12. Ирина Пятакова (Alraune) 1389 15.04.11 13:24 Сейчас в теме
(10) Не стоит выставлять копию письма здесь.
А насчет
человек читающий публикации и имеющий аккаунт на http://infostart.ru некомпетентен в вопросах программирования на процедурном языке 1С

- это вполне может быть, здесь полно таких, вот я, к примеру. Поэтому Вам предложили только более понятно описать, о чем материал в статье, чтобы нам, "чайникам", было понятно. Удалять статьи никто не собирался.
13. Саша (TbSasha) 09.05.11 18:27 Сейчас в теме
Подскажите можно ли как то делать отладку внешней подключаемой обработки?
И как какая тут последовательность надо вначале создать документ "счет-фактура выданный аванс" потом выбрать у него в основание "поступление безналичных денежных средств" а потом нажать заполнение?
14. Макс Унжаков (MAntaNA) 6 12.05.11 01:30 Сейчас в теме
Хм, а если после выполнения обработки при любой попытке изменить реквизит или просто сохранить пишет «Ошибка блокировки объекта. Объект уже заблокирован <наименование сеанса>» ?
15. Макс Унжаков (MAntaNA) 6 12.05.11 02:03 Сейчас в теме
Разобрался.
Опа, нет ещё...
Короче, нифига не выходит с заполнением формы без сохранения данных в объекте: форма заполняется - но больше с ней ничего не сделать: «Ошибка блокировки объекта. Объект уже заблокирован». Пришлось в серверной процедуре записывать объект с помощью ДанныеФормыВЗначение... Пытался прикрутить к УТ 11.0.6.7 заполнение графы «Основание» в ПКО описанием документа-основания ПКО...
16. llll ffffffffff (magicdee87) 12.05.11 14:56 Сейчас в теме
как обойти «Ошибка блокировки объекта. Объект уже заблокирован», подскажите оч надо
17. Sensey Master (MSensey) 55 12.05.11 17:43 Сейчас в теме
Кстати, а зачем обработка заполнения ТЧ счета-фактуры на аванс?
На мой взгляд правильней заполнять с/ф в обработке формирования с/ф на аванс.
18. Андрей Чунихин (ApocalypseNTC) 765 13.05.11 10:51 Сейчас в теме
MSensey пишет:

Кстати, а зачем обработка заполнения ТЧ счета-фактуры на аванс?

На мой взгляд правильней заполнять с/ф в обработке формирования с/ф на аванс.


Это лишь пример реализации интерактивного заполнения ТЧ. Можно было бы заполнять другую ТЧ, но суть решения не изменилась бы.

MAntaNA пишет:

Хм, а если после выполнения обработки при любой попытке изменить реквизит или просто сохранить пишет «Ошибка блокировки объекта. Объект уже заблокирован <наименование сеанса>» ?


Верно подмечено. Разбираюсь в этой проблемой в данный момент.
19. Дмитрий Гомзин (plevakin) 19.08.11 16:12 Сейчас в теме
Так никто и не разобрался с
Ошибка блокировки объекта.
?
Не хочу троллить, но автор сам пользовался этой обработкой?
20. Denis Serov (fsolution) 11.10.11 17:51 Сейчас в теме
Сталкнулся с проблемой когда созданная внешняя обработка по загрузке прайса из XLS в док заказ клиента - выдавал в документе что он заблокирован, и в результате после заполнения таблич части документа нельзя было его не записать не сохранить - это безусловно баг УТ 11 и пофиксят непонятно в каких релизах потом - но проблема осталась!
21. Denis Serov (fsolution) 13.10.11 18:12 Сейчас в теме
Короче, нифига не выходит с заполнением формы без сохранения данных в объекте: форма заполняется - но больше с ней ничего не сделать: «Ошибка блокировки объекта. Объект уже заблокирован». Пришлось в серверной процедуре записывать объект с помощью ДанныеФормыВЗначение... Пытался прикрутить к УТ 11.0.6.7 заполнение графы «Основание» в ПКО описанием документа-основания ПКО...

Вопрос блокировок конечно очень обширный, поэтому я хотел бы для себя разобраться для начала в каком то одном частном вопросе. А именно как работает свойство БлокироватьДляИзменения у набора записей в 8.2 в управляемом режиме (SQL). Если для предыдущих версий платформы все достаточно понятно, так например:
Для 8.1 (Автоматический режим) ответы будут следующие:
1) Когда читаются данные, которые необходимо изменять в текущей транзакции необходимо в запросе указывать "ДЛЯИЗМЕНЕНИЯ"
2) Блокировка накладывается в момент выполнения запроса, диапазон блокируемых данных определяется условиями в запросе.
3) Блокируется запись, а так же чтение другими транзакциями, запросы которых используют директиву "ДЛЯИЗМЕНЕНИЯ"

Для 8.1 (Управляемый режим)
1) Когда читаются данные которые необходимо изменять в текущей транзакции нужно установить исключительную блокировку, когда необходимо просто обеспечить неизменность прочитанных данных - разделяемую.
2) Блокировка устанавливается явно, методом Заблокировать() блокируемые записи так же явно указываем в коде.
3) Разделяемая - запрещает запись, Исключительная - Чтение и запись

Для 8.2 (Управляемый режим) в принципе верно тоже что и для 8.1 (Управляемый),
но это если использовать старую методику - сначала контроль остатков, потом проведение.
Как действовать при новой методике, непонятно... ответ судя по всему кроется в понимании принципов работы этой самой "БлокироватьДляИзменения"


я так думаю нужно переделать в обработке каркас а именно это
Форма = ОткрытьФорму("Документ.СчетФактураВыданныйАванс.Форма.ФормаДокумента",КлючПоиска,,,Окно);

//Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
//В объекте содержатся все реквизиты (элементы) формы
НовыйОбъект = Форма.Объект;
22. Илья Д. (Diakon) 25.10.11 17:23 Сейчас в теме
Большое спасибо за обработку, нашел её с Мисты, так что не удаляйте).Пустые ссылки это не хорошо.
23. Алексей Чухланцев (AvalonE2008) 90 27.10.11 09:14 Сейчас в теме
Спасибо за пример работы с формами. Очень помогло.
24. denis leonov (curys) 27.10.11 11:33 Сейчас в теме
Большое спасибо за обработку)
25. Василий Зайцев (vasiliy_b) 272 18.11.11 12:21 Сейчас в теме
Поставил, плюс, но все таки получается пример не рабочий...
Думаю стоит исправить... пока проблема будет не решена.
27. Андрей Чунихин (ApocalypseNTC) 765 21.11.11 11:51 Сейчас в теме
Я знал, что так будет :)
happyden; +1 Ответить
28. Д. Р. (starjevschik) 22.11.11 21:24 Сейчас в теме
Отлично сделано. Автору полный зачет. Работает на платформе .528 без вопросов.
Незачет 1с. Собственно проблема в том, что в обработку не передается форма, из которой она открыта. Но автор нашел нужное окошко, молодец.
29. Сергей Серов (serov_sergey) 12.12.11 09:10 Сейчас в теме
Насторожила эта строчка:

Форма = ОткрытьФорму("Документ.СчетФактураВыданныйАванс.Форма.ФормаДокумента",КлючПоиска,,,Окно);

А если этой обработкой нужно заполнять не один вид документов, а несколько? Надо чтобы данные вписывались в уже открытую форму объекта.
30. Алексей Иванов (iaa) 19.12.11 12:42 Сейчас в теме
а как быть, если мне необходимо открыть форму обработки, выполнить в форме ряд действий, потом нажать кнопку типа "Заполнить табличную часть документа"?
как попасть в этом случае в эту процедуру?
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт


и где брать значения для переменных?
31. Андрей Чунихин (ApocalypseNTC) 765 20.12.11 03:18 Сейчас в теме
serov_sergey пишет:

Насторожила эта строчка:



Форма = ОткрытьФорму("Документ.СчетФактураВыданныйАванс.Форма.ФормаДокумента",КлючПоиска,,,Окно);



А если этой обработкой нужно заполнять не один вид документов, а несколько? Надо чтобы данные вписывались в уже открытую форму объекта.


Предоставьте выполнение этой задачи богу Шиве.
32. Алекс Ю (AlexO) 116 05.01.12 23:25 Сейчас в теме
(28)(26) 123456,
т.е. в каких-то релизах и типовых работает, в каких-то - нет?
где и как в 8.2 теперь подключаются все внешние отчеты, обработки, обработки ТЧ, ВПФ?
33. Алекс Ю (AlexO) 116 06.01.12 02:59 Сейчас в теме
(0) и все эти сложности шаг 1-3 (вызов команды внешней обработки и т.д.) только из-за того, что внесенные данные внеслись в ТЧ формы, но не отображаются на форме динамически (т.к. записи вновь созданного дока не было)? в результате, делаем кучу манипуляций, создаем новый экзепляр формы, заполняем его ТЧ данными, и уже его даем пользователю на редактирование?
35. Александр Гладких (yku) 262 28.02.12 00:07 Сейчас в теме
(0) Сегодня с товарищем разбирали данную задачку. И нашли-таки решение:

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт	
	
	СписокЭлементов.ЗагрузитьЗначения(ОбъектыНазначенияМассив);
	
	ЭтаФорма.Открыть();
	
	ПодключитьОбработчикОжидания("ПроцедураОбработкиОбъектов", 0.1, Истина);
	
КонецПроцедуры	

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


СписокЭлементов - в форму обработки добавлен реквизит типа "список значений".
И есть недостаток - ненадолго открывается форма обработки.
Огонек; Val300; БольшойЧайник; Поручик; new1c; +5 Ответить 2
36. Александр Гладких (yku) 262 28.02.12 01:05 Сейчас в теме
Дальнейшее, может быть, является очевидным. Однако, у меня на разбор полётов ушло около часа.

----
[ Всё, что далее написано, относится к получению формы через "Окно.ПолучитьСодержимое()", а не ОткрытьФорму(...) ]

И вообще, начал копать, почему же так происходит. Оказалось, что получив объект формы, и изменив данные у этого объекта, отображение данных на форме тоже меняется. Но затем, после завершения процедуры "ВыполнитьКоманду", закрывается окно списка обработок, управление передается в модуль команды. После чего из-за того что у команды стоит галочка "изменяет данные" данные формы обновляются (т.е. восстанавливаются) из ссылки.

Способ в (35) как раз обходит этот момент. Так как, после всего этого форма обработки у нас остается открытой, и вызывает подключенный обработчик. И при вызове его закрывается.

Примечательно, что у команды вызова печатных форм, такой галочки нет. И данные на форме должны оставаться такими, какими мы и хотим без всяких финтов ушами.
37. Евгений Мазай (salus) 17 16.08.12 09:55 Сейчас в теме
(35) yku,
Начиная с УТ 11.0.8.13 данный механизм обновления формы перестал работать. Что изменилось?
38. Александр Гладких (yku) 262 20.08.12 10:36 Сейчас в теме
(37) salus,
С УТ 11 я сталкиваюсь крайне редко. А так, не разбирался.
39. Евгений Мазай (salus) 17 20.08.12 10:54 Сейчас в теме
(38) yku,
Посмотрите, пожалуйста, вот это http://infostart.ru/public/148039/. Все прекрасно работала на старом релизе, а на новом до закытия формы обработки.
40. Александр Гладких (yku) 262 20.08.12 11:11 Сейчас в теме
(39) salus,
Не верю что это связано с обновлением УТ. Ваш код и в более ранних версиях УТ должен работать точно так же как и сейчас.
Достоверность (37) ставится под сомнение.

PS. Не нашел своего кода в вашей обработке (точнее, ключевой "фишки"). Так что вопрос не ко мне. Либо вопрос не так сформулирован.
41. Евгений Мазай (salus) 17 20.08.12 11:25 Сейчас в теме
(40) yku,
"Не нашел своего кода в вашей обработке (точнее, ключевой "фишки")"
Если можно, то расшифруйте Вашу фразу. Хоть какая-то дополнительная информация.

"Не верю что это связано с обновлением УТ. Ваш код и в более ранних версиях УТ должен работать точно так же как и сейчас.
Достоверность (37) ставится под сомнение. "

Это же можно легко проверить. Вся инфомация доступна.
42. Евгений Мазай (salus) 17 20.08.12 11:28 Сейчас в теме
(40) yku,
И еще. Оно и работает на более ранних версиях.
43. Александр Гладких (yku) 262 20.08.12 11:31 Сейчас в теме
(42) salus,
Как всегда, время - вот чего не хватает.
Но заинтригован. Скачаю. Проверю на 11.0.7
44. Евгений Мазай (salus) 17 20.08.12 11:41 Сейчас в теме
(41) salus,
"Не нашел своего кода в вашей обработке (точнее, ключевой "фишки")"
Если можно, то расшифруйте Вашу фразу. Хоть какая-то дополнительная информация. И все это много времени не требует...
45. Александр Гладких (yku) 262 20.08.12 12:47 Сейчас в теме
Разобрался.
(37) salus,
По крайней мере в УТ 11.0.7.18 присутствует ошибка в конфигурации. И видимо, в следующих релизах её исправили.
В коих механизм из моего комментария вполне работает.

PS. По поводу нежелания разжевывать детально. У вас интерес денежный, у меня же интерес... просто интерес.
46. Евгений Мазай (salus) 17 20.08.12 14:24 Сейчас в теме
(45) yku,

Если Ваш код в следующих конфигурациях работает, то это уже информация. Спасибо.
47. Андрей Артюхов (AndiA) 20.12.12 16:35 Сейчас в теме
По-моему лучше делать по другому
1. Перенаправить на открытие формы обработки
ДобавитьКоманду(ТаблицаКоманд,
"...",
"...",
"ОткрытиеФормы",
Истина,
"");
2. При создании формы обработки из параметров найти ссылку на вызывающий объект и сохранить куда-нибудь ссылку
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗагрузкаИзExel.ОбъектСсылка = Документы.УстановкаЦенНоменклатуры.ПустаяСсылка();
попытка
парам = ЭтаФорма.Параметры;
если парам.ОбъектыНазначения.Количество()>0 Тогда
ЗагрузкаИзExel.ОбъектСсылка = парам.ОбъектыНазначения[0];
КонецЕсли;
Исключение
КонецПопытки;
КонецПроцедуры
3. Заполнить форму документа интерактивно (либо если форма обработки не нужна в модуле ПриОткрытии)
&НаКлиенте
Процедура УстановитьЦены(Команда)

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

ДокФорма.Объект.Комментарий = "Загрузка из файла "+ЭтаФорма.ЗагрузкаИзExel.ИмяФайла;
ДокФорма.Объект.Ответственный = Пользователи.ТекущийПользователь();
найденацена = ложь;
если ВСуществующийДокумент тогда
для каждого стр из ДокФорма.Объект.ВидыЦен цикл
если стр.ВидЦены = ЭтаФорма.ЗагрузкаИзExel.ВидЦены тогда
найденацена = истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;

если не найденацена тогда
новстр = ДокФорма.Объект.ВидыЦен.Добавить();
новстр.ВидЦены = ЭтаФорма.ЗагрузкаИзExel.ВидЦены;
КонецЕсли;

для каждого стр из ЭтаФорма.ЗагрузкаИзExel.СписокРезультата цикл
если стр.НоменклатураСсылка<>ПустаяСсылкаСправочника("Номенклатура") Тогда
новстр = ДокФорма.Объект.Товары.Добавить();
новстр.Номенклатура = стр.НоменклатураСсылка;
новстр.Цена = стр.Цена;
новстр.ВидЦены = ЭтаФорма.ЗагрузкаИзExel.ВидЦены;
новстр.ЦенаИзмененаВручную = истина;
новстр.Характеристика = ВернутьХарактеристику(стр.Характеристика,стр.НоменклатураСсылка);
новстр.Упаковка = ВернутьУпаковку(стр.НоменклатураСсылка,стр.ЕдИзм);
КонецЕсли;
КонецЦикла;
ДокФорма.ПриСозданииНаСервере(Ложь, истина); // это чтобы форма этого заморочного документа правильно построилась
ДокФорма.Модифицированность = Истина;
ДокФорма.Открыть();
ЭтаФорма.Закрыть();
КонецПроцедуры
4. Не забыть в параметрах формы обработки создать параметр "ОбъектыНазначения"
kashafeev; Kaval88; +2 Ответить
48. vovlulus septium (volvulus) 20 18.02.13 16:40 Сейчас в теме
Почему-то никак не получается запустить обработку в управляемой форме в обычном приложении.
Постоянно выдает вот такую ошибку:

{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(201)}: Ошибка при вызове метода контекста (Подключить)
Возврат ВнешниеОбработки.Подключить(АдресВоВременномХранилище,, БезопасныйРежим);
по причине:
Ошибка подключения внешних метаданных
по причине:
Неправильный путь к файлу 'e1cib/tempstorage/49c11b29-ff5d-4612-aee4-7f8d785c2cda'
49. Андрей Чунихин (ApocalypseNTC) 765 19.02.13 06:52 Сейчас в теме
Добавь обработку в состав конфигурации. Внешняя обработка на управляемых формах не запустится в обычном приложении.
50. Алексей Алексеев (Aleksey_3) 11.03.13 14:18 Сейчас в теме
А подскажите почему может не вызываться форма обработки. Т.е. сделал обработку заполнения как тут написано, подключил её к БП 3.0. Она появилась в документе. Нажимаю заполнить ... и ничего, т.е. совсем нечего форма обработки не вызывается.

Я уже даже прописал

&НаСервере
Процедура ПриСозданииНаСервере()
Сообщить("ПриСозданииНаСервере");
1;
КонецПроцедуры

Т.е. модуль с ошибками - вообще никакой реакции. Скачал обработку, которая в статье - аналогично.

Что еще можно проверить?
51. Алексей Алексеев (Aleksey_3) 11.03.13 17:04 Сейчас в теме
вообщем так и не понял почему, но методом научного тыка скопировал в форму реализацию 2 процедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьНазначаемуюКоманду(Команда)
    
    Если НЕ ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуНаКлиенте(ЭтаФорма, Команда.Имя) Тогда
        РезультатВыполнения = Неопределено;
        ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаС­ервере(Команда.Имя, РезультатВыполнения);
        ДополнительныеОтчетыИОбработкиКлиент.ПоказатьРезультатВыполненияКоманды(ЭтаФорма, РезультатВыполнения);
    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Процедура ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаС­ервере(ИмяЭлемента, РезультатВыполнения)
    
    ДополнительныеОтчетыИОбработки.ВыполнитьНазначаемуюКомандуНаСервере(ЭтаФорма, ИмяЭлемента, РезультатВыполнения);
    
КонецПроцедуры
...Показать Скрыть



и всё заработало.
52. Angry (Angry) 11 29.03.13 12:35 Сейчас в теме
Пробовал в УТ 11.1 не работает. Исследования показали, что во всем виноват кусок кода в общей форме форме "ДополнительныеОтчетыИОбработки"

// Обновить форму владельца
Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда
Попытка
ВладелецФормы.Прочитать();
Исключение
КонецПопытки;
КонецЕсли;

Закомментировав выделенное всё заработало.
53. Николай Зайков (Mortiferus) 269 12.07.13 15:36 Сейчас в теме
Спасибо. Помогло. Все сработало без проблем.
54. Игорь Юндин (kereo) 53 08.08.13 18:26 Сейчас в теме
Попробуйте заменить
             //Зададим ключ поиска документа, из которого вызвана данная обработка,
             //чтобы получить ссылку на редактирумый документ в удобном виде для
             //функции ОткрытьФорму()
             КлючПоиска = Новый Структура("Ключ", Элемент);

             //Но нам не надо открывать новую форму (окно) для изменяемого документа, а
             //Нам надо все изменения показать в уже открытых у клиента окнах
             Окна = ПолучитьОкна();
             Для каждого Окно из Окна Цикл

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

                     //Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
                     //В объекте содержатся все реквизиты (элементы) формы
                     НовыйОбъект = Форма.Объект;

                     //Мы помещаем объект формы в переменную,
                     //так как должны передать её в процедуру на сервере,
                     //где нельзя изменять объект формы, зато можно править переменную содержащую его
                     ЗаполнитьОбъект(НовыйОбъект);

                     //После выполнения процедуры на сервере мы получаем изменную переменную НовыйОбъект,
                     //которую необходимо передать в уже полученную нами форму
                     КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
                 КонецЕсли;
             КонецЦикла;
...Показать Скрыть

на
Объект = ВладелецФормы.Объект;
ЗаполнитьОбъект(Объект);
DedMoroz1983; Spacer; yku; Val300; +4 Ответить
55. Дмитрий Ярославцев (DimanYa) 14.08.13 10:38 Сейчас в теме
Теперь такая морока стала с заполнением табличных частей по сравнению с обычными формами.
Раньше действие было простое, а теперь занимает в 10 раз больше времени.
И я может не нашёл, но факт если у человека много табличных частей на форме все внешнии обработки их заполнения будут лежать в общей кучи через кнопку "Заполнить"
56. Игорь Юндин (kereo) 53 16.08.13 11:44 Сейчас в теме
(55) DimanYa, А зачем вам в документе много табличных частей, которые заполняются обработкой?
57. Дмитрий Ярославцев (DimanYa) 16.08.13 12:14 Сейчас в теме
Ну на данном этапе в данном мне это не нужно. Но чисто гипотетически такая необходимость может возникнуть.

Представим, что у нас существует допустим 3-4 табличные части. Для каждой у нас есть своя внешняя обработка. Раньше пользователь видел под кнопокй заполнить кнопку для этой конкретной таблицы. Теперь же будет одна общая кнопка "Заполнить" и лишь по их названию можно понять, что и куда.

Я не говорю, что это сверх неудобно, просто чисто с точки удобства это ухудшение.

Кстати взять типой документ "Поступление товаров и услуг" у него 7 различных табличных части: Оборудование, ОбъектыСтроительства, Товары, Услуги, ВозвратнаяТара, ЗачетАвансов, АгентскиеУслуги.
58. Евгений Плешивцев (infosoft-v) 35 21.08.13 12:12 Сейчас в теме
Добрый день, коллеги.
Спасибо за всю информацию, которая помогла получить результат.
У меня обработка заполнения должна заполнять табличную часть документа "Заказ покупателя"
Обработка запускается из открытой формы существующего заказа это значит, что мне не нужно перебирать аргумент "ОбъектыНазначенияМассив" и я сразу беру первый элемент массива.

На форме обработки у меня расположена кнопка, по нажатию которой выполняется команда, к которой привязана процедура "ЗагрузитьЗаказ"


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
	
	// Ссылку на исходный документ сохраняю в реквизите обработки
	Объект.СсылкаНаОбъект = ОбъектыНазначенияМассив[0];
	
	Если НЕ ПустаяСсылка(Объект.СсылкаНаОбъект)Тогда
		// Мне нужно поучить от пользователя некоторую информацию информацию
		// для этого я открываю Форму внешней обработки заполнения объектов
		ЭтаФорма.Открыть();
	КонецЕсли;
	
КонецПроцедуры



&НаКлиенте
// Команда для кнопки формы внешней обработки
Процедура ЗагрузитьЗаказ(Команда)
	
	// Закрываю форму внешней обработки
	ЭтаФорма.Закрыть();
	
	// Повторно открываю форму нужного объекта, 
	// в моём случае это Документ "Заказ клиента"
	// Если форма уже открыта, то повторного открытия не происходит,
	// но возвращается объект "Управляемая форма"
	Параметр = Новый Структура("Ключ", Объект.СсылкаНаОбъект); 
	Форма = ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметр);
	ОбъектФормы = Форма.Объект;
	
	// Далее ваша функциональность
	ОбъектФормы.Комментарий = формат(ТекущаяДата());
	
КонецПроцедуры
...Показать Скрыть
el-gamberro; +1 Ответить
59. Alister (Alister) 9 09.09.13 13:33 Сейчас в теме
Спасибо, помогло разобраться, как сделать у себя.
60. Irina L (IrinaL___) 11.10.13 10:27 Сейчас в теме
61. Вячеслав Круглов (Slava.62.ru) 19 16.10.13 15:37 Сейчас в теме
Благодарю мучился сам долго. (
62. Людмила Вальская (Вальская Людмила) 4 17.10.13 10:42 Сейчас в теме
63. Виталий Долматов (VADol) 24.10.13 15:24 Сейчас в теме
Спасибо! Тоже долго маялся! Помогло!
65. Андрей Малышев (AndrewM) 28.10.13 17:07 Сейчас в теме
66. ghOst Bu (ilonnaa) 29.10.13 14:46 Сейчас в теме
Спасибо огромное! Очень помогло!

"...в модуле формы обработки, а значит создадим любую форму обработки, пользователь её всеравно не увидит...:"

Вот это был ключевой момент)
67. Михаил Скряга (PRO100_NigGaZ) 31.10.13 08:33 Сейчас в теме
У меня открывает новое окно :( (перед этим я открываю форму печформы модально)
68. Татьяна (svetanik) 3 11.11.13 06:03 Сейчас в теме
Очень помогла статья, а также комментарий infosoft-v. СПАСИБО!
Заполняю Заказ (УТ11.1) данными из внешнего файла, сохраняю, но Состояние Обеспечения не видит данных для анализа. В чем может быть дело?
69. Евгений Добрынин (CTDEVIce) 6 18.02.14 10:01 Сейчас в теме
Отлично все отработало. Только вот возникла проблема - документ остался незаполненным. Начал разбираться. Сразу после команды КопироватьДанныеФормы(НовыйОбъект, Форма.Объект); объект заполнен, из цикла выходит, а потом форма чистится. Такое ощущение, что чистится в методе конфиги, который вызвал метод клиента ВыполнитьКоманду().

Конфигурация Розница 2.0, полугодовой давности.
70. Евгений Добрынин (CTDEVIce) 6 18.02.14 10:13 Сейчас в теме
Еще одна особенность. В вызове клиента открываю форму для ввода данных от пользователя. Открываю модально. В остальном вроде все то же самое. Щас конфигу посмотрел - не увидел чтобы форма чистилась или обновлялась после вызова клиентского метода.
71. Саньку Студент (filterhouse) 2 01.04.14 09:44 Сейчас в теме
Отличная статья, долго искал, хоть какое то описания, а тут прям готовый пример.
72. Леван Иремадзе (IRLes) 183 09.04.14 23:36 Сейчас в теме
Как-то сложно написано, можно же проще. Я не вникал как там со счетами-фактурами, но заполнить таблицу можно очень просто и не нужно столько кода.
Если это общеобразовательный пример, а не частный случай, то, возможно вариант ниже будет более понятным?
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт

	Для каждого СсылкаНаОбъект Из ОбъектыНазначения Цикл

		ФормаОбъекта 	= ПолучитьФорму(ПолучитьПолноеИмяДокумента(СсылкаНаОбъект)+".ФормаОбъекта", Новый Структура("Ключ", СсылкаНаОбъект));
		ОбъектСсылки 	= ФормаОбъекта.Объект;
		Запасы 		= ОбъектСсылки.Запасы;
		НовСтр          = Запасы.Добавить();
		
	КонецЦикла; 
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьПолноеИмяДокумента(СсылкаНаОбъект)
	
	Возврат СсылкаНаОбъект.Метаданные().ПолноеИмя(); 
	
КонецФункции
...Показать Скрыть

Но все-равно спасибо, навело на мысль сделать проще :)
scanner1980; exitel; svilsa; jmi; +4 Ответить 1
73. Александр Злобин (elian) 62 03.05.14 22:02 Сейчас в теме
Мне одному кажется, что поиск открытых окон - это явный колхоз? Кто ни будь подскажет ссылку на документацию по БСП или пример обработки из лабораторий 1С, где делается именно так? Вот обработка _ДемоДополнительнаяОбработкаЗаполненияНазначаемая из БСП, в ней нет никакого поиска открытых окон...
74. Андрей Чунихин (ApocalypseNTC) 765 21.05.14 08:00 Сейчас в теме
(72) Правильное решение.
Сейчас эта публикация не должна быть актуальна, так как она создавалась еще на первых релизах УТ 11. Когда БСП только появлялась, когда не хватало информации из общих источников.
(73) Поэтому спустя 3 года после публикации говорить, что это колхоз бессмысленно. На тот момент это была единственная известная мне публикация с необходимым решением. Сейчас можно книжку купить или в любой конфигурации на управляемых формах подсмотреть.
svilsa; UnsavedSoul; kyrasol; dimaster; +4 Ответить
75. Оля Белозерова (XelOla) 14 02.08.14 23:20 Сейчас в теме
76. Анна Ни (Anyu-n) 26 02.12.14 16:00 Сейчас в теме
Ребят, все эпик.... обработка классная... вроде все понятно, но столкнулось с засадой РЕКВИЗИТ ТАБ.ЧАСТИ КОЛИЧЕСТВО..
уТ 11.1.9.51 Пытаюсь по кнопке изменить колонку количество (в доп.реквизитах лежит число, его нужно кинуть в таблицу) Причем так же меняю цену - все делается как мне нужно! А количество - никак....

Это моя функция действия:
Процедура ЗаполнитьДокумент(ДокументОбъект)

ТЗ=ДокументОбъект.Товары.Выгрузить();
ДокументОбъект.Товары.Очистить();
ном=0;
кол= ДокументОбъект.ДополнительныеРеквизиты.Количество();
Пока ном < кол цикл
Если ДокументОбъект.ДополнительныеРеквизиты.Получить(ном).свойство.заголовок="Кол-во ЛИТРОВ" тогда
ТЗ[0].количество = ДокументОбъект.ДополнительныеРеквизиты[ном].значение;
КонецЕсли;
Если ДокументОбъект.ДополнительныеРеквизиты.Получить(ном).свойство.заголовок="Цена ЛИТРАЖ" тогда
ТЗ[0].цена = ДокументОбъект.ДополнительныеРеквизиты[ном].значение;
КонецЕсли;

ном=ном+1;
КонецЦикла;
ДокументОбъект.Товары.Загрузить(ТЗ);


Потом загружаю....

&НаКлиенте
Процедура Загрузить(Команда)

// Обновляем форму документа
ИмяДокумента = ПолучитьИмяМетаданныхДокумента(Объект.СсылкаНаДокумент);
Окна = ПолучитьОкна();
Для каждого Окно из Окна Цикл
Если НЕ Окно.Основное
И Найти(Окно.Заголовок, Объект.СсылкаНаДокумент) Тогда
ФормаДокумента = Окно.ПолучитьСодержимое();
Если Не ФормаДокумента = Неопределено Тогда
ФормаДокумента.Закрыть();
КонецЕсли;
ФормаДокумента = ОткрытьФорму("Документ."+ИмяДокумента+".Форма.ФормаДокумента",Новый Структура("Ключ", Объект.СсылкаНаДокумент),,,Окно);
НовыйОбъект = ФормаДокумента.Объект;
ЗаполнитьДокумент(НовыйОбъект);
КопироватьДанныеФормы(НовыйОбъект, ФормаДокумента.Объект);
ФормаДокумента.Объект.товары[0].количество=НовыйОбъект.товары[0].количество; //я уже и так пыталась
КонецЕсли;
КонецЦикла;
// Обновляем форму списка
ОповеститьОбИзменении(Тип("ДокументСсылка."+ИмяДокумента));

// Закрываем форму обработки
ЭтаФорма.Закрыть();

КонецПроцедуры
В итоге цена меняется, а количество прежнее..... :'(
Уже и отладчиком проходила вроде цифра из доп.реквизитов стоит... а в форме не обновляется... помогите.... я же делала по вашей методике
77. Анна Ни (Anyu-n) 26 03.12.14 11:15 Сейчас в теме
Жесть.. методом проб и ошибок выяснила, что менять нужно реквизит ФормаДокумента.Объект.товары[0].количествоупаковок
Причем в настройках Номенклатуры галочка с "упаковок номенклатуры" СНЯТА
Я может что пропустила... зачем тогда в табличной части реквизит "КОЛИЧЕСТВО"? если есть Реквизит "КоличествоУпаковок"
78. Кирилл Ширинский (el-gamberro) 45 15.02.15 18:41 Сейчас в теме
Спасибо за общение. Покурил. Общее решение нашел такое:

Парам = Новый Структура("Ключ", Объект.СсылкаНаОбъект); //это передали в форму заполнения
Форма = ПолучитьФорму("Документ.ОтчетКомитентуОПродажах.Форма.ФормаДокументаОПродажах",Парам); //окна не ищем, переполучаем уже открытое
Форма.ЭтотОбъект.Прочитать(); //обновляем нашу форму, перед этим сам объект-документ в базе уже заполнен и сохранен (записан, проведен)
igor-pn; sg12; Magnastrag; +3 Ответить 1
79. Igor Provotorov (ivprovotorov) 7 20.02.15 08:32 Сейчас в теме
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт 
	типц = ПолучитьТипЦенДляВозвратов();
	
	для каждого воз из ОбъектыНазначенияМассив цикл

		Сообщить(""+ТипЗнч(воз)+" "+воз+" "+ТекущаяДата());  // тут нормально выходит сообщение

		УстановитьСебестоимость(типц, воз);

	КонецЦикла;

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


&Насервере
Функция УстановитьСебестоимость(типц, воз)
	Сообщить(""+ТипЗнч(воз)+" "+воз);  // тут тишина

	сообщ = ""; 
	объ = воз.ссылка.получитьобъект();
	для каждого тов из объ.товары цикл
		..............................................
	КонецЦикла;
	
	Попытка
		объ.записать();
	Исключение
		сообщ = сообщ + "Не удалось записать документ " + воз.ссылка + " " + ОписаниеОшибки();
	КонецПопытки;
	
	Возврат сообщ;
КонецФункции
...Показать Скрыть


Обработка заполнения нормально подключилась. Кнопка "Заполнение" появилась. При нажатии на кнопку сообщение из процедуры ВыполнитьКоманду нормально выходит. А из функции УстановитьСебестоимость полная тишина, ни моих сообщений, ни сообщений об шибках, как будто в функции ни одной строчки кода.

Когда запустил обработку через меню "Файл - Открыть" и вручную вызвал процедуру ВыполнитьКоманду, всё отработало без замечаний.

&НаКлиенте
Процедура тест(Команда)  //запускается кнопкой на форме
	мас = новый Массив;

	для каждого воз из элементы.список.ВыделенныеСтроки цикл
		мас.Добавить(элементы.список.данныестроки(воз).Ссылка);
	КонецЦикла;

	ВыполнитьКоманду("",мас);

КонецПроцедуры
...Показать Скрыть

1С:Предприятие 8.3 (8.3.5.1460)
1С:Предприятие 8. Общепит (3.0.33.19)
80. Dexter Morgan (DexterMorgan777) 3 29.04.15 16:40 Сейчас в теме
81. Рифат Нурмухаметов (rif-nrr) 8 13.06.15 14:31 Сейчас в теме
Полезная статья, автор, спасибо за труд! Сделал свою на основе статьи - все получилось.
82. Оля Белозерова (XelOla) 14 05.09.15 00:51 Сейчас в теме
Будьте добры
я пытаюсь создать заполнение Авизо по расчетам исходящее на основании Поступление товаров и услуг
использую вашу СведенияОВнешнейОбработке
ругается на
{ОбщийМодуль.ДополнительныеОтчетыИОбработкиКлиент.Модуль(505)}: Недостаточно фактических параметров
ФормаВнешнегоОбъекта.ВыполнитьКоманду(ПараметрыВызоваСервера.ИдентификаторКоманды, ПараметрыВызоваСервера.ОбъектыНазначения);
откуда эта ошибка идет из модуля объекта или модуля формы?
83. Андрей Чунихин (ApocalypseNTC) 765 07.09.15 07:29 Сейчас в теме
84. Валера Мартиков (valeriy-vm) 29 16.09.15 22:23 Сейчас в теме
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УстановкаСебестоимостиТовары.Номенклатура,
| МАКСИМУМ(УстановкаСебестоимостиТовары.Цена) КАК Цена
|ИЗ
| Документ.УстановкаСебестоимости.Товары КАК УстановкаСебестоимостиТовары
|ГДЕ
| УстановкаСебестоимостиТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| УстановкаСебестоимостиТовары.Номенклатура";
Запрос.УстановитьПараметр("Ссылка",Объект.СсылкаДок);
ОбДок = Объект.СсылкаДок.ПолучитьОбъект();
ОбДок.Товары.Загрузить(Запрос.Выполнить().Выгрузить());
ОбДок.Записать();
85. Aleksandr Shilov (Magnastrag) 20.10.15 16:56 Сейчас в теме
(78) el-gamberro, Спасибо огромное, выручил.
86. Сергей Беленченко (svbel85) 18 30.01.16 10:36 Сейчас в теме
Спасибо за статью, я уже голову себе сломал как из одного документа заполнять другой не записывая заполняемый, это так легко делалась раньше без БСП, а теперь окна приходится открытые перебирать.... очень странно
87. Игорь Вахнин (Vahnin) 14.02.16 22:31 Сейчас в теме
Если использовать ВызовКлиентскогоМетода, выполняется процедура ВыполнитьКоманду в модуле формы.
У формы обработки есть реквизит ВладелецФормы. Через него и можно редактировать все, что вашей душе угодно. Если конечно не запускать обработку из формы списка.
88. Сергей Иванов (o3ophuk) 11.03.16 00:07 Сейчас в теме
Спасибо автору поста.
Если актуально - в результате у меня получился такой код(Задача была изменить цену на определенный коэффициент без записи документа для розницы 2.1.4):

////////////////////////////////////////////////////////////////////////////////
// Клиент - Программный интерфейс

&НаКлиенте
Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения) Экспорт

	Открыть();
	
КонецПроцедуры

////////////////////////////////////////////////////////////­////////////////////
// Клиент

&НаКлиенте
Процедура ИзменитьЦену(Команда)
	// Вставить содержимое обработчика.
	
	Если НЕ ЗначениеЗаполнено(Коэффициент) Тогда
		Возврат;
	КонецЕсли;
	
    Для каждого Элемент из ОбъектыНазначения Цикл

                НовыйОбъект = ВладелецФормы.Объект;
		ЗаполнитьОбъект(НовыйОбъект);
		КопироватьДанныеФормы(НовыйОбъект, ВладелецФормы.Объект);
		
		ОбработкаТабличнойЧастиТоварыКлиентСервер.ОбновитьСуммыПодвала(ВладелецФормы.Объект.Товары, ВладелецФормы.Объект.ЦенаВключаетНДС, ВладелецФормы.СуммаВсего);
		
		//ОбработкаТабличнойЧастиТоварыКлиент.ПриИзмененииРеквизитовВТЧКлиент(ТЧ, ТекущаяСтрока, СтруктураДействий, ВладелецФормы.КэшированныеЗначения);
		
		ВладелецФормы.СуммаКОплате = ВладелецФормы.СуммаВсего - ВладелецФормы.СуммаОплачено - ВладелецФормы.СуммаВзаимозачет;
				
		ВладелецФормы.РедактированиеТЧТовары = Истина;
		ВладелецФормы.Модифицированность = Истина;
		
    КонецЦикла;	
	
	Закрыть();
	
КонецПроцедуры

&НаСервере
Функция ЗаполнитьОбъект(Форма)
	
	ТЧ = Форма.Товары;
	Для Каждого Строка Из ТЧ Цикл
		
		Строка.Цена = Строка.Цена * Коэффициент;
		Строка.Сумма = Строка.Цена*Строка.Количество;
		
	КонецЦикла;
	
	Форма.СуммаДокумента = ТЧ.Итог("Сумма");
	
КонецФункции
...Показать Скрыть
89. Алексей Че (dklp) 13 21.04.16 12:17 Сейчас в теме
подскажите, как отключить проверку записанности объекта перед вызовом обработки заполнения? это только через Конфигуратор можно сделать?
90. Михаил (mikl79) 102 29.04.16 11:42 Сейчас в теме
Спасибо, впервые сегодня написал обработку заполнения табл.части на базе вашей обработки.
Было бы круто если бы был пример вызова окна перед заполнением, в котором можно выбрать какие-нибудь параметры заполнения (например, другой документ).
91. Михаил (mikl79) 102 29.04.16 11:44 Сейчас в теме
Почему обработка не передает признак модифицированности?
92. Эдуард Назыров (alabuga) 19.05.16 10:58 Сейчас в теме
(90) mikl79, там тоже самое. Но лучше сделать так
1) в функции СведенияОВнешнейОбработке() ставишь "ОткрытиеФормы" вместо "ВызовКлиентскогоКетода"
2) кидаешь на форму нужные параметры и кнопку "заполнить" привязываешь к ней процедуру "ВыполнитьКоманду" (можешь назвать по своему)
и все.
P.S. очевидно команда Открыть() уже не нужна, сразу можно заполнять
93. Игорь П.Н. (igor-pn) 69 30.05.16 00:34 Сейчас в теме
Пример, на основе БСП, который мне помог.Текст просто вставляем в модуль объекта, форму в обработку вообще не добавляем. В итоге меняем реквизиты формы объекта (в нашем случае справочник "Склады"), но не записываем ее.


////////////////////////////////////////////////////////////­////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС

#Область ПрограммныйИнтерфейс

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

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

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

////////////////////////////////////////////////////////////­////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

#Область СлужебныеПроцедурыИФункции

// Обработчик команды.
Процедура ЗаполнитьНаименование(Форма, РезультатВыполнения)
	
	Форма.Объект.наименование = "111111111111111111111111111111111111111111111111111111";
	Форма.Модифицированность = Истина;
	
	СтандартныеПодсистемыКлиентСервер.ВывестиСообщение(
		РезультатВыполнения,
		НСтр("ru = 'Поле ""Наименование"" успешно заполнено'"),
		"Объект.Наименование");
	
КонецПроцедуры

#КонецОбласти
...Показать Скрыть
94. Вячеслав Павелко (slawanix) 10 18.08.16 11:44 Сейчас в теме
Прочитал статью вместе с комментариями. Изначально тема неправильно раскрыта, поэтому и вопросов много.
По существу нет никаких проблем с блокировками. Достаточно к табличной части обратиться через свойство ВладелецФормы. Делается это примерно так (демо):

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


Тип значения свойства ВладелецФормы - УправляемаяФорма.
Все отлично отрабатывает. При этом у обработки должен быть Вид = ЗаполнениеОбъекта, а у Команды тип = ВызовКлиентскогоМетода.
Весь модуль объекта у меня выглядит так:
#Область РегистрацияОбработки

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

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

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

#КонецОбласти
...Показать Скрыть


У обработки должна быть создана Форма, на которой не нужно создавать никаких команд, объектов и элементов управления. В ней должна быть только Экспортная процедура ВыполнитьКоманду, текст команды см. выше.
Хочу отметить отдельно и заострить на этом внимание: Не смотря на то, что у добавляемой Команды (см. текст МодуляОбъектов) устанавливается тип ВызовКлиентскогоМетода, в модуле формы можно, при необходимости, создавать процедуры и функции, исполняемые на сервере и обращаться к ним из процедуры Выполнить(). Никаких ограничений я не обнаружил.
95. Евгений я (DedMoroz1983) 02.11.16 08:53 Сейчас в теме
Полезно. Статья помогла сделать свою обратотку, заполнения дополнительных реквизитов, без изменения основной формы, а с помощью формы отбработки.
96. Ольга Татаринова (viktorinka777) 04.01.17 12:23 Сейчас в теме
(94) Мне нужно сделать заполнение ТЧ результатом запроса. Вызываю серверную процедуру. Что в нее передать? и как тогда обновлять форму?
97. Вячеслав Павелко (slawanix) 10 04.01.17 20:17 Сейчас в теме
(96), что передать в серверную процедуру зависит от Вашей задачи, в некоторых случаях можно вообще ничего не передавать... Как вариант, можно в серверной функции выполнить запрос, результат запроса передать обратно на Клиент и там заполнить ТЧ. Форму никаким специальным образом обновлять не придется, при заполнении само все обновится.
viktorinka777; +1 Ответить 1
98. Александр Полетаев (Alias) 34 10.02.17 18:51 Сейчас в теме
(94) Большое спасибо. Действительно, всё просто... А я-то провозился с этой проблемой (открыть свою форму для выбора параметров заполнения и заполнить потом форму документа без записи).

В ВыполнитьКоманду() вставил всего две строки
ЭтаФорма.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
ЭтотОбъект.Открыть();

чтобы открылась форма обработки заполнения. А там уже -- полная свобода, и общение с заполняемой формой как Вы и сказали, через ВладелецФормы.Объект

Помогли.
99. Вячеслав Павелко (slawanix) 10 10.02.17 20:29 Сейчас в теме
(98), пожалуйста, рад, что мое сообщение Вам помогло.
100. Михаил Кончаренко (Anchoret) 17 16.03.17 16:06 Сейчас в теме
Остался вопрос, как обновить отображение данных на форме, чтобы сразу увидеть изменения?
101. Вячеслав Павелко (slawanix) 10 18.03.17 13:22 Сейчас в теме
(100), смотри сообщения (94), (97). Этого должно быть достаточно.
102. Михаил Кончаренко (Anchoret) 17 18.03.17 18:19 Сейчас в теме
(101)
Делал через ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта()

В модуле объекта после заполнения, достаточно вызвать метод формы Прочитать()
Оставьте свое сообщение