Использование сборок .NET в 1С 7. и 8.x. Создание внешних Компонент.

Публикация № 238584

Разработка - Разработка внешних компонент

NetObjectToIDispatch .Net

Данная разработка создана для использования сборок .Net в 1С через преобразование объектов и классов в COM-объекты, которые можно использовать в 1С. Достигается это путем создания класса, реализующего методы интерфейса IReflect public class AutoWrap: IReflect.

Также добавлена возможность использования внешних событий в 1С, в том числе примеры обмена сообщениями по TCP/IP и Работа со сканером ШК, события отслеживание изменений в директории. 
Примеры использование сборок для подключения к Вэб - сервисам, не поддерживаемые 1С. Использование конфигурационных файлов. 

Реализацию ВК внутри сборки для получения Глобального контекста. Использование для установки владельца окна формы главного окна 1С,
вызов внешнего события, использование методов глобального контекста.
Так же добавил возможность показать окно семерки созданное через Новый COMОбъект("V77.Application");

Добавил динамическую компиляцию класса обертки для использования .Net событий через ДобавитьОбработчик или ОбработкаВнешнегоСобытия Статья по их использованию лежит здесь //infostart.ru/public/417830/
Реализация 1C Messenger описанного здесь //infostart.ru/public/434771/
Использование классов .Net в 1С для новичков //infostart.ru/public/448668/
Быстрое создание Внешних Компонент на C#. Примеры использования Глобального Контекста, IAsyncEvent, IExtWndsSupport, WinForms и WPF
//infostart.ru/public/457898/
.Net в 1С. Примеры использования HTTPClient, AngleSharp. Асинхронные HTTP запросы, отправка Post нескольких файлов multipart/form-data, сжатие трафика с использованием gzip, deflate, удобный парсинг сайтов и т.д //infostart.ru/public/466052/
.Net в 1С. На примере использования HTTPClient,AngleSharp.Удобный парсинг сайтов с помощью библиотеки AngleSharp в том числе с авторизацией аля JQuery с использованием CSS селекторов. //infostart.ru/public/466196/
Так же статья invertercant 
Строка в дату. Универсальное решение. Применение NetObjetToIDispatch45 //infostart.ru/public/434345/
.Net в 1С. На примере использования HTTPClient,AngleSharp.Удобный парсинг сайтов с помощью библиотеки AngleSharp в том числе с авторизацией аля JQuery с использованием CSS селекторов. //infostart.ru/public/466196/

Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux //infostart.ru/public/534901/

Данная разработка создана для использования сборок .Net в 1С через преобразование объектов и классов в COM объекты которые можно использовать в 1С. Достигается это путем создания класса реализующим методы интерфейса

IReflect publi cclass AutoWrap : IReflect

Внутри него есть метод который оборачивает объекты не поддерживаемые в 1С в экземпляр класса AutoWrap.

Для облегчения работы с этим классом создан другой класс NetObjectToIDispatch

У него есть следующие методы

public object ПолучитьТип(string type)

Получает тип используя типы загруженных сборок полученный объект позволяет использовать статические методы класса

и члены перечислений примеры взятые отсюда

 http://www.forum.mista.ru/topic.php?id=664174#62

http://dev.mista.ru/topic.php?id=686516

 

 

Пример отправки письма по протоколу Ssl

 

врап=новый COMОбъект("NetObjectToIDispatch45");

            smtp = "smtp.yandex.ru";
            login = "XXXXX@yandex.ru";
            password = "XXXXXXX";
            Кому = "XXXXXXX@YYYYYYYY.ru";
            Port=25;

            mail = врап.СоздатьОбъект("System.Net.Mail.SmtpClient",smtp, Port);

            mail.EnableSsl = true;
            mail.UseDefaultCredentials = false;
            mail.Credentials = врап.СоздатьОбъект("System.Net.NetworkCredential",login, Password);
 
            mail.DeliveryMethod = Врап.ПолучитьТип("System.Net.Mail.SmtpDeliveryMethod").Network;

            Message = врап.СоздатьОбъект("System.Net.Mail.MailMessage");
            MailAddressType= Врап.ПолучитьТип("System.Net.Mail.MailAddress");
            Message.From = врап.СоздатьОбъект(MailAddressType,login);
            Message.To.Add(врап.СоздатьОбъект(MailAddressType,Кому));
            Message.Subject = "Тема Тест отправки почты SSL";
            Message.IsBodyHtml = true;
            Message.Body = "Тело Тест отправки почты SSL";

            mail.Send(Message);//отправка

            Message.Dispose();
            mail.Dispose();

 

Но есть один минус: для типа нельзя вызвать методы типа. Для этого существует метод

public object ТипКакОбъект(object Тип)

из которого можно использовать методы и свойства Type (Например, AssemblyQualifiedName)

public object СоздатьОбъект(object Тип, paramsobject[] args)

 

Создает объект по типу или по строке, используя параметры, которые можно перечислять через запятую. Например

сервер=врап.СоздатьОбъект(тип,парам1,парам2);

public Object ChangeType(string type, object value)

Используя для преобразования типа в нужный тип. В C# используется перегрузка по параметрам. В .Net для чисел много типов, а  1С только один тип.

public object ПолучитьИнтерфейс(object obj, string InterfaseName)

получить интерфейс  объекта.

public object ЗагрузитьСборку(string ПутьКСборке)

загружает сборку и возвращает ссылку на нё.

 

К сожалению, иногда не все методы выполняются. Например ToArray() для List

Или методы с параметром типа GUID (сам метод выполняется, но при передаче результата в 1С выдается ошибка «типы не совпадают» )

Для этого добавлен метод

public object ВыполнитьМетод(object obj, string ИмяМетода, params object[] args)

 

И вызов из 1С

//Ком=ЗагрузкаComОбъекта.ЗагрузитьОбъект(ИмяФайла,стр.Гуид); ошибка  типа
                 Ком=Врап.ВыполнитьМетод(ЗагрузкаComОбъекта,"ЗагрузитьОбъект",ИмяФайла,стр.Гуид);
// Выполняется без ошибок

 

В Net особенно в WCF активно используются конфигурационные файлы.

Для использования их в 1С можно создать такой файл в директории запускаемой программы под именем ИмяЗапускаемойПрограммы.exe.config, например

C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe.config

Или

C:\Program Files (x86)\1cv8\8.3.4.317\bin\1cv8.exe.config

Иногда стоит заменить этот файл на другой. Для этого есть метод

 ЗаменитьConfigFile(string имяФайла)

Если имяФайла=”” тогда берется файл

 typeof(NetObjectToIDispatch45).Assembly.Location + ".config"

 

Как пример показано программное изменение настроек

УстановитьDefaultProxy()

Другие методы созданы для отладки.

Также заложена возможность использования итераторов в 1С, например

рез= сервер.GetForms("Ваяся Пупкин");
Для каждого стр  Из рез Цикл
   сообщить(стр)
КонецЦикла;

Для использования в 1С 7.7 предусмотрено установка УстЭтоСемерка() так как в ней не поддерживается беззнаковые, Decimal и ограничена DateTime без времени.

Приведены примеры для 1С 7.7 и 8.3

Использующие сборку для доступа к Веб Сервису

 

http://www.morpher.ru/WebServices/Morpher.asmx

Использующие загрузку сборок, замену м модификацию конфигурационных файлов.

Вы можете создавать любые сборки или использовать стандартные библиотеки без регистрации.

NestNet45.dll для тестирования 4.5 TestWebServices.dll для тестов 2.0

Также добавлена возможность получения событий в 1С.

Для этого нужно создать сборку в которой создать делегаты и события

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;

using System.Windows.Forms;

using System.Threading;

using System.Reflection;

namespace NetObjectToIDispatch45

{

   [ComVisible(true)]

    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

    [Guid("33B45C9D-1AED-41F9-8880-36AB6AE84749")]

   

public interface IEventFor1C

    {

        [DispId(0x60020000)]

  void Событие();

        [DispId(0x60020001)]

 void СобытиеСПараметром(object value);

    }

    [ComVisible(true)]

    [ClassInterface(ClassInterfaceType.AutoDual)]

    [Guid("62F8156C-13B9-4484-B152-82023243E1D3")]

    [ComSourceInterfaces(typeof(IEventFor1C))]

 public class ClassForEvent1C : System.Windows.Forms.UserControl

    {

        [ComVisible(false)]

 public delegate void Событие_Delgate();

 public delegate void СобытиеСПараметром_Delgate(object value);

public object Объект;

 

 private SynchronizationContext Sc;

public ClassForEvent1C(object Объект,String СобытиеОбъекта,bool ЕстьПараметр=false)

        {

  this.Объект = Объект;

  bf = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;

 EventInfo ei = Объект.GetType().GetEvent(СобытиеОбъекта, bf);

 

 if (ЕстьПараметр)

            ei.AddEventHandler(Объект,new System.Action(ВнешнееСобытие));

   else

            ei.AddEventHandler(Объект,new System.Action<object>(ВнешнееСобытиеСПараметром));

 

  SynchronizationContext.SetSynchronizationContext(newWindowsFormsSynchronizationContext());

            Sc =SynchronizationContext.Current;

        }

     

 public event Событие_Delgate Событие;

 public event СобытиеСПараметром_Delgate СобытиеСПараметром;

 

private void ВнешнееСобытие()

        {

if (this.Событие != null) //Событие();

              Sc.Send(d => Событие(),null);

       }

     

private void ВнешнееСобытиеСПараметром(object value)

        {

if (this.СобытиеСПараметром != null) //Событие();

                Sc.Send(d => СобытиеСПараметром(AutoWrap.ОбернутьОбъект(value)), null);

 

        }

    }

}

Использование в 1С

 

Перем ОбъектССобытием;
Процедура ТестСобытияНажатие(Элемент)
врап=новый COMОбъект("NetObjectToIDispatch45");
Сборка=врап.загрузитьСборку(ИмяФайлаСборки); //ПроектИспользованияДелегатов.dll
тип=Сборка.GetType("ПроектИспользованияДелегатов.КлассДляВнешнихСобытий");

ОбъектССобытием=врап.СоздатьОбъект(Тип,КаталогДляОтслеживанияИзменений);
Событие=Врап.ПолучитьОбъектДляСобытий(ОбъектССобытием,"Событие");
СобытиеПереименования=Врап.ПолучитьОбъектДляСобытий(ОбъектССобытием,"СобытиеПереименованияФайла");

ДобавитьОбработчик Событие.Событие, ПриИзмененииДиректории;
ДобавитьОбработчик СобытиеПереименования.Событие, ПриПереименованииФайла;

  КонецПроцедуры

  Процедура ПриИзмененииДиректории()
      Сообщить(ОбъектССобытием.ИзмененныйФайл);
  КонецПроцедуры

  Процедура ПриПереименованииФайла()
      Сообщить(ОбъектССобытием.ПереименованныйФайл);
  КонецПроцедуры

 

Так же добавил сборку для обмена сообщениями по TCP/IP и сканера Штрих кода

В сборке ОбменПоTCPIP., при этом данные сжимаются GZip ом.

Пример использования на сервере

 

Функция СоздатьСерверTCP(Врап)

      Если не ЗначениеЗаполнено(ИмяФайлаСборки) Тогда
   вызватьИсключение   "Не выбрано Имя Файла Сборки"
   
КонецЕсли;


     врап=новый COMОбъект("NetObjectToIDispatch45");
ФайлСборки=ИмяФайлаСборки;//"d:\MyPrograms\Test\ОбменПоTCPIP\ОбменПоTCPIP\bin\Debug\ОбменПоTCPIP.dll";
Сборка=врап.загрузитьСборку(ФайлСборки); //ПроектИспользованияДелегатов.dll
тип=Сборка.GetType("TCPConnectTo1C.TCPConnector");

СерверTCP=врап.СоздатьОбъект(Тип);
возврат   СерверTCP

  КонецФункции // СоздатьTCP()

  Процедура ЗапуститьСерверTCPIPНажатие(Элемент)
      // Вставить содержимое обработчика.
      перем Врап;
СерверTCP=СоздатьСерверTCP(Врап);

  Событие=Врап.ПолучитьОбъектДляСобытийСПараметром(СерверTCP,"ПришлоСообщениеПоTCP");

ДобавитьОбработчик Событие.СобытиеСПараметром, ПолучениеДанныхПоTCP;
СерверTCP.ОткрытьАйПиПортСНомеромПорта(6891);

ЭлементыФормы.ОтправитьКоманду.Видимость=ложь;

КонецПроцедуры

Процедура ПолучениеДанныхПоTCP(Данные)
Сообщить("Команда="+Данные.Команда);
Сообщить("Данные="+Данные.Данные);
Сообщить("ЕстьОтвет="+Данные.ЕстьОтвет);

Если Данные.ЕстьОтвет Тогда
Ответ="Ответ на команду "+Данные.Команда+"
|Данные "+Данные.Данные+"
|ВремяНаСервере="+XmlСтрока(ТекущаяДата());
СерверTCP.Ответить(Ответ);


КонецЕсли;

КонецПроцедуры


На Клиенте

Процедура ОтправитьКомандуНажатие(Элемент)
перем Врап;

    КлиентTCP=СоздатьСерверTCP(Врап);

    ServerAdress="127.0.0.1";
    порт=6891;
    Команда="Тест Отправки Сообщения";
    ДанныеДляКоманды=XmlСтрока(ТекущаяДата());

    ЕстьОтвет=истина;
    ЗакрытьСоединение=истина;
    ОшибкаСоединения=false;

    резулт=КлиентTCP.ОтправитьКоманду(ServerAdress,порт,Команда,ДанныеДляКоманды,ЕстьОтвет,ЗакрытьСоединение);
    Сообщить(резулт.Данные);
        Если резулт.ОшибкаСоединения Тогда
            СтрОшибки="ОшибкаСоединения
            |"+резулт.Данные;
        Предупреждение(СтрОшибки);
        КонецЕсли;
КонецПроцедуры

И добавлена работа со Сканером ШК. К сожалению проверить его работу не могу, ввиду отсутствия сканера

Процедура ОткрытьПортСканераНажатие(Элемент)
    перем Врап;
    // Вставить содержимое обработчика.
    НомерПорта=0;
    Если не ВвестиЧисло(НомерПорта,"Введите номе COM порта",4,0) Тогда
        возврат
    КонецЕсли;
     СерверTCP=СоздатьСерверTCP(Врап);
    Событие=Врап.ПолучитьОбъектДляСобытийСПараметром(СерверTCP,"ДанныеОтСканера");
    ДобавитьОбработчик Событие.СобытиеСПараметром, ПолучениеДанныхПоTCP;

    СерверTCP.ПодключитьСканер(НомерПорта);

КонецПроцедуры

Процедура ПолучениеДанныхОтСканераШК(Данные)
Сообщить("ИмяПорта="+Данные.ИмяПорта);
Сообщить("ШтрихКод="+Данные.Данные);


КонецПроцедуры

 

И добавлен приер загрузки объекта из DLL без регистрации на примере загрузки

Из comcntr.dll класс COMConnector. Для примера когда нужно подключиться к Базе  с версией отличной от текущей

 

Добавил пример использования конфигурационного файла в WCF клиентах в DLL

 

public object СоздатьКлиентаWCFConfigFile(string ИмяФайла, object TChannel, string endpointConfigurationName, object endpointAddress)

        {

  ExeConfigurationFileMap fileMap = newExeConfigurationFileMap();

            fileMap.ExeConfigFilename = ИмяФайла;

 Configuration newConfiguration = ConfigurationManager.OpenMappedExeConfiguration(

                fileMap,

 ConfigurationUserLevel.None);

 Type ТипКанала=ТипДляСоздатьОбъект(TChannel);

 Type type= typeof(ConfigurationChannelFactory<>);

 Type constructed = type.MakeGenericType(ТипКанала);

 dynamic factory1 = System.Activator.CreateInstance(constructed,

                endpointConfigurationName,

                newConfiguration,

            AutoWrap.ПолучитьРеальныйОбъект(endpointAddress)

                );

return AutoWrap.ОбернутьОбъект(factory1.CreateChannel());

        }

 

Процедура ВызовСервисаИспользуяConfigFileНажатие(Элемент)     // Вставить содержимое обработчика.         врап=новый COMОбъект("NetObjectToIDispatch45");
    //Сборка=врап.загрузитьСборку("d:\MyPrograms\Test\NestNet45\NestNet45\bin\Debug\NestNet45.dll");     Сборка=врап.загрузитьСборку(ИмяФайлаСборки);     TChannel=Сборка.GetType("NestNet45.ServiceReference1.MorpherSoap");     ConfigFile=ИмяФайлаСборки+".config";     endpointConfigurationName="MorpherSoap";     endpointAddress=Неопределено;     Клиент=врап.СоздатьКлиентаWCFConfigFile(ConfigFile,TChannel,endpointConfigurationName,endpointAddress);
    // Вызываю метод и вывожу результат     рез = Клиент.GetForms("Ваяся Пупкин");
    Для каждого стр  Из рез Цикл         сообщить(стр)     КонецЦикла;
КонецПроцедуры

 

Подправил обертку объектов. Теперь массивы примитивных типов строки, дата, Decimal возвращаются как родные для 1С COMSafeArray.

Для массива объектов нужно отдельно преобразовать через функция

ПолучитьSafeArrayИзЭнумератора(Object Массив)

 

 

Так же при работе с событиями проще сделать комовский класс с событиями например
// Создаем интерфейс доступных событий из 1С
  [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IEventFor1C
    {
        [DispId(0x00000001)]
        void Событие();

        [DispId(0x00000002)]
        void СобытиеПереименованияФайла(object ИмяДиректории);
    }


// Указываем какие комовские события будет реализовывать класс
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComSourceInterfaces(typeof(IEventFor1C))]
    public class КлассДляВнешнихСобытий2
    {
        public string ИзмененныйФайл;
        public string ПереименованныйФайл;
        public event System.Action Событие;
        [ComVisible(false)]
        public delegate void СобытиеСПараметром_Delgate(object value);
        public event СобытиеСПараметром_Delgate СобытиеПереименованияФайла;
        public FileSystemWatcher watcher;
        dynamic Врапер;
        private SynchronizationContext Sc;
        private void ИзмененияВДиректории(object source, FileSystemEventArgs e)
        {
            // Specify what is done when a file is changed, created, or deleted.
            ИзмененныйФайл = e.FullPath + " " + e.ChangeType;
            if (this.Событие != null)
                Sc.Send(d => Событие(), null);

        }

// Врапер это объект который создается через
//врап=новый COMОбъект("NetObjectToIDispatch45");
// Нужен для обертки объектов в AutoWrap
        public КлассДляВнешнихСобытий2(Object  Врапер,string Директория)
        {
        this.Врапер=Врапер;
// SynchronizationContext нужен для того, что вызов проходил в потоке 1С
        SynchronizationContext.SetSynchronizationContext(new System.Windows.Forms.WindowsFormsSynchronizationContext());
        Sc = SynchronizationContext.Current;

            watcher = new FileSystemWatcher();
            watcher.Path = Директория;
            /* Watch for changes in LastAccess and LastWrite times, and
               the renaming of files or directories. */
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            // Only watch text files.
            watcher.Filter = "*.*";

            // Add event handlers.
            watcher.Changed += new FileSystemEventHandler(ИзмененияВДиректории);
            watcher.Created += new FileSystemEventHandler(ИзмененияВДиректории);
            watcher.Deleted += new FileSystemEventHandler(ИзмененияВДиректории);
            watcher.Renamed += new RenamedEventHandler(OnRenamed);

            // Begin watching.
            watcher.IncludeSubdirectories = true;

            watcher.EnableRaisingEvents = true;



        }

        private void OnRenamed(object source, RenamedEventArgs e)
        {
            // Specify what is done when a file is renamed.

            ПереименованныйФайл = string.Format("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
            if (this.СобытиеПереименованияФайла != null)
               Sc.Send(d => СобытиеПереименованияФайла(Врапер.ОбернутьОбъект(ПереименованныйФайл)),null);
// В данном случае ПереименованныйФайл это строка и Врапер.ОбернутьОбъект(ПереименованныйФайл) для примера,
// что бы показать как обернуть любой объек в AutoWrap не читаемый из 1С Net объект
        }

    }
И соответственно вызов из 1С

врап=новый COMОбъект("NetObjectToIDispatch45");
    Сборка=врап.загрузитьСборку(ИмяФайлаСборки); //ПроектИспользованияДелегатов.dll
    тип=Сборка.GetType("ПроектИспользованияДелегатов.КлассДляВнешнихСобытий2");

    ОбъектССобытием2=врап.СоздатьОбъект(Тип,врап,КаталогДляОтслеживанияИзменений);

// Нужен для доступа к комовским событиям
    КомОбъектССобытием=Врап.ПолучитьРеальныйОбъект(ОбъектССобытием2);

    ДобавитьОбработчик КомОбъектССобытием.Событие, ПриИзмененииДиректории;
    ДобавитьОбработчик КомОбъектССобытием.СобытиеПереименованияФайла, ПриПереименованииФайла2;

При выходе можно очистить события.

Если ОбъектССобытием2<>Неопределено  Тогда

        врап.ОчиститьСобытияОбъекта(ОбъектССобытием2.watcher);
        врап.ОчиститьСобытияОбъекта(ОбъектССобытием2);

КонецЕсли;

 

 

Добавил реализацию ВК внутри сборки для получения Глобального контекста. Использование

 

Если ПодключитьВнешнююКомпоненту("AddIn.GlobalContext1C") Тогда
        объект=Новый ("AddIn.GlobalContext1C");
ГлобальныйКонтекст=объект.ГлобальныйКонтекст;
  AppDispatch=ГлобальныйКонтекст.AppDispatch;
  AppDispatch.Сообщить("Привет");
        иначе
        сообщить("Компонента не загружена");
    КонецЕсли;


Использование Внутри Net.

 

public ТестВК(object Object1C)

 

    {

        this.Object1C = Object1C;

 

        ГК = new ДинамикГК(Object1C);

}

public string СоздатьОкно() {

 

    //    m_1cApp.AppDispatch.Сообщить("Привет из ВК");

 

    // не работает для упрощения работы создань динамический объект ДинамикГК

 

    // выполняющий аналогичную фунцию

 

            IExtWndsSupport n;

 

            ГК.Сообщить("Привет из ВК", ГК.СтатусСообщения.Важное);

 

            n = (IExtWndsSupport)Object1C;

 

            IntPtr hwnd;

 

             n.GetAppMainFrame(out hwnd);

 

    // Создаем форму, устанавливаем нативные хэндлы и устанвливаем окно 1С владельцем нетовского окна

 

            var form = new Form1();

 

            form.CreateControl();

 

            SetOwner(form.Handle.ToInt32(), hwnd.ToInt32());

 

            form.EventTo1C = Object1C as IAsyncEvent;

 

          form.Show();

 

            return "Методы ВК выполнены!";

 

        }

private async void button1_Click(object sender, EventArgs e)

 

        {

 

            var ПотокПриложения = Thread.CurrentThread.ManagedThreadId;

 

            // Для чистоты эксперимента вызовим события из потока отличного от потока приложения.

 

            // Что бы await не использовал текущий контекст установим ConfigureAwait(false)

 

            await Task.Delay(1000).ConfigureAwait(false); // делаем задержку в секунду и вызываем событие

 

            var ПотокСобытия = Thread.CurrentThread.ManagedThreadId;

 

            // Для вызова в тотоке приложения вызовем метод из его потока

 

            Sc.Send(d => EventTo1C.ExternalEvent("ДанныеИзТестВК", "Тест", string.Format("Поток Приложения={0} Поток события {1}",ПотокПриложения,ПотокСобытия)), null);

 

            // Если очень быстро кликать по кнопке то потоки события будут разными

 

        }

 

Также добавил возможность показать окно семерки созданное через Новый COMОбъект("V77.Application");

Скачать файлы

Наименование Файл Версия Размер
ФайлыNetObjectToIDispatch.zip

.zip 41,18Mb
14.07.16
289
.zip 41,18Mb 289 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. oleg_km 28.11.13 20:05 Сейчас в теме
Некоторые примеры использования:

Процедура Приостановить(ВремяПаузы) Экспорт
ПолучитьТип("System.Threading.Thread").Sleep(ВремяПаузы);
КонецПроцедуры

Функция ПолучитьКоманднуюСтроку() Экспорт
Возврат ПолучитьТип("System.Environment").CommandLine;
КонецФункции

Функция ПолучитьТекущийПринтер() Экспорт
Возврат СоздатьОбъект(ПолучитьТип("System.Drawing.Printing.PrinterSettings", "System.Drawing")).PrinterName;
КонецФункции

Функция ПолучитьТекущийПроцесс() Экспорт
Возврат ПолучитьТип("System.Diagnostics.Process", "System").GetCurrentProcess().Id;
КонецФункции

Процедура СкопироватьПоток(вхПоток, исхПоток, РазмерПорции = 100000) Экспорт
Пока Истина Цикл
мсДанные = СоздатьМассив(ПолучитьТип("System.Byte"), РазмерПорции);
число = вхПоток.Read(мсДанные, 0, мсДанные.Length);
Если число = 0 Тогда Прервать; КонецЕсли;
исхПоток.Write(мсДанные, 0, число);
КонецЦикла;
КонецПроцедуры

// Компрессия
Процедура GZIPУпаковать(вхФайл, исхФайл) Экспорт
УдалитьФайлы(исхФайл);

типФайл = ПолучитьТип("System.IO.FileStream");
типРежим = ПолучитьТип("System.IO.FileMode");
типДоступ = ПолучитьТип("System.IO.FileAccess");
типРазделение = ПолучитьТип("System.IO.FileShare");

обФайлИсходный = СоздатьОбъект(типФайл, вхФайл, типРежим.Open, типДоступ.Read, типРазделение.ReadWrite);
обФайлАрхив = СоздатьОбъект(типФайл, исхФайл, типРежим.CreateNew, типДоступ.Write);
обПотокКомпр = СоздатьОбъект(ПолучитьТип("System.IO.Compression.GZipStream", "System"),
обФайлАрхив, ПолучитьТип("System.IO.Compression.CompressionMode", "System").Compress);

СкопироватьПоток(обФайлИсходный, обПотокКомпр);

обПотокКомпр.Close();
обФайлАрхив.Close();
обФайлИсходный.Close();
КонецПроцедуры

Процедура GZIPРаспаковать(вхФайл, исхФайл) Экспорт
УдалитьФайлы(исхФайл);

типФайл = ПолучитьТип("System.IO.FileStream");
типРежим = ПолучитьТип("System.IO.FileMode");
типДоступ = ПолучитьТип("System.IO.FileAccess");
типРазделение = ПолучитьТип("System.IO.FileShare");

обФайлАрхив = СоздатьОбъект(типФайл, вхФайл, типРежим.Open, типДоступ.Read, типРазделение.ReadWrite);
обФайлНовый = СоздатьОбъект(типФайл, исхФайл, типРежим.CreateNew, типДоступ.Write);
обПотокКомпр = СоздатьОбъект(ПолучитьТип("System.IO.Compression.GZipStream", "System"),
обФайлАрхив, ПолучитьТип("System.IO.Compression.CompressionMode", "System").Decompress);

СкопироватьПоток(обПотокКомпр, обФайлНовый);

обПотокКомпр.Close();
обФайлАрхив.Close();
обФайлНовый.Close();
КонецПроцедуры

// Получение хеша
Функция ПолучитьХешСтроки(текСтрока, Провайдер = "MD5") Экспорт
мсДанные = ПолучитьКодировку().GetBytes(текСтрока);
Возврат Хеш2Строка(СоздатьКриптоПровайдер(Провайдер).ComputeHash(мсДанные));
КонецФункции

Функция ПолучитьХешФайла(ИмяФайла, Провайдер = "MD5") Экспорт
обФайл = СоздатьОбъект(ПолучитьТип("System.IO.FileStream"), ИмяФайла,
ПолучитьТип("System.IO.FileMode").Open,
ПолучитьТип("System.IO.FileAccess").Read,
ПолучитьТип("System.IO.FileShare").ReadWrite);

Рез = Хеш2Строка(СоздатьКриптоПровайдер(Провайдер).ComputeHash(обФайл));
обФайл.Close();

Возврат Рез;
КонецФункции

Функция СоздатьКриптоПровайдер(Провайдер)
//SHA SHA1CryptoServiceProvider
//SHA1 SHA1CryptoServiceProvider
//System.Security.Cryptography.SHA1 SHA1CryptoServiceProvider
//System.Security.Cryptography.HashAlgorithm SHA1CryptoServiceProvider
//MD5 MD5CryptoServiceProvider
//System.Security.Cryptography.MD5 MD5CryptoServiceProvider
//SHA256 SHA256Managed
//SHA-256 SHA256Managed
//System.Security.Cryptography.SHA256 SHA256Managed
//SHA384 SHA384Managed
//SHA-384 SHA384Managed
//System.Security.Cryptography.SHA384 SHA384Managed
//SHA512 SHA512Managed
//SHA-512 SHA512Managed
//System.Security.Cryptography.SHA512 SHA512Managed

КлючПровайдера = "Hash_" + Провайдер;
обПровайдер = КешОбъектов[КлючПровайдера];

Если обПровайдер = Неопределено Тогда
обПровайдер = ПолучитьТип("System.Security.Cryptography.HashAlgorithm").Create(Провайдер);
КешОбъектов.Вставить(КлючПровайдера, обПровайдер);
КонецЕсли;

Возврат обПровайдер;
КонецФункции

Функция Хеш2Строка(мсХеш)
стрРез = СоздатьОбъект(ПолучитьТип("System.Text.StringBuilder"), мсХеш.Length * 2);
Для ии = 0 По мсХеш.Length - 1 Цикл
стрРез.AppendFormat("{0:X2}", мсХеш.GetValue(ии));
КонецЦикла;
Возврат СокрЛП(стрРез.ToString());
КонецФункции
Denanhel; NittenRenegade; METAL; tormozit; c1nil; awk; +6 Ответить
60. ive 18.09.18 16:34 Сейчас в теме
(1)
учитьТип("System.IO.Compression.CompressionMode", "System").Compre


Спасибо автору,

обПотокКомпр = врап.СоздатьОбъект(ПолучитьТип("System.IO.Compression.GZipStream", "System"),
обФайлАрхив, врап.ПолучитьТип("System.IO.Compression.CompressionMode", "System").Decompress); у меня только выдало ошибку с неверным количеством параметров, заработало так:

врап.СоздатьОбъект("System.IO.Compression.GZipStream", обФайлАрхив, CompressionMode.Compress)
2. Serginio 827 23.10.14 13:01 Сейчас в теме
Исправил метод СоздатьКлиентаWCFConfigFile(string ИмяФайла, object TChannel, string endpointConfigurationName, object endpointAddress=null,string UserName=null, string Password=null)
Для передачи UserName и Password при соединении

public object СоздатьКлиентаWCFConfigFile(string ИмяФайла, object TChannel, string endpointConfigurationName, object endpointAddress=null,string UserName=null, string Password=null)
        {
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = ИмяФайла;
            Configuration newConfiguration = ConfigurationManager.OpenMappedExeConfiguration(
                fileMap,
                ConfigurationUserLevel.None);


            Type ТипКанала = ТипДляСоздатьОбъект(TChannel);
            Type type = typeof(ConfigurationChannelFactory<>);
            Type constructed = type.MakeGenericType(ТипКанала);

            dynamic factory1 = System.Activator.CreateInstance(constructed,
                endpointConfigurationName,
                newConfiguration,
                AutoWrap.ПолучитьРеальныйОбъект(endpointAddress)
                );

            if (!String.IsNullOrWhiteSpace(UserName))
            {
               
                factory1.Credentials.UserName.UserName = UserName;
                factory1.Credentials.UserName.Password = Password;
           
            }

            return AutoWrap.ОбернутьОбъект(factory1.CreateChannel());
        }
Показать


И применение в 1С
Функция ПолучитьКлиента()
  TChannel=Сборка.GetType(namespace + "IService");
    ConfigFile=ИмяФайлаСборки+".config";
    endpointConfigurationName=""BasicHttpBinding_IService";
  //  endpointAddress=Неопределено;




    _client=врап.СоздатьКлиентаWCFConfigFile(ConfigFile,TChannel,endpointConfigurationName,,_UserName_,_Password_);

возврат _client

 КонецФункции
Показать
3. bayce 40 09.01.15 14:28 Сейчас в теме
Эта компонента будет работать в УФ?
4. Serginio 827 11.01.15 12:11 Сейчас в теме
(3) bayce, Это не компонента, а COM объект который доступен Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение

При этом библиотека регистрируется как 32 так 64 разрядная. То есть можно использовать на 64 разрядном сервере приложений
5. vasiliy_b 281 28.07.15 15:58 Сейчас в теме
Добрый день. У меня вопрос по Вашей публикации, как я понял с ее помощью, можно будет реализовать взаимодействие с COM портом на тонком клиенте.
В моей задаче стоит считывание данных с com порта и запись данных в порт.
Из выше описаного можно попробовать прочитать данные с порта, но как отправить в порт некоторые значения мне не совсем понятно.
есть ли у Вас примеры подобной реализации.

И еше в статье используется понятеи "Сборок", это терминалогия как я понял от .Net, значит мне будет нужна сборка для работы с com портом, верно?
Есть ли где-то уже готовые сборки, которые можно было бы использовать?
6. Serginio 827 28.07.15 16:25 Сейчас в теме
Там есть пример работы с ком портами, но я его не проверял.
Для записи в ком порт можно использовать SerialPort напрямую
https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.writeline(v=vs.110).aspx
7. Serginio 827 28.07.15 16:31 Сейчас в теме
В примере для чтения из ком порта используется кнопка ОткрытьПортСканера
и обработка события в ДанныеОтСканера
8. Serginio 827 28.07.15 17:36 Сейчас в теме
Кстати работать со сборками проще загрузив их в макет или хранилище

Процедура ПриОткрытии()
	
	врап=новый COMОбъект("NetObjectToIDispatch45");
	врап.ВыводитьСообщениеОбОшибке=ложь;

	Каталог=КаталогВременныхФайлов();
	ФайлWebSocket1C=Каталог+"WebSocket1C2.dll";
	
	
	
	
	попытка
			ПолучитьМакет("WebSocket1C").Записать(ФайлWebSocket1C);
			
		исключение
			Сообщить(ОписаниеОшибки());
	конецпопытки;
	
//	ФайлWebSocket1C="D:\TestProgramms\WebSocket1C2\WebSocket1C2\bin\Debug\WebSocket­1C2.dll";
	

	Сборка=врап.загрузитьСборку(ФайлWebSocket1C); 
	


	
	
КонецПроцедуры
Показать

NittenRenegade; +1 Ответить
9. Serginio 827 28.07.15 17:47 Сейчас в теме
Правда нужно не забывать помещать туда же зависимые сборки.
10. Serginio 827 12.08.15 15:19 Сейчас в теме
Добавил реализацию ВК внутри сборки для получения Глобального контекста. Использование

Если ПодключитьВнешнююКомпоненту("AddIn.GlobalContext1C") Тогда
		объект=Новый ("AddIn.GlobalContext1C");
		иначе
		сообщить("Компонента не загружена");
	КонецЕсли;


Использование Внутри Net.
public ТестВК(object Object1C)
    {
        this.Object1C = Object1C;
        ГК = new ДинамикГК(Object1C);

}

public string СоздатьОкно() {
    //    m_1cApp.AppDispatch.Сообщить("Привет из ВК");
    // не работает для упрощения работы создань динамический объект ДинамикГК
    // выполняющий аналогичную фунцию
    
            IExtWndsSupport n;
            ГК.Сообщить("Привет из ВК", ГК.СтатусСообщения.Важное);
            n = (IExtWndsSupport)Object1C;
            IntPtr hwnd;
             n.GetAppMainFrame(out hwnd);

    // Создаем форму, устанавливаем нативные хэндлы и устанвливаем окно 1С владельцем нетовского окна
            var form = new Form1();
            form.CreateControl();
            SetOwner(form.Handle.ToInt32(), hwnd.ToInt32());
            form.EventTo1C = Object1C as IAsyncEvent;
           
          form.Show();
            
            return "Методы ВК выполнены!";
        }

private async void button1_Click(object sender, EventArgs e)
        {
            var ПотокПриложения = Thread.CurrentThread.ManagedThreadId;
            // Для чистоты эксперимента вызовим события из потока отличного от потока приложения.
            // Что бы await не использовал текущий контекст установим ConfigureAwait(false)
            await Task.Delay(1000).ConfigureAwait(false); // делаем задержку в секунду и вызываем событие
            var ПотокСобытия = Thread.CurrentThread.ManagedThreadId;

            // Для вызова в тотоке приложения вызовем метод из его потока
            Sc.Send(d => EventTo1C.ExternalEvent("ДанныеИзТестВК", "Тест", string.Format("Поток Приложения={0} Поток события {1}",ПотокПриложения,ПотокСобытия)), null);
            // Если очень быстро кликать по кнопке то потоки события будут разными
        }
Показать

Так же добавил возможность показать окно семерки созданное через Новый COMОбъект("V77.Application");
NittenRenegade; +1 Ответить
11. qvvert 107 13.09.15 23:57 Сейчас в теме
Доброго времени суток, подскажите пожалуйста, как быть с символом перевода строки при hmac_sha1 некорректно шифруется...
12. qvvert 107 14.09.15 00:13 Сейчас в теме
Гугл подсказывает что как то надо заменить Символы.Пс на Environment.NewLine - в дотнете... подскажите пожалуйста как это сделать?
13. Serginio 827 14.09.15 00:29 Сейчас в теме
https://msdn.microsoft.com/ru-ru/library/fk49wtc1(v=vs.110).aspx

В объекте есть ОбернутьЛюбойОбъект


Врап.ОбернутьЛюбойОбъект(Строка).Replace(@"\n",Environment.NewLine)
15. qvvert 107 14.09.15 00:53 Сейчас в теме
(13) а как определить Environment.NewLine?
Врап.ОбернутьЛюбойОбъект(Строка).Replace("\n",Environment.NewLine) - Не прокатывает
создание объекта Врап.СоздатьОбъект("System.Environment.NewLine") - тоже не прокатывает....

Не знает что такое Environment.NewLine как его определить?

Символы.ПС+Символы.ВК - не спасают отца русской демократии... hmac_sha1 - с символом перевода строки генерится неверно...
14. Serginio 827 14.09.15 00:47 Сейчас в теме
Хотя проще использовать 1С функцию
Строка=СтрЗаменить(Строка,Символы.Пс,Символы.Пс+Символы.ВК)
16. qvvert 107 14.09.15 01:08 Сейчас в теме
Вопрос Снимается Спасибо!
в рамках получения hmac Нужно заменять перевод строки на системную переменную (Если в ключе или в сообщении используется перевод строки) соответсвенно в строке вместо символы.пс - передавать служебный например ("\n") - где столкнулся я - в апи викимпарта

новаяСтрока = Врап.ПолучитьТип("System.Environment").NewLine;

message = Врап.ОбернутьЛюбойОбъект(message).Replace("\n",новаяСтрока);
key = Врап.ОбернутьЛюбойОбъект(key).Replace("\n",новаяСтрока);
17. Serginio 827 14.09.15 08:11 Сейчас в теме
(16) Да уж 1С с переводом строки не совсем корректно все сделали.
18. Serginio 827 17.11.15 11:31 Сейчас в теме

Случайно изменил в AssemblyInfo.cs [assembly: ComVisible(true)] и
Для каждого Цикл перестал работать
Который работает через EnumVariantImpl : IEnumVARIANT

/ Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
// для COM-компонентов. Если требуется обратиться к типу в этой сборке через
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(false)]
19. Serginio 827 17.11.15 14:40 Сейчас в теме
Добавил возможность использования ExpandoObject напрямую с добавлением свойств и методов
Объект=ЗагрузкаComОбъекта.ПолучитьExpandoObject();
// Получим словарь для чтения и добавления свойств и методов
Объект2=Врап.ПолучитьИнтерфейс(Объект,"IDictionary`2");

// Установим свойсва через словарь
Объект2.set_Item("Число",5);

//Сообщить(Объект.Item("Имя"));
Сообщить(Объект2.get_Item("Имя"));
Сообщить(Объект2.get_Item("Число"));
Объект2.set_Item("Имя","Вызов Метода");
Сообщить(Объект2.get_Item("ВСтроку").DynamicInvoke());

// Теперь можно обращаться в свойствам и методам напрямую
Объект.Число=6;
Сообщить(Объект.Имя);
Сообщить(Объект.Число);
Объект.Имя="Вызов Метода";
Сообщить(Объект.ВСтроку());

// Добавим новое поле
Объект2.Add("НовоеПоле",66);

// Нужно обновить информацию о новых методах и свойствах
Объект=врап.ОбновитьДанныеОметодахИСвойствах(Объект);
//
Сообщить(Объект.НовоеПоле);
Показать

20. sandybaev 153 18.11.15 15:28 Сейчас в теме
Serginio, а вы не планируете развить в этой сборке TSL авторизацию? Она остро в нем нуждается, допустим для тех случаев когда есть связка 1С+Exchange 2013 и почту надо отправлять во внешний мир.
21. Serginio 827 18.11.15 15:49 Сейчас в теме
(20) Эта сборка нужна для подгрузки сборок .Net. То есть нужно найти, или создать сборку для обмена с Exchange 2013 на Net и использовать её. Например берем примеры https://code.msdn.microsoft.com/office/Exchange-2013-101-Code-3c38582c/view/SamplePack#content и использум их через NetObjectToIDispatch45. После того, как добавил динамическую компиляцию использования событий Net стало значительно проще использовать эту компоненту. Просто нужно начальное знание Net.

Здесь есть примеры http://habrahabr.ru/post/117268/
Несложно их переписать на 1С
22. sandybaev 153 18.11.15 15:55 Сейчас в теме
Ясно. трабл в том что я слабоват в C#.
23. Serginio 827 18.11.15 16:05 Сейчас в теме
На самом деле не все так сложно. Возьмем для примера код

var esb = new ExchangeServiceBinding();
    // Указываем используемые креды
    esb.Credentials = new NetworkCredential(user, password, domain);
    // Задаем входную точку для EWS
    esb.Url = "https://" + server + "/EWS/Exchange.asmx";
    esb.RequestServerVersionValue = new RequestServerVersion();
    // Указываем тип Exchange сервера 
    // Для Exchange 2007 SP1 и 2010 подходит Exchange2007_SP1
    // Для Exchange 2007 без SP нужно указать Exchange2007
    esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2007_SP1;
            
    return esb;
Показать

Нужно знать Простанство имен в котором находится ExchangeServiceBinding
врап=новый COMОбъект("NetObjectToIDispatch45");
врап.ЗагрузитьСборку(ПутьКСборке);
ПИ="НужноеПространствоИмен";
esb = Врап.СоздатьОбъект(ПИ+"ExchangeServiceBinding");
    // Указываем используемые креды
    esb.Credentials = врап.СоздатьОбъект("System.Net.NetworkCredential",user, password, domain);
    // Задаем входную точку для EWS
    esb.Url = "https://" + server + "/EWS/Exchange.asmx";
    esb.RequestServerVersionValue =  врап.СоздатьОбъект("RequestServerVersion);
    // Указываем тип Exchange сервера 
    // Для Exchange 2007 SP1 и 2010 подходит Exchange2007_SP1
    // Для Exchange 2007 без SP нужно указать Exchange2007
    esb.RequestServerVersionValue.Version = врап.ПолучитьТип("ExchangeVersionType").Exchange2007_SP1;
            
    return esb;
Показать


Просто в модуле C# указываются пространство имен, и поэтому можно опускать их при написании класса.
NittenRenegade; +1 Ответить
24. Xershi 1032 19.11.15 15:20 Сейчас в теме
Тяжело читается публикация. Можете структурировать информацию?
25. Serginio 827 19.11.15 15:36 Сейчас в теме
(24) Она больше для тех кто знаком с Net. Надо отдельную статью написать про использование для тех, кто с Net не знаком. Тут главное понять, что не понятно
26. Xershi 1032 19.11.15 15:43 Сейчас в теме
(25) да учили на C# писать лабораторные, но работаю с 1С профессионально. В принципе понятно. Но вникать долго нужно.
27. Serginio 827 19.11.15 15:47 Сейчас в теме
(26) Так ты задавай вопросы, я буду отвечать. А затем, может и статью напишем для лучшего понимания. Просто в Net можно найти классы на все возможные случаи.
28. zhichkin 749 18.01.16 09:48 Сейчас в теме
(27)
Добрый день, Сергей!
Есть решение, реализованное на C# WPF: интерфейс, бизнес логика, сервисы, работа с данными. Всё как положено, но ... Клиент хочет, чтобы всё было в 1С =) Другими словами, нужно всё наше богатство "прикрутить" к интерфейсу 1С. Размышляю над возможностью использовать MVVM в применении к формам и контролам 1С (пока что речь идёт о толстом клиенте). Может быть посоветуете что-нибудь?
29. Serginio 827 18.01.16 10:01 Сейчас в теме
Я бы сделал класс враппер для событий формы создания формы и свойства для доступа к этой форме.
События можно сгенерить динамически или статически пример есть здесь http://infostart.ru/public/417830/

В примерах ВК есть использования WinForms с привязкой к главному окну 1С.
NittenRenegade; +1 Ответить
31. zhichkin 749 18.01.16 10:12 Сейчас в теме
(29)
MVVM предполагает наличие класса ViewModel, который использует интерфейс INotifyPropertyChanged. Идея заключается в том, чтобы при создании формы 1С создавать класс ViewModel и каким-то образом выполнять привязку его свойств к элементам управления формы 1С. Вероятно нужна реализация специального биндера контролов 1С к классу .NET.
30. Serginio 827 18.01.16 10:08 Сейчас в теме
Еще вариант это обмен через TCP/IP пример есть в примерах к статье
32. Serginio 827 18.01.16 10:37 Сейчас в теме
Ты можешь вызывать события, к которым из 1С будет подключаться и обрабатывать
33. Serginio 827 18.01.16 10:38 Сейчас в теме
То есть ты можешь подключиться к событиям ViewModel через http://infostart.ru/public/417830/
34. Serginio 827 18.01.16 10:39 Сейчас в теме
Посмотри примеры. Будет понятнее.
35. Serginio 827 18.01.16 12:07 Сейчас в теме
Кстати используя WindowInteropHelper можно использовать окна WPF передавя ему оно владельца хэндл главного окна 1С. И можешь использовать окна WPF в 1С
36. zhichkin 749 18.01.16 23:43 Сейчас в теме
37. Serginio 827 19.01.16 10:03 Сейчас в теме
(36) Еще можно передать в нетовский объект ссылку на общий модуль, модуль отчета, модуль формы и вызывать все их экспортные методы. В сборке ТестВК. присоздании объекта класса ТестВК передается глобальный контекст 1С Object1C, через который можно вызваь методы глобального контекста 1С, получать хэндл главного окна 1С GetAppMainFrame и получать интерфейс IAsyncEvent через который вызывать внешнееСобытие в 1С.
По сути вам нужно по минимуму изменить C# проект
38. Serginio 827 19.01.16 15:11 Сейчас в теме
35+ Специально проверил на WPF Window
Создал класс

public partial class Window1 : Window
    {
        dynamic Модуль1С;
        public Window1(dynamic модуль1С, dynamic Object1C)
        {
            InitializeComponent();
            Модуль1С = модуль1С;
            IExtWndsSupport n;
             n = (IExtWndsSupport)Object1C;
             IntPtr hwnd;
                    n.GetAppMainFrame(out hwnd);

            var wih = new System.Windows.Interop.WindowInteropHelper(this);
            wih.Owner = hwnd;

        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            Модуль1С.СообщитьСтр(textBox.Text);
        }
    }
Показать


В модуле отчета прописал

Процедура СообщитьСтр(стр) Экспорт

Сообщить(стр)	

КонецПроцедуры


И соответственно вызов

врап=новый COMОбъект("NetObjectToIDispatch45");
	тип=Врап.ПолучитьТипИзСборки("WPFLibrary.Window1","d:\Vs2015Programs\SignalR\WPFLibrary\WPFLibrary\bin\Debug\WPFL­ibrary.dll");
	ПодключитьВнешнююКомпоненту("AddIn.GlobalContext1C");
	объект=Новый ("AddIn.GlobalContext1C");
		ГлобальныйКонтекст=объект.ГлобальныйКонтекст;

	Окно=Врап.СоздатьОбъект(тип,ЭтотОбъект,ГлобальныйКонтекст);
	Окно.Show();
Показать
39. Serginio 827 19.01.16 15:35 Сейчас в теме
Еще нужно при закрытии уничтожить ссылку на модуль

 private void Window_Closed(object sender, EventArgs e)
        {
            Модуль1С.СообщитьСтр("Форма закрыта");
            Marshal.Release(Marshal.GetIDispatchForObject(Модуль1С));
            Marshal.ReleaseComObject(Модуль1С);
            Модуль1С = null;
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
Показать
40. Serginio 827 20.01.16 12:47 Сейчас в теме
Добавил в ТестВК использование WPF форм
41. Serginio 827 28.01.16 11:37 Сейчас в теме
Сейчас в .Net широко применяют оператор await. Он применяется к методам возвращающие Task или Task<TResult>.
Task это задача представляет асинхронную операцию. Доступ к результату осуществляется через свойство Result.
В 1С можно использовать либо синхронный вариант например
ДанныеРесурса=Клиент.GetStringAsync("https://msdn.microsoft.com/ru-ru/library/hh551745(v=vs.118).aspx").Result;


Но для того, что бы этот метод выполнить асинхронно я создал класс с помощью которого легко использовать эти методы асинхронно.

врап=новый COMОбъект("NetObjectToIDispatch45");
Выполнитель=Врап.ПолучитьАсинхронныйВыполнитель();
ДобавитьОбработчик Выполнитель.ПриОкончанииВыполненияЗадачи, ПриОкончанииВыполнения;

Обработчик события выглядит так
Процедура ПриОкончанииВыполнения(Задача,ДанныеКЗадаче)

    // Обязательно нужно отлавливать ошибку в 1С
    // Иначе она передается в .Net где обрабатывается там
    Попытка
Так как задача может завершиться с ошибкой
Мы должны проверить, и если ошибка нужно предпринять какие то действия
        Если (Задача.IsFaulted) Тогда  // Ошибка выполнения

            Сообщить("Ошибка "+Врап.ВСтроку(Задача.Exception));
            Сообщить("Данные к задаче "+Врап.ВСтроку(ДанныеКЗадаче));

        иначе
            Сообщить("=====Выполнена задача ====");
            Сообщить("Данные к задаче "+Врап.ВСтроку(ДанныеКЗадаче));
            Сообщить(Врап.ВСтроку(Задача.Result));


        КонецЕсли;

    Исключение
        Сообщить("Ошибка в процедуре");
        Сообщить(ОписаниеОшибки());
    КонецПопытки

КонецПроцедуры
Показать

Вызываем задачу так
HttpClient=Врап.ПолучитьТипИзСборки("System.Net.Http.HttpClient","System.Net.Http.dll");
    Клиент=Врап.СоздатьОбъект(HttpClient);
    Задача=Клиент.GetStringAsync("https://msdn.microsoft.com/ru-ru/library/hh551745(v=vs.118).aspx");
    Выполнитель.Выполнить(задача,ТекущаяДата());

Вторым параметром можно передавать любые данные, что бы понять какая задача выполнена и что с ней делать, так одновременно может работать множество задач

Например

АсинхМетоды = Врап.СоздатьОбъект(КлассДляТестаАсинхронныхМетодов);

    Для сч=1 по 10 Цикл
        задача=АсинхМетоды.ДолгаяЗадача(Строка("Задача "+сч));
        Выполнитель.Выполнить(задача,сч);
    КонецЦикла
42. Serginio 827 20.02.16 14:32 Сейчас в теме



Очень часто приходится использовать битовую операци 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);


43. TeMochkiN 04.09.16 22:32 Сейчас в теме
Подскажите, пожалуйста, зависимые сборки нужно как-то загружать или ещё что-то делать, или достаточно чтобы они находились в одном каталоге с основной сборкой, чтобы всё корректно работало??
44. Serginio 827 04.09.16 23:14 Сейчас в теме
(43) Достаточно, что бы находились в одном каталоге. Но иногда для динамической компиляции нужно что бы были в каталоге программы (основной Домен) . http://infostart.ru/public/466196/
TeMochkiN; +1 Ответить
45. asdfgcom 307 23.01.17 13:10 Сейчас в теме
Где-то я неправ. Помогите разобраться...
Хочу вывести Прогрессбар:

врап=новый COMОбъект("NetObjectToIDispatch45");
	пб = врап.СоздатьОбъект("System.Windows.Forms.ProgressBar");
	пб.Visible = true;
	пб.Minimum = 1;
	пб.Value = 1;
	пб.Step = 1;
	пб.Show();
Показать


Все без ошибок, но ничего нигде не отрисовывается.
Оговорюсь, не знаком ни с чем кроме 1С..



47. asdfgcom 307 23.01.17 13:26 Сейчас в теме
(46)т.е. я под него должен создать сначала какую-то форму и передать ее в свойство parent прогрессбара?
форма, я полагаю, ему нужна не 1Совская а MS windows.forms?..

Судя по Вашему ответу, даже ВК придется писать?
48. Serginio 827 23.01.17 14:22 Сейчас в теме
Нет ВК тебе не придется писать. Но тебе нужно написать форму с контролами.
В том числе и с System.Windows.Forms.ProgressBar.
Ну и написать метод (в примере конструктор) в который будет передаваться глобальный контекст 1С для получения нэндла 1С окна
49. ArchLord42 71 16.05.17 10:08 Сейчас в теме
Есть люди, которые пытались юзать враппер на сервере?

Не могу создать объект из загружаемой сборки.

У меня на клиенте все работает нормально, а вот на сервере не как не создавать объекты, которые содержатся во внешних сборках, объекты из GAC создаются, а на внешних выдает "Произошла исключительная ситуация (mscorlib): Конструктор для типа "ХХХ" не найден." как понимаю падает на Activator.CreateInstance, но не могу понять причину отладить серверный вызов в студии нет возможности.

Сразу говорю, что код клиентского вызова и серверного идентичен.
50. Serginio 827 16.05.17 11:19 Сейчас в теме
А он на сервере то есть? Если есть, то перед вызовом загрузить все сборки
51. Serginio 827 16.05.17 11:48 Сейчас в теме
На всякий случай проверить, что сборки AnyCpu
52. ArchLord42 71 16.05.17 17:03 Сейчас в теме
(51)
Проблема была с кешем КОМ объекта враппера, в доках в целом написано, что компонента кешируется на время работы сервера, но вот не сразу дошло, что там что-то типа Singleton паттерна применяется, т.е. моя сборка при первой загрузке не содержала нужного мне конструктора, после того, как я еще раз скормил ей сборку, он продолжал выдавать ексепшен на Activator.CreateInstance, после ребута службы все заработало. Получается еще такой момент, что и Assembly.LoadFrom не перезагружает сборку...иначе бы все работало.
Проверил еще раз, добавив метод, так же песня, загруженную сборку я удалить\заменить не могу т.к. поток на нее открыт уже, а вот если переименовать ее и добавить с тем же именем, а потом из враппера вызвать ЗагрузитьСборку, то на нее поток даже и не открывается.
53. Serginio 827 16.05.17 18:37 Сейчас в теме
Да есть такое дело. И 1C тоже держит COM DLL до конца. А сборку можно выгрузить только с доменом её содержащую. Сейчас все грузится в один домен
54. vgrichuk 29.06.17 11:17 Сейчас в теме
А как корректно освободить память от COM-объекта NetObjectToIDispatch45? Ни Quit, ни Close не находятся.
55. Serginio 827 29.06.17 13:10 Сейчас в теме
Нужно обнулить ссылку на объект, если он роддеживае IDispose то вызвать Dispose и для очистки совести вызвать сборку мусора
http://www.forum.mista.ru/topic.php?id=763810&page=3#236
56. denverr 06.03.18 16:13 Сейчас в теме
Добрый день, пишу процедуру для обмена сообщениями используя сокеты, ошибка происходит при отправке: "СокетОтправки.BeginSend", что делаю не так, кто может подсказать?
Вот кусок кода:


врап=новый COMОбъект("NetObjectToIDispatch45");
	
	////	Соединение с сокетом	////   
	IPAddress			= врап.ПолучитьТип("System.Net.IPAddress");
	ipAddr  = IPAddress.Parse(IP);	
	
	ipEndPoint 			= врап.СоздатьОбъект("System.Net.IPEndPoint", ipAddr, 8888); 
	
	NetworkAccess 		= врап.ПолучитьТип("System.Net.NetworkAccess");
	TransportType 		= врап.ПолучитьТип("System.Net.TransportType");
	SocketPermission 	= врап.ПолучитьТип("System.Net.SocketPermission");
	
	AddressFamily		= врап.ПолучитьТип("System.Net.Sockets.AddressFamily");
	socketType			= врап.ПолучитьТип("System.Net.Sockets.SocketType");
	protocolType		= врап.ПолучитьТип("System.Net.Sockets.ProtocolType");
	
	СокетОтправки		= врап.СоздатьОбъект("System.Net.Sockets.Socket", AddressFamily.InterNetwork, socketType.Stream, protocolType.Tcp);
	ПраваСокета			= врап.СоздатьОбъект("System.Net.SocketPermission", NetworkAccess.Connect, TransportType.Tcp, "", SocketPermission.AllPorts);
	
	СокетОтправки.NoDelay = Истина;
	
	СокетОтправки.Connect(ipEndPoint);
	
	Сообщить(СокетОтправки.Connected);	//Возвращает Истина
	
	///Теперь формируем строку к отправке
	СтрокаКОтправке = СокрЛП(ПолеВвода);	//ПолеВвода - на форме
	СтрокаКОтправке = СтрЗаменить(СтрокаКОтправке, Символы.ПС, "");
	
	Unicode=Врап.ПолучитьТип("System.Text.Encoding").Unicode;
	МассивДанных = Unicode.GetBytes(СтрокаКОтправке);
	
	
	//Сама отправка
	ДелегатCallback = Врап.ПолучитьТип("System.AsyncCallback");
	SocketFlags	= врап.ПолучитьТип("System.Net.Sockets.SocketFlags");	
	
	СокетОтправки.BeginSend(МассивДанных, 0, 15000, SocketFlags.None, ДелегатCallback, СокетОтправки);
Показать
57. Serginio 827 07.03.18 11:21 Сейчас в теме
Для ДелегатCallback нужно получить реальную ссылку на делегат, а не тип.

Ессть синхронные методы например https://msdn.microsoft.com/ru-ru/library/w93yy28a(v=vs.110).aspx

Да и в примерах к статье у меня куча примеров по сокетам
58. realchel 10.09.18 14:18 Сейчас в теме
вопрос не в тему. сори.
Как во внешней компоненте получить указатель на окно 1С откуда внешняя компонента подключена.
не нашел примеров на C#(наверно плохо искал)
Так понимаю надо как то интерфейс определить IExtWndsSupport и вызывать GetAppMainFrame

Вообще цель простая, активизировать окно 1С.
Само 1С через внешнюю компоненту генерит мессаджбокс.
(пользователь сейчас сидит в контакте)
Пользователь жмет кнопку, и открывается окно 1С.
61. user785046 17.10.18 14:21 Сейчас в теме
Добрый день. Пользуюсь ВК NetObjetToIDispatch45 из внешней обработки все работает. Попытался запихнуть все в регламентные задания. Ругается на строке: врап=новый COMОбъект("NetObjectToIDispatch45");

{ОбщийМодуль.МодульРегламентныхЗаданий.Модуль(10768)}: Ошибка при вызове конструктора (COMОбъект)
по причине:
Отказано в доступе.

Что можно предпринять в таком случае?
62. Serginio 827 17.10.18 16:02 Сейчас в теме
Её нужно зарегистрировать на сервере
63. user785046 17.10.18 17:20 Сейчас в теме
Регистрировал.
Прикрепленные файлы:
64. Serginio 827 17.10.18 17:36 Сейчас в теме
(63) Там еще могут быть проблемы с вызовом сом объектов. Можно попробовать для модуля привелигированный режим установить.
65. Serginio 827 17.10.18 17:37 Сейчас в теме
Да еще там надо и 64 разрядную Dll регистрировать. Проще запустить РегистрацияКомСервера.exe от администратора.
66. Serginio 827 17.10.18 17:42 Сейчас в теме
Еще вариант с правами на папку где лежит dll
67. user785046 18.10.18 09:29 Сейчас в теме
Спасибо. РегистрацияКомСервера.exe от имени администратора помогла.
68. user763959 17.04.20 06:43 Сейчас в теме
Добрый день

При вызове метода загрузитьСборку выдается ошибка "Произошла исключительная ситуация (mscorlib): Не удалось загрузить файл или сборку "file:///C:\Users\proff2000\Desktop\NestNet45.dll" либо одну из их зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)" можете подсказать что может быть?
69. Serginio 827 17.04.20 10:34 Сейчас в теме
Ну в этой папке должны лежать все библиотеки
Вообще лучше её держать в папке вместе с NetObjetToIDispatch45.dll
70. DrZombi 173 19.06.20 05:54 Сейчас в теме
День добрый.
Ваша разработка может работать на стороне Сервера?
71. Serginio 827 19.06.20 10:03 Сейчас в теме
Да. Так как это .Net то в 32 и 64 разрядных процессах
Оставьте свое сообщение

См. также

Внешняя компонента для работы по Web-socket протоколу x32 x64 Промо

Разработка внешних компонент WEB v8 Абонемент ($m)

Кто когда-нибудь сталкивался с обменом данными по Web-Socket (wss) протоколу из 1С, тому известно, что в платформе отсутствуют данные механизмы (не путать с HTTP запросами и WebServices). Предлагается использовать внешнюю компоненту, написанную по технологии NativeAPI, для подключения и обмена с серверами из 1С-Предприятия, работающими по протоколу Web-Socket.

1 стартмани

30.03.2018    26541    36    Ditron    83    

Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)

Разработка внешних компонент Мобильная разработка v8 Абонемент ($m)

Используя данный драйвер, можно без единой строки кода, просто установив на ТСД мобильный клиент 1С, сразу начать подбирать товары в документах вашей учётной системы. А, адаптировав нужные формы под небольшой размер экрана ТСД, можно просто создать полноценное рабочее место для выполнения операций с помощью ТСД, не прибегая к стороннему софту. Если же на складе плохая связь (или её нет вовсе), то можно использовать возможности мобильного клиента в автономном режиме (потребуется доработка вашей конфигурации). Драйвер также можно использовать и для Android приложения на мобильной платформе. В результате чего можно обойтись без ненужных полей ввода и клавиатуры «на пол-экрана».

3 стартмани

09.10.2020    2469    16    ltfriend    13    

Внешняя компонента на C# для парсинга страниц через Phantom JS на сервере 1С х32,х64

Прочие инструменты разработчика WEB v8 1cv8.cf Абонемент ($m)

PhantomJS - это браузер без окна, используемый для автоматизации взаимодействия с веб-страницами. PhantomJS предоставляет JavaScript API, обеспечивающий автоматическую навигацию, снимки страницы, эмуляции поведение пользователя, что делает его распространенным инструментом, используемым для запуска модульных тестов на основе браузера в автономной системе, такой как среда непрерывной интеграции . PhantomJS основан на WebKit, что делает его похожей на Safari и Google Chrome средой просмотра. Это программное обеспечение с открытым исходным кодом, выпущенное под лицензией BSD.

1 стартмани

06.08.2020    2161    2    DrZombi    7    

Диагностика контекста выполнения (внешняя компонента)

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Небольшая экспериментальная внешняя компонента для получения дополнительной информации о контексте выполнения.

1 стартмани

24.07.2020    4118    2    YPermitin    14    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    76792    Serginio    108    

Универсальная обертка для использования NATIVE компонент на платформе 1С 7.7, 8.0 и 8.1

Разработка внешних компонент v8 Абонемент ($m)

Используете 1С 7.7, 8.0 или 8.1 и вас раздражает, что под вашу 1С уже не выпускаются современные компоненты. А хотелось бы?

1 стартмани

07.07.2020    2502    1    karpik666    0    

Нано HTTP сервер - внешняя компонента для мобильного приложения 1C, на Android

Разработка внешних компонент Мобильная разработка v8 v8::Mobile 1cv8.cf Абонемент ($m)

Нано HTTP сервер на терминале сбора данных "ATOL Smart.Lite android 7.0". Работает только с GET и POST запросами. Аутентификация BASE64. Не поддерживает HTTPS и не передает файлы. В прикрепленном архиве исходники на компоненту (С++ и java для Android Studio 3.6.2), ЦФ - мобильного приложения и тестовая обработка.

1 стартмани

22.06.2020    2356    6    SanyMaga    19    

Работа с журналом регистрации. Выходим за границы платформы

Журнал регистрации Бесплатно (free)

Работа с журналом регистрации нестандартными средствами. А также немного про использование платформы .NET в экосистеме 1С.

12.05.2020    6110    YPermitin    24    

TextRadar - нечеткий поиск в тексте Промо

Разработка внешних компонент Поиск данных v8 1cv8.cf Абонемент ($m)

В отличие от нечеткого сравнения строк, когда обе сравниваемых строки равнозначны, в задаче нечеткого поиска выделяются строка поиска и строка данных, а вычислить необходимо не степень похожести двух строк, а степень присутствия строки поиска в строке данных. Нормированный коэффициент, находящийся между 0 и 1 позволяет отсечь заведомо низкие результаты, организовать поиск по синонимам и т.д. Наглядное отображение результатов в кратком и детальном виде поможет быстро найти интересующий фрагмент.

1 стартмани

19.09.2018    17447    23    TSSV    18    

Получение фото с веб-камеры

Разработка внешних компонент v8 Абонемент ($m)

Получение фото с веб-камеры без ActiveX. Внешняя компонента по технологии Native API.

1 стартмани

25.03.2020    4681    42    berezdetsky    32    

Быстрая печать этикеток (ZPL, EPL, TSPL, EZPL, GEPL, TSPL-EZ)

Разработка внешних компонент v8 v8::УФ 1cv8.cf Абонемент ($m)

Качественная и быстрая печать на внутреннем языке принтеров этикеток.

4 стартмани

02.02.2020    6465    32    Johny_v    12    

Формирование данных для ведения электронных трудовых книжек (ЭТК) из ЗиК 7.7 (СЗВ-ТД, СТД-Р)

Обмен через XML Зарплата Документооборот и делопроизводство v77::Расчет 1С7:ЗиК Россия БУ ФОМС, ПФ, ФСС Абонемент ($m)

Конфигурация для объединения с типовой ЗиК с возможностью автозаполнения, выгрузки в XML и печати форм СЗВ-ТД и СТД-Р. Тестировалось с релизом ЗиК 7.70.370.

8 стартмани

30.01.2020    6908    62    Pin    51    

.Net в 1С. На примере использования HTTPClient, AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция Промо

Практика программирования WEB v7.7 v8 Бесплатно (free)

Часто приходится парсить сайты, в том числе с авторизацией, перескакивая со страницы на страницу по ссылкам. Тот, кто занимался вэб программированием, знает, как удобно использовать JQuery и CSS селекторы. На .Net написана очень удобная библиотека AngleSharp. Я покажу, как с её помощью можно значительно облегчить себе труд.

10.03.2016    55957    Serginio    33    

Сканирование по TWAIN в 1С (обычные и управляемые формы)

Разработка внешних компонент v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка показывает пример, как можно в 1С проводить сканирование с помощью компоненты TWAIN.

3 стартмани

03.01.2020    5173    21    Denr83    0    

Клиент событий в «бесконечном» HTTP-соединении для 1С: Предприятие 8

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Native Компонента в отдельном потоке обрабатывает пакеты событий, в "бесконечном" http соединении и передаёт данные в очередь внешних событий.

1 стартмани

02.12.2019    4017    1    starovton    5    

Управление окнами и мониторами в 1С

Сервисные утилиты Разработка внешних компонент v8 1cv8.cf 1С:Франчайзи, автоматизация бизнеса Абонемент ($m)

Управление размерами, активностью и положением окон из 1С с возможностью вывода окон на второй монитор и запретом изменения окна.

1 стартмани

28.10.2019    8583    7    Grigoriy251    5    

Tool1CD Beta в деле Промо

Разработка внешних компонент v8 Абонемент ($m)

Пс, парень! Не хочешь немного сырых байтов?

1 стартмани

09.05.2018    25664    28    baton_pk    26    

Native внешняя компонента для оповещения по UDP или TCP

Разработка внешних компонент v8 Абонемент ($m)

Native внешняя компонента для оповещения по UDP или TCP, которая реализует возможность в 1С передавать сообщения с сервера на клиента. Исходный код компоненты также представлен.

1 стартмани

06.10.2019    9478    18    vdv2701    28    

Внешняя компонента Sundries: несколько полезных системных функций

Разработка внешних компонент v8 Абонемент ($m)

Звук, пауза, буфер обмена, раскладки клавиатуры и т.д.

4 стартмани

30.08.2019    5667    5    sivin-alexey    10    

Обработка вывода на печать QR-кода и штрихкодов в различных форматах (одномерные и двумерные)

Разработка внешних компонент Ценники v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Обработка предназначена для вывода на печать QR-кода и штрихкодов в различных форматах без установки дополнительных ActiveX компонент. Тестировалась на чистой базе платформы 1С:Предприятие 8.3 (8.3.14.1630), а так же в конфигурациях Бухгалтерия предприятия КОРП, редакция (3.0.69.35) и на Бухгалтерия предприятия (3.0.70.30)

2 стартмани

22.05.2019    9976    39    MGemini    2    

NativeDraw: Компонента рисования для 1С [V2.6.2] Промо

Разработка внешних компонент Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Рисуйте в формах 1С, также предлагается небольшое количество нерисовальных функций

1 стартмани

13.07.2015    47176    428    ПерваяСистема    147    

DLL для обмена между 1С (и не только) через UDP порты (32/64 клиенты)

Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Библиотеки для создания функционала для прослушивания портов из 1С и отправки сообщений на удаленный udp порт.

1 стартмани

28.02.2019    6977    8    xxxAndricxxx    2    

Эмулятор ККМ по стандарту ФФД 1.1

Разработка внешних компонент Кассовые операции ККМ Кассовые операции v8 Розница УТ11 Россия Абонемент ($m)

Эмулятор драйвера ККМ по стандарту ФФД 1.1 предназначен для использования всех возможностей программы, при отсутствии физической кассы. Подойдет как программистам при разработке интерфейса РМК, например, так и пользователям для тестирования возможностей программы.

1 стартмани

30.12.2018    21191    136    Matveymc    27    

WebSocket Клиент / Сервер. Внешний компонент

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Реализация протокола WebSocket. Клиентская часть для взаимодействия с внешними сервисами. Серверная часть для организации собственного сервера, принимающего клиентские соединения в многопоточном режиме. Возможно взаимодействие RabbitMQ Slack Asterisk и другие

1 стартмани

16.11.2018    15495    77    nomadon    62    

Компоненты распознавания и печати штрих-кодов Промо

Разработка внешних компонент Сканер штрих-кода v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Комплект программного обеспечения для реализации функций оптического распознавания штрих-кодов различных систем при помощи обычной web-камеры, а также их отображения в печатных формах. Программы могут работать в составе конфигураций, созданных на базе платформ «1С-Предприятие» версий 7.7, 8.2, 8.3. Компонент чтения кодов реализован в виде внешней компоненты 1С с COM-интерфейсом. Компонент отображения создан по стандартной технологии ActiveX для Windows, и может быть встроен в любое приложение, поддерживающее встраивание ActiveX элементов управления, например в документ Word или Excel, или форму VBA. P.S. Добавлена новая версия программы распознавания. Новые функции: обработка видео в реальном режиме (а не по таймеру, как раньше), добавлена возможность распознавания штрих-кодов из графических файлов JPEG, PNG, GIF, BMP, а также передавать для распознавания картинки из 1С, теперь можно получить в 1С захваченное с камеры или файла изображение, как с выделением мест, содержащих коды, так и без, а также отдельные фрагменты изображений, содержащие код. Добавлены новые свойства и методы для программирования. Обновлена документация.

10 стартмани

10.07.2015    69338    84    igorberezhnov    95    

Внешняя компонента для выполнения регулярных выражений

Разработка внешних компонент v8 Абонемент ($m)

Внешняя Native API компонента для выполнения регулярных выражений на платформе 1С:Предприятие 8. Написана на C++. Используется движок boost::regex (v 1.69, v 1.68 - для Android). Версия синтаксиса Perl Compatible Regular Expressions.

1 стартмани

12.11.2018    12502    30    KAV2    62    

001. Криптография и цифровая подпись RSA-sha256 на платформе 1С

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Внешняя компонента, исходники, обработка для 1С.

5 стартмани

04.09.2018    14279    27    Nikola23    60    

Класс-обработка “Работа с картами Яндекс”

Разработка внешних компонент WEB v8 Абонемент ($m)

Как показать точку или маршрут на карте Яндекс. Как получить координаты по строке адреса (геокодирование).

1 стартмани

01.08.2018    25078    200    RSConsulting    16    

Полезные приемы при работе с Excel из 1С (Версия 3.1) Промо

Практика программирования Разработка внешних компонент Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Программисту 1С часто приходится работать с таблицами Excel из 1С. Я постарался собрать небольшой FAQ и набор функций для работы с файлами Excel. Надеюсь, кому-то будет полезна данная статья.

1 стартмани

22.09.2015    199815    444    Zerocl    70    

Распознавание лиц (off-line). Демонстрационная база.

Разработка внешних компонент v8 Абонемент ($m)

Распознавание лиц входит в нашу жизнь стремительными темпами, бизнес стремится за событиями. В публикации находится описание и пример использования нейросетей для распознавания лиц.

1 стартмани

17.07.2018    16221    72    nomadon    45    

QR-code полная версия (без шрифта и внешней компоненты для 8.2, 8.3 и любого типа клиента)

Разработка внешних компонент Сканер штрих-кода v8 1cv8.cf Абонемент ($m)

Предназначена для создания QR-code с указанием процента восстановления потерянных данных. Строка кодирования может содержать все печатаемые символы, в том числе и кириллические. Для работы не требуется внешняя компонента или шрифт.

2 стартмани

10.07.2018    11799    16    bobank    6    

Внешняя компонента для ping'а

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Внешняя компонента для выполнения ping'а из 1С:Предприятия 8.

1 стартмани

04.07.2018    10853    5    frkbvfnjh    24    

1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp Промо

Практика программирования v8 Бесплатно (free)

Данная разработка позволяет пользователям 1С обмениваться сообщениями, файлами (до 3 мб). Запрашивать данные у клиента как Вэб или HTTP сервисах. Основано на технологиях ASP.Net SignaR который использует WebSockets и т.д. для двунаправленного обмена данными. Используется обертка над классами .Net

15.12.2015    61545    Serginio    5    

JVM Native API плагин - для запуска в 1С плагинов написанных на Java

Разработка внешних компонент v8 Абонемент ($m)

Запускаем виртуальную машину Java в 1С. Собрана внешняя компонента которая позволяет запускать виртуальную машину java в среде 1С. Позволяет как передавать параметры в java - так и получать уведомление через externalevent. Предпосылкой создания являлся тот факт, что есть много готового функционала которого не хватает в 1С. Язык сpp - довольно сложен для быстрой разработки, и теперь возможно использовать готовые сборки java классов (так называемые jar-файлы) для использования в 1С.

1 стартмани

20.06.2018    12134    32    minimajack    72    

Внешняя компонента Native для создания штрих кода (GS1 DataBar Expanded, GS1 DataBar Expanded Stacked и другие)

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

В связи с внедрением ГИС Меркурий потребовалось внешняя компонента, которая создает штрихкод и отдает 1С. ВК создана на основе библиотеки zint www.sourceforge.net/projects/zint.

1 стартмани

27.04.2018    18255    212    artmaks1988    93    

Разработка игр на языке 1С с использованием Active-X компоненты (собственная разработка)

Разработка внешних компонент v7.7 v8 Россия Абонемент ($m)

Написанная Active-X компонента встраивается на форму обработки 1С (тестировалось на 1С 8.0, 8.1, 8.2, 8.3 не управляемые формы, 1С 7.7.). Компонента предназначена для моделирования игрового поля (вывод, движение спрайтов - фреймов, обработка коллизий, управление спрайтами-фреймами и т.д.) при разработки логики игры на встроенном языке 1С. Приложен пример обработки в которой реализована игра "Бита".

5 стартмани

04.01.2018    14892    2    protexprotex    34    

Снимок экрана для 1С Промо

Универсальные обработки Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Довольно часто люди сталкиваются с необходимостью сделать снимок экрана. Если вы или ваши сотрудники основную часть времени проводят в 1С и у вас есть необходимость прикреплять графические файлы, то эта компонента для вас.

1 стартмани

08.02.2016    27998    33    linkforget    11    

Active-X компонента для получения видео-данных с Web-камеры, IP-камеры для 1С 8.3, 1С 8.2, 1С 8.1, для рисования на форме

Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Active-X компонента встраивается непосредственно на форму 1С (тестировалось на 1С 8.3, 1С 8.2, 1С 8.1 - неуправляемые формы), реализованы методы подключения к Web-камеры (интерфейс VFW), к IP-камере по http-запросам, отображение на форме 1С потокового видео, снятие скрина и сохранение в файл на диск. Приложена обработка реализующая подключение и работы с ocx - компонентой. Тестировалось на win 7

4 стартмани

13.12.2017    13854    25    protexprotex    50    

ЭЦП по гостам Украины в 1С - Внешняя компонента BilboSign.dll

Разработка внешних компонент Защита и шифрование v8 1cv8.cf Украина Абонемент ($m)

Причиной данной разработки послужило отсутствие на данный момент криптопровайдера ЭЦП, который может работать по гостам Украины и использоваться в 1С. Для этого разработана внешняя компонента по технологии NativeAPI.

1 стартмани

11.12.2017    12757    22    Zahary    5    

Внешняя компонента симуляции нажатий клавиатуры и мыши (в т.ч. сворачивание/разворачивание динамических списков)

Разработка внешних компонент v8 Абонемент ($m)

Данная ВК позволяет использовать в ОС Windows начиная с 2000 функцию WinApi - SendInput(). А прилагающаяся обертка на 1С под нее позволяет делать это комфортно и просто. Внешняя компонента была написана, прежде всего, для сворачивания/разворачивания группировок в динамических списках.

1 стартмани

18.10.2017    13488    10    🅵🅾️🆇    26    

Native API компонента для использования установленного в системе интерпретатора Python Промо

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Компонента позволяет подключать к платформе 1С python-модули, оформленные в стиле внешней компоненты. Кроме этого, она позволяет запускать небольшие фрагменты python-кода прямо из модулей 1С. На данный момент поддерживаются платформы 8.2 — 8.3 x86 Windows.

1 стартмани

14.05.2013    39209    75    Принт    31    

Отправка сообщений

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Внешняя компонента и сервер отправки сообщений клиентам с сервера / от других клиентов.

1 стартмани

16.10.2017    10957    9    eugenevk    5    

Обработка изображений

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Компонента обработки изображений.

1 стартмани

04.10.2017    10915    22    eugenevk    17    

Подсветка синтаксиса 1С в текстовом редакторе VIM

Инструментарий разработчика Разработка внешних компонент v8 Россия Абонемент ($m)

Пакет, добавляющий поддержку синтаксиса языка 1С:Предприятие 8 в текстовом редакторе VIM

1 стартмани

25.09.2017    17345    3    TIS_08    27    

Обработка для формирования классов для прямого доступа к файлам 1С через курсоры BDE. И многого другого Промо

Разработка внешних компонент v7.7 1cv7.md Абонемент ($m)

Обработка формирует классы для прямого доступа к файлам 1С через курсоры BDE. Исходник ВК, которая загружает Объект Автоматизации, поддерживающий ITypeInfo и выполняет все его свойства и методы через IlanguageExtender. Обработка для формирования диспинтерфейсов к объектам 1С (таблицаЗначений, справочники, документы, перечисления). Обработки для группировки данных Таблицы Значений в виде ТЗ, где колонками являются ключи и ТзПоГруппе вида ТЗ с детальными записями. Вывод иерархии из ТЗ элементов, поиск дублей, сравнение 2 ТЗ

1 стартмани

14.04.2015    19915    2    Serginio    1    

Внешняя компонента (Native) для печати QR-кода

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Native-компонента и тестовая обработка для печати QR-кода в различных кодировках.

1 стартмани

21.08.2017    14543    27    ImHunter    14    

Применение нейронных сетей и генетических алгоритмов в прикладных решениях на платформе 1С

Математика и алгоритмы Инструментарий разработчика Бесплатно (free)

Сегодня мы поговорим про нейронные сети и генетические алгоритмы. • Для тех, кто не изучал их в университете, я сначала напомню теорию – что это такое, для чего это надо. • Мы рассмотрим, какие задачи с их помощью можно решать в 1С. • И в конце для тех, кто любит что-то делать руками (работать, программировать), мы разберем, как по факту собрать нейронную сеть или генетический алгоритм в 1С – что написать в коде и как это потом применить.

03.07.2017    39229    comol    63    

Native Api компонента для чтения и записи в COM-порт

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Позволяет отправить данные в COM-порт и получить ответ.

1 стартмани

30.05.2017    11373    85    Zahary    8    

Распознаем штрих-коды QR, EAN-13, Code 128 с помошью 1С и веб камеры Промо

Разработка внешних компонент v8 1cv8.cf Россия Абонемент ($m)

Внешняя компонента, поможет распознать штрих-код, используя обычную веб камеру. Умеет работать с UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 128, QR Code, Interleaved 2 of 5, Codabar, RSS-14, Data Matrix, PDF 417, Aztec, MaxiCode.

1 стартмани

31.10.2012    77424    187    shakmaev    84    

Внешняя компонента (Native) для печати двумерного штрих-кода PDF417

Разработка внешних компонент v8 1cv8.cf Абонемент ($m)

Достаточно давно возникла потребность печатать двумерные штрих-коды на некоторых документах. Какое-то время использовали для этого шрифтовую отрисовку ШК. Минусы этого решения - необходимость иметь установленный специальный шрифт, неустойчивость чтения платежными терминалами. Поэтому было принято решение - попробовать написать свою ВК.

1 стартмани

10.02.2017    31019    106    ImHunter    10