|
Выполнить серверные методы модуля формы из вне | ☑ | ||
---|---|---|---|---|
0
Gregor09
29.08.19
✎
13:16
|
Есть веб-сервис, который должен создавать программно документ. В документе куча логики описана в коде модуля формы, который автоматически заполняет различные реквизиты документа. Соответственно это все выполняется только при интерактивном заполнении документа. Если бы у меня что-то выполнялось на клиенте, я бы мог создать документ, получить его форму и вызвать эти процедуры\функции формы.
Как можно решить эту задачу, подскажите? Переписывать в свой веб-сервис еще эти методы, которые выполняются в форме не хотелось бы, с очередным обновлением поменяется логика и все, либо каждый раз проверять после обновления. |
|||
1
Timon1405
29.08.19
✎
13:21
|
и правильно что не дает выполнить. ваш веб-сервис - потенциальный зловред для системы.
|
|||
2
Gregor09
29.08.19
✎
13:33
|
(1) Суть не в том, что веб-сервис потенциальный зловред. Суть вопроса в том, как программно создать документ и выполнить все обработчики, которые описаны в модуле формы, имея при этом только доступ на выполнение кода &НаСервере. Пусть это не веб-сервис будет, а регламентное задание.
|
|||
3
palsergeich
29.08.19
✎
13:35
|
(2) UГарантировано - никак.
Но если бизнес логика в форме - ошибка архитектуры. По хорошему в форме должны быть только обработчики событий, сама логика проверок, заполнений и прочего должна быть по минимуму реализвана на форме |
|||
4
palsergeich
29.08.19
✎
13:36
|
Возьми любую современную УТ, при изменении строки - вызов общего модуля, а не лапша на форме
|
|||
5
FIXXXL
29.08.19
✎
13:40
|
(4) да ну? а сбор стопиццот элементов структуры для пересчета строки?
и это хня может потенциально изменится из последнего - новый расчет НДС... |
|||
6
Gregor09
29.08.19
✎
13:45
|
(3) К сожалению, в ЗУПе куча документов, у которых логика описана в форме, либо в общем модуле, куда, правда, передается опять же форма.
|
|||
7
FIXXXL
29.08.19
✎
13:46
|
(6) в ЗУПе под такое дело, говорят, специальные обработки есть, которые делают расчет
|
|||
8
palsergeich
29.08.19
✎
13:47
|
(5) и что?
|
|||
9
palsergeich
29.08.19
✎
13:48
|
(5) Как правило на вход подаешь строку ТЗ или ДФК и получаешь результат, а реализация скрыта в ОМ. В том то вся и прелесть такого подхода
|
|||
10
catena
29.08.19
✎
13:48
|
(4)Ха! Любой УТ нет, но вот есть любой ЗУП. В итоге, конечно, можно докопаться до серверных процедур, но их вызов через такую лапшу на форме, что использование - те же самые заложенные грабли, что и перенос всего кода в обработку: логика может измениться в любой момент. Каждая попытка автоматизированного заполнения - боль.
|
|||
11
palsergeich
29.08.19
✎
13:49
|
(10) Так и начинайте с этого.
ЗУП это другая история совершенно. Как я должен об этом догадаться? А может документ самописный? |
|||
12
palsergeich
29.08.19
✎
13:51
|
(11) Это не отменяет того, что так делают нехорошие люди. И вообще ЗУП - это наказание(
|
|||
13
FIXXXL
29.08.19
✎
13:51
|
(8) на вход куда? "лапша" параметров собирается на форме
|
|||
14
Gregor09
29.08.19
✎
13:54
|
(6) Нашел топик, человек столкнулся с аналогичной проблемой в ЗУПе - Получить форму на сервере 1с
Придется пилить костыли и надеяться, что после очередного обновления ничего не сломается. |
|||
15
palsergeich
29.08.19
✎
13:57
|
||||
16
palsergeich
29.08.19
✎
13:58
|
(14) С ЗУПом сочувствую
|
|||
17
Loli_pop
29.08.19
✎
14:07
|
Странно, что передать форму в серверную процедуру можно и там работать с ней, а получить на сервере нельзя. В чем логика? Почему нельзя сделать, чтобы на сервере можно было бы получить такую же форму по ссылке, как и переданная на сервер форма?
|
|||
18
palsergeich
29.08.19
✎
14:10
|
(17) форму как параметр в серверную процедуру передать нельзя.
|
|||
19
palsergeich
29.08.19
✎
14:11
|
(18) будет ошибка - отсутствует отображение типа.
|
|||
20
Gregor09
29.08.19
✎
14:23
|
(18) Как это? В той же УТхе, форма документа Заказ, например, в модуле формы ctrl+f "(ЭтаФорма" - столько серверных процедур вызывается, куда в качестве параметра передается ЭтаФорма
|
|||
21
Gregor09
29.08.19
✎
14:24
|
(14) Кому интересно и на будущее, может кому-то пригодиться. Решил создавать документы без расчетных данных, а расширением при открытии формы проверяю, если данных нет, сообщаю пользователю, что документ не рассчитан и его желательно пересчитать (Да\Нет).
|
|||
22
palsergeich
29.08.19
✎
14:29
|
(20) Увы но нет. Ни в одном вызове с ЭтаФорма нет смены контекста.
Или с сервера сервер или с клиента клиент. Но с клиента -> сервер нет. |
|||
23
palsergeich
29.08.19
✎
14:33
|
Убедись сам, что передача формы через параметр с клиента на сервер вызываает ошибку, и не важно, контекстый вызов или нет
https://yadi.sk/d/4ddQJJ_cbWxoBQ |
|||
24
FIXXXL
29.08.19
✎
14:38
|
(20) Сервер-Сервер
Клиент-Сервер только в контексте |
|||
25
palsergeich
29.08.19
✎
14:39
|
(24) Ну да, речь то шла о передаче через параметр)
|
|||
26
Gregor09
29.08.19
✎
14:39
|
(22) Ну вот почему, кстати, не получать бы форму через ПолучитьФорму() вызванную в серверном общем модуле, аналогичную той, которая имеется в модуле формы в контексте &НаСервере
|
|||
27
FIXXXL
29.08.19
✎
14:43
|
(15) не могу посмотреть, сорри
1С:ERP Управление предприятием 2 (2.4.6.230.82) ЗаказКлиента.ФормаДокумента &НаКлиенте Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураДействий = Новый Структура; ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий,Объект); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, Объект) СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц"); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); КонецПроцедуры и эта борода параметров индивидуальна в каждом документе... |
|||
28
palsergeich
29.08.19
✎
14:44
|
(26) Потому что с определения - форма это способ общения с юзером.
Да есть КлиентСерверное взаимодействие. Но УФ на клиенте и УФ на сервере по факту это 2 разных объекта у них частично схожий, и частично различный состав свойств в методов, которые как то там через сериализацию и передачу контекста синхронизируются. Архитектурно форма без клиента не нужна. А так как основная парадигма 1С - с сервера нельзя вызвать клиент - то то что ты просишь - не возможно. |
|||
29
palsergeich
29.08.19
✎
14:46
|
(27) Это не та борода параметров, которые былим раньше, по факту они сейчас в таком виде реализовали флажки что тиенно пересчитать при том или ином изменении поля. Может быть еще немного посидят и дойдут до того что бы и это в ОМ убрать)
|
|||
30
palsergeich
29.08.19
✎
14:48
|
(29) Следующий шаг это реализация процедуры ОМ которая будет генерировать эти параметры на основании типа объекта и имени поля, но это же 1С, они редко когда сразу делают как надо)
|
|||
31
olegves
29.08.19
✎
15:36
|
(26) а кто мешает из МФ перенести нужную логику в модуль менеджера или в ОМ, после чего уже она быдет доступна не только из МФ
|
|||
32
Timon1405
29.08.19
✎
15:41
|
(31) мешает отсутствие уверенности, что завтра в обновлении от поставщика код в модуле формы поменяется(например, появятся новые обработчки), а в перенесенном вами куске останется старая логика.
|
|||
33
olegves
29.08.19
✎
16:23
|
(32) а ты обновляешься всегда механически, без анализа изменений?
|
|||
34
FIXXXL
30.08.19
✎
11:02
|
(30) вот это как раз напрашивается
тогда и вопросов не будет, отдал строку и Вася :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |