Имя: Пароль:
   
1C
 
Как открыть форму незаписанного объекта документа?
0 Хосе
 
08.08.21
19:43
Т.е. я формирую некий документ, но не хочу его записывать, а хочу показать пользователю.
Это может быть и новый и существующий документ.
Для нового вроде тут написано: Как открыть форму нового не записанного документа? УФ 1С 8.3
А для существующего как?
1 acht
 
08.08.21
19:51
Вопрос противоречит названию темы.
Как открыть форму незаписанного - ты, кажется, уже знаешь.
Как открыть форму записанного - описано тысячи раз.
2 DJ Anthon
 
08.08.21
19:52
ПоказатьЗначение (ShowValue)
Синтаксис:

ПоказатьЗначение(<ОписаниеОповещенияОЗавершении>, <Значение>)
Параметры:

<ОписаниеОповещенияОЗавершении> (необязательный)

Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после закрытия окна ввода значения с параметром
3 acht
 
08.08.21
19:59
Тысячи и один раз.
Ждем следующего необученного.
4 Хосе
 
08.08.21
20:40
(2) хахаха, чтобы показать значение, его надо передать на клиента сперва. Ну и как предлагаете передать ДокументОбъект на клиента?
5 Хосе
 
08.08.21
20:40
(3) можно было бы просто ссылку на ветку с решением. Я искал, не нашел
6 I_am_rrrrED
 
09.08.21
10:26
Покажи, что у тебя уже есть.
7 Хосе
 
09.08.21
10:45
(6) у меня есть ДокументОбъект, который возвращается с сервера. Я могу его конвертировать в ДанныеФормы и таким образом перегнать на клиент, а как сделать, чтобы открылся именно документ по ссылке, если ссылка уже есть. Т.е. чтобы если я запишу этот объект, он не создавал новый, а записал по этой ссылке?
8 hhhh
 
09.08.21
10:50
(7) так в ДокументОбъект ссылка заполнена. В чем проблема? Значит, по этой ссылке и запишет.
9 Хосе
 
09.08.21
10:56
(8) ну ладно, попробую потестить, потом сообщу
10 Pprog151713
 
09.08.21
12:00
Запиши документ и работай с ним. Форму не записанного документа открывать не надо.
11 israel
 
09.08.21
12:52
(0) При откритии формы:
значениевреквизитформы(мой_не_записанный_в_базу_доукмент, "Объект")
12 israel
 
09.08.21
12:52
(10) > Форму не записанного документа открывать не надо

Почему?
13 vicof
 
09.08.21
13:44
Есть волшебный параметр формы Ключ
14 Pprog151713
 
09.08.21
14:01
Так запишите документ, не проводите. :). Вы еще форму в файл сохраните.
15 israel
 
09.08.21
14:17
(13) Как этот параметр поможет в задаче из (0) ?

(14) Зачем записывать в базу документ, когда его можно не записывать? А если пользователь передумает его сохранять? Удалять документ из базы, или что?
16 Хосе
 
09.08.21
16:08
(11) это надо иметь доступ в при открытии.
17 israel
 
09.08.21
17:50
(16) в присозданиинасервере, не понимаю в чём проблема
18 israel
 
09.08.21
18:26
(16) если модуль формы нельзя менять, юзай расширение
19 Хосе
 
09.08.21
19:49
(18) приходится лезть в конфу, раньше в обработке я мог в ОФ заполнить объект и открыть его форму в обработке, без насилия над конфигурацией
20 Chameleon1980
 
09.08.21
19:55
не записанный ты знаешь
записанный возвращай документ. ссылка
на клиента и открыть значение
21 acht
 
09.08.21
20:03
(19) Нытик.
22 Хосе
 
09.08.21
21:12
(20) это будет документ, который в базе, а не документ, который я модифицировал. Его нельзя сразу записывать, надо дать пользователю сперва посмотреть.
23 BeerHelpsMeWin
 
09.08.21
21:30
(22) заполняй не документ, заполняй форму?
24 Chameleon1980
 
09.08.21
22:22
бля так записанный или не записанный?
ты же знаешь как не записанный открыть
25 Chameleon1980
 
09.08.21
22:23
получпй форму, заполняй, открывай
26 Сергиус
 
10.08.21
01:01
(0)ОткрытьФорму(ИмяФормы, Новый Структура("Ключ", НужнаяСсылка), ФормаДокумента);
27 Хосе
 
10.08.21
07:52
(26) вы не первый, кто таким образом ошибся.
(25) гм, надо подумать.
28 Pprog151713
 
10.08.21
07:59
(15) :) Делайте, как хотите.
29 Хосе
 
12.08.21
13:38
Вот что получилось сделать для нового объекта Как открыть форму нового не записанного документа? УФ 1С 8.3
Подтверждаю, работает и даже могу модально форму открыть, вот код:

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

&НаКлиенте
Процедура СоздатьТоварЗакрытие(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
    Если ЗначениеЗаполнено(ДополнительныеПараметры.Форма.Объект.Ссылка) Тогда
        Объект.Товар = ДополнительныеПараметры.Форма.Ссылка;
        //...
    КонецЕсли;
КонецПроцедуры
30 Хосе
 
12.08.21
13:40
думаю сработает и с формой обычного объекта, его же можно получить через ключ:

П = Новый Структура("Ключ", Поставщик);
Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П);

Ну а дальше по той же самой схеме.
31 Сергиус
 
16.08.21
23:32
(27)У меня работало, по крайней мере в том случае, когда использовал.
32 Хосе
 
21.08.21
19:31
В общем, поэкспериментировал с открытием формы существующего документа (Табель рабочего времени).
В общем, проблема и с новым и с существующим объектом.
Дело в том, что ПриСозданииФормы вызывается при вызове Получить.
Поэтому если документ хитрый и рисует табличную часть хитрым образом (как в табеле), то эта методика не работает.

Но есть другой вариант - через транзакцию.
Открываем транзакцию, записываем документ, получаем его данные формы.
Откатываем транзакцию.

Метод кривой, но если совсем никак без демонстрации, то чего поделать.
33 ДедМорроз
 
22.08.21
09:11
(32) на клиента не вернуться с открытой транзакцией.
Хотя,идея растет из 7.7
34 ДедМорроз
 
22.08.21
09:12
Правильная реализация требует изменения формы документа и реализации обработки заполнения.
35 CepeLLlka
 
22.08.21
09:46
(32)Всё работает штатными методами без извращений, ты просто не разобрался, хотя в теме многие советовали верные варианты.
36 Хосе
 
22.08.21
09:53
(35) видимо ты не учитываешь, что то, о чем советовали не работает в случае рисуемых форм, ну та же таблица табеля, которая рисуется из данных документа, или документ установки цен. Так что или мы разговариваем о конкретных способах, или нет.
37 Хосе
 
22.08.21
09:54
(33) да, какая-то засада... а ведь при создании формы не вызвать программно, хотя там по сути нужно все вызывать. Похоже, задача решаемая в ОФ, в УФ не решается.
38 acht
 
22.08.21
10:16
(37) Да не работает, Геня, не работает... Иди статью обличающую напиши, будь собой уже.
39 CepeLLlka
 
22.08.21
10:23
(36)Вот в (26) коллега вам посоветовал, чем не устраивает вариант?
40 ДедМорроз
 
22.08.21
11:49
Кстати,если сохранить данные документа,потом его записать новыми данными,потом открыть форму,а потом вернуть сохраненные данные документа,то мы получим то,что нужно,за малым исключением,что при записи открытой формы нам система скажет,что объект изменен и не даст его записать,а так да,открыть вполне можно.
41 Ненавижу 1С
 
22.08.21
12:38
С небольшим кодом в расширении:

&НаКлиенте
Процедура ПеречитатьДанныеОбъекта() Экспорт    
    ПеречитатьДанныеОбъектаНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПеречитатьДанныеОбъектаНаСервере()
    ТекущийОбъект = РеквизитФормыВЗначение("Объект");
    ПриЧтенииНаСервере(ТекущийОбъект);
КонецПроцедуры


тогда работать можно так:

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

&НаКлиенте
Процедура ИзменитьИОткрыть(Команда)
    Форма = ПолучитьФорму("Документ.УстановкаЦенНоменклатуры.ФормаОбъекта",Новый Структура("Ключ",Док));    
    ОбъектФормы = Форма.Объект;
    ИзменитьНаСервере(ОбъектФормы);
    КопироватьДанныеФормы(ОбъектФормы,Форма.Объект);
    Форма.ПеречитатьДанныеОбъекта();   //эмулируем обновление формы
    Форма.Открыть();
КонецПроцедуры
42 acht
 
22.08.21
12:43
(41) > Форма.ПеречитатьДанныеОбъекта();

У формы документа уже есть метод Прочитать(). Не?
43 acht
 
22.08.21
12:43
А, у тя подмена объекта, понял. Предложение отменяется.
44 Хосе
 
22.08.21
21:19
(41) не, так просто не взлетит. Потому что данные ты то перечитаешь, но отображение данных в данные формы занимается код ПриСозданииНаСервере, например. Поэтому надо еще и эту функцию дергать.

Но вообще как-то криво, что в платформе нельзя это сделать. Т.е. взяли и порезали функционал, который раньше был. Возникает вопрос о разумности разработчиков, которые не обеспечивают функциональную полноту.

(43) именно
45 Ненавижу 1С
 
22.08.21
21:25
(44) не надо ничего дергать, но если хочешь дергай, раз ты такой умный
суть подхода в эмуляции перечитывания данных из БД
и что "именно"? ты хоть понял, к чему он комментарий написал?
46 Вафель
 
23.08.21
08:20
(45) не всегда код находится в ПриЧтении.
А если в ПриСоздании, да еще там элементы формы создаются,то все повтормл может и не сработать
47 Ненавижу 1С
 
23.08.21
17:37
(46) ПриСоздании уже отработало при ПолучитьФорму
с другой стороны перечитывать данные это нормально - поэтому исходя из нормальной логики - все должно работать
48 Вафель
 
23.08.21
17:42
(47) это если писали форму нормальные люди
49 Хосе
 
23.08.21
19:23
(47) ну я привел пример с табелем. При создании прочитало и создало таблицу на форме по исходным данным. если подсунуть новые даннные, новая таблица не нарисуется сама. Нужно опять дергать при создании.
50 Хосе
 
23.08.21
19:23
(48) на это не стоит расчитывать
51 Хосе
 
23.08.21
19:27
простейший пример, установка цен.
в бд хранятся строки
пиво розничная 10
водка розничная 20
пиво оптовая 1
водка оптовая 5

При создании будет создана таблица на форме:
       оптовая   розничная
пиво   1         10
водка  5         20

А теперь я добавляю в объект
квас оптовая 3

Перечитываю данные из объекта и получаю фигу, потому что таблица рисуется при создании на сервере, а не при чтении.

Так наглядно, понятно?
52 Ненавижу 1С
 
23.08.21
19:34
(51) ага, а теперь давай подумаем - если я открыл форму с двумя товарами как ты сказал и ничего не делаю
в это время Вася добавляет в документ Квас и записывает(!!!) его
теперь я перечитываю документ, я что не увижу изменений пока не переоткрою формы?

Короче - что спорить - попробуй, если хочешь
53 Ненавижу 1С
 
23.08.21
19:37
(46) (48) в типовых в этом плане обычно все норм
54 Маленький Вопросик
 
23.08.21
19:38
(0) вот здесь я делаю так - можешь посмотреть https://infostart.ru/public/1492688/
55 Хосе
 
23.08.21
19:44
(52) посмотри, какая цепочка событий происходит при вызове перечитать - это и чтение из файла и создание формы заново (при создании формы)
56 Хосе
 
23.08.21
19:44
(54) прости, на такое дело 1000 рублей жалко (10 см), ггг
57 Ненавижу 1С
 
23.08.21
19:50
(55) так... еще одно пятно вскрыто - гений тупо не знает какие события вызываются на форме
не знание событий в транзакциях ты показывал раньше
в общем типичный гений
58 Хосе
 
23.08.21
19:59
ок, проверил. При перечитывании вызывается только чтение на сервере, при создании на сервере не вызывается. Но многие пишут код именно в при создании на сервере, думаю, если просто перечитывать, логика будет не корректно отрабатывать. не всегда корректно, скажем так.
59 Хосе
 
23.08.21
19:59
и потом, какие клиентские события вызываются после перечитывания? никакие7
60 Ненавижу 1С
 
23.08.21
20:02
(58) типовые пишут вменяемые люди
форма должна вести себя адекватно
(59) причем здесь клиентские события?

просто признай, что не в теме оказался, чего уж
61 acht
 
23.08.21
20:03
(55) > это и чтение из файла и создание формы заново
Геня, что лучше, потратить 1000 или прилюдно обосраться? Ггг.
62 Хосе
 
23.08.21
20:04
(61) я до сего момента писал код по показу всяческой видимости и т.п. при создании формы, уверен что многие тоже так пишут.
63 Хосе
 
23.08.21
20:04
а следовательно код, расчитанный на "правильное написание" событий, будет работать не правильно
64 Ненавижу 1С
 
23.08.21
20:08
(62) (63) это твои личные проблемы, что ты код кривой пишешь
65 Хосе
 
23.08.21
20:10
(64) проблема в том, что не я один. это тренд писать все в присоздании. хотя из расширения вызвать присоздании не проблема, в принципе
66 Хосе
 
23.08.21
20:10
но без расширения не взлетит, так что какие-то универсальные вещи не заработают, в отличии от ОФ
67 Ненавижу 1С
 
23.08.21
20:16
(65) (66) у тебя совсем проблемы с логикой стали на фоне самозанятости?
тебе говорят - так может не работать, а вот как работает правильно
ты говоришь, да, так правильно, но есть "тренд"

"тренд" этот родился исключительно в твоей голове?
68 Хосе
 
23.08.21
20:17
(67) можешь устроить голосовалку. но я видел много кода и своего и чужого. В любом случае, даже если это 10% кода, то рассчитывать на гарантироавнное корректное отображение в универсальном случае уже не приходится. Я бы еще и клиентские ПриОткрытии дергал, мало ли чего там прописано
69 acht
 
23.08.21
20:19
(68) Статью напиши.
70 Ненавижу 1С
 
23.08.21
20:19
(68) ты чего решил повилять хвостом, когда нечего сказать о том, что не знал какие события вызываются у форм?
71 Хосе
 
23.08.21
20:20
(70) голосовалку создал: Где вы прописываете настройки формы - в ПриСозданииНаСервере или в ПриЧтенииНаСервере
Я не загромождаю себе голову лишней информацией, не критичной для работы