1С# - Расширяем код 1С кодом на C#

21.04.23

Разработка - Языки и среды

Вставки кода на C# внутри кода на 1С.

Скачать исходный код

Наименование Файл Версия Размер
AddIn_CSharp
.epf 17,48Kb
4
.epf 2.0 17,48Kb 4 Скачать

Здрасьте!

Наверняка многие видели, что внутри исходников на языке C могут быть ассемблерные вставки:

 

 

Или на языке Pascal могут быть ассемблерные вставки:

 

 

Некоторые даже могут использовать asm в C#.

Подобное можно увидеть в различных ЯВУ.

Даже в 1С при работе с данными в СУБД очень часто используют вставки кода на языке запросов (отличном от основного языка по синтаксису и возможностям).

 

Пойдём дальше, копнём глубже и ... в 1С можно использовать вставки кода на языке C# (с применением внешней компоненты):

 

 

Пока это только концепт, но уже рабочий. С версии 2.0 это уже полноценное решение. Можно с помощью таких микроподпрограмм сильно расширить возможности работы в 1С. Например, ускорять тяжелые участки кода (т.к. 1с в алгоритмических задачах сильно проигрывает взрослым Языкам Высокого Уровня) или использовать алгоритмы, которые на 1с не написать за обозримое время.

 

Пока есть жесткие ограничения:

- во первых, компонента работает только через COM и только под Windows;

- во вторых, во встроенном коде на шарпе обязательно нужно использовать жёстко зашитые наименования для используемого пространства имён, имени класса и имени метода;

- в третьих, пока что не реализована передача значений между компонентой и кодом 1с;

- в четвертых, при написании чего-то большого придётся прибегать к различным ухищрениям, что даже простой вывод примитивного окна сообщений в Windows будет не так просто сделать.

// код для версии 1.0

ТекстПрограммыНаСиШарп = "
|using System;
|using System.Reflection;
|
|namespace CSCodeEvaler
|{
|  public class CSCodeEvaler
|  {
|    public void EvalCode()
|    {
|      Assembly a = Assembly.Load(""System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"");
|      Type classType = a.GetType(""System.Windows.Forms.MessageBox"");
|      MethodInfo mi = classType.GetMethod(""Show"", new[] { typeof(string) });
|      object[] par = new[] { ""Привет из 1С !"" };
|      mi.Invoke(null, par);
|    }
|  }
|}
|";


// код для версии 2.0

Компонента.ClearSettings();

Компонента.References = "System.dll;System.Windows.Forms.dll";
	
Компонента.Parameter0 = "Привет из 1С!";
Компонента.Parameter1 = 100;
	
ТекстПрограммыНаСиШарп = "
|using System;
|using System.Windows.Forms;
|
|namespace CSCodeEvaler
|{
|	public class CSCodeEvaler
|	{
|		public static void EvalCode(string msg, int p)
|		{
|			MessageBox.Show(msg + ""\nЭто работает на "" + p + ""%"");
|		}
|	}
|}
|";

Компонента.Run(ТекстПрограммыНаСиШарп);

Этот код нарисует окно:

 

 

Пока что это больше подходит для "поиграться" С версии 2.0 это подходит уже для полноценного применения, но если сообществу будет интересна данная тема, буду продолжать пилить дальше.


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

Протестировано на платформе 8.3.21.1644, но будет работать на любых платформах 8.2 и 8.3 .

 

 

Большое обновление! Версия 2.0 (от 21.04.2023)

- Реализована возможность передавать параметры в скрипт и получать результат из него (пока что поддерживаются только примитивные типы);

- Добавлена опция для передачи в скрипт ссылок (References) на библиотеки, в связи с чем отпадает необходимость использования отражения (Reflection) в коде, тем самым код становится короче и проще для понимания;

- Появилась возможность писать короткие односложные скрипты без пространства имён, наименования класса и метода (код будет исполняться в жёстко заданных namespace CSCodeEvaler -> class CSCodeEvaler -> void EvalCode());

- Можно использовать статические классы;

- Добавлен подсчет времени компиляции и выполнения скрипта.

 

 
 Методы компоненты:
 
 Свойства компоненты:

 

Например, для запуска любой программы достаточно написать

ТекстПрограммыНаСиШарп = "
|string path = @""Folder\program.exe"";
|System.Diagnostics.Process.Start(path);
|";

Компонента.RunScript(ТекстПрограммыНаСиШарп);

А для получения файла внутри GZip архива поможет такой код

Компонента.ClearSettings();

ПутьАрхива = "G:\db.gz";

Компонента.Parameter0 = ПутьАрхива;

ТекстПрограммыНаСиШарп = "
|using System;
|using System.IO;
|using System.IO.Compression;
|
|namespace CSCodeEvaler
|{
|	public class CSCodeEvaler
|	{
|		public static byte[] EvalCode(string path)
|		{
|			FileStream fs = new FileStream(path, FileMode.OpenOrCreate);
|			byte[] gzip = new byte[(int)fs.Length];
|			fs.Read(gzip, 0, (int)fs.Length);
|			
|			byte[] bin;
|
|			using (MemoryStream sourceStream = new MemoryStream(gzip))
|			using (MemoryStream targetStream = new MemoryStream())
|			using (GZipStream decompressionStream = new GZipStream(sourceStream, CompressionMode.Decompress))
|			{
|				decompressionStream.CopyTo(targetStream);
|				bin = targetStream.ToArray();
|			}
|			
|			return bin;
|		}
|	}
|}
|";

Компонента.Run(ТекстПрограммыНаСиШарп);

ИзвлеченныйФайл = Компонента.Result;

 

Для регистрации компоненты выполните

regasm OneSharp.dll /tlb /codebase

* нужны админские права. RegAsm.exe найдёте в C:\Windows\Microsoft.NET\Framework\v4.0.30319\

Разработано в MS Visual Studio Community 2019 под .NET Framework 4.8.1

 

Это моя 20-я юбилейная публикация. Не забывайте заходить в мой профиль, там вы найдёте ещё более интересные и практичные разработки, связанные с около 1с.

Зacим oтклaнивaюcь!

С# Си Шарп внешние компоненты COM AddIn

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    125069    683    389    

732

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    7796    24    6    

42

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    4297    12    2    

36

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2280 руб.

14.01.2013    178680    1084    0    

862

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99650    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18408    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23864    16    15    

33

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28331    3    10    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 7142 07.04.23 10:58 Сейчас в теме
не реализована передача значений между компонентой и кодом 1с

Без этого область применения кажется очень узкой. Проще скомпилировать код в исполняемый файл и программно запустить его.
sewell; Lacoste4life; zebr; awk; olexi2012; user1243757; G_116449793522595596167; GreenDragon; cleaner_it; Darklight; +10 Ответить
2. SerVer1C 750 07.04.23 11:10 Сейчас в теме
(1) Можно. Но не везде разрешат компилировать exe'шники и запускать их в проде.
Данное решение стремится к "идеальной" внешней компоненте, т. е. вам не нужно будет создавать отдельную внешнюю компоненту для реализации каждого отдельного функционала, а достаточно прописать текстом в коде рабочий скрипт на шарпе, который будет скармливаться этой компоненте.
6. Darklight 32 07.04.23 14:13 Сейчас в теме
(2)Так не везде и разрешат подключать к 1С всякие левые компоненты, которые ещё и могут исполнять произвольный код в обход профилей безопасности!

Я так полагаю, что суть реализации - это подключение .NET Scripting на баз Roslyn. Насколько я понимаю - там вся фишка изначально затевалась на том, что скрипт можно предварительно анализировать - на предмет дозволенных инструкций (есть готовые обучающие материалы и вроде бы даже анализаторы для проектов на C# на эту тему) - без возможности установки ограничений на исполнение - такое решение становится очень небезопасным и вряд ли будет востребовано! Уж куда безопаснее скомпилировать нужный код во внешнюю компоненту и подключить фиксировано к конфигурации - на эту тему материалов на Инфорстарте предостаточно!
Тем более без доступа к контекст у 1C - а с этим то вся загвоздка.
Если задействован .NET Scripting - то там контекст подключается обычно через специальную структуру данных - через которую передаются внешние данные (и через неё же возвращаются - это один из самых простых вариантов из доступных). Контекст фиксирован. Могли бы - так же передавать внутрь хотя бы фиксированные передаваемые объекты 1С - через сериализацию - но им тогда нужна поддержка внутри компоненты - во что десериализовываться - а эта проблема ого-го какая масштабная! Но хотя бы поддержку основным типов данных от примитивов до коллекций, а так же хотя бы обобщённо ссылок, картинок и некоторых других особо важных и не шибок сложно-организованных универсальных типов - надо было бы сделать! Доступ же к СУБД, конечно удобнее делать через COM подключение, а в клиентском коде - возможно и обратное OLE подключение - и реализацию какой-то высокоуровневой надстройки-абстракции, доступной внутри скрипта.
Без этого - прям вообще всё очень кисло выходит!
Lacoste4life; awk; sandr13; loocka_; RustIG; +5 Ответить
43. SerVer1C 750 21.04.23 02:03 Сейчас в теме
(6)
прям вообще всё очень кисло выходит!

Подсластил в версии 2.0
10. RustIG 1595 07.04.23 16:18 Сейчас в теме
(2)через файлы можно обмениваться
34. Darklight 32 12.04.23 10:33 Сейчас в теме
(10)Вы из какого века?
Не, ну, да - конечно если объёмы передаваемых данных очень велики.... хотя и в этом случае просто файлы на диске - это не очень быстро - если это только не RAM-диск
А так - по сути что файлы, что строки аргументов - не велика разница - и то и то - просто массив символов! И там и там нужна сериализация/десериализация - а именно тут главная загвоздка на стороне ВК.
5. SeiOkami 3433 07.04.23 13:24 Сейчас в теме
(1) В принципе, можно в темп дирректорию кидать файлик с сериализованным значением (XML, JSON) и имя файла подставлять в скрипт.
Но вообще я это не писал, ибо жуткий костыль
42. SerVer1C 750 21.04.23 02:01 Сейчас в теме
(1)
Без этого область применения кажется очень узкой

Передача значений между компонентой и кодом 1с реализована в версии 2.0
3. Obertone 74 07.04.23 13:05 Сейчас в теме
Данная тема конечно интересна. Тем более, что известно про запуск из 1С кода C#, который был в скрипте PowerShell.

Один пример этого приведён здесь: https://infostart.ru/public/1523127/
sandr13; cleaner_it; +2 Ответить
4. RustIG 1595 07.04.23 13:12 Сейчас в теме
(0) а можете набор готовых полезняшек (плагинов) предоставить?
в таком формате: берем такой код - получаем вот это...
9. SerVer1C 750 07.04.23 15:18 Сейчас в теме
(4) я даже растерялся, что тут можно предложить. Для этого лучше зайти на Гитхаб и черпать информацию там. C# достаточно мощный язык (только драйвера и ОСи не написать), не вижу практического смысла тут приводить какие-то полезняшки, если каждый может сам взять под свои требования нужный кусок кода.
11. RustIG 1595 07.04.23 16:20 Сейчас в теме
(9)ясно, понял, согласен
52. Brawler 455 04.03.24 19:59 Сейчас в теме
(9) Были проекты операционных систем написанные на неких вариациях C# которые могли работать напрямую с железом и обрабатывать исключения процессора и не только, так что не нужно так быстро заявлять что C# слаб)) Он мощен и красив, только сейчас более узка специфика применения, но то ли еще будет!

Cosmos (операционная система)
Материалы в инете есть, можно пошукать.
Есть примочки для Visual Studuio позволяющие типа начать писать сразу под эту ОС.
53. SerVer1C 750 05.03.24 08:29 Сейчас в теме
(52)
так что не нужно так быстро заявлять что C# слаб))

Может сначала перечитаете коммент??

Под C# я имел ввиду классическую реализацию под платформу .NET, где используется виртуальная машина. Не представляю, как тут можно реализовать ОС.

А если внимательно читать, то на главной странице проекта Cosmos ясно написано: "Cosmos is not an operating system in the traditional sense"
54. Brawler 455 05.03.24 08:53 Сейчас в теме
(53) То исследовательский проект, который показал некие результаты, сделаны некие выводы. Может в будущем мы увидем полноценные ОС написанные на С# и весь софт тоже. А пока явно тягость обратной совместимости с кучей ПО давит на производителей типа Майкрософт
55. SerVer1C 750 05.03.24 09:00 Сейчас в теме
(54) Виртуальной машиной в .NET должна управлять операционная система. Так что на C# никогда не напишут полноценную ОС.
56. Brawler 455 05.03.24 09:27 Сейчас в теме
(55) А что мешает виртуальной машине и быть операционной системой написанной на самом же С#? Ведь и сейчас С# написан на С#. Вся суть даже не в С#, а в том что это именно .NET операционная система, безопасность все дела...
7. Darklight 32 07.04.23 14:26 Сейчас в теме
1С при работе с данными в СУБД очень часто используют вставки кода на языке запросов (отличном от основного языка по синтаксису и возможностям).

Это совсем не вставка кода - увы - это просто текстовый скрипт в строке! И в C# работа с запросами примерно такая же - тоже через строки.
Вставка кода запросов в C# - это расширение LINQ - синтакс запроса
Ниже пример из справки Микрософт
Смотри //Query syntax
class QueryVMethodSyntax
{
    static void Main()
    {
        int[] numbers = { 5, 10, 8, 3, 6, 12};

        //Query syntax:
        IEnumerable<int> numQuery1 =
            fr om num in numbers
            wh ere num % 2 == 0
            orderby num
            sel ect num;

        //Method syntax:
        IEnumerable<int> numQuery2 = numbers.Wh ere(num => num % 2 == 0).OrderBy(n => n);

        foreach (int i in numQuery1)
        {
            Console.Write(i + " ");
        }
        Console.WriteLine(System.Environment.NewLine);
        foreach (int i in numQuery2)
        {
            Console.Write(i + " ");
        }

        // Keep the console open in debug mode.
        Console.WriteLine(System.Environment.NewLine);
        Console.WriteLine("Press any key to exit");
        Console.ReadKey();
    }
}
Показать

В коде выше искажены слова From, Select и Where - стоит пробел - это движок Инфостарта их ставит - ничего не могу поделать

Ну и с СУБД там аналогично идёт работа через Enity Framework

Правда такой синтаксис запросов не стал популярным среди разработчиков ,NET - те предпочли синтаксис вложенных (точечных) методов Fluent interface на методах расширений LINQ
Смотри в примере выше //Method syntax
Причина проста - лаконичнее (особенно в простых выборках) и мощнее - за счёт глубокого использования анонимных лямбда-выражений и возможности подключать готовые функции)
8. SerVer1C 750 07.04.23 15:13 Сейчас в теме
(7)
Это совсем не вставка кода - увы - это просто текстовый скрипт в строке!
Позволю с вами не согласиться. Это всё же есть исходный код, только на другом языке программирования. Хоть он здесь и сейчас заключен в строковую константу, но в другой среде он будет успешно транслироваться/компилироваться и выполняться. К чему придираться к словам? Ваши умения философствовать в комментариях лучше направить на написание новых интересных публикаций.
35. Darklight 32 12.04.23 10:44 Сейчас в теме
(8)Я не придираюсь - просто Вы же сами в статье приводите примеры реальной ставки в код (которую поддерживает тот или иной ЯП изначально) - но далее же приводите уже не вставку кода - а просто передачу строки с некиимии инструкциями некоему исполнителю - технически это другое!
У вставки в код есть неоспоримые преимущества - как минимум:
1. Цветовая подстветка синтаксиса
2. Контроль синтаксиса на этапе "компиляции" или операции контроля синтаксиса, и вообще на этапе прямого ввода
3. Быстрый ввод а-ля "интелисенс"
4. Гибкая интеграция с остальным кодом (хотя бы с переменными, хотя порой и с функциями), или какая-либо ещё привязка к контексту
5. Поддержка рефакторинга (в т.ч. общего - да хоть то же переименование переменных)

Замечу, что некоторые фишки такие инструменты как Снегопат поддерживают и для текстовых строк языка запросов 1С - но очень ограничено

Есть и недостаток: очень большая сложность (тут зависит от базового ЯП) динамической генерации вставленного кода в рантайм! Но я так скажу - скорее всего такая потребность - это результат плохого дизайна или слабости сборщика-препроцессора (IDE) - в 98% такая генерация должна быть статической (выполняться на стадии компиляции/сборки) - вот такое решение и хотелось бы иметь... но это я так - просто лирика!
BillySwat; +1 Ответить
27. GreenDragon 10.04.23 02:38 Сейчас в теме
(7) инфостарт юзает фильтрацию ввода, судя по всему. Защита от всяких sql инъекций, походу. Вот же затейники )))
12. TSSV 1145 07.04.23 16:34 Сейчас в теме
Мне тоже нравится C#. Может быть, пока Вы далеко не продвинулись, начать писать open source платформу на C#, чего уж мелочиться? Думаю к этой затее многие с удовольствием бы подключились. В целом по поводу C# - сейчас в России нет легальной возможности хостить свои веб-проекты на Windows - серверах, так как Microsoft ушла из России. Можно конечно под Linux выпускать и VS это умеет, но для тех кто как я привык к Windows - это проблема. Так что перспективы C# сейчас как бы туманны. #1 open source C#
32. zebr 31 11.04.23 10:33 Сейчас в теме
(12)
свои веб-проекты на Windows - серверах, так как Microsoft

сейчас в России нет легальной возможности хостить свои веб-проекты на Windows - серверах, так как Microsoft ушла из России


есть импортозамещение через Турцию, например

А простые проекты на C# без использования Windows-специфики (такой как GDI) - прекрасно работают под Linux, в контейнерах, например
33. TSSV 1145 11.04.23 14:14 Сейчас в теме
(32) Я все это знаю, тоже изучал вопрос, по Windows хостингу есть левые варианты и в России. Речь идет о перспективах технологии, если это все надолго, то возможно нужно искать что-то другое, чтобы без таких извращений обойтись - привыкли уже что все чинно и благородно :)
36. Darklight 32 12.04.23 10:46 Сейчас в теме
(12)Вот я давно хочу! Очень давно хочу! Может и напишу!
Но - одним опенсорсом тут не выедешь. Уже пробовали "2S" - делать - всё загнулось - без бабла такой проект не потянуть!

По поводу C# и Linux - никаких проблем там нет - актуальный .NET 7 (со времён .NET Core) прекрасно работает и на Linux и на macOS и на мобилках! Даже ASP.NET Core есть - который на Linux поднять можно.
И кроссплатформенное GUI есть - правда пока в большей степени только стороннее (типа Avalonia UI, Uno Platform). Там и под WEB можно проект скомпилировать (в UNO Platform; а в фреймворке Alanonia UI это пока только разработке)
41. TSSV 1145 12.04.23 14:41 Сейчас в теме
(36)
напишу!

Кажется, что времена Напишу прошли. Наступили времена "Напишем". Например, современная наука движется уже не гениями - одиночками, а международными научными сообществами, то есть ученые уже научились так работать. Вероятность того, что один специалист будет обладать всеми необходимыми для создания минимально жизнеспособного продукта компетенциями, мала, а требования к уровню продуктов растут. Плюс, даже если такой продукт кем-то создан, то возникает задача его продвижения. А в случае широкого сообщества участников, а это могут быть тысячи специалистов, одновременно решается задача продвижения - все у себя захотят такой продукт при случае внедрить, хотя бы в исследовательских целях. Потенциал факультативной деятельности огромен - практически каждый постоянно тихо пилит что-то гениальное. Как таким сообществам возникнуть, организоваться и далее эффективно функционировать - ВОПРОС.
13. siamagic 07.04.23 20:19 Сейчас в теме
Где самое главное - польза, замеры на участках кода которые ощутимо оправдывают очередное изуверство.
14. SerVer1C 750 07.04.23 21:11 Сейчас в теме
(13) Предоставляйте ваши алгоритмы на 1с и шарпе, будем вместе с вами их мерить.
19. dhurricane 08.04.23 16:56 Сейчас в теме
(14) Так о том и речь: как часто встречается задача, реализованная без запроса к БД, исключительно на встроенном языке 1С, и при этом критичная ко времени выполнения? Не могу вспомнить из своей практики ни одной из них. То ли были когда-то настолько давно, что забыл о них, то ли ни разу не приходилось решать подобные задачи.

Потому-то вопрос и адресован к Вам: Вы своей разработкой решали какую-то конкретную прикладную задачу, или Вам важен был сам процесс разработки, и цели нет?
cleaner_it; +1 Ответить
30. alexey-simf 13 11.04.23 00:24 Сейчас в теме
(19)
Кластеризация результата запроса?
31. dhurricane 11.04.23 00:53 Сейчас в теме
(30) Да, возможно. Правда кажется, что код получится через чур объемный, чтобы его хранить вот так в строке. Ну и в конце концов есть АнализДанных.
50. SerVer1C 750 21.04.23 11:42 Сейчас в теме
(31) Можно сложные алгоритмы запихать в управляемую сборку (DLL) и вызывать конечный метод для обработки в пару строк кода.
44. SerVer1C 750 21.04.23 02:08 Сейчас в теме
(19) Изначально идея была в том, что я сам себя взял на "слабО", смогу ли я реализовать механизм выполнения C# кода прямо из строковой константы, как, например, можно выполнить vbscript код. А сейчас я вижу будущее этой компоненты как универсальную внешнюю компоненту - не нужно под каждую задачу писать, компилировать, регистрировать и т.п., а достаточно только написать/изменить код.
15. alex_sayan 08.04.23 09:36 Сейчас в теме
Это какое-то возвращение в средние века. Встпвленный код на шарпе становится тупым текстом: без подсветки синтаксиса, контекстной подсказки, проверок синтаксиса и прочей современной атрибутики прогоаммирования
16. SerVer1C 750 08.04.23 11:05 Сейчас в теме
(15) А вот для подсветки синтаксиса и контекстной подсказки интегрируют в 1С MS Monaco.
17. alexey_kurdyukov 157 08.04.23 11:08 Сейчас в теме
Традиционный метод писать скрипты на JS/VBS и запускать через WSH уже немодный?
45. SerVer1C 750 21.04.23 02:10 Сейчас в теме
49. alexey_kurdyukov 157 21.04.23 03:12 Сейчас в теме
18. PerlAmutor 129 08.04.23 15:27 Сейчас в теме
Когда уже в платформу встроят поддержку компонент на базе WebAssembly.
Darklight; sandr13; +2 Ответить
20. Green2 29 08.04.23 18:23 Сейчас в теме
Если бы я расширял 1С, то наверно написал бы отдельный сервис с применением вебсервисов, а потом этот вебсервис вызывал бы из 1С.
Например, на Node.JS Получится кросплатформенно, работает и на Windows и на Linux.
sandr13; papami; +2 Ответить
23. papami 55 09.04.23 08:29 Сейчас в теме
(20) тот же .NET Core тоже кросплатформенно и тоже C#
21. brunet 39 08.04.23 21:20 Сейчас в теме
Только одна проблема. Почти все программисты 1с не знают С#
NeLenin; mrChOP93; sandr13; +3 Ответить
22. Green2 29 08.04.23 23:11 Сейчас в теме
(21) Максимальной скорости на ассемблере можно достигнуть.. Разве что на ассемблере тяжело алгоритмы писать.
Я сочинял программы и на ассемблере и на C# и считаю, что встроенный язык платформы считает что надо и не зачем что то городить.
46. SerVer1C 750 21.04.23 02:11 Сейчас в теме
(22) Ну попробуйте, например, склеить PDF файлы или вытащить из PDF текст с помощью только одной 1с
48. alexey_kurdyukov 157 21.04.23 03:11 Сейчас в теме
(46) пользуюсь для такого утилитами командной строки, а не костылями
24. =Kollega= 4 09.04.23 14:32 Сейчас в теме
Вот главный вопрос, что за алгоритм такой супер-пупер сложный, что на C# он прям таки взлетит, а на 1с будет долго работать и его никак не изменить или упростить. Учитывая, что входные параметры надо как-то подготовить, а результат получить обратно.
47. SerVer1C 750 21.04.23 02:15 Сейчас в теме
(24) Например, компьютерное зрение
25. sandr13 34 10.04.23 00:26 Сейчас в теме
Не C# надо, а С++! И компилировать и потом вызвать где надо из 1С экзешник!
51. NeLenin 13 11.05.23 15:35 Сейчас в теме
(25) лучше не экзешник, а dll. Можно выбрать любой язык, который это позволяет. Даже Паскаль. А там - те самые вставки на ассемблере ))
26. sandr13 34 10.04.23 00:26 Сейчас в теме
А может сразу писать всё на С++?
28. SGordon1 10.04.23 09:22 Сейчас в теме
А почему именно C#, может жабаскрипт интереснее выйдет?
37. Darklight 32 12.04.23 10:55 Сейчас в теме
(28)На JS Вы и так можете - создаёте HTML поле - и запускаете там свой скрипт (загружаете HTML с нужным скриптом) - статьи были - ах да - только на клиенте
Вне браузерного окна это уже Node.js - но к нему наверное тоже ВК-оболочку прикрутить можно
29. mixperm 67 10.04.23 14:31 Сейчас в теме
Бесполезно! Если что-то на Си хочешь написать, то прикрути туда http сервис и делай из 1С запрос к нему, это будет явно быстрей чем поднятие ком
38. Darklight 32 12.04.23 11:05 Сейчас в теме
(29)Тут есть свои нюансы.
COM - лишь долго подымается (это разово), и может не очень шустро работает - но хранит текущий контекст и кешируется. Не кроссплатформенно!
HTTP-сервис - не хранит контекст (для его хранение уже не хило так надо за морочиться) и требует HTTP-сервером, и настройку публикации; скорость вызова сильно зависит от скорости работы с HTTP-сервером, и скорости восстановления контекста(если он нужен). Кроссплатформенно!
Но бесспорно - сейчас чаще всего интеграция софта организуется через HTTP-сервисы!
Но это если говорить о софте. Если опуститься до уровня библиотек - то лучше нативная интеграция. Вот только у 1С эти нативные ВК - этот ещё тот геморой и куча ограничений (низкоуровневый ЯП С++ тут всё очень усложняет)!
COM-компоненты это вообще жесть - но порой в 1С без них сложно обойтись!
39. mozz 148 12.04.23 11:40 Сейчас в теме
в 2011 что-то подобное делал https://infostart.ru/public/84246/

у меня компонента может возвращать в 1С результат обработки полученного из 1С значения. Так что можете у меня подсмотреть, код открытый.
40. mozz 148 12.04.23 12:05 Сейчас в теме
А, не, посмотрел у меня просто com activeX, с вызовом из 1С и с возвратом в 1С результата.
Оставьте свое сообщение