Управляемые формы 1С » История » Версия 35
Всеволод Дорофеев, 13.04.2023 12:43
1 | 1 | Всеволод Дорофеев | h1. Управляемые формы 1С |
---|---|---|---|
2 | 1 | Всеволод Дорофеев | |
3 | 22 | Всеволод Дорофеев | {{TOC}} |
4 | 22 | Всеволод Дорофеев | |
5 | 6 | Всеволод Дорофеев | h3. 1. Как программно удалить текущую строку из табличной части документа? |
6 | 3 | Всеволод Дорофеев | |
7 | 1 | Всеволод Дорофеев | Для этого следует воспользоваться методом Удалить() того объекта, который является источником данных для табличной части документа. Например, для документа "ПриходнаяНакладная" с табличной частью "Товары" это будет объект ДокументТабличнаяЧасть.ПриходнаяНакладная.Товары. В модуле формы этого документа удаление текущей строки табличной части будет выглядеть следующим образом: |
8 | 1 | Всеволод Дорофеев | |
9 | 7 | Всеволод Дорофеев | <pre> |
10 | 1 | Всеволод Дорофеев | ДокументОбъект.Товары.Удалить(ЭлементыФормы.Товары.ТекущаяСтрока); |
11 | 7 | Всеволод Дорофеев | </pre> |
12 | 1 | Всеволод Дорофеев | |
13 | 1 | Всеволод Дорофеев | В качестве параметра метода Удалить() передается текущая строка табличной части. |
14 | 1 | Всеволод Дорофеев | |
15 | 1 | Всеволод Дорофеев | Обратите внимание, что для удаления (как и для добавления) строк табличной части документа следует использовать методы табличной части (ДокументОбъект.Товары), а не методы табличного поля, отображающего эту табличную часть (ЭлементыФормы.Товары). |
16 | 1 | Всеволод Дорофеев | http://its.1c.ru/db/metod8dev/content/2481/hdoc |
17 | 4 | Всеволод Дорофеев | |
18 | 6 | Всеволод Дорофеев | h3. 2. Замена "Сообщить()" |
19 | 5 | Всеволод Дорофеев | |
20 | 2 | Всеволод Дорофеев | Вариант 1. |
21 | 2 | Всеволод Дорофеев | <pre> |
22 | 2 | Всеволод Дорофеев | ПоказатьОповещениеПользователя( |
23 | 2 | Всеволод Дорофеев | НСтр("ru = 'Изменения не зарегистрированы.'") |
24 | 2 | Всеволод Дорофеев | ,,, |
25 | 2 | Всеволод Дорофеев | БиблиотекаКартинок.Информация32); |
26 | 2 | Всеволод Дорофеев | </pre> |
27 | 2 | Всеволод Дорофеев | |
28 | 2 | Всеволод Дорофеев | Вариант 2. |
29 | 2 | Всеволод Дорофеев | <pre> |
30 | 2 | Всеволод Дорофеев | Сообщение = Новый СообщениеПользователю(); |
31 | 2 | Всеволод Дорофеев | Сообщение.Текст = "В строке 11 табличной части ""Номенклатура"" не хватает "; |
32 | 2 | Всеволод Дорофеев | Сообщение.Поле = "Номенклатура"; |
33 | 2 | Всеволод Дорофеев | |
34 | 2 | Всеволод Дорофеев | // Привязка объекта к реквизиту формы произойдет за счет |
35 | 2 | Всеволод Дорофеев | // установленного выше по стеку соответствия методом |
36 | 2 | Всеволод Дорофеев | // УстановитьСоответствиеОбъектаИРеквизитаФормы |
37 | 2 | Всеволод Дорофеев | Сообщение.УстановитьДанные(ОбъектДанных); |
38 | 2 | Всеволод Дорофеев | // Теперь у сообщения заполнено поле ПутьКДанным (установлено имя реквизита формы, до этого была пустая строка), |
39 | 2 | Всеволод Дорофеев | // и свойство КлючДанных (установлена ссылка на документ, до этого было Неопределено) |
40 | 2 | Всеволод Дорофеев | |
41 | 2 | Всеволод Дорофеев | // Сообщение выводится пользователю |
42 | 2 | Всеволод Дорофеев | Сообщение.Сообщить(); |
43 | 5 | Всеволод Дорофеев | </pre> |
44 | 8 | Всеволод Дорофеев | |
45 | 9 | Всеволод Дорофеев | h3. 3. Открытие управляемой формы не записанного документа в 1С 8.2/8.3 |
46 | 8 | Всеволод Дорофеев | |
47 | 8 | Всеволод Дорофеев | <pre> |
48 | 8 | Всеволод Дорофеев | &НаКлиенте |
49 | 8 | Всеволод Дорофеев | Процедура КомандаОткрытьФорму(Команда) |
50 | 8 | Всеволод Дорофеев | Форма = ПолучитьФорму("Справочник.Пользователи.ФормаОбъекта"); |
51 | 8 | Всеволод Дорофеев | ДанныеФормы = Форма.Объект; |
52 | 8 | Всеволод Дорофеев | ЗаполнитьНаСервере(ДанныеФормы); |
53 | 8 | Всеволод Дорофеев | КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); |
54 | 8 | Всеволод Дорофеев | Форма.Открыть(); |
55 | 8 | Всеволод Дорофеев | КонецПроцедуры |
56 | 8 | Всеволод Дорофеев | |
57 | 8 | Всеволод Дорофеев | &НаСервереБезКонтекста |
58 | 8 | Всеволод Дорофеев | Процедура ЗаполнитьНаСервере(НовыйОбъект); |
59 | 8 | Всеволод Дорофеев | НовыйОбъект.Наименование = "Новый элемент"; |
60 | 8 | Всеволод Дорофеев | Для К=1 По 100 Цикл |
61 | 8 | Всеволод Дорофеев | НоваяСтрока = НовыйОбъект.ТЧ.Добавить(); |
62 | 8 | Всеволод Дорофеев | НоваяСтрока.РеквизитТЧ = К; |
63 | 8 | Всеволод Дорофеев | КонецЦикла; |
64 | 8 | Всеволод Дорофеев | КонецПроцедуры |
65 | 8 | Всеволод Дорофеев | </pre> |
66 | 10 | Всеволод Дорофеев | |
67 | 35 | Всеволод Дорофеев | |
68 | 35 | Всеволод Дорофеев | h3. 5. Открытие управляемой формы объекта в 1С 8.2/8.3 |
69 | 35 | Всеволод Дорофеев | |
70 | 35 | Всеволод Дорофеев | <pre> |
71 | 35 | Всеволод Дорофеев | СсылкаНаЭлементСправочника = Элементы.Список.ТекущаяСтрока; |
72 | 35 | Всеволод Дорофеев | ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлементСправочника); |
73 | 35 | Всеволод Дорофеев | > ОткрытьФорму("Справочник.Организации.Форма.УниверсальнаяФормаОбъекта", ПараметрыФормы); |
74 | 35 | Всеволод Дорофеев | </pre> |
75 | 35 | Всеволод Дорофеев | |
76 | 35 | Всеволод Дорофеев | h3. 5. Передача параметров в управляемых формах |
77 | 10 | Всеволод Дорофеев | |
78 | 10 | Всеволод Дорофеев | Параметры передаются в виде структуры: |
79 | 10 | Всеволод Дорофеев | |
80 | 10 | Всеволод Дорофеев | <pre> |
81 | 10 | Всеволод Дорофеев | Параметры = Новый Структура("ТекущееЗначение",ПоследнийЭлемент); |
82 | 10 | Всеволод Дорофеев | ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры); |
83 | 10 | Всеволод Дорофеев | НайденыйЭлемент = ФормаВыбора.ОткрытьМодально(); |
84 | 10 | Всеволод Дорофеев | </pre> |
85 | 10 | Всеволод Дорофеев | |
86 | 10 | Всеволод Дорофеев | Также у управляемой формы появились «расширения формы» (объект, справочник, документ, отчет). В зависимости от типа объекта определяется состав доступных параметров. Например, если в форме выбора справочника нужно позиционироваться на определенном элементе, то используется параметр «ТекущееЗначение». Большим плюсом является, что в самой форме не требуется писать обработчиков для предопределенных параметров, сокращает количество кода. |
87 | 10 | Всеволод Дорофеев | |
88 | 10 | Всеволод Дорофеев | Также у разработчика появилась возможность определять свои параметры (в конструкторе управляемой формы вкладка «Параметры»). Время жизни параметров ограничено обработчиком ПриСозданииНаСервере, что логично т.к. параметры требуются только при создании формы, но если данный параметр определяет уникальность формы (установлен флаг «ключевой параметр» в свойствах параметра) он будет доступен и в других обработчиках. |
89 | 10 | Всеволод Дорофеев | |
90 | 10 | Всеволод Дорофеев | Для передачи специфического параметра манипуляций требуется сделать немного больше: |
91 | 10 | Всеволод Дорофеев | |
92 | 10 | Всеволод Дорофеев | 1. Определить в управляемой форме параметр. |
93 | 10 | Всеволод Дорофеев | |
94 | 10 | Всеволод Дорофеев | В обработчике ПриСозданииНаСервере определить обработку данного параметра (обращение к переданным параметрам через свойство «Параметры», имеющее тип ДанныеФормыСтруктура) |
95 | 10 | Всеволод Дорофеев | |
96 | 10 | Всеволод Дорофеев | 1. Описать получение формы и передать значение нового параметра в параметрах функции ПолучитьФорму. |
97 | 10 | Всеволод Дорофеев | |
98 | 10 | Всеволод Дорофеев | Таким образом код будет иметь вид: |
99 | 10 | Всеволод Дорофеев | |
100 | 10 | Всеволод Дорофеев | В месте получения формы |
101 | 10 | Всеволод Дорофеев | <pre> |
102 | 10 | Всеволод Дорофеев | Параметры = Новый Структура("НовыйПараметр",ПоследнийЭлемент); |
103 | 10 | Всеволод Дорофеев | ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры); |
104 | 10 | Всеволод Дорофеев | </pre> |
105 | 10 | Всеволод Дорофеев | |
106 | 10 | Всеволод Дорофеев | В модуле управляемой формы |
107 | 10 | Всеволод Дорофеев | <pre> |
108 | 10 | Всеволод Дорофеев | &НаСервере |
109 | 10 | Всеволод Дорофеев | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) |
110 | 10 | Всеволод Дорофеев | Если Параметры.Свойство("НовыйПараметр") Тогда |
111 | 10 | Всеволод Дорофеев | // здесь код обработки параметра |
112 | 10 | Всеволод Дорофеев | КонецЕсли; |
113 | 10 | Всеволод Дорофеев | КонецПроцедуры |
114 | 10 | Всеволод Дорофеев | </pre> |
115 | 11 | Всеволод Дорофеев | |
116 | 12 | Всеволод Дорофеев | h3. 4. Отбор в таблице значений, расположенной на форме |
117 | 11 | Всеволод Дорофеев | |
118 | 11 | Всеволод Дорофеев | Например, отбор строк в подчиненной таблице при смене "Владельца" в основной таблице |
119 | 11 | Всеволод Дорофеев | <pre> |
120 | 11 | Всеволод Дорофеев | &НаКлиенте |
121 | 11 | Всеволод Дорофеев | Процедура ИсходнаяНоменклатураПриАктивизацииСтроки(Элемент) |
122 | 11 | Всеволод Дорофеев | |
123 | 11 | Всеволод Дорофеев | Структура = Новый Структура("ИсходнаяНоменклатура", Элементы["ИсходнаяНоменклатура"].ТекущиеДанные.Номенклатура); |
124 | 11 | Всеволод Дорофеев | НовыйОтбор = Новый ФиксированнаяСтруктура(Структура); |
125 | 11 | Всеволод Дорофеев | Элементы["НоваяНоменклатура"].ОтборСтрок=НовыйОтбор; |
126 | 11 | Всеволод Дорофеев | |
127 | 11 | Всеволод Дорофеев | КонецПроцедуры |
128 | 11 | Всеволод Дорофеев | |
129 | 11 | Всеволод Дорофеев | </pre> |
130 | 13 | Всеволод Дорофеев | |
131 | 13 | Всеволод Дорофеев | h3. Вопрос в управляемых формах |
132 | 13 | Всеволод Дорофеев | |
133 | 13 | Всеволод Дорофеев | Замена функции "Вопрос(...)" |
134 | 13 | Всеволод Дорофеев | |
135 | 13 | Всеволод Дорофеев | <pre> |
136 | 13 | Всеволод Дорофеев | &НаКлиенте |
137 | 13 | Всеволод Дорофеев | Процедура ЗадатьВопрос(Команда) |
138 | 13 | Всеволод Дорофеев | |
139 | 13 | Всеволод Дорофеев | ПоказатьВопрос(Новый ОписаниеОповещения("ОбработкаОтветаЗавершение", ЭтотОбъект), "Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет); |
140 | 13 | Всеволод Дорофеев | |
141 | 13 | Всеволод Дорофеев | КонецПроцедуры |
142 | 13 | Всеволод Дорофеев | |
143 | 13 | Всеволод Дорофеев | &НаКлиенте |
144 | 13 | Всеволод Дорофеев | Процедура ОбработкаОтветаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт |
145 | 13 | Всеволод Дорофеев | |
146 | 13 | Всеволод Дорофеев | Ответ = РезультатВопроса; |
147 | 13 | Всеволод Дорофеев | |
148 | 13 | Всеволод Дорофеев | Если Ответ <> КодВозвратаДиалога.Да Тогда |
149 | 13 | Всеволод Дорофеев | |
150 | 13 | Всеволод Дорофеев | Возврат; |
151 | 13 | Всеволод Дорофеев | |
152 | 13 | Всеволод Дорофеев | КонецЕсли; |
153 | 13 | Всеволод Дорофеев | |
154 | 13 | Всеволод Дорофеев | //Выполнение действий на положительный ответ |
155 | 13 | Всеволод Дорофеев | |
156 | 13 | Всеволод Дорофеев | КонецПроцедуры |
157 | 13 | Всеволод Дорофеев | |
158 | 13 | Всеволод Дорофеев | </pre> |
159 | 14 | Всеволод Дорофеев | |
160 | 14 | Всеволод Дорофеев | h3. Подключение внешней компоненты из макета внешней обработки |
161 | 14 | Всеволод Дорофеев | |
162 | 14 | Всеволод Дорофеев | Стандартное подключение макета из встроенной обработки: |
163 | 14 | Всеволод Дорофеев | <pre> |
164 | 14 | Всеволод Дорофеев | ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ВстроеннаяОбработка.Макет.КомпонентаПечатиШтрихкодовLinux64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native); |
165 | 14 | Всеволод Дорофеев | </pre> |
166 | 14 | Всеволод Дорофеев | |
167 | 14 | Всеволод Дорофеев | Подключение внешней компоненты из макета внешней обработки |
168 | 14 | Всеволод Дорофеев | <pre> |
169 | 14 | Всеволод Дорофеев | ПодключениеВыполнено = ПодключитьВнешнююКомпоненту(ПоместитьВоВременноеХранилище(ПолучитьМакет("КомпонентаПечатиШтрихкодовLinux64")), "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native); |
170 | 14 | Всеволод Дорофеев | </pre> |
171 | 15 | Всеволод Дорофеев | |
172 | 15 | Всеволод Дорофеев | h3. Методы ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища |
173 | 15 | Всеволод Дорофеев | |
174 | 15 | Всеволод Дорофеев | источник http://catalog.mista.ru/public/198766/ |
175 | 15 | Всеволод Дорофеев | |
176 | 15 | Всеволод Дорофеев | Временное хранилище – секретное оружие |
177 | 15 | Всеволод Дорофеев | |
178 | 15 | Всеволод Дорофеев | При работе с управляемыми формами быстро становится ясно, что ограничения клиент-серверного взаимодействия очень сильно сужают возможности разработчика. Поэтому, платформа 1С предоставляет хитрый секретный ход под названием «ВременноеХранилище». Эта сущность позволяет сохранить на сервере некоторое состояние между двумя серверными вызовами. Я слышу возгласы: «А кто сказал, что состояние нельзя хранить!» Справедливое замечание, состояние хранить все-таки можно, но недолго. |
179 | 15 | Всеволод Дорофеев | |
180 | 15 | Всеволод Дорофеев | Временное хранилище позволяет оставить на сервере некоторые данные, а вместо них получить короткую строку – адрес временного хранилища. Этот адрес можно передать на клиента, там он будет спокойно лежать, а когда понадобятся данные из хранилища, то мы по этому адресу сможем их получить. |
181 | 15 | Всеволод Дорофеев | |
182 | 15 | Всеволод Дорофеев | Для работы со временным хранилищем используются методы ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища. |
183 | 15 | Всеволод Дорофеев | |
184 | 15 | Всеволод Дорофеев | С методом «Получить» все просто, он по заданному адресу возвращает значение, которое лежит в хранилище. |
185 | 15 | Всеволод Дорофеев | |
186 | 15 | Всеволод Дорофеев | С методом «Поместить» несколько сложнее. Дело в том, что помещать можно в 2 разных хранилища – простое и хранилище формы. Хранилище формы живет на сервере столько, сколько живет сама форма. Простое хранилище живет ровно 2 серверных вызова. В синтакс-помощнике об этом написано целых несколько умных строк. Я никогда не понимал, что они означают. Опытным путем было установлено, что срок жизни – 2 серверных вызова. |
187 | 15 | Всеволод Дорофеев | |
188 | 15 | Всеволод Дорофеев | Первый – мы помещаем что-то в хранилище и возвращаем адрес на клиента. |
189 | 15 | Всеволод Дорофеев | Клиент делает второй вызов и по этому адресу может получить данные. |
190 | 15 | Всеволод Дорофеев | В третьем вызове по этому адресу уже ничего не будет. Платформа очистит хранилище |
191 | 15 | Всеволод Дорофеев | |
192 | 15 | Всеволод Дорофеев | С хранилищем формы ситуация более интересная. Если вторым параметром метода «ПоместитьВоВременноеХранилище» передать идентификатор формы (ЭтаФорма.УникальныйИдентификатор), то данные в хранилище будут привязаны к сроку жизни формы и не будут удалятся ни в первых, ни во вторых, ни во всех прочих вызовах сервера. |
193 | 15 | Всеволод Дорофеев | |
194 | 15 | Всеволод Дорофеев | Таким образом, временное хранилище, это еще одно место, в котором (помимо реквизитов формы) можно сохранять состояние на сервере. Причем, в хранилище можно хранить даже данные, которые на клиенте недоступны, а стало быть, в реквизитах формы их разместить нельзя. |
195 | 16 | Всеволод Дорофеев | |
196 | 27 | Всеволод Дорофеев | h3. Динамический список. Обработка выделенных строк |
197 | 16 | Всеволод Дорофеев | |
198 | 16 | Всеволод Дорофеев | <pre> |
199 | 16 | Всеволод Дорофеев | Для каждого Эл из Элементы.СписокСпецификаций.ВыделенныеСтроки Цикл |
200 | 16 | Всеволод Дорофеев | Сообщить(Элементы.СписокСпецификаций.ДанныеСтроки(Эл).СпецификацияСсылка); |
201 | 1 | Всеволод Дорофеев | КонецЦикла; |
202 | 20 | Всеволод Дорофеев | </pre> |
203 | 20 | Всеволод Дорофеев | |
204 | 20 | Всеволод Дорофеев | <pre> |
205 | 20 | Всеволод Дорофеев | МассивСтрок = Новый Массив; |
206 | 20 | Всеволод Дорофеев | Для Каждого Строка Из Элементы.Товары.ВыделенныеСтроки Цикл |
207 | 20 | Всеволод Дорофеев | МассивСтрок.Добавить(Объект.Товары.НайтиПоИдентификатору(Строка)); |
208 | 1 | Всеволод Дорофеев | КонецЦикла; |
209 | 27 | Всеволод Дорофеев | |
210 | 27 | Всеволод Дорофеев | </pre> |
211 | 27 | Всеволод Дорофеев | |
212 | 27 | Всеволод Дорофеев | h3. Динамический список. Отбор в динамическом списке при открытии. |
213 | 27 | Всеволод Дорофеев | |
214 | 27 | Всеволод Дорофеев | https://its.1c.ru/db/metod8dev/content/3557/hdoc |
215 | 27 | Всеволод Дорофеев | |
216 | 27 | Всеволод Дорофеев | <pre> |
217 | 27 | Всеволод Дорофеев | |
218 | 27 | Всеволод Дорофеев | &НаКлиенте |
219 | 27 | Всеволод Дорофеев | Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) |
220 | 27 | Всеволод Дорофеев | |
221 | 27 | Всеволод Дорофеев | ЗначениеОтбора = Новый Структура("СерияНоменклатуры", ПараметрКоманды); |
222 | 27 | Всеволод Дорофеев | ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора); |
223 | 27 | Всеволод Дорофеев | |
224 | 27 | Всеволод Дорофеев | ОткрытьФорму("РегистрСведений.ксРезультатыПроверкиКачестваСерийНоменклатуры.Форма.ФормаРезультатыПроверкиКачестваСерииНоменклатуры", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); |
225 | 27 | Всеволод Дорофеев | |
226 | 27 | Всеволод Дорофеев | КонецПроцедуры |
227 | 20 | Всеволод Дорофеев | |
228 | 16 | Всеволод Дорофеев | </pre> |
229 | 17 | Всеволод Дорофеев | |
230 | 17 | Всеволод Дорофеев | h3. Выделение строк в таблице на форме |
231 | 17 | Всеволод Дорофеев | |
232 | 17 | Всеволод Дорофеев | <pre> |
233 | 17 | Всеволод Дорофеев | Для каждого стр из ФормаДокумента.Объект.ОбеспечениеМатериаламиИРаботами Цикл |
234 | 17 | Всеволод Дорофеев | ФормаДокумента.Элементы.ОбеспечениеМатериаламиИРаботами.ВыделенныеСтроки.Добавить(стр.Получитьидентификатор()); |
235 | 17 | Всеволод Дорофеев | КонецЦикла; |
236 | 17 | Всеволод Дорофеев | </pre> |
237 | 18 | Всеволод Дорофеев | |
238 | 18 | Всеволод Дорофеев | h3. Как при открытии формы определить, что создается новый элемент? |
239 | 18 | Всеволод Дорофеев | |
240 | 18 | Всеволод Дорофеев | Проверять можно в обработчике события *ОбработкаЗаполнения*. Это событие возникает только при создании новых объектов. |
241 | 18 | Всеволод Дорофеев | |
242 | 18 | Всеволод Дорофеев | Или в *ПриСозданииНаСервере* |
243 | 18 | Всеволод Дорофеев | |
244 | 18 | Всеволод Дорофеев | https://its.1c.ru/db/metod8dev/content/3545/hdoc |
245 | 18 | Всеволод Дорофеев | <pre> |
246 | 18 | Всеволод Дорофеев | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) |
247 | 18 | Всеволод Дорофеев | |
248 | 18 | Всеволод Дорофеев | Если Параметры.Ключ.Пустая() Тогда |
249 | 18 | Всеволод Дорофеев | |
250 | 18 | Всеволод Дорофеев | Сообщить("Создается новый объект"); |
251 | 18 | Всеволод Дорофеев | |
252 | 18 | Всеволод Дорофеев | КонецЕсли; |
253 | 18 | Всеволод Дорофеев | |
254 | 18 | Всеволод Дорофеев | КонецПроцедуры |
255 | 18 | Всеволод Дорофеев | </pre> |
256 | 19 | Всеволод Дорофеев | |
257 | 19 | Всеволод Дорофеев | |
258 | 19 | Всеволод Дорофеев | h3. Как выполнить экспортируемую процедуру объекта, находясь в его форме |
259 | 19 | Всеволод Дорофеев | |
260 | 19 | Всеволод Дорофеев | {{collapse(Код...) |
261 | 19 | Всеволод Дорофеев | https://its.1c.ru/db/metod8dev#content:4146:hdoc |
262 | 19 | Всеволод Дорофеев | <pre> |
263 | 19 | Всеволод Дорофеев | &НаКлиенте |
264 | 19 | Всеволод Дорофеев | Процедура ПересчитатьЦеныДокумента(Команда) |
265 | 19 | Всеволод Дорофеев | |
266 | 19 | Всеволод Дорофеев | ПересчитатьЦеныНаСервере(); |
267 | 19 | Всеволод Дорофеев | |
268 | 19 | Всеволод Дорофеев | КонецПроцедуры |
269 | 19 | Всеволод Дорофеев | |
270 | 19 | Всеволод Дорофеев | &НаСервере |
271 | 19 | Всеволод Дорофеев | Процедура ПересчитатьЦеныНаСервере() |
272 | 19 | Всеволод Дорофеев | |
273 | 19 | Всеволод Дорофеев | ОбъектДокумента = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.Накладная")); |
274 | 19 | Всеволод Дорофеев | ОбъектДокумента.НачислитьСкидку(10); |
275 | 19 | Всеволод Дорофеев | ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект"); |
276 | 19 | Всеволод Дорофеев | |
277 | 19 | Всеволод Дорофеев | КонецПроцедуры |
278 | 19 | Всеволод Дорофеев | |
279 | 19 | Всеволод Дорофеев | </pre> |
280 | 19 | Всеволод Дорофеев | |
281 | 19 | Всеволод Дорофеев | }} |
282 | 21 | Всеволод Дорофеев | |
283 | 21 | Всеволод Дорофеев | |
284 | 21 | Всеволод Дорофеев | h3. Переход на следующую строку в той же колонке при нажатии Enter |
285 | 21 | Всеволод Дорофеев | |
286 | 21 | Всеволод Дорофеев | <pre> |
287 | 21 | Всеволод Дорофеев | &НаКлиенте |
288 | 21 | Всеволод Дорофеев | Процедура ОсновныеЯчейкиЯчейкаПриИзменении(Элемент) |
289 | 21 | Всеволод Дорофеев | ТекущиеДанные = Элементы.ОсновныеЯчейки.ТекущиеДанные; |
290 | 21 | Всеволод Дорофеев | ОбработатьНазначениеОсновнойЯчейки(ТекущиеДанные.Номенклатура, ТекущиеДанные.Склад, ТекущиеДанные.Ячейка, Ложь); |
291 | 21 | Всеволод Дорофеев | |
292 | 21 | Всеволод Дорофеев | Стр=Элементы.ОсновныеЯчейки.ТекущиеДанные; |
293 | 21 | Всеволод Дорофеев | Если Стр<>Неопределено Тогда |
294 | 21 | Всеволод Дорофеев | Если Элементы.ОсновныеЯчейки.ТекущийЭлемент.Имя="ОсновныеЯчейкиЯчейка" Тогда |
295 | 21 | Всеволод Дорофеев | НС=Объект.ОсновныеЯчейки.НайтиСтроки(Новый Структура("НомерСтроки",Стр.НомерСтроки+1)); |
296 | 21 | Всеволод Дорофеев | Если НС.Количество()>0 Тогда |
297 | 21 | Всеволод Дорофеев | Элементы.ОсновныеЯчейки.ТекущаяСтрока=НС[0].ПолучитьИдентификатор(); |
298 | 21 | Всеволод Дорофеев | Элементы.ОсновныеЯчейки.ТекущийЭлемент =Элементы.ОсновныеЯчейки.ПодчиненныеЭлементы.ОсновныеЯчейкиЯчейка; |
299 | 21 | Всеволод Дорофеев | ПодключитьОбработчикОжидания("ИзменитьСтрокуОжидание", 0.1, Истина); |
300 | 21 | Всеволод Дорофеев | КонецЕсли; |
301 | 21 | Всеволод Дорофеев | КонецЕсли; |
302 | 21 | Всеволод Дорофеев | КонецЕсли; |
303 | 21 | Всеволод Дорофеев | |
304 | 21 | Всеволод Дорофеев | КонецПроцедуры |
305 | 21 | Всеволод Дорофеев | |
306 | 21 | Всеволод Дорофеев | &НаКлиенте |
307 | 21 | Всеволод Дорофеев | Процедура ИзменитьСтрокуОжидание() Экспорт |
308 | 21 | Всеволод Дорофеев | Элементы.ОсновныеЯчейки.ИзменитьСтроку(); |
309 | 21 | Всеволод Дорофеев | КонецПроцедуры |
310 | 21 | Всеволод Дорофеев | |
311 | 21 | Всеволод Дорофеев | </pre> |
312 | 23 | Всеволод Дорофеев | |
313 | 23 | Всеволод Дорофеев | h3. Проблема обновления реквизитов документа в другой сессии (кэш 1С) |
314 | 23 | Всеволод Дорофеев | |
315 | 23 | Всеволод Дорофеев | В динамическом списке изменения отображаются при обновлении формы. В ТЧ документа - нет. |
316 | 23 | Всеволод Дорофеев | Требуется принудительно обновлять на клиенте. Например: |
317 | 23 | Всеволод Дорофеев | |
318 | 23 | Всеволод Дорофеев | <pre> |
319 | 23 | Всеволод Дорофеев | ОповеститьОбИзменении(Тип("СправочникСсылка.СерииНоменклатуры")); |
320 | 23 | Всеволод Дорофеев | Элементы.СПисок.Обновить(); |
321 | 23 | Всеволод Дорофеев | </pre> |
322 | 24 | Всеволод Дорофеев | |
323 | 33 | Всеволод Дорофеев | h3. Программное создание реквизитов (флаг) формы и расположение на форме |
324 | 24 | Всеволод Дорофеев | |
325 | 24 | Всеволод Дорофеев | Флажок |
326 | 26 | Всеволод Дорофеев | https://gee12.space/komanda-flag-na-forme-1s/ |
327 | 24 | Всеволод Дорофеев | <pre> |
328 | 24 | Всеволод Дорофеев | &НаСервере |
329 | 24 | Всеволод Дорофеев | Процедура ДобавитьФлажокНаСервере() |
330 | 24 | Всеволод Дорофеев | |
331 | 24 | Всеволод Дорофеев | //Создание реквизита |
332 | 24 | Всеволод Дорофеев | МассивТиповБулево = Новый Массив; |
333 | 24 | Всеволод Дорофеев | МассивТиповБулево.Добавить(Тип("Булево")); |
334 | 24 | Всеволод Дорофеев | |
335 | 24 | Всеволод Дорофеев | РеквизитФлаг = Новый РеквизитФормы("ФлагФормы",Новый ОписаниеТипов(МассивТиповБулево),,"Флаг"); |
336 | 25 | Всеволод Дорофеев | РеквизитФлаг.СохраняемыеДанные = Истина; |
337 | 24 | Всеволод Дорофеев | НовыеРеквизиты = Новый Массив; |
338 | 24 | Всеволод Дорофеев | НовыеРеквизиты.Добавить(РеквизитФлаг); |
339 | 24 | Всеволод Дорофеев | |
340 | 24 | Всеволод Дорофеев | ИзменитьРеквизиты(НовыеРеквизиты); |
341 | 24 | Всеволод Дорофеев | |
342 | 1 | Всеволод Дорофеев | //Располагаем на форме |
343 | 25 | Всеволод Дорофеев | |
344 | 25 | Всеволод Дорофеев | НоваяКоманда = Команды.Добавить("ПредварительныйПросмотр"); |
345 | 25 | Всеволод Дорофеев | НоваяКоманда.Действие = "УстановитьПредварительныйПросмотр"; |
346 | 25 | Всеволод Дорофеев | НоваяКоманда.Заголовок = "Предварительный просмотр"; |
347 | 1 | Всеволод Дорофеев | |
348 | 25 | Всеволод Дорофеев | НовыйЭлемент = Элементы.Добавить("ФлагФормы",Тип("КнопкаФормы"), Элементы.ФормаКоманднаяПанель); |
349 | 25 | Всеволод Дорофеев | НовыйЭлемент.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю; |
350 | 25 | Всеволод Дорофеев | НовыйЭлемент.ИмяКоманды = НоваяКоманда.Имя; |
351 | 25 | Всеволод Дорофеев | НовыйЭлемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; |
352 | 25 | Всеволод Дорофеев | НовыйЭлемент.ТолькоВоВсехДействиях = Истина; |
353 | 25 | Всеволод Дорофеев | НовыйЭлемент.Пометка = ЭтаФорма["ФлагФормы"]; |
354 | 25 | Всеволод Дорофеев | |
355 | 1 | Всеволод Дорофеев | КонецПроцедуры |
356 | 25 | Всеволод Дорофеев | |
357 | 25 | Всеволод Дорофеев | &НаКлиенте |
358 | 25 | Всеволод Дорофеев | Процедура ДобавитьФлажок(Команда) |
359 | 25 | Всеволод Дорофеев | ДобавитьФлажокНаСервере(); |
360 | 25 | Всеволод Дорофеев | КонецПроцедуры |
361 | 25 | Всеволод Дорофеев | |
362 | 25 | Всеволод Дорофеев | &НаКлиенте |
363 | 25 | Всеволод Дорофеев | Процедура УстановитьПредварительныйПросмотр(Команда) |
364 | 25 | Всеволод Дорофеев | |
365 | 25 | Всеволод Дорофеев | ЭтаФорма["ФлагФормы"] = не ЭтаФорма["ФлагФормы"]; |
366 | 25 | Всеволод Дорофеев | Элементы.ФлагФормы.Пометка = ЭтаФорма["ФлагФормы"]; |
367 | 25 | Всеволод Дорофеев | |
368 | 25 | Всеволод Дорофеев | КонецПроцедуры |
369 | 25 | Всеволод Дорофеев | |
370 | 1 | Всеволод Дорофеев | </pre> |
371 | 33 | Всеволод Дорофеев | |
372 | 33 | Всеволод Дорофеев | h3. Программное создание кнопки на форме |
373 | 33 | Всеволод Дорофеев | |
374 | 33 | Всеволод Дорофеев | <pre> |
375 | 33 | Всеволод Дорофеев | &НаСервере |
376 | 33 | Всеволод Дорофеев | Процедура КСФормы_ксУведомитьОКОПоступленииПослеНаСервере() |
377 | 33 | Всеволод Дорофеев | // Вставить содержимое обработчика. |
378 | 33 | Всеволод Дорофеев | КонецПроцедуры |
379 | 33 | Всеволод Дорофеев | |
380 | 33 | Всеволод Дорофеев | &НаКлиенте |
381 | 33 | Всеволод Дорофеев | Процедура КСФормы_ксУведомитьОКОПоступленииПосле(Команда) |
382 | 33 | Всеволод Дорофеев | |
383 | 33 | Всеволод Дорофеев | КСФормы_ксУведомитьОКОПоступленииПослеНаСервере(); |
384 | 33 | Всеволод Дорофеев | |
385 | 33 | Всеволод Дорофеев | КонецПроцедуры |
386 | 33 | Всеволод Дорофеев | |
387 | 33 | Всеволод Дорофеев | &НаСервере |
388 | 33 | Всеволод Дорофеев | Процедура КСФормы_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) |
389 | 33 | Всеволод Дорофеев | |
390 | 33 | Всеволод Дорофеев | // Новая команда |
391 | 33 | Всеволод Дорофеев | ИмяКоманды = "ксУведомитьОКОПоступленииПосле"; |
392 | 33 | Всеволод Дорофеев | Команда = ЭтотОбъект.Команды.Добавить(ИмяКоманды); |
393 | 33 | Всеволод Дорофеев | Команда.Действие = "КСФормы_ксУведомитьОКОПоступленииПосле"; |
394 | 33 | Всеволод Дорофеев | Команда.Заголовок = "Уведомить ОК о поступлении"; |
395 | 33 | Всеволод Дорофеев | Команда.Подсказка = "Уведомить Отдел Качества о поступлении"; |
396 | 33 | Всеволод Дорофеев | Команда.Картинка = БиблиотекаКартинок.ОтправитьСообщение; |
397 | 33 | Всеволод Дорофеев | Команда.Отображение = ОтображениеКнопки.КартинкаИТекст; |
398 | 33 | Всеволод Дорофеев | |
399 | 33 | Всеволод Дорофеев | // Кнопка с привязкой команды |
400 | 33 | Всеволод Дорофеев | Кнопка = ЭтотОбъект.Элементы.Добавить("ксСписокУведомитьОКОПоступленииПосле", Тип("КнопкаФормы"), ЭтотОбъект.Элементы.СписокКоманднаяПанель); |
401 | 33 | Всеволод Дорофеев | Кнопка.ИмяКоманды = ИмяКоманды; |
402 | 33 | Всеволод Дорофеев | |
403 | 33 | Всеволод Дорофеев | КонецПроцедуры |
404 | 33 | Всеволод Дорофеев | |
405 | 33 | Всеволод Дорофеев | </pre> |
406 | 33 | Всеволод Дорофеев | |
407 | 34 | Всеволод Дорофеев | Передвинуть элемент |
408 | 34 | Всеволод Дорофеев | <pre> |
409 | 34 | Всеволод Дорофеев | Элементы.Переместить(Элт,Элементы.ГруппаШапка,Элементы.ГруппаВидаОплаты); |
410 | 34 | Всеволод Дорофеев | |
411 | 34 | Всеволод Дорофеев | //Элт - вновь созданный элемент, |
412 | 34 | Всеволод Дорофеев | // переместили в ГруппуШапка, перед Группой Вида оплаты |
413 | 34 | Всеволод Дорофеев | </pre> |
414 | 28 | Всеволод Дорофеев | |
415 | 28 | Всеволод Дорофеев | h3. Программный ввод на основании |
416 | 28 | Всеволод Дорофеев | |
417 | 28 | Всеволод Дорофеев | https://its.1c.ru/db/content/metod8dev/src/developers/platform/qanda/form/applied/i8103562.htm |
418 | 28 | Всеволод Дорофеев | |
419 | 28 | Всеволод Дорофеев | <pre> |
420 | 28 | Всеволод Дорофеев | ПараметрыФормы = Новый Структура("Основание", Объект.Ссылка); |
421 | 28 | Всеволод Дорофеев | ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы); |
422 | 28 | Всеволод Дорофеев | </pre> |
423 | 29 | Всеволод Дорофеев | |
424 | 29 | Всеволод Дорофеев | h3. Обработка проверки заполнения |
425 | 29 | Всеволод Дорофеев | |
426 | 29 | Всеволод Дорофеев | https://its.1c.ru/db/metod8dev/content/3578/hdoc |
427 | 29 | Всеволод Дорофеев | Есть два события |
428 | 30 | Всеволод Дорофеев | * Обработка проверки заполнения на сервере (ОбработкаПроверкиЗаполненияНаСервере) – можно обработать в модуле формы. Предназначено *для проверки заполнения реквизитов формы*, не объекта. Для документов вызов зависит от того, установлено ли у формы документа проведение при записи. Если установлено, то вызов при проведении, иначе при записи |
429 | 30 | Всеволод Дорофеев | * Обработка проверки заполнения (ОбработкаПроверкиЗаполнения) – можно обработать в модуле прикладного объекта. |
430 | 31 | Всеволод Дорофеев | |
431 | 31 | Всеволод Дорофеев | |
432 | 31 | Всеволод Дорофеев | h3. Форма выбора. Как из формы списка сделать форму выбора? |
433 | 31 | Всеволод Дорофеев | |
434 | 31 | Всеволод Дорофеев | Варианты: |
435 | 31 | Всеволод Дорофеев | 1. Использовать сгенерированную платформой форму и не указывать в реквизите форму для выбора. |
436 | 31 | Всеволод Дорофеев | 2. В форме списка списку назначаем РежимВыбора, на событие вешаем оповещение о выборе... |
437 | 31 | Всеволод Дорофеев | |
438 | 31 | Всеволод Дорофеев | <pre> |
439 | 31 | Всеволод Дорофеев | Процедура ФормаСпискаВыбораПриСозданииНаСервере(Знач Список, Знач ЭлементФормыСписок, Знач Параметры, Знач АвтоматическоеСохранениеПользовательскихНастроек = Ложь) Экспорт |
440 | 31 | Всеволод Дорофеев | |
441 | 31 | Всеволод Дорофеев | // Элементы.Список - основной реквизит с динамическим списком |
442 | 31 | Всеволод Дорофеев | ЭлементФормыСписок.РежимВыбора = Параметры.РежимВыбора; |
443 | 31 | Всеволод Дорофеев | Если Параметры.МножественныйВыбор <> Неопределено Тогда |
444 | 31 | Всеволод Дорофеев | ЭлементФормыСписок.МножественныйВыбор = Параметры.МножественныйВыбор; |
445 | 31 | Всеволод Дорофеев | КонецЕсли; |
446 | 31 | Всеволод Дорофеев | // обход автоматического сохранения пользовательских настроек для разных режимов |
447 | 31 | Всеволод Дорофеев | Если Параметры.РежимВыбора И Не ЗначениеЗаполнено(Параметры.КлючПользовательскихНастроек) Тогда |
448 | 31 | Всеволод Дорофеев | Параметры.КлючПользовательскихНастроек = "РежимВыбора"; |
449 | 31 | Всеволод Дорофеев | Список.АвтоматическоеСохранениеПользовательскихНастроек = АвтоматическоеСохранениеПользовательскихНастроек; |
450 | 31 | Всеволод Дорофеев | КонецЕсли; |
451 | 31 | Всеволод Дорофеев | |
452 | 31 | Всеволод Дорофеев | КонецПроцедуры |
453 | 31 | Всеволод Дорофеев | </pre> |
454 | 31 | Всеволод Дорофеев | |
455 | 31 | Всеволод Дорофеев | |
456 | 31 | Всеволод Дорофеев | |
457 | 31 | Всеволод Дорофеев | https://infostart.ru/1c/articles/549160/ |
458 | 31 | Всеволод Дорофеев | https://its.1c.ru/db/metod8dev/content/2222/hdoc@208c875c |
459 | 32 | Всеволод Дорофеев | |
460 | 32 | Всеволод Дорофеев | |
461 | 32 | Всеволод Дорофеев | h3. Реализация ввода на основании в расширении |
462 | 32 | Всеволод Дорофеев | |
463 | 32 | Всеволод Дорофеев | 1. Создать общую команду, например: |
464 | 32 | Всеволод Дорофеев | "СоздатьПеремещениеСырьяНаОснованииСборкиТоваров" |
465 | 32 | Всеволод Дорофеев | Группа = Командная панель формы.Создать на основании |
466 | 32 | Всеволод Дорофеев | ТипПараметраКоманды = ДокументСсылка.СборкаТоваров |
467 | 32 | Всеволод Дорофеев | |
468 | 32 | Всеволод Дорофеев | Модуль команды: |
469 | 32 | Всеволод Дорофеев | <pre> |
470 | 32 | Всеволод Дорофеев | &НаКлиенте |
471 | 32 | Всеволод Дорофеев | Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) |
472 | 32 | Всеволод Дорофеев | |
473 | 32 | Всеволод Дорофеев | СтруктураДанных = Новый Структура("ОснованиеСборка", ПараметрКоманды); |
474 | 32 | Всеволод Дорофеев | ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", СтруктураДанных); |
475 | 32 | Всеволод Дорофеев | |
476 | 32 | Всеволод Дорофеев | ОткрытьФорму("Документ.ПеремещениеТоваров.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, |
477 | 32 | Всеволод Дорофеев | ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); |
478 | 32 | Всеволод Дорофеев | |
479 | 32 | Всеволод Дорофеев | КонецПроцедуры |
480 | 32 | Всеволод Дорофеев | </pre> |
481 | 32 | Всеволод Дорофеев | |
482 | 32 | Всеволод Дорофеев | Из модуля документа Перемещение добавляем в расширение процедуру |
483 | 32 | Всеволод Дорофеев | |
484 | 32 | Всеволод Дорофеев | <pre> |
485 | 32 | Всеволод Дорофеев | |
486 | 32 | Всеволод Дорофеев | &После("ОбработкаЗаполнения") |
487 | 32 | Всеволод Дорофеев | Процедура Расш_ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) |
488 | 32 | Всеволод Дорофеев | |
489 | 32 | Всеволод Дорофеев | Перем ОснованиеСборка; |
490 | 32 | Всеволод Дорофеев | |
491 | 32 | Всеволод Дорофеев | Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда |
492 | 32 | Всеволод Дорофеев | |
493 | 32 | Всеволод Дорофеев | Если ДанныеЗаполнения.Свойство("ОснованиеСборка", ОснованиеСборка) Тогда |
494 | 32 | Всеволод Дорофеев | |
495 | 32 | Всеволод Дорофеев | Если ТипЗнч(ОснованиеСборка) = Тип("ДокументСсылка.СборкаТоваров") Тогда |
496 | 32 | Всеволод Дорофеев | |
497 | 32 | Всеволод Дорофеев | ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОснованиеСборка); |
498 | 32 | Всеволод Дорофеев | |
499 | 32 | Всеволод Дорофеев | Для Каждого СтрокаОснование Из ОснованиеСборка.Товары Цикл |
500 | 32 | Всеволод Дорофеев | |
501 | 32 | Всеволод Дорофеев | НовСтр = Товары.Добавить(); |
502 | 32 | Всеволод Дорофеев | ЗаполнитьЗначенияСвойств(НовСтр, СтрокаОснование); |
503 | 32 | Всеволод Дорофеев | |
504 | 32 | Всеволод Дорофеев | КонецЦикла; |
505 | 32 | Всеволод Дорофеев | |
506 | 32 | Всеволод Дорофеев | КонецЕсли; |
507 | 32 | Всеволод Дорофеев | |
508 | 32 | Всеволод Дорофеев | КонецЕсли; |
509 | 32 | Всеволод Дорофеев | КонецЕсли; |
510 | 32 | Всеволод Дорофеев | |
511 | 32 | Всеволод Дорофеев | КонецПроцедуры |
512 | 32 | Всеволод Дорофеев | |
513 | 32 | Всеволод Дорофеев | </pre> |
514 | 32 | Всеволод Дорофеев | |
515 | 32 | Всеволод Дорофеев | https://wiki.programstore.ru/realizaciya-vvoda-na-osnovanii-pri-pomoshhi-rasshireniya-konfiguracii/ |