1С# - Расширяем код 1С кодом на C#
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Здрасьте!
Наверняка многие видели, что внутри исходников на языке 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());
- Можно использовать статические классы;
- Добавлен подсчет времени компиляции и выполнения скрипта.
Run(ТекстПрограммыНаСиШарп) - компилирует и выполняет полноценный скрипт с заданными namespace -> class -> method
Параметр - тип строка - текст программы на C#
Возвращаемое значение - отсутствует
RunScript(ТекстПрограммыНаСиШарп) - компилирует и выполняет полноценный скрипт в контексте namespace CSCodeEvaler -> class CSCodeEvaler -> void EvalCode() и со ссылкой на System.dll
Параметр - тип строка - скрипт на C#
Возвращаемое значение - отсутствует
ClearSettings() - Выставляет всем свойствам компоненты значения по умолчанию
Параметр - отсутствует
Возвращаемое значение - отсутствует
References - [тип строка | чтение/запись | необязательный] - названия ссылок (References) через символ ";" (без пробелов), по умолчанию "System.dll"
NameSpace - [тип строка | чтение/запись | необязательный] - название пространства имён, используемого в скрипте, по умолчанию "CSCodeEvaler"
NameClass - [тип строка | чтение/запись | необязательный] - название имени класса, используемого в скрипте, по умолчанию "CSCodeEvaler"
NameMethod - [тип строка | чтение/запись | необязательный] - название метода, используемого в скрипте, по умолчанию "EvalCode"
ParameterX - [тип произвольный | чтение/запись | обязательный] - значения для параметров из метода скрипта, в скрипте можно указать максимум 10 параметров, где X от 0 до 9, обязательно нужно указать значения для тех параметров, которые будут задействованы в скрипте
Result - [тип произвольный | чтение] - значение, которое будет получено в результате выполнения метода
CompilationTime - [тип строка | чтение] - время компиляции скрипта (в формате ##:##:##.#######)
ExecutionTime - [тип строка | чтение] - время выполнения скрипта (в формате ##:##:##.#######)
Например, для запуска любой программы достаточно написать
ТекстПрограммыНаСиШарп = "
|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
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13251 104 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83167 431 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285492 1606 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 16679 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44122 122 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 76731 147 41
Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)
Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.
18300 руб.
11.09.2026 3664 5 0
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28695 103 46
Без этого область применения кажется очень узкой. Проще скомпилировать код в исполняемый файл и программно запустить его.
Данное решение стремится к "идеальной" внешней компоненте, т. е. вам не нужно будет создавать отдельную внешнюю компоненту для реализации каждого отдельного функционала, а достаточно прописать текстом в коде рабочий скрипт на шарпе, который будет скармливаться этой компоненте.
Я так полагаю, что суть реализации - это подключение .NET Scripting на баз Roslyn. Насколько я понимаю - там вся фишка изначально затевалась на том, что скрипт можно предварительно анализировать - на предмет дозволенных инструкций (есть готовые обучающие материалы и вроде бы даже анализаторы для проектов на C# на эту тему) - без возможности установки ограничений на исполнение - такое решение становится очень небезопасным и вряд ли будет востребовано! Уж куда безопаснее скомпилировать нужный код во внешнюю компоненту и подключить фиксировано к конфигурации - на эту тему материалов на Инфорстарте предостаточно!
Тем более без доступа к контекст у 1C - а с этим то вся загвоздка.
Если задействован .NET Scripting - то там контекст подключается обычно через специальную структуру данных - через которую передаются внешние данные (и через неё же возвращаются - это один из самых простых вариантов из доступных). Контекст фиксирован. Могли бы - так же передавать внутрь хотя бы фиксированные передаваемые объекты 1С - через сериализацию - но им тогда нужна поддержка внутри компоненты - во что десериализовываться - а эта проблема ого-го какая масштабная! Но хотя бы поддержку основным типов данных от примитивов до коллекций, а так же хотя бы обобщённо ссылок, картинок и некоторых других особо важных и не шибок сложно-организованных универсальных типов - надо было бы сделать! Доступ же к СУБД, конечно удобнее делать через COM подключение, а в клиентском коде - возможно и обратное OLE подключение - и реализацию какой-то высокоуровневой надстройки-абстракции, доступной внутри скрипта.
Без этого - прям вообще всё очень кисло выходит!
Не, ну, да - конечно если объёмы передаваемых данных очень велики.... хотя и в этом случае просто файлы на диске - это не очень быстро - если это только не RAM-диск
А так - по сути что файлы, что строки аргументов - не велика разница - и то и то - просто массив символов! И там и там нужна сериализация/десериализация - а именно тут главная загвоздка на стороне ВК.
Cosmos (операционная система)
Материалы в инете есть, можно пошукать.
Есть примочки для Visual Studuio позволяющие типа начать писать сразу под эту ОС.
Может сначала перечитаете коммент??
Под C# я имел ввиду классическую реализацию под платформу .NET, где используется виртуальная машина. Не представляю, как тут можно реализовать ОС.
А если внимательно читать, то на главной странице проекта Cosmos ясно написано: "Cosmos is not an operating system in the traditional sense"
Это совсем не вставка кода - увы - это просто текстовый скрипт в строке! И в 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 - те предпочли синтаксис вложенных (точечных) методов на методах расширений LINQ
Смотри в примере выше //Method syntax
Причина проста - лаконичнее (особенно в простых выборках) и мощнее - за счёт глубокого использования анонимных лямбда-выражений и возможности подключать готовые функции)
У вставки в код есть неоспоримые преимущества - как минимум:
1. Цветовая подстветка синтаксиса
2. Контроль синтаксиса на этапе "компиляции" или операции контроля синтаксиса, и вообще на этапе прямого ввода
3. Быстрый ввод а-ля "интелисенс"
4. Гибкая интеграция с остальным кодом (хотя бы с переменными, хотя порой и с функциями), или какая-либо ещё привязка к контексту
5. Поддержка рефакторинга (в т.ч. общего - да хоть то же переименование переменных)
Замечу, что некоторые фишки такие инструменты как Снегопат поддерживают и для текстовых строк языка запросов 1С - но очень ограничено
Есть и недостаток: очень большая сложность (тут зависит от базового ЯП) динамической генерации вставленного кода в рантайм! Но я так скажу - скорее всего такая потребность - это результат плохого дизайна или слабости сборщика-препроцессора (IDE) - в 98% такая генерация должна быть статической (выполняться на стадии компиляции/сборки) - вот такое решение и хотелось бы иметь... но это я так - просто лирика!
есть импортозамещение через Турцию, например
А простые проекты на C# без использования Windows-специфики (такой как GDI) - прекрасно работают под Linux, в контейнерах, например
Но - одним опенсорсом тут не выедешь. Уже пробовали "2S" - делать - всё загнулось - без бабла такой проект не потянуть!
По поводу C# и Linux - никаких проблем там нет - актуальный .NET 7 (со времён .NET Core) прекрасно работает и на Linux и на macOS и на мобилках! Даже ASP.NET Core есть - который на Linux поднять можно.
И кроссплатформенное GUI есть - правда пока в большей степени только стороннее (типа Avalonia UI, Uno Platform). Там и под WEB можно проект скомпилировать (в UNO Platform; а в фреймворке Alanonia UI это пока только разработке)
Кажется, что времена Напишу прошли. Наступили времена "Напишем". Например, современная наука движется уже не гениями - одиночками, а международными научными сообществами, то есть ученые уже научились так работать. Вероятность того, что один специалист будет обладать всеми необходимыми для создания минимально жизнеспособного продукта компетенциями, мала, а требования к уровню продуктов растут. Плюс, даже если такой продукт кем-то создан, то возникает задача его продвижения. А в случае широкого сообщества участников, а это могут быть тысячи специалистов, одновременно решается задача продвижения - все у себя захотят такой продукт при случае внедрить, хотя бы в исследовательских целях. Потенциал факультативной деятельности огромен - практически каждый постоянно тихо пилит что-то гениальное. Как таким сообществам возникнуть, организоваться и далее эффективно функционировать - ВОПРОС.
Потому-то вопрос и адресован к Вам: Вы своей разработкой решали какую-то конкретную прикладную задачу, или Вам важен был сам процесс разработки, и цели нет?
Например, на Node.JS Получится кросплатформенно, работает и на Windows и на Linux.
Я сочинял программы и на ассемблере и на C# и считаю, что встроенный язык платформы считает что надо и не зачем что то городить.
Вне браузерного окна это уже Node.js - но к нему наверное тоже ВК-оболочку прикрутить можно
COM - лишь долго подымается (это разово), и может не очень шустро работает - но хранит текущий контекст и кешируется. Не кроссплатформенно!
HTTP-сервис - не хранит контекст (для его хранение уже не хило так надо за морочиться) и требует HTTP-сервером, и настройку публикации; скорость вызова сильно зависит от скорости работы с HTTP-сервером, и скорости восстановления контекста(если он нужен). Кроссплатформенно!
Но бесспорно - сейчас чаще всего интеграция софта организуется через HTTP-сервисы!
Но это если говорить о софте. Если опуститься до уровня библиотек - то лучше нативная интеграция. Вот только у 1С эти нативные ВК - этот ещё тот геморой и куча ограничений (низкоуровневый ЯП С++ тут всё очень усложняет)!
COM-компоненты это вообще жесть - но порой в 1С без них сложно обойтись!
Рейтинг: 1146
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1841612
Создание 07.04.23 10:30
Обновление 05.05.25 10:08
Просмотры 15253
Загрузки 6
Рейтинг
47
Комментарии 58
Код открыт Да
Рубрики Языки и среды Инструментарий разработчика
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Windows
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)