Имя: Пароль:
1C
 
УФ. Открыть произвольную форму документа
,
0 mzelensky
 
11.11.14
09:04
Доброго всем.
Возможно вопрос избитый, но именно РЕШЕНИЯ проблемы я не нашел.

Хочу сделать так: создаю документ, заполняю часть информации. Далее по нажатию кнопки нужно открыть модально дополнительную формочку ЭТОГО ЖЕ документа, где будет отображаться табличная часть ЭТОГО документа. Заполняю эту табличную часть, нажимаю "ОК" - формочка закрывается, производятся определенные действия в основной форме документа.

Реализовывал это на обычных формах, точно знаю, что это ВОЗМОЖНО!

Но при попытке сделать это на УФ получаю блокировку объекта. Подозреваю, что как-то не так открываю форму документа. Делал вот так:

ОткрытьФормуМодально("Документ.А_ЗаявкаВПТО.Форма.ФормаВыбораПрогнозируемогоСрокаУ", Новый Структура("Ключ", Объект.Ссылка));


Где косячу???
1 olegves
 
11.11.14
09:05
лучше используй закладки на одной форме
2 olegves
 
11.11.14
09:06
+ пока ты не записал объект, ссылка пустая
3 butterbean
 
11.11.14
09:06
(0) у тебя кривое решение — делай в одной форме
чтобы не было ошибки можно записать перед открытием другой формы
4 mzelensky
 
11.11.14
09:07
(1) Закладки не подходят. Нужно именно отдельная формочка. Да и в принципе, как это сделать меня интересует.

(2) Согласен. Как сделлать так, чтобы работало?
5 Fish
 
11.11.14
09:07
(1) +100. Проблема похоже в том, что ты пытаешься открыть другую форму для незаписанного документа.
6 mzelensky
 
11.11.14
09:08
(3) Решение не кривое. Просто ты не знаешь как его реализовать.
7 Fish
 
11.11.14
09:08
(4) Запиши объект перед открытием другой формы.
8 mzelensky
 
11.11.14
09:10
(5) Естественно документ не записан. И мне НЕ надо его записывать (точнее я не хочу его записывать).

Мне нужно:
1) Создается новый док
2) Заполняется часть инфы
3) Открывается модальное окошко. Там производятся манипуляции с ТЧ.
4) Какие-либо еще действия с основнйо формой дока
5) Запись документа.
9 mzelensky
 
11.11.14
09:11
Повторюсь. На обычных формах все это можно было без проблем сделать.
10 Рэйв
 
11.11.14
09:12
(0)Ты наверное делаешь обычную форму , а надо делать форму документа, только не ставить галку что она основная. Для того чтобы Объект у фрорм был один.Тогда не важно записан док или нет, данные будут браться из Объекта,который у формы основной реквизит, а не из ссылки
11 butterbean
 
11.11.14
09:14
(8) модальное открытие другого окошка это и есть кривота
но чтоб работало ты получай форму, потом делай для нее ЗначениеВДанныеФормы(), потом уже открывай... ссылка там нафиг не нужна, док ведь не записан
12 Fish
 
11.11.14
09:14
(8) "Открывается модальное окошко" - А ты слышал наверное, про уход от модальности?
13 mzelensky
 
11.11.14
09:15
(10) Я пробовал и так и так.

Допустим. Создаю форму с основным реквизитом ОБЪЕКТ (ну как пологается). Как из основнйо формы дока открыть модально эту дополнительную форму?
14 mzelensky
 
11.11.14
09:16
(12) Чувак, не пытайся парить меня методологией.
Я слышал про УХОД от модальности. И моя схема без проблем отработает, даже если я отработаю асинхронный вызов. Проблема у меня не в этом. Если не знаешь что сказать по теме, то не пиши ерунды.
15 mzelensky
 
11.11.14
09:18
(11) Напиши пример открытия второй формы. И место, где применить "ЗначениеВДанныеФормы()" ?
16 Fish
 
11.11.14
09:18
(14) Тебя никто не парит. Вся твоя проблема в том, что ты пытаешься применить методики обычных форм к УФ. А это в корне неправильно. А по теме тебе уже всё сказали.
17 butterbean
 
11.11.14
09:20
(15) пля ну
форма = ПолучитьФорму(...);
ЗначениеВДанныеФормы(ДанныеФормыВЗначение(...),форма.объект);
форма.открытьмодально();
18 mzelensky
 
11.11.14
09:21
(17) Через "ПолучитьФорму"...хм...ну сейчас попробую
19 mzelensky
 
11.11.14
09:37
(17) а как ты

ДанныеФормыВЗначение(...)

НА клиете применишь? Метод только на сервере доступен.
20 chudishe
 
11.11.14
09:53
(9) И чо?
21 mzelensky
 
11.11.14
09:54
(16) Сказали то много, а вот рабочего примера так никто и не дал.
22 chudishe
 
11.11.14
09:54
(17) Не взлетит.
23 mzelensky
 
11.11.14
09:54
(20) И то!
24 mzelensky
 
11.11.14
09:55
(22) Вот и я считаю - не взлетит.
25 chudishe
 
11.11.14
09:56
(23) Тебе же сказали, что у тебя неправильный подход. Ты считаешь, что все должно в УФ работать также как и в обычном приложении, но это не так.
26 mzelensky
 
11.11.14
09:58
(25) Блин, да не считаю я так!!! УСПОКОЙТЕСЬ УЖЕ!!!!!! Смущает слово "МОДАЛЬНО", хорошо, убираем слово "МОДАЛЬНО". Просто нужно открыть форму!!!!!!!!

Блин, что за народ. на пустом месте проблему делают.
27 mzelensky
 
11.11.14
10:01
Или ни у кого фантазии не хватает больше чем на "ЗАКЛАДКИ" и "ЗАПИСАТЬ ОБЪЕКТ, А ПОТОМ ОТКРЫТЬ ПО ССЫЛКЕ" ? Что за программисты пошли :(

Я уж лучше массив структур через параметры переброшу. Но в данном случае куда правильней просто открыть форму объекта.
28 chudishe
 
11.11.14
10:01
(26) Дело не модальности. Я вот просто приведу тебе пример с формой подбора. В обычном приложении её делали обычно сбоку и открывали в режиме выбора. В УФ делают форму с двумя списками, в одном динамический список с номенклатурой, в другом подобранная номенклатура, а потом пользователь нажимает кнопочку и вся выбранная номенклатура передается в документ.

К чему я это все. Тебе нужно поменять подход.
29 chudishe
 
11.11.14
10:03
(27) Для начала спроси себя, так ли нужна тебе блокирующая форма в отдельном окне, может все можно сделать в форме документа.
30 mzelensky
 
11.11.14
10:08
(29) Нужна отдельная форма. Переходим к следующему шагу.
31 chudishe
 
11.11.14
10:25
(30) Какие данные нужны в этой отдельной форме?
32 mzelensky
 
11.11.14
10:32
(31) Табличная часть документа.
33 1sanekmaloi1
 
11.11.14
10:34
Зачем объект в новой форме?
Открывай произвольную форму в нее передавай нужные данные, например строки из тч, изменяй дополняй, удаляй потом при закрытии переноси данные в док
34 chudishe
 
11.11.14
10:35
(32) (33) Вот это был, короче, следующий шаг.
35 Гёдза
 
11.11.14
10:35
НЕЛЬЗЯ открыть 2 формы одного объекта.
Делай форму с тч и зполняй
36 mzelensky
 
11.11.14
10:36
(27)(34) Я этот вариант еще в (27) Изложил:

Я уж лучше массив структур через параметры переброшу. Но в данном случае куда правильней просто открыть форму объекта.

Не внимательно читаете.
37 mzelensky
 
11.11.14
10:37
(36) -> (33)(34)
38 chudishe
 
11.11.14
10:38
(36) Нет, не правильней. (25)
39 mzelensky
 
11.11.14
10:38
(35) Вообще НЕЛЬЗЯ открыть 2 формы одного объекта ???
40 chudishe
 
11.11.14
10:39
(39) Нет, нельзя. Ты вообще виде, что ты передаешь в форму документа для его открытия? Ключ. Ссылку. Из ссылку получаются данные и по ним создается форма, т.е. для каждой формы создается свой экземпляр объекта.
41 mzelensky
 
11.11.14
10:41
(40) Так я сразу написал, что я неправильно делаю (не правильно пытаюсь открыть форму по ссылке). Собственно ради всего этого тут ветку и создал. Надеялс, что вместо Ссылки можно пердать что-то другое.
42 chudishe
 
11.11.14
10:51
(41) Ты бы это, я не знаю, СП что ли читнул. Там все про это написано.
43 Жан Пердежон
 
11.11.14
11:19
в первой форме:

ОткрытьФормуМодально("Документ.ЗаявкаВПТО.Форма.ФормаВыбораПрогнозируемогоСрокаУ", Новый Структура("ТЧ", Объект.Товары));

во второй форме:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Свойство("ТЧ") тогда
        Товары.Загрузить(Параметры.ТЧ.Выгрузить());    
    КонецЕсли;
    
КонецПроцедуры
44 mzelensky
 
11.11.14
11:21
(43) ТЫ сам так пробовал? НА сколько я знаю ТЧ не передается параметрами..
45 Адский плющ
 
11.11.14
11:32
Открывать модально форму объекта это ФУ
46 mzelensky
 
11.11.14
11:58
(45) Изыди
47 Рэйв
 
11.11.14
12:00
(44)После некоторых танцев с бубном у меня получилось так:

1.Делаешь форму документа. основная= ложь
2. Открываешь так:
//-------
    Пар=Новый Структура("Объект",Объект);
    ОткрытьФорму("Документ.ШаблонНовогоДокумента.Форма.ФормаДокументаВтораяУФ",Пар,ЭтаФорма);
//------

3. во второй форме:(заполняем Объект)
//---------
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
      Об=ДанныеФормыВЗначение(Этаформа.Параметры.Объект,Тип("ДокументОбъект.ШаблонНовогоДокумента"));
    ЗначениеВРеквизитФормы(Об,"Объект");
КонецПроцедуры

4. во второй форме надо убрать модифицированность при закрытии чтоб не задавало лишних вопросов:

//------
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    
    ЭтаФорма.Модифицированность=Ложь;
КонецПроцедуры

5.во второй форме оповещаем первую о выборе, в параметр передаем измененный Объект:

//-------
///----------
&НаКлиенте
Процедура ПриЗакрытии()
    Этаформа.ОповеститьОВыборе(Объект);
КонецПроцедуры


6.В первой форме получаем выор. обновляем Объект:
//-----
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
    
    Обновитьобъект(Новый Структура("Объект",ВыбранноеЗначение));
    
КонецПроцедуры
Процедура ОбновитьОбъект(струкПараметр)
    Об=ДанныеФормыВЗначение(струкПараметр.Объект,Тип("ДокументОбъект.ШаблонНовогоДокумента"));
    ЗначениеВРеквизитФормы(Об,"Объект");
КонецПроцедуры    


//---------

не забывай, что у меня имена отличаются:-)
Разберешься я думаю.
У меня все нормально сработало
48 Рэйв
 
11.11.14
12:02
можно наверное даже в книгу знаний:-)  Пригодится поди кому
49 mzelensky
 
11.11.14
12:04
(47)(48) Отлично! Именно то, что мне нужно. ОГРОМНОЕ СПАСИБО!!!

А то начинают рассказывать - нельзя, невозможно, почитай СП...
50 mdocs
 
11.11.14
12:05
уф какашка. аминь))
51 1sanekmaloi1
 
11.11.14
12:25
(49) можно все, но вот только зачем?несколько раз гонять объект на сервер и обратно, если можно все сделать менее затратным для системы?
52 18_plus
 
11.11.14
12:28
(51) сервер, клиент... мы консерваториев не кончали.
53 Рэйв
 
11.11.14
12:31
(51)Не так уж и затратен один Объект  для системы
Да еще типа ДанныеФормыСтруктура:-)
54 chudishe
 
11.11.14
12:45
(47) Что-то мне подсказывает, что в веб-клиенте это не взлетит.
55 mzelensky
 
11.11.14
12:54
(53) У тебя полностью эта схема работает? Я что-то в блокировку объекта уперся
56 chudishe
 
11.11.14
13:00
(55) А я ведь говорил, что в этом методе есть подвох, говорил?
57 Рэйв
 
11.11.14
13:01
(55)Да, полностью. Правда я на 8.3 запускаю. Не знаю как на 8.2 будет работать.
58 mzelensky
 
11.11.14
13:01
(56) Говорил, говорил. Возьми с печки пирожок.
59 mzelensky
 
11.11.14
13:02
(57) Я тоже на 1С:Предприятие 8.3 (8.3.4.465).

Получается я открываю форму - все открывается, но при попытке добавить данные в ТЧ - получаю ошибку блокировки данных своим же пользователем.
60 Рэйв
 
11.11.14
13:05
(59)Я специально проверил с добавлением в таб.часть, новая строка нормально переносится в первую форму.

Ты модифицированность не забываешь убирать?
61 mzelensky
 
11.11.14
13:28
(60) Модифицированность это уже при закрытии формы. А у меня блокировка выходит при попытке интерактивно добавить новую строку в ТЧ (во второй форме)
62 Рэйв
 
11.11.14
13:53
(61)Ну тогда бубен в тебе в руки:-)
63 1sanekmaloi1
 
11.11.14
14:10
Это на типовом решении все делается?

в бухе 3.0 например в ПТУ есть кнопка в тч "изменить",
там смысл ее такой, вся тч едет во врем хранилище, открывается форма обработки в ней из хранилища заполняется тч, пользователь делает манипуляции с тч, по кнопке перенести в документ идут обратные действия,
это за основу взять можно и наваять свое что то


а если твой док на типовой бухе 3.0, то вообще 3 минуты прикрутить
64 mzelensky
 
11.11.14
14:12
(62) Давно хочу себе такой купить!
65 mzelensky
 
11.11.14
14:13
(63) Спасибо за подсказку. Посмотрю.

Я это все на УТ 10.3 вояю.
66 olegves
 
11.11.14
14:27
(8) тебе для неосновной формы не надо передавать Объект.ссылка, а работать через хранилище и метод Оповестить
67 chudishe
 
11.11.14
14:58
(65) Я тебе об этом способе и говорил. Да и сам ты к этому выводу пришел. Не нужно изобретать велосипедов и придумывать вот такую ересь (47). В будущем это просто может перестать работать.