|
Открытие формы нового дока УФ | ☑ | ||
---|---|---|---|---|
0
ac13
28.04.17
✎
15:54
|
Хочу создать новый документ (не через ввод на основании).
Новый документ не надо записывать, а только открыть форму. В управляемых формах открыть форму можно только на клиенте. Передать с сервера на клиент новый документ нельзя. Но я хочу, чтобы у меня не просто открывалась форма, а срабатывало заполнение всех функций при создании документа, а не просто чтоб форму с заполненными элементами. Вот такой бред естественно не работает: &НаКлиенте Процедура СоздатьЗаказПокупателя(Команда) Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта"); ДокЗаказ = Форма.Объект; СоздатьЗаказПокупателяНаСервере(ДокЗаказ); КопироватьДанныеФормы(ДокЗаказ, Форма.Объект); Форма.Открыть(); КонецПроцедуры &НаСервере Процедура СоздатьЗаказПокупателяНаСервере(ДокЗаказ) ДокЗаказ = Документы.ЗаказКлиента.СоздатьДокумент(); ДокЗаказ.Организация = Объект.Организация; ДокЗаказ.Контрагент = Объект.Контрагент; КонецПроцедуры |
|||
1
Fragster
гуру
28.04.17
✎
15:57
|
(0) то, что ты написал как "бред" вполне себе можно допилить до работоспособного сосотояния. только и без всей этой фигни результат будет идентичным.
>срабатывало заполнение всех функций при создании документа если посмотришь отладчиком - всё срабатывает |
|||
2
polosov
28.04.17
✎
15:57
|
(0)
НовыйДок.Заполнить(СтруктураЗаполненияСДанными) Потом получаешь форму и открываешь. Предварительно в событии обработки заполнения смотришь что надо передавать в СтруктураЗаполненияСДанными |
|||
3
ac13
28.04.17
✎
15:59
|
Но что-то вроде такого мне не подходит:
&НаКлиенте Процедура ОткрытьФормуДока(Команда) Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта"); ДокЗаказ = Форма.Объект; ОткрытьФормуДокаНаСервере(ДокЗаказ); КопироватьДанныеФормы(ДокЗаказ, Форма.Объект); Форма.Открыть(); КонецПроцедуры &НаСервере Процедура ОткрытьФормуДокаНаСервере(ДокЗаказ) ДокЗаказ.Организация = Объект.Организация; КонецПроцедуры |
|||
4
ac13
28.04.17
✎
15:59
|
(3) не подходит, так как документ не создается, а только форма заполняется
|
|||
5
Fragster
гуру
28.04.17
✎
16:00
|
открыть СП и читать про расширение управляемой формы документа
|
|||
6
Fragster
гуру
28.04.17
✎
16:00
|
про параметры
|
|||
7
Fedor-1971
28.04.17
✎
16:07
|
(0) ты путаешь "Создать документ" и "Открыть форму документа"
Создать: нов=Документы.ЗаказКлиента.СоздатьДокумент(); чем-то заполнить, нов.Записать(); ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта", новый Структура("Ключ", нов.Ссылка)); Открыть заполненную (частично) форму: пар=новый Структура; пар.Вставить("Организация", Объект.Организация); и т.д. заполняй то, что тебе известно в текущей форме ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта", пар); в событии ПриСозданииНаСервере документа ЗаказКлиента Если Объект.Ссылка.Пустая() тогда // выполняем только для нового документа Если параметры.Свойство("Организация") тогда Объект.Организация=Параметры.Организация; КонецЕсли; КонецЕсли; или используешь ОбработкуЗаполнения в модуле Объекта Отходи от логики ОФ, не надо делать кальку "так раньше делали" |
|||
8
Fedor-1971
28.04.17
✎
16:09
|
7+ и мусорить в БД созданными, но никому не нужными документами то же не нужно
|
|||
9
ac13
28.04.17
✎
16:35
|
чего-то ничего не получается.
у меня работает только такое: Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта"); ДокЗаказ = Форма.Объект; ОткрытьФормуДокаНаСервере(ДокЗаказ); КопироватьДанныеФормы(ДокЗаказ, Форма.Объект); Форма.Открыть(); |
|||
10
ac13
28.04.17
✎
16:36
|
но при открытии не срабатывает процедура ОбработкаЗаполнения, как если бы я создавал документ ан основании
|
|||
11
RomanYS
28.04.17
✎
16:44
|
(10) срабатывает
|
|||
12
ac13
28.04.17
✎
16:46
|
Вот что работает:
&НаКлиенте Процедура СоздатьЗаказПокупателя(Команда) Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта"); ДанныеФормы = Форма.Объект; ЗаполнитьДокументНаСервере(ДанныеФормы); КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); Форма.Открыть(); КонецПроцедуры &НаСервере Функция ЗаполнитьДокументНаСервере(ДанныеФормы); Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ЗаказКлиента")); Док = Документы.ЗаказКлиента.СоздатьДокумент(); ЗначениеВДанныеФормы(Док,ДанныеФормы); КонецФункции |
|||
13
ac13
28.04.17
✎
16:46
|
Только как теперь передать параметры в форму?
|
|||
14
ac13
28.04.17
✎
16:47
|
(11) если срабатывает, то тогда мне нет смысла мучаться и использовать то, что у меня типа срабатывает?
|
|||
15
ac13
28.04.17
✎
16:50
|
(12) хотя так у меня точно ничего вообще не заполняется
|
|||
16
ac13
28.04.17
✎
16:50
|
(15) т.е. ОбработкаЗаполнения ничего не заполняет
|
|||
17
RomanYS
28.04.17
✎
16:50
|
(12) где у тебя заполнение? При СоздатьДокумент обработка заполнения как раз не вызывается, а вот при открытии формы вызывается.
|
|||
18
RomanYS
28.04.17
✎
16:51
|
(16) а она есть?
|
|||
19
Buster007
28.04.17
✎
16:51
|
ПараметрыФормы = Новый Структура("Основание", Ссылка)
|
|||
20
ac13
28.04.17
✎
16:52
|
(17) вот передаю параметры в новый док:
&НаСервере Функция ЗаполнитьДокументНаСервере(ДанныеФормы); Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ЗаказКлиента")); Док = Документы.ЗаказКлиента.СоздатьДокумент(); Док.Организация = Объект.Организация; Док.Контрагент = Объект.Контрагент; ЗначениеВДанныеФормы(Док,ДанныеФормы); КонецФункции (18) есть конечно |
|||
21
ac13
28.04.17
✎
16:53
|
(17) если при СоздатьДокумент() не работает, значит я страдаю фигней и у меня изначально было самое подходящее решение?
|
|||
22
RomanYS
28.04.17
✎
16:55
|
(21) то, что ты чем-то страдаешь, сомнению не подлежит
Это делается в одну строку ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта", Новый Структура("Основание", ЗначениеКотороеБудетПереданоВобработкуЗаполнения)); |
|||
23
ac13
28.04.17
✎
16:57
|
&НаКлиенте
Процедура СоздатьЗаказПокупателя(Команда) Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта"); ДанныеФормы = Форма.Объект; ЗаполнитьДокументНаСервере(ДанныеФормы); КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); Форма.Открыть(); КонецПроцедуры &НаСервере Функция ЗаполнитьДокументНаСервере(ДанныеФормы); Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ЗаказКлиента")); Док.Организация = Объект.Организация; Док.Контрагент = Объект.Контрагент; ЗначениеВДанныеФормы(Док,ДанныеФормы); КонецФункции |
|||
24
ac13
28.04.17
✎
16:57
|
(22) нет, так у меня не получается
|
|||
25
ac13
28.04.17
✎
16:59
|
В общем как я написал (23) у меня все заполняется, открывается, но, например реквизит Налогообложение заполняется неверно, видимо по-умолчанию.
Так как Организация, которая передается в параметра - Не облагается НДС, а у меня там заполняет - Облагается НДС. Из этого я делаю вывод, что ОбработкаЗаполнения не срабатывает |
|||
26
RomanYS
28.04.17
✎
16:59
|
(24) ты определись, что тебе надо
вызвать обработку заполнения с нужным параметром - это (22). Что именно у тебя не получается - непонятно. |
|||
27
Fragster
гуру
28.04.17
✎
17:03
|
(25) поставь уже точку остановки в начало обработки заполнения
|
|||
28
RomanYS
28.04.17
✎
17:04
|
(25) "Из этого я делаю вывод, что ОбработкаЗаполнения не срабатывает"
Ты в нее ничего не передал, она сработала, только по умолчанию без каких либо параметров. То что ты предварительно что-то заполнил - её нас..ть. |
|||
29
Fedor-1971
28.04.17
✎
17:05
|
(22) для УФ "Основание"="ЗначениеКопирования"?
(24) на 2 млн попытке подбора пароля сервер согласился на пароль "МаоДзеДун". Попробуй, для разнообразия, таки понять что тебе советуют сделать. (25) опрометчивый вывод. Вдохни, выдохни и внятно объясни: Есть форма чего(???), я хочу из оной создать ЗаказКлиента (записанный документ? или открыть частично заполненную форму?). Прочитай что было выше в (7) и (22) попробуй и задавай вопросы что не понятно |
|||
30
ac13
28.04.17
✎
17:05
|
(26) вот пишу одну процедуру:
&НаКлиенте Процедура СоздатьЗаказПокупателя(Команда) П = Новый Структура; П.Вставить("Организация", Объект.Организация); П.Вставить("Контрагент", Объект.Контрагент); ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта", П); КонецПроцедуры Нажимаю на кнопку, открывается документ со значениями по-умолчанию, а не с теми, которые я передал |
|||
31
ac13
28.04.17
✎
17:06
|
почему мои параметры не передались?
|
|||
32
Fedor-1971
28.04.17
✎
17:07
|
(30) вот, а в ПриСозданииНаСервере открываемой формы ты обработал параметры как в (7)
|
|||
33
RomanYS
28.04.17
✎
17:07
|
(30) всё правильно, на стороне формы эти параметры никто не обрабатывал
|
|||
34
RomanYS
28.04.17
✎
17:08
|
(31) они передались и ..всё
|
|||
35
RomanYS
28.04.17
✎
17:08
|
(29) нет "основание" это то, что будет передано в обработку заполнения
|
|||
36
ac13
28.04.17
✎
17:12
|
В форме документа "Заказ клиента" написал:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Объект.Организация = Параметры.Организация; Объект.Контрагент = Параметры.Контрагент; ... КонцеПроцедуры Параметры передались, но, например, реквизит Налогообложение все равно не заполнился в соответствии с данными организациями |
|||
37
ac13
28.04.17
✎
17:15
|
в принципе получается то же самое, что я написал в (23)
и там не надо редактировать модуль формы типового документа. А вот переданные параметры все равно не обрабатывает. |
|||
38
AsadRoman
28.04.17
✎
17:16
|
Как вариант:
&НаКлиенте Процедура СоздатьДокумент(Команда) ПараметрыФормы = Новый Структура; Основание = СоздатьЗаказПокупателяНаСервере(Объект); ПараметрыФормы.Вставить("Основание",Основание); ОткрытьФорму("Документ.ЗаказПокупателя.ФормаОбъекта",ПараметрыФормы,ЭтотОбъект,,,,,РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); &НаСервере Функция СоздатьЗаказПокупателяНаСервере(Объект) Основание = Новый Структура; Основание.Вставить("Организация", Объект.Организация); Основание.Вставить("Контрагент", Объект.Контрагент); ну и т.д. Возврат Основание; КонецФункции Далее в модуле объекта заказ покупателя Процедура ОбработкаЗаполнения( ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда Организация = ДанныеЗаполнения.Организация; Контрагент = ДанныеЗаполнения.Контрагент; и т.д.... Ну и посмотреть что там еще и как заполняется по стандарту... КонецЕсли; |
|||
39
RomanYS
28.04.17
✎
17:18
|
(36) "Налогообложение все равно не заполнился в соответствии с данными организациями"
И не должен был, что ты для этого сделал? Ничего. |
|||
40
Fedor-1971
28.04.17
✎
17:20
|
(36) Вот это стрёмно: Объект.Организация = Параметры.Организация; в параметрах не всегда будет Организация, попробуй просто открыть документ из журнала
(37) нет, ты не гоняешь данные много раз между Клиентом и Сервером, а один раз отправляешь с клиента на сервер параметры заполнения новой формы, ПриСозданииНаСервере открываемой формы их получает, обрабатывает и один(!!!) раз отправляет на клиент |
|||
41
Fragster
гуру
28.04.17
✎
17:24
|
предлагаю автору перечитать (5)
|
|||
42
Fragster
гуру
28.04.17
✎
17:24
|
Расширение управляемой формы для документа (Managed form extension for documents)
|
|||
43
Fragster
гуру
28.04.17
✎
17:25
|
кусок, который называется "параметры формы"
|
|||
44
RomanYS
28.04.17
✎
17:30
|
(41) Не поможет. Он думает "если я ей организацию заполнил, то она автоматом учетную политику подгрузит, цены загрузит и печать и подпись нужную поставит". А как это работает он не понимает от слова совсем. И дело даже не в специфике УФ.
|
|||
45
Fedor-1971
28.04.17
✎
17:34
|
(44) скорее, он где-то откопал "готовое решение", но для ОФ, а как раз специфики УФ до конца не понял. Вот и путает "Создать экземпляр объекта" и "Открыть форму не записанного объекта"
|
|||
46
ac13
28.04.17
✎
17:36
|
(45) для ОФ все просто и понятно работает. с УФ у меня пока не очень
|
|||
47
ac13
28.04.17
✎
17:37
|
(44) нет, просто сначала разберусь с тем, что заполняется для Организации, тогда станет ясно и с другими параметрами
|
|||
48
Fedor-1971
28.04.17
✎
17:39
|
Вот, человек с ОФ переходит на УФ, и естественно наступает на грабли разделения работы на Клиент и Сервер
|
|||
49
RomanYS
28.04.17
✎
17:39
|
(46) c УФ тоже работает, ты кое-как заполнил контрагента, организацию. Всё, больше ты ничего делал - ничего и не заполнилось. Твои ожидания непонятны.
|
|||
50
ac13
28.04.17
✎
17:43
|
Посмотрел в отладчике. ОбработкаЗаполнения - не срабатывает.
Я открываю форму, передавая на нее параметры. При создании на сервере получаю параметры. |
|||
51
ac13
28.04.17
✎
17:45
|
Ну теперь вывод, что все это вручную надо будет прописать.
Подобным методом срабатывают только процедуры формы. |
|||
52
AsadRoman
28.04.17
✎
17:46
|
(50) Как я писал выше пробовал?
|
|||
53
Fragster
гуру
28.04.17
✎
17:48
|
вот автору не везет, у всех сраббатывает, а у него - нет.
|
|||
54
ac13
28.04.17
✎
17:50
|
(52) да.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения); Если ТипДанныхЗаполнения = Тип("Структура") Тогда ЗаполнитьДокументПоОтбору(ДанныеЗаполнения); Организация = ДанныеЗаполнения.Организация; Контрагент = ДанныеЗаполнения.Контрагент; Процедура вообще не вызывается |
|||
55
Fragster
гуру
28.04.17
✎
17:54
|
сейчас я угадаю, у автора база клиент серверная...
|
|||
56
Fedor-1971
28.04.17
✎
17:54
|
(54) а параметр "Основание" в форму передал?
|
|||
57
ac13
28.04.17
✎
17:54
|
(53) просто что-то не так делаю. почему ОбработкаЗаполнения не вызывается... Это же вообще странно
|
|||
58
ac13
28.04.17
✎
17:55
|
(55) нет
|
|||
59
RomanYS
28.04.17
✎
17:55
|
(55) вроде говорил, что приСозданииНаСервере у него "останавливалось"
|
|||
60
ac13
28.04.17
✎
17:56
|
(56) да. ну еще раз попробую внимательнее
|
|||
61
ac13
28.04.17
✎
17:56
|
(59) в смысле?
|
|||
62
AsadRoman
28.04.17
✎
17:56
|
(56) Поддерживаю
|
|||
63
RomanYS
28.04.17
✎
17:56
|
(57)
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Сообщить("Я вызываюсь!"); .... |
|||
64
RomanYS
28.04.17
✎
17:57
|
+(63) и давай уточним где находится ОбработкаЗаполнения, которая не вызывается.
|
|||
65
ac13
28.04.17
✎
17:58
|
Основание = СоздатьЗаказПокупателяНаСервере(Объект);
Так нельзя, так ошибку выдает {Документ.ЗаявкаНаРемонт.Форма.ФормаДокумента.Форма(48)}: Ошибка при установке значения атрибута контекста (Объект) Основание = СоздатьЗаказПокупателяНаСервере(Объект); по причине: Нельзя изменять поле, содержащее объект данных формы |
|||
66
ac13
28.04.17
✎
17:59
|
ладно, хватит издеваться. я успокоюсь и попробую еще раз
|
|||
67
AsadRoman
28.04.17
✎
18:00
|
(65) тогда так
Функция СоздатьЗаказПокупателяНаСервере(Знач Объект) |
|||
68
Fedor-1971
28.04.17
✎
18:05
|
(65) там где заполнял Организация для передачи в форму, заполни "основание", например, ссылкой текущего документа, а в ОбработкеЗаполнения (в модуле объекта) поймаешь переданное в ДанныеЗаполнения.
И да, хватит создавать экземпляр Объекта, ты уже в открывающейся форме, Объект - это пустое(за маленьким исключением) представление твоего Объекта в данных формы. Не дёргай его без смысла. Лучше сделай (63) и поймёшь что не так |
|||
69
ac13
02.05.17
✎
10:10
|
Хочу сказать - спасибо вам большое за доброту и терпение! у меня всё получилось! :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |