Вычистка репозитория, добавление недостающих media
							
								
								
									
										0
									
								
								.github/workflows/empty
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								media/Covers/GreenAPI.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 545 KiB | 
							
								
								
									
										
											BIN
										
									
								
								media/Covers/OneScript2.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 684 KiB | 
							
								
								
									
										
											BIN
										
									
								
								media/Covers/PostgreSQL.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 460 KiB | 
							
								
								
									
										
											BIN
										
									
								
								media/Covers/S3.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 567 KiB | 
							
								
								
									
										
											BIN
										
									
								
								media/Covers/SQLite.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 561 KiB | 
							
								
								
									
										
											BIN
										
									
								
								media/Covers/TCP.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.5 MiB | 
							
								
								
									
										
											BIN
										
									
								
								media/Covers/fire.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 897 KiB | 
							
								
								
									
										24
									
								
								service/checklist.md
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,24 +0,0 @@ | ||||
| - Проверить Pull | ||||
| - Смена номера версии | ||||
| - main.os | ||||
| - Проверить перевод | ||||
| - Обновить 1С RU | ||||
| - Полное тестирование 1С RU | ||||
| - Обновить 1С EN | ||||
| - Полное тестирование 1С EN | ||||
| - Полное тестирование OS RU | ||||
| - Полное тестирование OS EN | ||||
| - Полное тестирование CLI RU | ||||
| - Полное тестирование CLI EN | ||||
| - Pull | ||||
| - doc_main.os | ||||
| - Тестовые доки Neocities RU | ||||
| - Тестовые доки Neocities EN | ||||
| - Шаблон релиза в тэге драфт | ||||
| - releasemaker.os | ||||
| - CLI в draft RU | ||||
| - CLI в draft EN | ||||
| - Доки RU прод | ||||
| - Доки EN прод | ||||
| - Релиз | ||||
| - Значок в Readme | ||||
							
								
								
									
										8
									
								
								service/deb_template.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,8 +0,0 @@ | ||||
| Package: oint | ||||
| Version: %1 | ||||
| Installed-Size: %2 | ||||
| Architecture: all | ||||
| Maintainer: Anton Titovets <bayselonarrend@gmail.com> | ||||
| Depends: mono-devel, libmono-system-core4.0-cil | libmono-system-core4.5-cil, libmono-system4.0-cil | libmono-system4.5-cil, libmono-corlib4.0-cil | libmono-corlib4.5-cil, libmono-i18n4.0-all | libmono-i18n4.5-all | ||||
| Description: %3 | ||||
| Homepage: %4 | ||||
							
								
								
									
										1
									
								
								service/project.json
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -12,7 +12,6 @@ | ||||
| "codeExamplesSrc": "./docs/ru/examples/", | ||||
| "testValuesSrc": "./docs/ru/data/", | ||||
| "testsModule": "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os", | ||||
| "testsCheckFile": "./service/tests_set.json", | ||||
| "engineLinux": "C:/engine/linux", | ||||
| "engineWindows": "C:/engine/windows", | ||||
| "additionalLangs": [ | ||||
|   | ||||
							
								
								
									
										431
									
								
								service/tests_set.json
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,431 +0,0 @@ | ||||
| { | ||||
| "Dropbox_ПолучитьСсылкуАвторизации": true, | ||||
| "Dropbox_ПолучитьТокен": true, | ||||
| "Dropbox_ОбновитьТокен": true, | ||||
| "Dropbox_ПолучитьИнформациюОбАккаунте": true, | ||||
| "Dropbox_ПолучитьДанныеИспользованияПространства": true, | ||||
| "Dropbox_ПолучитьИнформациюОбОбъекте": true, | ||||
| "Dropbox_ПолучитьСписокФайловПапки": true, | ||||
| "Dropbox_ПолучитьПревью": true, | ||||
| "Dropbox_ЗагрузитьФайл": true, | ||||
| "Dropbox_ЗагрузитьФайлПоURL": true, | ||||
| "Dropbox_ПолучитьСтатусЗагрузкиПоURL": true, | ||||
| "Dropbox_УдалитьОбъект": true, | ||||
| "Dropbox_КопироватьОбъект": true, | ||||
| "Dropbox_ПереместитьОбъект": true, | ||||
| "Dropbox_СоздатьПапку": true, | ||||
| "Dropbox_СкачатьФайл": true, | ||||
| "Dropbox_СкачатьПапку": true, | ||||
| "Dropbox_ПолучитьСписокВерсийОбъекта": true, | ||||
| "Dropbox_ВосстановитьОбъектКВерсии": true, | ||||
| "Dropbox_ПолучитьСписокТегов": true, | ||||
| "Dropbox_ДобавитьТег": true, | ||||
| "Dropbox_УдалитьТег": true, | ||||
| "Dropbox_ОпубликоватьПапку": true, | ||||
| "Dropbox_ОтменитьПубликациюПапки": true, | ||||
| "Dropbox_ДобавитьПользователейКФайлу": true, | ||||
| "Dropbox_ДобавитьПользователейКПапке": true, | ||||
| "Dropbox_ПолучитьСтатусАсинхронногоИзменения": false, | ||||
| "Dropbox_ОтменитьПубликациюФайла": true, | ||||
| "Twitter_ПолучитьСсылкуАвторизации": false, | ||||
| "Twitter_ПолучитьТокен": false, | ||||
| "Twitter_ОбновитьТокен": false, | ||||
| "Twitter_ОбработкаВходящегоЗапросаПослеАвторизации": false, | ||||
| "Twitter_СоздатьПроизвольныйТвит": false, | ||||
| "Twitter_СоздатьТекстовыйТвит": false, | ||||
| "Twitter_СоздатьТвитКартинки": false, | ||||
| "Twitter_СоздатьТвитГифки": false, | ||||
| "Twitter_СоздатьТвитВидео": false, | ||||
| "Twitter_СоздатьТвитОпрос": false, | ||||
| "Twitter_ЗагрузитьМассивВложений": false, | ||||
| "Bitrix24_ПолучитьСсылкуАвторизацииПриложения": true, | ||||
| "Bitrix24_ПолучитьТокен": true, | ||||
| "Bitrix24_ОбновитьТокен": true, | ||||
| "Bitrix24_СерверноеВремя": true, | ||||
| "Bitrix24_СоздатьНовость": true, | ||||
| "Bitrix24_ИзменитьНовость": true, | ||||
| "Bitrix24_УдалитьНовость": true, | ||||
| "Bitrix24_ПолучитьСписокПросмотревшихВажное": true, | ||||
| "Bitrix24_ПолучитьНовости": true, | ||||
| "Bitrix24_ДобавитьКомментарийНовости": true, | ||||
| "Bitrix24_ДобавитьПолучателейКНовости": true, | ||||
| "Bitrix24_ПолучитьЗадачу": true, | ||||
| "Bitrix24_ПолучитьСписокЗадач": true, | ||||
| "Bitrix24_СоздатьЗадачу": true, | ||||
| "Bitrix24_ИзменитьЗадачу": true, | ||||
| "Bitrix24_УдалитьЗадачу": true, | ||||
| "Bitrix24_ДобавитьФайлВЗадачу": true, | ||||
| "Bitrix24_ПринятьЗадачу": true, | ||||
| "Bitrix24_ОтклонитьЗадачу": true, | ||||
| "Bitrix24_ЗавершитьЗадачу": true, | ||||
| "Bitrix24_ВозобновитьЗадачу": true, | ||||
| "Bitrix24_ОтложитьЗадачу": true, | ||||
| "Bitrix24_ПриостановитьЗадачу": true, | ||||
| "Bitrix24_НачатьВыполнениеЗадачи": true, | ||||
| "Bitrix24_НачатьНаблюдатьЗаЗадачей": true, | ||||
| "Bitrix24_ПрекратитьНаблюдатьЗаЗадачей": true, | ||||
| "Bitrix24_ДелегироватьЗадачу": true, | ||||
| "Bitrix24_ДобавитьЗадачуВИзбранное": true, | ||||
| "Bitrix24_УбратьЗадачуИзИзбранного": true, | ||||
| "Bitrix24_ПолучитьИсториюЗадачи": true, | ||||
| "Bitrix24_ПроверитьДоступКЗадаче": true, | ||||
| "Bitrix24_ОтключитьЗвукЗадачи": true, | ||||
| "Bitrix24_ВключитьЗвукЗадачи": true, | ||||
| "Bitrix24_СоздатьЗависимостьЗадач": true, | ||||
| "Bitrix24_УдалитьЗависимостьЗадач": false, | ||||
| "Bitrix24_ПолучитьПланЗадачНаДень": true, | ||||
| "Bitrix24_ПолучитьСтруктуруЗадачи": true, | ||||
| "Bitrix24_ПолучитьСтруктуруФильтраЗадач": false, | ||||
| "Bitrix24_ПолучитьСписокПользовательскихПолейЗадачи": true, | ||||
| "Bitrix24_ДобавитьПользовательскоеПолеЗадачи": true, | ||||
| "Bitrix24_ИзменитьПользовательскоеПолеЗадачи": true, | ||||
| "Bitrix24_ПолучитьПользовательскоеПолеЗадачи": true, | ||||
| "Bitrix24_УдалитьПользовательскоеПолеЗадачи": true, | ||||
| "Bitrix24_ДобавитьЭлементЧеклистаЗадачи": true, | ||||
| "Bitrix24_ИзменитьЭлементЧеклистаЗадачи": true, | ||||
| "Bitrix24_УдалитьЭлементЧеклистаЗадачи": true, | ||||
| "Bitrix24_ПолучитьЧеклистЗадачи": true, | ||||
| "Bitrix24_ПолучитьЭлементЧеклистаЗадачи": true, | ||||
| "Bitrix24_ВыполнитьЭлементЧеклистаЗадачи": true, | ||||
| "Bitrix24_ВозобновитьЭлементЧеклистаЗадачи": true, | ||||
| "Bitrix24_ПолучитьСписокКомментариевЗадачи": true, | ||||
| "Bitrix24_ПолучитьКомменатрийЗадачи": true, | ||||
| "Bitrix24_ДобавитьКомментарийЗадачи": true, | ||||
| "Bitrix24_ИзменитьКомментарийЗадачи": true, | ||||
| "Bitrix24_УдалитьКомментарийЗадачи": true, | ||||
| "Bitrix24_ПолучитьСписокРезультатов": true, | ||||
| "Bitrix24_СоздатьРезультатИзКомментария": true, | ||||
| "Bitrix24_УдалитьРезультатИзКомментария": true, | ||||
| "Bitrix24_ПолучитьСтруктуруКомментария": false, | ||||
| "Bitrix24_ДобавитьСтадиюКанбана": true, | ||||
| "Bitrix24_ИзменитьСтадиюКанбана": true, | ||||
| "Bitrix24_УдалитьСтадиюКанбана": true, | ||||
| "Bitrix24_ПолучитьСтадииКанбана": true, | ||||
| "Bitrix24_ПеренестиЗадачуВСтадиюКанбана": true, | ||||
| "Bitrix24_ДобавитьТрудозатратыЗадачи": true, | ||||
| "Bitrix24_УдалитьТрудозатратыЗадачи": true, | ||||
| "Bitrix24_ПолучитьСписокТрудозатратЗадачи": true, | ||||
| "Bitrix24_ПолучитьТрудозатратыЗадачи": true, | ||||
| "Bitrix24_ИзменитьТрудозатратыЗадачи": true, | ||||
| "Bitrix24_НачатьУчетВремени": true, | ||||
| "Bitrix24_ЗавершитьУчетВремени": true, | ||||
| "Bitrix24_ПриостановитьУчетВремени": true, | ||||
| "Bitrix24_ПолучитьСтатусУчетаВремени": true, | ||||
| "Bitrix24_ПолучитьНастройкиУчетаВремени": true, | ||||
| "Bitrix24_ПолучитьСписокХранилищ": true, | ||||
| "Bitrix24_ПолучитьХранилищеПриложения": true, | ||||
| "Bitrix24_ПолучитьХранилище": true, | ||||
| "Bitrix24_ПереименоватьХранилище": true, | ||||
| "Bitrix24_ПолучитьСодержимоеХранилища": true, | ||||
| "Bitrix24_СоздатьКаталогВХранилище": true, | ||||
| "Bitrix24_ПолучитьИнформациюОКаталоге": true, | ||||
| "Bitrix24_СоздатьПодкаталог": true, | ||||
| "Bitrix24_СкопироватьКаталог": true, | ||||
| "Bitrix24_ПереместитьКаталог": true, | ||||
| "Bitrix24_УдалитьКаталог": true, | ||||
| "Bitrix24_ПолучитьВнешнююСсылкуКаталога": true, | ||||
| "Bitrix24_ПолучитьДочерниеЭлементыКаталога": true, | ||||
| "Bitrix24_ПоместитьКаталогВКорзину": true, | ||||
| "Bitrix24_ВосстановитьКаталог": true, | ||||
| "Bitrix24_ПереименоватьКаталог": true, | ||||
| "Bitrix24_ПолучитьСтруктуруФильтраКаталога": true, | ||||
| "Bitrix24_ЗагрузитьФайлВХранилище": true, | ||||
| "Bitrix24_ЗагрузитьФайлВКаталог": true, | ||||
| "Bitrix24_ПолучитьИнформациюОФайле": true, | ||||
| "Bitrix24_УдалитьФайл": true, | ||||
| "Bitrix24_ПолучитьВнешнююСсылкуФайла": true, | ||||
| "Bitrix24_ПоместитьФайлВКорзину": true, | ||||
| "Bitrix24_ВосстановитьФайл": true, | ||||
| "Bitrix24_СкопироватьФайл": true, | ||||
| "Bitrix24_ПереместитьФайлВКаталог": true, | ||||
| "Bitrix24_ПереименоватьФайл": true, | ||||
| "Bitrix24_СоздатьЧат": true, | ||||
| "Bitrix24_ПолучитьСписокПользователейЧата": true, | ||||
| "Bitrix24_ПокинутьЧат": true, | ||||
| "Bitrix24_ПолучитьПользователей": true, | ||||
| "Bitrix24_ДобавитьПользователейВЧат": true, | ||||
| "Bitrix24_ИсключитьПользователяИзЧата": true, | ||||
| "Bitrix24_ИзменитьЗаголовокЧата": true, | ||||
| "Bitrix24_ИзменитьЦветЧата": true, | ||||
| "Bitrix24_ИзменитьКартинкуЧата": true, | ||||
| "Bitrix24_СменитьВладельцаЧата": true, | ||||
| "Bitrix24_ОтключитьУведомленияЧата": true, | ||||
| "Bitrix24_ВключитьУведомленияЧата": true, | ||||
| "Bitrix24_ПолучитьСписокСообщенийЧата": true, | ||||
| "Bitrix24_ПолучитьДиалог": true, | ||||
| "Bitrix24_ПолучитьСписокПользователейДиалога": true, | ||||
| "Bitrix24_ОтправитьУведомлениеОВводе": true, | ||||
| "Bitrix24_ПолучитьСтатусПользователя": true, | ||||
| "Bitrix24_УстановитьСтатусПользователя": true, | ||||
| "Bitrix24_ПрочитатьВсе": true, | ||||
| "Bitrix24_ПолучитьКаталогФайловЧата": true, | ||||
| "Bitrix24_ПолучитьСтруктуруЧата": false, | ||||
| "Bitrix24_ОтправитьСообщение": true, | ||||
| "Bitrix24_ИзменитьСообщение": true, | ||||
| "Bitrix24_УстановитьРеакциюНаСообщение": true, | ||||
| "Bitrix24_УдалитьСообщение": true, | ||||
| "Bitrix24_ОтправитьФайл": true, | ||||
| "Bitrix24_ОтметитьСообщениеКакПрочитанное": true, | ||||
| "Bitrix24_ОтметитьСообщениеКакНепрочитанное": true, | ||||
| "Bitrix24_ПолучитьБлокКартинки": false, | ||||
| "Bitrix24_ПолучитьБлокФайла": false, | ||||
| "Bitrix24_СоздатьПерсональноеУведомление": true, | ||||
| "Bitrix24_СоздатьСистемноеУведомление": true, | ||||
| "Bitrix24_УдалитьУведомление": true, | ||||
| "Bitrix24_СоздатьПодразделение": true, | ||||
| "Bitrix24_ИзменитьПодразделение": true, | ||||
| "Bitrix24_ПолучитьПодразделения": true, | ||||
| "Bitrix24_УдалитьПодразделение": true, | ||||
| "Bitrix24_ПолучитьТекущегоПользователя": true, | ||||
| "Bitrix24_ПолучитьПользователя": true, | ||||
| "Bitrix24_СоздатьПользователя": true, | ||||
| "Bitrix24_ИзменитьПользователя": true, | ||||
| "Bitrix24_ИзменитьСтатусПользователя": true, | ||||
| "Bitrix24_НайтиПользователей": true, | ||||
| "Bitrix24_ПолучитьСтурктуруПользователя": true, | ||||
| "Bitrix24_ПолучитьСтруктуруФильтраПользователей": false, | ||||
| "Yandex Disk_ПолучитьИнформациюОДиске": false, | ||||
| "Yandex Disk_СоздатьПапку": false, | ||||
| "Yandex Disk_ПолучитьОбъект": false, | ||||
| "Yandex Disk_УдалитьОбъект": false, | ||||
| "Yandex Disk_СоздатьКопиюОбъекта": false, | ||||
| "Yandex Disk_ПолучитьСсылкуДляСкачивания": false, | ||||
| "Yandex Disk_СкачатьФайл": false, | ||||
| "Yandex Disk_ПолучитьСписокФайлов": false, | ||||
| "Yandex Disk_ПереместитьОбъект": false, | ||||
| "Yandex Disk_ЗагрузитьФайл": false, | ||||
| "Yandex Disk_ЗагрузитьФайлПоURL": false, | ||||
| "Yandex Disk_ОпубликоватьОбъект": false, | ||||
| "Yandex Disk_ОтменитьПубликациюОбъекта": false, | ||||
| "Yandex Disk_ПолучитьСписокОпубликованныхОбъектов": false, | ||||
| "Yandex Disk_ПолучитьПубличныйОбъект": false, | ||||
| "Yandex Disk_ПолучитьСсылкуСкачиванияПубличногоОбъекта": false, | ||||
| "Yandex Disk_СохранитьПубличныйОбъектНаДиск": false, | ||||
| "Telegram_ПолучитьИнформациюБота": true, | ||||
| "Telegram_ПолучитьОбновления": true, | ||||
| "Telegram_УстановитьWebhook": true, | ||||
| "Telegram_УдалитьWebhook": true, | ||||
| "Telegram_СкачатьФайл": true, | ||||
| "Telegram_ОбработатьДанныеTMA": false, | ||||
| "Telegram_ОтправитьТекстовоеСообщение": true, | ||||
| "Telegram_ОтправитьКартинку": true, | ||||
| "Telegram_ОтправитьВидео": true, | ||||
| "Telegram_ОтправитьАудио": true, | ||||
| "Telegram_ОтправитьДокумент": true, | ||||
| "Telegram_ОтправитьГифку": true, | ||||
| "Telegram_ОтправитьМедиагруппу": false, | ||||
| "Telegram_ОтправитьМестоположение": true, | ||||
| "Telegram_ОтправитьКонтакт": true, | ||||
| "Telegram_ОтправитьОпрос": true, | ||||
| "Telegram_ПереслатьСообщение": true, | ||||
| "Telegram_СформироватьКлавиатуруПоМассивуКнопок": false, | ||||
| "Telegram_Бан": true, | ||||
| "Telegram_Разбан": true, | ||||
| "Telegram_СоздатьСсылкуПриглашение": true, | ||||
| "Telegram_ЗакрепитьСообщение": true, | ||||
| "Telegram_ОткрепитьСообщение": true, | ||||
| "Telegram_ПолучитьЧислоУчастников": true, | ||||
| "Telegram_УдалитьСообщение": true, | ||||
| "Telegram_ПолучитьСписокИконокАватаров": false, | ||||
| "Telegram_СоздатьТемуФорума": true, | ||||
| "Telegram_ИзменитьТемуФорума": true, | ||||
| "Telegram_ЗакрытьТемуФорума": true, | ||||
| "Telegram_ОткрытьТемуФорума": true, | ||||
| "Telegram_УдалитьТемуФорума": true, | ||||
| "Telegram_СкрытьГлавнуюТемуФорума": true, | ||||
| "Telegram_ПоказатьГлавнуюТемуФорума": true, | ||||
| "Telegram_ИзменитьИмяГлавнойТемыФорума": true, | ||||
| "Telegram_ОчиститьСписокЗакрепленныхСообщенийТемы": true, | ||||
| "Airtable_ПолучитьСписокБаз": false, | ||||
| "Airtable_ПолучитьТаблицыБазы": false, | ||||
| "Airtable_СоздатьБазу": false, | ||||
| "Airtable_СоздатьТаблицу": false, | ||||
| "Airtable_ИзменитьТаблицу": false, | ||||
| "Airtable_СоздатьПоле": false, | ||||
| "Airtable_ИзменитьПоле": false, | ||||
| "Airtable_ПолучитьПолеСтроковое": false, | ||||
| "Airtable_ПолучитьПолеНомера": false, | ||||
| "Airtable_ПолучитьПолеВложения": false, | ||||
| "Airtable_ПолучитьПолеФлажка": false, | ||||
| "Airtable_ПолучитьПолеДаты": false, | ||||
| "Airtable_ПолучитьПолеПочты": false, | ||||
| "Airtable_ПолучитьПолеТелефона": false, | ||||
| "Airtable_ПолучитьПолеСсылки": false, | ||||
| "Airtable_ПолучитьСписокЗаписей": false, | ||||
| "Airtable_ПолучитьЗапись": false, | ||||
| "Airtable_СоздатьЗаписи": false, | ||||
| "Airtable_УдалитьЗаписи": false, | ||||
| "Airtable_ПолучитьКомментарии": false, | ||||
| "Airtable_СоздатьКомментарий": false, | ||||
| "Airtable_ИзменитьКомментарий": false, | ||||
| "Airtable_УдалитьКомментарий": false, | ||||
| "Google Drive_ПолучитьИнформациюОбОбъекте": false, | ||||
| "Google Drive_ПолучитьСписокКаталогов": false, | ||||
| "Google Drive_ПолучитьСписокФайлов": false, | ||||
| "Google Drive_ЗагрузитьФайл": false, | ||||
| "Google Drive_СоздатьПапку": false, | ||||
| "Google Drive_СкачатьФайл": false, | ||||
| "Google Drive_СкопироватьОбъект": false, | ||||
| "Google Drive_ОбновитьФайл": false, | ||||
| "Google Drive_УдалитьОбъект": false, | ||||
| "Google Drive_ПолучитьОписаниеФайла": false, | ||||
| "Google Drive_СоздатьКомментарий": false, | ||||
| "Google Drive_ПолучитьКомментарий": false, | ||||
| "Google Drive_ПолучитьСписокКомментариев": false, | ||||
| "Google Drive_УдалитьКомментарий": false, | ||||
| "VKTeams_ПроверитьТокен": true, | ||||
| "VKTeams_ПолучитьСобытия": true, | ||||
| "VKTeams_ПолучитьИнформациюОФайле": true, | ||||
| "VKTeams_ОтправитьТекстовоеСообщение": true, | ||||
| "VKTeams_ОтправитьФайл": true, | ||||
| "VKTeams_ОтправитьГолосовоеСообщение": true, | ||||
| "VKTeams_ИзменитьТекстСообщения": true, | ||||
| "VKTeams_УдалитьСообщение": true, | ||||
| "VKTeams_ПереслатьФайл": true, | ||||
| "VKTeams_ПереслатьГолосовоеСообщение": true, | ||||
| "VKTeams_ПереслатьСообщение": true, | ||||
| "VKTeams_ИсключитьПользователейЧата": true, | ||||
| "Google Calendar_СоздатьКалендарь": false, | ||||
| "Google Calendar_ПолучитьМетаданныеКалендаря": false, | ||||
| "Google Calendar_ИзменитьМетаданныеКалендаря": false, | ||||
| "Google Calendar_ОчиститьОсновнойКалендарь": false, | ||||
| "Google Calendar_УдалитьКалендарь": false, | ||||
| "Google Calendar_ПолучитьСписокКалендарей": false, | ||||
| "Google Calendar_ДобавитьКалендарьВСписок": false, | ||||
| "Google Calendar_ПолучитьКалендарьСписка": false, | ||||
| "Google Calendar_УдалитьКалендарьИзСписка": false, | ||||
| "Google Calendar_ИзменитьКалендарьСписка": false, | ||||
| "Google Calendar_ПолучитьОписаниеСобытия": false, | ||||
| "Google Calendar_ПолучитьСписокСобытий": false, | ||||
| "Google Calendar_ПолучитьСобытие": false, | ||||
| "Google Calendar_СоздатьСобытие": false, | ||||
| "Google Calendar_ПереместитьСобытие": false, | ||||
| "Google Calendar_ИзменитьСобытие": false, | ||||
| "Google Calendar_УдалитьСобытие": false, | ||||
| "Notion_СоздатьСтраницу": false, | ||||
| "Notion_СоздатьСтраницуВБазу": false, | ||||
| "Notion_ПолучитьСтраницу": false, | ||||
| "Notion_ИзменитьСвойстваСтраницы": false, | ||||
| "Notion_СоздатьБазуДанных": false, | ||||
| "Notion_ПолучитьБазуДанных": false, | ||||
| "Notion_ИзменитьСвойстваБазы": false, | ||||
| "Notion_СоздатьБлок": false, | ||||
| "Notion_ВернутьБлок": false, | ||||
| "Notion_ВернутьДочерниеБлоки": false, | ||||
| "Notion_УдалитьБлок": false, | ||||
| "Notion_СписокПользователей": false, | ||||
| "Notion_ПолучитьДанныеПользователя": false, | ||||
| "Viber_УстановитьWebhook": false, | ||||
| "Viber_ПолучитьИнформациюОКанале": false, | ||||
| "Viber_ПолучитьДанныеПользователя": false, | ||||
| "Viber_ПолучитьОнлайнПользователей": false, | ||||
| "Viber_ОтправитьТекстовоеСообщение": false, | ||||
| "Viber_ОтправитьКартинку": false, | ||||
| "Viber_ОтправитьФайл": false, | ||||
| "Viber_ОтправитьКонтакт": false, | ||||
| "Viber_ОтправитьЛокацию": false, | ||||
| "Viber_ОтправитьСсылку": false, | ||||
| "Viber_СформироватьКлавиатуруИзМассиваКнопок": false, | ||||
| "Google Sheets_СоздатьКнигу": false, | ||||
| "Google Sheets_ПолучитьКнигу": false, | ||||
| "Google Sheets_ИзменитьНаименованиеКниги": false, | ||||
| "Google Sheets_ДобавитьЛист": false, | ||||
| "Google Sheets_УдалитьЛист": false, | ||||
| "Google Sheets_КопироватьЛист": false, | ||||
| "Google Sheets_УстановитьЗначенияЯчеек": false, | ||||
| "Google Sheets_ОчиститьЯчейки": false, | ||||
| "Google Sheets_ПолучитьЗначенияЯчеек": false, | ||||
| "VK_СоздатьСсылкуПолученияТокена": true, | ||||
| "VK_СоздатьПост": true, | ||||
| "VK_СоздатьСоставнойПост": true, | ||||
| "VK_УдалитьПост": true, | ||||
| "VK_СоздатьОпрос": true, | ||||
| "VK_СоздатьАльбом": true, | ||||
| "VK_УдалитьАльбом": true, | ||||
| "VK_СоздатьИсторию": true, | ||||
| "VK_СохранитьКартинкуВАльбом": true, | ||||
| "VK_УдалитьКартинку": true, | ||||
| "VK_ЗагрузитьВидеоНаСервер": true, | ||||
| "VK_ЗагрузитьФотоНаСервер": false, | ||||
| "VK_СоздатьОбсуждение": true, | ||||
| "VK_ЗакрытьОбсуждение": true, | ||||
| "VK_ОткрытьОбсуждение": true, | ||||
| "VK_НаписатьВОбсуждение": true, | ||||
| "VK_ПоставитьЛайк": true, | ||||
| "VK_СделатьРепост": true, | ||||
| "VK_НаписатьСообщение": true, | ||||
| "VK_НаписатьКомментарий": true, | ||||
| "VK_СократитьСсылку": false, | ||||
| "VK_ПолучитьСтатистику": true, | ||||
| "VK_ПолучитьСтатистикуПостов": true, | ||||
| "VK_СоздатьРекламнуюКампанию": true, | ||||
| "VK_СоздатьРекламноеОбъявление": true, | ||||
| "VK_ПриостановитьРекламноеОбъявление": true, | ||||
| "VK_ПолучитьСписокРекламныхКатегорий": false, | ||||
| "VK_ПолучитьСписокКатегорийТоваров": true, | ||||
| "VK_ПолучитьСписокТоваров": true, | ||||
| "VK_ПолучитьТоварыПоИД": true, | ||||
| "VK_ДобавитьТовар": true, | ||||
| "VK_ИзменитьТовар": true, | ||||
| "VK_УдалитьТовар": true, | ||||
| "VK_СгруппироватьТовары": true, | ||||
| "VK_ПолучитьОписаниеТовара": false, | ||||
| "VK_ПолучитьСписокПодборок": true, | ||||
| "VK_ПолучитьПодборкиПоИД": false, | ||||
| "VK_СоздатьПодборкуТоваров": true, | ||||
| "VK_ИзменитьПодборкуТоваров": true, | ||||
| "VK_ДобавитьТоварВПодборку": true, | ||||
| "VK_УдалитьТоварИзПодборки": true, | ||||
| "VK_УдалитьПодборку": true, | ||||
| "VK_ПолучитьСписокСвойств": true, | ||||
| "VK_СоздатьСвойствоТовара": true, | ||||
| "VK_ИзменитьСвойствоТовара": true, | ||||
| "VK_УдалитьСвойствоТовара": true, | ||||
| "VK_ДобавитьВариантСвойстваТовара": true, | ||||
| "VK_ИзменитьВариантСвойстваТовара": true, | ||||
| "VK_УдалитьВариантСвойстваТовара": true, | ||||
| "VK_ПолучитьСписокЗаказов": true, | ||||
| "VK_СформироватьКлавиатуру": true, | ||||
| "Slack_ПолучитьИнформациюОБоте": false, | ||||
| "Slack_ПолучитьСписокРабочихОбластей": false, | ||||
| "Slack_ПолучитьСписокПользователей": false, | ||||
| "Slack_ОтправитьСообщение": false, | ||||
| "Slack_ОтправитьЭфемерноеСообщение": false, | ||||
| "Slack_ИзменитьСообщение": false, | ||||
| "Slack_УдалитьСообщение": false, | ||||
| "Slack_ПолучитьСписокОтложенныхСообщений": false, | ||||
| "Slack_ПолучитьСсылкуНаСообщение": false, | ||||
| "Slack_ПолучитьСписокОтветовНаСообщение": false, | ||||
| "Slack_ПолучитьСписокКаналов": false, | ||||
| "Slack_ПолучитьСписокПользователейКанала": false, | ||||
| "Slack_СоздатьКанал": false, | ||||
| "Slack_АрхивироватьКанал": false, | ||||
| "Slack_ПолучитьКанал": false, | ||||
| "Slack_ПолучитьИсториюКанала": false, | ||||
| "Slack_ПригласитьПользователейВКанал": false, | ||||
| "Slack_ВыгнатьПользователяИзКанала": false, | ||||
| "Slack_ВступитьВКанал": false, | ||||
| "Slack_ПокинутьКанал": false, | ||||
| "Slack_УстановитьТемуКанала": false, | ||||
| "Slack_УстановитьЦельКанала": false, | ||||
| "Slack_ПереименоватьКанал": false, | ||||
| "Slack_ОткрытьДиалог": false, | ||||
| "Slack_ЗакрытьДиалог": false, | ||||
| "Slack_ПолучитьСписокФайлов": false, | ||||
| "Slack_ЗагрузитьФайл": false, | ||||
| "Slack_ПолучитьДанныеФайла": false, | ||||
| "Slack_УдалитьФайл": false, | ||||
| "Slack_СделатьФайлПубличным": false, | ||||
| "Slack_СделатьФайлПриватным": false, | ||||
| "Slack_ПолучитьСписокВнешнихФайлов": false, | ||||
| "Slack_ПолучитьВнешнийФайл": false, | ||||
| "Slack_ДобавитьВнешнийФайл": false, | ||||
| "Slack_ОтправитьВнешнийФайл": false, | ||||
| "Slack_УдалитьВнешнийФайл": false, | ||||
| "Slack_СформироватьБлокКартинку": false, | ||||
| "Telegram_ОтправитьМеидагруппу": true, | ||||
| "Telegram_ПолучитьСписокАватаровФорума": true, | ||||
| "VK_СоздатьТоварСоСвойством": true, | ||||
| "YandexDisk_ПолучитьИнформациюОДиске": true, | ||||
| "YandexDisk_СоздатьПапку": true | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/addins/tmpl_plus/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						| @@ -1,32 +0,0 @@ | ||||
| # This file is automatically @generated by Cargo. | ||||
| # It is not intended for manual editing. | ||||
| version = 4 | ||||
|  | ||||
| [[package]] | ||||
| name = "addin1c" | ||||
| version = "0.5.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ef34e8b7ff4c43e87491a4cc30a4779a9f67c50db43378a36362c7a56246e05b" | ||||
| dependencies = [ | ||||
|  "smallvec", | ||||
|  "utf16_lit", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "opi_addin" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "addin1c", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "smallvec" | ||||
| version = "1.13.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" | ||||
|  | ||||
| [[package]] | ||||
| name = "utf16_lit" | ||||
| version = "2.0.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "14706d2a800ee8ff38c1d3edb873cd616971ea59eb7c0d046bb44ef59b06a1ae" | ||||
| @@ -1,16 +0,0 @@ | ||||
| [package] | ||||
| name = "opi_addin" | ||||
| version = "0.1.0" | ||||
| edition = "2021" | ||||
|  | ||||
| [lib] | ||||
| crate-type = ["cdylib"] | ||||
|  | ||||
| [profile.release] | ||||
| lto = true        # Enable Link Time Optimization | ||||
| codegen-units = 1 # Reduce number of codegen units to increase optimizations. | ||||
| panic = "abort"   # Abort on panic | ||||
| strip = true      # Automatically strip symbols from the binary. | ||||
|  | ||||
| [dependencies] | ||||
| addin1c = "0.5.0" | ||||
| @@ -1,7 +0,0 @@ | ||||
| <?xml version='1.0' encoding='UTF-8'?> | ||||
| <bundle xmlns='http://v8.1c.ru/8.2/addin/bundle' name='OPIADDIN'> | ||||
| 	<component os='Windows' path='AddIn_x86_windows.dll' type='native' arch='i386' /> | ||||
| 	<component os='Windows' path='AddIn_x64_windows.dll' type='native' arch='x86_64' /> | ||||
| 	<component os='Linux' path='AddIn_x86_linux.so' type='native' arch='i386' /> | ||||
| 	<component os='Linux' path='AddIn_x64_linux.so' type='native' arch='x86_64' /> | ||||
| </bundle> | ||||
							
								
								
									
										69
									
								
								src/addins/tmpl_plus/release.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,69 +0,0 @@ | ||||
| @echo off | ||||
|  | ||||
| :: Установить переменную | ||||
| set CARGO_NAME=opi_addin | ||||
| set LIB_NAME=OPI_AddIn | ||||
| set OPENSSL_DIR=C:\msys64\mingw64 | ||||
| set OPENSSL_LIB_DIR=%OPENSSL_DIR%\lib | ||||
| set OPENSSL_INCLUDE_DIR=%OPENSSL_DIR%\include | ||||
|  | ||||
|  | ||||
| :: Перейти в директорию проекта | ||||
| cd /d "%~dp0" | ||||
|  | ||||
| :: Создать папку для артефактов | ||||
| set OUTPUT_DIR=artifacts | ||||
| if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%" | ||||
|  | ||||
| :: Сборка для x86_64-pc-windows-msvc | ||||
| cargo build --release --target x86_64-pc-windows-msvc | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| :: Сборка для x86_64-unknown-linux-gnu | ||||
| cargo zigbuild --release --target x86_64-unknown-linux-gnu | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| :: Сборка для i686-pc-windows-msvc | ||||
| cargo build --release --target i686-pc-windows-msvc | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| :: Сборка для i686-unknown-linux-gnu | ||||
| cargo zigbuild --release --target i686-unknown-linux-gnu | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| :: Копирование файлов .dll и .so | ||||
| copy /y target\x86_64-pc-windows-msvc\release\%CARGO_NAME%.dll "%OUTPUT_DIR%\AddIn_x64_windows.dll" | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| copy /y target\i686-pc-windows-msvc\release\%CARGO_NAME%.dll "%OUTPUT_DIR%\AddIn_x86_windows.dll" | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| copy /y target\x86_64-unknown-linux-gnu\release\lib%CARGO_NAME%.so "%OUTPUT_DIR%\AddIn_x64_linux.so" | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| copy /y target\i686-unknown-linux-gnu\release\lib%CARGO_NAME%.so "%OUTPUT_DIR%\AddIn_x86_linux.so" | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| copy /y MANIFEST.XML "%OUTPUT_DIR%\MANIFEST.XML" | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| :: Архивация | ||||
| powershell -Command "Compress-Archive -Path '%OUTPUT_DIR%\*' -Force -DestinationPath '%LIB_NAME%.zip'" | ||||
| if errorlevel 1 goto :error | ||||
|  | ||||
| copy /y "%LIB_NAME%.zip" "../../ru/OInt/addins/%LIB_NAME%.zip" | ||||
| copy /y "%LIB_NAME%.zip" "../../en/OInt/addins/%LIB_NAME%.zip" | ||||
|  | ||||
| copy /y "%LIB_NAME%.zip" "../../ru/OPI/src/CommonTemplates/%LIB_NAME%/Template.addin" | ||||
| copy /y "%LIB_NAME%.zip" "../../en/OPI/src/CommonTemplates/%LIB_NAME%/Template.addin" | ||||
|  | ||||
| if exist "%OUTPUT_DIR%" ( | ||||
|     rmdir /S /Q "%OUTPUT_DIR%" | ||||
| ) | ||||
|  | ||||
| @echo Build and packaging completed successfully. | ||||
| exit /b 0 | ||||
|  | ||||
| :error | ||||
| @echo An error occurred during the build or packaging process. | ||||
| exit /b 1 | ||||
| @@ -1,4 +0,0 @@ | ||||
| pub fn method1() -> bool { | ||||
|     true | ||||
| } | ||||
|  | ||||
| @@ -1,40 +0,0 @@ | ||||
| mod methods; | ||||
|  | ||||
| use std::error::Error; | ||||
| use std::ops::{Index, IndexMut}; | ||||
| use addin1c::{name, MethodInfo, PropInfo, SimpleAddin, Variant}; | ||||
| use crate::core::{getset, self, SimpleRaw}; | ||||
| use crate::core::getset::ValueType; | ||||
|  | ||||
| pub struct AddIn { | ||||
|     pub prop1: String, | ||||
| } | ||||
|  | ||||
|  | ||||
| impl SimpleRaw for AddIn { | ||||
|  | ||||
|     fn new() -> Self { | ||||
|         todo!() | ||||
|     } | ||||
|  | ||||
|     fn classname() -> &'static [u16] { | ||||
|         todo!() | ||||
|     } | ||||
|  | ||||
|     fn method_signatures(&self) -> Vec<(&str, i32)> { | ||||
|         todo!() | ||||
|     } | ||||
|  | ||||
|     fn execute(&mut self, num: usize, params: &mut [Variant]) -> Box<dyn ValueType> { | ||||
|         todo!() | ||||
|     } | ||||
|  | ||||
|     fn props(&self) -> Vec<(&str, &dyn ValueType)> { | ||||
|         todo!() | ||||
|     } | ||||
|  | ||||
|     fn destroy(&mut self) { | ||||
|         todo!() | ||||
|     } | ||||
| } | ||||
| // ------------------------------------------------------------------------------------------------- | ||||
| @@ -1,78 +0,0 @@ | ||||
| use addin1c::{Variant, Tm}; | ||||
|  | ||||
|  | ||||
| pub trait ValueType { | ||||
|     fn get_value(&self, val: &mut Variant) -> bool; | ||||
|     fn set_value(&mut self, val: &Variant); | ||||
| } | ||||
|  | ||||
| // Реализация для i32 | ||||
| impl ValueType for i32 { | ||||
|     fn get_value(&self, val: &mut Variant) -> bool { | ||||
|         val.set_i32(*self); | ||||
|         true | ||||
|     } | ||||
|  | ||||
|     fn set_value(&mut self, val: &Variant) { | ||||
|         *self = val.get_i32().unwrap_or(0); | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Реализация для f64 | ||||
| impl ValueType for f64 { | ||||
|     fn get_value(&self, val: &mut Variant) -> bool { | ||||
|         val.set_f64(*self); | ||||
|         true | ||||
|     } | ||||
|  | ||||
|     fn set_value(&mut self, val: &Variant) { | ||||
|         *self = val.get_f64().unwrap_or(0.0); | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Реализация для bool | ||||
| impl ValueType for bool { | ||||
|     fn get_value(&self, val: &mut Variant) -> bool { | ||||
|         val.set_bool(*self); | ||||
|         true | ||||
|     } | ||||
|  | ||||
|     fn set_value(&mut self, val: &Variant) { | ||||
|         *self = val.get_bool().unwrap_or(false); | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Реализация для tm | ||||
| impl ValueType for Tm { | ||||
|     fn get_value(&self, val: &mut Variant) -> bool { | ||||
|         val.set_date(*self); | ||||
|         true | ||||
|     } | ||||
|  | ||||
|     fn set_value(&mut self, val: &Variant) { | ||||
|         *self = val.get_date().unwrap_or(Tm::default()); | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Реализация для String | ||||
| impl ValueType for String { | ||||
|     fn get_value(&self, val: &mut Variant) -> bool { | ||||
|         let s: Vec<u16> = self.encode_utf16().collect(); | ||||
|         val.set_str1c(s.as_slice()).is_ok() | ||||
|     } | ||||
|  | ||||
|     fn set_value(&mut self, val: &Variant) { | ||||
|         *self = val.get_string().unwrap_or("".to_string()); | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Реализация для Vec<u8> | ||||
| impl ValueType for Vec<u8> { | ||||
|     fn get_value(&self, val: &mut Variant) -> bool { | ||||
|         val.set_blob(self.as_slice()).is_ok() | ||||
|     } | ||||
|  | ||||
|     fn set_value(&mut self, val: &Variant) { | ||||
|         *self = val.get_blob().unwrap_or(&[]).to_vec() | ||||
|     } | ||||
| } | ||||
| @@ -1,77 +0,0 @@ | ||||
| pub mod getset; | ||||
|  | ||||
| use addin1c::{RawAddin, Variant}; | ||||
|  | ||||
| // Определение класса | ||||
| pub trait SimpleRaw: RawAddin + Drop + std::ops::Index<usize> + std::ops::IndexMut<usize> { | ||||
|  | ||||
|     fn new() -> Self; | ||||
|     fn classname() -> &'static [u16]; | ||||
|     fn method_signatures(&self) -> Vec<(&str, i32)>; | ||||
|     fn execute(&mut self, num: usize, params: &mut [Variant]) -> Box<dyn getset::ValueType>; | ||||
|     fn props(&self) -> Vec<(&str, &dyn getset::ValueType)>; | ||||
|     fn destroy(&mut self); | ||||
|  | ||||
|     fn register_extension_as(&mut self) -> &'static [u16] { | ||||
|         self.classname() | ||||
|     } | ||||
|     fn get_n_props(&mut self) -> usize { | ||||
|         self.len() | ||||
|     } | ||||
|     fn find_prop(&mut self, name: &[u16]) -> Option<usize> { self.convert_to_u16(self.props()).iter().position(|&x| x == name) } | ||||
|     fn get_prop_name(&mut self, num: usize, _alias: usize) -> Option<&'static [u16]> { self.convert_to_u16(self.props()).get(num).copied() } | ||||
|     fn get_prop_val(&mut self, num: usize, val: &mut Variant) -> bool {let field: &dyn getset::ValueType = &self[num]; field.get_value(val) } | ||||
|     fn set_prop_val(&mut self, num: usize, val: &Variant) -> bool {let field: &mut dyn getset::ValueType = &mut self[num]; field.set_value(val); true } | ||||
|     fn is_prop_readable(&mut self, _num: usize) -> bool { true } | ||||
|     fn is_prop_writable(&mut self, _num: usize) -> bool { true } | ||||
|     fn get_n_methods(&mut self) -> usize { self.method_names().len() } | ||||
|     fn find_method(&mut self, name: &[u16]) -> Option<usize> { self.method_names().iter().position(|&x| x == name) } | ||||
|     fn get_method_name(&mut self, num: usize, _alias: usize) -> Option<&'static [u16]> { self.method_names().get(num).copied() } | ||||
|     fn get_n_params(&mut self, num: usize) -> usize { self.get_params_amount(num) } | ||||
|     fn get_param_def_value(&mut self, _method_num: usize, _param_num: usize, _value: Variant, ) -> bool { true } | ||||
|     fn has_ret_val(&mut self, _num: usize) -> bool { true } | ||||
|     fn call_as_proc(&mut self, _num: usize, _params: &mut [Variant]) -> bool { false } | ||||
|     fn call_as_func(&mut self, num: usize, params: &mut [Variant], ret_value: &mut Variant, ) -> bool { self.execute(num, params).get_value(ret_value) } | ||||
|     fn get_field_ptr_mut(&mut self, index: usize) -> *mut dyn getset::ValueType { self.get_field_ptr(index) as *mut _ } | ||||
|     fn get_field_ptr(&self, index: usize) -> *const dyn getset::ValueType { | ||||
|  | ||||
|         let field_map = self.props(); | ||||
|  | ||||
|         if index < field_map.len() { | ||||
|             field_map[index].1 as *const _ | ||||
|         } else { | ||||
|             "Err: Prop not found!".to_string() as &dyn getset::ValueType | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     fn drop(&mut self) { self.destroy()} | ||||
|     fn index(&self, index: usize) -> &dyn getset::ValueType { unsafe { &*self.get_field_ptr(index) } } | ||||
|     fn index_mut(&mut self, index: usize) -> &mut Self::Output { unsafe { &mut *self.get_field_ptr_mut(index) } } | ||||
|  | ||||
|     fn convert_to_u16(values: Vec<(&str, &dyn getset::ValueType)>) -> Vec<u16> { | ||||
|         let mut result = Vec::new(); | ||||
|  | ||||
|         for (_, value) in values { | ||||
|             let s = value.as_str(); | ||||
|             result.extend(s.encode_utf16()); | ||||
|         } | ||||
|  | ||||
|         result | ||||
|     } | ||||
|  | ||||
|     fn get_params_amount(&self, index: usize) -> usize { | ||||
|  | ||||
|         let data = self.method_signatures(); | ||||
|  | ||||
|         if index < data.len() { | ||||
|             data[index].1 as usize | ||||
|         } else { | ||||
|             0 | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -1,48 +0,0 @@ | ||||
| pub mod component; | ||||
| mod core; | ||||
|  | ||||
|  | ||||
| use std::{ | ||||
|     ffi::{c_int, c_long, c_void}, | ||||
|     sync::atomic::{AtomicI32, Ordering}, | ||||
| }; | ||||
|  | ||||
| use component::AddIn; | ||||
| use addin1c::{create_component, destroy_component, name, AttachType}; | ||||
|  | ||||
| pub static mut PLATFORM_CAPABILITIES: AtomicI32 = AtomicI32::new(-1); | ||||
|  | ||||
| #[allow(non_snake_case)] | ||||
| #[no_mangle] | ||||
| pub unsafe extern "C" fn GetClassObject(_name: *const u16, component: *mut *mut c_void) -> c_long { | ||||
|  | ||||
|     let addin = AddIn::new(); | ||||
|     create_component(component, addin) | ||||
|  | ||||
| } | ||||
|  | ||||
| #[allow(non_snake_case)] | ||||
| #[no_mangle] | ||||
| pub unsafe extern "C" fn DestroyObject(component: *mut *mut c_void) -> c_long { | ||||
|     destroy_component(component) | ||||
| } | ||||
|  | ||||
| #[allow(non_snake_case)] | ||||
| #[no_mangle] | ||||
| pub extern "C" fn GetClassNames() -> *const u16 { | ||||
|     name!("Main").as_ptr() | ||||
| } | ||||
|  | ||||
| #[allow(non_snake_case)] | ||||
| #[allow(static_mut_refs)] | ||||
| #[no_mangle] | ||||
| pub unsafe extern "C" fn SetPlatformCapabilities(capabilities: c_int) -> c_int { | ||||
|     PLATFORM_CAPABILITIES.store(capabilities, Ordering::Relaxed); | ||||
|     3 | ||||
| } | ||||
|  | ||||
| #[allow(non_snake_case)] | ||||
| #[no_mangle] | ||||
| pub extern "C" fn GetAttachType() -> AttachType { | ||||
|     AttachType::Any | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								src/en/OInt/addins/OPI_TCPServer.zip
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/ru/OInt/addins/OPI_TCPServer.zip
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										755
									
								
								src/ru/OInt/tools/Modules/os
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,755 +0,0 @@ | ||||
| // OneScript: ./OInt/tools/Modules/os | ||||
|  | ||||
| // MIT License | ||||
|  | ||||
| // Copyright (c) 2023 Anton Tsitavets | ||||
|  | ||||
| // Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| // of this software and associated documentation files (the "Software"), to deal | ||||
| // in the Software without restriction, including without limitation the rights | ||||
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| // copies of the Software, and to permit persons to whom the Software is | ||||
| // furnished to do so, subject to the following conditions: | ||||
|  | ||||
| // The above copyright notice and this permission notice shall be included in all | ||||
| // copies or substantial portions of the Software. | ||||
|  | ||||
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
| // SOFTWARE. | ||||
|  | ||||
| // https://github.com/Bayselonarrend/OpenIntegrations | ||||
|  | ||||
| // BSLLS:Typo-off | ||||
| // BSLLS:LatinAndCyrillicSymbolInWord-off | ||||
| // BSLLS:IncorrectLineBreak-off | ||||
| // BSLLS:NumberOfOptionalParams-off | ||||
| // BSLLS:UsingServiceTag-off | ||||
| // BSLLS:LineLength-off | ||||
|  | ||||
| //@skip-check module-structure-top-region | ||||
| //@skip-check module-structure-method-in-regions | ||||
| //@skip-check wrong-string-literal-content | ||||
| //@skip-check method-too-many-params | ||||
| //@skip-check constructor-function-return-section | ||||
|  | ||||
| // Раскомментировать, если выполняется OneScript | ||||
| #Использовать "./internal" | ||||
|  | ||||
| #Область СлужебныйПрограммныйИнтерфейс | ||||
|  | ||||
| Функция СоздатьТаблицу(Знач Модуль, Знач Таблица, Знач СтруктураКолонок, Знач Соединение = "") Экспорт | ||||
|  | ||||
|     ТекстОшибки = "Структура колонок не является валидной структурой ключ-значение"; | ||||
|     OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(СтруктураКолонок, ТекстОшибки); | ||||
|  | ||||
|     Схема = ПустаяСхемаSQL("CREATE"); | ||||
|  | ||||
|     УстановитьИмяТаблицы(Схема, Таблица); | ||||
|  | ||||
|     Для Каждого Колонка Из СтруктураКолонок Цикл | ||||
|         ДобавитьКолонку(Схема, Колонка.Ключ, Колонка.Значение); | ||||
|     КонецЦикла; | ||||
|  | ||||
|     Запрос    = СформироватьТекстSQL(Схема); | ||||
|     Результат = Модуль.ВыполнитьЗапросSQL(Запрос, , , Соединение); | ||||
|  | ||||
|     Возврат Результат; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ДобавитьЗаписи(Знач Модуль | ||||
|     , Знач Таблица | ||||
|     , Знач МассивДанных | ||||
|     , Знач Транзакция = Истина | ||||
|     , Знач Соединение = "") Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьМассив(МассивДанных); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьБулево(Транзакция); | ||||
|  | ||||
|     Соединение = Модуль.ОткрытьСоединение(Соединение); | ||||
|  | ||||
|     Если Не Модуль.ЭтоКоннектор(Соединение) Тогда | ||||
|         Возврат Соединение; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     Если Транзакция Тогда | ||||
|  | ||||
|         Начало = Модуль.ВыполнитьЗапросSQL("BEGIN TRANSACTION", , , Соединение); | ||||
|  | ||||
|         Если Не Начало["result"] Тогда | ||||
|             Возврат Начало; | ||||
|         КонецЕсли; | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|     Счетчик         = 0; | ||||
|     СчетчикУспешных = 0; | ||||
|  | ||||
|     Ошибка          = Ложь; | ||||
|     МассивОшибок    = Новый Массив; | ||||
|     ОшибкаКоллекции = "Invalid data"; | ||||
|  | ||||
|     СтруктураРезультата = Новый Структура; | ||||
|  | ||||
|     Для Каждого Запись Из МассивДанных Цикл | ||||
|  | ||||
|         Если Ошибка И Транзакция Тогда | ||||
|  | ||||
|             Откат = Модуль.ВыполнитьЗапросSQL("ROLLBACK", , , Соединение); | ||||
|  | ||||
|             СчетчикУспешных = 0; | ||||
|             СтруктураРезультата.Вставить("rollback", Откат); | ||||
|             Прервать; | ||||
|  | ||||
|         КонецЕсли; | ||||
|  | ||||
|         Счетчик = Счетчик + 1; | ||||
|         Ошибка  = Ложь; | ||||
|  | ||||
|         Попытка | ||||
|             OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Запись, ОшибкаКоллекции); | ||||
|         Исключение | ||||
|             МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, ОшибкаКоллекции)); | ||||
|             Ошибка = Истина; | ||||
|             Продолжить; | ||||
|         КонецПопытки; | ||||
|  | ||||
|         Результат = ДобавитьЗапись(Модуль, Таблица, Запись, Соединение); | ||||
|  | ||||
|         Если Результат["result"] Тогда | ||||
|  | ||||
|             СчетчикУспешных = СчетчикУспешных + 1; | ||||
|  | ||||
|         Иначе | ||||
|  | ||||
|             МассивОшибок.Добавить(Новый Структура("row,error", Счетчик, Результат["error"])); | ||||
|             Ошибка = Истина; | ||||
|  | ||||
|         КонецЕсли; | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
|     Если Транзакция И Не Ошибка Тогда | ||||
|  | ||||
|         Завершение = Модуль.ВыполнитьЗапросSQL("COMMIT", , , Соединение); | ||||
|         СтруктураРезультата.Вставить("commit", Завершение); | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|     СтруктураРезультата.Вставить("result", МассивОшибок.Количество() = 0); | ||||
|     СтруктураРезультата.Вставить("rows"  , СчетчикУспешных); | ||||
|     СтруктураРезультата.Вставить("errors", МассивОшибок); | ||||
|  | ||||
|      Возврат СтруктураРезультата; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ПолучитьЗаписи(Знач Модуль | ||||
|     , Знач Таблица | ||||
|     , Знач Поля       = "*" | ||||
|     , Знач Фильтры    = "" | ||||
|     , Знач Сортировка = "" | ||||
|     , Знач Количество = "" | ||||
|     , Знач Соединение = "") Экспорт | ||||
|  | ||||
|     Схема = ПустаяСхемаSQL("SELECT"); | ||||
|  | ||||
|     УстановитьИмяТаблицы(Схема, Таблица); | ||||
|     УстановитьЛимит(Схема, Количество); | ||||
|  | ||||
|     ЗаполнитьПоля(Схема, Поля); | ||||
|     ЗаполнитьФильтры(Схема, Фильтры); | ||||
|     ЗаполнитьСортировку(Схема, Сортировка); | ||||
|  | ||||
|     Запрос = СформироватьТекстSQL(Схема); | ||||
|  | ||||
|     Результат = Модуль.ВыполнитьЗапросSQL(Запрос, Схема["values"], , Соединение); | ||||
|  | ||||
|     Возврат Результат; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ОбновитьЗаписи(Знач Модуль | ||||
|     , Знач Таблица | ||||
|     , Знач СтруктураЗначений | ||||
|     , Знач Фильтры    = "" | ||||
|     , Знач Соединение = "") Экспорт | ||||
|  | ||||
|     Схема = ПустаяСхемаSQL("UPDATE"); | ||||
|      | ||||
|     МассивПолей    = Новый Массив; | ||||
|     МассивЗначений = Новый Массив; | ||||
|  | ||||
|     УстановитьИмяТаблицы(Схема, Таблица);  | ||||
|     РазделитьКоллекциюДанных(СтруктураЗначений, МассивПолей, МассивЗначений); | ||||
|  | ||||
|     Схема["values"] = МассивЗначений; | ||||
|      | ||||
|     Для Каждого Поле Из МассивПолей Цикл | ||||
|         ДобавитьПоле(Схема, Поле); | ||||
|     КонецЦикла; | ||||
|      | ||||
|     ЗаполнитьФильтры(Схема, Фильтры); | ||||
|  | ||||
|     Запрос    = СформироватьТекстSQL(Схема); | ||||
|     Результат = Модуль.ВыполнитьЗапросSQL(Запрос, Схема["values"], , Соединение); | ||||
|  | ||||
|     Возврат Результат; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ПолучитьСтруктуруФильтраЗаписей(Знач Пустая = Ложь) Экспорт | ||||
|  | ||||
|     СтруктураФильтра = Новый Структура; | ||||
|  | ||||
|     СтруктураФильтра.Вставить("field", "<имя поля для отбора>"); | ||||
|     СтруктураФильтра.Вставить("type" , "<тип сравнения>"); | ||||
|     СтруктураФильтра.Вставить("value", "<значение для сравнения>"); | ||||
|     СтруктураФильтра.Вставить("union", "<связь со следующим условием: AND, OR и пр.>"); | ||||
|     СтруктураФильтра.Вставить("raw"  , "<истина - значение будет вставлено текстом, как есть, ложь - через параметр>"); | ||||
|  | ||||
|     Если Пустая Тогда | ||||
|         СтруктураФильтра = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураФильтра); | ||||
|     КонецЕсли; | ||||
|  | ||||
|     //@skip-check constructor-function-return-section | ||||
|     Возврат СтруктураФильтра; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область СлужебныеПроцедурыИФункции | ||||
|  | ||||
| #Область Схемы | ||||
|  | ||||
| Функция ПустаяСхемаSelect() | ||||
|  | ||||
|     Схема = Новый Структура("type", "SELECT"); | ||||
|  | ||||
|     Схема.Вставить("table"   , ""); | ||||
|     Схема.Вставить("filter"  , Новый Массив); | ||||
|     Схема.Вставить("order"   , Новый Массив); | ||||
|     Схема.Вставить("limit"   , 0); | ||||
|     Схема.Вставить("set"     , Новый Массив); | ||||
|     Схема.Вставить("values"  , Новый Массив); | ||||
|  | ||||
|     Возврат Схема; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ПустаяСхемаInsert() | ||||
|  | ||||
|     Схема = Новый Структура("type", "INSERT"); | ||||
|  | ||||
|     Схема.Вставить("table", ""); | ||||
|     Схема.Вставить("set"  , Новый Массив); | ||||
|  | ||||
|     Возврат Схема; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ПустаяСхемаUpdate() | ||||
|  | ||||
|     Схема = Новый Структура("type", "UPDATE"); | ||||
|  | ||||
|     Схема.Вставить("table"   , ""); | ||||
|     Схема.Вставить("set"     , Новый Массив); | ||||
|     Схема.Вставить("filter"  , Новый Массив); | ||||
|     Схема.Вставить("values"  , Новый Массив); | ||||
|  | ||||
|     Возврат Схема; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ПустаяСхемаDelete() | ||||
|  | ||||
|     Схема = Новый Структура("type", "DELETE"); | ||||
|  | ||||
|     Схема.Вставить("table" , ""); | ||||
|     Схема.Вставить("filter", Новый Массив); | ||||
|  | ||||
|     Возврат Схема; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ПустаяСхемаCreate() | ||||
|  | ||||
|     Схема = Новый Структура("type", "CREATE"); | ||||
|  | ||||
|     Схема.Вставить("table"  , ""); | ||||
|     Схема.Вставить("columns", Новый Массив); | ||||
|  | ||||
|     Возврат Схема; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Процессоры | ||||
|  | ||||
| Функция СформироватьТекстSelect(Знач Схема) | ||||
|  | ||||
|     ПроверитьОбязательныеПоляСхемы(Схема, "table,filter,order,limit,set"); | ||||
|  | ||||
|     Таблица    = Схема["table"]; | ||||
|     Поля       = Схема["set"]; | ||||
|     Фильтры    = Схема["filter"]; | ||||
|     Сортировка = Схема["order"]; | ||||
|     Количество = Схема["limit"]; | ||||
|  | ||||
|     ШаблонSQL = "SELECT %1 FROM %2 | ||||
|     |%3"; | ||||
|  | ||||
|     БлокНастроек = СформироватьТекстНастроекSelect(Фильтры, Сортировка, Количество); | ||||
|  | ||||
|     ТекстSQL = СтрШаблон(ШаблонSQL, СтрСоединить(Поля, ", "), Таблица, БлокНастроек); | ||||
|  | ||||
|     Возврат ТекстSQL; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстInsert(Знач Схема) | ||||
|  | ||||
|     ПроверитьОбязательныеПоляСхемы(Схема, "table,set"); | ||||
|  | ||||
|     Таблица = Схема["table"]; | ||||
|     Поля    = Схема["set"]; | ||||
|  | ||||
|     ШаблонSQL = "INSERT INTO %1 (%2) VALUES (%3)"; | ||||
|  | ||||
|     Параметры = Новый Массив; | ||||
|  | ||||
|     Для Н = 1 По Поля.Количество() Цикл | ||||
|         Параметры.Добавить("?" + OPI_Инструменты.ЧислоВСтроку(Н)); | ||||
|     КонецЦикла; | ||||
|  | ||||
|     ТекстSQL = СтрШаблон(ШаблонSQL | ||||
|         , Таблица | ||||
|         , СтрСоединить(Поля, ", ") | ||||
|         , СтрСоединить(Параметры, ", ")); | ||||
|  | ||||
|     Возврат ТекстSQL; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстUpdate(Знач Схема) | ||||
|  | ||||
|     ПроверитьОбязательныеПоляСхемы(Схема, "table,set,values"); | ||||
|      | ||||
|     Таблица = Схема["table"]; | ||||
|     Поля    = Схема["set"]; | ||||
|     Фильтры = Схема["filter"]; | ||||
|      | ||||
|     ШаблонSQL = "UPDATE %1 SET %2 %3"; | ||||
|      | ||||
|     ТекстФильтра = СформироватьТекстФильтра(Фильтры); | ||||
|          | ||||
|     Для Н = 0 По Поля.ВГраница() Цикл | ||||
|          | ||||
|         Поля[Н] = Поля[Н] + " = ?" + OPI_Инструменты.ЧислоВСтроку(Н + 1); | ||||
|          | ||||
|     КонецЦикла; | ||||
|      | ||||
|     ТекстSQL = СтрШаблон(ШаблонSQL, Таблица, СтрСоединить(Поля, "," + Символы.ПС), ТекстФильтра); | ||||
|  | ||||
|     Возврат ТекстSQL; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстDelete(Знач Схема) | ||||
|  | ||||
|     ТекстSQL = ""; | ||||
|  | ||||
|     Возврат ТекстSQL; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстCreate(Знач Схема) | ||||
|  | ||||
|     ПроверитьОбязательныеПоляСхемы(Схема, "table,columns"); | ||||
|  | ||||
|     Таблица = Схема["table"]; | ||||
|     Колонки = Схема["columns"]; | ||||
|  | ||||
|     ШаблонSQL = "CREATE TABLE %1 ( | ||||
|     | %2 | ||||
|     | )"; | ||||
|  | ||||
|     ШаблонКолонки = "%1 %2"; | ||||
|  | ||||
|     МассивОписанийКолонок = Новый Массив; | ||||
|  | ||||
|     Для Каждого Колонка Из Колонки Цикл | ||||
|         Для Каждого Элемент Из Колонка Цикл | ||||
|             МассивОписанийКолонок.Добавить(СтрШаблон(ШаблонКолонки, Элемент.Ключ, Элемент.Значение)); | ||||
|         КонецЦикла; | ||||
|     КонецЦикла; | ||||
|  | ||||
|     ОписанияКолонок = СтрСоединить(МассивОписанийКолонок, "," + Символы.ПС); | ||||
|  | ||||
|     ТекстSQL = СтрШаблон(ШаблонSQL, Таблица, ОписанияКолонок); | ||||
|  | ||||
|     Возврат ТекстSQL; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #Область Вспомогательные | ||||
|  | ||||
| Функция ПустаяСхемаSQL(Знач Действие) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Действие); | ||||
|  | ||||
|     Действие = вРег(Действие); | ||||
|  | ||||
|     Если Действие = "SELECT" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаSelect(); | ||||
|  | ||||
|     ИначеЕсли Действие = "INSERT" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаInsert(); | ||||
|  | ||||
|     ИначеЕсли Действие = "UPDATE" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаUpdate(); | ||||
|  | ||||
|     ИначеЕсли Действие = "DELETE" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаDelete(); | ||||
|  | ||||
|     ИначеЕсли Действие = "CREATE" Тогда | ||||
|  | ||||
|         Схема = ПустаяСхемаCreate(); | ||||
|  | ||||
|     Иначе | ||||
|  | ||||
|         Схема = Новый Структура; | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|     Возврат Схема; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстSQL(Знач Схема) | ||||
|  | ||||
|     ТекстОшибки = "Переданное значение не является валидной схемой SQL запроса"; | ||||
|     OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Схема, ТекстОшибки); | ||||
|  | ||||
|     ТипСхемы = ""; | ||||
|  | ||||
|     Если Не OPI_Инструменты.ПолеКоллекцииСуществует(Схема, "type", ТипСхемы) Тогда | ||||
|         ВызватьИсключение ТекстОшибки; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     ТипСхемы = вРег(ТипСхемы); | ||||
|  | ||||
|     Если ТипСхемы = "SELECT" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстSelect(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "INSERT" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстInsert(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "UPDATE" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстUpdate(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "DELETE" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстDelete(Схема); | ||||
|  | ||||
|     ИначеЕсли ТипСхемы = "CREATE" Тогда | ||||
|  | ||||
|         ТекстЗапроса = СформироватьТекстCreate(Схема); | ||||
|  | ||||
|     Иначе | ||||
|  | ||||
|         ТекстЗапроса = ""; | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|     Возврат ТекстЗапроса; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстНастроекSelect(Знач Фильтры, Знач Сортировка, Знач Количество) | ||||
|  | ||||
|     ШаблонБлока = "%1 | ||||
|     |%2 | ||||
|     |%3"; | ||||
|  | ||||
|     ТекстФильтра    = СформироватьТекстФильтра(Фильтры); | ||||
|     ТекстСортировки = СформироватьТекстСортировки(Сортировка); | ||||
|     ТекстКоличества = СформироватьТекстКоличества(Количество); | ||||
|  | ||||
|     ТекстБлока = СтрШаблон(ШаблонБлока, ТекстФильтра, ТекстСортировки, ТекстКоличества); | ||||
|  | ||||
|     Возврат ТекстБлока; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстФильтра(Знач Фильтры) | ||||
|  | ||||
|     Если Не ЗначениеЗаполнено(Фильтры) Тогда | ||||
|         Возврат ""; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     ТекстФильтров = "WHERE %1"; | ||||
|  | ||||
|     МассивФильтров = Новый Массив; | ||||
|  | ||||
|     Счетчик = 1; | ||||
|     Всего   = Фильтры.Количество(); | ||||
|  | ||||
|     Для Каждого Фильтр Из Фильтры Цикл | ||||
|  | ||||
|         ТекущийТекст = "%1 %2 %3 %4"; | ||||
|  | ||||
|         Поле       = Фильтр["field"]; | ||||
|         Тип        = Фильтр["type"]; | ||||
|         Значение   = Фильтр["value"]; | ||||
|         Соединение = Фильтр["union"]; | ||||
|         Соединение = ?(ЗначениеЗаполнено(Соединение), Соединение, "AND"); | ||||
|  | ||||
|         Если Счетчик = Всего Тогда | ||||
|             Соединение = ""; | ||||
|         КонецЕсли; | ||||
|  | ||||
|         ТекущийТекст = СтрШаблон(ТекущийТекст, Поле, Тип, Значение, Соединение); | ||||
|         МассивФильтров.Добавить(ТекущийТекст); | ||||
|  | ||||
|         Счетчик = Счетчик + 1; | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
|     ТекстФильтров = СтрШаблон(ТекстФильтров, СтрСоединить(МассивФильтров, " ")); | ||||
|  | ||||
|     Возврат ТекстФильтров; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстСортировки(Знач Сортировка) | ||||
|  | ||||
|     Если Не ЗначениеЗаполнено(Сортировка) Тогда | ||||
|         Возврат ""; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     ТекстСортировки = "ORDER BY %1"; | ||||
|  | ||||
|     МассивСортировки = Новый Массив; | ||||
|  | ||||
|     Для Каждого Элемент Из Сортировка Цикл | ||||
|  | ||||
|         МассивСортировки.Добавить(Элемент["field"] + " " + Элемент["type"]); | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
|     ТекстСортировки = СтрШаблон(ТекстСортировки, СтрСоединить(МассивСортировки, ", ")); | ||||
|  | ||||
|     Возврат ТекстСортировки; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция СформироватьТекстКоличества(Знач Количество) | ||||
|  | ||||
|     Если Не ЗначениеЗаполнено(Количество) Тогда | ||||
|         Возврат ""; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     ТекстКоличества = "LIMIT %1"; | ||||
|     ТекстКоличества = СтрШаблон(ТекстКоличества, OPI_Инструменты.ЧислоВСтроку(Количество)); | ||||
|  | ||||
|     Возврат ТекстКоличества; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Функция ДобавитьЗапись(Знач Модуль, Знач Таблица, Знач Запись, Знач Соединение) | ||||
|  | ||||
|     МассивПолей    = Новый Массив; | ||||
|     МассивЗначений = Новый Массив; | ||||
|  | ||||
|     Схема = ПустаяСхемаSQL("INSERT"); | ||||
|     УстановитьИмяТаблицы(Схема, Таблица); | ||||
|  | ||||
|     РазделитьКоллекциюДанных(Запись, МассивПолей, МассивЗначений); | ||||
|  | ||||
|     Для Каждого Поле Из МассивПолей Цикл | ||||
|         ДобавитьПоле(Схема, Поле); | ||||
|     КонецЦикла; | ||||
|  | ||||
|     Запрос = СформироватьТекстSQL(Схема); | ||||
|  | ||||
|     Результат = Модуль.ВыполнитьЗапросSQL(Запрос, МассивЗначений, , Соединение); | ||||
|  | ||||
|     Возврат Результат; | ||||
|  | ||||
| КонецФункции | ||||
|  | ||||
| Процедура РазделитьКоллекциюДанных(Знач Запись, МассивПолей, МассивЗначений) | ||||
|  | ||||
|     ТекстОшибки = "Некорректный набор данных для обновления"; | ||||
|     OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Запись, ТекстОшибки); | ||||
|      | ||||
|     Для Каждого Элемент Из Запись Цикл | ||||
|  | ||||
|         МассивПолей.Добавить(Элемент.Ключ); | ||||
|         МассивЗначений.Добавить(Элемент.Значение); | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ЗаполнитьПоля(Схема, Знач Поля) | ||||
|  | ||||
|     Если Не ЗначениеЗаполнено(Поля) Тогда | ||||
|         Поля = "*"; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьМассив(Поля); | ||||
|  | ||||
|     Для Каждого Поле Из Поля Цикл | ||||
|         ДобавитьПоле(Схема, Поле); | ||||
|     КонецЦикла; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ЗаполнитьФильтры(Схема, Знач Фильтры) | ||||
|  | ||||
|     Если Не ЗначениеЗаполнено(Фильтры) Тогда | ||||
|         Возврат; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьМассив(Фильтры); | ||||
|  | ||||
|     Для Каждого Фильтр Из Фильтры Цикл | ||||
|  | ||||
|         ДобавитьОтбор(Схема | ||||
|             , Фильтр["field"] | ||||
|             , ?(Фильтр.Свойство("type"), Фильтр["type"], "=") | ||||
|             , Фильтр["value"] | ||||
|             , ?(Фильтр.Свойство("union"), Фильтр["union"], "AND") | ||||
|             , ?(Фильтр.Свойство("raw"), Фильтр["raw"], Ложь)); | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ЗаполнитьСортировку(Знач Схема, Знач Сортировка) | ||||
|  | ||||
|     Если Не ЗначениеЗаполнено(Сортировка) Тогда | ||||
|         Возврат; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Сортировка); | ||||
|  | ||||
|     Для Каждого Элемент Из Сортировка Цикл | ||||
|  | ||||
|         ДобавитьСортировку(Схема, Элемент.Ключ, Элемент.Значение); | ||||
|  | ||||
|     КонецЦикла; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ПроверитьОбязательныеПоляСхемы(Схема, Знач Поля) | ||||
|  | ||||
|     МассивОбязательныхПолей = СтрРазделить(Поля, ","); | ||||
|     МассивОтсутствующих     = OPI_Инструменты.НайтиОтсутствующиеПоляКоллекции(Схема, МассивОбязательныхПолей); | ||||
|  | ||||
|     Если ЗначениеЗаполнено(МассивОтсутствующих) Тогда | ||||
|         ВызватьИсключение "Отсутствуют необходимые поля схемы: " + СтрСоединить(МассивОтсутствующих, ", "); | ||||
|     КонецЕсли; | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьКолонку(Схема, Знач Имя, Знач Тип) Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); | ||||
|  | ||||
|     Если Не Схема["type"] = "CREATE" Тогда | ||||
|         Возврат; | ||||
|     КонецЕсли; | ||||
|  | ||||
|     СоответствиеКолонки = Новый Соответствие; | ||||
|     СоответствиеКолонки.Вставить(Имя, Тип); | ||||
|  | ||||
|     Схема["columns"].Добавить(СоответствиеКолонки); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьПоле(Схема, Знач Имя) Экспорт | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); | ||||
|  | ||||
|     Схема["set"].Добавить(Имя); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьОтбор(Схема, Знач Поле, Знач Тип, Знач Значение, Знач Группировка, Знач КакЕсть) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Группировка); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьБулево(КакЕсть); | ||||
|  | ||||
|     ОсновнаяСтруктура = Новый Структура("field,type,union" | ||||
|         , Поле | ||||
|         , Тип | ||||
|         , Группировка); | ||||
|  | ||||
|     Если КакЕсть Тогда | ||||
|  | ||||
|         ОсновнаяСтруктура.Вставить("value", Строка(Значение)); | ||||
|  | ||||
|     Иначе | ||||
|  | ||||
|         Схема["values"].Добавить(Значение); | ||||
|  | ||||
|         ПорядковыйНомер = Схема["values"].Количество(); | ||||
|         ОсновнаяСтруктура.Вставить("value", "?" + OPI_Инструменты.ЧислоВСтроку(ПорядковыйНомер)); | ||||
|  | ||||
|     КонецЕсли; | ||||
|  | ||||
|  | ||||
|     Схема["filter"].Добавить(ОсновнаяСтруктура); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура ДобавитьСортировку(Схема, Знач Поле, Знач Тип) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Поле); | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип); | ||||
|  | ||||
|     Схема["order"].Добавить(Новый Структура("field,type", Поле, Тип)); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура УстановитьИмяТаблицы(Схема, Знач Имя) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); | ||||
|  | ||||
|     Схема.Вставить("table", Имя); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура УстановитьЛимит(Схема, Знач Количество) | ||||
|  | ||||
|     OPI_ПреобразованиеТипов.ПолучитьЧисло(Количество); | ||||
|  | ||||
|     Схема.Вставить("limit", Количество); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецОбласти | ||||