├── README.md
├── БГУ
└── Загрузка комплектов отчётности в формате repx.os
├── БСП
├── Create-user-and-add-role-admins.os
├── ДобавлениеПользователейВБазыНаБСП.os
├── Добовление внешний обработки.os
├── Заведение пользователей.os
├── ЗагрузкаОбновлениеДопОтчетыИОбработки.os
├── Переименования пользователя.txt
├── Создание пользователей для БП3 и ЗУП3.os
└── Удаление прав- для удаления к роли добавить минус.txt
├── Бухгалтерия предприятия
├── Запрос оборотов по 51 счёту.os
└── Создание нового пользователя.os
└── Удаление помеченных объектов.os
/README.md:
--------------------------------------------------------------------------------
1 | Здесь я буду собирать скрипты на OneScript для программы Обновлятор-1С, которые присылают мне пользователи.
2 |
--------------------------------------------------------------------------------
/БГУ/Загрузка комплектов отчётности в формате repx.os:
--------------------------------------------------------------------------------
1 | // ** Обработка загрузки комплекта отчетности из repx (тестировалось на БГУ 2.0.37.10) **
2 |
3 | #use "updater1c"
4 |
5 | // ****************************************************************************
6 | // Переменные модуля
7 | // ****************************************************************************
8 |
9 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
10 | Перем updater; // Обновлятор, через который мы получаем информацию о базе,
11 | // а также вызываем различные функции обновлятора.
12 | Перем connector; // Коннектор для подключения к базе.
13 | Перем v8; // Само подключение к базе через коннектор.
14 |
15 | // ****************************************************************************
16 | // Ваш код для выполнения обновлятором
17 | // ****************************************************************************
18 |
19 | Процедура Главная()
20 |
21 | // ************************************************************************
22 | // Почему всё написано так сложно?
23 | //
24 | // Потому, что здесь мы работает с кучей COM-объектов и для безошибочной
25 | // работы нам требуется задать явный порядок их уничтожения - обратный
26 | // их созданию, иначе сборщик мусора на стороне OneScript уничтожает
27 | // их в конце работы скрипта в своём порядке и, как показывает
28 | // практика, это приводит к проблемам (скрипт отработав верно не может
29 | // корректно уничтожить все COM-объекты и завершается с кодом ошибки).
30 | //
31 | // При этом COM-объекты создаются порою в неочевидных местах и требуется
32 | // соблюдение ряда правил, чтобы не упустить из нашего внимания ни один
33 | // из созданных объектов.
34 | // а) В частности, нельзя использовать обход COM-коллекций циклом Для Каждого,
35 | // потому что это приводит к неявному созданию COM-объекта, который мы
36 | // сами освободить не сможем и он зависнет до момента, когда будет
37 | // освобождён сборщиком мусора и это приведёт к ошибке, так как все
38 | // остальные объекты уже будут к этому моменту уничтожены.
39 | // б) По этой же причине нельзя обращаться к COM-объектам больше чем через
40 | // одну точку, так как это тоже приводит к неявному созданию COM-объектов.
41 | // Есть статья на эту тему: http://helpme1c.ru/ispolzovanie-com-obektov-v-onescript
42 | // ************************************************************************
43 |
44 | ПакетныеФайлыOPC = Неопределено;
45 | Пакет = Неопределено;
46 | СвязиПакета = Неопределено;
47 | Relationship = Неопределено;
48 | ЧтениеМанифеста = Неопределено;
49 | ФабрикаXDTO = Неопределено;
50 | МанифестXDTO = Неопределено;
51 | ПереченьКомплектов = Неопределено;
52 | ОписаниеКомплекта = Неопределено;
53 | Обработки = Неопределено;
54 | ИмпортКейса = Неопределено;
55 | МодульЗагрузки = Неопределено;
56 | БылиОшибки = Ложь;
57 |
58 | Попытка
59 | ИмяФайла = "x:/data.repx";
60 |
61 | Сообщить("Импорт комплекта отчетности из файла: " + ИмяФайла + ".");
62 |
63 | ПакетныеФайлыOPC = v8.ПакетныеФайлыOPC;
64 |
65 | // ** Чтение пакета **
66 | Пакет = ПакетныеФайлыOPC.ЧтениеОткрыть(ИмяФайла);
67 |
68 | // ** Чтение связей пакета **
69 | СвязиПакета = ПакетныеФайлыOPC.ЧтениеПолучитьСвязиЧастиXDTO(Пакет, "");
70 |
71 | // ** Находим имя манифеста внутри пакета **
72 | ИмяЧастиМанифеста = Неопределено;
73 | Relationship = СвязиПакета.Relationship;
74 |
75 | Для Индекс = 0 По Relationship.Количество() - 1 Цикл
76 | СвязьПакета = Relationship.Получить(Индекс);
77 |
78 | Если СвязьПакета.Получить("TargetMode") = "External" Тогда
79 | ОсвободитьОбъект(СвязьПакета);
80 | Продолжить;
81 | КонецЕсли;
82 |
83 | Если СвязьПакета.Получить("Type") = "urn:rels-1c-ru:reports/meta/package-properties" Тогда
84 | ИмяЧастиМанифеста = СвязьПакета.Получить("Target");
85 | ОсвободитьОбъект(СвязьПакета);
86 | Прервать;
87 | КонецЕсли;
88 |
89 | ОсвободитьОбъект(СвязьПакета);
90 | КонецЦикла;
91 |
92 | Если ИмяЧастиМанифеста = Неопределено Тогда
93 | ПакетныеФайлыOPC.ЧтениеЗакрыть(Пакет);
94 | Сообщить("Не найдено оглавление в файле комплекта - некорректная структура файла.");
95 | Иначе
96 | Сообщить("Имя манифеста внутри пакета: " + ИмяЧастиМанифеста + ".");
97 |
98 | // ** Читаем манифест **
99 | ЧтениеМанифеста = ПакетныеФайлыOPC.ЧтениеПолучитьXMLЧасть(Пакет, ИмяЧастиМанифеста);
100 |
101 | Попытка
102 | ФабрикаXDTO = v8.ФабрикаXDTO;
103 | МанифестXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеМанифеста);
104 | ПереченьКомплектов = МанифестXDTO.ПолучитьXDTO("CaseDefinition");
105 |
106 | // ** Получаем описание комплекта **
107 |
108 | Попытка
109 | ОписаниеКомплекта = ПереченьКомплектов.ПолучитьXDTO(0);
110 | Исключение
111 | ОписаниеКомплекта = ПереченьКомплектов;
112 | КонецПопытки;
113 |
114 | // ** Читаем содержимое комплекта **
115 | Сообщить("Содержимое комплекта находится в пакете по адресу: " + ОписаниеКомплекта.content + ".");
116 |
117 | Результат = ПакетныеФайлыOPC.ЧтениеПолучитьЧасть(Пакет, ОписаниеКомплекта.content);
118 |
119 | Попытка
120 | ФайлНаДиске = Результат.Файл.ПолноеИмя; // для совместимости со старыми версиями конфигураций
121 | ОсвободитьОбъект(Результат);
122 | Исключение
123 | ФайлНаДиске = Результат;
124 | КонецПопытки;
125 |
126 | Сообщить("Вытащили содержимое комплекта во внешний файл: " + ФайлНаДиске + ".");
127 |
128 | // ** Вызываем экспортную процедуру загрузки комплекта из менеджера обработки ИмпортКейса **
129 | Сообщить("Запустили загрузку комплекта отчетности в базу.");
130 |
131 | Обработки = v8.Обработки;
132 | ИмпортКейса = Обработки.ИмпортКейса;
133 | МодульЗагрузки = ИмпортКейса.Создать();
134 |
135 | Попытка
136 | МодульЗагрузки.АдресКомплекта = ФайлНаДиске;
137 | РезультатЗагрузки = МодульЗагрузки.Загрузить();
138 |
139 | Если РезультатЗагрузки Тогда
140 | Сообщить("Успешная загрузка!");
141 | Иначе
142 | Сообщить("Произошла ошибка во время загрузки. Скорее всего комплект не подходит для данной версии конфигурации. В журнале регистрации указана точная причина ошибки.");
143 | БылиОшибки = Истина;
144 | КонецЕсли;
145 | Исключение
146 | ВызватьИсключение;
147 | КонецПопытки;
148 | Исключение
149 | ЧтениеМанифеста.Закрыть();
150 | ПакетныеФайлыOPC.ЧтениеЗакрыть(Пакет);
151 | ВызватьИсключение;
152 | КонецПопытки;
153 |
154 | ЧтениеМанифеста.Закрыть();
155 | ПакетныеФайлыOPC.ЧтениеЗакрыть(Пакет);
156 | КонецЕсли;
157 | Исключение
158 | БылиОшибки = Истина;
159 | КонецПопытки;
160 |
161 | // Освобождаем в порядке обратном созданию.
162 | Освободить(МодульЗагрузки);
163 | Освободить(ИмпортКейса);
164 | Освободить(Обработки);
165 | Освободить(ОписаниеКомплекта);
166 | Освободить(ПереченьКомплектов);
167 | Освободить(МанифестXDTO);
168 | Освободить(ФабрикаXDTO);
169 | Освободить(ЧтениеМанифеста);
170 | Освободить(Relationship);
171 | Освободить(СвязиПакета);
172 | Освободить(Пакет);
173 | Освободить(ПакетныеФайлыOPC);
174 |
175 | Если БылиОшибки Тогда
176 | ВызватьИсключение "Возникла ошибка при загрузке.";
177 | КонецЕсли;
178 |
179 | КонецПроцедуры
180 |
181 | Процедура Освободить(Объект)
182 |
183 | Если Объект <> Неопределено Тогда
184 | ОсвободитьОбъект(Объект);
185 | КонецЕсли;
186 |
187 | КонецПроцедуры
188 |
189 | // ****************************************************************************
190 | // Служебные процедуры
191 | // ****************************************************************************
192 |
193 | Процедура ПриНачалеРаботы()
194 |
195 | errors = Ложь;
196 |
197 | updater = Новый Updater1C;
198 |
199 | // Если в скрипте не планируется использовать
200 | // подключение к базе - просто закомментируйте
201 | // две нижние строки.
202 | connector = Новый COMОбъект("V" + updater.PlatformRelease + ".COMConnector");
203 | v8 = updater.BaseConnect(connector);
204 |
205 | КонецПроцедуры
206 |
207 | Процедура ПриОкончанииРаботы()
208 |
209 | Если v8 <> Неопределено Тогда
210 | Попытка
211 | ОсвободитьОбъект(v8);
212 | v8 = Неопределено;
213 | Исключение
214 | КонецПопытки;
215 | КонецЕсли;
216 |
217 | Если connector <> Неопределено Тогда
218 | Попытка
219 | ОсвободитьОбъект(connector);
220 | connector = Неопределено;
221 | Исключение
222 | КонецПопытки;
223 | КонецЕсли;
224 |
225 | Если updater <> Неопределено Тогда
226 | Попытка
227 | ОсвободитьОбъект(updater);
228 | updater = Неопределено;
229 | Исключение
230 | КонецПопытки;
231 | КонецЕсли;
232 |
233 | // Ожидание в конце выполнения программы
234 | // магическим образом помогает избежать
235 | // проблем с освобождением ресурсов, если
236 | // мы использовали внешнее подключение к
237 | // базе. Могут быть случаи, когда недостаточно
238 | // 1 секунды.
239 | Приостановить(1000);
240 |
241 | Если errors Тогда
242 | ЗавершитьРаботу(1);
243 | КонецЕсли;
244 |
245 | КонецПроцедуры
246 |
247 | // ****************************************************************************
248 | // Инициализация и запуск скрипта
249 | // ****************************************************************************
250 |
251 | ПриНачалеРаботы();
252 |
253 | Попытка
254 | Главная();
255 | Исключение
256 | errors = Истина;
257 | Сообщить("" + ОписаниеОшибки() + "");
258 | КонецПопытки;
259 |
260 | ПриОкончанииРаботы();
--------------------------------------------------------------------------------
/БСП/Create-user-and-add-role-admins.os:
--------------------------------------------------------------------------------
1 | #use "updater1c"
2 |
3 | // ****************************************************************************
4 | // Переменные модуля
5 | // ****************************************************************************
6 |
7 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
8 | Перем updater; // Обновлятор, через который мы получаем информацию о базе,
9 | // а также вызываем различные функции обновлятора.
10 | Перем connector; // Коннектор для подключения к базе.
11 | Перем v8; // Само подключение к базе через коннектор.
12 |
13 | // ****************************************************************************
14 | // Ваш код для выполнения обновлятором
15 | // ****************************************************************************
16 |
17 | Процедура СоздатьПользователя(ПолноеИмя, Пароль)
18 |
19 | // Обязательно прочтите статью про COM-объекты
20 | // http://helpme1c.ru/ispolzovanie-com-obektov-v-onescript
21 |
22 | // создаём пользователя иб
23 | ПользовательИБ = v8.ПользователиИнформационнойБазы.СоздатьПользователя();
24 | ПользовательИБ.Имя = ПолучитьКраткоеИмяПользователяИБ(ПолноеИмя);
25 | ПользовательИБ.ПолноеИмя = ПолноеИмя;
26 | ПользовательИБ.Пароль = Пароль;
27 | ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь;
28 | ПользовательИБ.АутентификацияОС = Ложь;
29 |
30 | Если v8.ПользователиИнформационнойБазы.НайтиПоИмени(ПользовательИБ.Имя) = Неопределено Тогда
31 | ПользовательИБ.Записать();
32 | Сообщить("Новый пользователь создан.");
33 | Иначе
34 | Сообщить("Пользователь с таким именем уже есть в базе!");
35 | // все равно назначим права пользователю
36 | НазначитьПрава(ПользовательИБ.Имя, ПользовательИБ.ПолноеИмя);
37 | Возврат;
38 | КонецЕсли;
39 |
40 | // создаём пользователя справочника
41 | Пользователь = v8.Справочники.Пользователи.СоздатьЭлемент();
42 | Пользователь.Наименование = ПользовательИБ.ПолноеИмя;
43 |
44 | ОписаниеПользователяИБ = v8.NewObject("Структура");
45 | ОписаниеПользователяИБ.Вставить("Действие", "Записать");
46 | ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор);
47 | Пользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ);
48 | Пользователь.Записать();
49 |
50 | // назначаем права пользователю иб
51 | НазначитьПрава(ПользовательИБ.Имя, ПользовательИБ.ПолноеИмя);
52 |
53 | КонецПроцедуры
54 |
55 | &НаКлиенте
56 | Функция ПроверитьСуществованиеФайла(ПутьКФайлу)
57 | Файл = Новый Файл(ПутьКФайлу);
58 | Возврат Файл.Существует();
59 | КонецФункции
60 |
61 | &НаКлиенте
62 | Процедура ПрочитатьФайлСПользователями()
63 |
64 | //Сообщить(КаталогИБ);
65 | Если ЗначениеЗаполнено(Объект.Путь) Тогда
66 | ПутьКФайлу = Объект.Путь;
67 | Иначе
68 | ПутьКФайлу = "G:\Users2.txt"
69 | КонецЕсли;
70 |
71 | Если Не ПроверитьСуществованиеФайла(ПутьКФайлу) Тогда
72 | ПолноеИмя = "Администратор";
73 | Пароль = "Пароль";
74 | //СоздатьПользователя(ПолноеИмя, Пароль);
75 | Иначе
76 | ТекстовыйФайл = Новый ТекстовыйДокумент;
77 | ТекстовыйФайл.Прочитать(ПутьКФайлу, "UTF-8");
78 |
79 | // Выводим текст по строкам.
80 | Для Индекс = 1 По ТекстовыйФайл.КоличествоСтрок() Цикл
81 | СтрокаФайла = ТекстовыйФайл.ПолучитьСтроку(Индекс);
82 | Поз = Найти(СтрокаФайла,",");
83 | ПолноеИмя = Лев(СтрокаФайла,Поз - 1);
84 | Пароль = СокрЛП(Прав(СтрокаФайла,СтрДлина(СтрокаФайла) - Поз));
85 | //СоздатьПользователя(ПолноеИмя, Пароль);
86 | КонецЦикла;
87 | КонецЕсли;
88 |
89 | КонецПроцедуры
90 |
91 | Функция ПолучитьКраткоеИмяПользователяИБ(Знач ПолноеИмя)
92 |
93 | Разделители = Новый Массив;
94 | Разделители.Добавить(" ");
95 | Разделители.Добавить(".");
96 |
97 | КраткоеИмя = "";
98 | Для Счетчик = 1 По 3 Цикл
99 |
100 | Если Счетчик <> 1 Тогда
101 | КраткоеИмя = КраткоеИмя + ВРег(Лев(ПолноеИмя, 1));
102 | КонецЕсли;
103 |
104 | ПозицияРазделителя = 0;
105 | Для каждого Разделитель Из Разделители Цикл
106 | ПозицияТекущегоРазделителя = СтрНайти(ПолноеИмя, Разделитель);
107 | Если ПозицияТекущегоРазделителя > 0
108 | И ( ПозицияРазделителя = 0
109 | ИЛИ ПозицияРазделителя > ПозицияТекущегоРазделителя ) Тогда
110 | ПозицияРазделителя = ПозицияТекущегоРазделителя;
111 | КонецЕсли;
112 | КонецЦикла;
113 |
114 | Если ПозицияРазделителя = 0 Тогда
115 | Если Счетчик = 1 Тогда
116 | КраткоеИмя = ПолноеИмя;
117 | КонецЕсли;
118 | Прервать;
119 | КонецЕсли;
120 |
121 | Если Счетчик = 1 Тогда
122 | КраткоеИмя = Лев(ПолноеИмя, ПозицияРазделителя - 1);
123 | КонецЕсли;
124 |
125 | ПолноеИмя = Прав(ПолноеИмя, СтрДлина(ПолноеИмя) - ПозицияРазделителя);
126 | Пока Разделители.Найти(Лев(ПолноеИмя, 1)) <> Неопределено Цикл
127 | ПолноеИмя = Сред(ПолноеИмя, 2);
128 | КонецЦикла;
129 | КонецЦикла;
130 |
131 | Возврат КраткоеИмя;
132 |
133 | КонецФункции
134 |
135 | Процедура НазначитьПрава(Имя, ПолноеИмя)
136 |
137 | // Добавление роли уже существующему пользователю
138 |
139 | ИмяПользователя = СокрЛп(Имя);
140 |
141 | ПользовательИБ = v8.ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
142 |
143 | Пользователь = v8.Справочники.Пользователи.НайтиПоНаименованию(ПолноеИмя);
144 |
145 | Если ПользовательИБ = Неопределено Тогда
146 | Сообщить("Пользователь с таким именем не найден в базе.");
147 | Иначе
148 | ПользовательИБ.Роли.Добавить(v8.Метаданные.Роли.АдминистраторСистемы);
149 | ПользовательИБ.Роли.Добавить(v8.Метаданные.Роли.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок);
150 | ПользовательИБ.Роли.Добавить(v8.Метаданные.Роли.ПолныеПрава);
151 | ПользовательИБ.Записать();
152 |
153 | Группа = v8.Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект();
154 | Нов = Группа.Пользователи.Добавить();
155 | Нов.Пользователь = Пользователь;
156 | Группа.Записать();
157 |
158 | Группа = v8.Справочники.ГруппыДоступа.НайтиПоНаименованию("Открытие внешних отчетов и обработок").ПолучитьОбъект();
159 | Нов = Группа.Пользователи.Добавить();
160 | Нов.Пользователь = Пользователь;
161 | Группа.Записать();
162 |
163 | Сообщить("Роль добавлена.");
164 | КонецЕсли;
165 |
166 | КонецПроцедуры
167 |
168 | // ****************************************************************************
169 | // Служебные процедуры
170 | // ****************************************************************************
171 |
172 | Процедура ПриНачалеРаботы()
173 |
174 | errors = Ложь;
175 |
176 | updater = Новый Updater1C;
177 |
178 | // Если в скрипте не планируется использовать
179 | // подключение к базе - просто закомментируйте
180 | // две нижние строки.
181 | connector = updater.CreateConnector();
182 | v8 = updater.BaseConnectNew(connector);
183 |
184 | КонецПроцедуры
185 |
186 | Процедура ПриОкончанииРаботы()
187 |
188 | Если v8 <> Неопределено Тогда
189 | Попытка
190 | ОсвободитьОбъект(v8);
191 | v8 = Неопределено;
192 | Исключение
193 | КонецПопытки;
194 | КонецЕсли;
195 |
196 | Если connector <> Неопределено Тогда
197 | Попытка
198 | ОсвободитьОбъект(connector);
199 | connector = Неопределено;
200 | Исключение
201 | КонецПопытки;
202 | КонецЕсли;
203 |
204 | Если updater <> Неопределено Тогда
205 | Попытка
206 | ОсвободитьОбъект(updater);
207 | updater = Неопределено;
208 | Исключение
209 | КонецПопытки;
210 | КонецЕсли;
211 |
212 | Если errors Тогда
213 | ЗавершитьРаботу(1);
214 | КонецЕсли;
215 |
216 | КонецПроцедуры
217 |
218 | // ****************************************************************************
219 | // Инициализация и запуск скрипта
220 | // ****************************************************************************
221 |
222 | ПриНачалеРаботы();
223 |
224 | Попытка
225 | ПрочитатьФайлСПользователями();
226 |
227 | updater.КодПользователяВыполнился();
228 | Исключение
229 | errors = Истина;
230 | Сообщить("" + ОписаниеОшибки() + "");
231 | КонецПопытки;
232 |
233 | ПриОкончанииРаботы();
--------------------------------------------------------------------------------
/БСП/ДобавлениеПользователейВБазыНаБСП.os:
--------------------------------------------------------------------------------
1 | #use "updater1c"
2 |
3 | // ****************************************************************************
4 | // Переменные модуля
5 | // ****************************************************************************
6 |
7 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
8 | Перем updater; // Обновлятор, через который мы получаем информацию о базе,
9 | // а также вызываем различные функции обновлятора.
10 | Перем connector; // Коннектор для подключения к базе.
11 | Перем v8; // Само подключение к базе через коннектор.
12 |
13 | // ****************************************************************************
14 | // Ваш код для выполнения обновлятором
15 | // ****************************************************************************
16 |
17 | Процедура Главная()
18 |
19 | //=========== НАЧАЛО КОДА ДОБАВЛЕНИЯ ПОЛЬЗОВАТЕЛЕЙ ==========
20 | // ***
21 | // *** Статья, описывающая этот код: https://geniy1s.ru/programmnoe-dobavlenie-polzovatelej-v-bazy-na-bsp/
22 | // ***
23 |
24 | Т = v8.NewObject("ТаблицаЗначений");
25 | Т.Колонки.Добавить("ПолноеИмя");
26 | Т.Колонки.Добавить("Имя");
27 | Т.Колонки.Добавить("Пароль");
28 | Т.Колонки.Добавить("ВходВПрограммуРазрешен");
29 | Т.Колонки.Добавить("АутентификацияСтандартная");
30 | Т.Колонки.Добавить("АутентификацияОС");
31 | Т.Колонки.Добавить("ПользовательОС");
32 | Т.Колонки.Добавить("ЗапрещеноИзменятьПароль");
33 | Т.Колонки.Добавить("ПоказыватьВСпискеВыбора");
34 | Т.Колонки.Добавить("Профили");
35 |
36 | //********** НАЧАЛО: ЗДЕСЬ ОПИСЫВАЕМ ПОЛЬЗОВАТЕЛЕЙ ***************
37 |
38 | Если v8.Метаданные.Имя = "БухгалтерияПредприятия" Тогда
39 |
40 | //ПОЛЬЗОВАТЕЛИ БП
41 |
42 | С = Т.Добавить();
43 | С.ПолноеИмя = "Бухгалтер 4";
44 | С.Имя = "Бух4";
45 | С.Пароль = "123";
46 | С.ВходВПрограммуРазрешен = истина;
47 | С.АутентификацияСтандартная = истина;
48 | // С.АутентификацияОС = ложь;
49 | // С.ПользовательОС = Неопределено;
50 | С.АутентификацияОС = истина;
51 | С.ПользовательОС = "\\test\test";
52 | С.ЗапрещеноИзменятьПароль = ложь;
53 | С.ПоказыватьВСпискеВыбора = истина;
54 | С.Профили = "Бухгалтер, Главный бухгалтер";
55 |
56 | ИначеЕсли v8.Метаданные.Имя = "ЗарплатаИУправлениеПерсоналом" Тогда
57 |
58 | //ПОЛЬЗОВАТЕЛИ ЗУП
59 |
60 | С = Т.Добавить();
61 | С.ПолноеИмя = "Кадровик 4";
62 | С.Имя = "Кадровик4";
63 | С.Пароль = "123";
64 | С.ВходВПрограммуРазрешен = истина;
65 | С.АутентификацияСтандартная = истина;
66 | // С.АутентификацияОС = ложь;
67 | // С.ПользовательОС = Неопределено;
68 | С.АутентификацияОС = истина;
69 | С.ПользовательОС = "\\test\test";
70 | С.ЗапрещеноИзменятьПароль = ложь;
71 | С.ПоказыватьВСпискеВыбора = истина;
72 | С.Профили = "Бухгалтер";
73 |
74 | КонецЕсли;
75 |
76 |
77 |
78 | //********** КОНЕЦ ОПИСАНИЯ ПОЛЬЗОВАТЕЛЕЙ ***************
79 |
80 | Для Каждого С ИЗ Т Цикл
81 |
82 | //Создаем пользователя
83 | ОбновляемыеСвойства = v8.NewObject("Структура");
84 | Для Инд = 1 По Т.Колонки.Количество() Цикл
85 | Колонка = Т.Колонки.Получить(Инд - 1);
86 | Зн = С.Получить(Инд - 1);
87 | Если Колонка.Имя = "Профили" Тогда
88 | Продолжить;
89 | КонецЕсли;
90 | Если Зн <> Неопределено Тогда
91 | ОбновляемыеСвойства.Вставить(Колонка.Имя, Зн);
92 | КонецЕсли;
93 | КонецЦикла;
94 | ОбновляемыеСвойства.Вставить("Действие", "Записать"); //Не уверен, что без этого будет работать
95 | ОбновляемыеСвойства.Вставить("ПарольУстановлен", истина);
96 | ОбновляемыеСвойства.Вставить("АутентификацияOpenID", ложь);
97 |
98 |
99 | ПользовательИБСуществует = v8.ПользователиИнформационнойБазы.НайтиПоИмени(С.Имя) <> Неопределено;
100 |
101 | v8.Пользователи.УстановитьСвойстваПользователяИБ(С.Имя, ОбновляемыеСвойства, НЕ ПользовательИБСуществует); //Создавать нового ставим всегда в Истина
102 |
103 | Сообщить(?(ПользовательИБСуществует, "Добавлен", "Обновлен") + " пользователь ИБ: " + С.Имя);
104 |
105 | ТекПользователь = v8.Справочники.Пользователи.НайтиПоНаименованию(ОбновляемыеСвойства.ПолноеИмя, истина);
106 | ПользовательСуществует = v8.ЗначениеЗаполнено(ТекПользователь);
107 |
108 | //Записываем пользователя в 1С, если его еще нет в базе
109 | Если НЕ ПользовательСуществует Тогда
110 | Пользователь = v8.Справочники.Пользователи.СоздатьЭлемент();
111 | Пользователь.Наименование = ОбновляемыеСвойства.ПолноеИмя;
112 | Пользователь.ДополнительныеСвойства.Вставить(
113 | "ОписаниеПользователяИБ", ОбновляемыеСвойства);
114 | Пользователь.Записать();
115 | ТекПользователь = Пользователь.Ссылка;
116 | Сообщить("Создан пользователь базы: " + С.Имя);
117 | КонецЕсли;
118 |
119 | МассивПрофили = СтрРазделить(С.Профили, ",");
120 | Для Каждого ИмяПрофиля ИЗ МассивПрофили Цикл
121 | ИмяПрофиля = СокрЛП(ИмяПрофиля);
122 | Если v8.УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда
123 | ТекПрофиль = v8.Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию(ИмяПрофиля);
124 | Если Не v8.ЗначениеЗаполнено(ТекПрофиль) Тогда
125 | Сообщить("Не найден профиль: " + ИмяПрофиля, СтатусСообщения.Важное);
126 | Продолжить;
127 | КонецЕсли;
128 | v8.УправлениеДоступом.ВключитьПрофильПользователю(ТекПользователь, ТекПрофиль);
129 | Иначе
130 | ТекГруппа = v8.Справочники.ГруппыДоступа.НайтиПоНаименованию(ИмяПрофиля);
131 | Если Не v8.ЗначениеЗаполнено(ТекГруппа) Тогда
132 | Сообщить("Не найдена группа: " + ИмяПрофиля, СтатусСообщения.Важное);
133 | Продолжить;
134 | КонецЕсли;
135 |
136 | //Код скопирован из типовой формы ПраваДоступа, несколько упрощен
137 | ГруппаДоступаОбъект = ТекГруппа.ПолучитьОбъект();
138 | Добавить = истина;
139 | Если Добавить Тогда
140 | Если ГруппаДоступаОбъект.Пользователи.Найти(ТекПользователь, "Пользователь") = Неопределено Тогда
141 | ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = ТекПользователь;
142 | КонецЕсли;
143 | Иначе
144 | СтрокаТЧ = ГруппаДоступаОбъект.Пользователи.Найти(ТекПользователь, "Пользователь");
145 | Если СтрокаТЧ <> Неопределено Тогда
146 | ГруппаДоступаОбъект.Пользователи.Удалить(СтрокаТЧ);
147 | КонецЕсли;
148 | КонецЕсли;
149 | ГруппаДоступаОбъект.Записать();
150 | КонецЕсли;
151 | КонецЦикла;
152 | КонецЦикла;
153 |
154 | //=========== КОНЕЦ КОДА ДОБАВЛЕНИЯ ПОЛЬЗОВАТЕЛЕЙ ==========
155 |
156 |
157 | КонецПроцедуры
158 |
159 |
160 | // ****************************************************************************
161 | // Служебные процедуры
162 | // ****************************************************************************
163 |
164 | Процедура ПриНачалеРаботы()
165 |
166 | errors = Ложь;
167 |
168 | updater = Новый Updater1C;
169 |
170 | // Если в скрипте не планируется использовать
171 | // подключение к базе - просто закомментируйте
172 | // две нижние строки.
173 | connector = updater.CreateConnector();
174 | v8 = updater.BaseConnectNew(connector);
175 |
176 | КонецПроцедуры
177 |
178 | Процедура ПриОкончанииРаботы()
179 |
180 | Если v8 <> Неопределено Тогда
181 | Попытка
182 | ОсвободитьОбъект(v8);
183 | v8 = Неопределено;
184 | Исключение
185 | КонецПопытки;
186 | КонецЕсли;
187 |
188 | Если connector <> Неопределено Тогда
189 | Попытка
190 | ОсвободитьОбъект(connector);
191 | connector = Неопределено;
192 | Исключение
193 | КонецПопытки;
194 | КонецЕсли;
195 |
196 | Если updater <> Неопределено Тогда
197 | Попытка
198 | ОсвободитьОбъект(updater);
199 | updater = Неопределено;
200 | Исключение
201 | КонецПопытки;
202 | КонецЕсли;
203 |
204 | Если errors Тогда
205 | ЗавершитьРаботу(1);
206 | КонецЕсли;
207 |
208 | КонецПроцедуры
209 |
210 | // ****************************************************************************
211 | // Инициализация и запуск скрипта
212 | // ****************************************************************************
213 |
214 | ПриНачалеРаботы();
215 |
216 | Попытка
217 | Главная();
218 | updater.КодПользователяВыполнился();
219 | Исключение
220 | errors = Истина;
221 | Сообщить("" + ОписаниеОшибки() + "");
222 | КонецПопытки;
223 |
224 | ПриОкончанииРаботы();
--------------------------------------------------------------------------------
/БСП/Добовление внешний обработки.os:
--------------------------------------------------------------------------------
1 | #use "updater1c"
2 |
3 | // ****************************************************************************
4 | // Переменные модуля
5 | // ****************************************************************************
6 |
7 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
8 | Перем updater; // Обновлятор, через который мы получаем информацию о базе,
9 | // а также вызываем различные функции обновлятора.
10 | Перем connector; // Коннектор для подключения к базе.
11 | Перем v8; // Само подключение к базе через коннектор.
12 |
13 | // ****************************************************************************
14 | // Ваш код для выполнения обновлятором
15 | // ****************************************************************************
16 |
17 | Процедура Главная()
18 |
19 | // Обязательно прочтите статью про COM-объекты
20 | // http://helpme1s.ru/ispolzovanie-com-obektov-v-onescript
21 |
22 |
23 |
24 | //НАЧАЛО СКРИПТА ПО ДОБАВЛЕНИЮ ВНЕШНЕГО ОТЧЕТА/ОБРАБОТКИ
25 | ИмяФайла = "C:\1.epf"; //Укажите имя файла
26 |
27 | //Остальной код не меняется...
28 |
29 | Ф = v8.NewObject("Файл", ИмяФайла);
30 | РасширениеФайла = ВРег(Прав(ИмяФайла, 3));
31 |
32 |
33 | ДД = v8.NewObject("ДвоичныеДанные", ИмяФайла);
34 | ХранилищеФайла = v8.NewObject("ХранилищеЗначения", ДД);
35 |
36 |
37 | //Параметры структуры взяты из ДополнительныеОтчетыИОбработки.ФормаЭлемента
38 | ПараметрыРегистрации = v8.NewObject("Структура", "ИмяФайла, ОтключатьПубликацию, ОтключатьКонфликтующие, ЭтоОтчет", Ф.Имя, ложь, ложь, ложь);
39 | Если РасширениеФайла = "ERF" Тогда
40 | ПараметрыРегистрации.ЭтоОтчет = Истина;
41 | ИначеЕсли РасширениеФайла = "EPF" Тогда
42 | ПараметрыРегистрации.ЭтоОтчет = Ложь;
43 | Иначе
44 | ВызватьИсключение "Неизвестное расширение файла: " + РасширениеФайла;
45 | КонецЕсли;
46 | ПараметрыРегистрации.Вставить("АдресДанныхОбработки", v8.ПоместитьВоВременноеХранилище(ДД));
47 |
48 | //Служебный элемент для получения данных
49 | ООТест = v8.Справочники.ДополнительныеОтчетыИОбработки.СоздатьЭлемент();
50 | РезультатРегистрации = v8.ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработку(ООТест, ПараметрыРегистрации);
51 | Если НЕ РезультатРегистрации.Успех Тогда
52 | ВызватьИсключение "Не удалось зарегистрировать обработку из файла: " + РезультатРегистрации.ТекстОшибки;
53 | КонецЕсли;
54 | ИмяОбъекта = РезультатРегистрации.ИмяОбъекта;
55 | З = v8.NewObject("Запрос",
56 | "ВЫБРАТЬ
57 | | Т.Ссылка КАК Ссылка
58 | |ИЗ
59 | | Справочник.ДополнительныеОтчетыИОбработки КАК Т
60 | |ГДЕ
61 | | Т.ИмяОбъекта = &ИмяОбъекта
62 | | И Т.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)");
63 | З.УстановитьПараметр("ИмяОбъекта", ИмяОбъекта);
64 | Выборка = З.Выполнить().Выбрать();
65 | Если Выборка.Следующий() Тогда
66 | ОО = Выборка.Ссылка.ПолучитьОбъект();
67 | Иначе
68 | ОО = v8.Справочники.ДополнительныеОтчетыИОбработки.СоздатьЭлемент();
69 | КонецЕсли;
70 |
71 | РезультатРегистрации = v8.ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработку(ОО, ПараметрыРегистрации);
72 | Если НЕ РезультатРегистрации.Успех Тогда
73 | ВызватьИсключение "Не удалось зарегистрировать обработку из файла: " + РезультатРегистрации.ТекстОшибки;
74 | КонецЕсли;
75 | ОО.Публикация = v8.Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется;
76 | ОО.ХранилищеОбработки = ХранилищеФайла;
77 | ОО.Записать();
78 |
79 | //КОНЕЦ СКРИПТА ПО ДОБАВЛЕНИЮ ВНЕШНЕГО ОТЧЕТА/ОБРАБОТКИ
80 |
81 |
82 |
83 |
84 | КонецПроцедуры
85 |
86 |
87 | // ****************************************************************************
88 | // Служебные процедуры
89 | // ****************************************************************************
90 |
91 | Процедура ПриНачалеРаботы()
92 |
93 | errors = Ложь;
94 |
95 | updater = Новый Updater1C;
96 |
97 | // Если в скрипте не планируется использовать
98 | // подключение к базе - просто закомментируйте
99 | // две нижние строки.
100 | connector = updater.CreateConnector();
101 | v8 = updater.BaseConnectNew(connector);
102 |
103 | КонецПроцедуры
104 |
105 | Процедура ПриОкончанииРаботы()
106 |
107 | Если v8 <> Неопределено Тогда
108 | Попытка
109 | ОсвободитьОбъект(v8);
110 | v8 = Неопределено;
111 | Исключение
112 | КонецПопытки;
113 | КонецЕсли;
114 |
115 | Если connector <> Неопределено Тогда
116 | Попытка
117 | ОсвободитьОбъект(connector);
118 | connector = Неопределено;
119 | Исключение
120 | КонецПопытки;
121 | КонецЕсли;
122 |
123 | Если updater <> Неопределено Тогда
124 | Попытка
125 | ОсвободитьОбъект(updater);
126 | updater = Неопределено;
127 | Исключение
128 | КонецПопытки;
129 | КонецЕсли;
130 |
131 | Если errors Тогда
132 | ЗавершитьРаботу(1);
133 | КонецЕсли;
134 |
135 | КонецПроцедуры
136 |
137 | // ****************************************************************************
138 | // Инициализация и запуск скрипта
139 | // ****************************************************************************
140 |
141 | ПриНачалеРаботы();
142 |
143 | Попытка
144 | Главная();
145 | updater.КодПользователяВыполнился();
146 | Исключение
147 | errors = Истина;
148 | Сообщить("" + ОписаниеОшибки() + "");
149 | КонецПопытки;
150 |
151 | ПриОкончанииРаботы();
--------------------------------------------------------------------------------
/БСП/Заведение пользователей.os:
--------------------------------------------------------------------------------
1 | #use "updater1c"
2 |
3 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
4 | Перем updater; // Обновлятор, через который мы получаем информацию о базе а также вызываем различные функции обновлятора.
5 | Перем connector; // Коннектор для подключения к базе.
6 | Перем v8; // Само подключение к базе через коннектор.
7 | Перем ADODB; // Подключение ADODB
8 | Перем Access; // ADODB коннектор (для Access)
9 | Перем ПереопределятьПрава; // Флаг переопределения прав пользователю, если таковой уже есть в целевой базе
10 |
11 | Процедура Главная()
12 | // В скрипте заменяем значения
13 | // *ИмяДомена*
14 | // *Адрес почты*
15 | // на нужные
16 |
17 | /////////////////////////// ЗАПОЛНЯЕМ ЗНАЧЕНИЯ ТУТ //////////////////////////
18 | ИмяПользователя = ""; //Имя вновь создаваемого пользователя
19 | КакУКого = ""; //Скопируем права у существующего пользователя
20 | ПереопределятьПрава = Истина; //Переписывать права пользователю на указанные, если он уже есть в базе(Процедура запустится только если значение - Истина)
21 | АдресДляКопии = ""; //Адрес для скрытой копии письма с учётными данными пользователя
22 | //////////////////////////////////////////////////////////////////////////////
23 |
24 | ДанныеДомена = ПолучитьДанныеДомена(ИмяПользователя);
25 | СтрокаСоединения = v8.СтрокаСоединенияИнформационнойБазы();
26 | Конфигурация = v8.Метаданные.Представление();
27 | СоздатьПользователя(ИмяПользователя, ДанныеДомена, КакУКого, Конфигурация, СБЕ, АдресДляКопии);
28 | КонецПроцедуры
29 |
30 | Процедура СоздатьПользователя(ИмяПользователя, ДанныеДомена, КакУКого, Конфигурация, СБЕ, АдресДляКопии)
31 | СтрокаСоединения = v8.СтрокаСоединенияИнформационнойБазы();
32 | ЭтоЕРП = ЭтоЕРП(СтрокаСоединения);
33 | ЭтоСЭД = ЭтоСЭД(СтрокаСоединения);
34 |
35 | ПользовательИБ = v8.ПользователиИнформационнойБазы.СоздатьПользователя();
36 | ПользовательИБ.Имя = ИмяПользователя;
37 | ПользовательИБ.ПолноеИмя = ИмяПользователя;
38 | Если ЭтоСЭД Тогда
39 | Пароль = СгенерироватьПароль();
40 | ПользовательИБ.Пароль = Пароль;
41 | Иначе
42 | ПользовательИБ.Пароль = "";
43 | КонецЕсли;
44 |
45 | ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь;
46 | Если ДанныеДомена <> Неопределено Тогда
47 | ПользовательИБ.АутентификацияОС = Истина;
48 | ПользовательИБ.ПользовательОС = ДанныеДомена.ПользовательОС;
49 | ПользовательИБ.АутентификацияСтандартная = Ложь;
50 | Иначе
51 | ПользовательИБ.АутентификацияСтандартная = Истина;
52 | Сообщить("Не получены данные из AD. Данные аутентификации и адреса почты не заполнены");
53 | errors = Истина;
54 | КонецЕсли;
55 |
56 | Если v8.ПользователиИнформационнойБазы.НайтиПоИмени(ПользовательИБ.Имя) = Неопределено Тогда
57 | ПользовательИБ.Записать();
58 | Сообщить("Новый пользователь "+ИмяПользователя+" создан.");
59 | Иначе
60 | Если ПереопределятьПрава <> Истина Тогда
61 | Сообщить("!!!");
62 | Сообщить("Пользователь с таким именем уже есть в базе!");
63 | Сообщить("!!!");
64 | errors = Истина;
65 | Возврат;
66 | Иначе
67 | ПользовательИБ = v8.ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
68 | КонецЕсли;
69 | КонецЕсли;
70 |
71 | // создаём пользователя справочника или пытаемся переопределить его права, если такой уже есть в базе
72 | Если ПереопределятьПрава = Истина Тогда
73 | Если ПереопределитьПрава(v8.Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователя).Ссылка, КакУКого, Конфигурация) Тогда
74 | Сообщить("Права пользователя "+ИмяПользователя+" переопределены. Назначены права как у "+КакУКого);
75 | Возврат;
76 | Иначе
77 | ФамилияИнициалы = v8.ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ИмяПользователя);
78 | НовоеИмя = СтрЗаменить(ФамилияИнициалы, ".", "");
79 | НовоеИмя = СтрЗаменить(НовоеИмя, " ", "");
80 | Если ПереопределитьПрава(v8.Справочники.Пользователи.НайтиПоНаименованию(НовоеИмя).Ссылка, КакУКого, Конфигурация) Тогда
81 | Сообщить("Права пользователя "+НовоеИмя+" переопределены. Назначены права как у "+КакУКого);
82 | Возврат;
83 | КонецЕсли;
84 | КонецЕсли;
85 | КонецЕсли;
86 | Пользователь = v8.Справочники.Пользователи.СоздатьЭлемент();
87 | Пользователь.Наименование = ПользовательИБ.ПолноеИмя;
88 | Если ЭтоСЭД Тогда
89 | Пользователь.ФизЛицо = ПолучитьФизЛицо(ИмяПользователя, ЭтоСЭД);
90 | Иначе
91 | Пользователь.ФизическоеЛицо = ПолучитьФизЛицо(ИмяПользователя, ЭтоСЭД);
92 | КонецЕсли;
93 |
94 | ОписаниеПользователяИБ = v8.NewObject("Структура");
95 | ОписаниеПользователяИБ.Вставить("Действие", "Записать");
96 | ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор);
97 | Пользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ);
98 | Попытка
99 | Пользователь.Записать();
100 | Исключение
101 | Сообщить("!!!");
102 | Сообщить("Попытка записи элемента справочника ""Пользователи"" была безуспешной. Процедура записи пользователя прямо или косвенно вызывает не заимствованую процедуру или функцию из расширения, которую невозможно инициализировать из внешнего соединения.");
103 | Сообщить(ОписаниеОшибки());
104 | Сообщить("Варианты исправления:"+Символы.ПС+" - Инструкция препроцессора ""#Если Не ВнешнееСоединение"" перед вызовом этой процедуры/функции."+Символы.ПС+" - Флаг ""Внешнее соединение"" в свойствах модуля.");
105 | ПользовательИБ.Удалить();
106 | Сообщить("Пользователь ИБ удалён. Процедура создания пользователя прервана.");
107 | Сообщить("!!!");
108 | errors = Истина;
109 | Возврат;
110 | КонецПопытки;
111 |
112 | //Запишем e-mail
113 | Если ДанныеДомена <> Неопределено Тогда
114 | Если ЭтоЕРП или ЭтоСЭД Тогда
115 | Попытка
116 | ВидКонтактнойИнформации = v8.Справочники.ВидыКонтактнойИнформации.EmailПользователя;
117 | ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип;
118 | ОбъектXDTOКонтактнаяИнформация = v8.УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению(ДанныеДомена.АдресПочты, ТипКонтактнойИнформации);
119 | ЗначенияПолей = v8.УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектXDTOКонтактнаяИнформация);
120 | v8.УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(Пользователь, ЗначенияПолей, ВидКонтактнойИнформации, ТипКонтактнойИнформации);
121 | Пользователь.Записать();
122 | Сообщить("Записан e-mail пользователя");
123 | Исключение
124 | Сообщить("!!!");
125 | Сообщить("Запись e-mail пользователя была неудачной. Заполните поле вручную ("+ДанныеДомена.АдресПочты+").");
126 | Сообщить("!!!");
127 | errors = Истина;
128 | КонецПопытки;
129 | КонецЕсли;
130 | КонецЕсли;
131 |
132 | //Назначаем права пользователю
133 | ПользовательИБ = v8.ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь.Наименование);
134 | СпрПользователь = Пользователь.Ссылка;
135 | МассивПрав = Неопределено;
136 | Если КакУКого <> "" Тогда
137 | МассивПрав = ПолучитьПраваПользователя(КакУКого, Конфигурация);
138 | КонецЕсли;
139 | Если МассивПрав <> Неопределено Тогда
140 | НазначитьПраваПользователю(ПользовательИБ, СпрПользователь, МассивПрав, Конфигурация);
141 | КонецЕсли;
142 | ПользовательИБ.Записать();
143 |
144 | КонецПроцедуры
145 |
146 | Функция ПереопределитьПрава(Пользователь, КакУКого, Конфигурация)
147 | Попытка
148 | ПользовательИБ = v8.ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);
149 | НовыеПрава = ПолучитьПраваПользователя(КакУКого, Конфигурация);
150 | Если НовыеПрава <> Неопределено Тогда
151 | ПользовательИБ.Роли.Очистить();
152 | НазначитьПраваПользователю(ПользовательИБ, Пользователь, НовыеПрава, Конфигурация);
153 | Возврат Истина
154 | Иначе
155 | Возврат Ложь
156 | КонецЕсли;
157 | Исключение
158 | Возврат Ложь
159 | КонецПопытки;
160 | КонецФункции
161 |
162 | Процедура НазначитьПраваПользователю(ПользовательИБ, СпрПользователь, МассивПрав, Конфигурация)
163 | Если СтрНайти(Конфигурация, "Документооборот") <> 0 Тогда
164 | Для Индекс = 0 По МассивПрав.МассивПрав.Количество() - 1 Цикл
165 | РабочаяГруппа = МассивПрав.МассивПрав[Индекс].ПолучитьОбъект();
166 | НовыйПользователь = РабочаяГруппа.Состав.Добавить();
167 | НовыйПользователь.Пользователь = СпрПользователь;
168 | РабочаяГруппа.Записать();
169 | Сообщить("Пользователь включен в рабочую группу ("+РабочаяГруппа.Наименование+")");
170 | ЗаполнитьСведения(СпрПользователь, МассивПрав.Сведения);
171 | КонецЦикла;
172 | ИначеЕсли СтрНайти(Конфигурация, "Управление предприятием") <> 0 Тогда
173 | Для Индекс = 0 По МассивПрав.МассивПрав.Количество() - 1 Цикл
174 | ГруппаДоступа = МассивПрав.МассивПрав[Индекс].ПолучитьОбъект();
175 | НовыйПользователь = ГруппаДоступа.Пользователи.Добавить();
176 | НовыйПользователь.Пользователь = СпрПользователь;
177 | ГруппаДоступа.Записать();
178 | Сообщить("Пользователь включен в группу доступа ("+ГруппаДоступа.Наименование+")");
179 | ПользовательОбъект = СпрПользователь.ПолучитьОбъект();
180 | ПользовательОбъект.Подразделение = МассивПрав.Сведения.Подразделение;
181 | ПользовательОбъект.Записать();
182 | КонецЦикла;
183 | ИначеЕсли СтрНайти(Конфигурация, "Зарплата и управление персоналом") <> 0 или СтрНайти(Конфигурация, "Бухгалтерия предприятия") <> 0 или СтрНайти(Конфигурация, "Бухгалтерия сельскохозяйственного предприятия") <> 0 или СтрНайти(Конфигурация, "Учет застройщика") <> 0 Тогда
184 | Для Индекс = 0 По МассивПрав.Количество() - 1 Цикл
185 | ПользовательИБ.Роли.Добавить(v8.Метаданные.НайтиПоПолномуИмени(МассивПрав[Индекс]));
186 | ПользовательИБ.Записать();
187 | Сообщить("Пользователю добавлена роль ("+МассивПрав[Индекс]+")");
188 | КонецЦикла;
189 | КонецЕсли;
190 | //Для ЕРП и СЭД всё равно нужно добавлять пользователю роли
191 | Если СтрНайти(Конфигурация, "Управление предприятием") <> 0 или СтрНайти(Конфигурация, "Документооборот") <> 0 Тогда
192 | Для Индекс = 0 По МассивПрав.Роли.Количество() - 1 Цикл
193 | ПользовательИБ.Роли.Добавить(v8.Метаданные.НайтиПоПолномуИмени(МассивПрав.Роли[Индекс]));
194 | ПользовательИБ.Записать();
195 | КонецЦикла;
196 | Сообщить("Скопированы необходимые роли.");
197 | КонецЕсли;
198 | КонецПроцедуры
199 |
200 | Функция ПолучитьПраваПользователя(ИмяПользователя, Конфигурация)
201 | ПользовательИБ = v8.ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя);
202 | СпрПользователь = v8.Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователя);
203 |
204 | Если ПользовательИБ = Неопределено Тогда
205 | ФамилияИнициалы = v8.ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ИмяПользователя);
206 | НовоеИмя = СтрЗаменить(ФамилияИнициалы, ".", "");
207 | НовоеИмя = СтрЗаменить(НовоеИмя, " ", "");
208 | ПользовательИБ = v8.ПользователиИнформационнойБазы.НайтиПоИмени(НовоеИмя);
209 | КонецЕсли;
210 |
211 | Если СпрПользователь = v8.Справочники.Пользователи.ПустаяСсылка() Тогда
212 | ФамилияИнициалы = v8.ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ИмяПользователя);
213 | НовоеИмя = СтрЗаменить(ФамилияИнициалы, ".", "");
214 | НовоеИмя = СтрЗаменить(НовоеИмя, " ", "");
215 | СпрПользователь = v8.Справочники.Пользователи.НайтиПоНаименованию(НовоеИмя);
216 | КонецЕсли;
217 |
218 | Если ПользовательИБ = Неопределено Тогда
219 | Сообщить("Пользователь "+ИмяПользователя+" не зарегистрирован в базе.");
220 | Возврат Неопределено
221 | КонецЕсли;
222 | Запрос = v8.NewObject("Запрос");
223 | МассивПрав = Новый Массив;
224 | Если СтрНайти(Конфигурация, "Документооборот") <> 0 Тогда
225 | Запрос.Текст = "
226 | |ВЫБРАТЬ
227 | |РабочиеГруппыСостав.Ссылка КАК Элемент
228 | |ИЗ
229 | |Справочник.РабочиеГруппы.Состав КАК РабочиеГруппыСостав
230 | |ГДЕ
231 | |РабочиеГруппыСостав.Пользователь = &Пользователь";
232 | Запрос.УстановитьПараметр("Пользователь", СпрПользователь);
233 | ИначеЕсли СтрНайти(Конфигурация, "Управление предприятием") <> 0 Тогда
234 | Запрос.Текст = "
235 | |ВЫБРАТЬ
236 | |ГруппыДоступаПользователи.Ссылка КАК Элемент
237 | |ИЗ
238 | |Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
239 | |ГДЕ
240 | |ГруппыДоступаПользователи.Пользователь = &Пользователь";
241 | Запрос.УстановитьПараметр("Пользователь", СпрПользователь);
242 | ИначеЕсли СтрНайти(Конфигурация, "Зарплата и управление персоналом") <> 0 или СтрНайти(Конфигурация, "Бухгалтерия предприятия") <> 0 Или СтрНайти(Конфигурация, "Бухгалтерия сельскохозяйственного предприятия") <> 0 или СтрНайти(Конфигурация, "Учет застройщика") <> 0 Тогда
243 | Запрос.Текст = "
244 | |ВЫБРАТЬ
245 | |ПрофилиГруппДоступаРоли.Роль.ПолноеИмя КАК Элемент
246 | |ИЗ
247 | |Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
248 | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
249 | |ПО (ГруппыДоступаПользователи.Ссылка.Профиль = ПрофилиГруппДоступаРоли.Ссылка)
250 | |ГДЕ
251 | |ГруппыДоступаПользователи.Пользователь = &Пользователь";
252 | Запрос.УстановитьПараметр("Пользователь", СпрПользователь);
253 | Иначе
254 | Сообщить("Не удалось получить набор прав у "+ИмяПользователя+" в конфигурации "+Конфигурация+", Обратитесь к разработчику.");
255 | КонецЕсли;
256 | Выборка = Запрос.Выполнить().Выбрать();
257 | Пока Выборка.Следующий() Цикл
258 | МассивПрав.Добавить(Выборка.Элемент);
259 | КонецЦикла;
260 |
261 | Если СтрНайти(Конфигурация, "Документооборот") <> 0 или СтрНайти(Конфигурация, "Управление предприятием") <> 0 Тогда
262 | Роли = Новый Массив;
263 | Для каждого Роль из ПользовательИБ.Роли Цикл
264 | Роли.Добавить(Роль.ПолноеИмя);
265 | КонецЦикла;
266 | СтруктураПользователю = Новый Структура;
267 | СтруктураПользователю.Вставить("МассивПрав", МассивПрав);
268 | СтруктураПользователю.Вставить("Роли", Роли);
269 | //Для СЭДа заполним имя в переписке, должность, руководителя и т.д.
270 | Если СтрНайти(Конфигурация, "Документооборот") <> 0 Тогда
271 | Сведения = ПолучитьСведенияПользователя(СпрПользователь);
272 | СтруктураПользователю.Вставить("Сведения", Сведения);
273 | //ЕРП - Добавим подразделение.
274 | ИначеЕсли СтрНайти(Конфигурация, "Управление предприятием") <> 0 Тогда
275 | Сведения = Новый Структура;
276 | Сведения.Вставить("Подразделение", СпрПользователь.Подразделение);
277 | СтруктураПользователю.Вставить("Сведения", Сведения);
278 | КонецЕсли;
279 | Возврат СтруктураПользователю
280 | Иначе
281 | Возврат МассивПрав
282 | КонецЕсли;
283 | КонецФункции
284 |
285 | Функция ПолучитьСведенияПользователя(СпрПользователь)
286 | Сведения = Новый Структура;
287 | Сведения.Вставить("Подразделение", v8.Справочники.СтруктураПредприятия.ПустаяСсылка());
288 | Сведения.Вставить("Должность", v8.Справочники.Должности.ПустаяСсылка());
289 | Сведения.Вставить("ГрафикРаботы", v8.Справочники.ГрафикиРаботы.ПустаяСсылка());
290 | Сведения.Вставить("Ранг", 0);
291 |
292 | Запрос = v8.NewObject("Запрос");
293 | Запрос.Текст = "
294 | |ВЫБРАТЬ
295 | | СведенияОПользователяхДокументооборот.Подразделение,
296 | | СведенияОПользователяхДокументооборот.Должность,
297 | | СведенияОПользователяхДокументооборот.ГрафикРаботы,
298 | | СведенияОПользователяхДокументооборот.Ранг
299 | |ИЗ
300 | | РегистрСведений.СведенияОПользователяхДокументооборот КАК СведенияОПользователяхДокументооборот
301 | |ГДЕ
302 | | СведенияОПользователяхДокументооборот.Пользователь = &Пользователь";
303 | Запрос.УстановитьПараметр("Пользователь", СпрПользователь);
304 | Выборка = Запрос.Выполнить().Выбрать();
305 |
306 | Попытка
307 | Пока Выборка.Следующий() Цикл
308 | Сведения.Подразделение = Выборка.Подразделение;
309 | Сведения.Должность = Выборка.Должность;
310 | Сведения.ГрафикРаботы = Выборка.ГрафикРаботы;
311 | Сведения.Ранг = Выборка.Ранг;
312 | КонецЦикла;
313 | Исключение
314 | Сообщить("!!!");
315 | Сообщить("Не удалось получить сведения пользователя");
316 | Сообщить("!!!");
317 | errors = Истина;
318 | КонецПопытки;
319 | Возврат Сведения
320 | КонецФункции
321 |
322 | Функция ЗаполнитьСведения(СпрПользователь, Сведения)
323 | Набор = v8.РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьНаборЗаписей();
324 | Набор.Отбор.Пользователь.Установить(СпрПользователь.Ссылка);
325 |
326 | НоваяЗапись = Набор.Добавить();
327 | НоваяЗапись.Пользователь = СпрПользователь.Ссылка;
328 | НоваяЗапись.Подразделение = Сведения.Подразделение;
329 | НоваяЗапись.Должность = Сведения.Должность;
330 | НоваяЗапись.ГрафикРаботы = Сведения.ГрафикРаботы;
331 | НоваяЗапись.Ранг = Сведения.Ранг;
332 | Набор.Записать();
333 |
334 | ФамилияИнициалы = v8.ФизическиеЛицаКлиентСервер.ФамилияИнициалы(СпрПользователь.Наименование);
335 | ПользовательОбъект = СпрПользователь.ПолучитьОбъект();
336 | ПользовательОбъект.ПредставлениеВДокументах = ФамилияИнициалы;
337 | ПользовательОбъект.ПредставлениеВПереписке = ФамилияИнициалы;
338 | ПользовательОбъект.ПредставлениеВПерепискеСРангом = ФамилияИнициалы;
339 | ПользовательОбъект.Записать();
340 | КонецФункции
341 |
342 | Функция ПолучитьДанныеДомена(ИмяПользователя)
343 | ADODB.ConnectionString = "Provider=""ADsDSOObject""";
344 | ADODB.Open();
345 | Сообщить("Соединение открыто");
346 | Querry = "
347 | |SELECT AdsPath
348 | |FROM 'LDAP://OU=*ИмяДомена*, DC=*ИмяДомена*, DC=local'
349 | |WHERE
350 | | objectCategory = 'user'
351 | | and objectClass = 'person'
352 | | and DisplayName = '" + СокрЛП(ИмяПользователя) + "'
353 | |ORDER BY sn
354 | |";
355 | Result = ADODB.Execute(Querry);
356 | Сообщить("Запрос выполнен");
357 | Если НЕ Result.EOF Тогда
358 | ДанныеДомена = Новый Структура;
359 | Path = Result.Fields("AdsPath").Value;
360 | Object = GetCOMObject(Path);
361 | ДанныеДомена.Вставить("АдресПочты", Object.Mail);
362 | Сообщить(Object.Mail);
363 | ДанныеДомена.Вставить("ПользовательОС", "\\*ИмяДомена*\"+Object.sAMAccountName);
364 | Сообщить(Object.sAMAccountName);
365 |
366 | Возврат ДанныеДомена
367 | Иначе
368 | ADODB.Close();
369 | errors = Истина;
370 | Сообщить("Ошибка выполнения запроса к AD");
371 | Возврат "Ошибка выполнения запроса к AD"
372 | КонецЕсли;
373 | КонецФункции
374 |
375 | Функция ЭтоЕРП(СтрокаСоединения)
376 | ИмяБазы = НСтр(СтрокаСоединения, "Ref");
377 | Сервер = НСтр(СтрокаСоединения, "Srvr");
378 | Если ВРег(ИмяБазы) = "GKERP" И Сервер = "e1c5" Тогда
379 | Возврат Истина
380 | Иначе
381 | Возврат Ложь
382 | КонецЕсли;
383 | КонецФункции
384 |
385 | Функция ЭтоСЭД(СтрокаСоединения)
386 | ИмяБазы = НСтр(СтрокаСоединения, "Ref");
387 | Сервер = НСтр(СтрокаСоединения, "Srvr");
388 | Если ВРег(ИмяБазы) = "GKSED" И Сервер = "e1c5" Тогда
389 | Возврат Истина
390 | Иначе
391 | Возврат Ложь
392 | КонецЕсли;
393 | КонецФункции
394 |
395 | Функция СгенерироватьПароль()
396 | ГСЧ = Новый ГенераторСлучайныхЧисел();
397 | ИспользуемыеСимволы = "243456789AQWERTYUPASDFGHJKLZXCVBNMqwertyupasdfghjklzxcvbnm";
398 | КоличествоСимволов = СтрДлина(ИспользуемыеСимволы);
399 | Пароль = "";
400 | Пока СтрДлина(Пароль) < 8 Цикл
401 | СлучайноеЧисло = ГСЧ.СлучайноеЧисло(1, КоличествоСимволов);
402 | НекийСимвол = Сред(ИспользуемыеСимволы, СлучайноеЧисло, 1);
403 | Пароль = Пароль + НекийСимвол;
404 | КонецЦикла;
405 | Возврат Пароль;
406 | КонецФункции
407 |
408 | Функция ПолучитьФизЛицо(ИмяПользователя, ЭтоСЭД)
409 | Запрос = v8.NewObject("Запрос");
410 | Запрос.Текст = "
411 | |ВЫБРАТЬ
412 | | ФизическиеЛица.Ссылка КАК ФизЛицо
413 | |ИЗ
414 | | Справочник.ФизическиеЛица КАК ФизическиеЛица
415 | |ГДЕ
416 | | ФизическиеЛица.Наименование ПОДОБНО &Наименование";
417 | Запрос.УстановитьПараметр("Наименование", ВариацииЕЁ(ИмяПользователя));
418 | Результат = Запрос.Выполнить();
419 | Если Результат.Пустой() Тогда
420 | ФизЛицо = v8.Справочники.ФизическиеЛица.СоздатьЭлемент();
421 | ФизЛицо.Наименование = ИмяПользователя;
422 | Если ЭтоСЭД = Ложь Тогда
423 | ФизЛицо.ФИО = ИмяПользователя;
424 | КонецЕсли;
425 | ФизЛицо.Записать();
426 | Сообщить("Создан новый элемент справочника Физические лица "+ИмяПользователя+".");
427 | Возврат ФизЛицо.Ссылка
428 | Иначе;
429 | Выборка = Результат.Выбрать();
430 | Если Выборка.Следующий() Тогда
431 | Возврат Выборка.ФизЛицо
432 | КонецЕсли;
433 | КонецЕсли;
434 | КонецФункции
435 |
436 | Функция ПолучитьПочтуСЭД()
437 | Запрос = v8.NewObject("Запрос");
438 | Запрос.Текст = "
439 | |ВЫБРАТЬ
440 | | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка
441 | |ИЗ
442 | | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
443 | |ГДЕ
444 | | УчетныеЗаписиЭлектроннойПочты.Наименование = &АдресПочты";
445 | Запрос.УстановитьПараметр("АдресПочты", "*Адрес почты*");
446 | Результат = Запрос.Выполнить();
447 | Если Результат.Пустой() Тогда
448 | Возврат Неопределено
449 | Иначе;
450 | Выборка = Результат.Выбрать();
451 | Если Выборка.Следующий() Тогда
452 | Возврат Выборка.Ссылка
453 | КонецЕсли;
454 | КонецЕсли;
455 | КонецФункции
456 |
457 | Функция ВариацииЕЁ(ИмяПользователя)
458 | Параметр = СтрЗаменить(ИмяПользователя, "е", "ё");
459 | Параметр = СтрЗаменить(Параметр, "ё", "[её]");
460 | Возврат Параметр;
461 | КонецФункции
462 |
463 |
464 | //Служебные процедуры
465 | Процедура ПриНачалеРаботы()
466 | errors = Ложь;
467 | updater = Новый Updater1C;
468 | connector = Новый COMОбъект("V" + updater.PlatformRelease + ".COMConnector");
469 | v8 = updater.BaseConnect(connector);
470 | //ADODB
471 | ADODB = Новый COMОбъект("ADODB.Connection");
472 | ПереопределятьПрава = Неопределено;
473 | КонецПроцедуры
474 |
475 | Процедура ПриОкончанииРаботы()
476 | Если v8 <> Неопределено Тогда
477 | Попытка
478 | ОсвободитьОбъект(v8);
479 | v8 = Неопределено;
480 | Исключение
481 | КонецПопытки;
482 | КонецЕсли;
483 |
484 | Если connector <> Неопределено Тогда
485 | Попытка
486 | ОсвободитьОбъект(connector);
487 | connector = Неопределено;
488 | Исключение
489 | КонецПопытки;
490 | КонецЕсли;
491 |
492 | Если updater <> Неопределено Тогда
493 | Попытка
494 | ОсвободитьОбъект(updater);
495 | updater = Неопределено;
496 | Исключение
497 | КонецПопытки;
498 | КонецЕсли;
499 |
500 | Если ADODB <> Неопределено Тогда
501 | Попытка
502 | ОсвободитьОбъект(ADODB);
503 | ADODB = Неопределено;
504 | Исключение
505 | КонецПопытки;
506 | КонецЕсли;
507 |
508 | Если Access <> Неопределено Тогда
509 | Попытка
510 | ОсвободитьОбъект(Access);
511 | Access = Неопределено;
512 | Исключение
513 | КонецПопытки;
514 | КонецЕсли;
515 |
516 | ВыполнитьСборкуМусора();
517 |
518 | Приостановить(1000);
519 | Если errors Тогда
520 | ЗавершитьРаботу(1);
521 | КонецЕсли;
522 |
523 | КонецПроцедуры
524 |
525 | // ****************************************************************************
526 | // Инициализация и запуск скрипта
527 | // ****************************************************************************
528 |
529 | ПриНачалеРаботы();
530 |
531 | Попытка
532 | Главная();
533 | Исключение
534 | errors = Истина;
535 | Сообщить("" + ОписаниеОшибки() + "");
536 | КонецПопытки;
537 |
538 | ПриОкончанииРаботы();
--------------------------------------------------------------------------------
/БСП/ЗагрузкаОбновлениеДопОтчетыИОбработки.os:
--------------------------------------------------------------------------------
1 | #use "updater1c"
2 |
3 | // Благодарности за первичный код:
4 | // Author: Plague Fox
5 | // Site: PlugFox.ru
6 | // Infostart: https://infostart.ru/profile/PlugFox/
7 | // Telegram: @PlugFox
8 | // Email: PlugFox@gmail.com
9 | // Github: http://github.com/PlugFox
10 |
11 |
12 | // ****************************************************************************
13 | // Переменные модуля
14 | // ****************************************************************************
15 |
16 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
17 | Перем updater; // Обновлятор, через который мы получаем информацию о базе,
18 | // а также вызываем различные функции обновлятора.
19 | Перем connector; // Коннектор для подключения к базе.
20 | Перем v8; // Само подключение к базе через коннектор.
21 |
22 | Перем ПутьПоиска;
23 | Перем ПутьПеремещения;
24 | Перем Перемещать;
25 | Перем УчитыватьВерсионность;
26 |
27 |
28 | // ****************************************************************************
29 | // Ваш код для выполнения обновлятором
30 | // ****************************************************************************
31 |
32 | Процедура Главная()
33 |
34 | //СписокПользователей = v8.ПользователиИнформационнойБазы.ПолучитьПользователей();
35 | //Для Индекс = 0 По СписокПользователей.Количество() - 1 Цикл
36 | // Сообщить(СписокПользователей.Получить(Индекс).Имя);
37 | //КонецЦикла;
38 |
39 | Если Не v8.ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда
40 | Сообщить("Подсистема дополнительных отчетов и обработок - не используется в данной конфигурации");
41 | КонецЕсли;
42 |
43 | МассивОбработок = ПолучитьМассивПодключаемыхОбработок();
44 |
45 | Если Не МассивОбработок.Количество() Тогда Возврат КонецЕсли;
46 |
47 | Для Каждого Файл Из МассивОбработок Цикл
48 | Попытка
49 | Если НЕ Файл.Существует() Или Не Файл.ЭтоФайл() Тогда Продолжить КонецЕсли;
50 |
51 | Сообщить(Файл.ПолноеИмя);
52 |
53 | ПодключитьОбработку(Файл);
54 | ПереместитьОбработку(Файл);
55 | Исключение
56 | РегистрацияОшибки(ОписаниеОшибки(), "ОшибкаПриДобавлении" );
57 | КонецПопытки;
58 | КонецЦикла;
59 |
60 | КонецПроцедуры
61 |
62 | Процедура РегистрацияОшибки(ОписаниеОшибки, ИмяСобытия)
63 |
64 | ОписаниеОшибки = СтрШаблон("Ошибка обработки ""%1"".
65 | |Описание ошибки: %2", ИмяСобытия, ОписаниеОшибки);
66 |
67 | Сообщить(ОписаниеОшибки);
68 |
69 | КонецПроцедуры // РегистрацияОшибки()
70 |
71 | Функция ПолучитьМассивПодключаемыхОбработок()
72 | Возврат НайтиФайлы(ПутьПоиска, "*.epf", Ложь);
73 | КонецФункции // ПолучитьМассивПодключаемыхОбработок()
74 |
75 | Процедура ПереместитьОбработку(Файл)
76 | Если Не Перемещать Тогда Возврат КонецЕсли;
77 | ПереместитьФайл(Файл.ПолноеИмя, СтрШаблон("%1/%2", ПутьПеремещения, Файл.Имя));
78 | КонецПроцедуры // ПереместитьОбработку()
79 |
80 | Процедура ПодключитьОбработку(Файл)
81 | Перем ПараметрыРегистрации;
82 |
83 | _обработка = v8.ВнешниеОбработки.Создать(Файл.ПолноеИмя);
84 |
85 | // Получим параметры регистрации
86 | Попытка
87 | ПараметрыРегистрации = _обработка.СведенияОВнешнейОбработке();
88 | Исключение
89 | Сообщить("Не полученны данные СведенияОВнешнейОбработке");
90 | КонецПопытки;
91 |
92 | // Найдем в базе существующую версию этой обработки
93 | _ссылка = v8.Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ПараметрыРегистрации.Наименование);
94 | //_ссылка = v8.Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", _обработка.Метаданные().Имя);
95 | Если _ссылка = Неопределено Или _ссылка.Пустая() Тогда
96 | _объект = v8.Справочники.ДополнительныеОтчетыИОбработки.СоздатьЭлемент();
97 | Иначе
98 | // Сравним версии обработок
99 | Если УчитыватьВерсионность Тогда
100 | ВерсияПодключаемойОбработки = v8.СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ПараметрыРегистрации.Версия);
101 | ВерсияТекущейОбработки = v8.СтроковыеФункцииКлиентСервер.СтрокаВЧисло(_ссылка.Версия);
102 |
103 | Если ТипЗнч(ВерсияПодключаемойОбработки) = Тип("Число")
104 | И ТипЗнч(ВерсияТекущейОбработки) = Тип("Число")
105 | И ВерсияПодключаемойОбработки <= ВерсияТекущейОбработки Тогда
106 | Возврат; // Если версия обработки не является более свежей
107 | КонецЕсли;
108 | КонецЕсли;
109 | _объект = _ссылка.ПолучитьОбъект();
110 | КонецЕсли;
111 |
112 | // Добавим в базу подключаемую обработку
113 | v8.ЗаполнитьЗначенияСвойств(_объект, ПараметрыРегистрации);
114 | //_объект.ХранилищеОбработки = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Файл.ПолноеИмя));
115 | двДанные = v8.NewObject("ДвоичныеДанные", Файл.ПолноеИмя);
116 | _объект.ХранилищеОбработки = v8.NewObject("ХранилищеЗначения",двДанные);
117 |
118 | _объект.Вид = v8.ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок." + ПараметрыРегистрации.Вид);
119 | _объект.Публикация = v8.ПредопределенноеЗначение("Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется");
120 | _объект.ИмяОбъекта = _обработка.Метаданные().Имя;
121 | _объект.ИмяФайла = Файл.Имя;
122 | Попытка
123 | _объект.Ответственный = v8.ПараметрыСеанса.ТекущийПользователь;
124 | Исключение
125 | КонецПопытки;
126 | _объект.ИспользоватьДляФормыОбъекта = Истина;
127 | _объект.ИспользоватьДляФормыСписка = Истина;
128 | _объект.РежимСовместимостиРазрешений = v8.ПредопределенноеЗначение("Перечисление.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3");
129 |
130 | времПеременная = Неопределено;
131 |
132 | // Заполним ТЧ
133 |
134 | Если ПараметрыРегистрации.Свойство("Команды", времПеременная) Тогда
135 | _объект.Команды.Очистить();
136 | Для Каждого Команда Из ПараметрыРегистрации.Команды Цикл
137 | нКоманда = _объект.Команды.Добавить();
138 | v8.ЗаполнитьЗначенияСвойств(нКоманда, Команда);
139 | нКоманда.ВариантЗапуска = v8.ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок." + Команда.Использование);
140 | КонецЦикла;
141 | КонецЕсли;
142 |
143 | Если ПараметрыРегистрации.Свойство("Назначение", времПеременная) Тогда
144 |
145 | _объект.Назначение.Очистить();
146 | Для Каждого Назначение Из ПараметрыРегистрации.Назначение Цикл
147 | нНазначение = _объект.Назначение.Добавить();
148 | нНазначение.ОбъектНазначения = v8.Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоРеквизиту("ПолноеИмя", Назначение);
149 | КонецЦикла;
150 | КонецЕсли;
151 |
152 | // добавим одну подсистему "Администрирование"
153 | //Если _объект.Разделы.Количество() = 0 Тогда
154 | // нРазделы = _объект.Разделы.Добавить();
155 | // ДопПодситема = v8.Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоРеквизиту("ПолноеИмя", "Подсистема.Администрирование");
156 | // Если ДопПодситема = Неопределено Или ДопПодситема.Пустая() Тогда
157 | // нРазделы.ОбъектНазначения = ДопПодситема;
158 | // КонецЕсли
159 | //КонецЕсли;
160 |
161 |
162 | // Запишем и подключим
163 | _объект.Записать();
164 | Имя = v8.ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(_объект.Ссылка);
165 | Если Имя = Неопределено Тогда
166 | Сообщить("Ошибка добавления обработки " + Файл.ПолноеИмя);
167 | Иначе
168 | Сообщить("Успешно добавления обработки " + Файл.ПолноеИмя);
169 | КонецЕсли;
170 |
171 | КонецПроцедуры // ПодключитьОбработку()
172 |
173 |
174 | // ****************************************************************************
175 | // Служебные процедуры
176 | // ****************************************************************************
177 |
178 | Процедура ПриНачалеРаботы()
179 |
180 | errors = Ложь;
181 |
182 | updater = Новый Updater1C;
183 |
184 | // Если в скрипте не планируется использовать
185 | // подключение к базе - просто закомментируйте
186 | // две нижние строки.
187 | connector = updater.CreateConnector();
188 | Попытка
189 | v8 = updater.BaseConnectNew(connector);
190 | Исключение
191 | Текст = ОписаниеОшибки();
192 | Сообщить("Ошибка подключения" + Текст);
193 | КонецПопытки;
194 |
195 |
196 | КонецПроцедуры
197 |
198 | Процедура ПриОкончанииРаботы()
199 |
200 | Если v8 <> Неопределено Тогда
201 | Попытка
202 | ОсвободитьОбъект(v8);
203 | v8 = Неопределено;
204 | Исключение
205 | КонецПопытки;
206 | КонецЕсли;
207 |
208 | Если connector <> Неопределено Тогда
209 | Попытка
210 | ОсвободитьОбъект(connector);
211 | connector = Неопределено;
212 | Исключение
213 | КонецПопытки;
214 | КонецЕсли;
215 |
216 | Если updater <> Неопределено Тогда
217 | Попытка
218 | ОсвободитьОбъект(updater);
219 | updater = Неопределено;
220 | Исключение
221 | КонецПопытки;
222 | КонецЕсли;
223 |
224 | Если errors Тогда
225 | ЗавершитьРаботу(1);
226 | КонецЕсли;
227 |
228 | КонецПроцедуры
229 |
230 | // ****************************************************************************
231 | // Инициализация и запуск скрипта
232 | // ****************************************************************************
233 |
234 | ПутьПоиска = "C:\external-data-processors\";
235 | ПутьПеремещения = "C:\external-data-processors\.tmp";
236 | Перемещать = Ложь;
237 | УчитыватьВерсионность = Ложь;
238 |
239 |
240 | ПриНачалеРаботы();
241 |
242 | Попытка
243 | Главная();
244 | updater.КодПользователяВыполнился();
245 | Исключение
246 | errors = Истина;
247 | Сообщить("" + ОписаниеОшибки() + "");
248 | КонецПопытки;
249 |
250 | ПриОкончанииРаботы();
--------------------------------------------------------------------------------
/БСП/Переименования пользователя.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milkin-vl/ONESCRIPT-user-scripts-for-Updater-1C/ebc8d27fb683fabc1f57fb5f1bc28543ce6d6ac4/БСП/Переименования пользователя.txt
--------------------------------------------------------------------------------
/БСП/Создание пользователей для БП3 и ЗУП3.os:
--------------------------------------------------------------------------------
1 | #use "updater1c"
2 |
3 | // ****************************************************************************
4 | // Переменные модуля
5 | // ****************************************************************************
6 |
7 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
8 | Перем updater; // Обновлятор, через который мы получаем информацию о базе,
9 | // а также вызываем различные функции обновлятора.
10 | Перем connector; // Коннектор для подключения к базе.
11 | Перем v8; // Само подключение к базе через коннектор.
12 |
13 | // ****************************************************************************
14 | // Ваш код для выполнения обновлятором
15 | // ****************************************************************************
16 |
17 | Процедура Главная()
18 |
19 | // !! см. подробнее здесь: https://geniy1s.ru/programmnoe-dobavlenie-polzovatelej-v-bazy-na-bsp/
20 |
21 | //=========== НАЧАЛО КОДА ДОБАВЛЕНИЯ ПОЛЬЗОВАТЕЛЕЙ ==========
22 |
23 | Т = v8.NewObject("ТаблицаЗначений");
24 | Т.Колонки.Добавить("ПолноеИмя");
25 | Т.Колонки.Добавить("Имя");
26 | Т.Колонки.Добавить("Пароль");
27 | Т.Колонки.Добавить("ВходВПрограммуРазрешен");
28 | Т.Колонки.Добавить("АутентификацияСтандартная");
29 | Т.Колонки.Добавить("АутентификацияОС");
30 | Т.Колонки.Добавить("ПользовательОС");
31 | Т.Колонки.Добавить("ЗапрещеноИзменятьПароль");
32 | Т.Колонки.Добавить("ПоказыватьВСпискеВыбора");
33 | Т.Колонки.Добавить("Профили");
34 |
35 | //********** НАЧАЛО: ЗДЕСЬ ОПИСЫВАЕМ ПОЛЬЗОВАТЕЛЕЙ ***************
36 |
37 | С = Т.Добавить();
38 | С.ПолноеИмя = "Ларина";
39 | С.Имя = "Ларина";
40 | С.Пароль = "";
41 | С.ВходВПрограммуРазрешен = истина;
42 | С.АутентификацияСтандартная = ложь;
43 | // С.АутентификацияОС = ложь;
44 | // С.ПользовательОС = Неопределено;
45 | С.АутентификацияОС = истина;
46 | С.ПользовательОС = "\\SVD\107";
47 | С.ЗапрещеноИзменятьПароль = ложь;
48 | С.ПоказыватьВСпискеВыбора = ложь;
49 | С.Профили = "Бухгалтер, Главный бухгалтер, Добавление и изменение дат запрета изменения";
50 | //С.Профили = "Бухгалтер";
51 |
52 |
53 | //********** КОНЕЦ ОПИСАНИЯ ПОЛЬЗОВАТЕЛЕЙ ***************
54 |
55 | Для Каждого С ИЗ Т Цикл
56 |
57 | //Создаем пользователя
58 | ОбновляемыеСвойства = v8.NewObject("Структура");
59 | Для Инд = 1 По Т.Колонки.Количество() Цикл
60 | Колонка = Т.Колонки.Получить(Инд - 1);
61 | Зн = С.Получить(Инд - 1);
62 | Если Колонка.Имя = "Профили" Тогда
63 | Продолжить;
64 | КонецЕсли;
65 | Если Зн <> Неопределено Тогда
66 | ОбновляемыеСвойства.Вставить(Колонка.Имя, Зн);
67 | КонецЕсли;
68 | КонецЦикла;
69 | ОбновляемыеСвойства.Вставить("Действие", "Записать"); //Не уверен, что без этого будет работать
70 | ОбновляемыеСвойства.Вставить("ПарольУстановлен", истина);
71 | ОбновляемыеСвойства.Вставить("АутентификацияOpenID", ложь);
72 |
73 |
74 | ПользовательИБСуществует = v8.ПользователиИнформационнойБазы.НайтиПоИмени(С.Имя) <> Неопределено;
75 |
76 | v8.Пользователи.УстановитьСвойстваПользователяИБ(С.Имя, ОбновляемыеСвойства, НЕ ПользовательИБСуществует); //Создавать нового ставим всегда в Истина
77 |
78 | Сообщить(?(ПользовательИБСуществует, "Добавлен", "Обновлен") + " пользователь ИБ: " + С.Имя);
79 |
80 | ТекПользователь = v8.Справочники.Пользователи.НайтиПоНаименованию(ОбновляемыеСвойства.ПолноеИмя, истина);
81 | ПользовательСуществует = v8.ЗначениеЗаполнено(ТекПользователь);
82 |
83 | //Записываем пользователя в 1С, если его еще нет в базе
84 | Если НЕ ПользовательСуществует Тогда
85 | Пользователь = v8.Справочники.Пользователи.СоздатьЭлемент();
86 | Пользователь.Наименование = ОбновляемыеСвойства.ПолноеИмя;
87 | Пользователь.ДополнительныеСвойства.Вставить(
88 | "ОписаниеПользователяИБ", ОбновляемыеСвойства);
89 | Пользователь.Записать();
90 | ТекПользователь = Пользователь.Ссылка;
91 | Сообщить("Создан пользователь базы: " + С.Имя);
92 | КонецЕсли;
93 |
94 | МассивПрофили = СтрРазделить(С.Профили, ",");
95 | Для Каждого ИмяПрофиля ИЗ МассивПрофили Цикл
96 | ИмяПрофиля = СокрЛП(ИмяПрофиля);
97 | Если v8.УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда
98 | ТекПрофиль = v8.Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию(ИмяПрофиля);
99 | Если Не v8.ЗначениеЗаполнено(ТекПрофиль) Тогда
100 | Сообщить("Не найден профиль: " + ИмяПрофиля, СтатусСообщения.Важное);
101 | Продолжить;
102 | КонецЕсли;
103 | v8.УправлениеДоступом.ВключитьПрофильПользователю(ТекПользователь, ТекПрофиль);
104 | Иначе
105 | ТекГруппа = v8.Справочники.ГруппыДоступа.НайтиПоНаименованию(ИмяПрофиля);
106 | //Сообщить("" +ТипЗнч(ТекГруппа) + " " + ТекГруппа);
107 | //Прерват
108 | Если Не v8.ЗначениеЗаполнено(ТекГруппа) Тогда
109 | Сообщить("Не найдена группа: " + ИмяПрофиля, СтатусСообщения.Важное);
110 | Продолжить;
111 | КонецЕсли;
112 |
113 | //Код скопирован из типовой формы ПраваДоступа, несколько упрощен
114 | ГруппаДоступаОбъект = ТекГруппа.ПолучитьОбъект();
115 | Добавить = истина;
116 | Если Добавить Тогда
117 | Если ГруппаДоступаОбъект.Пользователи.Найти(ТекПользователь, "Пользователь") = Неопределено Тогда
118 | ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = ТекПользователь;
119 | КонецЕсли;
120 | Иначе
121 | СтрокаТЧ = ГруппаДоступаОбъект.Пользователи.Найти(ТекПользователь, "Пользователь");
122 | Если СтрокаТЧ <> Неопределено Тогда
123 | ГруппаДоступаОбъект.Пользователи.Удалить(СтрокаТЧ);
124 | КонецЕсли;
125 | КонецЕсли;
126 | ГруппаДоступаОбъект.Записать();
127 | КонецЕсли;
128 | КонецЦикла;
129 | КонецЦикла;
130 |
131 | //=========== КОНЕЦ КОДА ДОБАВЛЕНИЯ ПОЛЬЗОВАТЕЛЕЙ ==========
132 |
133 |
134 | КонецПроцедуры
135 |
136 |
137 | // ****************************************************************************
138 | // Служебные процедуры
139 | // ****************************************************************************
140 |
141 | Процедура ПриНачалеРаботы()
142 |
143 | errors = Ложь;
144 |
145 | updater = Новый Updater1C;
146 |
147 | // Если в скрипте не планируется использовать
148 | // подключение к базе - просто закомментируйте
149 | // две нижние строки.
150 | connector = updater.CreateConnector();
151 | v8 = updater.BaseConnectNew(connector);
152 |
153 | КонецПроцедуры
154 |
155 | Процедура ПриОкончанииРаботы()
156 |
157 | Если v8 <> Неопределено Тогда
158 | Попытка
159 | ОсвободитьОбъект(v8);
160 | v8 = Неопределено;
161 | Исключение
162 | КонецПопытки;
163 | КонецЕсли;
164 |
165 | Если connector <> Неопределено Тогда
166 | Попытка
167 | ОсвободитьОбъект(connector);
168 | connector = Неопределено;
169 | Исключение
170 | КонецПопытки;
171 | КонецЕсли;
172 |
173 | Если updater <> Неопределено Тогда
174 | Попытка
175 | ОсвободитьОбъект(updater);
176 | updater = Неопределено;
177 | Исключение
178 | КонецПопытки;
179 | КонецЕсли;
180 |
181 | Если errors Тогда
182 | ЗавершитьРаботу(1);
183 | КонецЕсли;
184 |
185 | КонецПроцедуры
186 |
187 | // ****************************************************************************
188 | // Инициализация и запуск скрипта
189 | // ****************************************************************************
190 |
191 | ПриНачалеРаботы();
192 |
193 | Попытка
194 | Главная();
195 | updater.КодПользователяВыполнился();
196 | Исключение
197 | errors = Истина;
198 | Сообщить("" + ОписаниеОшибки() + "");
199 | КонецПопытки;
200 |
201 | ПриОкончанииРаботы();
202 |
--------------------------------------------------------------------------------
/БСП/Удаление прав- для удаления к роли добавить минус.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milkin-vl/ONESCRIPT-user-scripts-for-Updater-1C/ebc8d27fb683fabc1f57fb5f1bc28543ce6d6ac4/БСП/Удаление прав- для удаления к роли добавить минус.txt
--------------------------------------------------------------------------------
/Бухгалтерия предприятия/Запрос оборотов по 51 счёту.os:
--------------------------------------------------------------------------------
1 | #use "updater1c"
2 |
3 | // ****************************************************************************
4 | // Переменные модуля
5 | // ****************************************************************************
6 |
7 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
8 | Перем updater; // Обновлятор, через который мы получаем информацию о базе,
9 | // а также вызываем различные функции обновлятора.
10 | Перем connector; // Коннектор для подключения к базе.
11 | Перем v8; // Само подключение к базе через коннектор.
12 |
13 | // ****************************************************************************
14 | // Ваш код для выполнения обновлятором
15 | // ****************************************************************************
16 |
17 | Процедура Главная()
18 |
19 | // Обязательно прочтите статью про COM-объекты
20 | // http://helpme1c.ru/ispolzovanie-com-obektov-v-onescript
21 |
22 | Запрос = v8.NewObject("Запрос");
23 |
24 | Запрос.Текст = "
25 | |ВЫБРАТЬ
26 | | ХозрасчетныйОбороты.СуммаОборотДт КАК Приход,
27 | | ХозрасчетныйОбороты.СуммаОборотКт КАК Расход
28 | |ИЗ
29 | | РегистрБухгалтерии.Хозрасчетный.Обороты(
30 | | ДАТАВРЕМЯ(2013, 01, 01), ДАТАВРЕМЯ(2013, 12, 31),
31 | | Год, Счет.Код = ""51"", , , ,
32 | | ) КАК ХозрасчетныйОбороты";
33 |
34 | Результат = Запрос.Выполнить();
35 |
36 | Выборка = Результат.Выбрать();
37 |
38 | ПутьКФайлу = "C:\Аудит.txt";
39 |
40 | Файл = Новый Файл(ПутьКФайлу);
41 | Если НЕ Файл.Существует() Тогда
42 | Документ = Новый ТекстовыйДокумент;
43 | Документ.Записать(ПутьКФайлу, КодировкаТекста.ANSI);
44 | КонецЕсли;
45 |
46 | Если Выборка.Следующий() Тогда
47 |
48 | Документ = Новый ТекстовыйДокумент;
49 | Документ.Прочитать(ПутьКФайлу, КодировкаТекста.ANSI);
50 |
51 | Сообщение = "пришло " + Строка(Выборка.Приход) + " рублей";
52 | Сообщение = Сообщение + ", ушло " + Строка(Выборка.Расход) + " рублей";
53 |
54 | Документ.ДобавитьСтроку("Обороты по 51 счёту в " + updater.BaseName + " за 2013 год: " + Сообщение);
55 | Документ.Записать(ПутьКФайлу, КодировкаТекста.ANSI);
56 |
57 | КонецЕсли;
58 |
59 | КонецПроцедуры
60 |
61 | // ****************************************************************************
62 | // Служебные процедуры
63 | // ****************************************************************************
64 |
65 | Процедура ПриНачалеРаботы()
66 |
67 | errors = Ложь;
68 |
69 | updater = Новый Updater1C;
70 |
71 | // Если в скрипте не планируется использовать
72 | // подключение к базе - просто закомментируйте
73 | // две нижние строки.
74 | connector = Новый COMОбъект("V" + updater.PlatformRelease + ".COMConnector");
75 | v8 = updater.BaseConnect(connector);
76 |
77 | КонецПроцедуры
78 |
79 | Процедура ПриОкончанииРаботы()
80 |
81 | Если v8 <> Неопределено Тогда
82 | Попытка
83 | ОсвободитьОбъект(v8);
84 | v8 = Неопределено;
85 | Исключение
86 | КонецПопытки;
87 | КонецЕсли;
88 |
89 | Если connector <> Неопределено Тогда
90 | Попытка
91 | ОсвободитьОбъект(connector);
92 | connector = Неопределено;
93 | Исключение
94 | КонецПопытки;
95 | КонецЕсли;
96 |
97 | Если updater <> Неопределено Тогда
98 | Попытка
99 | ОсвободитьОбъект(updater);
100 | updater = Неопределено;
101 | Исключение
102 | КонецПопытки;
103 | КонецЕсли;
104 |
105 | // Ожидание в конце выполнения программы
106 | // магическим образом помогает избежать
107 | // проблем с освобождением ресурсов, если
108 | // мы использовали внешнее подключение к
109 | // базе. Могут быть случаи, когда недостаточно
110 | // 1 секунды.
111 | Приостановить(1000);
112 |
113 | Если errors Тогда
114 | ЗавершитьРаботу(1);
115 | КонецЕсли;
116 |
117 | КонецПроцедуры
118 |
119 | // ****************************************************************************
120 | // Инициализация и запуск скрипта
121 | // ****************************************************************************
122 |
123 | ПриНачалеРаботы();
124 |
125 | Попытка
126 | Главная();
127 | Исключение
128 | errors = Истина;
129 | Сообщить("" + ОписаниеОшибки() + "");
130 | КонецПопытки;
131 |
132 | ПриОкончанииРаботы();
--------------------------------------------------------------------------------
/Бухгалтерия предприятия/Создание нового пользователя.os:
--------------------------------------------------------------------------------
1 | #use "updater1c"
2 |
3 | // ****************************************************************************
4 | // Переменные модуля
5 | // ****************************************************************************
6 |
7 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
8 | Перем updater; // Обновлятор, через который мы получаем информацию о базе,
9 | // а также вызываем различные функции обновлятора.
10 | Перем connector; // Коннектор для подключения к базе.
11 | Перем v8; // Само подключение к базе через коннектор.
12 |
13 | // ****************************************************************************
14 | // Ваш код для выполнения обновлятором
15 | // ****************************************************************************
16 |
17 | Процедура Главная()
18 |
19 | // Обязательно прочтите статью про COM-объекты
20 | // http://helpme1c.ru/ispolzovanie-com-obektov-v-onescript
21 |
22 | // создаём пользователя иб
23 | ПользовательИБ = v8.ПользователиИнформационнойБазы.СоздатьПользователя();
24 | ПользовательИБ.Имя = "Иванов";
25 | ПользовательИБ.ПолноеИмя = "Иванов";
26 | ПользовательИБ.Пароль = "";
27 | ПользовательИБ.ПоказыватьВСпискеВыбора = Истина;
28 | ПользовательИБ.АутентификацияОС = Ложь;
29 |
30 | Если v8.ПользователиИнформационнойБазы.НайтиПоИмени(ПользовательИБ.Имя) = Неопределено Тогда
31 | ПользовательИБ.Записать();
32 | Сообщить("Новый пользователь создан.");
33 | Иначе
34 | Сообщить("Пользователь с таким именем уже есть в базе!");
35 | Возврат;
36 | КонецЕсли;
37 |
38 | // создаём пользователя справочника
39 | Пользователь = v8.Справочники.Пользователи.СоздатьЭлемент();
40 | Пользователь.Наименование = ПользовательИБ.ПолноеИмя;
41 |
42 | ОписаниеПользователяИБ = v8.NewObject("Структура");
43 | ОписаниеПользователяИБ.Вставить("Действие", "Записать");
44 | ОписаниеПользователяИБ.Вставить(
45 | "УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор);
46 |
47 | Пользователь.ДополнительныеСвойства.Вставить(
48 | "ОписаниеПользователяИБ", ОписаниеПользователяИБ);
49 | Пользователь.Записать();
50 |
51 | // назначаем права пользователю иб
52 | ПользовательИБ = v8.ПользователиИнформационнойБазы.НайтиПоИмени(ПользовательИБ.Имя);
53 | ПользовательИБ.Роли.Добавить(v8.Метаданные.Роли.ПолныеПрава);
54 | ПользовательИБ.Записать();
55 |
56 | КонецПроцедуры
57 |
58 | // ****************************************************************************
59 | // Служебные процедуры
60 | // ****************************************************************************
61 |
62 | Процедура ПриНачалеРаботы()
63 |
64 | errors = Ложь;
65 |
66 | updater = Новый Updater1C;
67 |
68 | // Если в скрипте не планируется использовать
69 | // подключение к базе - просто закомментируйте
70 | // две нижние строки.
71 | connector = Новый COMОбъект("V" + updater.PlatformRelease + ".COMConnector");
72 | v8 = updater.BaseConnect(connector);
73 |
74 | КонецПроцедуры
75 |
76 | Процедура ПриОкончанииРаботы()
77 |
78 | Если v8 <> Неопределено Тогда
79 | Попытка
80 | ОсвободитьОбъект(v8);
81 | v8 = Неопределено;
82 | Исключение
83 | КонецПопытки;
84 | КонецЕсли;
85 |
86 | Если connector <> Неопределено Тогда
87 | Попытка
88 | ОсвободитьОбъект(connector);
89 | connector = Неопределено;
90 | Исключение
91 | КонецПопытки;
92 | КонецЕсли;
93 |
94 | Если updater <> Неопределено Тогда
95 | Попытка
96 | ОсвободитьОбъект(updater);
97 | updater = Неопределено;
98 | Исключение
99 | КонецПопытки;
100 | КонецЕсли;
101 |
102 | // Ожидание в конце выполнения программы
103 | // магическим образом помогает избежать
104 | // проблем с освобождением ресурсов, если
105 | // мы использовали внешнее подключение к
106 | // базе. Могут быть случаи, когда недостаточно
107 | // 1 секунды.
108 | Приостановить(1000);
109 |
110 | Если errors Тогда
111 | ЗавершитьРаботу(1);
112 | КонецЕсли;
113 |
114 | КонецПроцедуры
115 |
116 | // ****************************************************************************
117 | // Инициализация и запуск скрипта
118 | // ****************************************************************************
119 |
120 | ПриНачалеРаботы();
121 |
122 | Попытка
123 | Главная();
124 | Исключение
125 | errors = Истина;
126 | Сообщить("" + ОписаниеОшибки() + "");
127 | КонецПопытки;
128 |
129 | ПриОкончанииРаботы();
130 |
--------------------------------------------------------------------------------
/Удаление помеченных объектов.os:
--------------------------------------------------------------------------------
1 | #use "updater1c"
2 |
3 | // ****************************************************************************
4 | // Переменные модуля
5 | // ****************************************************************************
6 |
7 | Перем errors; // Признак того, что при выполнении скрипта были ошибки.
8 | Перем updater; // Обновлятор, через который мы получаем информацию о базе,
9 | // а также вызываем различные функции обновлятора.
10 | Перем connector; // Коннектор для подключения к базе.
11 | Перем v8; // Само подключение к базе через коннектор.
12 |
13 | // ****************************************************************************
14 | // Ваш код для выполнения обновлятором
15 | // ****************************************************************************
16 |
17 | Процедура Главная()
18 |
19 | // Удаление помеченных объектов (с контролем ссылочной целостности)
20 | v8.УстановитьМонопольныйРежим(Истина);
21 | Помеченные = v8.НайтиПомеченныеНаУдаление();
22 | Найденные = 0;
23 | v8.УдалитьОбъекты(Помеченные, Истина, Найденные);
24 | v8.УстановитьМонопольныйРежим(Ложь);
25 |
26 | КонецПроцедуры
27 |
28 | // ****************************************************************************
29 | // Служебные процедуры
30 | // ****************************************************************************
31 |
32 | Процедура ПриНачалеРаботы()
33 |
34 | errors = Ложь;
35 |
36 | updater = Новый Updater1C;
37 |
38 | // Если в скрипте не планируется использовать
39 | // подключение к базе - просто закомментируйте
40 | // две нижние строки.
41 | connector = updater.CreateConnector();
42 | v8 = updater.BaseConnectNew(connector);
43 |
44 | КонецПроцедуры
45 |
46 | Процедура ПриОкончанииРаботы()
47 |
48 | Если v8 <> Неопределено Тогда
49 | Попытка
50 | ОсвободитьОбъект(v8);
51 | v8 = Неопределено;
52 | Исключение
53 | КонецПопытки;
54 | КонецЕсли;
55 |
56 | Если connector <> Неопределено Тогда
57 | Попытка
58 | ОсвободитьОбъект(connector);
59 | connector = Неопределено;
60 | Исключение
61 | КонецПопытки;
62 | КонецЕсли;
63 |
64 | Если updater <> Неопределено Тогда
65 | Попытка
66 | ОсвободитьОбъект(updater);
67 | updater = Неопределено;
68 | Исключение
69 | КонецПопытки;
70 | КонецЕсли;
71 |
72 | Если errors Тогда
73 | ЗавершитьРаботу(1);
74 | КонецЕсли;
75 |
76 | КонецПроцедуры
77 |
78 | // ****************************************************************************
79 | // Инициализация и запуск скрипта
80 | // ****************************************************************************
81 |
82 | ПриНачалеРаботы();
83 |
84 | Попытка
85 | Главная();
86 | updater.КодПользователяВыполнился();
87 | Исключение
88 | errors = Истина;
89 | Сообщить("" + ОписаниеОшибки() + "");
90 | КонецПопытки;
91 |
92 | ПриОкончанииРаботы();
93 |
--------------------------------------------------------------------------------