Проект

Общее

Профиль

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

Всеволод Дорофеев, 04.06.2017 06:44

1 1 Всеволод Дорофеев
h1. Универсальные процедуры и функции
2 1 Всеволод Дорофеев
3 1 Всеволод Дорофеев
h3. Проверка битых ссылок
4 1 Всеволод Дорофеев
5 1 Всеволод Дорофеев
<pre>
6 1 Всеволод Дорофеев
ЭтоБитаяСсылка = не ЗначениеЗаполнено(Ссылка.ВерсияДанных);
7 1 Всеволод Дорофеев
</pre>
8 1 Всеволод Дорофеев
9 2 Всеволод Дорофеев
h3. МенеджерИсторииРаботыПользователя
10 3 Всеволод Дорофеев
11 4 Всеволод Дорофеев
<pre>
12 4 Всеволод Дорофеев
// Добавить событие в историю работы пользователя
13 4 Всеволод Дорофеев
ИсторияРаботыПользователя.Добавить(ПолучитьНавигационнуюСсылку(Объект.Ссылка));
14 4 Всеволод Дорофеев
</pre>
15 4 Всеволод Дорофеев
16 3 Всеволод Дорофеев
h3. ОтображениеСостояния
17 5 Всеволод Дорофеев
18 5 Всеволод Дорофеев
h3. Очистка окна сообщений
19 5 Всеволод Дорофеев
20 5 Всеволод Дорофеев
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
21 5 Всеволод Дорофеев
Пример:
22 5 Всеволод Дорофеев
<pre>
23 5 Всеволод Дорофеев
ОчиститьСообщения();
24 5 Всеволод Дорофеев
</pre>
25 6 Всеволод Дорофеев
26 8 Всеволод Дорофеев
h3. Отбор в таблице значений (табличной части) с помощью построителя запроса
27 6 Всеволод Дорофеев
28 6 Всеволод Дорофеев
<pre>
29 6 Всеволод Дорофеев
&НаСервере
30 8 Всеволод Дорофеев
Функция ПолучитьКоличествоПодобраноПоСтрокеНаСервере(ИсходнаяНоменклатура)
31 6 Всеволод Дорофеев
32 6 Всеволод Дорофеев
   ПостроительЗапр = Новый ПостроительЗапроса;
33 8 Всеволод Дорофеев
   ПостроительЗапр.ИсточникДанных = Новый ОписаниеИсточникаДанных(Объект.НоваяНоменклатура.Выгрузить());
34 8 Всеволод Дорофеев
   Отбор = ПостроительЗапр.Отбор.Добавить("ИсходнаяНоменклатура");
35 8 Всеволод Дорофеев
   Отбор.ВидСравнения = ВидСравнения.Равно;
36 8 Всеволод Дорофеев
   Отбор.Значение = ИсходнаяНоменклатура;
37 8 Всеволод Дорофеев
   Отбор.Использование = Истина;
38 6 Всеволод Дорофеев
   ПостроительЗапр.Выполнить();
39 8 Всеволод Дорофеев
   ПостроительЗапр.Результат.Выгрузить().Итог("Количество");
40 6 Всеволод Дорофеев
41 8 Всеволод Дорофеев
КонецФункции
42 6 Всеволод Дорофеев
</pre>
43 9 Всеволод Дорофеев
44 10 Всеволод Дорофеев
h3. Запись справочника
45 9 Всеволод Дорофеев
46 9 Всеволод Дорофеев
<pre>
47 9 Всеволод Дорофеев
Функция ЗаписатьСправочник(ТекущийОбъект,Заголовок="",РежимСообщений="Все",РежимЗагрузки=Ложь) Экспорт
48 9 Всеволод Дорофеев
	
49 9 Всеволод Дорофеев
	ДействиеВыполнено  = Ложь;
50 9 Всеволод Дорофеев
	
51 9 Всеволод Дорофеев
	ВыводитьОшибки     = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь);
52 9 Всеволод Дорофеев
	ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь);
53 9 Всеволод Дорофеев
	
54 9 Всеволод Дорофеев
	Попытка
55 9 Всеволод Дорофеев
		Если РежимЗагрузки Тогда
56 9 Всеволод Дорофеев
			ТекущийОбъект.ОбменДанными.Загрузка = Истина;
57 9 Всеволод Дорофеев
		КонецЕсли; 
58 9 Всеволод Дорофеев
		ТекущийОбъект.Записать();
59 9 Всеволод Дорофеев
		ДействиеВыполнено = Истина;
60 9 Всеволод Дорофеев
		Если ВыводитьИнформацию Тогда
61 9 Всеволод Дорофеев
			ТекстСообщения = "Записан справочник """+ТекущийОбъект.Ссылка+""". ";
62 9 Всеволод Дорофеев
			СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Информация);
63 9 Всеволод Дорофеев
		КонецЕсли; 
64 9 Всеволод Дорофеев
	Исключение
65 9 Всеволод Дорофеев
		ДействиеВыполнено = Ложь;						
66 9 Всеволод Дорофеев
		Если ВыводитьОшибки Тогда
67 9 Всеволод Дорофеев
			ТекстСообщения = "Не удалось записать справочник """+ТекущийОбъект.Ссылка+""". "+ОписаниеОшибки();
68 9 Всеволод Дорофеев
			СообщитьОбОшибке(ТекстСообщения,,Заголовок,СтатусСообщения.Важное);
69 9 Всеволод Дорофеев
		КонецЕсли; 
70 9 Всеволод Дорофеев
	КонецПопытки;
71 9 Всеволод Дорофеев
	
72 9 Всеволод Дорофеев
	Возврат ДействиеВыполнено;
73 9 Всеволод Дорофеев
КонецФункции //ЗаписатьПровестиДокумент()
74 9 Всеволод Дорофеев
</pre>
75 9 Всеволод Дорофеев
76 9 Всеволод Дорофеев
77 9 Всеволод Дорофеев
78 9 Всеволод Дорофеев
h3. Запись и проведение документа
79 9 Всеволод Дорофеев
80 9 Всеволод Дорофеев
<pre>
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 Всеволод Дорофеев
	
96 9 Всеволод Дорофеев
	ВыводитьОшибки     = ?(РежимСообщений="Все" ИЛИ РежимСообщений="Ошибки",Истина,Ложь);
97 9 Всеволод Дорофеев
	ВыводитьИнформацию = ?(РежимСообщений="Все",Истина,Ложь);
98 9 Всеволод Дорофеев
	
99 9 Всеволод Дорофеев
	Если РежимЗаписи = РежимЗаписиДокумента.Запись ИЛИ РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
100 9 Всеволод Дорофеев
		
101 9 Всеволод Дорофеев
		Попытка
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 Всеволод Дорофеев
</pre>
162 11 Всеволод Дорофеев
163 11 Всеволод Дорофеев
h3. Проверка на пустую дату
164 11 Всеволод Дорофеев
165 11 Всеволод Дорофеев
Пустая дата
166 11 Всеволод Дорофеев
<pre>
167 11 Всеволод Дорофеев
Дата("00010101");
168 12 Всеволод Дорофеев
Дата(1, 1, 1);
169 12 Всеволод Дорофеев
Дата("00010101000000");
170 12 Всеволод Дорофеев
Дата("0001-01-01");
171 11 Всеволод Дорофеев
</pre>
172 13 Всеволод Дорофеев
173 14 Всеволод Дорофеев
h3.  Создание структуры со свойствами, как колонки таблицы, переданной строки
174 13 Всеволод Дорофеев
175 13 Всеволод Дорофеев
<pre>
176 13 Всеволод Дорофеев
// Функция СтрокаТаблицыЗначенийВСтруктуру создает
177 13 Всеволод Дорофеев
// структуру со свойствами, как колонки таблицы
178 13 Всеволод Дорофеев
// значений передаваемой строки
179 13 Всеволод Дорофеев
// и устанавливает этим свойствам значения
180 13 Всеволод Дорофеев
// из строки таблицы значений.
181 13 Всеволод Дорофеев
// 
182 13 Всеволод Дорофеев
// Параметры:
183 13 Всеволод Дорофеев
//  СтрокаТаблицыЗначений - СтрокаТаблицыЗначений.
184 13 Всеволод Дорофеев
//
185 13 Всеволод Дорофеев
// ВозвращаемоеЗначение:
186 13 Всеволод Дорофеев
//  Структура
187 13 Всеволод Дорофеев
//
188 13 Всеволод Дорофеев
Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт
189 13 Всеволод Дорофеев
	
190 13 Всеволод Дорофеев
	Структура = Новый Структура;
191 13 Всеволод Дорофеев
	Для каждого Колонка Из СтрокаТаблицыЗначений.Владелец().Колонки Цикл
192 13 Всеволод Дорофеев
		Структура.Вставить(Колонка.Имя, СтрокаТаблицыЗначений[Колонка.Имя]);
193 13 Всеволод Дорофеев
	КонецЦикла;
194 13 Всеволод Дорофеев
	
195 13 Всеволод Дорофеев
	Возврат Структура;
196 13 Всеволод Дорофеев
	
197 13 Всеволод Дорофеев
КонецФункции
198 13 Всеволод Дорофеев
199 13 Всеволод Дорофеев
</pre>
200 15 Всеволод Дорофеев
201 15 Всеволод Дорофеев
h3. Загрузка таблицы/соответствия из макета с помощью построителя отчета
202 15 Всеволод Дорофеев
203 15 Всеволод Дорофеев
<pre>
204 15 Всеволод Дорофеев
Функция ЗаполнитьСоответствиеИзМакета(ИмяМакета)
205 15 Всеволод Дорофеев
	
206 15 Всеволод Дорофеев
	Макет = ПолучитьМакет(ИмяМакета);
207 15 Всеволод Дорофеев
	ПостроительЗапроса = Новый ПостроительЗапроса;
208 15 Всеволод Дорофеев
	ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область());
209 15 Всеволод Дорофеев
	ТЗ = ПостроительЗапроса.Результат.Выгрузить();
210 15 Всеволод Дорофеев
211 15 Всеволод Дорофеев
	Результат = Новый Соответствие;
212 15 Всеволод Дорофеев
	Для каждого Стр Из ТЗ Цикл
213 15 Всеволод Дорофеев
		Результат.Вставить(Стр.Колонка1, Стр.Колонка2);
214 15 Всеволод Дорофеев
	КонецЦикла;
215 15 Всеволод Дорофеев
 
216 15 Всеволод Дорофеев
	Возврат Результат;
217 15 Всеволод Дорофеев
	
218 15 Всеволод Дорофеев
КонецФункции
219 15 Всеволод Дорофеев
220 15 Всеволод Дорофеев
</pre>
221 16 Всеволод Дорофеев
222 16 Всеволод Дорофеев
h3. Варианты преобразования даты из строки (конвертация строки в дату)
223 16 Всеволод Дорофеев
224 16 Всеволод Дорофеев
Проще всего преобразовать строку вида «20151215204222» используя метод «Дата»:
225 16 Всеволод Дорофеев
226 16 Всеволод Дорофеев
    Дата(«20151215204222»)  // 15.12.2015 20:42:22
227 16 Всеволод Дорофеев
228 16 Всеволод Дорофеев
Со строкой «15.12.2015 20:42:22» также прекрасно справляется типовой метод:
229 16 Всеволод Дорофеев
230 16 Всеволод Дорофеев
    Дата(«15.12.2015 20:42:22»)  //15.12.2015 20:42:22
231 16 Всеволод Дорофеев
232 16 Всеволод Дорофеев
Второй вариант, если мы знаем отдельные составляющие даты в строковом формате: год, месяц, день и т.д:
233 16 Всеволод Дорофеев
234 16 Всеволод Дорофеев
    Дата(«2015″,»12″,»15″,»20″,»42″,»22»)  // 15.12.2015 20:42:22
235 16 Всеволод Дорофеев
236 16 Всеволод Дорофеев
Пример преобразования строки вида «2015-12-15 20:42:22»:
237 16 Всеволод Дорофеев
238 16 Всеволод Дорофеев
    СтроковаяДата = «2015-12-15 20:42:22»;
239 16 Всеволод Дорофеев
    СтроковаяДата = СтрЗаменить(СтроковаяДата , «-«,»»);
240 16 Всеволод Дорофеев
    СтроковаяДата = СтрЗаменить(СтроковаяДата , «:»,»»);
241 16 Всеволод Дорофеев
    НоваяДата = Дата(СтроковаяДата ); // 15.12.2015 20:42:22
242 16 Всеволод Дорофеев
243 16 Всеволод Дорофеев
Если дата указан так «20:42:22 2015/12/15» можно преобразовать её следующим образом:
244 16 Всеволод Дорофеев
245 16 Всеволод Дорофеев
    СтроковаяДата = «20:42:22 2015/12/15»;
246 16 Всеволод Дорофеев
    СтроковаяДата = СтрЗаменить(СтроковаяДата , «/»,»»);
247 16 Всеволод Дорофеев
    СтроковаяДата = СтрЗаменить(СтроковаяДата , «:»,»»);
248 16 Всеволод Дорофеев
    НоваяДата = Дата(Прав(СтроковаяДата , 8) + Лев(СтроковаяДата ,6));
249 17 Всеволод Дорофеев
250 17 Всеволод Дорофеев
h3. Генератор случайных чисел
251 17 Всеволод Дорофеев
252 17 Всеволод Дорофеев
<pre>
253 17 Всеволод Дорофеев
		ГСЧ = Новый ГенераторСлучайныхЧисел();
254 17 Всеволод Дорофеев
		СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 100000);
255 17 Всеволод Дорофеев
</pre>
256 18 Всеволод Дорофеев
257 18 Всеволод Дорофеев
h3. Пересохранение книги в Эксель (Excel) с отображением листов
258 18 Всеволод Дорофеев
259 18 Всеволод Дорофеев
http://infostart.ru/public/323606/
260 18 Всеволод Дорофеев
Код:
261 18 Всеволод Дорофеев
262 18 Всеволод Дорофеев
Для v8:
263 18 Всеволод Дорофеев
264 18 Всеволод Дорофеев
<pre>
265 18 Всеволод Дорофеев
ТабДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLS);
266 18 Всеволод Дорофеев
267 18 Всеволод Дорофеев
Excel = Новый COMОбъект("Excel.Application");
268 18 Всеволод Дорофеев
Excel.WorkBooks.Open(ПолноеИмяФайла); 
269 18 Всеволод Дорофеев
Excel.Visible = 0;
270 18 Всеволод Дорофеев
271 18 Всеволод Дорофеев
Excel.ActiveWindow.DisplayWorkbookTabs = 1; 
272 18 Всеволод Дорофеев
Excel.ActiveWindow.TabRatio = 0.6;         
273 18 Всеволод Дорофеев
274 18 Всеволод Дорофеев
FullName = Excel.ActiveWorkbook.FullName;            
275 18 Всеволод Дорофеев
Excel.DisplayAlerts = false;
276 18 Всеволод Дорофеев
Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013
277 18 Всеволод Дорофеев
278 18 Всеволод Дорофеев
//Excel.Visible = 1;       // если нужно поработать дальше с книгой
279 18 Всеволод Дорофеев
//Excel.Application.Quit() // если просто выходим
280 18 Всеволод Дорофеев
</pre> 
281 18 Всеволод Дорофеев
282 18 Всеволод Дорофеев
Для v7.7:
283 18 Всеволод Дорофеев
284 18 Всеволод Дорофеев
<pre>
285 18 Всеволод Дорофеев
286 18 Всеволод Дорофеев
ТабДокумент.Записать(ПолноеИмяФайла, "XLS");
287 18 Всеволод Дорофеев
288 18 Всеволод Дорофеев
Excel = СоздатьОбъект("Excel.Application");
289 18 Всеволод Дорофеев
Excel.WorkBooks.Open(ПолноеИмяФайла); 
290 18 Всеволод Дорофеев
Excel.Visible = 0; 
291 18 Всеволод Дорофеев
292 18 Всеволод Дорофеев
Excel.ActiveWindow.DisplayWorkbookTabs = 1; 
293 18 Всеволод Дорофеев
Excel.ActiveWindow.TabRatio = 0.6;
294 18 Всеволод Дорофеев
295 18 Всеволод Дорофеев
FullName = Excel.ActiveWorkbook.FullName;            
296 18 Всеволод Дорофеев
Excel.DisplayAlerts = false;
297 18 Всеволод Дорофеев
Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013
298 18 Всеволод Дорофеев
299 18 Всеволод Дорофеев
//Excel.Visible = 1;       // если нужно поработать дальше с книгой
300 18 Всеволод Дорофеев
//Excel.Application.Quit() // если просто выходим
301 18 Всеволод Дорофеев
</pre>