Имя: Пароль:
1C
 
Использование классов .Net в 1С для новичков
0 Serginio1
 
27.01.16
11:58
Выложил статью http://catalog.mista.ru/public/448668/ в которой постарался объяснить работу обертки NetObjectToIDispatch45 обертывающую Объекты .Net через Com объекты.
Саму разработку можно скачать отсюда http://files.rsdn.ru/19608/%d0%a4%d0%b0%d0%b9%d0%bb%d1%8bNetObjectToIDispatch.zip

Недавно решенные проблемы
Асинхронные WinHttp.WinHttpRequest.5.1 и MSXML2.XMLHTTP
Помощь с Web сервисом

Предыдущие темы
Динамическая компиляция для использования .Net событий в 1С
1C Messenger для отправки сообщений, файлов и обмена данными между пользователям
v8: v8: Использование сборок .NET в 1С 7.x и 8.x

По поводу регистрации Для проведения тестов нужно распаковать архив . Татем нужно  зарегистрировать
Нужные DLL. Запускаем РегистрацияКомСервера.exe от имени администратораи выбираем NetObjetToIDispatch45.dll которая лежит в DLLNetObjetToIDispatch45
Либо 1с и многопоточность
138 Garykom
 
гуру
16.02.16
15:02
(137) с тем же успехом .Net мог быть в процедурно-функциональном стиле сделан, без классов
и причем тогда ООП и тем более паттерны, про которые речи нет совсем и вообще они из другой оперы
139 Serginio1
 
16.02.16
15:13
(137) Здесь обсуждается как сделанное с помощью ООП применять в 1С. Только и всего.
140 Garykom
 
гуру
16.02.16
18:09
Кстати ТС заново наваял Elisy .Net Bridge
v8: v8: Elisy .Net Bridge 4 для 1С:Предприятие 8.2 (платное ПО)

И бесплатно раздает то что они продавать пытаются
А люди еще и кушать не хотят халяву...
141 Serginio1
 
16.02.16
18:19
(140) У нас разный подход. У него обертка через ВК, у меня через IReflect. Но суть та же, доступ через Reflection. Просто на халяву мало кому нужно. Но самое главное есть кому нужно!
142 Garykom
 
гуру
16.02.16
18:31
(141) судя по комментариям http://catalog.mista.ru/public/20035/ основной массе 1С-ников не нужны инструменты для создания удочек для ловли рыбы
нужна или сразу рыба или хотя бы сеть готовая

получается выход только готовый фреймворк (набор процедур/функций) на 1С для различного функционала сделать
и по заказу уже его дописывать/внедрять - иметь с этого профит
143 Serginio1
 
16.02.16
19:38
(142) Я надеюсь, что с помощью моих разработок многие заинтересуются .Net и будут его использовать как в 1С, так и без неё. Программист обязан постоянно развиваться.
144 Serginio1
 
20.02.16
14:33
Очень часто приходится использовать битовую операци OR

например
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate



или
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite| NotifyFilters.FileName | NotifyFilters.DirectoryName;




Поэтому добавил метод OR. Теперь те же операции можно вызвать

DecompressionMethods= Врап.ПолучитьТип("System.Net.DecompressionMethods");
  handler.AutomaticDecompression=Врап.OR(DecompressionMethods.GZip,DecompressionMethods.Deflate) ;

или

NotifyFilters=врап.ПолучитьТип("System.IO.NotifyFilters");
    рез=Врап.OR(NotifyFilters.LastAccess,NotifyFilters.LastWrite,NotifyFilters.FileName,NotifyFilters.DirectoryName);
145 oleg_km
 
20.02.16
14:55
Буквально сейчас понадобился доступ к буферу обмена:

        БиблАП.ПолучитьNET().ПолучитьТип("System.Windows.Forms.Clipboard", "System.Windows.Forms").SetDataObject(значение, Ложь);
146 Serginio1
 
20.02.16
15:12
(145) Спасибо. На всякий случай ссылка на описание
https://msdn.microsoft.com/ru-ru/library/system.windows.forms.clipboard(v=vs.110).aspx
147 Хранимая Процедура
 
22.02.16
14:45
(138) -

> с тем же успехом .Net мог быть в процедурно-функциональном стиле сделан, без классов


это ты типа так пошутил, да?
148 Garykom
 
гуру
22.02.16
14:52
(147) нет никаких шуток
149 Garykom
 
гуру
22.02.16
14:54
(148)+ конечно для получения удобоваримого результата функций из к примеру массивов или чего еще, пришлось бы кучу других функций использовать
150 sash-ml
 
22.02.16
15:25
(0) асинхронные вызовы можно делать для чего угодно? например получить остатки из другой базы?
151 Хранимая Процедура
 
22.02.16
15:36
(148) - все с тобой ясно, тебе никогда не стать программистом.
152 Garykom
 
гуру
22.02.16
15:41
(151) мнение "не программистов" - эникей-админов не очень меня волнует
153 MishaD
 
22.02.16
15:44
А на новомодном российско линуксе, который наше правительство хочет всем внедрить, вместо богомерзкого виндолса ваш .Net работать будет ?
154 Хранимая Процедура
 
22.02.16
15:44
(152) - а ну, быстро, чем отличается мок от стаба?
155 Serginio1
 
22.02.16
15:45
156 Serginio1
 
22.02.16
15:47
(153) Он и так работает .Net Core, Mono
А вот с 1С только через Вэб, HTTP снрвисы
157 Garykom
 
гуру
22.02.16
15:51
(154) мнение бета-тестеров тоже не сильно волнует
158 Хранимая Процедура
 
22.02.16
15:55
(157) - ну вот, ты путаешь виды тестирования.

И ты же конечно выполняешь только смоук-тесты перед отсылкой клиентам своей нетленки?
159 Garykom
 
гуру
22.02.16
15:58
(158) а когда пытаются щегольнуть умными терминами не понимая основ?
160 Хранимая Процедура
 
22.02.16
16:00
(159) - если бы ты знал бы основы, то понял бы, что я имел ввиду.
161 Хранимая Процедура
 
22.02.16
16:01
а то, что ты путаешь юнит- и бета-тестирование - ту так в школу, в школу, в школу.
162 Garykom
 
гуру
22.02.16
16:04
(156) не обязательно с 1С через веб или http, можно http://catalog.mista.ru/public/300091/
163 Garykom
 
гуру
22.02.16
16:12
(160) ну кто то не в курсе что у C и C# одинаковый синтаксис, поэтому они из одного семейства как и java
"(0) - а каким боком C# является языком из семейства Си?"

(161) юнит-тесты пишут программисты, а (до)школьники только бета-тестить могут
164 ДенисЧ
 
22.02.16
16:13
"у C и C# одинаковый синтаксис, поэтому они из одного семейства как и java "

Ого...
И тут картинка с кошкой у лампы...
165 Garykom
 
гуру
22.02.16
16:18
(164) ну да, а 1С это вообще смесь паскаля/дельфи и визуал бейсика переведенная промптом ))
166 Garykom
 
гуру
22.02.16
16:28
(165)+ к примеру языки 1С 7.7 и 1С 8.Х слегка отличаются в мелочах, но они все равно "из одного семейства"

и точно так же можно считать VB6, VB.Net и VBA разными языками... или все же из одного семейства?
167 Serginio1
 
22.02.16
16:33
(162) Взаимодействие между нативом и манагед кодом в виде только через COM. А вот как в линуксе не знаю. Кроме того в той разработке ограничение на используемые типы
Статические классы не поддерживаются;
Конструктор должен быть без параметров;
Поддерживаются только следующие типы для обмена с 1С: System.String; System.Boolean; System.Int32; System.Double; System.Byte[];
Out и ref параметры не поддерживаются в связи с тем, что не получилось это реализовать,
168 Garykom
 
гуру
22.02.16
16:35
(166)+ еще про VBS(VBScript) забыл, который скриптовый встроенный Windows Script Host(WSH)
169 Garykom
 
гуру
22.02.16
16:45
(167) да использование будет неудобное и теряется смысл, будет проще нечто вроде веб сервиса выполнения кода C#+.Net http://catalog.mista.ru/public/363505/

но можно же "манипулировать" классами .net|mono путем строковых параметров в своих функциях

перем1_ид = врап.СоздатьПеременную("string", "Привет, Мир!");
объект1_ид = врап.СоздатьОбъект("System.Windows.Forms.MessageBox");
врап.ВыполнитьМетод(объект1_ид, "Show", перем1_ид);

ЗЫ но в mono с "System.Windows.Forms" все плохо ((
170 Хранимая Процедура
 
22.02.16
17:03
разговор икспертов по программированию
171 Garykom
 
гуру
22.02.16
17:14
(170) сказал иксперт то словечкам из области тестирования
172 Хранимая Процедура
 
22.02.16
17:17
(171) - 50 проектов по ТДД, а тебе слабо?
173 Garykom
 
гуру
22.02.16
17:17
(172) проектов на чем?
174 Хранимая Процедура
 
22.02.16
17:27
(173) - C#/JS
175 Garykom
 
гуру
22.02.16
17:29
(174) случайно не "Барс" ?
176 Хранимая Процедура
 
22.02.16
17:30
(175) - неа
177 Serginio1
 
22.02.16
17:34
178 Garykom
 
гуру
22.02.16
17:42
(177) не совсем, он поддерживает возможности COM если требуется
179 Serginio1
 
22.02.16
18:01
(177) Остается вопрос есть ли он в .Net Core
180 Хранимая Процедура
 
22.02.16
22:09
а теперь господа, серьезный вопрос:

в настоящий момент я разрабатваю в VS 2010/Windows, а потом передаю иземения через Git на комп с Linux/Mono/MonoDevelop, там тестирую изменения и дорабатываю для Линукс и потом передаю измения обратно.

Вопрос: можно ли как то упростить сабж?
181 Хранимая Процедура
 
22.02.16
22:20
(169) - >ЗЫ но в mono с "System.Windows.Forms" все плохо ((

ты так говоришь, как будто у тебя 50 ПРОВАЛИВШИХСЯ портирований.

И ты так говоришь, как будто ты такой крутой мегаспец и смог отрефакторить лапше-логику в Windows Forms используя Model-View-Presenter паттерн и тебе очень легко удалось все кнопочки и менюшечки на Gtk# переписать.
182 Garykom
 
гуру
22.02.16
22:26
(181) а не пробовали (180) наоборот писать на Linux и тестить потом на Windows?
183 Serginio1
 
22.02.16
22:26
(180) Лучше задай этот вопрос на http://rsdn.ru/ там много спецов.

А .Net Core не пробовал на VS 2015 . Там кстати есть версия и под линукс и IOS
https://code.visualstudio.com/
184 Garykom
 
гуру
22.02.16
22:32
(182)+ есть wine который "правильный" Windows
185 Хранимая Процедура
 
23.02.16
13:00
(182) - ты так пошутил?

ОК, тогда я тебе предложу конфигурацию в блокноте редактировать.
186 Masquerade
 
23.02.16
13:05
(180)
После того как TFS меня задрал глюками и неочевидностью - я использую банальный Дропбокс
187 Masquerade
 
23.02.16
13:06
Между домом и офисом - ну просто душа радуется после TFS.

Главное не забыть дождаться обновления, а то может по дурацки получиться.
188 Хранимая Процедура
 
23.02.16
13:15
(186) - я всегда догадывался, что TFS - отстой
189 Torquader
 
24.02.16
01:17
Ребята - синтаксис языка не очень сильно определяет то, что этот язык описывает.
Синтаксис - это, скорее, удобство написания.
Сейчас практически во всех языках есть понятие объекта, просто в разных случаях в это понятие заложен разный функционал.
В любом случае, вместо объекта в системе реально встречается набор функций, которые определяют действия этого объекта. И только отладка в командах процессора вам покажет, что происходит там на самом деле. Другое дело, что современному программисту иногда даже полезно не знать, как то, что он напишет, транслируется в код, он может сосредоточится на самой задаче, а не на способах хранения данных.
190 Serginio1
 
24.02.16
10:41
На самом деле в 7.7 есть метод
СоздатьОбъект
в 8.х это Новый
Все кто писал на С подобных языках знают что это конструктор объекта экземпляра класса (структуры)

Другое дело, что бы увеличить возможности 1С, а значит и свои то нужно знать другие языки. Это кстати развивает мышление и помогает в решении разного рода задач.
191 Serginio1
 
24.02.16
12:48
Добавлю ссылки на HTTP запросы с упаковкой ответа GZIP
Распаковка gzip строки
Вот результаты запроса
Распаковка gzip строки

Так же ссылка на использование Gzip
Распаковка gzip строки
192 Serginio1
 
24.02.16
17:13
Вот здесь есть внешний отчет для использования Вацапа
http://files.rsdn.ru/19608/WhatsApp.zip
193 Garykom
 
гуру
24.02.16
17:22
Есть заказ на прогу/сервис аггрегатор разных мессенджеров (вайбер, вацап, скайп, телеграм и т.д.)

Т.е. делаем отправку (одним стандартным способом) на номер телефона, а оно уходит через тот мессенджер который к этому номеру привязан и активен
194 Serginio1
 
24.02.16
17:46
Я могу тебе скинуть https://github.com/mgp25/Chat-API-NET

Я делал консольное приложение и через NetNamedPipeBinding используя очереди. А ответ пересылал через Вэб сервис.
195 Shamandafil
 
24.02.16
17:47
(192) Интерфейс страшный и всё через сообщить. А исходники для NET-сборки переходника не в комплекте? Или документация по многочисленным служебным SendQueryLastOnline, SendComposing, SendPaused, SendActive.
196 Garykom
 
гуру
24.02.16
17:56
(194) исходники гляну, тут смысл было бы полезно сделать некую "стандартную основу для чата/мессенджера" и 1-2 "драйвера" для вацап и вайбер к примеру
далее это выложить и уже кто захочет (ну или по заказу) к этому прикрутит другие "драйвера"

для популяризации .net|mono весьма будет
197 Serginio1
 
24.02.16
17:57
(192) Я его делал для тестов. Исходники здесь
https://github.com/mgp25/Chat-API-NET

Сейчас запакую другие исходники
198 Serginio1
 
24.02.16
17:59
(196) Чат и мессенджер http://catalog.mista.ru/public/434771/
Допилить несложно. Хочешь используй HTML или для каждой оси пиши  клиента.
199 Serginio1
 
24.02.16
18:00
(195) Можешь сам написать используя http://catalog.mista.ru/public/417830/
200 Serginio1
 
24.02.16
18:02
Для вацапа тебе нужно только цикл для принятия сообщений
Например я сделал partial и просто добавил класс расширение
namespace WhatsAppApi
{
    public partial  class WhatsApp : WhatsSendBase
    {
        public event Action<Exception> ИсключениеВПотоке;
        public void ProcessChat()
        {
            var wa = this;
            var thRecv = new Thread(t =>
            {
              
                
                while (wa != null && wa.ConnectionStatus == WhatsAppApi.WhatsApp.CONNECTION_STATUS.LOGGEDIN)
                {
                    try
                    {

                        wa.PollMessages();
                        Thread.Sleep(100);
                        continue;



                    }
                    catch (ThreadAbortException)
                    {
                        break;
                    }
                    catch (Exception ex)
                    {
                        if (ИсключениеВПотоке!=null)
                            ИсключениеВПотоке( ex);
                    }
                    continue;
                }

    
            })
            { IsBackground = true, Name = "ProcessChat" };
            thRecv.Start();


        }
201 Shamandafil
 
25.02.16
13:48
Рихтер осуждает Sleep в цикле, когда надо дождаться какого-то события.
202 Serginio1
 
25.02.16
13:53
А чего осуждать то? Это просто отдача времени другому потока. Здесь не событийная система оповещения. Все претензии к авторам библиотеки
203 Serginio1
 
25.02.16
13:53
(201) Кстати вацап то работает?
204 Filin
 
26.02.16
12:39
Вот понимаю, что видимо вещь нужная, но как-то для меня много букв. Есть возможность на маленьком конкретном примере показать обработку событий?
Вот есть программка на с# - https://yadi.sk/d/pMW654nopXuS3
Просто получает данные из ком-порта по событию.
Мне нужно в 1с аналогичным образом получить эти данные, используя класс из С#. Не могу даже начать - информации вроде много, но как-то я заблудился :)
205 Garykom
 
гуру
26.02.16
12:47
(204) примерно так начать
...
порт = врап.СоздатьОбъект("System.IO.Ports.SerialPort");
206 Garykom
 
гуру
26.02.16
12:53
(205)+ далее

порт.PortName = "COM4";
порт.BaudRate = 9600;
порт.DataBits = 8;
четность = врап.ПолучитьТип("System.IO.Ports.Parity");
порт.Parity = четность.None;
...
207 oleg_km
 
26.02.16
13:45
(205) О, так дело Учителя живет.
208 oleg_km
 
26.02.16
13:47
Только что нужно на форме ввода пароля чтобы отображалась текущая раскладка клавиатуры:

    Раскладка = врап.GetType("System.Windows.Forms.InputLanguage", "System.Windows.Forms").CurrentInputLanguage.Culture.TwoLetterISOLanguageName;
209 Garykom
 
гуру
26.02.16
13:48
(208) да способов применения дофига

(207) вот пытаюсь ВК Native API запилить чтобы на mono тоже можно было под linux
210 Filin
 
26.02.16
15:11
C:\Programs\NetObjectToIDispatch>C:\Windows\Microsoft.NET\Framework\v4.0.30319\r
egasm.exe "C:\Programs\NetObjectToIDispatch\DLLNetObjetToIDispatch45\NetObjetToI
Dispatch.dll" /codebase
Microsoft .NET Framework Assembly Registration Utility 4.6.1055.0
для Microsoft .NET Framework 4.6.1055.0
Ну я так понимаю - нужно зарегистрировать сначала?

Вот что выдало при регистрации -


c Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

RegAsm : warning RA0000 : Регистрация неподписанной сборки с использованием пара
метра /codebase может вызвать конфликт данной сборки с другими приложениями, кот
орые могут быть установлены на том же компьютере. Параметр /codebase предназначе
н только для подписанных сборок. Присвойте сборке строгое имя и повторите регист
рацию.
Типы зарегистрированы успешно

Но при попытке создать ком-объект -

Ошибка при вызове конструктора (COMОбъект)
    врап=новый COMОбъект("NetObjectToIDispatch45");
по причине:
Недопустимая строка с указанием класса
211 Garykom
 
гуру
26.02.16
15:30
(210) от админа CMD запускал и регал?
с регистрацией там какие то заморочки помнится, уже намекал несколько раз автору на нужность инсталлятора

еще утилита "РегистрацияКомСервера.exe" правильные пути дает для батника
212 Garykom
 
гуру
26.02.16
15:31
(211)+ а и первый запуск 1С тоже от админа
213 Garykom
 
гуру
26.02.16
15:34
(210) эээ ты версию для .net framework 2 регаешь

там с "45" на конце под "net framework 4.5"
214 Garykom
 
гуру
26.02.16
15:35
215 Serginio1
 
26.02.16
15:53
(210) Это просто предупреждение, что сборка неподписана.
216 Filin
 
26.02.16
15:54
(214) Да вроде отсюда. Зарегить получилось (затупил и регистрировал не ту длл).

Следующий код отрабатывает нормально -

врап=новый COMОбъект("NetObjectToIDispatch45");
    порт = врап.СоздатьОбъект("System.IO.Ports.SerialPort");
    
    порт.PortName = "COM1";
    порт.BaudRate = 9600;
    порт.DataBits = 8;
    четность = врап.ПолучитьТип("System.IO.Ports.Parity");
    порт.Parity = четность.None;
    СтопБит = врап.ПолучитьТип("System.IO.Ports.StopBits");
    порт.StopBits = СтопБит.One;
    Управление = врап.ПолучитьТип("System.IO.Ports.Handshake");
    порт.Handshake = Управление.RequestToSend;
    
    порт.Open();

Теперь как отловитьв 1с событие "DataReceived" ?
217 Serginio1
 
26.02.16
15:59
(204) Во внешних отчетах есть ТестСобытийИзмененийВДиректории.epf
В поле Полное имя класса указываешь полное имя класса
В поле Полное Имя Файла указываешь путь к сборке.

И жмешь Получить описание модулей. Там будут описания на C# и для 1С.

Там же лежит и TestSerialPort.epf
218 Serginio1
 
26.02.16
16:02
Для гаковских сборок можно указать просто имя DLL
Например для SerialPort
https://msdn.microsoft.com/ru-ru/library/system.io.ports.serialport(v=vs.110).aspx
это System.Dll
219 Filin
 
26.02.16
16:05
(218) Указал имя класса  - System.IO.Ports.SerialPort

Получил описание чегото гдето. Что с этим описанием делать?

TestSerialPort.epf смотрю.
220 Serginio1
 
26.02.16
16:15
Вставляешь в обработку. Основной метод  СоздатьОбертку(объект)

Создаешь свой объект и подключаешь события через вызов
СоздатьОбертку(ТвойОбъект)

В методах пропиши свои действия. Там будут два модуля Один через ДобавитОбработчик второй через ОбработкаВнешнегоСобытия

Смотри по аналогии с TestSerialPort.epf
221 Filin
 
26.02.16
16:22
Garykom, Serginio1  - спасибо !
Похоже в TestSerialPort.epf есть все что мне нужно. На тестовой машине с виртуальным портом работает отлично . Буду тестить на железе.
222 Serginio1
 
26.02.16
16:25
oleg_km Garykom

Большое спасибо за поддержку. Был занят.
223 Shamandafil
 
26.02.16
16:32
Посмотрел сборку в студии в ней почему-то 2 пространства имён одно из них NetObjetToIDispatch45, совпадает с именем ДЛЛ, в ней букв С пропущена.
224 Serginio1
 
26.02.16
16:37
(223) А в каком модуле?
225 Serginio1
 
26.02.16
16:39
Все понял. Да проект называется NetObjetToIDispatch45
а namespace NetObjectToIDispatch45
Глазастый! Спасибо. Но менять уже не буду
226 Filin
 
26.02.16
16:42
Serginio1 ,а как остановить обработку события? Или как правильно закрыть обработку?
У меня при закрытии начинает вываливать кучу ошибок.
227 Shamandafil
 
26.02.16
16:42
Я его исправить хотел, но плохо когда класс называется как и пространство имён.
228 Filin
 
26.02.16
16:43
+ (226) Вот что пишет -

Не обработано событие DataReceived
Исключение System.Runtime.InteropServices.COMException (0x000003E9): {Форма.Форма.Форма(50)}: Ошибка при вызове метода контекста (ReadExisting)
Неизвестная ошибка
   в System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
   в System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
   в System.Windows.Forms.WindowsFormsSynchronizationContext.Send(SendOrPostCallback d, Object state)
   в ВрапперДляSystem_IO_Ports_SerialPort.<>c__DisplayClass1b.<ОтослатьСобытиеСПараметром>b__18() в c:\Users\User\AppData\Local\Temp\htq00hr3.0.cs:строка 101
Данные { sender = System.IO.Ports.SerialPort, e = System.IO.Ports.SerialDataReceivedEventArgs }
229 Garykom
 
гуру
26.02.16
16:47
(228) простейше "УдалитьОбработчик"
230 Serginio1
 
26.02.16
16:52
(226) Закрыть порт.Или есть метод
Процедура Остановить()
    Если watcher<>Неопределено Тогда
        watcher.EnableRaisingEvents = false;    
    КонецЕсли;
    
КонецПроцедуры
231 Serginio1
 
26.02.16
16:54
А вообще
watcher.Close()
или
Врап.ПолучитьИнтерфейс(watcher,"IDisposable").Dispose();
232 Filin
 
26.02.16
16:58
Да! Все работает ! Супер вещщь ! Никак по другому не получалось подключить чертову железяку :)
233 Serginio1
 
26.02.16
16:58
Кроме того можно отписаться от событий
Врап.ОчиститьСобытияОбъекта(ОберткаСобытий);

Ну и
watcher=неопределено;
ОберткаСобытий=неопределено;

        GC=Врап.ПолучитьТип("System.GC");
    GC.Collect();
    GC.WaitForPendingFinalizers();
    Врап= Неопределено;
234 Serginio1
 
26.02.16
17:00
(232) Значит мои труды не пропадают зря!
235 Garykom
 
гуру
26.02.16
17:10
(233) может имеет смысл методы для завершения работы в саму ВК встроить готовые?
которые заодно и все евенты того
236 Serginio1
 
26.02.16
17:20
(235) Там вариаций может быть куча. Просто как шаблон
    Врап.ОчиститьСобытияОбъекта(ОберткаСобытий);
    Врап.ПолучитьИнтерфейс(watcher,"IDisposable").Dispose();


    watcher=неопределено;
    ОберткаСобытий=неопределено;

    GC=Врап.ПолучитьТип("System.GC");
    GC.Collect();
    GC.WaitForPendingFinalizers();
    Врап= Неопределено;
237 Serginio1
 
15.03.16
14:51
Понадобилоссь прописать дефолтный принтер в 7 ке

врап=СоздатьОбъект("NetObjectToIDispatch45");
    врап.УстЭтоСемерка();
    

Registry=Врап.ПолучитьТип("Microsoft.Win32.Registry");


Ключ="Software\1C\1Cv7\7.7\ИмяБазы\V7\"+ИмяПользователя()+"\Moxel\";
Сообщить(Ключ);
key = Registry.CurrentUser.OpenSubKey(Ключ);
ОсновнойКлюч=СокрЛП(key.Name)+"\";

Ключи=key.GetSubKeyNames();


Перечислимый=Врап.ПолучитьИнтерфейс(Ключи,"IEnumerable");
Перечислитель=Перечислимый.GetEnumerator();
// На всякий случай приведем к Интерфейсу IEnumerator
Перечислитель=Врап.ПолучитьИнтерфейс(Перечислитель,"IEnumerator");
// Теперь можем пройтись по коллекции

Пока Перечислитель.MoveNext()<>0 Цикл
//  Врап.ВСтроку вывоит строковое представление всех типов в том числе числовые, строки, неопределено
    Сообщить(Врап.ВСтроку(Перечислитель.Current));

    Ключ=ОсновнойКлюч+СокрЛП(Перечислитель.Current);
    ТекПринтер=Registry.GetValue(Ключ,"DefaultPrinter","");
    Сообщить(ТекПринтер);
    
    Если (Принтер<>"") и (ТекПринтер<>"") и (Принтер<>ТекПринтер) Тогда

        Registry.SetValue(Ключ,"DefaultPrinter",Принтер);
    КонецЕсли;
КонецЦикла;
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс