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

05.05.25

Разработка - Инструментарий разработчика

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
(только для физ. лиц)
AddIn_CSharp
.epf 17,48Kb ver:2.0
4 3 050 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Здрасьте!

Наверняка многие видели, что внутри исходников на языке 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ь!

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.155

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

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

15500 руб.

02.09.2020    205934    1131    410    

1029

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    36890    211    111    

198

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

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

16000 руб.

10.11.2023    16800    73    39    

89

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    24390    65    28    

93

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9500 руб.

17.05.2024    35347    128    53    

170

SALE! 30%

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    2023    1    0    

8

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

6000 руб.

07.02.2018    107719    249    100    

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

Без этого область применения кажется очень узкой. Проще скомпилировать код в исполняемый файл и программно запустить его.
sewell; Lacoste4life; zebr; awk; olexi2012; user1243757; G_116449793522595596167; GreenDragon; cleaner_it; Darklight; +10 Ответить
2. SerVer1C 947 07.04.23 11:10 Сейчас в теме
(1) Можно. Но не везде разрешат компилировать exe'шники и запускать их в проде.
Данное решение стремится к "идеальной" внешней компоненте, т. е. вам не нужно будет создавать отдельную внешнюю компоненту для реализации каждого отдельного функционала, а достаточно прописать текстом в коде рабочий скрипт на шарпе, который будет скармливаться этой компоненте.
6. Darklight 34 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 947 21.04.23 02:03 Сейчас в теме
(6)
прям вообще всё очень кисло выходит!

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

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

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

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

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

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

А если внимательно читать, то на главной странице проекта Cosmos ясно написано: "Cosmos is not an operating system in the traditional sense"
54. Brawler 462 05.03.24 08:53 Сейчас в теме
(53) То исследовательский проект, который показал некие результаты, сделаны некие выводы. Может в будущем мы увидем полноценные ОС написанные на С# и весь софт тоже. А пока явно тягость обратной совместимости с кучей ПО давит на производителей типа Майкрософт
55. SerVer1C 947 05.03.24 09:00 Сейчас в теме
(54) Виртуальной машиной в .NET должна управлять операционная система. Так что на C# никогда не напишут полноценную ОС.
56. Brawler 462 05.03.24 09:27 Сейчас в теме
(55) А что мешает виртуальной машине и быть операционной системой написанной на самом же С#? Ведь и сейчас С# написан на С#. Вся суть даже не в С#, а в том что это именно .NET операционная система, безопасность все дела...
7. Darklight 34 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 947 07.04.23 15:13 Сейчас в теме
(7)
Это совсем не вставка кода - увы - это просто текстовый скрипт в строке!
Позволю с вами не согласиться. Это всё же есть исходный код, только на другом языке программирования. Хоть он здесь и сейчас заключен в строковую константу, но в другой среде он будет успешно транслироваться/компилироваться и выполняться. К чему придираться к словам? Ваши умения философствовать в комментариях лучше направить на написание новых интересных публикаций.
35. Darklight 34 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 1160 07.04.23 16:34 Сейчас в теме
Мне тоже нравится C#. Может быть, пока Вы далеко не продвинулись, начать писать open source платформу на C#, чего уж мелочиться? Думаю к этой затее многие с удовольствием бы подключились. В целом по поводу C# - сейчас в России нет легальной возможности хостить свои веб-проекты на Windows - серверах, так как Microsoft ушла из России. Можно конечно под Linux выпускать и VS это умеет, но для тех кто как я привык к Windows - это проблема. Так что перспективы C# сейчас как бы туманны. #1 open source C#
32. zebr 32 11.04.23 10:33 Сейчас в теме
(12)
свои веб-проекты на Windows - серверах, так как Microsoft

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


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

А простые проекты на C# без использования Windows-специфики (такой как GDI) - прекрасно работают под Linux, в контейнерах, например
33. TSSV 1160 11.04.23 14:14 Сейчас в теме
(32) Я все это знаю, тоже изучал вопрос, по Windows хостингу есть левые варианты и в России. Речь идет о перспективах технологии, если это все надолго, то возможно нужно искать что-то другое, чтобы без таких извращений обойтись - привыкли уже что все чинно и благородно :)
36. Darklight 34 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 это пока только разработке)
NicolasCage; TSSV; +2 Ответить
41. TSSV 1160 12.04.23 14:41 Сейчас в теме
(36)
напишу!

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

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

у меня компонента может возвращать в 1С результат обработки полученного из 1С значения. Так что можете у меня подсмотреть, код открытый.
40. mozz 149 12.04.23 12:05 Сейчас в теме
А, не, посмотрел у меня просто com activeX, с вызовом из 1С и с возвратом в 1С результата.
57. NicolasCage 14.06.24 10:47 Сейчас в теме
(2) SerVer1C, спасибо вам за проделанную работу. Прочитав вашу статья я буд то глотнул свежего воздуха) Хотел узнать: есть продолжение статьи?
58. SerVer1C 947 14.06.24 10:56 Сейчас в теме
(57) Спасибо! В планах есть идея написать статью про конвертацию голоса в текст с помощью данной компоненты.
Оставьте свое сообщение