Имя: Пароль:
1C
1С v8
Открытие формы нового дока УФ
,
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
Хочу сказать - спасибо вам большое за доброту и терпение! у меня всё получилось! :)