|
Есть ли метод запустить дополнительную обработку без временного файла и сервера? | ☑ | ||
---|---|---|---|---|
0
smaharbA
15.10.13
✎
19:09
|
Есть ли метод запустить программно дополнительную обработку без временного файла в файловом варианте ?
|
|||
1
Fragster
модератор
15.10.13
✎
19:26
|
лично я про такой способ не знаю.
А отчего возникла необходимость? |
|||
2
smaharbA
15.10.13
✎
19:27
|
(1) жалко систему ввода/вывода и диск
часть дополнительных обработок будут стартовать при начале работы системы, стать Обработками в составе конфигурации они не могут. |
|||
3
Fragster
модератор
15.10.13
✎
19:31
|
ну сохрани их куда-нибудь на диск 1 раз и при запуске - проверяй (допустим какую-нибудь версию в имя файла). если версия совпадает - не перезаписывай, а сразу из того файла создавай. правда дыра в безопасности.
|
|||
4
smaharbA
15.10.13
✎
19:32
|
Есть конечно вариант, создавать временный файл с соответствующим флагом (может тогда часть успешно в памяти загрузится и после открытия удалится), но это крайний вариант, требующий наличия либо вк либо COM-обертки на winapi. Конечно сделаю так, если есть соответствующая COM-обертка, будет создавать с флагом, если нет попытается ее выгрузить из макета и зарегистрировать в усерском пространстве и далее использовать, если и это не выйдет - будет через обычные временные файлы.
Вот думал может существует какой финт ушами в самой 1с. |
|||
5
Fragster
модератор
15.10.13
✎
19:32
|
хотя ввод-вывод... пусть программа хоть 5 минут запускается, но работает быстро...
|
|||
6
Лоботряс
15.10.13
✎
19:36
|
Справочник внешних обработок, не?
|
|||
7
Fragster
модератор
15.10.13
✎
19:38
|
(6) а ты смотрел, как он работает?
|
|||
8
Defender aka LINN
15.10.13
✎
19:39
|
Смонтировать какой-нить виртуальный диск, не?
|
|||
9
Лоботряс
15.10.13
✎
19:41
|
(7)Че правда временные файлы созlает? Oo
|
|||
10
Лоботряс
15.10.13
✎
19:43
|
Жуть какая...
|
|||
11
smaharbA
15.10.13
✎
19:53
|
(8) вариант, но для него нужны права либо заранее создан.
Ладно, тогда попутно - есть ли метод получить переменные окружения или shell:xxx в восьмерке встроенными функциями, без com и/или парсиния вывода set ? |
|||
12
Лефмихалыч
15.10.13
✎
20:17
|
(0) а цель-то какая? пролить жизнь ССД накопителю или сэкономить дисковое просранство?
|
|||
13
smaharbA
15.10.13
✎
21:18
|
(12) продлить жизнь НЖМД и немного ускорить загрузку
Конечно это уже маразм, тем не менее. |
|||
14
smaharbA
15.10.13
✎
21:20
|
И еще - в 1с8 работает ленивая булева алгебра ?
|
|||
15
Лефмихалыч
15.10.13
✎
21:36
|
(13) один раз куда-нить сложи и оттель запускай
(14) работает |
|||
16
ilkoder
15.10.13
✎
21:47
|
хотя в системе столько временных файлов открыто, что одним больше, одним меньше...
|
|||
17
H A D G E H O G s
15.10.13
✎
22:42
|
(13) Согласен насчет маразма.
|
|||
18
Зойч
15.10.13
✎
23:24
|
1с открвывает стопицот миллионов времееных файлов для своих нужд
|
|||
19
smaharbA
15.10.13
✎
23:26
|
И еще, как из объекта получить доступ к глобальному контексту или хотя бы к методам ?
|
|||
20
H A D G E H O G s
15.10.13
✎
23:26
|
(19) Тоесть?
|
|||
21
Asmody
15.10.13
✎
23:30
|
(0) нахрена? 1Ска всё равно куски локально накеширует
|
|||
22
smaharbA
15.10.13
✎
23:34
|
(20) т.е.
ТЗ=Новый ТаблицаЗначений; ГК=ТЗ.Приложение; |
|||
23
smaharbA
15.10.13
✎
23:37
|
+(22)
есть староновый метод обмена между открытыми приложениями 1с в одном сеансе пользователя, хорошо бы передать нетолько объекты с их свойствами/методами, а целиком глобальный контекст |
|||
24
H A D G E H O G s
15.10.13
✎
23:46
|
(22) (23) няня я у них поел
Что ты хочешь? Отвечу тебе потоком сознания. Вернуть AppDispatch из ВК? Зарегистрировать 1 сеанс 1С в ROT и получить его из другого сеанса? Обмениваться через объектами через XDTO (транспорт - файл, именованный канал, сокет)? |
|||
25
smaharbA
15.10.13
✎
23:48
|
(24) не то, кроме первого
ссуть метода проста Шел=Новый COMОбъект("shell.application"); Для Сч=1 По 10 Цикл Вопрос("Ждем",РежимДиалогаВопрос.ОК,1); Для Каждого Окно Из Шел.Windows() Цикл Сообщить(Окно); Если Окно.GetProperty("id")=1 Тогда ОкноИЕ=Окно; //Сообщить(ОкноИЕ); ТЗ=ОкноИЕ.GetProperty("ТаблицаЗначений"); Сообщить(ТипЗнч(ТЗ)); Попытка Для Каждого Строка Из ТЗ Цикл Сообщить(Строка.Документ.Номер); КонецЦикла; Исключение КонецПопытки; Если ТипЗнч(ТЗ)=Тип("ТаблицаЗначений") Тогда //ТЗ.ВыбратьСтроку(); КонецЕсли; Сч=12; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; ТаблицаЗначений=Новый ТаблицаЗначений; ТаблицаЗначений.Колонки.Добавить("Документ"); Выбор=Документы.ЗаказПокупателя.Выбрать(); Сч=0; Пока (Выбор.Следующий()) и (Сч<10) Цикл ТаблицаЗначений.Добавить().Документ=Выбор.Ссылка; Сч=Сч+1; КонецЦикла; ОкноИЕ.PutProperty("ТаблицаЗначений",ТаблицаЗначений); |
|||
26
H A D G E H O G s
15.10.13
✎
23:51
|
(25) Мне твои танцы вокруг shell напоминают шаманические напевы. Это не должно работать!
|
|||
27
Torquader
16.10.13
✎
00:04
|
Конечно, приляпать объект к Ослу - много ума не надо.
Но, нужно понимать, как это корявое решение работает: Так как "осёл" - это отдельный процесс, то когда мы ему чего-то приляпываем, что не является простым объектом, то в памяти осла создаётся заглушка, связанная по "указателю" (moniker) с основным объектом, который у нас живёт в памяти 1С. Потом, когда мы "забираем" у "осла" этот чудо-указатель в третий процесс, то система создаёт указатель на указатель. И передача взаимодействия будет идти опять же таки через "осла", что достаточно сильно снизит скорость. Что касается глобального контекста, то у 1С его просто нет. Все глобальные объекты стыкуются с указанными в коде в момент его компиляции, то есть перед выполнением, а не в момент выполнения. Ну, а если очень чего-то хочется, то внешняя функция любого объекта и в ней Вычислить - должно спасти. Если же хочется, чтобы обработка запускалась без создания образа в файле, то самым простым решением будет использование виртуального файлового пространства - но для этого придётся писать драйвер или файловой системы или диска - как вариант - посмотреть примеры zip-folder. |
|||
28
Asmody
16.10.13
✎
00:28
|
эх, а у нормальных людей такое делается вот так http://www.hazelcast.com/whatishazelcast.jsp
|
|||
29
Asmody
16.10.13
✎
00:29
|
а в 1С элементарно сокет поднять целая проблема
|
|||
30
H A D G E H O G s
16.10.13
✎
00:34
|
(29) Нету никаких проблем.
|
|||
31
Asmody
16.10.13
✎
00:36
|
(30) нативно без ВК?
|
|||
32
smaharbA
16.10.13
✎
00:36
|
(26) в одном экземпляре жмем "Отправить", в другом "Получить" (в одном сеансе пользователя)
Перем Идентификатор; Функция ПолучитьОкноОбмена(ИД) Перем Шел,Сч,Окно; Шел=Новый COMОбъект("shell.application"); Для Сч=1 По 10 Цикл Вопрос("Ждем",РежимДиалогаВопрос.ОК,1); Для Каждого Окно Из Шел.Windows() Цикл Если Окно.GetProperty("Идентификатор")=ИД Тогда Возврат Окно; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; КонецФункции Процедура ОсновныеДействияФормыОтправить(Кнопка) // Вставить содержимое обработчика. Перем ОкноОбмена; ЗапуститьПриложение("mshta ""about:<hta:application windowstate=minimize /><script>window.onload=function(){new ActiveXObject('internetexplorer.application').PutProperty('Идентификатор','"+Идентификатор+"')}</script>"""); ОкноОбмена=ПолучитьОкноОбмена(Идентификатор); Если Не ОкноОбмена=Неопределено Тогда ОкноОбмена.PutProperty("КомпонентаСклоненияФИО",глЗначениеПеременной("глКомпонентаСклоненияФИО")); ОкноОбмена.PutProperty("УниверсальныеМеханизмы",УниверсальныеМеханизмы); КонецЕсли; КонецПроцедуры Процедура ОсновныеДействияФормыПолучить(Кнопка) // Вставить содержимое обработчика. Перем ОкноОбмена,КомпонентаСклоненияФИОДругая,УниверсальныеМеханизмыДругие; Перем Фамилия,Имя,Отчество,Результат; ОкноОбмена=ПолучитьОкноОбмена(Идентификатор); Если Не ОкноОбмена=Неопределено Тогда КомпонентаСклоненияФИОДругая=ОкноОбмена.GetProperty("КомпонентаСклоненияФИО"); УниверсальныеМеханизмыДругие=ОкноОбмена.GetProperty("УниверсальныеМеханизмы"); Фамилия="Иванов"; Имя="Иван"; Отчество="Иванович"; Попытка Результат=""; Если УниверсальныеМеханизмыДругие.ПросклонятьФамилиюИмяОтчество(КомпонентаСклоненияФИОДругая,Фамилия,Имя,Отчество,4,,Результат) Тогда Сообщить(Результат); КонецЕсли; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецПроцедуры Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) // Вставить содержимое обработчика. Идентификатор=Формат(ТекущаяДата(),"Л=ru_RU; ДФ=ггггММддчч"); КонецПроцедуры |
|||
33
H A D G E H O G s
16.10.13
✎
00:37
|
(31) Куда мы без ВК то.
|
|||
34
smaharbA
16.10.13
✎
00:37
|
Общие модули можно передавать и объекты, все - можно издеваться выполнив активскрипт в сеансе
|
|||
35
H A D G E H O G s
16.10.13
✎
00:38
|
(32) Что за механизм свойств окон у винды?
Где это описано в winApi? |
|||
36
smaharbA
16.10.13
✎
00:39
|
(35) PutProperty и GetProperty
|
|||
37
smaharbA
16.10.13
✎
00:41
|
||||
38
Asmody
16.10.13
✎
00:41
|
(35) не у винды. это окна того же осла, со всеми вытекающими
|
|||
39
H A D G E H O G s
16.10.13
✎
00:42
|
Понятно. Я уж насторожилсо.
|
|||
40
Asmody
16.10.13
✎
00:45
|
а можно же окно десктопа выловить и к нему цепануться. чтоб окон не плодить.
|
|||
41
Asmody
16.10.13
✎
00:46
|
только с приходом УФ все эти пляски с бубном нафик не сдались
|
|||
42
Torquader
16.10.13
✎
00:56
|
(36) У окон в Windows тоже есть свойства, только под них нужно заранее выделять память.
А "осёл" - это сердце винды, так как без него в ней ничего и не сделаешь. |
|||
43
smaharbA
16.10.13
✎
01:24
|
Упрощаем, по сути в коде вызов ИЕ из-за работы в рдп с альтернативным шелом, в обычном сеансе можно использовать уже открытый как оболочка проводник, а так.
Функция ПолучитьОкноОбмена(ИД,Установить=Ложь) Перем Шел,Сч,Окно; Шел=Новый COMОбъект("shell.application"); Для Сч=1 По 10 Цикл Вопрос("Ждем",РежимДиалогаВопрос.ОК,1); Для Каждого Окно Из Шел.Windows() Цикл Сообщить(Окно); Если (Установить=Истина) или (Окно.GetProperty("Идентификатор")=ИД) Тогда Окно.PutProperty("Идентификатор",ИД); Возврат Окно; КонецЕсли; КонецЦикла; КонецЦикла; КонецФункции Процедура ОсновныеДействияФормыОтправить(Кнопка) Перем ОкноОбмена; ЗапуститьПриложение(ЭтотОбъект.ИспользуемоеИмяФайла+"\..\");//старый, еще семерочный финт ОкноОбмена=ПолучитьОкноОбмена(Идентификатор,Истина); Если Не ОкноОбмена=Неопределено Тогда ОкноОбмена.PutProperty("КомпонентаСклоненияФИО",глЗначениеПеременной("глКомпонентаСклоненияФИО")); ОкноОбмена.PutProperty("УниверсальныеМеханизмы",УниверсальныеМеханизмы); КонецЕсли; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |