|
Как открыть форму незаписанного объекта документа? | ☑ | ||
---|---|---|---|---|
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) голосовалку создал: Где вы прописываете настройки формы - в ПриСозданииНаСервере или в ПриЧтенииНаСервере
Я не загромождаю себе голову лишней информацией, не критичной для работы |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |