Проект

Общее

Профиль

Управляемые формы 1С » История » Версия 31

Всеволод Дорофеев, 01.08.2022 18:02

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 10 Всеволод Дорофеев
h3.  4. Передача параметров в управляемых формах
68 10 Всеволод Дорофеев
69 10 Всеволод Дорофеев
Параметры передаются в виде структуры:
70 10 Всеволод Дорофеев
71 10 Всеволод Дорофеев
<pre>
72 10 Всеволод Дорофеев
Параметры = Новый Структура("ТекущееЗначение",ПоследнийЭлемент);
73 10 Всеволод Дорофеев
ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры);
74 10 Всеволод Дорофеев
НайденыйЭлемент = ФормаВыбора.ОткрытьМодально();
75 10 Всеволод Дорофеев
</pre>
76 10 Всеволод Дорофеев
77 10 Всеволод Дорофеев
Также у управляемой формы появились «расширения формы» (объект, справочник, документ, отчет). В зависимости от типа объекта определяется состав доступных параметров.  Например, если в форме выбора справочника нужно позиционироваться на определенном элементе, то используется параметр «ТекущееЗначение». Большим плюсом является, что в самой форме не требуется писать обработчиков для предопределенных параметров, сокращает количество кода.
78 10 Всеволод Дорофеев
79 10 Всеволод Дорофеев
Также у разработчика появилась возможность определять свои параметры (в конструкторе управляемой формы вкладка «Параметры»). Время жизни параметров ограничено обработчиком ПриСозданииНаСервере, что логично т.к. параметры требуются только при создании формы, но если данный параметр определяет уникальность формы (установлен флаг «ключевой параметр» в свойствах параметра) он будет доступен и в других обработчиках.
80 10 Всеволод Дорофеев
81 10 Всеволод Дорофеев
Для передачи специфического параметра манипуляций требуется сделать немного больше:
82 10 Всеволод Дорофеев
83 10 Всеволод Дорофеев
1. Определить в управляемой форме параметр.
84 10 Всеволод Дорофеев
85 10 Всеволод Дорофеев
В обработчике ПриСозданииНаСервере определить обработку данного параметра (обращение к переданным параметрам через свойство «Параметры», имеющее тип ДанныеФормыСтруктура)
86 10 Всеволод Дорофеев
87 10 Всеволод Дорофеев
1. Описать получение формы и передать значение нового параметра в параметрах функции ПолучитьФорму.
88 10 Всеволод Дорофеев
89 10 Всеволод Дорофеев
Таким образом код будет иметь вид:
90 10 Всеволод Дорофеев
91 10 Всеволод Дорофеев
В месте получения формы 
92 10 Всеволод Дорофеев
<pre>
93 10 Всеволод Дорофеев
Параметры = Новый Структура("НовыйПараметр",ПоследнийЭлемент);
94 10 Всеволод Дорофеев
ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры);
95 10 Всеволод Дорофеев
</pre>
96 10 Всеволод Дорофеев
97 10 Всеволод Дорофеев
В модуле управляемой формы  
98 10 Всеволод Дорофеев
<pre>
99 10 Всеволод Дорофеев
&НаСервере
100 10 Всеволод Дорофеев
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
101 10 Всеволод Дорофеев
    Если Параметры.Свойство("НовыйПараметр") Тогда
102 10 Всеволод Дорофеев
        // здесь код обработки параметра
103 10 Всеволод Дорофеев
    КонецЕсли;
104 10 Всеволод Дорофеев
КонецПроцедуры
105 10 Всеволод Дорофеев
</pre>
106 11 Всеволод Дорофеев
107 12 Всеволод Дорофеев
h3. 4. Отбор в таблице значений, расположенной на форме 
108 11 Всеволод Дорофеев
109 11 Всеволод Дорофеев
Например, отбор строк в подчиненной таблице при смене "Владельца" в основной таблице
110 11 Всеволод Дорофеев
<pre>
111 11 Всеволод Дорофеев
&НаКлиенте
112 11 Всеволод Дорофеев
Процедура ИсходнаяНоменклатураПриАктивизацииСтроки(Элемент)
113 11 Всеволод Дорофеев
	
114 11 Всеволод Дорофеев
	Структура = Новый Структура("ИсходнаяНоменклатура", Элементы["ИсходнаяНоменклатура"].ТекущиеДанные.Номенклатура);
115 11 Всеволод Дорофеев
	НовыйОтбор = Новый ФиксированнаяСтруктура(Структура);
116 11 Всеволод Дорофеев
	Элементы["НоваяНоменклатура"].ОтборСтрок=НовыйОтбор;
117 11 Всеволод Дорофеев
118 11 Всеволод Дорофеев
КонецПроцедуры
119 11 Всеволод Дорофеев
120 11 Всеволод Дорофеев
</pre>
121 13 Всеволод Дорофеев
122 13 Всеволод Дорофеев
h3. Вопрос в управляемых формах
123 13 Всеволод Дорофеев
124 13 Всеволод Дорофеев
Замена функции "Вопрос(...)"
125 13 Всеволод Дорофеев
126 13 Всеволод Дорофеев
<pre>
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 Всеволод Дорофеев
КонецПроцедуры
148 13 Всеволод Дорофеев
149 13 Всеволод Дорофеев
</pre>
150 14 Всеволод Дорофеев
151 14 Всеволод Дорофеев
h3. Подключение внешней компоненты из макета внешней обработки
152 14 Всеволод Дорофеев
153 14 Всеволод Дорофеев
Стандартное подключение макета из встроенной обработки:
154 14 Всеволод Дорофеев
<pre>
155 14 Всеволод Дорофеев
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ВстроеннаяОбработка.Макет.КомпонентаПечатиШтрихкодовLinux64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
156 14 Всеволод Дорофеев
</pre>
157 14 Всеволод Дорофеев
158 14 Всеволод Дорофеев
Подключение внешней компоненты из макета внешней обработки
159 14 Всеволод Дорофеев
<pre>
160 14 Всеволод Дорофеев
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту(ПоместитьВоВременноеХранилище(ПолучитьМакет("КомпонентаПечатиШтрихкодовLinux64")), "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
161 14 Всеволод Дорофеев
</pre>
162 15 Всеволод Дорофеев
163 15 Всеволод Дорофеев
h3. Методы ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища
164 15 Всеволод Дорофеев
165 15 Всеволод Дорофеев
источник http://catalog.mista.ru/public/198766/
166 15 Всеволод Дорофеев
167 15 Всеволод Дорофеев
Временное хранилище – секретное оружие
168 15 Всеволод Дорофеев
169 15 Всеволод Дорофеев
При работе с управляемыми формами быстро становится ясно, что ограничения клиент-серверного взаимодействия очень сильно сужают возможности разработчика. Поэтому, платформа 1С предоставляет хитрый секретный ход под названием «ВременноеХранилище». Эта сущность позволяет сохранить на сервере некоторое состояние между двумя серверными вызовами. Я слышу возгласы: «А кто сказал, что состояние нельзя хранить!» Справедливое замечание, состояние хранить все-таки можно, но недолго.
170 15 Всеволод Дорофеев
171 15 Всеволод Дорофеев
Временное хранилище позволяет оставить на сервере некоторые данные, а вместо них получить короткую строку – адрес временного хранилища. Этот адрес можно передать на клиента, там он будет спокойно лежать, а когда понадобятся данные из хранилища, то мы по этому адресу сможем их получить.
172 15 Всеволод Дорофеев
173 15 Всеволод Дорофеев
Для работы со временным хранилищем используются методы ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища.
174 15 Всеволод Дорофеев
175 15 Всеволод Дорофеев
С методом «Получить» все просто, он по заданному адресу возвращает значение, которое лежит в хранилище.
176 15 Всеволод Дорофеев
177 15 Всеволод Дорофеев
С методом «Поместить» несколько сложнее. Дело в том, что помещать можно в 2 разных хранилища – простое и хранилище формы. Хранилище формы живет на сервере столько, сколько живет сама форма. Простое хранилище живет ровно 2 серверных вызова. В синтакс-помощнике об этом написано целых несколько умных строк. Я никогда не понимал, что они означают. Опытным путем было установлено, что срок жизни – 2 серверных вызова.
178 15 Всеволод Дорофеев
179 15 Всеволод Дорофеев
    Первый – мы помещаем что-то в хранилище и возвращаем адрес на клиента.
180 15 Всеволод Дорофеев
    Клиент делает второй вызов и по этому адресу может получить данные.
181 15 Всеволод Дорофеев
    В третьем вызове по этому адресу уже ничего не будет. Платформа очистит хранилище
182 15 Всеволод Дорофеев
183 15 Всеволод Дорофеев
С хранилищем формы ситуация более интересная. Если вторым параметром метода «ПоместитьВоВременноеХранилище» передать идентификатор формы (ЭтаФорма.УникальныйИдентификатор), то данные в хранилище будут привязаны к сроку жизни формы и не будут удалятся ни в первых, ни во вторых, ни во всех прочих вызовах сервера.
184 15 Всеволод Дорофеев
185 15 Всеволод Дорофеев
Таким образом, временное хранилище, это еще одно место, в котором (помимо реквизитов формы) можно сохранять состояние на сервере. Причем, в хранилище можно хранить даже данные, которые на клиенте недоступны, а стало быть, в реквизитах формы их разместить нельзя.
186 16 Всеволод Дорофеев
187 27 Всеволод Дорофеев
h3. Динамический список. Обработка выделенных строк
188 16 Всеволод Дорофеев
189 16 Всеволод Дорофеев
<pre>
190 16 Всеволод Дорофеев
   Для каждого Эл из Элементы.СписокСпецификаций.ВыделенныеСтроки Цикл
191 16 Всеволод Дорофеев
        Сообщить(Элементы.СписокСпецификаций.ДанныеСтроки(Эл).СпецификацияСсылка);
192 1 Всеволод Дорофеев
    КонецЦикла; 	
193 20 Всеволод Дорофеев
</pre>
194 20 Всеволод Дорофеев
195 20 Всеволод Дорофеев
<pre>
196 20 Всеволод Дорофеев
	МассивСтрок = Новый Массив;
197 20 Всеволод Дорофеев
	Для Каждого Строка Из Элементы.Товары.ВыделенныеСтроки Цикл
198 20 Всеволод Дорофеев
		МассивСтрок.Добавить(Объект.Товары.НайтиПоИдентификатору(Строка));
199 1 Всеволод Дорофеев
	КонецЦикла;
200 27 Всеволод Дорофеев
201 27 Всеволод Дорофеев
</pre>
202 27 Всеволод Дорофеев
203 27 Всеволод Дорофеев
h3. Динамический список. Отбор в динамическом списке при открытии.
204 27 Всеволод Дорофеев
205 27 Всеволод Дорофеев
https://its.1c.ru/db/metod8dev/content/3557/hdoc
206 27 Всеволод Дорофеев
207 27 Всеволод Дорофеев
<pre>
208 27 Всеволод Дорофеев
209 27 Всеволод Дорофеев
&НаКлиенте
210 27 Всеволод Дорофеев
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
211 27 Всеволод Дорофеев
212 27 Всеволод Дорофеев
	ЗначениеОтбора = Новый Структура("СерияНоменклатуры", ПараметрКоманды);
213 27 Всеволод Дорофеев
	ПараметрыФормы = Новый Структура("Отбор", ЗначениеОтбора);
214 27 Всеволод Дорофеев
	
215 27 Всеволод Дорофеев
	ОткрытьФорму("РегистрСведений.ксРезультатыПроверкиКачестваСерийНоменклатуры.Форма.ФормаРезультатыПроверкиКачестваСерииНоменклатуры", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
216 27 Всеволод Дорофеев
	
217 27 Всеволод Дорофеев
КонецПроцедуры
218 20 Всеволод Дорофеев
219 16 Всеволод Дорофеев
</pre>
220 17 Всеволод Дорофеев
221 17 Всеволод Дорофеев
h3. Выделение строк в таблице на форме
222 17 Всеволод Дорофеев
223 17 Всеволод Дорофеев
<pre>
224 17 Всеволод Дорофеев
	Для каждого стр из ФормаДокумента.Объект.ОбеспечениеМатериаламиИРаботами Цикл
225 17 Всеволод Дорофеев
		ФормаДокумента.Элементы.ОбеспечениеМатериаламиИРаботами.ВыделенныеСтроки.Добавить(стр.Получитьидентификатор());                
226 17 Всеволод Дорофеев
	КонецЦикла;
227 17 Всеволод Дорофеев
</pre>
228 18 Всеволод Дорофеев
229 18 Всеволод Дорофеев
h3. Как при открытии формы определить, что создается новый элемент?
230 18 Всеволод Дорофеев
231 18 Всеволод Дорофеев
Проверять можно в обработчике события *ОбработкаЗаполнения*. Это событие возникает только при создании новых объектов.
232 18 Всеволод Дорофеев
233 18 Всеволод Дорофеев
Или в *ПриСозданииНаСервере*
234 18 Всеволод Дорофеев
235 18 Всеволод Дорофеев
https://its.1c.ru/db/metod8dev/content/3545/hdoc
236 18 Всеволод Дорофеев
<pre>
237 18 Всеволод Дорофеев
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
238 18 Всеволод Дорофеев
239 18 Всеволод Дорофеев
    Если Параметры.Ключ.Пустая() Тогда
240 18 Всеволод Дорофеев
241 18 Всеволод Дорофеев
      Сообщить("Создается новый объект");
242 18 Всеволод Дорофеев
243 18 Всеволод Дорофеев
    КонецЕсли;
244 18 Всеволод Дорофеев
245 18 Всеволод Дорофеев
КонецПроцедуры 
246 18 Всеволод Дорофеев
</pre>
247 19 Всеволод Дорофеев
248 19 Всеволод Дорофеев
249 19 Всеволод Дорофеев
h3. Как выполнить экспортируемую процедуру объекта, находясь в его форме
250 19 Всеволод Дорофеев
251 19 Всеволод Дорофеев
{{collapse(Код...)
252 19 Всеволод Дорофеев
https://its.1c.ru/db/metod8dev#content:4146:hdoc
253 19 Всеволод Дорофеев
<pre>
254 19 Всеволод Дорофеев
&НаКлиенте
255 19 Всеволод Дорофеев
Процедура ПересчитатьЦеныДокумента(Команда)
256 19 Всеволод Дорофеев
                
257 19 Всеволод Дорофеев
     ПересчитатьЦеныНаСервере();
258 19 Всеволод Дорофеев
                
259 19 Всеволод Дорофеев
КонецПроцедуры
260 19 Всеволод Дорофеев
261 19 Всеволод Дорофеев
&НаСервере
262 19 Всеволод Дорофеев
Процедура ПересчитатьЦеныНаСервере()
263 19 Всеволод Дорофеев
                
264 19 Всеволод Дорофеев
     ОбъектДокумента = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.Накладная"));
265 19 Всеволод Дорофеев
     ОбъектДокумента.НачислитьСкидку(10);
266 19 Всеволод Дорофеев
     ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект");
267 19 Всеволод Дорофеев
                
268 19 Всеволод Дорофеев
КонецПроцедуры
269 19 Всеволод Дорофеев
270 19 Всеволод Дорофеев
</pre>
271 19 Всеволод Дорофеев
272 19 Всеволод Дорофеев
}}
273 21 Всеволод Дорофеев
274 21 Всеволод Дорофеев
275 21 Всеволод Дорофеев
h3. Переход на следующую строку в той же колонке при нажатии Enter
276 21 Всеволод Дорофеев
277 21 Всеволод Дорофеев
<pre>
278 21 Всеволод Дорофеев
&НаКлиенте
279 21 Всеволод Дорофеев
Процедура ОсновныеЯчейкиЯчейкаПриИзменении(Элемент)
280 21 Всеволод Дорофеев
	ТекущиеДанные = Элементы.ОсновныеЯчейки.ТекущиеДанные;
281 21 Всеволод Дорофеев
	ОбработатьНазначениеОсновнойЯчейки(ТекущиеДанные.Номенклатура, ТекущиеДанные.Склад, ТекущиеДанные.Ячейка, Ложь);
282 21 Всеволод Дорофеев
	
283 21 Всеволод Дорофеев
 	Стр=Элементы.ОсновныеЯчейки.ТекущиеДанные;
284 21 Всеволод Дорофеев
    Если Стр<>Неопределено Тогда
285 21 Всеволод Дорофеев
        Если Элементы.ОсновныеЯчейки.ТекущийЭлемент.Имя="ОсновныеЯчейкиЯчейка" Тогда
286 21 Всеволод Дорофеев
            НС=Объект.ОсновныеЯчейки.НайтиСтроки(Новый Структура("НомерСтроки",Стр.НомерСтроки+1));
287 21 Всеволод Дорофеев
			Если НС.Количество()>0 Тогда
288 21 Всеволод Дорофеев
	            Элементы.ОсновныеЯчейки.ТекущаяСтрока=НС[0].ПолучитьИдентификатор();
289 21 Всеволод Дорофеев
	            Элементы.ОсновныеЯчейки.ТекущийЭлемент =Элементы.ОсновныеЯчейки.ПодчиненныеЭлементы.ОсновныеЯчейкиЯчейка;
290 21 Всеволод Дорофеев
  				ПодключитьОбработчикОжидания("ИзменитьСтрокуОжидание", 0.1, Истина);
291 21 Всеволод Дорофеев
			КонецЕсли;
292 21 Всеволод Дорофеев
        КонецЕсли;  
293 21 Всеволод Дорофеев
    КонецЕсли; 	
294 21 Всеволод Дорофеев
	
295 21 Всеволод Дорофеев
КонецПроцедуры
296 21 Всеволод Дорофеев
297 21 Всеволод Дорофеев
&НаКлиенте
298 21 Всеволод Дорофеев
Процедура ИзменитьСтрокуОжидание() Экспорт
299 21 Всеволод Дорофеев
    Элементы.ОсновныеЯчейки.ИзменитьСтроку();
300 21 Всеволод Дорофеев
КонецПроцедуры
301 21 Всеволод Дорофеев
302 21 Всеволод Дорофеев
</pre>
303 23 Всеволод Дорофеев
304 23 Всеволод Дорофеев
h3. Проблема обновления реквизитов документа в другой сессии (кэш 1С)
305 23 Всеволод Дорофеев
306 23 Всеволод Дорофеев
В динамическом списке изменения отображаются при обновлении формы. В ТЧ документа - нет.
307 23 Всеволод Дорофеев
Требуется принудительно обновлять на клиенте. Например:
308 23 Всеволод Дорофеев
309 23 Всеволод Дорофеев
<pre>
310 23 Всеволод Дорофеев
	ОповеститьОбИзменении(Тип("СправочникСсылка.СерииНоменклатуры"));
311 23 Всеволод Дорофеев
        Элементы.СПисок.Обновить();
312 23 Всеволод Дорофеев
</pre>
313 24 Всеволод Дорофеев
314 24 Всеволод Дорофеев
h3. Программное создание реквизитов формы и расположение на форме
315 24 Всеволод Дорофеев
316 24 Всеволод Дорофеев
Флажок
317 26 Всеволод Дорофеев
https://gee12.space/komanda-flag-na-forme-1s/
318 24 Всеволод Дорофеев
<pre>
319 24 Всеволод Дорофеев
&НаСервере
320 24 Всеволод Дорофеев
Процедура ДобавитьФлажокНаСервере()
321 24 Всеволод Дорофеев
	
322 24 Всеволод Дорофеев
	//Создание реквизита
323 24 Всеволод Дорофеев
	МассивТиповБулево = Новый Массив;
324 24 Всеволод Дорофеев
    МассивТиповБулево.Добавить(Тип("Булево"));
325 24 Всеволод Дорофеев
326 24 Всеволод Дорофеев
    РеквизитФлаг = Новый РеквизитФормы("ФлагФормы",Новый ОписаниеТипов(МассивТиповБулево),,"Флаг");
327 25 Всеволод Дорофеев
    РеквизитФлаг.СохраняемыеДанные = Истина;
328 24 Всеволод Дорофеев
    НовыеРеквизиты = Новый Массив;
329 24 Всеволод Дорофеев
    НовыеРеквизиты.Добавить(РеквизитФлаг);
330 24 Всеволод Дорофеев
331 24 Всеволод Дорофеев
    ИзменитьРеквизиты(НовыеРеквизиты);
332 24 Всеволод Дорофеев
	
333 1 Всеволод Дорофеев
	//Располагаем на форме
334 25 Всеволод Дорофеев
335 25 Всеволод Дорофеев
	НоваяКоманда = Команды.Добавить("ПредварительныйПросмотр");
336 25 Всеволод Дорофеев
	НоваяКоманда.Действие = "УстановитьПредварительныйПросмотр";
337 25 Всеволод Дорофеев
	НоваяКоманда.Заголовок = "Предварительный просмотр";
338 1 Всеволод Дорофеев
	
339 25 Всеволод Дорофеев
	НовыйЭлемент = Элементы.Добавить("ФлагФормы",Тип("КнопкаФормы"), Элементы.ФормаКоманднаяПанель);
340 25 Всеволод Дорофеев
	НовыйЭлемент.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
341 25 Всеволод Дорофеев
	НовыйЭлемент.ИмяКоманды = НоваяКоманда.Имя;
342 25 Всеволод Дорофеев
	НовыйЭлемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
343 25 Всеволод Дорофеев
	НовыйЭлемент.ТолькоВоВсехДействиях = Истина;
344 25 Всеволод Дорофеев
	НовыйЭлемент.Пометка = ЭтаФорма["ФлагФормы"];
345 25 Всеволод Дорофеев
	
346 1 Всеволод Дорофеев
КонецПроцедуры
347 25 Всеволод Дорофеев
348 25 Всеволод Дорофеев
&НаКлиенте
349 25 Всеволод Дорофеев
Процедура ДобавитьФлажок(Команда)
350 25 Всеволод Дорофеев
	ДобавитьФлажокНаСервере();
351 25 Всеволод Дорофеев
КонецПроцедуры
352 25 Всеволод Дорофеев
353 25 Всеволод Дорофеев
&НаКлиенте
354 25 Всеволод Дорофеев
Процедура УстановитьПредварительныйПросмотр(Команда)
355 25 Всеволод Дорофеев
356 25 Всеволод Дорофеев
	ЭтаФорма["ФлагФормы"] = не ЭтаФорма["ФлагФормы"];
357 25 Всеволод Дорофеев
	Элементы.ФлагФормы.Пометка = ЭтаФорма["ФлагФормы"];
358 25 Всеволод Дорофеев
359 25 Всеволод Дорофеев
КонецПроцедуры
360 25 Всеволод Дорофеев
361 24 Всеволод Дорофеев
</pre>
362 28 Всеволод Дорофеев
363 28 Всеволод Дорофеев
h3. Программный ввод на основании
364 28 Всеволод Дорофеев
365 28 Всеволод Дорофеев
https://its.1c.ru/db/content/metod8dev/src/developers/platform/qanda/form/applied/i8103562.htm
366 28 Всеволод Дорофеев
367 28 Всеволод Дорофеев
<pre>
368 28 Всеволод Дорофеев
	ПараметрыФормы = Новый Структура("Основание", Объект.Ссылка);
369 28 Всеволод Дорофеев
	ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);
370 28 Всеволод Дорофеев
</pre>
371 29 Всеволод Дорофеев
372 29 Всеволод Дорофеев
h3. Обработка проверки заполнения
373 29 Всеволод Дорофеев
374 29 Всеволод Дорофеев
https://its.1c.ru/db/metod8dev/content/3578/hdoc
375 29 Всеволод Дорофеев
Есть два события
376 30 Всеволод Дорофеев
* Обработка проверки заполнения на сервере (ОбработкаПроверкиЗаполненияНаСервере) – можно обработать в модуле формы. Предназначено *для проверки заполнения реквизитов формы*, не объекта. Для документов вызов зависит от того, установлено ли у формы документа проведение при записи. Если установлено, то вызов  при проведении, иначе при записи
377 30 Всеволод Дорофеев
* Обработка проверки заполнения (ОбработкаПроверкиЗаполнения) – можно обработать в модуле прикладного объекта.
378 31 Всеволод Дорофеев
379 31 Всеволод Дорофеев
380 31 Всеволод Дорофеев
h3. Форма выбора. Как из формы списка сделать форму выбора?
381 31 Всеволод Дорофеев
382 31 Всеволод Дорофеев
Варианты:
383 31 Всеволод Дорофеев
1.  Использовать сгенерированную платформой форму и не указывать в реквизите форму для выбора.
384 31 Всеволод Дорофеев
2. В форме списка списку назначаем РежимВыбора, на событие вешаем оповещение о выборе...
385 31 Всеволод Дорофеев
386 31 Всеволод Дорофеев
<pre>
387 31 Всеволод Дорофеев
Процедура ФормаСпискаВыбораПриСозданииНаСервере(Знач Список, Знач ЭлементФормыСписок, Знач Параметры, Знач АвтоматическоеСохранениеПользовательскихНастроек = Ложь) Экспорт
388 31 Всеволод Дорофеев
    
389 31 Всеволод Дорофеев
    // Элементы.Список - основной реквизит с динамическим списком
390 31 Всеволод Дорофеев
    ЭлементФормыСписок.РежимВыбора = Параметры.РежимВыбора;
391 31 Всеволод Дорофеев
    Если Параметры.МножественныйВыбор <> Неопределено Тогда
392 31 Всеволод Дорофеев
        ЭлементФормыСписок.МножественныйВыбор = Параметры.МножественныйВыбор;
393 31 Всеволод Дорофеев
    КонецЕсли;
394 31 Всеволод Дорофеев
    // обход автоматического сохранения пользовательских настроек для разных режимов
395 31 Всеволод Дорофеев
    Если Параметры.РежимВыбора И Не ЗначениеЗаполнено(Параметры.КлючПользовательскихНастроек) Тогда
396 31 Всеволод Дорофеев
        Параметры.КлючПользовательскихНастроек = "РежимВыбора";
397 31 Всеволод Дорофеев
        Список.АвтоматическоеСохранениеПользовательскихНастроек = АвтоматическоеСохранениеПользовательскихНастроек;
398 31 Всеволод Дорофеев
    КонецЕсли;
399 31 Всеволод Дорофеев
400 31 Всеволод Дорофеев
КонецПроцедуры
401 31 Всеволод Дорофеев
</pre>
402 31 Всеволод Дорофеев
403 31 Всеволод Дорофеев
404 31 Всеволод Дорофеев
405 31 Всеволод Дорофеев
https://infostart.ru/1c/articles/549160/
406 31 Всеволод Дорофеев
https://its.1c.ru/db/metod8dev/content/2222/hdoc@208c875c