|
УФ. Как правильно открыть доп.форму редактируемого элемента справочника? | ☑ | ||
---|---|---|---|---|
0
WED
27.08.15
✎
21:39
|
Управляемые формы. 8.3.6
Есть форма элемента справочника. У нее есть основной реквизит - Объект. Из этой формы по кнопке (команде) хочу открывать дополнительную форму и в ней изменять реквизиты этого же открытого элемента справочника. Что и как правильно передать открываемой форме? |
|||
1
jsmith82
27.08.15
✎
21:56
|
Прм = Новый Структура("Ключ", Объект.Ссылка);
ОткрытьФорму("Справочник.Товары.Форма.ДопФорма", Прм); |
|||
2
Лефмихалыч
27.08.15
✎
21:56
|
Глобальный контекст.ОткрытьФорму (Global context.OpenForm)
Глобальный контекст (Global context) ОткрытьФорму (OpenForm) Вариант синтаксиса: По названию Синтаксис: ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>) Параметры: <ИмяФормы> (обязательный) Тип: Строка. Имя формы. Образуется как полный путь к объекту метаданных Форма (например, "Справочник.Контрагенты.Форма.ФормаОбъекта", "ОбщаяФорма.ФормаСохраненияФайла") или как полный путь к прикладному объекту, дополненный именем формы по умолчанию (например, "Справочник.Товары.ФормаВыбора"). Имена форм по умолчанию: ФормаОбъекта (ObjectForm) - форма объекта по умолчанию; ФормаГруппы (FolderForm) - форма группы по умолчанию; ФормаЗаписи (RecordForm) - форма записи регистра по умолчанию; ФормаСписка (ListForm) - форма списка по умолчанию; ФормаВыбора (ChoiceForm) - форма выбора по умолчанию; ФормаВыбораГруппы (FolderChoiceForm) - форма выбора группы по умолчанию; ФормаКонстант (ConstantsForm) - форма констант по умолчанию; Форма (Form) - форма отчета и обработки по умолчанию; ФормаНастроек (SettingsForm) - форма настроек отчета по умолчанию; ФормаЗагрузки (LoadForm) - форма загрузки настроек; ФормаСохранения (SaveForm) - форма сохранения настроек; ФормаВарианта (VariantForm) - форма редактирования варианта отчета; ФормаПоиска (SearchForm) - форма полнотекстового поиска в данных. Для внешних отчетов и обработок имя формы задается следующим образом: ВнешнийОтчет.<имя отчета>.Форма.<имя формы>; ВнешнийОтчет.<имя отчета>.<имя стандартной формы>; ВнешняяОбработка.<имя обработки>.Форма.<имя формы>; ВнешняяОбработка.<имя обработки>.<имя стандартной формы>. При этом внешний отчет или обработка должны быть предварительно зарегистрированы в системе с помощью метода Подключить или Подключить соответственно. <Имя отчета> и <имя обработки> - это имена, под которыми зарегистрированы внешний отчет или обработка. <Параметры> (необязательный) Тип: Структура. Параметры формы. Ключ структуры - имя параметра, а значение - значение параметра формы. Имя элемента должно совпадать с именем параметра структуры. П = Новый Структура("Ключ", Поставщик); Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П); Форма.Открыть(); <Владелец> (необязательный) Владелец формы - форма или элемент управления другой формы. <Уникальность> (необязательный) Тип: Произвольный. В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма. Ложь - искать форму с ключом уникальности по умолчанию, Истина - не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск. Значение по умолчанию: Ложь. <Окно> (необязательный) Тип: ОкноКлиентскогоПриложения;ВариантОткрытияОкна. Окно приложения, в котором будет открыта форма. Применимо только для управляемой формы. Окном может быть только основное окно приложения или вспомогательное окно формы. Если указан тип ВариантОткрытияОкна, окно формы будет создано согласно выбранному варианту. <НавигационнаяСсылка> (необязательный) Тип: Строка, Неопределено. Если содержит значение, отличное от Неопределено, то это значение присваивается свойству НавигационнаяСсылка формы, полученной в результате вызова данного метода, и свойство АвтоНавигационнаяСсылка этой формы устанавливается в Ложь. Значение по умолчанию: Неопределено. <ОписаниеОповещенияОЗакрытии> (необязательный) Тип: ОписаниеОповещения. Содержит описание процедуры, которая будет вызвана после закрытия формы со следующими параметрами: <РезультатЗакрытия> - значение, переданное при вызове метода Закрыть открываемой формы, <ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения. Если параметр не указан, то по завершению никакая процедура вызвана не будет. <РежимОткрытияОкна> (необязательный) Тип: РежимОткрытияОкнаФормы. Указывает режим открытия окна управляемой формы. Значение по умолчанию: Неопределено. Вариант синтаксиса: По форме Синтаксис: ОткрытьФорму(<Форма>, <Окно>) Параметры: <Форма> (обязательный) Тип: Форма; УправляемаяФорма. Форма или управляемая форма. В режиме тонкого и веб-клиентов только управляемая форма. <Окно> (необязательный) Тип: ОкноКлиентскогоПриложения; ВариантОткрытияОкна. Окно приложения, в котором будет открыта форма. Применимо только для управляемой формы. Окном может быть только основное окно приложения или вспомогательное окно формы. В случае использования ВариантОткрытияОкна, окно формы будет создано согласно выбранному варианту. Возвращаемое значение: Тип: Форма; УправляемаяФорма. Описание: Открывает и возвращает форму или управляемую форму. В тонком и веб-клиенте только управляемую форму. Перед открытием осуществляется поиск уже открытой такой же формы. Поиск осуществляется по типу формы, значениям ключевых параметров формы, владельцу формы, пользовательскому ключу уникальности. Можно открывать уже полученную форму. В этом случае в параметрах передается уже полученная форма и окно, в котором открыть форму. Можно открыть по имени формы. В этом случае в параметры передаются имя формы, параметры формы, владелец, ключ уникальности и окно, в котором должна быть открыта форма. Доступность: Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент). Вызов метода выполняет обращение к серверу. Примечание: Для варианта "По названию" параметры вызова аналогичны параметрам метода ПолучитьФорму. Обычные формы внешних обработок не поддерживаются. В управляемом приложении не следует выполнять программное открытие и закрытие одной и той же формы в одном вызове встроенного языка. Если при открытии обычной формы в параметре <ИмяФормы> указано не стандартное имя формы, передаваемые параметры не обрабатываются. В процессе выполнения может быть несколько обращений к серверу. Часть из них кэшируются. Как минимум одно обращение к серверу есть всегда и оно не кэшируется. Кэширование зависит от версии платформы и версии конфигурации в целом. Если установлена низкая скорость соединения и не указывается текущая строка, то кэшируется форма выбора. Очистка кэша осуществляется с периодичностью в 20 мин. Удаляются формы, которые не использовались в этот период времени. См. также: Глобальный контекст, метод ПолучитьФорму Глобальный контекст, метод ПолучитьОбщуюФорму Глобальный контекст, метод ОткрытьФормуМодально |
|||
3
jsmith82
27.08.15
✎
21:56
|
Так, вроде
|
|||
4
WED
27.08.15
✎
22:04
|
(1) Думал уже, но у доп.формы нет ключа.
(2) А теперь внимательно и вдумчиво перечитываем вопрос. |
|||
5
WED
28.08.15
✎
09:30
|
Вопрос актуален
|
|||
6
olegves
28.08.15
✎
09:34
|
внимательно и вдумчиво перечитываем вопрос(4) что за менторский тон? Будь проще, быстрее помогут
|
|||
7
WED
28.08.15
✎
09:41
|
(6) А не разобравшись цитировать СП не менторство? :)
|
|||
8
Nuobu
28.08.15
✎
09:46
|
(7) УФ?
|
|||
9
Nuobu
28.08.15
✎
09:47
|
(8) Если да, то нужно после редактирования в доп. форме написать ЗначениеВРеквизитФормы("Объект", ОбъектЗНачение);
|
|||
10
WED
28.08.15
✎
09:48
|
(7) Да.
Мне бы сначала в доп.форму передать текущий редактируемый элемент. |
|||
11
Nuobu
28.08.15
✎
09:51
|
(10) Чем вот это не подошло?
П = Новый Структура("Ключ", Поставщик); Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П); Форма.Открыть(); И почему у доп. формы нету ключа? |
|||
12
WED
28.08.15
✎
09:52
|
(11) Потому что нельзя задать основной реквизит?
|
|||
13
Nuobu
28.08.15
✎
09:52
|
(12) Можно))
|
|||
14
WED
28.08.15
✎
09:56
|
(13) Окей, скажи мне как это сделать?
https://habrastorage.org/files/ffd/248/6f0/ffd2486f01cb44549b67fd6d105355d0.png |
|||
15
Nuobu
28.08.15
✎
09:57
|
В типе формы выбрать не "Произвольный", а "Форма элемента".
|
|||
16
Nuobu
28.08.15
✎
09:59
|
(15) При создании этой формы.
|
|||
17
WED
28.08.15
✎
10:00
|
(16) Проверяю...
|
|||
18
Nuobu
28.08.15
✎
10:00
|
(14) Второе: вместо строки или ссылки, всё же, нужно выбрать "Объект".
|
|||
19
WED
28.08.15
✎
10:04
|
(18) Да, с формой получилось, ключ есть. Это я упустил. Спасибо!
Вопрос как ее открыть передав ей ключ. Грубо говоря я хочу, чтобы часть реквизитов элемента редактировалась в основной форме, а часть в дополнительной. Получается, что это должен быть один и тот же объект. И я не пойму как его передать. Потому что ДанныеФормыВЗначение работает только на сервере, но из-за оповещения используемого при открытии формы мне надо остаться на клиенте |
|||
20
Nuobu
28.08.15
✎
10:09
|
(19) Передай объект на клиенте.
После выхода из доп. формы, сравни новые поля со старыми. |
|||
21
Krolik Bezobraznik
28.08.15
✎
10:09
|
(19) Передай в доп форму не весь объект, а только те реквизиты, которые будешь редактировать в качестве параметров формы.
На доп форме создай реквизиты и кинь их на форму. В доп форме в методе ПриСозданииНаСервере() передавай из параметров в реквизиты (На случай если надо редактировать) После того как завершишь редактирование, возвращай структуру с измененными параметрами. Закрыть(Возвращаемаяструктура); Ну а в основной форме получай эту структуру и заполняй реквизиты объекта. ИМХО не надо править один и тот же объект в разных формах, не по феншую это.... |
|||
22
WED
28.08.15
✎
10:14
|
(20)(21)
Так уже давно и сделано. Через структуру. Но показалось, что можно сам объект передать, а точнее открыть вторую форму для текущего объекта. |
|||
23
Krolik Bezobraznik
28.08.15
✎
10:15
|
(22) Мое мнение такое, не надо править один и тот же объект в разных формах...
Решай сам, не маленький ужо =) |
|||
24
WED
28.08.15
✎
10:16
|
(23)
Допустим, что номенклатура может быть вида "материал" или "услуга". И если с материалом надо только код и наименование, то у услуги еще ряд реквизитов. Хочу чтобы реквизиты "услуги" редактировались в другой форме, потому что их много и пихать на основную форму элемента как раз будет не по феншую, даже если делать страницами, даже если страницу услуги скрывать когда "материал" - размер формы остается большим и пустым (там ведь только код да наименование) :) |
|||
25
Krolik Bezobraznik
28.08.15
✎
10:20
|
(24) Что тебе мешает сделать две УФ для материала и услуги (если нет желания городить элементы на одной форме) и в зависимости от вида номенклатуры открывать нужную тебе форму?
Что мешает тебе передать в одну форму реквизит вид, а при проверке параметров устанавливать видимость в зависимости от параметра вид номенклатуры? Тут как фантазия сработает и какие требования. Я не пойму у вас вопрос по конкретному случаю или вы гипотетические варианты рассмативаете? Давайте лучше по существу, а не различные варианты, так писанины меньше и толку больше. |
|||
26
WED
28.08.15
✎
10:28
|
(24)
>Что тебе мешает сделать две УФ для материала и услуги.... 1. Необходимость дополнительной обработки (выбора вида) при создании нового элемента. 2. Необходимость дополнительной обработки по открытию нужной формы. >Что мешает тебе передать в одну форму реквизит вид... Сейчас так и есть: в зависимости от вида переключается страница содержащая нужный набор реквизитов. Если это делается после открытия формы, то для "материала" форма остается большой по размерам, хотя видны только два поля: код и наименование. Определять вид до открытия формы, чтобы сразу сделать не видимыми часть реквизитов не хочу, потому что сразу встают вопросы перечисленные выше. >Я не пойму у вас вопрос по конкретному случаю или вы гипотетические варианты рассмативаете? Конкретный случай: материал и услуга. Поскольку я хочу команду открытия формы редактирования параметров услуги поместить в панель навигации (слева которая) и эта команда органично впишется в общий концепт дизайна. потому что там будут и другие команды связанные с видом номенклатуры - для материала одни, для услуги другие. Именно поэтому нужно открывать этот же элемент в другой форме. |
|||
27
WED
28.08.15
✎
10:30
|
Ладно, эксперименты показали, что единственный вариант так как уже сделал: пихать реквизиты в структуру, ее передавать на открытие и из нее обновлять данные при закрытии доп.формы.
Так как уже и сделано. Жаль, что не удалось сделать проще и красивее. |
|||
28
Krolik Bezobraznik
28.08.15
✎
10:31
|
(26) Если кто то предложит иной вариант, а сниму перед ним шляпу. (27) Вполне красивый вариант и не сложный. =)
Удачи |
|||
29
Гёдза
28.08.15
✎
10:32
|
(27) а по другому никак. нельзя две формы редактировать одного объекта, ибо объектные блокировки
|
|||
30
WED
28.08.15
✎
10:37
|
(28) Да, спасибо.
(29) Ну, видимо, из-за этого и нет такой штатной возможности. Хотя если по идеологии 1С объект на сервере, а на клиенте его отображение, то почему не быть двум отображением с учетом что открытие второго - дочернего блокировало бы "родительское"... Видимо вопрос только в востребованности. Видимо для 1С легче в типовых рисовать формы, которые при даже разрешении 1024х768 не влазят на экран и скроллятся. В любом случае, спасибо вам за подсказки и помощь. |
|||
31
Гёдза
28.08.15
✎
10:40
|
(30) Отображений хоть миллион может быть, но редактировать можно только 1. Блокировка то пессимистическая
|
|||
32
Nuobu
28.08.15
✎
10:41
|
(29) В смысле нельзя, если можно?
|
|||
33
Nuobu
28.08.15
✎
10:41
|
(31) На УФ объекта на клиенте нету в принципе.
|
|||
34
WED
28.08.15
✎
10:42
|
(31)(32)
Я проверил: открыть две формы одного и того же элемента можно. Записать изменения проблематично :) |
|||
35
Krolik Bezobraznik
28.08.15
✎
10:42
|
(33) Поясните пожалуйста что вы имеете ввиду?
|
|||
36
WED
28.08.15
✎
10:42
|
+(34) т.е. формы - два конкурирующих отображения одного объекта.
А я хотел две "родственные" формы одного объекта. |
|||
37
Krolik Bezobraznik
28.08.15
✎
10:43
|
(34) Можно иметь два унитаза в квартире, а какать в них одновременно - проблематично =)
|
|||
38
Nuobu
28.08.15
✎
10:43
|
(35) На УФ в форме нету объекта.
Есть только структура, у которой свойства в точности совпадают со свойствами объекта. |
|||
39
WED
28.08.15
✎
10:43
|
(37) Аналогия улыбнула, но суть верна - согласен.
|
|||
40
Krolik Bezobraznik
28.08.15
✎
10:45
|
(38) На форме нет, согласен. Но вам никто не мешает создать реквизит задать ему тип ДокументОбъект и обращаться к нему как объекту прямо из клиентских процедур и функций.
|
|||
41
Nuobu
28.08.15
✎
10:46
|
(40) Неа. Платформа мешает.
Реквизит объект, настоящий который - существует только на сервере. Поэтому ругаться будет только при записи. |
|||
42
Nuobu
28.08.15
✎
10:47
|
(41) А менять, просматривать можно. Только не записывать.
|
|||
43
WED
28.08.15
✎
10:49
|
Простите, что не по теме, но, как говорится - заодно:
В 8.3.6 (и 8.3.7) с управлением содержимым панели навигации формы еще ничего не продвинулось? В плане видимости/доступности команд. Такая задумка и такая недоделаная :( |
|||
44
Krolik Bezobraznik
28.08.15
✎
10:50
|
(41) Записываю без проблем. По крайней мере документы. Надо только сделать основным реквизитом.
|
|||
45
Nuobu
28.08.15
✎
10:53
|
(44) Записываю без проблем
Поподробней можно? Открыв две формы документа, записываешь сначала один, потом другой? Хотя это один и тот же документ? |
|||
46
Krolik Bezobraznik
28.08.15
✎
10:56
|
(45) Я может не корректно выразился, я не говорил что один объект записываю в двух формах. А как раз против этого =)
Я просто ответил на ваше утверждение что в УФ нет объектов. Его можно создать и записать. =) |
|||
47
Nuobu
28.08.15
✎
10:57
|
(46) На клиенте - нельзя.
|
|||
48
Nuobu
28.08.15
✎
10:58
|
(47) Мы немного о разном говорим.
Я говорю не вообще за упр. формы, а за клиента. На нём всё, что видно - это жалкое подобие объектов и ссылок. Поэтому эти объекты и ссылки можно гонять между формами и не переживать за блокировки. |
|||
49
Krolik Bezobraznik
28.08.15
✎
11:00
|
(47) Что именно нельзя?
|
|||
50
Nuobu
28.08.15
✎
11:00
|
(48) Просто при записи оно сравним этот объект с объектом в базе.
Если объект в базе обновился, а объект на клиенте - нет, тогда вылезет ошибка. Если такого не произошло, то запись пройдёт без заминок. |
|||
51
Krolik Bezobraznik
28.08.15
✎
11:06
|
(50) Ох... так я ваше утверждение и не опровергаю, я ранее говорил что ненужно так делать, теперь вы мне говорите тоже самое =))
|
|||
52
Krolik Bezobraznik
28.08.15
✎
11:13
|
(50) Хотя я с вами поспорю =)
Можно при записи объекта в одной форме обновить его отображение во всех открытых формах. Где то я такое видел.... |
|||
53
Nuobu
28.08.15
✎
11:15
|
(52) Тогда да.
Через оповещение. |
|||
54
WED
28.08.15
✎
11:16
|
Эк вас, господа.... ;)
|
|||
55
Krolik Bezobraznik
28.08.15
✎
11:18
|
(53) Через него родимое =) (54) Бывает =)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |