|
УФ. Можно ли решить типовыми средствами, а не через ... креатив | ☑ | ||
---|---|---|---|---|
0
1CIlya
04.10.18
✎
12:23
|
Здравствуйте, друзья!
Делаю обработку заполнения ТЧ в ЗУП3 для документа ВедомостьНаВыплатуЗарплатыВБанк. Учу ведомость заполняться из под документа ВыплатаБывшимСотрудникам. С ТЧми все хорошо, они заполняются типовыми функциями по подготовленной ТЗ. А вот форма документа не показывает, что так усердно туда положили. Она расширяет табличную часть Состав у ведомости, и отображает эти "дополнительные" реквизиты, которые естественно, не заполняются серверными функциями общих модулей, которые работают с объектом. Тем не менее, типовой код имеется. Чтобы заполнить "расширенные" реквизиты нужно вызвать процедуру из модуля формы документа. &НаСервере Процедура ПриПолученииДанныхСтрокиСостава(СтрокаСостава) Экспорт ВзаиморасчетыССотрудникамиФормыРасширенный.ВедомостьПриПолученииДанныхСтрокиСостава(ЭтаФорма, СтрокаСостава) КонецПроцедуры В процедуру нужно передать ФормуДокумента и СтрокуСостава. Т.к. обработка заполнения ТЧ использует ВызовКлиентскогоМетода, дело происходит в ее модуле формы, и переменная ЭтаФорма указывает на форму обработки, а не на форму документа, т.е. на серверной части модуля формы указателя на форму документа нет и с клиента на сервер передать найденную форму документа тоже не получится. Но ее методом воспользоваться возможно, т.к. он экспортный. Но ему нужно передать СтрокуСостава, это строка ТЧ, имеющаяся в наличии у переменной ДанныеФормы. Однако, это тоже вызывает ошибку платформы. Удивительно, сами ДанныеФормы передать на сервер возможно, а маленькую их частичку - строку ТЧ уже нельзя. Однако, это "препятствие" не остановило прогрессивное человечество на пути к "светлому будущему" и решение было найдено. &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт ... ДанныеФормы = ФормаДокумента.Объект; ЗаполнитьНаСервере(ДанныеФормы, ФормаДокумента.ХарактерВыплаты); Результат = КопироватьДанныеФормы(ДанныеФормы, ФормаДокумента.Объект); ФормаДокумента.Модифицированность = Истина; КонецПроцедуры &НаСервере Процедура ЗаполнитьНаСервере(ДанныеФормы, ХарактерВыплаты) ... ЗначениеВДанныеФормы(ОбъектНазначения, ДанныеФормы); ФормаДокументаПодПрикрытиемЧтобыВызватьСервернуюПроцедуру = Новый Структура("Объект,ХарактерВыплаты", ДанныеФормы, ХарактерВыплаты); ВзаиморасчетыССотрудникамиФормыРасширенный.ВедомостьПриПолученииДанныхСтрокиСостава( ФормаДокументаПодПрикрытиемЧтобыВызватьСервернуюПроцедуру, ДанныеФормы.Состав[0]); КонецПроцедуры Конкретно в этом случае повезло. Код типовой процедуры только читает из ФормыДокумента и можно передать структуру вместо нее самой, скопировав необходимые реквизиты. Но это не будет работать в общем случае. Очень надеюсь, что смог описать задачу с которой столкнулся. Делитесь, пожалуйста, мыслями, можно ли что-то предпринять? |
|||
1
Cyberhawk
04.10.18
✎
12:40
|
Можно - предприми попытку выражаться краче
|
|||
2
Cyberhawk
04.10.18
✎
12:40
|
*кратче
|
|||
3
1CIlya
04.10.18
✎
12:42
|
(1) Сорян, что перефразировать?
|
|||
4
Cyberhawk
04.10.18
✎
12:59
|
В трех словах, в чем у тебя вопрос. Без этой предметной шелухи с какими-то названиями конфигурации и документов.
|
|||
5
1CIlya
04.10.18
✎
14:56
|
(4) Нужно вызвать серверную процедуру из модуля формы обработки и передать ей найденную форму документа или передать на сервер строку ТЧ из ДанныхФормы, но не ДанныеФормы полностью.
|
|||
6
Cyberhawk
04.10.18
✎
14:58
|
Делаешь это все на сервере, владелец формы обработки - это форма объекта заполнения
|
|||
7
1CIlya
04.10.18
✎
17:05
|
(6) ВладелецФормы доступен только на клиенте. Конструкция
&НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт ... ФормаДокумента = ЭтаФорма.ВладелецФормы; Для Каждого СтрокаСостава Из ФормаДокумента.Объект.Состав Цикл ФормаДокумента.ПриПолученииДанныхСтрокиСостава(СтрокаСостава); КонецЦикла; КонецПроцедуры сталкивается с невозможностью передать на сервер строку ТЧ. Ошибка отображения типов: Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции' |
|||
8
1CIlya
05.10.18
✎
10:15
|
up
|
|||
9
ProxyInspector
05.10.18
✎
10:39
|
Это стандартные проблемы УФ. УФ заточены под ларьки и ручной ввод информации. На них часто в типовом варианте не возможно организовать корректный ввод документов программно. Только через костыли. Я недавно пытался в БУХ30 программно типовыми методами организовать корректное заполнение СчетовУчета номенклатуры в документах. Победить не смог. Пришлось делать через зад. В Бух 2.0 это делается в одну строчку.
Я бы писателей и аналитиков типовых гнал бы из профессии за вредительство |
|||
10
Cyberhawk
05.10.18
✎
10:46
|
(7) "ВладелецФормы доступен только на клиенте" // Точняк. Тогда остается два варианта:
- вызвать какой-нибудь клиентский метод (либо который параметром принимает саму форму-владельца, либо который приводит к контекстному серверному вызову формы-владельца) - вызвать какой-нибудь серверный метод, который не использует саму форму-владельца |
|||
11
0xFFFFFF
05.10.18
✎
10:50
|
(9) думаю это не проблемы УФ, а проблемы "писателей типовых". Проблема УФ - это не проблема. Одинэсникам надо просто один язык, синтаксис и группу файлов с кодом дать для программирования на сервере, а другой (язык, синтаксис и группу файлов) для программирования на клиенте (PHP и JavaScript например). Тогда бы и не плевались на УФ. Песатели типовых разбалованы просто возможностями фигачить в куче &НаСервере, &НаКлиенте. Вот и фигачат бездумно.
|
|||
12
1CIlya
05.10.18
✎
10:57
|
(10) Если обработку перевести в ВызовСерверногоМетода она как-то узнает, кто ее вызвал?
|
|||
13
1CIlya
05.10.18
✎
11:02
|
(9), (11) Особое неудовольствие вызывает невозможность передать на сервер частичку ДанныхФормы - ДанныеФормыЭлементКоллекции, в то время, как полностью они нормально передаются. Понятно, что "в недрах" платформы происходит декомпозиция и все уже написано, в том числе и для ДанныеФормыЭлементКоллекции, нужно лишь дополнить список типов пригодных для транспортировки. Работы не много, а какое ограничение будет снято.
|
|||
14
Фрэнки
05.10.18
✎
11:20
|
(13) // Особое неудовольствие вызывает невозможность передать на сервер частичку ДанныхФормы - ДанныеФормыЭлементКоллекции
Ты что-то нехорошо задумал. У тебя в коде используется такая строка ЗначениеВДанныеФормы(ОбъектНазначения, ДанныеФормы); для чего? |
|||
15
Cyberhawk
05.10.18
✎
11:43
|
(12) Если обработка вида "ЗаполнениеОбъекта", то конечно: ПараметрыВыполнения.ЭтаФорма это и есть форма объекта, в которым вызвано заполнение объекта.
Минус этого вида обработки в том, что никакого интерактивчика в этом случае поиметь нельзя. |
|||
16
Cyberhawk
05.10.18
✎
11:45
|
Подробнее в 10 посте тут (и далее там ссылка на еще одну тему) Передать форму из вызываемой "ЭтаФорма" к внешней обработке УФ
|
|||
17
Cyberhawk
05.10.18
✎
11:49
|
(там про новый тип команды "ЗаполнениеФормы")
|
|||
18
1CIlya
05.10.18
✎
12:46
|
(14) Это строка завершает этап заполнения ДокументаОбъекта на сервере. Далее сделанные изменения необходимо передать на клиент и показать пользователю, поэтому копируем ДокументОбъект в ДанныеФормы.
|
|||
19
Фрэнки
05.10.18
✎
13:41
|
(18) так никто не делает.
У тебя в контексте на Сервере есть доступ к данным ТЧ объекта. ТЧ объекта непосредственно обновляет свое отображение на форме, это когда поля из ТЧ связаны с колонками в поле списка на форме. Поэтому в твоем частном случае совершенно не нужно пытаться что-то пихать в данные формы. Данные формы останутся такими, какие они заданы в ТЧ объекта. |
|||
20
1CIlya
05.10.18
✎
14:08
|
(19) Спасибо! Опишу свой случай подробней.
1. Это обработка заполнения ТЧ, которая заполняет ДокументОбъект. Есть ли у нее в контексте сервера доступ к ТЧ документа? 2. На форме документа состав табличной части расширен (см.(0)). Помимо реквизитов объекта (синего цвета), присутствуют дополнительные реквизиты (красного цвета), которых у ДокументаОбъекта нет. Заполнять их тоже обязательно, т.к. именно их видит пользователь. Оправдано ли применение функции ЗначениеВДанныеФормы(ОбъектНазначения, ДанныеФормы) в этом случае? |
|||
21
singlych
05.10.18
✎
14:21
|
Так то у обработок заполнения есть доступ к данным формы на сервере.
https://its.1c.ru/db/bsp246doc#content:31:1:issogl3_пример_обработка_заполнения_данных_формы_без_записи_объекта |
|||
22
1CIlya
05.10.18
✎
14:22
|
(16), (21) Точно! Попробую отпишусь.
|
|||
23
1CIlya
05.10.18
✎
15:58
|
(16), (21), (22) Спасибо, все получилось! Не просто грызть управляемые формы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |