├── 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 | --------------------------------------------------------------------------------