Управляемые формы 1С » История » Версия 13
Всеволод Дорофеев, 18.02.2017 11:29
1 | 1 | Всеволод Дорофеев | h1. Управляемые формы 1С |
---|---|---|---|
2 | 1 | Всеволод Дорофеев | |
3 | 6 | Всеволод Дорофеев | h3. 1. Как программно удалить текущую строку из табличной части документа? |
4 | 3 | Всеволод Дорофеев | |
5 | 1 | Всеволод Дорофеев | Для этого следует воспользоваться методом Удалить() того объекта, который является источником данных для табличной части документа. Например, для документа "ПриходнаяНакладная" с табличной частью "Товары" это будет объект ДокументТабличнаяЧасть.ПриходнаяНакладная.Товары. В модуле формы этого документа удаление текущей строки табличной части будет выглядеть следующим образом: |
6 | 1 | Всеволод Дорофеев | |
7 | 7 | Всеволод Дорофеев | <pre> |
8 | 1 | Всеволод Дорофеев | ДокументОбъект.Товары.Удалить(ЭлементыФормы.Товары.ТекущаяСтрока); |
9 | 7 | Всеволод Дорофеев | </pre> |
10 | 1 | Всеволод Дорофеев | |
11 | 1 | Всеволод Дорофеев | В качестве параметра метода Удалить() передается текущая строка табличной части. |
12 | 1 | Всеволод Дорофеев | |
13 | 1 | Всеволод Дорофеев | Обратите внимание, что для удаления (как и для добавления) строк табличной части документа следует использовать методы табличной части (ДокументОбъект.Товары), а не методы табличного поля, отображающего эту табличную часть (ЭлементыФормы.Товары). |
14 | 1 | Всеволод Дорофеев | http://its.1c.ru/db/metod8dev/content/2481/hdoc |
15 | 4 | Всеволод Дорофеев | |
16 | 6 | Всеволод Дорофеев | h3. 2. Замена "Сообщить()" |
17 | 5 | Всеволод Дорофеев | |
18 | 2 | Всеволод Дорофеев | Вариант 1. |
19 | 2 | Всеволод Дорофеев | <pre> |
20 | 2 | Всеволод Дорофеев | ПоказатьОповещениеПользователя( |
21 | 2 | Всеволод Дорофеев | НСтр("ru = 'Изменения не зарегистрированы.'") |
22 | 2 | Всеволод Дорофеев | ,,, |
23 | 2 | Всеволод Дорофеев | БиблиотекаКартинок.Информация32); |
24 | 2 | Всеволод Дорофеев | </pre> |
25 | 2 | Всеволод Дорофеев | |
26 | 2 | Всеволод Дорофеев | Вариант 2. |
27 | 2 | Всеволод Дорофеев | <pre> |
28 | 2 | Всеволод Дорофеев | Сообщение = Новый СообщениеПользователю(); |
29 | 2 | Всеволод Дорофеев | Сообщение.Текст = "В строке 11 табличной части ""Номенклатура"" не хватает "; |
30 | 2 | Всеволод Дорофеев | Сообщение.Поле = "Номенклатура"; |
31 | 2 | Всеволод Дорофеев | |
32 | 2 | Всеволод Дорофеев | // Привязка объекта к реквизиту формы произойдет за счет |
33 | 2 | Всеволод Дорофеев | // установленного выше по стеку соответствия методом |
34 | 2 | Всеволод Дорофеев | // УстановитьСоответствиеОбъектаИРеквизитаФормы |
35 | 2 | Всеволод Дорофеев | Сообщение.УстановитьДанные(ОбъектДанных); |
36 | 2 | Всеволод Дорофеев | // Теперь у сообщения заполнено поле ПутьКДанным (установлено имя реквизита формы, до этого была пустая строка), |
37 | 2 | Всеволод Дорофеев | // и свойство КлючДанных (установлена ссылка на документ, до этого было Неопределено) |
38 | 2 | Всеволод Дорофеев | |
39 | 2 | Всеволод Дорофеев | // Сообщение выводится пользователю |
40 | 2 | Всеволод Дорофеев | Сообщение.Сообщить(); |
41 | 5 | Всеволод Дорофеев | </pre> |
42 | 8 | Всеволод Дорофеев | |
43 | 9 | Всеволод Дорофеев | h3. 3. Открытие управляемой формы не записанного документа в 1С 8.2/8.3 |
44 | 8 | Всеволод Дорофеев | |
45 | 8 | Всеволод Дорофеев | <pre> |
46 | 8 | Всеволод Дорофеев | &НаКлиенте |
47 | 8 | Всеволод Дорофеев | Процедура КомандаОткрытьФорму(Команда) |
48 | 8 | Всеволод Дорофеев | Форма = ПолучитьФорму("Справочник.Пользователи.ФормаОбъекта"); |
49 | 8 | Всеволод Дорофеев | ДанныеФормы = Форма.Объект; |
50 | 8 | Всеволод Дорофеев | ЗаполнитьНаСервере(ДанныеФормы); |
51 | 8 | Всеволод Дорофеев | КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); |
52 | 8 | Всеволод Дорофеев | Форма.Открыть(); |
53 | 8 | Всеволод Дорофеев | КонецПроцедуры |
54 | 8 | Всеволод Дорофеев | |
55 | 8 | Всеволод Дорофеев | &НаСервереБезКонтекста |
56 | 8 | Всеволод Дорофеев | Процедура ЗаполнитьНаСервере(НовыйОбъект); |
57 | 8 | Всеволод Дорофеев | НовыйОбъект.Наименование = "Новый элемент"; |
58 | 8 | Всеволод Дорофеев | Для К=1 По 100 Цикл |
59 | 8 | Всеволод Дорофеев | НоваяСтрока = НовыйОбъект.ТЧ.Добавить(); |
60 | 8 | Всеволод Дорофеев | НоваяСтрока.РеквизитТЧ = К; |
61 | 8 | Всеволод Дорофеев | КонецЦикла; |
62 | 8 | Всеволод Дорофеев | КонецПроцедуры |
63 | 8 | Всеволод Дорофеев | </pre> |
64 | 10 | Всеволод Дорофеев | |
65 | 10 | Всеволод Дорофеев | h3. 4. Передача параметров в управляемых формах |
66 | 10 | Всеволод Дорофеев | |
67 | 10 | Всеволод Дорофеев | Параметры передаются в виде структуры: |
68 | 10 | Всеволод Дорофеев | |
69 | 10 | Всеволод Дорофеев | <pre> |
70 | 10 | Всеволод Дорофеев | Параметры = Новый Структура("ТекущееЗначение",ПоследнийЭлемент); |
71 | 10 | Всеволод Дорофеев | ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры); |
72 | 10 | Всеволод Дорофеев | НайденыйЭлемент = ФормаВыбора.ОткрытьМодально(); |
73 | 10 | Всеволод Дорофеев | </pre> |
74 | 10 | Всеволод Дорофеев | |
75 | 10 | Всеволод Дорофеев | Также у управляемой формы появились «расширения формы» (объект, справочник, документ, отчет). В зависимости от типа объекта определяется состав доступных параметров. Например, если в форме выбора справочника нужно позиционироваться на определенном элементе, то используется параметр «ТекущееЗначение». Большим плюсом является, что в самой форме не требуется писать обработчиков для предопределенных параметров, сокращает количество кода. |
76 | 10 | Всеволод Дорофеев | |
77 | 10 | Всеволод Дорофеев | Также у разработчика появилась возможность определять свои параметры (в конструкторе управляемой формы вкладка «Параметры»). Время жизни параметров ограничено обработчиком ПриСозданииНаСервере, что логично т.к. параметры требуются только при создании формы, но если данный параметр определяет уникальность формы (установлен флаг «ключевой параметр» в свойствах параметра) он будет доступен и в других обработчиках. |
78 | 10 | Всеволод Дорофеев | |
79 | 10 | Всеволод Дорофеев | Для передачи специфического параметра манипуляций требуется сделать немного больше: |
80 | 10 | Всеволод Дорофеев | |
81 | 10 | Всеволод Дорофеев | 1. Определить в управляемой форме параметр. |
82 | 10 | Всеволод Дорофеев | |
83 | 10 | Всеволод Дорофеев | В обработчике ПриСозданииНаСервере определить обработку данного параметра (обращение к переданным параметрам через свойство «Параметры», имеющее тип ДанныеФормыСтруктура) |
84 | 10 | Всеволод Дорофеев | |
85 | 10 | Всеволод Дорофеев | 1. Описать получение формы и передать значение нового параметра в параметрах функции ПолучитьФорму. |
86 | 10 | Всеволод Дорофеев | |
87 | 10 | Всеволод Дорофеев | Таким образом код будет иметь вид: |
88 | 10 | Всеволод Дорофеев | |
89 | 10 | Всеволод Дорофеев | В месте получения формы |
90 | 10 | Всеволод Дорофеев | <pre> |
91 | 10 | Всеволод Дорофеев | Параметры = Новый Структура("НовыйПараметр",ПоследнийЭлемент); |
92 | 10 | Всеволод Дорофеев | ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры); |
93 | 10 | Всеволод Дорофеев | </pre> |
94 | 10 | Всеволод Дорофеев | |
95 | 10 | Всеволод Дорофеев | В модуле управляемой формы |
96 | 10 | Всеволод Дорофеев | <pre> |
97 | 10 | Всеволод Дорофеев | &НаСервере |
98 | 10 | Всеволод Дорофеев | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) |
99 | 10 | Всеволод Дорофеев | Если Параметры.Свойство("НовыйПараметр") Тогда |
100 | 10 | Всеволод Дорофеев | // здесь код обработки параметра |
101 | 10 | Всеволод Дорофеев | КонецЕсли; |
102 | 10 | Всеволод Дорофеев | КонецПроцедуры |
103 | 10 | Всеволод Дорофеев | </pre> |
104 | 11 | Всеволод Дорофеев | |
105 | 12 | Всеволод Дорофеев | h3. 4. Отбор в таблице значений, расположенной на форме |
106 | 11 | Всеволод Дорофеев | |
107 | 11 | Всеволод Дорофеев | Например, отбор строк в подчиненной таблице при смене "Владельца" в основной таблице |
108 | 11 | Всеволод Дорофеев | <pre> |
109 | 11 | Всеволод Дорофеев | &НаКлиенте |
110 | 11 | Всеволод Дорофеев | Процедура ИсходнаяНоменклатураПриАктивизацииСтроки(Элемент) |
111 | 11 | Всеволод Дорофеев | |
112 | 11 | Всеволод Дорофеев | Структура = Новый Структура("ИсходнаяНоменклатура", Элементы["ИсходнаяНоменклатура"].ТекущиеДанные.Номенклатура); |
113 | 11 | Всеволод Дорофеев | НовыйОтбор = Новый ФиксированнаяСтруктура(Структура); |
114 | 11 | Всеволод Дорофеев | Элементы["НоваяНоменклатура"].ОтборСтрок=НовыйОтбор; |
115 | 11 | Всеволод Дорофеев | |
116 | 11 | Всеволод Дорофеев | КонецПроцедуры |
117 | 11 | Всеволод Дорофеев | |
118 | 11 | Всеволод Дорофеев | </pre> |
119 | 13 | Всеволод Дорофеев | |
120 | 13 | Всеволод Дорофеев | h3. Вопрос в управляемых формах |
121 | 13 | Всеволод Дорофеев | |
122 | 13 | Всеволод Дорофеев | Замена функции "Вопрос(...)" |
123 | 13 | Всеволод Дорофеев | |
124 | 13 | Всеволод Дорофеев | <pre> |
125 | 13 | Всеволод Дорофеев | &НаКлиенте |
126 | 13 | Всеволод Дорофеев | Процедура ЗадатьВопрос(Команда) |
127 | 13 | Всеволод Дорофеев | |
128 | 13 | Всеволод Дорофеев | ПоказатьВопрос(Новый ОписаниеОповещения("ОбработкаОтветаЗавершение", ЭтотОбъект), "Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет); |
129 | 13 | Всеволод Дорофеев | |
130 | 13 | Всеволод Дорофеев | КонецПроцедуры |
131 | 13 | Всеволод Дорофеев | |
132 | 13 | Всеволод Дорофеев | &НаКлиенте |
133 | 13 | Всеволод Дорофеев | Процедура ОбработкаОтветаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт |
134 | 13 | Всеволод Дорофеев | |
135 | 13 | Всеволод Дорофеев | Ответ = РезультатВопроса; |
136 | 13 | Всеволод Дорофеев | |
137 | 13 | Всеволод Дорофеев | Если Ответ <> КодВозвратаДиалога.Да Тогда |
138 | 13 | Всеволод Дорофеев | |
139 | 13 | Всеволод Дорофеев | Возврат; |
140 | 13 | Всеволод Дорофеев | |
141 | 13 | Всеволод Дорофеев | КонецЕсли; |
142 | 13 | Всеволод Дорофеев | |
143 | 13 | Всеволод Дорофеев | //Выполнение действий на положительный ответ |
144 | 13 | Всеволод Дорофеев | |
145 | 13 | Всеволод Дорофеев | КонецПроцедуры |
146 | 13 | Всеволод Дорофеев | |
147 | 13 | Всеволод Дорофеев | </pre> |