Материал: Автоматизация учета рабочего времени сотрудников компании Московского филиала АО «ФПК»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
87
119.
120.
КонецПроцедуры
121.
122.
// Описание: загружает внешнюю компоненту (server_urv.dll) и создаёт объект URV.
123.
// Параметры: ВыводитьСообщения - признак необходимости выводить сообщения.
124.
// Возвращаемое значение: Истина - внешняя компонента загружена, Ложь - произошла ошибка.
125.
Функция ЗагрузитьВнешнююКомпонентуУРВ(ВыводитьСообщения = Истина) Экспорт
126.
127.
Результат = Неопределено;
128.
129.
// каталоги
130.
Каталог1С = КаталогПрограммы(); // корневой каталог 1С (BIN)
131.
132.
// файлы программы УРВ для 1С
133.
БиблиотекаУРВ = "server_urv.dll"; // имя библиотеки УРВ
134.
БиблиотекаУтилит = "server_utils.dll"; // имя библиотеки утилит
135.
БиблиотекаИнструментов = "server_tools.dll"; // имя библиотеки инструментов
136.
ФайлНастроек = "server_urv.ini"; // файл настроек
137.
ФайлКэшБазы = "server_urv.dat"; // Файл кэш базы данных УРВ
138.
139.
// удалить старые файлы УРВ в корневом каталоге 1С
140.
Попытка
141.
// файл кэш базы данных УРВ
142.
Если ФайлСуществует(Каталог1С + БиблиотекаУРВ) Тогда
143.
УдалитьФайлы(Каталог1С + БиблиотекаУРВ); // удалить основную библиотеку
144.
УдалитьФайлы(Каталог1С + ФайлКэшБазы); // удалить кэш базу, т.к. нужно
создать новую базу
145.
КонецЕсли;
146.
// библиотека утилит
147.
УдалитьФайлы(Каталог1С + БиблиотекаУтилит);
148.
// библиотека инструментов
149.
УдалитьФайлы(Каталог1С + БиблиотекаИнструментов);
150.
Исключение
151.
// не ругаться
152.
КонецПопытки;
153.
154.
ИмяАрхива = КаталогУРВ + "server_urv.zip"; // имя архива (содержится в макете внешней
компоненты)
155.
156.
// файл подключаемой библиотеки
88
157.
Если ТехнологияИсполнения = "COM" Тогда
158.
Если РазрядностьБиблиотеки = 32 Тогда
159.
ФайлБиблиотеки = КаталогУРВ + "server_urv_com32.dll";
160.
ИначеЕсли РазрядностьБиблиотеки = 64 Тогда
161.
ФайлБиблиотеки = КаталогУРВ + "server_urv_com64.dll";
162.
КонецЕсли;
163.
ИначеЕсли ТехнологияИсполнения = "Native API" Тогда
164.
Если РазрядностьБиблиотеки = 32 Тогда
165.
ФайлБиблиотеки = КаталогУРВ + "server_urv_native32.dll";
166.
ИначеЕсли РазрядностьБиблиотеки = 64 Тогда
167.
ФайлБиблиотеки = КаталогУРВ + "server_urv_native64.dll";
168.
КонецЕсли;
169.
КонецЕсли;
170.
171.
// удалить старые библиотеки, если их технология исполнения не соответствует
настройкам программы
172.
Если ТехнологияИсполнения = "COM" Тогда
173.
Попытка
174.
УдалитьФайлы(КаталогУРВ + "server_urv_native32.dll");
175.
УдалитьФайлы(КаталогУРВ + "server_urv_native64.dll");
176.
Исключение
177.
// не ругаться
178.
КонецПопытки;
179.
ИначеЕсли ТехнологияИсполнения = "Native API" Тогда
180.
Попытка
181.
УдалитьФайлы(КаталогУРВ + "server_urv_com32.dll");
182.
УдалитьФайлы(КаталогУРВ + "server_urv_com64.dll");
183.
Исключение
184.
// не ругаться
185.
КонецПопытки;
186.
КонецЕсли;
187.
188.
// удалить старые библиотеки, если их разрядность не соответствует настройкам
программы
189.
Если РазрядностьБиблиотеки = 32 Тогда
190.
Попытка
191.
УдалитьФайлы(КаталогУРВ + "server_urv_com64.dll");
192.
УдалитьФайлы(КаталогУРВ + "server_urv_native64.dll");
193.
УдалитьФайлы(КаталогУРВ + "server_tools_64.dll");
194.
Исключение
89
195.
// не ругаться
196.
КонецПопытки;
197.
ИначеЕсли РазрядностьБиблиотеки = 64 Тогда
198.
Попытка
199.
УдалитьФайлы(КаталогУРВ + "server_urv_com32.dll");
200.
УдалитьФайлы(КаталогУРВ + "server_urv_native32.dll");
201.
УдалитьФайлы(КаталогУРВ + "server_tools_32.dll");
202.
Исключение
203.
// не ругаться
204.
КонецПопытки;
205.
КонецЕсли;
206.
207.
Если ТехнологияИсполнения = "COM" Тогда
208.
209.
ИмяСОМОбъекта = "AddIn.object_urv";
210.
211.
// попытаться создать СОМ-объект по его имени
212.
Попытка
213.
URV = Новый (ИмяСОМОбъекта);
214.
URV = Неопределено;
215.
РезультатПодключения = Истина;
216.
Исключение
217.
// ошибка, подключить внешнюю компоненту
218.
РезультатПодключения = ПодключитьВнешнююКомпоненту(ИмяСОМОбъекта);
219.
КонецПопытки;
220.
221.
Если РезультатПодключения Тогда // СОМ-объект был зарегистрирован ранее
222.
223.
Если ВыводитьСообщения Тогда
224.
Сообщить(Формат(ТекущаяДата(), "ДЛФ=ДВ") + " " + "Внешняя компонента
загружена.");
225.
КонецЕсли;
226.
227.
// создать COM-объект
228.
Попытка
229.
Результат = Новый (ИмяСОМОбъекта);
230.
Если ВыводитьСообщения Тогда
231.
Сообщить(Формат(ТекущаяДата(), "ДЛФ=ДВ") + " " + "Создан объект
URV.");
232.
КонецЕсли;
90
233.
Исключение
234.
Сообщить(Формат(ТекущаяДата(), "ДЛФ=ДВ") + " " + "Ошибка при создании
объекта URV: "+ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
235.
КонецПопытки;
236.
237.
Иначе // СОМ-объект нужно зарегистрировать
238.
239.
// взять макет внешней компоненты и сохранить его на диск
240.
Если РазрядностьБиблиотеки = 32 Тогда
241.
ИмяМакета = "BK_COM_32";
242.
ИначеЕсли РазрядностьБиблиотеки = 64 Тогда
243.
ИмяМакета = "BK_COM_64";
244.
КонецЕсли;
245.
Макет = ЭтотОбъект.ПолучитьМакет(ИмяМакета);
246.
Если Макет = Неопределено Тогда
247.
Сообщить(Формат(ТекущаяДата(), "ДЛФ=ДВ") + " " + "Макет внешней компоненты
не найден: " + ИмяМакета + ".", СтатусСообщения.ОченьВажное);
248.
Возврат Результат;
249.
КонецЕсли;
250.
Макет.Записать(ИмяАрхива);
251.
252.
// открыть архив
253.
ФайлМакета = Новый ЧтениеZipФайла();
254.
ФайлМакета.Открыть(ИмяАрхива);
255.
256.
// распаковать файлы по одиночке
257.
Для Каждого Элемент Из ФайлМакета.Элементы Цикл
258.
Если ПолучитьРасширениеФайла(Элемент.Имя) = "dll" Тогда
259.
ФайлМакета.Извлечь(Элемент, КаталогУРВ,
РежимВосстановленияПутейФайловZIP.Восстанавливать, "");
260.
Прервать;
261.
КонецЕсли;
262.
КонецЦикла;
263.
264.
// закрыть и удалить архив
265.
ФайлМакета.Закрыть();
266.
УдалитьФайлы(ИмяАрхива);
267.
268.
// попытаться подключить внешнюю компоненту
269.
Попытка
91
270.
Если ФайлСуществует(ФайлБиблиотеки) Тогда
271.
ЗагрузитьВнешнююКомпоненту(ФайлБиблиотеки);
272.
КонецЕсли;
273.
Если ВыводитьСообщения Тогда
274.
Сообщить(Формат(ТекущаяДата(), "ДЛФ=ДВ") + " " + "Внешняя компонента
загружена.");
275.
КонецЕсли;
276.
Результат = Новый (ИмяСОМОбъекта);
277.
Если ВыводитьСообщения И Результат <> Неопределено Тогда
278.
Сообщить(Формат(ТекущаяДата(), "ДЛФ=ДВ") + " " + "Создан объект
URV.");
279.
КонецЕсли;
280.
Исключение
281.
Сообщить(Формат(ТекущаяДата(), "ДЛФ=ДВ") + " " + "Ошибка: " +
ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
282.
КонецПопытки
283.
284.
КонецЕсли;
285.
286.
ИначеЕсли ТехнологияИсполнения = "Native API" Тогда
287.
288.
// взять макет внешней компоненты и сохранить его на диск
289.
Если РазрядностьБиблиотеки = 32 Тогда
290.
ИмяМакета = "BK_NATIVE_32";
291.
ИначеЕсли РазрядностьБиблиотеки = 64 Тогда
292.
ИмяМакета = "BK_NATIVE_64";
293.
КонецЕсли;
294.
Макет = ЭтотОбъект.ПолучитьМакет(ИмяМакета);
295.
Если Макет = Неопределено Тогда
296.
Сообщить(Формат(ТекущаяДата(), "ДЛФ=ДВ") + " " + "Макет внешней компоненты не
найден: " + ИмяМакета + ".", СтатусСообщения.ОченьВажное);
297.
Возврат Результат;
298.
КонецЕсли;
299.
Макет.Записать(ИмяАрхива);
300.
301.
// открыть архив
302.
ФайлМакета = Новый ЧтениеZipФайла();
303.
ФайлМакета.Открыть(ИмяАрхива);
304.
305.
// распаковать файлы по одиночке
Источник: https://baza.diplomsite.ru/previewfile/2428