├── .project ├── .settings └── org.eclipse.core.resources.prefs ├── DT-INF └── PROJECT.PMF └── src ├── CommonForms └── пс_ФормаПрогрессаЗагрузкиФайлов │ ├── Form.form │ ├── Module.bsl │ └── пс_ФормаПрогрессаЗагрузкиФайлов.mdo ├── CommonModules ├── пс_РаботаСФайламиКлиент │ ├── Module.bsl │ └── пс_РаботаСФайламиКлиент.mdo ├── пс_Скрипты │ ├── Module.bsl │ └── пс_Скрипты.mdo ├── пс_СкриптыВызовСервера │ ├── Module.bsl │ └── пс_СкриптыВызовСервера.mdo ├── пс_СкриптыКлиент │ ├── Module.bsl │ └── пс_СкриптыКлиент.mdo └── пс_СкриптыСерверПовтИсп │ ├── Module.bsl │ └── пс_СкриптыСерверПовтИсп.mdo ├── CommonPictures └── пс_РазделСкрипты │ ├── Picture.png │ └── пс_РазделСкрипты.mdo ├── CommonTemplates └── пс_ПодключаемыеСкрипты │ ├── Template.txt │ └── пс_ПодключаемыеСкрипты.mdo ├── Configuration ├── Configuration.mdo ├── ExternalConnectionModule.bsl ├── ManagedApplicationModule.bsl ├── OrdinaryApplicationModule.bsl └── SessionModule.bsl ├── DataProcessors ├── пс_РедакторКода │ ├── Forms │ │ └── Форма │ │ │ ├── Form.form │ │ │ └── Module.bsl │ ├── ManagerModule.bsl │ ├── ObjectModule.bsl │ ├── Templates │ │ ├── app │ │ │ └── Template.bin │ │ ├── css_worker │ │ │ └── Template.bin │ │ ├── editor_worker │ │ │ └── Template.bin │ │ ├── html_worker │ │ │ └── Template.bin │ │ ├── index │ │ │ └── Template.txt │ │ ├── json_worker │ │ │ └── Template.bin │ │ └── ts_worker │ │ │ └── Template.bin │ └── пс_РедакторКода.mdo └── пс_Тестирование │ ├── Forms │ └── Форма │ │ ├── Form.form │ │ └── Module.bsl │ ├── ManagerModule.bsl │ ├── ObjectModule.bsl │ └── пс_Тестирование.mdo └── Subsystems └── пс_Скрипты └── пс_Скрипты.mdo /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | WMSRRCGIT.JS 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.xtext.ui.shared.xtextBuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.xtext.ui.shared.xtextNature 16 | com._1c.g5.v8.dt.core.V8ExtensionNature 17 | 18 | 19 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /DT-INF/PROJECT.PMF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Runtime-Version: 8.3.18 3 | Base-Project: Empty18 4 | -------------------------------------------------------------------------------- /src/CommonForms/пс_ФормаПрогрессаЗагрузкиФайлов/Form.form: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ГруппаСоставнойПрогресс 5 | 6 6 | 7 | ГруппаПрогрессСоставнойГоризонтальная 8 | 20 9 | 10 | ПрогрессВсего 11 | 8 12 | true 13 | true 14 | 15 | true 16 | 17 | 18 | ПрогрессВсего 19 | 20 | None 21 | 22 | ПрогрессВсегоРасширеннаяПодсказка 23 | 10 24 | true 25 | true 26 | 27 | true 28 | 29 | Label 30 | true 31 | true 32 | 33 | Left 34 | 35 | 36 | 37 | ПрогрессВсегоКонтекстноеМеню 38 | 9 39 | true 40 | true 41 | 42 | true 43 | 44 | true 45 | 46 | ProgressBarField 47 | Enter 48 | true 49 | Left 50 | true 51 | 52 | 32 53 | true 54 | 1 55 | true 56 | true 57 | 100 58 | true 59 | 60 | 61 | 62 | КомандаОтменитьВсе 63 | 26 64 | true 65 | true 66 | 67 | true 68 | 69 | 70 | КомандаОтменитьВсеРасширеннаяПодсказка 71 | 27 72 | true 73 | true 74 | 75 | true 76 | 77 | Label 78 | true 79 | true 80 | 81 | Left 82 | 83 | 84 | Hyperlink 85 | Form.Command.КомандаОтменитьВсе 86 | Auto 87 | true 88 | true 89 | true 90 | UserCmds 91 | Auto 92 | 93 | true 94 | true 95 | 96 | true 97 | 98 | 99 | <key>ru</key> 100 | <value>Группа прогресс составной горизонтальная</value> 101 | 102 | false 103 | 104 | ГруппаПрогрессСоставнойГоризонтальнаяРасширеннаяПодсказка 105 | 21 106 | true 107 | true 108 | 109 | true 110 | 111 | Label 112 | true 113 | true 114 | 115 | Left 116 | 117 | 118 | UsualGroup 119 | 120 | HorizontalIfPossible 121 | true 122 | true 123 | Auto 124 | Auto 125 | 126 | 127 | 128 | СоставнойПрогрессПодсказка 129 | 14 130 | true 131 | true 132 | 133 | true 134 | 135 | 136 | СоставнойПрогрессПодсказкаРасширеннаяПодсказка 137 | 16 138 | true 139 | true 140 | 141 | true 142 | 143 | Label 144 | true 145 | true 146 | 147 | Left 148 | 149 | 150 | 151 | СоставнойПрогрессПодсказкаКонтекстноеМеню 152 | 15 153 | true 154 | true 155 | 156 | true 157 | 158 | true 159 | 160 | Label 161 | true 162 | true 163 | 164 | Left 165 | 166 | 167 | true 168 | true 169 | 170 | true 171 | 172 | 173 | <key>ru</key> 174 | <value>Составной прогресс</value> 175 | 176 | 177 | ГруппаСоставнойПрогрессРасширеннаяПодсказка 178 | 7 179 | true 180 | true 181 | 182 | true 183 | 184 | Label 185 | true 186 | true 187 | 188 | Left 189 | 190 | 191 | UsualGroup 192 | 193 | Vertical 194 | NormalSeparation 195 | true 196 | true 197 | Auto 198 | Auto 199 | 200 | 201 | 202 | ГруппаПрогресс 203 | 4 204 | 205 | ГруппаПрогрессГоризонтальная 206 | 24 207 | 208 | Прогресс 209 | 11 210 | true 211 | true 212 | 213 | true 214 | 215 | 216 | Прогресс 217 | 218 | None 219 | 220 | ПрогрессРасширеннаяПодсказка 221 | 13 222 | true 223 | true 224 | 225 | true 226 | 227 | Label 228 | true 229 | true 230 | 231 | Left 232 | 233 | 234 | 235 | ПрогрессКонтекстноеМеню 236 | 12 237 | true 238 | true 239 | 240 | true 241 | 242 | true 243 | 244 | ProgressBarField 245 | Enter 246 | true 247 | Left 248 | true 249 | 250 | 32 251 | true 252 | 1 253 | true 254 | true 255 | 100 256 | true 257 | 258 | 259 | 260 | КомандаОтменитьТекщий 261 | 22 262 | true 263 | true 264 | 265 | true 266 | 267 | 268 | КомандаОтменитьТекщийРасширеннаяПодсказка 269 | 23 270 | true 271 | true 272 | 273 | true 274 | 275 | Label 276 | true 277 | true 278 | 279 | Left 280 | 281 | 282 | Hyperlink 283 | Form.Command.КомандаОтменитьТекщий 284 | Auto 285 | true 286 | true 287 | true 288 | UserCmds 289 | Auto 290 | 291 | true 292 | true 293 | 294 | true 295 | 296 | 297 | <key>ru</key> 298 | <value>Группа прогресс горизонтальная</value> 299 | 300 | false 301 | 302 | ГруппаПрогрессГоризонтальнаяРасширеннаяПодсказка 303 | 25 304 | true 305 | true 306 | 307 | true 308 | 309 | Label 310 | true 311 | true 312 | 313 | Left 314 | 315 | 316 | UsualGroup 317 | 318 | AlwaysHorizontal 319 | true 320 | true 321 | Auto 322 | Auto 323 | 324 | 325 | 326 | ПрогрессПодсказка 327 | 17 328 | true 329 | true 330 | 331 | true 332 | 333 | 334 | ПрогрессПодсказкаРасширеннаяПодсказка 335 | 19 336 | true 337 | true 338 | 339 | true 340 | 341 | Label 342 | true 343 | true 344 | 345 | Left 346 | 347 | 348 | 349 | ПрогрессПодсказкаКонтекстноеМеню 350 | 18 351 | true 352 | true 353 | 354 | true 355 | 356 | true 357 | 358 | Label 359 | true 360 | true 361 | 362 | Left 363 | 364 | 365 | true 366 | true 367 | 368 | true 369 | 370 | 371 | <key>ru</key> 372 | <value>Группа прогресс</value> 373 | 374 | 375 | ГруппаПрогрессРасширеннаяПодсказка 376 | 5 377 | true 378 | true 379 | 380 | true 381 | 382 | Label 383 | true 384 | true 385 | 386 | Left 387 | 388 | 389 | UsualGroup 390 | 391 | Vertical 392 | NormalSeparation 393 | true 394 | true 395 | Auto 396 | Auto 397 | 398 | 399 | 400 | ФормаКоманднаяПанель 401 | -1 402 | true 403 | true 404 | 405 | true 406 | 407 | Left 408 | true 409 | 410 | 411 | OnCreateAtServer 412 | ПриСозданииНаСервере 413 | 414 | LockOwnerWindow 415 | true 416 | true 417 | Vertical 418 | true 419 | true 420 | true 421 | true 422 | true 423 | 424 | ПрогрессВсего 425 | 426 | <key>ru</key> 427 | <value>Прогресс всего</value> 428 | 429 | 1 430 | 431 | Number 432 | 433 | 3 434 | true 435 | 436 | 437 | 438 | true 439 | 440 | 441 | true 442 | 443 | 444 | 445 | Прогресс 446 | 447 | <key>ru</key> 448 | <value>Прогресс</value> 449 | 450 | 2 451 | 452 | Number 453 | 454 | 3 455 | true 456 | 457 | 458 | 459 | true 460 | 461 | 462 | true 463 | 464 | 465 | 466 | Отменено 467 | 468 | <key>ru</key> 469 | <value>Отменено</value> 470 | 471 | 3 472 | 473 | Boolean 474 | 475 | 476 | true 477 | 478 | 479 | true 480 | 481 | 482 | 483 | ОтмененоСоставной 484 | 485 | <key>ru</key> 486 | <value>Отменено составной</value> 487 | 488 | 4 489 | 490 | String 491 | 492 | 493 | 494 | true 495 | 496 | 497 | true 498 | 499 | 500 | 501 | КомандаОтменитьТекщий 502 | 503 | <key>ru</key> 504 | <value>Команда отменить текщий</value> 505 | 506 | 1 507 | 508 | ru 509 | Отменить загрузку текущего файла 510 | 511 | 512 | true 513 | 514 | 515 | StdPicture.Stop 516 | 517 | 518 | 519 | КомандаОтменитьТекщий 520 | 521 | 522 | Picture 523 | Auto 524 | 525 | 526 | КомандаОтменитьВсе 527 | 528 | <key>ru</key> 529 | <value>Отменить все</value> 530 | 531 | 2 532 | 533 | ru 534 | Отменить загрузку всех файлов 535 | 536 | 537 | true 538 | 539 | 540 | StdPicture.Stop 541 | 542 | 543 | 544 | КомандаОтменитьВсе 545 | 546 | 547 | Picture 548 | Auto 549 | 550 | 551 | СоставнойПрогресс 552 | 553 | Boolean 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | -------------------------------------------------------------------------------- /src/CommonForms/пс_ФормаПрогрессаЗагрузкиФайлов/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | &НаСервере 4 | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 5 | Элементы.ГруппаСоставнойПрогресс.Видимость = Параметры.СоставнойПрогресс; 6 | КонецПроцедуры 7 | 8 | &НаКлиенте 9 | Процедура ОбновитьПрогресс(текущийПрогресс, текстПодксказки = "") Экспорт 10 | Прогресс = текущийПрогресс; 11 | Элементы.ПрогрессПодсказка.Заголовок = текстПодксказки; 12 | КонецПроцедуры 13 | 14 | &НаКлиенте 15 | Процедура ОбновитьСоставнойПрогресс(текущийПрогресс, текстПодстказки = "") Экспорт 16 | ПрогрессВсего = текущийПрогресс; 17 | Элементы.СоставнойПрогрессПодсказка.Заголовок = текстПодстказки; 18 | КонецПроцедуры 19 | 20 | &НаКлиенте 21 | Процедура КомандаОтменитьВсе(Команда) 22 | ОтмененоСоставной = Истина; 23 | КонецПроцедуры 24 | 25 | &НаКлиенте 26 | Процедура КомандаОтменитьТекщий(Команда) 27 | Отменено = Истина; 28 | КонецПроцедуры 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/CommonForms/пс_ФормаПрогрессаЗагрузкиФайлов/пс_ФормаПрогрессаЗагрузкиФайлов.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | пс_ФормаПрогрессаЗагрузкиФайлов 4 | 5 | ru 6 | Прогресс 7 | 8 | PersonalComputer 9 | MobileDevice 10 | 11 | -------------------------------------------------------------------------------- /src/CommonModules/пс_РаботаСФайламиКлиент/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | #Область ПрограммныйИнтерфейс 3 | 4 | // Показывает форму выбора файла. 5 | // 6 | // Параметры: 7 | // ОбработчикРезультата - ОписаниеОповещения 8 | // ИдентификаторФормы - УникальныйИдентификатор 9 | // Фильтр - Строка 10 | // Заголовок - Неопределено 11 | // МножественныйВыбор - Булево 12 | Процедура ВыбратьФайлы(ОбработчикРезультата, ИдентификаторФормы 13 | , Фильтр = "", Заголовок = Неопределено, МножественныйВыбор = Ложь) Экспорт 14 | 15 | Параметры = Новый Структура; 16 | Параметры.Вставить("ИдентификаторФормы", ИдентификаторФормы); 17 | Параметры.Вставить("Фильтр", Фильтр); 18 | Параметры.Вставить("Заголовок", Заголовок); 19 | Параметры.Вставить("МножественныйВыбор", МножественныйВыбор); 20 | Параметры.Вставить("ОбработчикРезультата", ОбработчикРезультата); 21 | 22 | Если ЭтоПлатформа15Плюс() Тогда 23 | ВыбратьФайлыПлатформа15Плюс(Параметры); 24 | Иначе 25 | ВыбратьФайлыПлатформа15Минус(Параметры); 26 | КонецЕсли; 27 | 28 | КонецПроцедуры 29 | 30 | #КонецОбласти 31 | 32 | #Область Платформа15Плюс 33 | 34 | // Открывает диалог выбора файла при использовании 15 и более новой версии платформы 35 | // 36 | // Параметры: 37 | // Параметры - Структура - Описание: 38 | // * МножественныйВыбор - Булево - 39 | // * Заголовок - Строка, Неопределено - 40 | // * Фильтр - Строка - 41 | Процедура ВыбратьФайлыПлатформа15Плюс(Параметры) 42 | 43 | ФормаПрогресса = ОткрытьФорму("ОбщаяФорма.пс_ФормаПрогрессаЗагрузкиФайлов" 44 | , Новый Структура("СоставнойПрогресс", Параметры.МножественныйВыбор)); 45 | ФормаПрогресса.Закрыть(); 46 | Параметры.Вставить("ФормаПрогресса", ФормаПрогресса); 47 | ОписаниеОповещенияОЗавершении 48 | = Новый ОписаниеОповещения( 49 | "ПоместитьФайлыЗавершение" 50 | , ЭтотОбъект 51 | , Параметры); 52 | ОписаниеОповещенияОХодеВыполнения 53 | = Новый ОписаниеОповещения( 54 | "ОповещениеОХодеВыполненияПомещенияФайлов" 55 | , ЭтотОбъект 56 | , ФормаПрогресса); 57 | ОписаниеОповещенияПередНачалом 58 | = Новый ОписаниеОповещения("ПередНачаломПомещенияФайлов" 59 | , ЭтотОбъект 60 | , ФормаПрогресса); 61 | ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов(); 62 | ПараметрыДиалога.МножественныйВыбор = Параметры.МножественныйВыбор; 63 | ПараметрыДиалога.Фильтр = Параметры.Фильтр; 64 | ПараметрыДиалога.Заголовок = Параметры.Заголовок; 65 | ИДФормы = Параметры.ИдентификаторФормы; 66 | // чтобы модуль скомпилировался в платформе менее 15 67 | НачатьПомещениеФайловНаСервер(ОписаниеОповещенияОЗавершении 68 | , ОписаниеОповещенияОХодеВыполнения, ОписаниеОповещенияПередНачалом 69 | , ПараметрыДиалога, ИДФормы); 70 | КонецПроцедуры 71 | 72 | // Процедура отображает процесс помещения файлов во временное хранилище 73 | // 74 | // Параметры: 75 | // ПомещаемыйФайл - СсылкаНаФайл 76 | // Помещено - Число 77 | // ОтказОтПомещенияФайла - Булево 78 | // ПомещеноВсего - Число 79 | // ОтказОтПомещенияВсехФайлов - Булево 80 | // ДополнительныеПараметры 81 | Процедура ОповещениеОХодеВыполненияПомещенияФайлов(ПомещаемыйФайл, Помещено 82 | , ОтказОтПомещенияФайла, ПомещеноВсего 83 | , ОтказОтПомещенияВсехФайлов, ФормаПрогресса) Экспорт 84 | Если Не ФормаПрогресса.Открыта() Тогда 85 | ОтказОтПомещенияВсехФайлов = Истина; 86 | Возврат; 87 | КонецЕсли; 88 | ОтказОтПомещенияФайла = ФормаПрогресса.Отменено; 89 | ОтказОтПомещенияВсехФайлов = ФормаПрогресса.ОтмененоСоставной; 90 | ФормаПрогресса.ОбновитьПрогресс(Помещено, СтрШаблон("Загружается файл %1", ПомещаемыйФайл.Имя)); 91 | ФормаПрогресса.ОбновитьСоставнойПрогресс(ПомещеноВсего); 92 | КонецПроцедуры 93 | 94 | // Выполняется перед началом помещения файлов во временное хранилище 95 | // 96 | // Параметры: 97 | // ПомещаемыеФайлы - Массив - Массив элементов типа СсылкаНаФайл, готовых к помещению во временное хранилище. 98 | // ОтказОтПомещенияВсехФайлов - Булево - Признак отказа от дальнейшего помещения всех файлов 99 | // ДополнительныеПараметры 100 | Процедура ПередНачаломПомещенияФайлов(ПомещаемыеФайлы, ОтказОтПомещенияВсехФайлов 101 | , ФормаПрогресса) Экспорт 102 | ФормаПрогресса.Открыть(); 103 | КонецПроцедуры 104 | 105 | #КонецОбласти 106 | 107 | #Область Платформа15Минус 108 | 109 | // Открывает диалог выбора файла при использовании 14 и более старой версии платформы 110 | // 111 | // Параметры: 112 | // Параметры - Структура - Описание: 113 | // * ИдентификаторФормы - УникальныйИдентификатор 114 | // * ОбработчикРезультата - ОписаниеОповещения 115 | // * МножественныйВыбор - Булево - 116 | // * Заголовок - Неопределено - 117 | // * Фильтр - Строка - 118 | Процедура ВыбратьФайлыПлатформа15Минус(Параметры) 119 | Описание = Новый ОписаниеОповещения( 120 | "ВыбратьФайлыПослеУстановкиРасширения" 121 | , ЭтотОбъект 122 | , Параметры); 123 | ПоказатьВопросУстановкиРасширенияРаботыСФайлами(Описание); 124 | КонецПроцедуры 125 | 126 | // Подключает расширение работы с файлами, для необзодимости 127 | // 128 | // Параметры: 129 | // ОписаниеОповещения - ОписаниеОповещения - Описание 130 | Процедура ПоказатьВопросУстановкиРасширенияРаботыСФайлами(ОписаниеОповещения) 131 | Если Не КлиентПоддерживаетСинхронныеВызовы() Тогда 132 | ВыполнитьОбработкуОповещения(ОписаниеОповещения, Ложь); 133 | Возврат; 134 | КонецЕсли; 135 | #Если Не ВебКлиент Тогда 136 | // В мобильном, тонком и толстом клиентах расширение подключено всегда. 137 | ВыполнитьОбработкуОповещения(ОписаниеОповещения, Истина); 138 | Возврат; 139 | #КонецЕсли 140 | 141 | // TODO: сделать поддержку вебклиента 142 | 143 | КонецПроцедуры 144 | 145 | // Проверяет, доступны ли синфронные вызовы 146 | // 147 | // Возвращаемое значение: 148 | // Булево - Описание 149 | Функция КлиентПоддерживаетСинхронныеВызовы() 150 | 151 | #Если ВебКлиент Тогда 152 | // В Chrome и Firefox синхронные методы не поддерживаются. 153 | СистемнаяИнформация = Новый СистемнаяИнформация; 154 | ИнформацияПрограммыМассив = СтрРазделить(СистемнаяИнформация.ИнформацияПрограммыПросмотра, " ", Ложь); 155 | 156 | Для Каждого ИнформацияПрограммы Из ИнформацияПрограммыМассив Цикл 157 | Если СтрНайти(ИнформацияПрограммы, "Chrome") > 0 ИЛИ СтрНайти(ИнформацияПрограммы, "Firefox") > 0 Тогда 158 | Возврат Ложь; 159 | КонецЕсли; 160 | КонецЦикла; 161 | #КонецЕсли 162 | 163 | Возврат Истина; 164 | 165 | КонецФункции 166 | 167 | // Показывает диалог выбора файлов с переданными параметрами 168 | // 169 | // Параметры: 170 | // Подключено - Булево 171 | // ДополнительныеПараметры 172 | Процедура ВыбратьФайлыПослеУстановкиРасширения(Подключено, ДополнительныеПараметры) Экспорт 173 | 174 | Если Не Подключено Тогда 175 | Возврат; 176 | КонецЕсли; 177 | 178 | Описание = Новый ОписаниеОповещения("ПоместитьФайлыНачало", ЭтотОбъект, ДополнительныеПараметры); 179 | 180 | Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); 181 | Диалог.Фильтр = ДополнительныеПараметры.Фильтр; 182 | Диалог.МножественныйВыбор = ДополнительныеПараметры.МножественныйВыбор; 183 | Если ДополнительныеПараметры.Свойство("ЗаголовокДиалога") Тогда 184 | Диалог.Заголовок = ДополнительныеПараметры.ЗаголовокДиалога; 185 | КонецЕсли; 186 | Диалог.Показать(Описание); 187 | 188 | КонецПроцедуры 189 | 190 | // Начинает помещение файлов во временное хранилище после выбора диалогом. 191 | // 192 | // Параметры: 193 | // ВыбранныеФайлы - Массив, Неопределено 194 | // ДополнительныеПараметры 195 | Процедура ПоместитьФайлыНачало(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт 196 | Если ВыбранныеФайлы = Неопределено Тогда 197 | Возврат; 198 | КонецЕсли; 199 | ПомещаемыеФайлы = Новый Массив; 200 | Для Каждого текВыбранныйФайл Из ВыбранныеФайлы Цикл 201 | ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(текВыбранныйФайл)); 202 | КонецЦикла; 203 | Описание = Новый ОписаниеОповещения("ПоместитьФайлыЗавершение", ЭтотОбъект, ДополнительныеПараметры); 204 | НачатьПомещениеФайлов(Описание, ПомещаемыеФайлы,,, ДополнительныеПараметры.ИдентификаторФормы); 205 | КонецПроцедуры 206 | 207 | // Приводит помещённые файлы к виду ОписаниеПомещенногоФайла, добавленный в 15 версии 208 | // 209 | // Параметры: 210 | // ПомещенныеФайлы - Массив, Неопределено 211 | // ДополнительныеПараметры 212 | Процедура ПоместитьФайлыЗавершение(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт 213 | 214 | Если ДополнительныеПараметры.Свойство("ФормаПрогресса") 215 | И ДополнительныеПараметры.ФормаПрогресса.Открыта() Тогда 216 | ДополнительныеПараметры.ФормаПрогресса.Закрыть(); 217 | КонецЕсли; 218 | Если ПомещенныеФайлы = Неопределено Тогда 219 | Возврат; 220 | КонецЕсли; 221 | 222 | Если ПомещенныеФайлы.Количество() И ТипЗнч(ПомещенныеФайлы[0]) = Тип("ОписаниеПереданногоФайла") Тогда 223 | РезультатПомещённыеФайлы = Новый Массив; 224 | Для Каждого текПомещённыйФайл Из ПомещенныеФайлы Цикл 225 | Файл = Новый Файл(текПомещённыйФайл.ПолноеИмя); 226 | СсылкаНаФайл = Новый Структура; 227 | СсылкаНаФайл.Вставить("ИдентификаторФайла", текПомещённыйФайл.ИдентификаторФайла); 228 | СсылкаНаФайл.Вставить("Имя", текПомещённыйФайл.Имя); 229 | СсылкаНаФайл.Вставить("Расширение", Файл.Расширение); 230 | СсылкаНаФайл.Вставить("Файл", Файл); 231 | ПомещённыйФайл = Новый Структура; 232 | ПомещённыйФайл.Вставить("Адрес", текПомещённыйФайл.Хранение); 233 | ПомещённыйФайл.Вставить("ПомещениеФайлаОтменено", Ложь); 234 | ПомещённыйФайл.Вставить("СсылкаНаФайл", СсылкаНаФайл); 235 | РезультатПомещённыеФайлы.Добавить(ПомещённыйФайл); 236 | КонецЦикла; 237 | Иначе 238 | РезультатПомещённыеФайлы = ПомещенныеФайлы; 239 | КонецЕсли; 240 | ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикРезультата, РезультатПомещённыеФайлы); 241 | КонецПроцедуры 242 | 243 | #КонецОбласти 244 | 245 | #Область СлужебныеФункции 246 | 247 | // Возвращает Истина, если версия платформы больше или равна 8.3.15 248 | // 249 | // Возвращаемое значение: 250 | // Булево 251 | Функция ЭтоПлатформа15Плюс() 252 | СистемнаяИнформация = Новый СистемнаяИнформация(); 253 | МассивВерсий = СтрРазделить(СистемнаяИнформация.ВерсияПриложения, "."); 254 | Мажорная = МассивВерсий.Получить(1); 255 | Минорная = МассивВерсий.ПОлучить(2); 256 | Возврат Мажорная = "3" И Число(Минорная) >= 15; 257 | КонецФункции 258 | 259 | 260 | 261 | 262 | #КонецОбласти 263 | -------------------------------------------------------------------------------- /src/CommonModules/пс_РаботаСФайламиКлиент/пс_РаботаСФайламиКлиент.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | пс_РаботаСФайламиКлиент 4 | 5 | ru 6 | Работа с файлами 7 | 8 | true 9 | true 10 | 11 | -------------------------------------------------------------------------------- /src/CommonModules/пс_Скрипты/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | #Область ПрограммныйИнтерфейс 3 | 4 | // Подключает скрипт к хтмл Полю по адресу временного хранилища 5 | // 6 | // Параметры: 7 | // Поле - ПолеФормы - Поле формы с видом ПолеHTMLДокумента 8 | // ДополнительныеПараметры - Структура 9 | // 10 | Процедура ПодключитьСрипт(АдесФайла, Поле) Экспорт 11 | 12 | МассивАдресов = Новый Массив; 13 | МассивАдресов.Добавить(СтруктураПодключаемогоФайла(АдесФайла)); 14 | ПодключитьФайлы(МассивАдресов, Поле); 15 | 16 | КонецПроцедуры // ПодключитьСрипт() 17 | 18 | // Подключает основное расширение скриптов, и все настроенные файлы для переданного поля 19 | // 20 | // Параметры: 21 | // Поле - ПолеФормы - Поле формы с видом ПолеHTMLДокумента 22 | // 23 | Процедура ПодключитьРасширенныеСкрипты(Поле) Экспорт 24 | 25 | МассивАдресов = Новый Массив; 26 | АдресОсновногоСкрипта = пс_СкриптыСерверПовтИсп.АдресОсновногоРасширенияСкриптов(); 27 | МассивАдресов.Добавить(СтруктураПодключаемогоФайла(АдресОсновногоСкрипта)); 28 | ПриОпределенииПодключаемыхФайлов(МассивАдресов, Поле); 29 | ПодключитьФайлы(МассивАдресов, Поле); 30 | 31 | КонецПроцедуры // ПодключитьСкрипты() 32 | 33 | Процедура ИнициализироватьРедакторКода(Поле) Экспорт 34 | 35 | //@skip-warning 36 | АдресРедактора = пс_СкриптыВызовСервера.ПолучитьИзСерверногоКэша("АдресРедактораКода"); 37 | //@skip-warning 38 | Форма = НайтиФормуЭлемента(Поле); 39 | //@skip-warning 40 | АдресБазы = ПолучитьНавигационнуюСсылкуИнформационнойБазы(); 41 | Выполнить(СтрШаблон( 42 | "Форма.%1 = АдресБазы + ""/"" + АдресРедактора;", Поле.ПутьКДанным)); 43 | 44 | КонецПроцедуры 45 | 46 | #КонецОбласти 47 | 48 | #Область HTML 49 | 50 | // Парсит хтмл документ в ДокументHTML 51 | // 52 | // Параметры: 53 | // текстХТМЛ - Строка - текст хтмл документа 54 | // 55 | // Возвращаемое значение: 56 | // ДокументHTML - распарсенный документ ХТМЛ 57 | // 58 | Функция ТекстВДокументХТМЛ(текстХТМЛ) 59 | 60 | Чтение = Новый ЧтениеHTML; 61 | Чтение.УстановитьСтроку(текстХТМЛ); 62 | Построитель = Новый ПостроительDOM; 63 | ДокументХТМЛ = Построитель.Прочитать(Чтение); 64 | Чтение.Закрыть(); 65 | Возврат ДокументХТМЛ; 66 | 67 | КонецФункции // ТекстВДокументХТМЛ() 68 | 69 | // Преобразует ДокументHTML в строку 70 | // 71 | // Параметры: 72 | // Документ - ДокументHTML - Документ, который необходимо преобразовать в строку 73 | // 74 | // Возвращаемое значение: 75 | // Строка - <описание возвращаемого значения> 76 | // 77 | //@skip-warning 78 | Функция ДокументХТМЛВТекст(Документ) 79 | 80 | ЗаписьХТМЛ = Новый ЗаписьHTML; 81 | ЗаписьХТМЛ.УстановитьСтроку(); 82 | ЗаписьДОМ = Новый ЗаписьDOM; 83 | ЗаписьДОМ.КонфигурацияDOM.УстановитьПараметр("discard-default-content", Истина); 84 | ЗаписьДОМ.Записать(Документ, ЗаписьХТМЛ); 85 | ХТМЛТекст = ЗаписьХТМЛ.Закрыть(); 86 | Возврат СтрЗаменить(ХТМЛТекст, "", ""); 87 | 88 | КонецФункции // ДокументХТМЛВТекст() 89 | 90 | #КонецОбласти 91 | 92 | #Область ПодключаемыеФайлы 93 | 94 | // Ищет в настройках все файлы, которые необходимо подключить к Полю и добавляет их адреса в массив 95 | // 96 | // Параметры: 97 | // МассивАдресов - Массив - Выходной параметр с массивом адресов подключаемых файлов 98 | // Поле - ПолеФормы - Поле формы, к которому подключаем файлы 99 | //@skip-warning 100 | Процедура ПриОпределенииПодключаемыхФайлов(МассивАдресов, Поле) 101 | 102 | КонецПроцедуры 103 | 104 | // Добавляет элементы ХТМЛ документа, переданные в параметре МассивПодключаемыхФайлов 105 | // 106 | // Параметры: 107 | // МассивПодключаемыхФайлов - Массив - см. СтруктураПодключаемогоФайла 108 | // Поле - ПолеФормы - Поле формы, в котором производится операция 109 | Процедура ПодключитьФайлы(Знач МассивПодключаемыхФайлов, Знач Поле) 110 | 111 | //@skip-warning 112 | Форма = НайтиФормуЭлемента(Поле); 113 | 114 | ТекстСтраницы = Вычислить("Форма." + Поле.ПутьКДанным); 115 | Если ПустаяСтрока(ТекстСтраницы) Тогда 116 | Документ = НовыйДокументХТМЛ(); 117 | Иначе 118 | Документ = ТекстВДокументХТМЛ(ТекстСтраницы); 119 | КонецЕсли; 120 | 121 | Для Каждого текФайл Из МассивПодключаемыхФайлов Цикл 122 | ВыполнитьПодключениеФайла(Документ, текФайл); 123 | КонецЦикла; 124 | 125 | Выполнить("Форма." + Поле.ПутьКДанным + " = ДокументХТМЛВТекст(Документ);"); 126 | 127 | КонецПроцедуры // ПодключитьФайлы() 128 | 129 | // см. ПодключитьФайлы 130 | // 131 | // Параметры: 132 | // Документ - ДокументHTML - 133 | // СтруктураПодключения - Структура - 134 | Процедура ВыполнитьПодключениеФайла(Документ, СтруктураПодключения) 135 | ПодключаемыйЭлемент = Документ.СоздатьЭлемент(СтруктураПодключения.ИмяТега); 136 | Для Каждого текАтрибут Из СтруктураПодключения.Атрибуты Цикл 137 | ПодключаемыйЭлемент.УстановитьАтрибут(текАтрибут.Ключ, текАтрибут.Значение); 138 | КонецЦикла; 139 | НайденныеУзлы = Документ.ПолучитьЭлементыПоИмени("HEAD"); 140 | Если СтруктураПодключения.ПодключатьВЗаголовке 141 | И НайденныеУзлы.Количество() Тогда 142 | Родитель = НайденныеУзлы.Элемент(0); 143 | Иначе 144 | Родитель = Документ.ЭлементДокумента; 145 | КонецЕсли; 146 | Родитель.ДобавитьДочерний(ПодключаемыйЭлемент); 147 | КонецПроцедуры 148 | 149 | #КонецОбласти 150 | 151 | #Область СлужебныеПроцедурыИФункции 152 | 153 | // Возвращает форму владелец переданного элемента 154 | // 155 | // Параметры: 156 | // Поле - ПолеФормы 157 | // 158 | // Возвращаемое значение: 159 | // ФормаКлиентскогоПриложения 160 | // 161 | Функция НайтиФормуЭлемента(Поле) Экспорт 162 | 163 | Родитель = Поле.Родитель; 164 | Если ТипЗнч(Родитель) = Тип("ФормаКлиентскогоПриложения") Тогда 165 | Возврат Родитель; 166 | Иначе 167 | Возврат НайтиФормуЭлемента(Родитель); 168 | КонецЕсли; 169 | 170 | КонецФункции // НайтиФормуЭлемента() 171 | 172 | // Возвращает новый пустой Документ HTML. Добавляет теги HEAD и BODY 173 | // 174 | // Возвращаемое значение: 175 | // ДокументHTML - 176 | // 177 | Функция НовыйДокументХТМЛ() 178 | 179 | Документ = Новый ДокументHTML; 180 | УзелХЕАД = Документ.СоздатьЭлемент("HEAD"); 181 | УзелБАДИ = Документ.СоздатьЭлемент("BODY"); 182 | Документ.ЭлементДокумента.ДобавитьДочерний(УзелХЕАД); 183 | Документ.ЭлементДокумента.ДобавитьДочерний(УзелБАДИ); 184 | Возврат Документ; 185 | 186 | КонецФункции // НовыйДокументХТМЛ() 187 | 188 | // Возвращает структуру настроек, для подключения файла к документу 189 | // 190 | // Параметры: 191 | // АдресФайла - Строка - Описание 192 | // Возвращаемое значение: 193 | // Структура - Описание 194 | Функция СтруктураПодключаемогоФайла(АдресФайла = "",ИмяТега = "script", ПодключатьВЗаголовке = Ложь) 195 | Результат = Новый Структура; 196 | Результат.Вставить("ПодключатьВЗаголовке", ПодключатьВЗаголовке); 197 | Результат.Вставить("ИмяТега", ИмяТега); 198 | Результат.Вставить("Текст", ""); 199 | Результат.Вставить("Атрибуты", Новый Структура); 200 | Если Не ПустаяСтрока(АдресФайла) Тогда 201 | Результат.Атрибуты.Вставить("src", АдресФайла); 202 | КонецЕсли; 203 | Возврат Результат; 204 | КонецФункции 205 | 206 | 207 | 208 | #КонецОбласти 209 | -------------------------------------------------------------------------------- /src/CommonModules/пс_Скрипты/пс_Скрипты.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | пс_Скрипты 4 | 5 | ru 6 | Скрипты 7 | 8 | (JS) 9 | true 10 | true 11 | true 12 | 13 | -------------------------------------------------------------------------------- /src/CommonModules/пс_СкриптыВызовСервера/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | //получение значений параметров клиента, требующих дызов сервера 3 | // 4 | // Параметры: 5 | // Обработчики - Соответствие - ключ = имя параметра, Значение процедура обработчик, возвращающий значение 6 | // 7 | // Возвращаемое значение: 8 | // Соответстие - соответствие Ключ = имя параметра, значение = значение 9 | // 10 | Функция УстановкаПараметровКлиента(Обработчики) Экспорт 11 | 12 | Результат = Новый Соответствие; 13 | 14 | Для Каждого текОбработчик Из Обработчики Цикл 15 | Результат.Вставить(текОбработчик.Ключ, Вычислить(СтрШаблон("%1()", текОбработчик.Значение))); 16 | КонецЦикла; 17 | 18 | Возврат Результат 19 | 20 | КонецФункции // УстановкаПараметровКлиента() 21 | 22 | // Производит запись данных в журнал регистрации 23 | // 24 | // Параметры: 25 | // Событие - Соответствие - данные, полученные из js, для записи в журнал регистрации ("message", "eventName", "level") 26 | // 27 | Процедура ОбработкаСобытияЗаписьЖурналаРегистрации(Событие) Экспорт 28 | 29 | Сообщение = Событие.Получить("message"); 30 | Если Сообщение = Неопределено Тогда 31 | Возврат; 32 | Иначе 33 | Сообщение = Сообщение.value; 34 | КонецЕсли; 35 | 36 | ИмяСобытия = Событие.Получить("eventName"); 37 | Если ИмяСобытия <> Неопределено Тогда 38 | ИмяСобытия = ИмяСобытия.value; 39 | КонецЕсли; 40 | 41 | Уровень = Событие.Получить("level"); 42 | Если Уровень = Неопределено Тогда 43 | Уровень = УровеньЖурналаРегистрации.Информация; 44 | Иначе 45 | Уровень = СоответствиеУровнейЗаписиЖурнала().Получить(Уровень.value); 46 | Если Уровень = Неопределено Тогда 47 | Уровень = УровеньЖурналаРегистрации.Информация; 48 | КонецЕсли; 49 | КонецЕсли; 50 | 51 | ЗаписьЖурнала(Сообщение, ИмяСобытия, Уровень); 52 | 53 | КонецПроцедуры // ОбработкаСобытияЗаписьЖурналаРегистрации() 54 | 55 | Процедура ПоместитьВСерверныйКэш(Ключ, Значение) Экспорт 56 | УстановитьПривилегированныйРежим(Истина); 57 | ХранилищеОбщихНастроек.Сохранить(Ключ,,Значение); 58 | КонецПроцедуры 59 | 60 | Функция ПолучитьИзСерверногоКэша(Ключ) Экспорт 61 | УстановитьПривилегированныйРежим(Истина); 62 | Возврат ХранилищеОбщихНастроек.Загрузить(Ключ); 63 | КонецФункции 64 | 65 | 66 | // Возвращает соответствие ключа и значение уровня журнала, для записи логов 67 | // 68 | // Возвращаемое значение: 69 | // Соответствие - 70 | // 71 | Функция СоответствиеУровнейЗаписиЖурнала() 72 | 73 | Результат = Новый Соответствие; 74 | Результат.Вставить("info", УровеньЖурналаРегистрации.Информация); 75 | Результат.Вставить("Информация", УровеньЖурналаРегистрации.Информация); 76 | Результат.Вставить("error", УровеньЖурналаРегистрации.Ошибка); 77 | Результат.Вставить("Ошибка", УровеньЖурналаРегистрации.Ошибка); 78 | Результат.Вставить("warning", УровеньЖурналаРегистрации.Предупреждение); 79 | Результат.Вставить("Предупреждение", УровеньЖурналаРегистрации.Предупреждение); 80 | Результат.Вставить("Note", УровеньЖурналаРегистрации.Примечание); 81 | Результат.Вставить("Примечание", УровеньЖурналаРегистрации.Примечания); 82 | 83 | Возврат Результат; 84 | 85 | КонецФункции // СоответствиеУровнейЗаписиЖурнала() 86 | 87 | // Записывает логи в журнал регистрации 88 | // 89 | // Параметры: 90 | // Сообщение - Строка - текст сообщения логирования 91 | // ИмяСобытия - имя события журнала регистрации 92 | // Уровень - Строка - уровень записи журнала 93 | // 94 | Процедура ЗаписьЖурнала(Сообщение, ИмяСобытия = "Информация", Уровень = Неопределено) 95 | 96 | Если Уровень = Неопределено Тогда 97 | Уровень = УровеньЖурналаРегистрации.Информация; 98 | КонецЕсли; 99 | Если ПустаяСтрока(ИмяСобытия) Тогда 100 | ИмяСобытия = "Информация"; 101 | КонецЕсли; 102 | ЗаписьЖурналаРегистрации(СтрШаблон("ПодключаемыеСкрипты.%1", ИмяСобытия), Уровень,,,Сообщение); 103 | 104 | КонецПроцедуры // ЗаписьЖурнала() 105 | 106 | Функция АдресОсновногоРасширенияСкриптов() Экспорт 107 | Возврат пс_СкриптыСерверПовтИсп.АдресОсновногоРасширенияСкриптов(); 108 | КонецФункции 109 | 110 | Функция НавигационнаяойСсылкаВременногоХранилища(АдресВременногоХранилища) Экспорт 111 | СсылкаБазы = ПолучитьНавигационнуюСсылкуИнформационнойБазы(); 112 | ПрефиксАдреса = КодироватьСтроку(СсылкаБазы, СпособКодированияСтроки.URLВКодировкеURL) + "/"; 113 | Возврат ПрефиксАдреса + АдресВременногоХранилища; 114 | КонецФункции 115 | 116 | -------------------------------------------------------------------------------- /src/CommonModules/пс_СкриптыВызовСервера/пс_СкриптыВызовСервера.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | пс_СкриптыВызовСервера 4 | 5 | ru 6 | Скрипты вызов сервера 7 | 8 | (JS) 9 | true 10 | true 11 | 12 | -------------------------------------------------------------------------------- /src/CommonModules/пс_СкриптыКлиент/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | #Область ОбщегоНазначения 3 | 4 | // Процедура инициализирует глобальную переменную для кеширования данных на клиенте 5 | // 6 | Процедура ПередНачаломРаботыСистемы() Экспорт 7 | 8 | пс_ПараметрыПриложения = Новый Соответствие; 9 | 10 | Обработчики = ПолучитьОбработчикиПолученияПараметров(); 11 | 12 | // Установка параметров, требующих вызов сервера 13 | РезультатОбработкиНаСервере = пс_СкриптыВызовСервера.УстановкаПараметровКлиента(Обработчики); 14 | Для Каждого текПараметр Из РезультатОбработкиНаСервере Цикл 15 | пс_ПараметрыПриложения.Вставить(текПараметр.Ключ, текПараметр.Значение); 16 | КонецЦикла; 17 | 18 | КонецПроцедуры 19 | 20 | // Возвращает сохранённое значение из хранилища на клиенте 21 | // Значение получается по переданному ключу 22 | // 23 | // Параметры: 24 | // Ключ - Любой - Ключ, для поиска значения в глобальном кеше 25 | // 26 | // Возвращаемое значение: 27 | // Любой - Значение, сохранённое в глобальной клиентской переменной пс_ПараметрыПриложения 28 | // 29 | Функция ПолучитьИзКэша(Ключ) Экспорт 30 | 31 | Возврат пс_ПараметрыПриложения[Ключ]; 32 | 33 | КонецФункции 34 | 35 | // сохраняет значение в клиентком кэше 36 | // 37 | // Параметры: 38 | // Ключ - Любой - Ключ для сохранения настройки 39 | // Значение - Любой - значение для сохранения в клиентском кэше 40 | // 41 | Процедура ПоместитьВКэш(Ключ, Значение) Экспорт 42 | 43 | пс_ПараметрыПриложения[Ключ] = Значение; 44 | 45 | КонецПроцедуры 46 | 47 | // Возвращает сохранённые данные формы. 48 | // 49 | // Параметры: 50 | // Форма - ФормаКлиентскогоПриложения - Форма, для который необходимо получить кэш 51 | // 52 | // Возвращаемое значение: 53 | // Соответствие - Хранилище для кеширование данных формы 54 | // 55 | Функция ПолучитьКешФормы(Форма) Экспорт 56 | КлючНастройки = СтрШаблон("КешФормы.%1", Форма.УникальныйИдентификатор); 57 | Кеш = пс_ПараметрыПриложения[КлючНастройки]; 58 | Если Кеш = Неопределено Тогда 59 | Кеш = Новый Соответствие; 60 | ПоместитьКешФормы(Форма ,Кеш); 61 | КонецЕсли; 62 | Возврат Кеш; 63 | КонецФункции 64 | 65 | //Сохраняет данные формы в клиентской переменной пс_ПараметрыПриложения. 66 | // 67 | // Параметры: 68 | // Форма - ФормаКлиентскогоПриложения - Форма, для который необходимо сохранить кэш 69 | // Кеш - Соответствие - Данные, которые буут сохранены в хранилище 70 | // 71 | Процедура ПоместитьКешФормы(Форма, Кеш) Экспорт 72 | КлючНастройки = СтрШаблон("КешФормы.%1", Форма.УникальныйИдентификатор); 73 | пс_ПараметрыПриложения[КлючНастройки] = Кеш; 74 | КонецПроцедуры 75 | 76 | // Удаляет данные формы их хранилища 77 | // 78 | // Параметры: 79 | // Форма - ФормаКлиентскогоПриложения - Форма, для которой необходимо очистить хранилище 80 | // 81 | Процедура ОчиститьКешФормы(Форма) Экспорт 82 | КлючНастройки = СтрШаблон("КешФормы.%1", Форма.УникальныйИдентификатор); 83 | пс_ПараметрыПриложения.Удалить(КлючНастройки); 84 | КонецПроцедуры 85 | 86 | // Возвращает данные, сохранённые для переданного поля 87 | // 88 | // Параметры: 89 | // Ключ - Любой - Ключ для получения сохранённого значения 90 | // если передано неопределено, то будет возвращено соответствие со всеми сохранёнными данными 91 | // если передан ключ, то будет возращено значение по переданному ключу. 92 | // Поле - ПолеФормы - Поле, для которого будет получен кэш 93 | // Если передано неопределено, то будет получено поле из переменной пс_ПараметрыПриложения["ПолеПоУмолчанию"] 94 | // 95 | // Возвращаемое значение: 96 | // Соответствие, Любой - полный кэш формы, либо конкретное значение 97 | // 98 | Функция ПолучитьКешПоля(Ключ = Неопределено, Знач Поле = Неопределено) Экспорт 99 | Поле = ПолучитьПолеХТМЛ(Поле); 100 | Форма = НайтиФормуЭлемента(Поле); 101 | КешФормы = ПолучитьКешФормы(Форма); 102 | КешПоля = КешФормы[Поле.Имя]; 103 | Если КешПоля = Неопределено Тогда 104 | КешПоля = Новый Соответствие(); 105 | КешФормы[Поле.имя] = КешПоля; 106 | ПоместитьКешФормы(Форма, КешФормы); 107 | КонецЕсли; 108 | Если Ключ = Неопределено Тогда 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 | Результат.Вставить("АдресОсновногоРасширенияСкриптов", "пс_СкриптыСерверПовтИсп.АдресОсновногоРасширенияСкриптов"); 144 | Результат.Вставить("АдресАдресСкриптаРедактораКода", "пс_СкриптыСерверПовтИсп.АдресСкриптаРедактораКода"); 145 | Результат.Вставить("АдресРедактораКода", "пс_СкриптыСерверПовтИсп.АдресРедактораКода"); 146 | Возврат Результат; 147 | 148 | КонецФункции // ПолучитьОбработчикиПолученияПараметров() 149 | 150 | 151 | 152 | #КонецОбласти 153 | 154 | #Область КешированиеПоляИнтерпритатора 155 | 156 | // Сохраняет поле формы с видом "ПолеХТМЛ" для использования как поле по умолчанию. 157 | // 158 | // Параметры: 159 | // Поле - ПолеФормы - поле, которое будет использоваться по умолчанию 160 | // Тоесть в случае, когда в методы подсистемы параметр Поле не передаётся 161 | // 162 | Процедура УстановитьПолеХТМЛПоУмолчанию(Поле) Экспорт 163 | 164 | пс_ПараметрыПриложения["ПолеПоУмолчанию"] = Поле; 165 | 166 | КонецПроцедуры // УстановитьПолеХТМЛПоУмолчанию() 167 | 168 | // Возвращает ранее сохранённое поле по умолчанию 169 | // 170 | // Возвращаемое значение: 171 | // ПолеФормы, Неопределено - Значение поля по умолчанию 172 | // 173 | Функция ПолучитьПолеХТМЛПоУмолчанию() Экспорт 174 | 175 | Возврат пс_ПараметрыПриложения["ПолеПоУмолчанию"]; 176 | 177 | КонецФункции // ПолучитьПолеХТМЛПоУмолчанию() 178 | 179 | #КонецОбласти 180 | 181 | #Область ДиалогиВзаимодействия 182 | 183 | // Вызывает оповещение пользователя, с помощью javascript метода alert 184 | // 185 | // Параметры: 186 | // текстСообщения - Строка - текст сообщения, который будет показан пользователю 187 | // ВычисляемоеСообщение - Булево - Если передано Ложь, то сообщение показывается как есть. 188 | // Если перено Истина, то текст сообщения будет вычислен в контексте "self" 189 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 190 | // 191 | Процедура СообщитьСкриптом(Знач текстСообщения, ВычисляемоеСообщение = Ложь, Поле = Неопределено) Экспорт 192 | 193 | Если ВычисляемоеСообщение Тогда 194 | Команда = СтрШаблон("alert(eval(%1))",текстСообщения); 195 | Иначе 196 | Команда = СтрШаблон("alert('%1')", текстСообщения); 197 | КонецЕсли; 198 | ВыполнитьКоманду(Команда, Поле); 199 | 200 | КонецПроцедуры // СообщитьСкриптом() 201 | 202 | // Вызывает вопрос пользователю, с помощью javascript метода confirm 203 | // 204 | // Параметры: 205 | // текстВопроса - Строка - текст вопроса, который будет показан пользователю 206 | // ВычисляемоеСообщение - Булево - Если передано Ложь, то текст вопроса показывается как есть. 207 | // Если перено Истина, то текст вопроса будет вычислен в контексте "self" 208 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 209 | // 210 | // Возвращаемое значение: 211 | // Булево - Истина, если была нажата кнопка Ok, в остальных случаях вернёт Ложь 212 | // 213 | Функция ВопросДаНет(Знач текстВопроса, ВычисляемоеСообщение = Ложь, Поле = Неопределено) Экспорт 214 | 215 | Если ВычисляемоеСообщение Тогда 216 | Команда = СтрШаблон("confirm(eval(%1))",текстВопроса); 217 | Иначе 218 | Команда = СтрШаблон("confirm('%1')", текстВопроса); 219 | КонецЕсли; 220 | Возврат ВыполнитьКоманду(Команда, Поле); 221 | 222 | КонецФункции // ВопросДаНет() 223 | 224 | #КонецОбласти 225 | 226 | #Область Команды 227 | 228 | // Выполняет переданное выражение javascript в глобальном контексте self. 229 | // для вычисления выражения ипользуется переданное поле формы или поле по умолчанию 230 | // 231 | // Параметры: 232 | // ТекстСкрипта - Строка - текст выражения на языке javascript. Контекст выполнения "self" 233 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 234 | // 235 | // Возвращаемое значение: 236 | // ВнешнийОбъект, Число, Строка, Булево, Неопределено - Результат вычисления js выражения 237 | // 238 | Функция ВыполнитьКоманду(ТекстСкрипта, Поле = Неопределено) Экспорт 239 | 240 | Результат = ИнтерприаторСкриптов(Поле).adapter.eval(ТекстСкрипта); 241 | ПроверитьОтвет(Результат); 242 | Возврат Результат.result; 243 | 244 | КонецФункции // ВыполнитьКоманду() 245 | 246 | // Выполняет метод объекта по имени. Доступна передача произвольного списка параметров 247 | // Если "Объект" не передан, то выполняется метод глобального контекста 248 | // 249 | // Параметры: 250 | // Объект - ВнешнийОбъект, Неопределено - объект-владелец метода, или неопределено(глобальный контекст) 251 | // ИмяМетода - Строка - имя метода, который необходимо выполнить 252 | // Параметры - Массив, Неопределено - Массив параметров, для выхова метода 253 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 254 | // 255 | // Возвращаемое значение: 256 | // ВнешнийОбъект, Число, Строка, Булево, Неопределено - Результат выполнения метода объекта 257 | // 258 | Функция ВыполнитьМетодОбъекта(Объект = Null, ИмяМетода, Параметры = Неопределено, Поле = Неопределено) Экспорт 259 | 260 | //@skip-warning 261 | Интерпритатор = ИнтерприаторСкриптов(Поле); 262 | Результат = Неопределено; 263 | ШаблонМетода = "Результат = Интерпритатор.methodCall(Объект, ""%1"", %2)"; 264 | Выполнить(СтрШаблон(ШаблонМетода,ИмяМетода, СтрокаПередачиПараметровПоМассиву(Параметры))); 265 | ПроверитьОтвет(Результат); 266 | Возврат Результат.result; 267 | 268 | КонецФункции // ВыполнитьМетодОбъекта() 269 | 270 | // Считывает текущее значение объекта js. Если Объект не передан, то считывается свойство глобального контекста 271 | // 272 | // Параметры: 273 | // Объект - ВнешнийОбъект, Неопределено - Проверяемый контекст 274 | // ИмяСвойства - Строка - Имя проверяемого свойства 275 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 276 | // 277 | // Возвращаемое значение: 278 | // ВнешнийОбъект, Число, Строка, Булево, Неопределено - Значение свойтсва объекта 279 | // 280 | Функция ЗначениеСвойстваОбъекта(Объект = null, ИмяСвойства, Поле = Неопределено) Экспорт 281 | 282 | Результат = ИнтерприаторСкриптов(Поле).propEval(Объект, ИмяСвойства); 283 | ПроверитьОтвет(Результат); 284 | Возврат Результат.result; 285 | 286 | КонецФункции // ЗначениеСвойстваОбъекта() 287 | 288 | // Перехватывает сбытие "ПриНажатии" поля формы. Используется для передачи управления из javascript в 1С 289 | // 290 | // Параметры: 291 | // ДанныеСобытия - ВнешнийОбъект - Значение переменной "ДанныеСобытия" из события "ПриНажатии" поля формы 292 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 293 | // 294 | Процедура ПриНажатии(ДанныеСобытия, Поле = Неопределено) Экспорт 295 | 296 | ИнтерприаторСкриптов(Поле); 297 | Событие = ДанныеСобытия.Event; 298 | Если Событие.eventData1C <> Неопределено Тогда 299 | ОбработатьСобытиеИзСкрипта(Событие, Поле); 300 | КонецЕсли; 301 | 302 | КонецПроцедуры // ПриНажатии() 303 | 304 | // Описание 305 | // 306 | // Параметры: 307 | // РедактируемыйТекст - Строка 308 | // Владелец - 309 | // ОбработчикРезультата - ОписаниеОповещения 310 | // Язык - Строка 311 | Процедура РедактироватьТекст(РедактируемыйТекст, ОбработчикРезультата, Владелец = Неопределено, Язык = "bsl") Экспорт 312 | ПараметрыФормы = Новый Структура; 313 | ПараметрыФормы.Вставить("РедактируемыйТекст", РедактируемыйТекст); 314 | ПараметрыФормы.Вставить("Язык", Язык); 315 | ОткрытьФорму("Обработка.пс_РедакторКода.Форма.Форма", ПараметрыФормы, Владелец,,,,ОбработчикРезультата); 316 | КонецПроцедуры 317 | 318 | #КонецОбласти 319 | 320 | #Область СозданиеОбъектов 321 | 322 | // Создаёт новый массив javascript 323 | // 324 | // Параметры: 325 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 326 | // 327 | // Возвращаемое значение: 328 | // ВнешнийОбъект - Ссылка на массив js 329 | // 330 | Функция НовыйМассив(Поле = Неопределено) 331 | 332 | Возврат ВыполнитьКоманду("[]", Поле); 333 | 334 | КонецФункции // НовыйМассив() 335 | 336 | // Создаёт новый object в javasript 337 | // 338 | // Параметры: 339 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 340 | // 341 | // Возвращаемое значение: 342 | // ВнешнийОбъект - Ссылка на объект js 343 | // 344 | Функция НовыйОбъект(Поле = Неопределено) 345 | 346 | Возврат ВыполнитьКоманду("newObject()", Поле); 347 | 348 | КонецФункции // НовыйОбъект() 349 | 350 | // Создаёт новый массив и присваивает ему имя. Выполняется в глобальном контексте 351 | // 352 | // Параметры: 353 | // Имя - Строка - Имя создаваемого массива 354 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 355 | // 356 | // Возвращаемое значение: 357 | // ВнешнийОбъект - Ссылка на массив js 358 | // 359 | Функция НовыйИменованныйМассив(Имя = "", Поле = Неопределено) Экспорт 360 | 361 | Массив = НовыйМассив(Поле); 362 | Если Не ПустаяСтрока(Имя) Тогда 363 | ИменованиеОбъекта(Имя, Массив, Поле); 364 | КонецЕсли; 365 | Возврат Массив; 366 | 367 | КонецФункции // НовыйИменованныйМассив() 368 | 369 | // Создаёт новый object и присваивает ему имя. Выполняется в глобальном контексте 370 | // 371 | // Параметры: 372 | // Имя - Строка - Имя создаваемого объекта 373 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 374 | // 375 | // Возвращаемое значение: 376 | // ВнешнийОбъект - Ссылка на объект js 377 | // 378 | Функция НовыйИменованныйОбъект(Имя = "", Поле = Неопределено) Экспорт 379 | 380 | Объект = НовыйОбъект(Поле); 381 | Если Не ПустаяСтрока(Имя) Тогда 382 | ИменованиеОбъекта(Имя, Объект, Поле); 383 | КонецЕсли; 384 | Возврат Объект; 385 | 386 | КонецФункции // НовыйИменованныйОбъект() 387 | 388 | // Создаёт новую функцию js. 389 | // 390 | // Параметры: 391 | // Имя - Строка - Имя, которое будет присвоено функции 392 | // ОпределениеМетода - Строка - текст создаваемой процедуры 393 | // Пример: "function(a) { alert(a)}" 394 | // Поле - ПолеФормы - Поле формы, в котором будет создана функция 395 | // 396 | // Возвращаемое значение: 397 | // ВнешнийОбъект - ссылка на созданную функцию js 398 | // 399 | Функция НовыйМетод(Имя = "", ОпределениеМетода, Поле = Неопределено) Экспорт 400 | 401 | Метод = ВыполнитьКоманду(ОпределениеМетода, Поле); 402 | Если Не ПустаяСтрока(Имя) Тогда 403 | ИменованиеОбъекта(Имя, Метод); 404 | КонецЕсли; 405 | Возврат Метод; 406 | 407 | КонецФункции // НовыйМетод() 408 | 409 | // Присваивает имя переданному объекту js. Имя присваивается в глобальном контексте 410 | // 411 | // Параметры: 412 | // Имя - Строка - Имя, которое будет присвоено объекту 413 | // Объект - ВнешнийОбъект - ссылка на объект js, которому необходимо дать имя 414 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 415 | // 416 | Процедура ИменованиеОбъекта(Имя, Объект, Поле = Неопределено) Экспорт 417 | 418 | Результат = ИнтерприаторСкриптов(Поле).giveName(Имя, Объект); 419 | ПроверитьОтвет(Результат); 420 | 421 | КонецПроцедуры // ИменованиеОбъекта() 422 | 423 | #КонецОбласти 424 | 425 | #Область WebSocket 426 | 427 | // Создаёт новый объект вебсокет. Добавляет обработчики событий, если они переданы 428 | // 429 | // Параметры: 430 | // УРЛ - Строка - строка для подключения к WebSocket серверу 431 | // Протокол - Строка - Протокол клиента, используемый при обмене. 432 | // Используется в случае если сервер поддерживает несколько протоколов 433 | // ИмяПеременной - Строка - имя, которое будет присвоено созданному объекту 434 | // ОбработчикСоединение - ОписаниеОповещения - обработчик, который будет вызван при возникновении события "connection" 435 | // ОбработчикОшибки - ОписаниеОповещения - обработчик, который будет вызван при возникновении события "error" 436 | // ОбработчикСообщения - ОписаниеОповещения - обработчик, который будет вызван при возникновении события "message" 437 | // ОбработчикЗакрытия - ОписаниеОповещения - обработчик, который будет вызван при возникновении события "close" 438 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 439 | // 440 | // Возвращаемое значение: 441 | // ВнешнийОбъект - Ссылка на новый объект js WebSocket 442 | // 443 | Функция НовыйВебСокет(УРЛ, Протокол = "", ИмяПеременной = "", ОбработчикСоединение = Неопределено 444 | ,ОбработчикОшибки = Неопределено, ОбработчикСообщения = Неопределено 445 | ,ОбработчикЗакрытия = Неопределено , Поле = Неопределено) Экспорт 446 | 447 | Шаблон = ?(Протокол = "", "new WebSocket('%1') %2","new WebSocket('%1' , '%2')"); 448 | Сокет = ВыполнитьКоманду(СтрШаблон(Шаблон, УРЛ, Протокол), Поле); 449 | Если Не ПустаяСтрока(ИмяПеременной) Тогда 450 | ИменованиеОбъекта(ИмяПеременной, Сокет, Поле); 451 | КонецЕсли; 452 | Если Не ОбработчикСоединение = Неопределено Тогда 453 | Если СтатусСокета(Сокет, Поле) = 1 Тогда 454 | ВыполнитьОбработкуОповещения(ОбработчикСоединение, Истина); 455 | КонецЕсли; 456 | СокетДобавитьОбработчикСоединения(Сокет, ОбработчикСоединение, Поле); 457 | КонецЕсли; 458 | Если Не ОбработчикОшибки = Неопределено Тогда 459 | СокетДобавитьОбработчикОшибки(Сокет, ОбработчикОшибки, Поле); 460 | КонецЕсли; 461 | Если Не ОбработчикСообщения = Неопределено Тогда 462 | СокетДобавитьОбработчикСообщения(Сокет, ОбработчикСообщения, Поле); 463 | КонецЕсли; 464 | Если Не ОбработчикЗакрытия = Неопределено Тогда 465 | СокетДобавитьОбработчикЗакрытия(Сокет, ОбработчикЗакрытия, Поле); 466 | КонецЕсли; 467 | Возврат Сокет; 468 | 469 | КонецФункции // НовыйВебСокет() 470 | 471 | // Возвращает строковое представление текущего состояния веб сокета 472 | // 473 | // Параметры: 474 | // ВебСокет - ВнешнийОбъект - ссылка на объект js с типом WebSocket 475 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 476 | // 477 | // Возвращаемое значение: 478 | // Строка - текущий статус вебсокета 479 | // 480 | Функция СтатусСокета(ВебСокет, Поле = Неопределено) Экспорт 481 | 482 | Статус = ЗначениеСвойстваОбъекта(ВебСокет, "readyState", Поле); 483 | Если Статус = 0 Тогда 484 | Возврат "Соединение"; 485 | ИначеЕсли Статус = 1 Тогда 486 | Возврат "Открыто"; 487 | ИначеЕсли Статус = 2 Тогда 488 | Возврат "Закрывается"; 489 | ИначеЕсли Статус = 3 Тогда 490 | Возврат "Закрыто"; 491 | КонецЕсли; 492 | 493 | КонецФункции // СтатусСокета() 494 | 495 | // Закрывает текущее соединение WebSocket 496 | // 497 | // Параметры: 498 | // ВебСокет - ВнешнийОбъект - ссылка на объект js с типом WebSocket 499 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 500 | // 501 | // Возвращаемое значение: 502 | // Неопределено - Возвращает результат метода WebSocket.close 503 | // 504 | Функция ЗакрытьСокет(ВебСокет, Поле = Неопределено) Экспорт 505 | 506 | Возврат ВыполнитьМетодОбъекта(ВебСокет, "close"); 507 | 508 | КонецФункции // ЗакрытьСокет() 509 | 510 | // Посылает данные на сервер 511 | // 512 | // Параметры: 513 | // ВебСокет - ВнешнийОбъект - ссылка на объект js с типом WebSocket 514 | // Данные - Строка - Сообщение, которое будет отправлено на сервер методом WebSocket.send 515 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 516 | // 517 | // Возвращаемое значение: 518 | // Неопределено - Возвращает результат метода WebSocket.send 519 | // 520 | Функция СокетПослатьДанные(ВебСокет, Данные = "", Поле = Неопределено) Экспорт 521 | 522 | ПараметрыМетода = Новый Массив; 523 | ПараметрыМетода.Добавить(Данные); 524 | Возврат ВыполнитьМетодОбъекта(ВебСокет, "send", ПараметрыМетода, Поле); 525 | 526 | КонецФункции // СокетПослатьДанные() 527 | 528 | // Добавляет подписку на событие "connection" объекта веб сокет. 529 | // 530 | // Параметры: 531 | // ВебСокет - ВнешнийОбъект - ссылка на объект js с типом WebSocket 532 | // Обработчик - ОписаниеОповещения - процедура, которая будет выполнена при возникновении события "connection" 533 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 534 | // 535 | // Возвращаемое значение: 536 | // Неопределено - 537 | // 538 | Функция СокетДобавитьОбработчикСоединения(ВебСокет, Обработчик, Поле = Неопределено) Экспорт 539 | 540 | Возврат ДобавитьОбработчикСобытия(ВебСокет, "open", Обработчик, Поле); 541 | 542 | КонецФункции // СокетДобавитьОбработчикСоединения() 543 | 544 | // Добавляет подписку на событие "error" объекта веб сокет. 545 | // 546 | // Параметры: 547 | // ВебСокет - ВнешнийОбъект - ссылка на объект js с типом WebSocket 548 | // Обработчик - ОписаниеОповещения - процедура, которая будет выполнена при возникновении события "error" 549 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 550 | // 551 | // Возвращаемое значение: 552 | // Неопределено - 553 | // 554 | Функция СокетДобавитьОбработчикОшибки(ВебСокет, Обработчик, Поле = Неопределено) Экспорт 555 | 556 | Возврат ДобавитьОбработчикСобытия(ВебСокет, "error", Обработчик, Поле); 557 | 558 | КонецФункции // СокетДобавитьОбработчикОшибки() 559 | 560 | // Добавляет подписку на событие "message" объекта веб сокет. 561 | // 562 | // Параметры: 563 | // ВебСокет - ВнешнийОбъект - ссылка на объект js с типом WebSocket 564 | // Обработчик - ОписаниеОповещения - процедура, которая будет выполнена при возникновении события "message" 565 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 566 | // 567 | // Возвращаемое значение: 568 | // Неопределено - 569 | // 570 | Функция СокетДобавитьОбработчикСообщения(ВебСокет, Обработчик, Поле = Неопределено) Экспорт 571 | 572 | Возврат ДобавитьОбработчикСобытия(ВебСокет, "message", Обработчик, Поле); 573 | 574 | КонецФункции // СокетДобавитьОбработчикСообщения() 575 | 576 | // Добавляет подписку на событие "close" объекта веб сокет. 577 | // 578 | // Параметры: 579 | // ВебСокет - ВнешнийОбъект - ссылка на объект js с типом WebSocket 580 | // Обработчик - ОписаниеОповещения - процедура, которая будет выполнена при возникновении события "close" 581 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 582 | // 583 | // Возвращаемое значение: 584 | // Неопределено - 585 | // 586 | Функция СокетДобавитьОбработчикЗакрытия(ВебСокет, Обработчик, Поле = Неопределено) Экспорт 587 | 588 | Возврат ДобавитьОбработчикСобытия(ВебСокет, "close", Обработчик, Поле); 589 | 590 | КонецФункции // СокетДобавитьОбработчикЗакрытия() 591 | 592 | #КонецОбласти 593 | 594 | #Область ОбработчикиОжидания 595 | 596 | // Добаляет вызов функции в очередь. Будет выполнен через указанное количество милисекунд 597 | // Добавляет вызов функцией setTimeout 598 | // 599 | // Параметры: 600 | // ОбъектФункцияИлиОпределение - ВнешнийОбъект, Строка - сслыка на функцию или строка 601 | // , в результате вычисления которого получит ссылку на объект функции (ВнешнийОбъект) 602 | // Параметры - Массив, Неопределено - Параметры функции, с которыми будет вызвана функция 603 | // Таймаут - Число - через сколько милисекунд будет вызвана функция 604 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 605 | // 606 | // Возвращаемое значение: 607 | // Число - Идентификатор добавленного таймаута 608 | // 609 | Функция ДобавитьОбработчикОжиданияВнутр(ОбъектФункцияИлиОпределение, Параметры = Неопределено 610 | , Таймаут = 0, Поле = Неопределено) Экспорт 611 | 612 | Если ТипЗнч(ОбъектФункцияИлиОпределение) = Тип("Строка") Тогда 613 | ОбъектФункцияИлиОпределение = НовыйМетод(,ОбъектФункцияИлиОпределение, Поле); 614 | КонецЕсли; 615 | Если Не ТипЗнч(ОбъектФункцияИлиОпределение) = Тип("ВнешнийОбъект") Тогда 616 | ВызватьИсключение "Ожидается внешний объект сооветствующий функции или определение анонимной функции"; 617 | КонецЕсли; 618 | 619 | МенеджерОжиданий = ВыполнитьКоманду("timerManager", Поле); 620 | ПараметрыМетода = Новый Массив; 621 | ПараметрыМетода.Добавить(ОбъектФункцияИлиОпределение); 622 | ПараметрыМетода.Добавить(Таймаут); 623 | Если Параметры <> Неопределено И Параметры.Количество() Тогда 624 | Для Каждого текПараметр Из Параметры Цикл 625 | ПараметрыМетода.Добавить(текПараметр); 626 | КонецЦикла; 627 | КонецЕсли; 628 | Возврат ВыполнитьМетодОбъекта(МенеджерОжиданий, "addTimer", ПараметрыМетода, Поле); 629 | 630 | КонецФункции // ДобавитьОбработчикОжиданияВнутр() 631 | 632 | // Возвращаем массив (js) активных обработчиков ожидания. 633 | // 634 | // Параметры: 635 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 636 | // 637 | // Возвращаемое значение: 638 | // ВнешнийОбъект - Ссылка на массив javascript содержащий идентификаторы активных обработчиков ожиданий. 639 | // 640 | Функция ПолучитьАктивныеОбработчикиОжиданияВнутр(Поле = Неопределено) Экспорт 641 | 642 | Возврат ВыполнитьКоманду("timerManager.getTimers()", Поле); 643 | 644 | КонецФункции // ПолучитьАктивныеОбработчикиОжиданияВнутр() 645 | 646 | // Добавляет вызов функции в очередь. Будет вызываться каждые {Таймаут} милисекунд 647 | // Добавляет вызов функцией setInterval 648 | // 649 | // Параметры: 650 | // ОбъектФункцияИлиОпределение - ВнешнийОбъект, Строка - сслыка на функцию или строка 651 | // , в результате вычисления которого получит ссылку на объект функции (ВнешнийОбъект) 652 | // Параметры - Массив, Неопределено - Параметры функции, с которыми будет вызвана функция 653 | // Таймаут - Число - через сколько милисекунд будет вызвана функция 654 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 655 | // 656 | // Возвращаемое значение: 657 | // Число - Идентификатор добавленного "интервала" 658 | // 659 | Функция ДобавитьОбработчикПовторенияВнутр(ОбъектФункцияИлиОпределение, Параметры = Неопределено 660 | , Таймаут = 0, Поле = Неопределено) Экспорт 661 | 662 | Если ТипЗнч(ОбъектФункцияИлиОпределение) = Тип("Строка") Тогда 663 | ОбъектФункцияИлиОпределение = НовыйМетод(,ОбъектФункцияИлиОпределение, Поле); 664 | КонецЕсли; 665 | Если Не ТипЗнч(ОбъектФункцияИлиОпределение) = Тип("ВнешнийОбъект") Тогда 666 | ВызватьИсключение "Ожидается внешний объект сооветствующий функции или определение анонимной функции"; 667 | КонецЕсли; 668 | 669 | МенеджерОжиданий = ВыполнитьКоманду("timerManager", Поле); 670 | ПараметрыМетода = Новый Массив; 671 | ПараметрыМетода.Добавить(ОбъектФункцияИлиОпределение); 672 | ПараметрыМетода.Добавить(Таймаут); 673 | Если Параметры <> Неопределено И Параметры.Количество() Тогда 674 | Для Каждого текПараметр Из Параметры Цикл 675 | ПараметрыМетода.Добавить(текПараметр); 676 | КонецЦикла; 677 | КонецЕсли; 678 | Возврат ВыполнитьМетодОбъекта(МенеджерОжиданий, "addInterval", ПараметрыМетода, Поле); 679 | 680 | КонецФункции // ДобавитьОбработчикПовторенияВнутр() 681 | 682 | // Возвращаем массив (js) активных "интервалов" 683 | // 684 | // Параметры: 685 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 686 | // 687 | // Возвращаемое значение: 688 | // ВнешнийОбъект - Ссылка на массив javascript содержащий идентификаторы активных "интервалов". 689 | // 690 | Функция ПолучитьАктивныеОбработчикиПовторенияВнутр(Поле = Неопределено) Экспорт 691 | 692 | Возврат ВыполнитьКоманду("timerManager.getIntervals()", Поле); 693 | 694 | КонецФункции // ПолучитьАктивныеОбработчикиПовторенияВнутр() 695 | 696 | // Добавляет подписку к переданному объекту 697 | // 698 | // Параметры: 699 | // ОбъектИлиКодПолученияОбъекта - ВнешнийОбъект, Строка - Ссылка на объект подписки, или выражение, 700 | // которое вернёт ссылку на объект подписки 701 | // МетодИлиОпределениеМетода - ВнешнийОбъект, Строка - Ссылка на метод, или выражение 702 | // ТипСобытия - Строка - Тип события, на которое будет добавлена подписка 703 | // ИспользоватьЗахват - Булево - "useCapture" 704 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 705 | // 706 | // Возвращаемое значение: 707 | // Неопределено - 708 | // 709 | Функция ДобавитьПодпискуНаСобытияВнутр(ОбъектИлиКодПолученияОбъекта, МетодИлиОпределениеМетода 710 | , ТипСобытия = "click", ИспользоватьЗахват = Ложь, Поле = Неопределено) Экспорт 711 | 712 | Если ТипЗнч(ОбъектИлиКодПолученияОбъекта) = Тип("Строка") Тогда 713 | ОбъектИлиКодПолученияОбъекта = ВыполнитьКоманду(ОбъектИлиКодПолученияОбъекта, Поле); 714 | КонецЕсли; 715 | Если Не ТипЗнч(ОбъектИлиКодПолученияОбъекта) = Тип("ВнешнийОбъект") Тогда 716 | ВызватьИсключение "Ожидается внешний объект или определение получения элемента html"; 717 | КонецЕсли; 718 | 719 | Если ТипЗнч(МетодИлиОпределениеМетода) = Тип("Строка") Тогда 720 | МетодИлиОпределениеМетода = ВыполнитьКоманду(МетодИлиОпределениеМетода, Поле); 721 | КонецЕсли; 722 | Если Не ТипЗнч(МетодИлиОпределениеМетода) = Тип("ВнешнийОбъект") Тогда 723 | ВызватьИсключение "Ожидается внешний объект или определение получения элемента html"; 724 | КонецЕсли; 725 | 726 | МенеджерСобытий = ВыполнитьКоманду("eventManager", Поле); 727 | ПараметрыМетода = Новый Массив; 728 | ПараметрыМетода.Добавить(ОбъектИлиКодПолученияОбъекта); 729 | ПараметрыМетода.Добавить(ТипСобытия); 730 | ПараметрыМетода.Добавить(МетодИлиОпределениеМетода); 731 | ПараметрыМетода.Добавить(ИспользоватьЗахват); 732 | Возврат ВыполнитьМетодОбъекта(МенеджерСобытий, "addEventListener", ПараметрыМетода, Поле); 733 | 734 | КонецФункции // ДобавитьПодпискуНаСобытияВнутр() 735 | 736 | // Возвращаем массив (js) активных подписок на события переданного объекта 737 | // 738 | // Параметры: 739 | // Объект - ВнешнийОбъект - Ссылка на объект js 740 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 741 | // 742 | // Возвращаемое значение: 743 | // ВнешнийОбъект - Ссылка на массив javascript содержащий подписки на события переданного объекта 744 | // 745 | Функция ПолучитьАктивныеПодпискиНаСобытияВнутр(Объект = Неопределено, Поле = Неопределено) Экспорт 746 | 747 | Результат = ИнтерприаторСкриптов(Поле).adapter.eventManager.getEventListeners(Объект); 748 | ПроверитьОтвет(Результат); 749 | Возврат Результат.result; 750 | 751 | КонецФункции // ПолучитьАктивныеПодпискиНаСобытияВнутр() 752 | 753 | #КонецОбласти 754 | 755 | #Область СлужебныеФункции 756 | 757 | // Возвращает ссылку на объект window, в котором доступны метода глобального контекста 758 | // 759 | // Параметры: 760 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 761 | // Если поле не передано, то будет использовано поле по умолчанию. 762 | // 763 | // Возвращаемое значение: 764 | // ВнешнийОбъект - Ссылка на объект window 765 | // 766 | Функция ИнтерприаторСкриптов(Знач Поле = Неопределено) Экспорт 767 | 768 | Поле = ПолучитьПолеХТМЛ(Поле); 769 | Контекст = Поле.Документ.defaultView; 770 | Если Контекст = Неопределено Тогда 771 | Контекст = Поле.Документ.parentWindow; 772 | КонецЕсли; 773 | Возврат Контекст; 774 | 775 | КонецФункции // КонтекстВыполнения() 776 | 777 | // Возвращает описание доступного контекста переданной области видимости (объекта) 778 | // 779 | // Параметры: 780 | // ОбластьВидимости - ВнешнийОбъект, Неопределено - Исследуемая область видимости 781 | // Обновить - Булево - Если Ложь, то доступный контекст будет получен из кэша. Иначе будет прочитан. 782 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 783 | // 784 | // Возвращаемое значение: 785 | // Соответствие - Описание доступного контекста 786 | // 787 | //@skip-warning 788 | Функция ПолучитьКонтекст(ОбластьВидимости = Null, Обновить = Ложь, Поле = Неопределено) Экспорт 789 | 790 | ИнтерприаторСкриптов(Поле); 791 | Кэш = пс_ПараметрыПриложения[Поле]; 792 | Если Кэш = Неопределено Тогда 793 | Кэш = Новый Соответствие; 794 | КонецЕсли; 795 | Контекст = Кэш.Получить(ОбластьВидимости); 796 | Если Контекст = Неопределено Тогда 797 | Контекст = Новый Соответствие; 798 | КонецЕсли; 799 | #Если Не ВебКлиент Тогда 800 | Если Не Контекст.Количество() Или Обновить Тогда 801 | Контекст.Очистить(); 802 | РезультатВыполненияСкрипта = ИнтерприаторСкриптов(Поле).adapter.getContext(ОбластьВидимости); 803 | Если РезультатВыполненияСкрипта.error <> Неопределено Тогда 804 | ВызватьИсключение СтрШаблон("{%1, %2} %3",РезультатВыполненияСкрипта.error.line, РезультатВыполненияСкрипта.error.column, РезультатВыполненияСкрипта.error.message); 805 | КонецЕсли; 806 | Чтение = Новый ЧтениеJSON; 807 | Чтение.УстановитьСтроку(РезультатВыполненияСкрипта.result); 808 | РезультатДесериализации = ПрочитатьJSON(Чтение, Ложь); 809 | Для Каждого текИмя Из РезультатДесериализации Цикл 810 | Если Не ЗначениеЗаполнено(ОбластьВидимости) Тогда 811 | текИмя.Вставить("Значение", ИнтерприаторСкриптов(Поле).adapter.eval(текИмя.name).result); 812 | Иначе 813 | текИмя.Вставить("Значение", текИмя.value); 814 | КонецЕсли; 815 | Контекст.Вставить(текИмя.name, текИмя); 816 | КонецЦикла; 817 | Кэш.Вставить(ОбластьВидимости, Контекст); 818 | пс_ПараметрыПриложения.Вставить(Поле, Кэш); 819 | КонецЕсли; 820 | #КонецЕсли 821 | Возврат Контекст; 822 | 823 | КонецФункции // ПолучитьКонтекст() 824 | 825 | // Обработчик событий javascript 826 | // 827 | // Параметры: 828 | // Событие - ВнешнийОбъект - Ссылка на событие. 829 | // Поле - ПолеФормы - Поле формы, в котором будет выполнена процедура 830 | // 831 | Функция ОбработатьСобытиеИзСкрипта(Событие, Поле) 832 | 833 | Данные = Событие.eventData1C; 834 | Если Данные.event = "showMessage" Тогда 835 | Сообщить(Данные.params); 836 | ИначеЕсли Данные.event = "trowError" Тогда 837 | ВызватьИсключение Данные.params; 838 | ИначеЕсли Данные.event = "eventLog" Тогда 839 | // СтруктураСобытия = ПолучитьКонтекст(Данные.params, Истина, Поле); 840 | // пс_СкриптыВызовСервера.ОбработкаСобытияЗаписьЖурналаРегистрации(СтруктураСобытия); 841 | ИначеЕсли Данные.event = "callback1C" Тогда 842 | Обработчик = ПолучитьКешПоля(КлючКешОбработчикаОповещения(Данные.params.idHandler), Поле); 843 | ВыполнитьОбработкуОповещения(Обработчик, Данные.params); 844 | //ИначеЕсли пс_ОбработкаСобытийСкриптовПереопределяемый.ОбработатьСобытие(Событие, Поле) Тогда 845 | // Иначе 846 | // Возврат ПользовательскаяОбработкаСобытий(Событие, Поле); 847 | КонецЕсли; 848 | Возврат Неопределено; 849 | 850 | КонецФункции // ОбработатьСобытиеИзСкрипта() 851 | 852 | // Проверяет ответ js. Если вернулась ошибка, то вызывает исключение с текстом 853 | // 854 | // Параметры: 855 | // Объект - ВнешнийОбъект - Объект, возвращаемый из js, для перехвала исключений 856 | // 857 | Процедура ПроверитьОтвет(Объект) 858 | 859 | Если Объект.error <> Неопределено Тогда 860 | ВызватьИсключение СтрШаблон("{%1, %2} %3",Объект.error.line, Объект.error.column, Объект.error.description); 861 | КонецЕсли; 862 | 863 | КонецПроцедуры // ПроверитьОтвет() 864 | 865 | // Возвращает строку, для передали параметров в вычисляемый метод с произвольным набором параметров 866 | // 867 | // Параметры: 868 | // МассивПараметров - Массив, Неопределено - 869 | // 870 | // Возвращаемое значение: 871 | // Строка - Строка для вызова метода и передачи в него переметров 872 | // 873 | //@skip-warning 874 | Функция СтрокаПередачиПараметровПоМассиву(МассивПараметров) 875 | 876 | ПараметрыСтрока = ""; 877 | Если МассивПараметров <> Неопределено И МассивПараметров.Количество() > 0 Тогда 878 | Для Индекс = 0 По МассивПараметров.ВГраница() Цикл 879 | ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; 880 | КонецЦикла; 881 | ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); 882 | КонецЕсли; 883 | Возврат ПараметрыСтрока; 884 | 885 | КонецФункции // СтрокаПередачиПараметровПоМассиву() 886 | 887 | // Возвращает форму владелец переданного элемента 888 | // 889 | // Параметры: 890 | // Поле - ПолеФормы 891 | // 892 | // Возвращаемое значение: 893 | // ФормаКлиентскогоПриложения 894 | // 895 | Функция НайтиФормуЭлемента(Поле) 896 | 897 | Родитель = Поле.Родитель; 898 | Если ТипЗнч(Родитель) = Тип("ФормаКлиентскогоПриложения") Тогда 899 | Возврат Родитель; 900 | Иначе 901 | Возврат НайтиФормуЭлемента(Родитель); 902 | КонецЕсли; 903 | 904 | КонецФункции // НайтиФормуЭлемента() 905 | 906 | // Возвращает поле хтмл по умолчанию, если поле не передано. 907 | // 908 | // Параметры: 909 | // Поле - ПолеФормы - Поле формы с видом поле хтмл 910 | // 911 | // Возвращаемое значение: 912 | // ПолеФормы - 913 | // 914 | Функция ПолучитьПолеХТМЛ(Поле = Неопределено) 915 | Если Поле = Неопределено Тогда 916 | Поле = ПолучитьПолеХТМЛПоУмолчанию(); 917 | Если Поле = Неопределено Тогда 918 | ВызватьИсключение "Поле документа HTML не удалось определить"; 919 | КонецЕсли; 920 | КонецЕсли; 921 | Возврат Поле; 922 | КонецФункции 923 | 924 | // Возвращает ключ обработчика для сохранения кэша 925 | // 926 | // Параметры: 927 | // ИД - Строка - Уникальный идентификатор обработчика оповещения 928 | // 929 | // Возвращаемое значение: 930 | // Строка - Ключ обработчика 931 | // 932 | Функция КлючКешОбработчикаОповещения(ИД) 933 | Возврат СтрШаблон("ОбработчикиОповещения.%1", ИД); 934 | КонецФункции 935 | 936 | // Добавляет подписку на события javascript, подключает к событию обработчик оповещения 1С 937 | // 938 | // Параметры: 939 | // ОбъектОтслеживания - ВнешнийОбъект - Ссылка на объект прослушки 940 | // Событие - Строка - событие js, на которое добавляется подписка 941 | // Обработчик - ОписаниеОповещения - Обработчик обработки события 942 | // Поле - ПолеФормы - Поле формы с видом поле хтмл 943 | // 944 | // Возвращаемое значение: 945 | // Неопределено - 946 | // 947 | Функция ДобавитьОбработчикСобытия(ОбъектОтслеживания, Событие, Обработчик, Поле = Неопределено) Экспорт 948 | ИДОбработчика = Новый УникальныйИдентификатор; 949 | 950 | ИДДляКэш = КлючКешОбработчикаОповещения(ИДОбработчика); 951 | ПоместитьКешПоля(ИДДляКэш, Обработчик, Поле); 952 | ШаблонМетода = "(eventData) => { eventData.idHandler = '%1'; return sendEvent('callback1C', eventData); }"; 953 | Скрипт = ВыполнитьКоманду(СтрШаблон(ШаблонМетода, ИДОбработчика), Поле); 954 | Возврат ДобавитьПодпискуНаСобытияВнутр(ОбъектОтслеживания, Скрипт, Событие, , Поле); 955 | 956 | КонецФункции // ДобавитьОбработчикСобытия() 957 | 958 | #КонецОбласти 959 | 960 | 961 | -------------------------------------------------------------------------------- /src/CommonModules/пс_СкриптыКлиент/пс_СкриптыКлиент.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | пс_СкриптыКлиент 4 | 5 | ru 6 | Скрипты клиент 7 | 8 | true 9 | true 10 | 11 | -------------------------------------------------------------------------------- /src/CommonModules/пс_СкриптыСерверПовтИсп/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | // При первом обращении помещает двоичные данные во временное хранилише и кеширует на сервере 4 | // 5 | // Возвращаемое значение: 6 | // Строка - Адрес временного хранилища, где лежат двоичные данные подключаемого расширения скриптов 7 | // 8 | Функция АдресОсновногоРасширенияСкриптов() Экспорт 9 | 10 | Скрипт = ПолучитьОбщийМакет("пс_ПодключаемыеСкрипты"); 11 | Поток = Новый ПотокВПамяти; 12 | // отключаем проверку парава "Вывод" 13 | УстановитьПривилегированныйРежим(Истина); 14 | Скрипт.Записать(Поток); 15 | Возврат ПоместитьДанныеВоВременноеХранилище(Поток.ЗакрытьИПолучитьДвоичныеДанные()); 16 | 17 | КонецФункции // АдресОсновногоРасширенияСкриптов() 18 | 19 | 20 | Функция АдресСкриптаРедактораКода() Экспорт 21 | 22 | app = Обработки.пс_РедакторКода.ПолучитьМакет("app"); 23 | // отключаем проверку парава "Вывод" 24 | УстановитьПривилегированныйРежим(Истина); 25 | Чтение = Новый ЧтениеТекста(app.ОткрытьПотокДляЧтения(), КодировкаТекста.UTF8); 26 | ТекстСкрипта = Чтение.Прочитать(); 27 | Чтение.Закрыть(); 28 | 29 | ТекстСкрипта = СтрЗаменить(ТекстСкрипта, "[ts_worker]" 30 | , пс_СкриптыВызовСервера.НавигационнаяойСсылкаВременногоХранилища(АдресВоркераПоИмени("ts_worker"))); 31 | ТекстСкрипта = СтрЗаменить(ТекстСкрипта, "[editor_worker]" 32 | , пс_СкриптыВызовСервера.НавигационнаяойСсылкаВременногоХранилища(АдресВоркераПоИмени("editor_worker"))); 33 | ТекстСкрипта = СтрЗаменить(ТекстСкрипта, "[html_worker]" 34 | , пс_СкриптыВызовСервера.НавигационнаяойСсылкаВременногоХранилища(АдресВоркераПоИмени("html_worker"))); 35 | ТекстСкрипта = СтрЗаменить(ТекстСкрипта, "[json_worker]" 36 | , пс_СкриптыВызовСервера.НавигационнаяойСсылкаВременногоХранилища( АдресВоркераПоИмени("json_worker"))); 37 | ТекстСкрипта = СтрЗаменить(ТекстСкрипта, "[css_worker]" 38 | , пс_СкриптыВызовСервера.НавигационнаяойСсылкаВременногоХранилища(АдресВоркераПоИмени("css_worker"))); 39 | 40 | Поток = Новый ПотокВПамяти; 41 | Запись = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8); 42 | Запись.Записать(ТекстСкрипта); 43 | Запись.Закрыть(); 44 | Возврат ПоместитьДанныеВоВременноеХранилище(Поток.ЗакрытьИПолучитьДвоичныеДанные()); 45 | 46 | КонецФункции 47 | 48 | Функция АдресРедактораКода() Экспорт 49 | 50 | АдресСкрипта = АдресСкриптаРедактораКода(); 51 | Поток = Новый ПотокВПамяти; 52 | // отключаем проверку парава "Вывод" 53 | УстановитьПривилегированныйРежим(Истина); 54 | ХТМЛРедактора = Обработки.пс_РедакторКода.ПолучитьМакет("index"); 55 | ХТМЛРедактора.УстановитьТекст(СтрЗаменить(ХТМЛРедактора.ПолучитьТекст() 56 | , "[АдресСкрипта]", пс_СкриптыВызовСервера.НавигационнаяойСсылкаВременногоХранилища(АдресСкрипта))); 57 | ХТМЛРедактора.Записать(Поток); 58 | АдресРедактора = ПоместитьДанныеВоВременноеХранилище(Поток.ЗакрытьИПолучитьДвоичныеДанные()); 59 | пс_СкриптыВызовСервера.ПоместитьВСерверныйКэш("АдресРедактораКода", АдресРедактора); 60 | Возврат АдресРедактора; 61 | 62 | КонецФункции 63 | 64 | Функция ПоместитьДанныеВоВременноеХранилище(Данные) 65 | Возврат ПоместитьВоВременноеХранилище(Данные, Новый УникальныйИдентификатор); 66 | КонецФункции 67 | 68 | Функция АдресВоркераПоИмени(Имя) 69 | 70 | Воркер = Обработки.пс_РедакторКода.ПолучитьМакет(Имя); 71 | Возврат ПоместитьДанныеВоВременноеХранилище(Воркер); 72 | 73 | КонецФункции 74 | -------------------------------------------------------------------------------- /src/CommonModules/пс_СкриптыСерверПовтИсп/пс_СкриптыСерверПовтИсп.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | пс_СкриптыСерверПовтИсп 4 | 5 | ru 6 | Общего назначения сервер повт исп 7 | 8 | true 9 | true 10 | true 11 | DuringSession 12 | 13 | -------------------------------------------------------------------------------- /src/CommonPictures/пс_РазделСкрипты/Picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DimaSSV/JavaScriptControl/1c3af640a39881dd70010c5dd5bd78436ae3afd7/src/CommonPictures/пс_РазделСкрипты/Picture.png -------------------------------------------------------------------------------- /src/CommonPictures/пс_РазделСкрипты/пс_РазделСкрипты.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | пс_РазделСкрипты 4 | 5 | ru 6 | Скрипты (JS) 7 | 8 | true 9 | true 10 | 11 | -------------------------------------------------------------------------------- /src/CommonTemplates/пс_ПодключаемыеСкрипты/Template.txt: -------------------------------------------------------------------------------- 1 | 2 | 'use strict'; 3 | 4 | 5 | // переопределение подписок на события 6 | (() => { 7 | EventTarget.prototype.eventListenerList = {}; 8 | EventTarget.prototype._addEventListener = EventTarget.prototype.addEventListener; 9 | 10 | EventTarget.prototype.addEventListener = function (type, listener, useCapture) { 11 | var target; 12 | if (!this) { 13 | target = self; 14 | } else { 15 | target = this; 16 | }; 17 | target._addEventListener(type, listener, useCapture); 18 | if (!EventTarget.prototype.eventListenerList[target]) 19 | EventTarget.prototype.eventListenerList[target] = {}; 20 | 21 | if (!EventTarget.prototype.eventListenerList[target][type]) 22 | EventTarget.prototype.eventListenerList[target][type] = []; 23 | 24 | EventTarget.prototype.eventListenerList[target][type].push({ 25 | func: listener, 26 | remove: function () { 27 | target.removeEventListener(type, this.func, useCapture); 28 | } 29 | }); 30 | }; 31 | 32 | EventTarget.prototype._removeEventListener = EventTarget.prototype.removeEventListener; 33 | EventTarget.prototype.removeEventListener = function (type, listener, useCapture) { 34 | var target; 35 | if (!this) { 36 | target = self; 37 | } else { 38 | target = this; 39 | }; 40 | if (!EventTarget.prototype.eventListenerList[target]) 41 | EventTarget.prototype.eventListenerList[target] = {}; 42 | 43 | if (!EventTarget.prototype.eventListenerList[target][type]) 44 | EventTarget.prototype.eventListenerList[target][type] = []; 45 | target._removeEventListener(type, listener, useCapture); 46 | target.eventListenerList[target][type].splice(target.eventListenerList[target][type].indexOf(listener), 1); 47 | }; 48 | })(); 49 | 50 | // класс для управления событиями 51 | self.adapter = { 52 | addEventListener: function (target, type, listener, useCapture) { 53 | try { 54 | return resultSuccess(target.addEventListener(type, listener, useCapture)); 55 | } catch (error) { 56 | return resultError(error); 57 | } 58 | }, 59 | getEventListeners: function (target) { 60 | if (!target) { 61 | target = self; 62 | } 63 | if (!target.eventListenerList[target]) { 64 | target.eventListenerList[target] = {} 65 | } 66 | try { 67 | return resultSuccess(target.eventListenerList[target]); 68 | } catch (error) { 69 | return resultError(error); 70 | } 71 | } 72 | } 73 | 74 | // класс для управления обработчиками ожидания 75 | self.adapter.timerManager = { 76 | timers : [], 77 | intervals : [], 78 | addTimer(callback, timeout, ...args) { 79 | try { 80 | var timer, that = this; 81 | timer = setTimeout(function () { 82 | that.removeTimer(timer); 83 | callback(...args); 84 | }, timeout); 85 | this.timers.push({ 86 | id: timer, 87 | func: callback, 88 | timeout: timeout, 89 | remove: function () { 90 | that.removeTimer(timer) 91 | } 92 | }); 93 | return resultSuccess(timer); 94 | } catch (error) { 95 | return resultError(error) 96 | } 97 | 98 | }, 99 | addInterval(callback, timeout, ...args) { 100 | try { 101 | var interval, that = this; 102 | interval = setInterval(function () { 103 | callback(...args); 104 | }, timeout); 105 | this.intervals.push({ 106 | id: interval, 107 | func: callback, 108 | timeout: timeout, 109 | remove: function () { 110 | that.removeInterval(interval) 111 | } 112 | }); 113 | return resultSuccess(interval); 114 | } catch (error) { 115 | return resultError(error) 116 | } 117 | }, 118 | removeTimer(timer) { 119 | clearTimeout(timer); 120 | this.timers.splice(this.timers.indexOf(this.timers.find(el => el.id === timer)), 1); 121 | }, 122 | removeInterval(interval) { 123 | clearInterval(interval); 124 | this.intervals.splice(this.intervals.indexOf(this.intervals.find(el => el.id === interval)), 1); 125 | }, 126 | getTimers() { 127 | return this.timers; 128 | }, 129 | getIntervals() { 130 | return this.intervals; 131 | } 132 | } 133 | 134 | 135 | 136 | self.adapter.eval = (paramToEval) => { 137 | try { 138 | return resultSuccess(eval(paramToEval)) 139 | } catch (error) { 140 | error.description = error.toString() 141 | return resultError(error) 142 | } 143 | } 144 | 145 | self.adapter.giveName = (name, object) => { 146 | try { 147 | self[name] = object 148 | return resultSuccess(object) 149 | } catch (error) { 150 | error.description = error.toString() 151 | return resultError(error) 152 | } 153 | } 154 | 155 | self.adapter.newObject = () => { 156 | return {} 157 | } 158 | 159 | self.adapter.sendEvent = (eventName, eventParams) => { 160 | let newEvent = new MouseEvent('click') 161 | newEvent.eventData1C = { event: eventName, params: eventParams } 162 | return dispatchEvent(newEvent) 163 | } 164 | 165 | self.adapter.log1C = (message, eventName, level = 'info') => { 166 | return sendEvent('eventLog', { message: message, eventName: eventName, level: level }) 167 | } 168 | 169 | self.adapter.error1C = (errorMessage) => { 170 | return sendEvent('trowError', errorMessage) 171 | } 172 | 173 | self.adapter.message1C = (message) => { 174 | return sendEvent('showMessage', message) 175 | } 176 | 177 | self.adapter.Dir = (object) => { 178 | try { 179 | stuff = []; 180 | for (const s in object) { 181 | stuff.push(s); 182 | } 183 | stuff.sort(); 184 | return resultSuccess(stuff); 185 | } catch (error) { 186 | error.description = error.toString() 187 | return resultError(error) 188 | } 189 | 190 | } 191 | 192 | self.adapter.objToString = (obj) => { 193 | try { 194 | return resultSuccess(obj.toString()) 195 | } catch (error) { 196 | error.description = error.toString() 197 | return resultError(error) 198 | } 199 | } 200 | 201 | self.adapter.getContext = (obj = null) => { 202 | 203 | if (obj === null) { 204 | obj = self 205 | } 206 | let response = []; 207 | try { 208 | for (const key in obj) { 209 | if (key != 'webkitStorageInfo') { 210 | try { 211 | response.push({ name: key, type: typeof obj[key], value: (!obj[key]) ? null : obj[key].toString() }) 212 | } catch (error) { 213 | //return resultError(error) 214 | } 215 | } 216 | } 217 | return resultSuccess(JSON.stringify(response)) 218 | } catch (error) { 219 | error.description = error.toString() 220 | return resultError(error) 221 | } 222 | } 223 | 224 | self.adapter.methodCall = (object = null, methodName, ...params) => { 225 | if (object === null) { 226 | object = self 227 | } 228 | try { 229 | return resultSuccess(object[methodName](...params)) 230 | } catch (error) { 231 | error.description = error.toString() 232 | return resultError(error) 233 | } 234 | } 235 | 236 | self.adapter.propEval = (object = null, propertyName) => { 237 | if (object === null) { 238 | object = self 239 | } 240 | try { 241 | return resultSuccess(object[propertyName]) 242 | } catch (error) { 243 | error.description = error.toString() 244 | return resultError(error) 245 | } 246 | } 247 | 248 | self.adapter.getFullHTML = () => { 249 | return document.getElementsByTagName("HTML")[0].innerHTML 250 | } 251 | 252 | 253 | //#region results 254 | 255 | self.result = (obj = null, error = '') => { 256 | return { result: obj, error: error }; 257 | } 258 | 259 | self.resultError = (e) => { 260 | return result(null, e); 261 | } 262 | 263 | self.resultSuccess = (o) => { 264 | return result(o, null); 265 | } 266 | 267 | //#endregion 268 | -------------------------------------------------------------------------------- /src/CommonTemplates/пс_ПодключаемыеСкрипты/пс_ПодключаемыеСкрипты.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | пс_ПодключаемыеСкрипты 4 | 5 | ru 6 | Подключаемые скрипты (JS) 7 | 8 | (JS) 9 | TextDocument 10 | 11 | -------------------------------------------------------------------------------- /src/Configuration/Configuration.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | JS 4 | 5 | ru 6 | JS 7 | 8 | Adopted 9 | 10 | Checked 11 | Extended 12 | Checked 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | true 22 | пс_ 23 | 8.3.12 24 | AddOn 25 | PersonalComputer 26 | Russian 27 | Language.Русский 28 | 8.3.18 29 | 30 | Русский 31 | Adopted 32 | 33 | Checked 34 | 35 | ru 36 | 37 | Subsystem.пс_Скрипты 38 | CommonPicture.пс_РазделСкрипты 39 | CommonTemplate.пс_ПодключаемыеСкрипты 40 | CommonModule.пс_СкриптыСерверПовтИсп 41 | CommonModule.пс_Скрипты 42 | CommonModule.пс_СкриптыВызовСервера 43 | CommonModule.пс_СкриптыКлиент 44 | CommonModule.пс_РаботаСФайламиКлиент 45 | CommonForm.пс_ФормаПрогрессаЗагрузкиФайлов 46 | DataProcessor.пс_Тестирование 47 | DataProcessor.пс_РедакторКода 48 | 49 | -------------------------------------------------------------------------------- /src/Configuration/ExternalConnectionModule.bsl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DimaSSV/JavaScriptControl/1c3af640a39881dd70010c5dd5bd78436ae3afd7/src/Configuration/ExternalConnectionModule.bsl -------------------------------------------------------------------------------- /src/Configuration/ManagedApplicationModule.bsl: -------------------------------------------------------------------------------- 1 | #Область ОписаниеПеременных 2 | 3 | // Хранилище глобальных переменных. 4 | // 5 | // ПараметрыПриложения - Соответствие - хранилище переменных, где: 6 | // * Ключ - Строка - имя переменной в формате "ИмяБиблиотеки.ИмяПеременной"; 7 | // * Значение - Произвольный - значение переменной. 8 | // 9 | // Инициализация (на примере СообщенияДляЖурналаРегистрации): 10 | // ИмяПараметра = "СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"; 11 | // Если пс_ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда 12 | // пс_ПараметрыПриложения.Вставить(ИмяПараметра, Новый СписокЗначений); 13 | // КонецЕсли; 14 | // 15 | // Использование (на примере СообщенияДляЖурналаРегистрации): 16 | // пс_ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"].Добавить(...); 17 | // пс_ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"] = ...; 18 | 19 | // библитека "Подключаемые скрипты" 20 | Перем пс_ПараметрыПриложения Экспорт; 21 | 22 | 23 | 24 | 25 | 26 | #КонецОбласти 27 | 28 | //@skip-warning 29 | &После("ПередНачаломРаботыСистемы") 30 | Процедура пс_ПередНачаломРаботыСистемы(Отказ) 31 | пс_СкриптыКлиент.ПередНачаломРаботыСистемы(); 32 | КонецПроцедуры 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/Configuration/OrdinaryApplicationModule.bsl: -------------------------------------------------------------------------------- 1 | #Область ОписаниеПеременных 2 | 3 | // Хранилище глобальных переменных. 4 | // 5 | // ПараметрыПриложения - Соответствие - хранилище переменных, где: 6 | // * Ключ - Строка - имя переменной в формате "ИмяБиблиотеки.ИмяПеременной"; 7 | // * Значение - Произвольный - значение переменной. 8 | // 9 | // Инициализация (на примере СообщенияДляЖурналаРегистрации): 10 | // ИмяПараметра = "СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"; 11 | // Если пс_ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда 12 | // пс_ПараметрыПриложения.Вставить(ИмяПараметра, Новый СписокЗначений); 13 | // КонецЕсли; 14 | // 15 | // Использование (на примере СообщенияДляЖурналаРегистрации): 16 | // пс_ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"].Добавить(...); 17 | // пс_ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"] = ...; 18 | 19 | // библитека "Подключаемые скрипты" 20 | Перем пс_ПараметрыПриложения Экспорт; 21 | 22 | 23 | 24 | 25 | 26 | #КонецОбласти 27 | 28 | //@skip-warning 29 | &После("ПередНачаломРаботыСистемы") 30 | Процедура пс_ПередНачаломРаботыСистемы(Отказ) 31 | пс_СкриптыКлиент.ПередНачаломРаботыСистемы(); 32 | КонецПроцедуры 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/Configuration/SessionModule.bsl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DimaSSV/JavaScriptControl/1c3af640a39881dd70010c5dd5bd78436ae3afd7/src/Configuration/SessionModule.bsl -------------------------------------------------------------------------------- /src/DataProcessors/пс_РедакторКода/Forms/Форма/Form.form: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Язык 5 | 11 6 | true 7 | true 8 | 9 | true 10 | 11 | 12 | Язык 13 | 14 | 15 | OnChange 16 | ЯзыкПриИзменении 17 | 18 | 19 | ЯзыкРасширеннаяПодсказка 20 | 13 21 | true 22 | true 23 | 24 | true 25 | 26 | Label 27 | true 28 | true 29 | 30 | Left 31 | 32 | 33 | 34 | ЯзыкКонтекстноеМеню 35 | 12 36 | true 37 | true 38 | 39 | true 40 | 41 | true 42 | 43 | InputField 44 | Enter 45 | true 46 | Left 47 | true 48 | 49 | true 50 | true 51 | true 52 | true 53 | true 54 | true 55 | true 56 | 57 | 58 | 59 | ХТМЛ 60 | 1 61 | true 62 | true 63 | 64 | true 65 | 66 | 67 | Объект.ХТМЛ 68 | 69 | None 70 | 71 | ХТМЛРасширеннаяПодсказка 72 | 3 73 | true 74 | true 75 | 76 | true 77 | 78 | Label 79 | true 80 | true 81 | 82 | Left 83 | 84 | 85 | 86 | ХТМЛКонтекстноеМеню 87 | 2 88 | true 89 | true 90 | 91 | true 92 | 93 | 94 | HTMLDocumentField 95 | Enter 96 | true 97 | Left 98 | true 99 | 100 | 101 | DocumentComplete 102 | ХТМЛДокументСформирован 103 | 104 | 50 105 | true 106 | 10 107 | true 108 | true 109 | true 110 | 111 | 112 | 113 | ФормаКоманднаяПанель 114 | -1 115 | 116 | ФормаЗавершитьРедактирование 117 | 14 118 | true 119 | true 120 | 121 | true 122 | 123 | 124 | ФормаЗавершитьРедактированиеРасширеннаяПодсказка 125 | 15 126 | true 127 | true 128 | 129 | true 130 | 131 | Label 132 | true 133 | true 134 | 135 | Left 136 | 137 | 138 | Form.Command.ЗавершитьРедактирование 139 | Auto 140 | true 141 | true 142 | true 143 | UserCmds 144 | Auto 145 | 146 | true 147 | true 148 | 149 | true 150 | 151 | Left 152 | true 153 | 154 | 155 | OnCreateAtServer 156 | ПриСозданииНаСервере 157 | 158 | true 159 | true 160 | Vertical 161 | true 162 | true 163 | true 164 | true 165 | true 166 | 167 | Объект 168 | 1 169 | 170 | DataProcessorObject.пс_РедакторКода 171 | 172 | 173 | true 174 | 175 | 176 | true 177 | 178 |
true
179 |
180 | 181 | Язык 182 | 183 | <key>ru</key> 184 | <value>Язык</value> 185 | 186 | 3 187 | 188 | String 189 | 190 | 191 | 192 | true 193 | 194 | 195 | true 196 | 197 | 198 | 199 | РедактируемыйТекст 200 | 201 | <key>ru</key> 202 | <value>Редактируемый текст</value> 203 | 204 | 4 205 | 206 | String 207 | 208 | 209 | 210 | true 211 | 212 | 213 | true 214 | 215 | 216 | 217 | ЗавершитьРедактирование 218 | 219 | <key>ru</key> 220 | <value>Завершить редактирование</value> 221 | 222 | 3 223 | 224 | true 225 | 226 | 227 | 228 | ЗавершитьРедактирование 229 | 230 | 231 | Auto 232 | 233 | 234 | РедактируемыйТекст 235 | 236 | String 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 |
246 | -------------------------------------------------------------------------------- /src/DataProcessors/пс_РедакторКода/Forms/Форма/Module.bsl: -------------------------------------------------------------------------------- 1 | &НаСервере 2 | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 3 | пс_Скрипты.ИнициализироватьРедакторКода(Элементы.ХТМЛ); 4 | РедактируемыйТекст = СтрЗаменить(Параметры.РедактируемыйТекст, Символы.ПС, "\n"); 5 | РедактируемыйТекст = СтрЗаменить(РедактируемыйТекст, Символы.ВК, "\r"); 6 | РедактируемыйТекст = СтрЗаменить(РедактируемыйТекст, "'", "\'"); 7 | КонецПроцедуры 8 | 9 | &НаКлиенте 10 | Процедура ХТМЛДокументСформирован(Элемент) 11 | Результат = пс_СкриптыКлиент.ВыполнитьКоманду("monaco.languages.getLanguages()", Элементы.ХТМЛ); 12 | Для Каждого текЯзык Из Результат Цикл 13 | Элементы.Язык.СписокВыбора.Добавить(текЯзык.id); 14 | КонецЦикла; 15 | Язык = пс_СкриптыКлиент.ВыполнитьКоманду("scriptEdit.getModel().getLanguageIdentifier().language;", Элементы.ХТМЛ); 16 | пс_СкриптыКлиент.ВыполнитьКоманду(СтрШаблон("scriptEdit.getModel().setValue('%1')", РедактируемыйТекст), 17 | Элементы.ХТМЛ); 18 | КонецПроцедуры 19 | 20 | &НаКлиенте 21 | Процедура ЗавершитьРедактирование(Команда) 22 | Закрыть(пс_СкриптыКлиент.ВыполнитьКоманду("scriptEdit.getModel().getValue()", Элементы.ХТМЛ)); 23 | КонецПроцедуры 24 | &НаКлиенте 25 | Процедура ЯзыкПриИзменении(Элемент) 26 | пс_СкриптыКлиент.ВыполнитьКоманду(СтрШаблон( 27 | "monaco.editor.setModelLanguage(scriptEdit.getModel(),'%1')", Язык), Элементы.ХТМЛ); 28 | КонецПроцедуры -------------------------------------------------------------------------------- /src/DataProcessors/пс_РедакторКода/ManagerModule.bsl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DimaSSV/JavaScriptControl/1c3af640a39881dd70010c5dd5bd78436ae3afd7/src/DataProcessors/пс_РедакторКода/ManagerModule.bsl -------------------------------------------------------------------------------- /src/DataProcessors/пс_РедакторКода/ObjectModule.bsl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DimaSSV/JavaScriptControl/1c3af640a39881dd70010c5dd5bd78436ae3afd7/src/DataProcessors/пс_РедакторКода/ObjectModule.bsl -------------------------------------------------------------------------------- /src/DataProcessors/пс_РедакторКода/Templates/index/Template.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Page Title 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /src/DataProcessors/пс_РедакторКода/пс_РедакторКода.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | пс_РедакторКода 8 | 9 | ru 10 | Редактор кода (JS) 11 | 12 | true 13 | DataProcessor.пс_РедакторКода.Form.Форма 14 | 15 | ХТМЛ 16 | 17 | ru 18 | ХТМЛ 19 | 20 | 21 | String 22 | 23 | 24 | 25 | 26 | 27 | 28 | Форма 29 | 30 | ru 31 | Форма 32 | 33 | PersonalComputer 34 | MobileDevice 35 | 36 | 37 | app 38 | 39 | ru 40 | App 41 | 42 | BinaryData 43 | 44 | 45 | index 46 | 47 | ru 48 | Index 49 | 50 | TextDocument 51 | 52 | 53 | ts_worker 54 | 55 | ru 56 | Ts worker 57 | 58 | BinaryData 59 | 60 | 61 | editor_worker 62 | 63 | ru 64 | Editor worker 65 | 66 | BinaryData 67 | 68 | 69 | html_worker 70 | 71 | ru 72 | Html worker 73 | 74 | BinaryData 75 | 76 | 77 | json_worker 78 | 79 | ru 80 | Json worker 81 | 82 | BinaryData 83 | 84 | 85 | css_worker 86 | 87 | ru 88 | Css worker 89 | 90 | BinaryData 91 | 92 | 93 | -------------------------------------------------------------------------------- /src/DataProcessors/пс_Тестирование/Forms/Форма/Form.form: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Группа1 5 | 4 6 | 7 | ХТМЛ 8 | 1 9 | true 10 | true 11 | 12 | true 13 | 14 | 15 | 16 | ХТМЛ 17 | 18 | 19 | None 20 | 21 | ХТМЛРасширеннаяПодсказка 22 | 3 23 | true 24 | true 25 | 26 | true 27 | 28 | Label 29 | true 30 | true 31 | 32 | Left 33 | 34 | 35 | 36 | ХТМЛКонтекстноеМеню 37 | 2 38 | true 39 | true 40 | 41 | true 42 | 43 | true 44 | 45 | HTMLDocumentField 46 | Enter 47 | true 48 | Left 49 | true 50 | 51 | 52 | OnClick 53 | ХТМЛПриНажатии 54 | 55 | 50 56 | true 57 | 10 58 | true 59 | true 60 | true 61 | 62 | 63 | 64 | Группа3 65 | 47 66 | 67 | ДеревоКонтекста 68 | 6 69 | true 70 | true 71 | 72 | true 73 | 74 | 75 | ДеревоКонтекста 76 | 77 | None 78 | 79 | ДеревоКонтекстаИмя 80 | 19 81 | true 82 | true 83 | 84 | true 85 | 86 | 87 | 88 | ДеревоКонтекста.name 89 | 90 | 91 | 92 | ДеревоКонтекстаИмяРасширеннаяПодсказка 93 | 21 94 | true 95 | true 96 | 97 | true 98 | 99 | Label 100 | true 101 | true 102 | 103 | Left 104 | 105 | 106 | 107 | ДеревоКонтекстаИмяКонтекстноеМеню 108 | 20 109 | true 110 | true 111 | 112 | true 113 | 114 | true 115 | 116 | InputField 117 | true 118 | EnterOnInput 119 | true 120 | Left 121 | true 122 | 123 | true 124 | true 125 | true 126 | true 127 | true 128 | 129 | 130 | 131 | ДеревоКонтекстаТип 132 | 22 133 | true 134 | true 135 | 136 | true 137 | 138 | 139 | 140 | ДеревоКонтекста.type 141 | 142 | 143 | 144 | ДеревоКонтекстаТипРасширеннаяПодсказка 145 | 24 146 | true 147 | true 148 | 149 | true 150 | 151 | Label 152 | true 153 | true 154 | 155 | Left 156 | 157 | 158 | 159 | ДеревоКонтекстаТипКонтекстноеМеню 160 | 23 161 | true 162 | true 163 | 164 | true 165 | 166 | true 167 | 168 | InputField 169 | true 170 | EnterOnInput 171 | true 172 | Left 173 | true 174 | 175 | true 176 | true 177 | true 178 | true 179 | true 180 | 181 | 182 | 183 | ДеревоКонтекстаvalue 184 | 27 185 | true 186 | true 187 | 188 | true 189 | 190 | 191 | 192 | ДеревоКонтекста.value 193 | 194 | 195 | 196 | ДеревоКонтекстаvalueРасширеннаяПодсказка 197 | 29 198 | true 199 | true 200 | 201 | true 202 | 203 | Label 204 | true 205 | true 206 | 207 | Left 208 | 209 | 210 | 211 | ДеревоКонтекстаvalueКонтекстноеМеню 212 | 28 213 | true 214 | true 215 | 216 | true 217 | 218 | true 219 | 220 | InputField 221 | EnterOnInput 222 | true 223 | Left 224 | true 225 | 226 | true 227 | true 228 | true 229 | true 230 | true 231 | 232 | 233 | 234 | ДеревоКонтекстаКоманднаяПанель 235 | 8 236 | true 237 | true 238 | 239 | true 240 | 241 | Left 242 | 243 | 244 | BeforeExpand 245 | ДеревоКонтекстаПередРазворачиванием 246 | 247 | 248 | true 249 | true 250 | 251 | true 252 | 253 | ДеревоКонтекстаСтрокаПоиска 254 | 10 255 | 256 | ДеревоКонтекстаСтрокаПоискаРасширеннаяПодсказка 257 | 12 258 | true 259 | true 260 | 261 | true 262 | 263 | Label 264 | true 265 | true 266 | 267 | Left 268 | 269 | 270 | 271 | ДеревоКонтекстаСтрокаПоискаКонтекстноеМеню 272 | 11 273 | true 274 | true 275 | 276 | true 277 | 278 | true 279 | 280 | 281 | true 282 | 283 | 284 | 285 | true 286 | true 287 | 288 | true 289 | 290 | ДеревоКонтекстаСостояниеПросмотра 291 | 13 292 | 293 | ДеревоКонтекстаСостояниеПросмотраРасширеннаяПодсказка 294 | 15 295 | true 296 | true 297 | 298 | true 299 | 300 | Label 301 | true 302 | true 303 | 304 | Left 305 | 306 | 307 | 308 | ДеревоКонтекстаСостояниеПросмотраКонтекстноеМеню 309 | 14 310 | true 311 | true 312 | 313 | true 314 | 315 | true 316 | 317 | ViewStatusAddition 318 | 319 | true 320 | 321 | 322 | 323 | true 324 | true 325 | 326 | true 327 | 328 | ДеревоКонтекстаУправлениеПоиском 329 | 16 330 | 331 | ДеревоКонтекстаУправлениеПоискомРасширеннаяПодсказка 332 | 18 333 | true 334 | true 335 | 336 | true 337 | 338 | Label 339 | true 340 | true 341 | 342 | Left 343 | 344 | 345 | 346 | ДеревоКонтекстаУправлениеПоискомКонтекстноеМеню 347 | 17 348 | true 349 | true 350 | 351 | true 352 | 353 | true 354 | 355 | SearchControlAddition 356 | 357 | true 358 | 359 | 360 | 361 | ДеревоКонтекстаРасширеннаяПодсказка 362 | 9 363 | true 364 | true 365 | 366 | true 367 | 368 | Label 369 | true 370 | true 371 | 372 | Left 373 | 374 | 375 | 376 | ДеревоКонтекстаКонтекстноеМеню 377 | 7 378 | true 379 | true 380 | 381 | true 382 | 383 | true 384 | 385 | Tree 386 | true 387 | true 388 | true 389 | MultiRow 390 |
true
391 | 1 392 | 1 393 | AutoUse 394 | AutoUse 395 | true 396 | true 397 | true 398 | Auto 399 | Auto 400 | true 401 | true 402 | true 403 | true 404 | AsFileRef 405 |
406 | true 407 | true 408 | 409 | true 410 | 411 | 412 | <key>ru</key> 413 | <value>Доступный контекст</value> 414 | 415 | 416 | Группа3РасширеннаяПодсказка 417 | 48 418 | true 419 | true 420 | 421 | true 422 | 423 | Label 424 | true 425 | true 426 | 427 | Left 428 | 429 | 430 | UsualGroup 431 | 432 | HorizontalIfPossible 433 | Collapsible 434 | true 435 | Picture 436 | WeakSeparation 437 | true 438 | true 439 | true 440 | Auto 441 | Auto 442 | 443 |
444 | true 445 | true 446 | 447 | true 448 | 449 | 450 | Группа1РасширеннаяПодсказка 451 | 5 452 | true 453 | true 454 | 455 | true 456 | 457 | Label 458 | true 459 | true 460 | 461 | Left 462 | 463 | 464 | UsualGroup 465 | 466 | Vertical 467 | WeakSeparation 468 | true 469 | true 470 | true 471 | Auto 472 | Auto 473 | 474 |
475 | 476 | Группа2 477 | 30 478 | 479 | Консоль 480 | 32 481 | true 482 | true 483 | 484 | true 485 | 486 | 487 | 488 | Консоль 489 | 490 | 491 | None 492 | 493 | КонсольРасширеннаяПодсказка 494 | 34 495 | true 496 | true 497 | 498 | true 499 | 500 | Label 501 | true 502 | true 503 | 504 | Left 505 | 506 | 507 | 508 | КонсольКонтекстноеМеню 509 | 33 510 | true 511 | true 512 | 513 | true 514 | 515 | true 516 | 517 | InputField 518 | Enter 519 | true 520 | Left 521 | true 522 | 523 | 50 524 | true 525 | true 526 | true 527 | true 528 | true 529 | 530 | 531 | 532 | ВыполнитьКомандуКонсоли 533 | 35 534 | true 535 | true 536 | 537 | true 538 | 539 | 540 | ВыполнитьКомандуКонсолиРасширеннаяПодсказка 541 | 36 542 | true 543 | true 544 | 545 | true 546 | 547 | Label 548 | true 549 | true 550 | 551 | Left 552 | 553 | 554 | UsualButton 555 | Form.Command.ВыполнитьКомандуКонсоли 556 | Auto 557 | true 558 | true 559 | UserCmds 560 | Auto 561 | 562 | true 563 | true 564 | 565 | true 566 | 567 | 568 | Группа2РасширеннаяПодсказка 569 | 31 570 | true 571 | true 572 | 573 | true 574 | 575 | Label 576 | true 577 | true 578 | 579 | Left 580 | 581 | 582 | UsualGroup 583 | 584 | AlwaysHorizontal 585 | true 586 | true 587 | Auto 588 | Auto 589 | 590 | 591 | 592 | ФормаКоманднаяПанель 593 | -1 594 | 595 | ГруппаКоммандыОсновные 596 | 59 597 | 598 | ФормаЗаполнитьКонтекст 599 | 25 600 | true 601 | true 602 | 603 | true 604 | 605 | 606 | ФормаЗаполнитьКонтекстРасширеннаяПодсказка 607 | 26 608 | true 609 | true 610 | 611 | true 612 | 613 | Label 614 | true 615 | true 616 | 617 | Left 618 | 619 | 620 | Form.Command.ЗаполнитьКонтекст 621 | Auto 622 | true 623 | true 624 | UserCmds 625 | Auto 626 | 627 | 628 | ФормаКомандаНовыйВебСокет 629 | 55 630 | true 631 | true 632 | 633 | true 634 | 635 | 636 | ФормаКомандаНовыйВебСокетРасширеннаяПодсказка 637 | 56 638 | true 639 | true 640 | 641 | true 642 | 643 | Label 644 | true 645 | true 646 | 647 | Left 648 | 649 | 650 | Form.Command.КомандаНовыйВебСокет 651 | Auto 652 | true 653 | true 654 | UserCmds 655 | Auto 656 | 657 | 658 | ФормаТестОжиданияОповещения 659 | 57 660 | true 661 | true 662 | 663 | true 664 | 665 | 666 | ФормаТестОжиданияОповещенияРасширеннаяПодсказка 667 | 58 668 | true 669 | true 670 | 671 | true 672 | 673 | Label 674 | true 675 | true 676 | 677 | Left 678 | 679 | 680 | Form.Command.ТестОжиданияОповещения 681 | Auto 682 | true 683 | true 684 | UserCmds 685 | Auto 686 | 687 | true 688 | true 689 | 690 | true 691 | 692 | 693 | <key>ru</key> 694 | <value>Команды</value> 695 | 696 | 697 | ГруппаКоммандыОсновныеРасширеннаяПодсказка 698 | 60 699 | true 700 | true 701 | 702 | true 703 | 704 | Label 705 | true 706 | true 707 | 708 | Left 709 | 710 | 711 | Popup 712 | 713 | Auto 714 | 715 | 716 | true 717 | true 718 | 719 | true 720 | 721 | Left 722 | true 723 | 724 | 725 | OnCreateAtServer 726 | ПриСозданииНаСервере 727 | 728 | 729 | OnClose 730 | ПриЗакрытии 731 | 732 | true 733 | true 734 | Vertical 735 | true 736 | true 737 | true 738 | true 739 | true 740 | 741 | Объект 742 | 1 743 | 744 | DataProcessorObject.пс_Тестирование 745 | 746 | 747 | true 748 | 749 | 750 | true 751 | 752 |
true
753 |
754 | 755 | ХТМЛ 756 | 757 | <key>ru</key> 758 | <value>ХТМЛ</value> 759 | 760 | 2 761 | 762 | String 763 | 764 | 765 | 766 | true 767 | 768 | 769 | true 770 | 771 | 772 | 773 | ДеревоКонтекста 774 | 775 | <key>ru</key> 776 | <value>Дерево контекста</value> 777 | 778 | 3 779 | 780 | ValueTree 781 | 782 | 783 | true 784 | 785 | 786 | true 787 | 788 | 789 | name 790 | 791 | <key>ru</key> 792 | <value>Имя</value> 793 | 794 | 1 795 | 796 | String 797 | 798 | 799 | 800 | true 801 | 802 | 803 | true 804 | 805 | 806 | 807 | type 808 | 809 | <key>ru</key> 810 | <value>Тип</value> 811 | 812 | 2 813 | 814 | String 815 | 816 | 817 | 818 | true 819 | 820 | 821 | true 822 | 823 | 824 | 825 | value 826 | 827 | <key>ru</key> 828 | <value>Значение</value> 829 | 830 | 3 831 | 832 | String 833 | 834 | 835 | 836 | true 837 | 838 | 839 | true 840 | 841 | 842 | 843 | 844 | Консоль 845 | 846 | <key>ru</key> 847 | <value>Консоль</value> 848 | 849 | 4 850 | 851 | String 852 | 853 | 854 | 855 | true 856 | 857 | 858 | true 859 | 860 | 861 | 862 | ЗаполнитьКонтекст 863 | 864 | <key>ru</key> 865 | <value>Заполнить контекст</value> 866 | 867 | 1 868 | 869 | ru 870 | Заполнить контекст 871 | 872 | 873 | true 874 | 875 | 876 | 877 | ЗаполнитьКонтекст 878 | 879 | 880 | Auto 881 | 882 | 883 | ВыполнитьКомандуКонсоли 884 | 885 | <key>ru</key> 886 | <value>Выполнить команду</value> 887 | 888 | 2 889 | 890 | ru 891 | Выполнить команду 892 | 893 | 894 | true 895 | 896 | 897 | StdPicture.GenerateReport 898 | 899 | 900 | 901 | ВыполнитьКомандуКонсоли 902 | 903 | 904 | Picture 905 | Auto 906 | 907 | 908 | КомандаНовыйВебСокет 909 | 910 | <key>ru</key> 911 | <value>Новый веб сокет</value> 912 | 913 | 6 914 | 915 | ru 916 | Новый веб сокет 917 | 918 | 919 | true 920 | 921 | 922 | 923 | КомандаНовыйВебСокет 924 | 925 | 926 | Auto 927 | 928 | 929 | ТестОжиданияОповещения 930 | 931 | <key>ru</key> 932 | <value>Ожидания оповещения</value> 933 | 934 | 8 935 | 936 | true 937 | 938 | 939 | 940 | ТестОжиданияОповещения 941 | 942 | 943 | Auto 944 | 945 | 946 | 947 | 948 | 949 | 950 |
951 | -------------------------------------------------------------------------------- /src/DataProcessors/пс_Тестирование/Forms/Форма/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | &НаСервере 3 | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 4 | 5 | пс_Скрипты.ПодключитьРасширенныеСкрипты(Элементы.ХТМЛ); 6 | 7 | КонецПроцедуры 8 | 9 | &НаКлиенте 10 | Процедура ХТМЛПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) 11 | пс_СкриптыКлиент.ПриНажатии(ДанныеСобытия, Элемент); 12 | КонецПроцедуры 13 | 14 | &НаКлиенте 15 | Процедура ВыполнитьКомандуКонсоли(Команда) 16 | //@skip-warning 17 | Результат = пс_СкриптыКлиент.ВыполнитьКоманду(Консоль, Элементы.ХТМЛ); 18 | КонецПроцедуры 19 | 20 | &НаКлиенте 21 | Процедура ЗаполнитьКонтекст(Команда) 22 | ГлобальныйКонтекст = пс_СкриптыКлиент.ПолучитьКонтекст(,Истина, Элементы.ХТМЛ); 23 | УзелДерева = ДеревоКонтекста.ПолучитьЭлементы(); 24 | УзелДерева.Очистить(); 25 | Для Каждого текЭлемент Из ГлобальныйКонтекст Цикл 26 | ДобавляемыйОбъект = УзелДерева.Добавить(); 27 | ЗаполнитьЗначенияСвойств(ДобавляемыйОбъект,текЭлемент.Значение); 28 | ДобавляемыйОбъект.ПолучитьЭлементы().Добавить(); 29 | КонецЦикла; 30 | КонецПроцедуры 31 | 32 | &НаКлиенте 33 | Процедура ДеревоКонтекстаПередРазворачиванием(Элемент, Строка, Отказ) 34 | СтрокаКонтекста = ДеревоКонтекста.НайтиПоИдентификатору(Строка); 35 | ПутьКОбъекту = "self." + ПолучитьПутьКДанным(СтрокаКонтекста); 36 | ИсследуемыйОбъект = пс_СкриптыКлиент.ВыполнитьКоманду(ПутьКОбъекту, Элементы.ХТМЛ); 37 | РазворачиваемыйУзел = СтрокаКонтекста.ПолучитьЭлементы(); 38 | РазворачиваемыйУзел.Очистить(); 39 | Если ИсследуемыйОбъект = Неопределено Тогда 40 | Возврат; 41 | КонецЕсли; 42 | ДоступныйКонтекстОбъекта = пс_СкриптыКлиент.ПолучитьКонтекст(ИсследуемыйОбъект, Истина, Элементы.ХТМЛ); 43 | Для Каждого текСвойство Из ДоступныйКонтекстОбъекта Цикл 44 | ДобавляемыйУзел = РазворачиваемыйУзел.Добавить(); 45 | ЗаполнитьЗначенияСвойств(ДобавляемыйУзел, текСвойство.Значение); 46 | ДобавляемыйУзел.ПолучитьЭлементы().Добавить(); 47 | КонецЦикла; 48 | КонецПроцедуры 49 | 50 | &НаКлиенте 51 | Функция ПолучитьПутьКДанным(ЭлементКонтекста, ПутьКДанным = "") 52 | 53 | Родитель = ЭлементКонтекста.ПолучитьРодителя(); 54 | Если Родитель = Неопределено Тогда 55 | Возврат ЭлементКонтекста.name + ПутьКДанным; 56 | КонецЕсли; 57 | ЭтоИндекс = Ложь; 58 | Попытка 59 | //@skip-warning 60 | ф=Число(ЭлементКонтекста.name); 61 | ЭтоИндекс = Истина; 62 | Исключение 63 | КонецПопытки; 64 | Если ЭтоИндекс Тогда 65 | Шаблон = "[%1]%2"; 66 | Иначе 67 | Шаблон = ".%1%2"; 68 | КонецЕсли; 69 | Возврат ПолучитьПутьКДанным(Родитель, СтрШаблон(Шаблон, ЭлементКонтекста.name, ПутьКДанным)); 70 | 71 | КонецФункции // ПолучитьПутьКДанным() 72 | 73 | &НаКлиенте 74 | Процедура КомандаНовыйВебСокет(Команда) 75 | ОписаниеЗакрыт = Новый ОписаниеОповещения("СокетЗакрыт", ЭтаФорма); 76 | ОписаниеОткрыт = Новый ОписаниеОповещения("СокетОткрыт", ЭтаФорма); 77 | ОписаниеСообщение = Новый ОписаниеОповещения("СокетСообщение", ЭтаФорма); 78 | ОписаниеОшибка = Новый ОписаниеОповещения("СокетОшибка", ЭтаФорма); 79 | пс_СкриптыКлиент.НовыйВебСокет("wss://echo.websocket.org",,"f",ОписаниеОткрыт 80 | ,ОписаниеОшибка, ОписаниеСообщение, ОписаниеЗакрыт, Элементы.ХТМЛ); 81 | КонецПроцедуры 82 | 83 | 84 | // <Описание процедуры> 85 | // 86 | // Параметры: 87 | // <Параметр1> - <Тип.Вид> - <описание параметра> 88 | // <продолжение описания параметра> 89 | // <Параметр2> - <Тип.Вид> - <описание параметра> 90 | // <продолжение описания параметра> 91 | // 92 | &НаКлиенте 93 | Процедура СокетЗакрыт(ДанныеСобытия, ДополнительныеПараметры) Экспорт 94 | 95 | Сообщить("Сокет закрыт!"); 96 | 97 | КонецПроцедуры // СокетЗакрыт() 98 | 99 | 100 | // <Описание процедуры> 101 | // 102 | // Параметры: 103 | // <Параметр1> - <Тип.Вид> - <описание параметра> 104 | // <продолжение описания параметра> 105 | // <Параметр2> - <Тип.Вид> - <описание параметра> 106 | // <продолжение описания параметра> 107 | // 108 | &НаКлиенте 109 | Процедура СокетОткрыт(ДанныеСобытия, ДополнительныеПараметры) Экспорт 110 | 111 | Сообщить("Сокет открыт!"); 112 | 113 | КонецПроцедуры // СокетОткрыт() 114 | 115 | 116 | // <Описание процедуры> 117 | // 118 | // Параметры: 119 | // <Параметр1> - <Тип.Вид> - <описание параметра> 120 | // <продолжение описания параметра> 121 | // <Параметр2> - <Тип.Вид> - <описание параметра> 122 | // <продолжение описания параметра> 123 | // 124 | &НаКлиенте 125 | Процедура СокетСообщение(ДанныеСобытия, ДополнительныеПараметры) Экспорт 126 | 127 | Сообщить(СтрШаблон("Сокет сообщение: %1", ДанныеСобытия.data)); 128 | 129 | КонецПроцедуры // СокетСообщение() 130 | 131 | 132 | // <Описание процедуры> 133 | // 134 | // Параметры: 135 | // <Параметр1> - <Тип.Вид> - <описание параметра> 136 | // <продолжение описания параметра> 137 | // <Параметр2> - <Тип.Вид> - <описание параметра> 138 | // <продолжение описания параметра> 139 | // 140 | &НаКлиенте 141 | Процедура СокетОшибка(ДанныеСобытия, ДополнительныеПараметры) Экспорт 142 | 143 | Сообщить("Сокет ошибка!"); 144 | 145 | КонецПроцедуры 146 | // СокетОшибка() 147 | 148 | &НаКлиенте 149 | Процедура ПриЗакрытии(ЗавершениеРаботы) 150 | пс_СкриптыКлиент.ОчиститьКешФормы(ЭтаФорма); 151 | КонецПроцедуры 152 | 153 | &НаКлиенте 154 | Процедура ТестОжиданияОповещения(Команда) 155 | пс_СкриптыКлиент.ДобавитьОбработчикСобытия(Элементы.ХТМЛ.Документ.body,"click" 156 | , Новый ОписаниеОповещения("тестСообщитьАдресКлика", ЭтаФорма), Элементы.ХТМЛ) 157 | КонецПроцедуры 158 | 159 | &НаКлиенте 160 | Процедура тестСообщитьАдресКлика(ДанныеСобытия, ДополнительныеПараметры) Экспорт 161 | Сообщить(СтрШаблон("Произошёл клик в координатах %1, %2", ДанныеСобытия.x, ДанныеСобытия.y)); 162 | КонецПроцедуры 163 | 164 | 165 | 166 | 167 | -------------------------------------------------------------------------------- /src/DataProcessors/пс_Тестирование/ManagerModule.bsl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DimaSSV/JavaScriptControl/1c3af640a39881dd70010c5dd5bd78436ae3afd7/src/DataProcessors/пс_Тестирование/ManagerModule.bsl -------------------------------------------------------------------------------- /src/DataProcessors/пс_Тестирование/ObjectModule.bsl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DimaSSV/JavaScriptControl/1c3af640a39881dd70010c5dd5bd78436ae3afd7/src/DataProcessors/пс_Тестирование/ObjectModule.bsl -------------------------------------------------------------------------------- /src/DataProcessors/пс_Тестирование/пс_Тестирование.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | пс_Тестирование 8 | 9 | ru 10 | Тестирование (JS) 11 | 12 | true 13 | DataProcessor.пс_Тестирование.Form.Форма 14 | 15 | Форма 16 | 17 | ru 18 | Форма 19 | 20 | PersonalComputer 21 | MobileDevice 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/Subsystems/пс_Скрипты/пс_Скрипты.mdo: -------------------------------------------------------------------------------- 1 | 2 | 3 | пс_Скрипты 4 | 5 | ru 6 | Скрипты (JS) 7 | 8 | true 9 | true 10 | 11 | CommonPicture.пс_РазделСкрипты 12 | 13 | DataProcessor.пс_Тестирование 14 | CommonPicture.пс_РазделСкрипты 15 | c9569b78-f0e5-49bb-ae23-3b660a3fbf5c 16 | a2147d30-8543-40ba-b2e2-a854c3d7df0e 17 | DataProcessor.пс_РедакторКода 18 | 19 | --------------------------------------------------------------------------------