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

1. DeniNikitin 36 16.12.17 10:38 Сейчас в теме
Здравствуйте!

1.При проведении документа вызывается подписка на событие и создаётся новый документ с другой организацией и данными, необходимо вызвать процедуры формы документа? Как можно вызвать эти процедуры и можно ли вообще?
2.Но так как в этих процедурах используеться параметр форма, при создании формы в модуле подписки на событие форму создать не возможно.

Как поступить в данной ситуации лучше?

Заранее благодарен!
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1484 16.12.17 11:20 Сейчас в теме
(1) это было возможно только в толстом клиенте обычной формы. Переписывай код на сервере!
+
3. DeniNikitin 36 16.12.17 12:08 Сейчас в теме
Про не возможно вопрос спорный, во внешней обработке все без проблем реализуется, возникает вопрос как в модуле подписке получить форму и выполнить процедуры!
+
4. Xershi 1484 16.12.17 12:09 Сейчас в теме
(3) форма это объект клиента, подписка работает на сервере, вывод? Никак!
+
5. Xershi 1484 16.12.17 12:10 Сейчас в теме
Пока уже книжки по УФ почитать раз понимания нет.
+
6. DeniNikitin 36 16.12.17 12:28 Сейчас в теме
Тогда минус 1С с такой реализацией, для того чтобы переписать на сервер процедуру приизменении в комплексной, проще написать всё заного и заполнить по реквизитно все реквизиты, т.к. в типовой весде используется форма при пересчётах и.т.д. в большинстве случаев, а не объект!
+
7. DeniNikitin 36 16.12.17 12:29 Сейчас в теме
На обычных вызвал ОбщийМодуль.порыпвфыоррп(Объект) и всё нормально, а тут всё через ж......
+
11. Xershi 1484 16.12.17 12:57 Сейчас в теме
(7) это на обычных через Ж как вы выразились.
Раньше сервер на ОФ был только в регламентных заданиях.
А потом попробуй переписать все когда кодят так как вы привыкли))
Так что привыкайте (отвыкайте от говнокода) и учитесь!
+
8. DeniNikitin 36 16.12.17 12:36 Сейчас в теме
Это в форме делается в зуп 3.1

&НаКлиенте
Процедура Подключаемый_ПорядокВыплатыПриИзменении(Элемент)

ПорядокВыплатыПриИзмененииНаСервере();

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

&НаСервере
Процедура ПорядокВыплатыПриИзмененииНаСервере(УстановитьПланируемуюДатуВыплаты = Истина)

ОбязательныйРасчетНДФЛ = УчетНДФЛРасширенный.ДоходыВУчетеНДФЛРегистрируютсяПоДатеВыплаты(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект.Начисление));

УстановитьВидимостьРеквизитовМежрасчетнойВыплаты(ЭтаФорма);

Если УстановитьПланируемуюДатуВыплаты Тогда
РасчетЗарплатыРасширенныйКлиентСервер.УстановитьПланируемуюДатуВыплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
КонецЕсли;


Если Не Объект.РассчитыватьУдержания Тогда
Объект.Удержания.Очистить();
Объект.НДФЛ.Очистить();
Объект.КорректировкиВыплаты.Очистить();
Объект.ПримененныеВычетыНаДетейИИмущественные.Очистить();
КонецЕсли;

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

УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);

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

Показать


А в этой процедуре РасчетЗарплатыРасширенныйКлиентСервер.УстановитьПланируемуюДатуВыплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма)); не три строчки кода и если нет возможности вызвать это с сервера или без формы в чём смысл? Тогда чтобы программно создать документ в 1С надо писать новые модули без эта форма!!!
+
9. DeniNikitin 36 16.12.17 12:39 Сейчас в теме
И это я привел процедуры, которые можно переписать за 30 минут, а в ка где кода в процедуре по 2000-3000
+
10. Xershi 1484 16.12.17 12:56 Сейчас в теме
(9) большинство кода выполняется на сервере, если разработчики перевели это на клиент, то вам придется попотеть, чтобы реализовать, то что вам нужно!
Ну или пишите разработчикам, чтобы они код переписали на сервер, а далее вам останется 3 строки кода написать как вы и хотели!
+
12. DeniNikitin 36 16.12.17 12:58 Сейчас в теме
Это понятно, что ничего они не перепишут! Единственный выход сейчас пишу обработку, которая будет запускаться в конце дня и там все это делать, т.к. в обработке это реализовываю без проблем!
+
13. DeniNikitin 36 16.12.17 13:01 Сейчас в теме
Ну да не спорю, сидеть и тратить неделю для того чтобы написать программное заполнение документа - это быстрей!
+
14. DeniNikitin 36 16.12.17 13:02 Сейчас в теме
ДопПараметры = ЗакупкиСервер.ДополнительныеПараметрыОтбораДоговоров();
	ДопПараметры.ВалютаВзаиморасчетов = Объект.Валюта;
	ДопПараметры.ВариантОформленияЗакупок = ВариантыОформленияЗакупок(Объект.ХозяйственнаяОперация);
	Объект.Договор = ЗакупкиСервер.ПолучитьДоговорПоУмолчанию(Объект, 
		ХозяйственнаяОперацияДоговора, ДопПараметры);


ХозяйственнаяОперацияДоговора - это реквизит формы, который опять же заполняется при изменении контрагента или организации и.т.д.

К примеру сейчас чтобы найти чем он заполняется я проваливался в 9 процедур в отладчике!!!
+
15. DeniNikitin 36 16.12.17 13:03 Сейчас в теме
Конечно быстрей, чем ОбщийМодуль.порыпвфыоррп(Объект), где объект - это документ!!!
+
16. DeniNikitin 36 16.12.17 13:05 Сейчас в теме
Я не против, сервера, просто приизменении могли бы просто выполнить по документу, а потом просто в значениеформы или аналог сейчас не помню, чтобы обновить форму!
+
17. Xershi 1484 16.12.17 13:11 Сейчас в теме
(16) поищи серверные вызовы, они явно там есть просто ты не нашел!
+
18. DeniNikitin 36 16.12.17 13:17 Сейчас в теме
Они есть там я не спорю! Но всё берётся из коллекции формы даже организация меняется Форма.Объект.Организация = , а просто серверной где передал документ и там всё рассчиталось не нашёл пока!
+
19. DeniNikitin 36 16.12.17 14:04 Сейчас в теме
Может кому интересно в обработке наворотил вот так!

&НаСервере
Функция СформироватьДокументПоступленияТоваров(СсылкаНаОбъект)
//СсылкаНаОбъект = Документы.ПриобретениеТоваровУслуг.СоздатьДокумент();
СтарыйДокумент = СсылкаНаОбъект.ПолучитьОбъект();

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Deni_Nikitin_СоответствиеОрганизаций.ОрганизацияДокумент КАК ОрганизацияДокумент,
| Deni_Nikitin_СоответствиеОрганизаций.Склад КАК Склад,
| Deni_Nikitin_СоответствиеОрганизаций.ОрганизацияПолучатель КАК ОрганизацияПолучатель
|ИЗ
| Справочник.Deni_Nikitin_СоответствиеОрганизаций КАК Deni_Nikitin_СоответствиеОрганизаций
|ГДЕ
| Deni_Nikitin_СоответствиеОрганизаций.ОрганизацияДокумент = &ОрганизацияДокумент
| И Deni_Nikitin_СоответствиеОрганизаций.Склад = &Склад";

Запрос.УстановитьПараметр("ОрганизацияДокумент", СтарыйДокумент.Организация);
Запрос.УстановитьПараметр("Склад", СтарыйДокумент.Склад);

РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Если РезультатЗапроса.Количество() = 0 Тогда
Возврат "";
КонецЕсли;

НовыйДокумент = СтарыйДокумент.Скопировать();
НовыйДокумент.Дата = СтарыйДокумент.Дата;
НовыйДокумент.Организация = РезультатЗапроса[0].ОрганизацияПолучатель;
НовыйДокумент.Комментарий = "Сформирован автоматически на основании документа " + СокрЛП(СтарыйДокумент.Ссылка);
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);

Возврат НовыйДокумент.Ссылка;

КонецФункции

&НаСервере
Функция ВернутьДокументыПоступленияТоваров()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриобретениеТоваровУслуг.Ссылка КАК Документ
|ИЗ
| Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг
|ГДЕ
| ПриобретениеТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";

Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(Объект.ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(Объект.ДатаОкончания));

РезультатЗапроса = Запрос.Выполнить().Выгрузить();
МассивДокументы = РезультатЗапроса.ВыгрузитьКолонку("Документ");

Возврат МассивДокументы;

КонецФункции

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

&НаКлиенте
Процедура СформироватьДокументы(Команда)
СформироватьПоступленияТоваров();
КонецПроцедуры

Показать
+
20. DeniNikitin 36 16.12.17 14:21 Сейчас в теме
Но теперь другой геморой вылез в форме всё поменялось, а вот как в объект изменения записать не знаю?
+
21. DeniNikitin 36 16.12.17 14:26 Сейчас в теме
(20) ФормаДокумента.Записать();
+
22. Xershi 1484 16.12.17 14:51 Сейчас в теме
Ясно, вы писатель, а не читатель))
Еще раз говорю почитайте книжки, ну или справку, если уровень книжек переросли.
+
23. DeniNikitin 36 16.12.17 16:15 Сейчас в теме
Хорошо раз вы такой спец, ка 2.4 необходимо создать при проведение документа "Приобретение Товаров и Услуг" Новый документ с другой организацией, не могли бы Вы мне показать реализацию такой схемы с подписки о событии? Я просто хочу увидеть код профессионала и понять сколько времени на него уйдет?
+
24. DeniNikitin 36 16.12.17 16:18 Сейчас в теме
Просто хорошо, когда мы книжки читаем, а когда есть задачи практические и по возможности с меньшими трудозатратами, хорошо носом тыкать в книгу! Я не спорю может у меня теории и не хватает!
+
25. spacecraft 16.12.17 22:32 Сейчас в теме
(24) лень двигатель прогресса. Но если хотите стать настоящим программистом, то тупо подогнать существующее формирование документа через его форму, это показатель, попытки малой кровь сделать свою работу, которая не всегда оправдана.
Разработчики не побеспокоились облегчить вам свою работу. Но это не повод идти по наименьшему сопротивлению.
Может они и не хотели, чтобы из вне пытались влезть в их формирования бизнес логики.
если перед вами стоит задача внести программно ввод элемента, совсем не означает попытка вклиниться в их формирование. Первое, что нужно определить, это принцип формирования нужных реквизитов объекта для записи.
Если невозможно вклиниться в существующий порядок формирования, то разработайте свой.
А вот за попытку создания нового документа из обработчика проведения, я бы сразу увольнял. Ничего личного.
+
28. DeniNikitin 36 17.12.17 07:41 Сейчас в теме
(25) Мне интересно, если типовая конфигурация и единственное изменение создание типового документа, то почему я не могу пользоваться логикой разработчиков?
+
26. DeniNikitin 36 17.12.17 06:00 Сейчас в теме
Тогда вопрос для чего была создана подписка на событие "Проведение" документов? Я не лезу в модуль документа в проведение!
+
27. DeniNikitin 36 17.12.17 06:00 Сейчас в теме
Пока расширения не появились интересно в каком событии вы собирались при проведении создавать документ?
+
Внимание! Тема сдана в архив

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