Проект

Общее

Профиль

Универсальные процедуры и функции » История » Версия 17

Всеволод Дорофеев, 05.03.2017 19:09

1 1 Всеволод Дорофеев
h1. Универсальные процедуры и функции
2 1 Всеволод Дорофеев
3 1 Всеволод Дорофеев
h3. Проверка битых ссылок
4 1 Всеволод Дорофеев
5 1 Всеволод Дорофеев
<pre>
6 1 Всеволод Дорофеев
ЭтоБитаяСсылка = не ЗначениеЗаполнено(Ссылка.ВерсияДанных);
7 1 Всеволод Дорофеев
</pre>
8 1 Всеволод Дорофеев
9 1 Всеволод Дорофеев
h3. Возвращает полное имя объекта метаданных по переданному значению ссылки
10 1 Всеволод Дорофеев
11 1 Всеволод Дорофеев
<pre>
12 1 Всеволод Дорофеев
// Возвращает полное имя объекта метаданных по переданному значению ссылки
13 1 Всеволод Дорофеев
// Например,
14 1 Всеволод Дорофеев
//  "Справочник.Номенклатура";
15 1 Всеволод Дорофеев
//  "Документ.ПриходнаяНакладная"
16 1 Всеволод Дорофеев
//
17 1 Всеволод Дорофеев
// Параметры:
18 1 Всеволод Дорофеев
//  Ссылка - ЛюбаяСсылка - значение ссылки, для которого необходимо получить имя таблицы ИБ
19 1 Всеволод Дорофеев
// 
20 1 Всеволод Дорофеев
// Возвращаемое значение:
21 1 Всеволод Дорофеев
//  Строка - полное имя объекта метаданных для указанного значения ссылки
22 1 Всеволод Дорофеев
//
23 1 Всеволод Дорофеев
Функция ИмяТаблицыПоСсылке(Ссылка) Экспорт
24 1 Всеволод Дорофеев
    
25 1 Всеволод Дорофеев
    Возврат Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя();
26 1 Всеволод Дорофеев
    
27 1 Всеволод Дорофеев
КонецФункции
28 1 Всеволод Дорофеев
</pre>
29 2 Всеволод Дорофеев
30 2 Всеволод Дорофеев
h3. МенеджерИсторииРаботыПользователя
31 3 Всеволод Дорофеев
32 4 Всеволод Дорофеев
<pre>
33 4 Всеволод Дорофеев
// Добавить событие в историю работы пользователя
34 4 Всеволод Дорофеев
ИсторияРаботыПользователя.Добавить(ПолучитьНавигационнуюСсылку(Объект.Ссылка));
35 4 Всеволод Дорофеев
</pre>
36 4 Всеволод Дорофеев
37 3 Всеволод Дорофеев
h3. ОтображениеСостояния
38 5 Всеволод Дорофеев
39 5 Всеволод Дорофеев
h3. Очистка окна сообщений
40 5 Всеволод Дорофеев
41 5 Всеволод Дорофеев
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
42 5 Всеволод Дорофеев
Пример:
43 5 Всеволод Дорофеев
<pre>
44 5 Всеволод Дорофеев
ОчиститьСообщения();
45 5 Всеволод Дорофеев
</pre>
46 6 Всеволод Дорофеев
47 8 Всеволод Дорофеев
h3. Отбор в таблице значений (табличной части) с помощью построителя запроса
48 6 Всеволод Дорофеев
49 6 Всеволод Дорофеев
<pre>
50 6 Всеволод Дорофеев
&НаСервере
51 8 Всеволод Дорофеев
Функция ПолучитьКоличествоПодобраноПоСтрокеНаСервере(ИсходнаяНоменклатура)
52 6 Всеволод Дорофеев
53 6 Всеволод Дорофеев
   ПостроительЗапр = Новый ПостроительЗапроса;
54 8 Всеволод Дорофеев
   ПостроительЗапр.ИсточникДанных = Новый ОписаниеИсточникаДанных(Объект.НоваяНоменклатура.Выгрузить());
55 8 Всеволод Дорофеев
   Отбор = ПостроительЗапр.Отбор.Добавить("ИсходнаяНоменклатура");
56 8 Всеволод Дорофеев
   Отбор.ВидСравнения = ВидСравнения.Равно;
57 8 Всеволод Дорофеев
   Отбор.Значение = ИсходнаяНоменклатура;
58 8 Всеволод Дорофеев
   Отбор.Использование = Истина;
59 6 Всеволод Дорофеев
   ПостроительЗапр.Выполнить();
60 8 Всеволод Дорофеев
   ПостроительЗапр.Результат.Выгрузить().Итог("Количество");
61 6 Всеволод Дорофеев
62 8 Всеволод Дорофеев
КонецФункции
63 6 Всеволод Дорофеев
</pre>
64 9 Всеволод Дорофеев
65 10 Всеволод Дорофеев
h3. Запись справочника
66 9 Всеволод Дорофеев
67 9 Всеволод Дорофеев
<pre>
68 9 Всеволод Дорофеев
Функция ЗаписатьСправочник(ТекущийОбъект,Заголовок="",РежимСообщений="Все",РежимЗагрузки=Ложь) Экспорт
69 9 Всеволод Дорофеев
	
70 9 Всеволод Дорофеев
	ДействиеВыполнено  = Ложь;
71 9 Всеволод Дорофеев
	
72 9 Всеволод Дорофеев
	ВыводитьОшибки     = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь);
73 9 Всеволод Дорофеев
	ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь);
74 9 Всеволод Дорофеев
	
75 9 Всеволод Дорофеев
	Попытка
76 9 Всеволод Дорофеев
		Если РежимЗагрузки Тогда
77 9 Всеволод Дорофеев
			ТекущийОбъект.ОбменДанными.Загрузка = Истина;
78 9 Всеволод Дорофеев
		КонецЕсли; 
79 9 Всеволод Дорофеев
		ТекущийОбъект.Записать();
80 9 Всеволод Дорофеев
		ДействиеВыполнено = Истина;
81 9 Всеволод Дорофеев
		Если ВыводитьИнформацию Тогда
82 9 Всеволод Дорофеев
			ТекстСообщения = "Записан справочник """+ТекущийОбъект.Ссылка+""". ";
83 9 Всеволод Дорофеев
			СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
84 9 Всеволод Дорофеев
		КонецЕсли; 
85 9 Всеволод Дорофеев
	Исключение
86 9 Всеволод Дорофеев
		ДействиеВыполнено = Ложь;						
87 9 Всеволод Дорофеев
		Если ВыводитьОшибки Тогда
88 9 Всеволод Дорофеев
			ТекстСообщения = "Не удалось записать справочник """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
89 9 Всеволод Дорофеев
			СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
90 9 Всеволод Дорофеев
		КонецЕсли; 
91 9 Всеволод Дорофеев
	КонецПопытки;
92 9 Всеволод Дорофеев
	
93 9 Всеволод Дорофеев
	Возврат ДействиеВыполнено;
94 9 Всеволод Дорофеев
КонецФункции //ЗаписатьПровестиДокумент()
95 9 Всеволод Дорофеев
</pre>
96 9 Всеволод Дорофеев
97 9 Всеволод Дорофеев
98 9 Всеволод Дорофеев
99 9 Всеволод Дорофеев
h3. Запись и проведение документа
100 9 Всеволод Дорофеев
101 9 Всеволод Дорофеев
<pre>
102 9 Всеволод Дорофеев
// Процедура выполняет запись/проведение/отмену проведения документа.
103 9 Всеволод Дорофеев
//
104 9 Всеволод Дорофеев
// Параметры:
105 9 Всеволод Дорофеев
//  ТекущийОбъект  – ДокументОбъект,СправочникОбъект.
106 9 Всеволод Дорофеев
//  РежимЗаписи    - РежимЗаписиДокумента.
107 9 Всеволод Дорофеев
//  Заголовок      - Строка.
108 9 Всеволод Дорофеев
//  РежимСообщений - Строка: "Нет","Все","Ошибки".
109 9 Всеволод Дорофеев
//
110 9 Всеволод Дорофеев
// Возвращаемое значение:
111 9 Всеволод Дорофеев
//   ДействиеВыполнено   – Булево.
112 9 Всеволод Дорофеев
//
113 9 Всеволод Дорофеев
Функция ЗаписатьПровестиДокумент(ТекущийОбъект,РежимЗаписи,Заголовок="",РежимСообщений="Все") Экспорт
114 9 Всеволод Дорофеев
	
115 9 Всеволод Дорофеев
	ДействиеВыполнено  = Ложь;
116 9 Всеволод Дорофеев
	
117 9 Всеволод Дорофеев
	ВыводитьОшибки     = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь);
118 9 Всеволод Дорофеев
	ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь);
119 9 Всеволод Дорофеев
	
120 9 Всеволод Дорофеев
	Если РежимЗаписи = РежимЗаписиДокумента.Запись ИЛИ РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
121 9 Всеволод Дорофеев
		
122 9 Всеволод Дорофеев
		Попытка
123 9 Всеволод Дорофеев
			
124 9 Всеволод Дорофеев
			ТекущийОбъект.Записать(РежимЗаписиДокумента.Запись);
125 9 Всеволод Дорофеев
			ДействиеВыполнено = Истина;
126 9 Всеволод Дорофеев
			Если ВыводитьИнформацию Тогда
127 9 Всеволод Дорофеев
				ТекстСообщения = "Записан документ """+ТекущийОбъект.Ссылка+""". ";
128 9 Всеволод Дорофеев
				СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
129 9 Всеволод Дорофеев
			КонецЕсли; 
130 9 Всеволод Дорофеев
		Исключение
131 9 Всеволод Дорофеев
			ДействиеВыполнено = Ложь;						
132 9 Всеволод Дорофеев
			Если ВыводитьОшибки Тогда
133 9 Всеволод Дорофеев
				ТекстСообщения = "Не удалось записать документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
134 9 Всеволод Дорофеев
				СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
135 9 Всеволод Дорофеев
			КонецЕсли; 
136 9 Всеволод Дорофеев
		КонецПопытки;
137 9 Всеволод Дорофеев
		
138 9 Всеволод Дорофеев
	КонецЕсли; 
139 9 Всеволод Дорофеев
	
140 9 Всеволод Дорофеев
	Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
141 9 Всеволод Дорофеев
		
142 9 Всеволод Дорофеев
		Попытка
143 9 Всеволод Дорофеев
			
144 9 Всеволод Дорофеев
			ТекущийОбъект.Записать(РежимЗаписиДокумента.Проведение);
145 9 Всеволод Дорофеев
			ДействиеВыполнено = Истина;
146 9 Всеволод Дорофеев
			Если ВыводитьИнформацию Тогда
147 9 Всеволод Дорофеев
				ТекстСообщения = "Проведен документ """+ТекущийОбъект.Ссылка+""". ";
148 9 Всеволод Дорофеев
				СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
149 9 Всеволод Дорофеев
			КонецЕсли; 			
150 9 Всеволод Дорофеев
		Исключение
151 9 Всеволод Дорофеев
			ДействиеВыполнено = Ложь;						
152 9 Всеволод Дорофеев
			Если ВыводитьОшибки Тогда
153 9 Всеволод Дорофеев
				ТекстСообщения = "Не удалось провести документ """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
154 9 Всеволод Дорофеев
				СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
155 9 Всеволод Дорофеев
			КонецЕсли; 
156 9 Всеволод Дорофеев
		КонецПопытки;
157 9 Всеволод Дорофеев
		
158 9 Всеволод Дорофеев
	КонецЕсли; 
159 9 Всеволод Дорофеев
	
160 9 Всеволод Дорофеев
	Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
161 9 Всеволод Дорофеев
		
162 9 Всеволод Дорофеев
		Попытка
163 9 Всеволод Дорофеев
			ТекущийОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
164 9 Всеволод Дорофеев
			ДействиеВыполнено = Истина;
165 9 Всеволод Дорофеев
			Если ВыводитьИнформацию Тогда
166 9 Всеволод Дорофеев
				ТекстСообщения = "Отменено проведение документа """+ТекущийОбъект.Ссылка+""". ";
167 9 Всеволод Дорофеев
				СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
168 9 Всеволод Дорофеев
			КонецЕсли; 			
169 9 Всеволод Дорофеев
		Исключение
170 9 Всеволод Дорофеев
			ДействиеВыполнено = Ложь;						
171 9 Всеволод Дорофеев
			Если ВыводитьОшибки Тогда
172 9 Всеволод Дорофеев
				ТекстСообщения = "Не удалось отменить проведение документа """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
173 9 Всеволод Дорофеев
				СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
174 9 Всеволод Дорофеев
			КонецЕсли; 
175 9 Всеволод Дорофеев
		КонецПопытки;
176 9 Всеволод Дорофеев
		
177 9 Всеволод Дорофеев
	КонецЕсли; 
178 9 Всеволод Дорофеев
	
179 9 Всеволод Дорофеев
	Возврат ДействиеВыполнено;
180 9 Всеволод Дорофеев
КонецФункции // ЗаписатьПровестиДокумент()
181 9 Всеволод Дорофеев
182 9 Всеволод Дорофеев
</pre>
183 11 Всеволод Дорофеев
184 11 Всеволод Дорофеев
h3. Проверка на пустую дату
185 11 Всеволод Дорофеев
186 11 Всеволод Дорофеев
Пустая дата
187 11 Всеволод Дорофеев
<pre>
188 11 Всеволод Дорофеев
Дата("00010101");
189 12 Всеволод Дорофеев
Дата(1, 1, 1);
190 12 Всеволод Дорофеев
Дата("00010101000000");
191 12 Всеволод Дорофеев
Дата("0001-01-01");
192 11 Всеволод Дорофеев
</pre>
193 13 Всеволод Дорофеев
194 14 Всеволод Дорофеев
h3.  Создание структуры со свойствами, как колонки таблицы, переданной строки
195 13 Всеволод Дорофеев
196 13 Всеволод Дорофеев
<pre>
197 13 Всеволод Дорофеев
// Функция СтрокаТаблицыЗначенийВСтруктуру создает
198 13 Всеволод Дорофеев
// структуру со свойствами, как колонки таблицы
199 13 Всеволод Дорофеев
// значений передаваемой строки
200 13 Всеволод Дорофеев
// и устанавливает этим свойствам значения
201 13 Всеволод Дорофеев
// из строки таблицы значений.
202 13 Всеволод Дорофеев
// 
203 13 Всеволод Дорофеев
// Параметры:
204 13 Всеволод Дорофеев
//  СтрокаТаблицыЗначений - СтрокаТаблицыЗначений.
205 13 Всеволод Дорофеев
//
206 13 Всеволод Дорофеев
// ВозвращаемоеЗначение:
207 13 Всеволод Дорофеев
//  Структура
208 13 Всеволод Дорофеев
//
209 13 Всеволод Дорофеев
Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт
210 13 Всеволод Дорофеев
	
211 13 Всеволод Дорофеев
	Структура = Новый Структура;
212 13 Всеволод Дорофеев
	Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл
213 13 Всеволод Дорофеев
		Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]);
214 13 Всеволод Дорофеев
	КонецЦикла;
215 13 Всеволод Дорофеев
	
216 13 Всеволод Дорофеев
	Возврат Структура;
217 13 Всеволод Дорофеев
	
218 13 Всеволод Дорофеев
КонецФункции
219 13 Всеволод Дорофеев
220 13 Всеволод Дорофеев
</pre>
221 15 Всеволод Дорофеев
222 15 Всеволод Дорофеев
h3. Загрузка таблицы/соответствия из макета с помощью построителя отчета
223 15 Всеволод Дорофеев
224 15 Всеволод Дорофеев
<pre>
225 15 Всеволод Дорофеев
Функция ЗаполнитьСоответствиеИзМакета(ИмяМакета)
226 15 Всеволод Дорофеев
	
227 15 Всеволод Дорофеев
	Макет = ПолучитьМакет(ИмяМакета);
228 15 Всеволод Дорофеев
	ПостроительЗапроса = Новый ПостроительЗапроса;
229 15 Всеволод Дорофеев
	ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область());
230 15 Всеволод Дорофеев
	ТЗ = ПостроительЗапроса.Результат.Выгрузить();
231 15 Всеволод Дорофеев
232 15 Всеволод Дорофеев
	Результат = Новый Соответствие;
233 15 Всеволод Дорофеев
	Для каждого Стр Из ТЗ Цикл
234 15 Всеволод Дорофеев
		Результат.Вставить(Стр.Колонка1, Стр.Колонка2);
235 15 Всеволод Дорофеев
	КонецЦикла;
236 15 Всеволод Дорофеев
 
237 15 Всеволод Дорофеев
	Возврат Результат;
238 15 Всеволод Дорофеев
	
239 15 Всеволод Дорофеев
КонецФункции
240 15 Всеволод Дорофеев
241 15 Всеволод Дорофеев
</pre>
242 16 Всеволод Дорофеев
243 16 Всеволод Дорофеев
h3. Варианты преобразования даты из строки (конвертация строки в дату)
244 16 Всеволод Дорофеев
245 16 Всеволод Дорофеев
Проще всего преобразовать строку вида «20151215204222» используя метод «Дата»:
246 16 Всеволод Дорофеев
247 16 Всеволод Дорофеев
    Дата(«20151215204222»)  // 15.12.2015 20:42:22
248 16 Всеволод Дорофеев
249 16 Всеволод Дорофеев
Со строкой «15.12.2015 20:42:22» также прекрасно справляется типовой метод:
250 16 Всеволод Дорофеев
251 16 Всеволод Дорофеев
    Дата(«15.12.2015 20:42:22»)  //15.12.2015 20:42:22
252 16 Всеволод Дорофеев
253 16 Всеволод Дорофеев
Второй вариант, если мы знаем отдельные составляющие даты в строковом формате: год, месяц, день и т.д:
254 16 Всеволод Дорофеев
255 16 Всеволод Дорофеев
    Дата(«2015″,»12″,»15″,»20″,»42″,»22»)  // 15.12.2015 20:42:22
256 16 Всеволод Дорофеев
257 16 Всеволод Дорофеев
Пример преобразования строки вида «2015-12-15 20:42:22»:
258 16 Всеволод Дорофеев
259 16 Всеволод Дорофеев
    СтроковаяДата = «2015-12-15 20:42:22»;
260 16 Всеволод Дорофеев
    СтроковаяДата = СтрЗаменить(СтроковаяДата , «-«,»»);
261 16 Всеволод Дорофеев
    СтроковаяДата = СтрЗаменить(СтроковаяДата , «:»,»»);
262 16 Всеволод Дорофеев
    НоваяДата = Дата(СтроковаяДата ); // 15.12.2015 20:42:22
263 16 Всеволод Дорофеев
264 16 Всеволод Дорофеев
Если дата указан так «20:42:22 2015/12/15» можно преобразовать её следующим образом:
265 16 Всеволод Дорофеев
266 16 Всеволод Дорофеев
    СтроковаяДата = «20:42:22 2015/12/15»;
267 16 Всеволод Дорофеев
    СтроковаяДата = СтрЗаменить(СтроковаяДата , «/»,»»);
268 16 Всеволод Дорофеев
    СтроковаяДата = СтрЗаменить(СтроковаяДата , «:»,»»);
269 16 Всеволод Дорофеев
    НоваяДата = Дата(Прав(СтроковаяДата , 8) + Лев(СтроковаяДата ,6));
270 17 Всеволод Дорофеев
271 17 Всеволод Дорофеев
h3. Генератор случайных чисел
272 17 Всеволод Дорофеев
273 17 Всеволод Дорофеев
<pre>
274 17 Всеволод Дорофеев
		ГСЧ = Новый ГенераторСлучайныхЧисел();
275 17 Всеволод Дорофеев
		СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 100000);
276 17 Всеволод Дорофеев
</pre>