Статья очень зацепила, и вот - моя первая реализация скриптового применения возможностей .NET
Код С# в bat-файле
См. также
Языки и среды Программист Платформа 1С v8.3 Бесплатно (free)
Будем писать свои скрипты на питоне и запускать их на 1С.
15.04.2024 4040 YA_418728146 13
Мобильная разработка Языки и среды 1С:Элемент Программист Бесплатно (free)
Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику
19.03.2024 18330 ROk_dev 74
Языки и среды Программист Стажер Платформа 1С v8.3 Бесплатно (free)
Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.
16.01.2024 7332 SeiOkami 25
Языки и среды Программист Бесплатно (free)
Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.
08.08.2023 4206 acvatoris 6
Языки и среды Программист Платформа 1С v8.3 Россия Бесплатно (free)
Написание статического анализатора для 1С традиционным способом на Си.
30.06.2023 3496 prohorp 15
Языки и среды Программист Абонемент ($m)
Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию
1 стартмани
01.06.2023 2314 0 kembrik 2
Языки и среды Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)
Вставки кода на C# внутри кода на 1С.
7 стартмани
07.04.2023 10564 4 SerVer1C 58
Языки и среды Программист Платформа 1С v8.3 Бесплатно (free)
При работе с 1С ORM (object relation mapping) все время преследует ощущение постоянного создания монолитного приложения — один раз привязался к какой либо сущности (например, справочник Контрагенты), и весь код заполнен ссылками на эту конкретную реализацию. Можно ли независимо разрабатывать в ORM совместимые между собой справочник «Контрагентов» и использующий его документ «Платежное поручение», но при этом избежать жестких зависимостей? Спасут ли нас микросервисы? Пример на аннотациях Java демонстрирует, как это возможно делать.
13.03.2023 1306 1CUnlimited 0
PS (10) :D ну как же без них... на самом деле bat редко использую, есть powershell и команда add-type.
outtext = "";
ActiveXPosh.OutputMode = OUTPUT_BUFFER;
ActiveXPosh.Execute("[reflection.assembly]::loadwithpartialname(""System.Windows.Forms"") | Out-Null
|[reflection.assembly]::loadwithpartialname(""System.Drawing"") | Out-Null
|$form1 = New-Object System.Windows.Forms.Form
|$comboBox1 = New-Object System.Windows.Forms.ComboBox
|$label1 = New-Object System.Windows.Forms.Label
|$button1 = New-Object System.Windows.Forms.Button
|$handler_button1_Click=
|{
| $label1.Text = ""fgbsdfhg""
|}
|$form1.Text = ""'Primal Form'""
|$form1.Name = ""'form1'""
|$form1.DataBindings.DefaultDataSourceUpdateMode = 0
|$System_Drawing_Size = New-Object System.Drawing.Size
|$System_Drawing_Size.Width = 292
|$System_Drawing_Size.Height = 273
|$form1.ClientSize = $System_Drawing_Size
|$comboBox1.FormattingEnabled = $True
|$System_Drawing_Size = New-Object System.Drawing.Size
|$System_Drawing_Size.Width = 121
|$System_Drawing_Size.Height = 21
|$comboBox1.Size = $System_Drawing_Size
|$comboBox1.DataBindings.DefaultDataSourceUpdateMode = 0
|$comboBox1.Name = ""'comboBox1'""
|$System_Drawing_Point = New-Object System.Drawing.Point
|$System_Drawing_Point.X = 78
|$System_Drawing_Point.Y = 189
|$comboBox1.Location = $System_Drawing_Point
|$comboBox1.TabIndex = 2
|$form1.Controls.Add($comboBox1)
|$label1.TabIndex = 1
|$System_Drawing_Size = New-Object System.Drawing.Size
|$System_Drawing_Size.Width = 100
|$System_Drawing_Size.Height = 23
|$label1.Size = $System_Drawing_Size
|$label1.Text = ""'label1'""
|$System_Drawing_Point = New-Object System.Drawing.Point
|$System_Drawing_Point.X = 78
|$System_Drawing_Point.Y = 134
|$label1.Location = $System_Drawing_Point
|$label1.DataBindings.DefaultDataSourceUpdateMode = 0
|$label1.Name = ""'label1'""
|$form1.Controls.Add($label1)
|$button1.TabIndex = 0
|$button1.Name = ""'button1'""
|$System_Drawing_Size = New-Object System.Drawing.Size
|$System_Drawing_Size.Width = 75
|$System_Drawing_Size.Height = 23
|$button1.Size = $System_Drawing_Size
|$button1.UseVisualStyleBackColor = $True
|$button1.Text = ""'button1'""
|$System_Drawing_Point = New-Object System.Drawing.Point
|$System_Drawing_Point.X = 78
|$System_Drawing_Point.Y = 50
|$button1.Location = $System_Drawing_Point
|$button1.DataBindings.DefaultDataSourceUpdateMode = 0
|$button1.add_Click($handler_button1_Click)
|$form1.Controls.Add($button1)
|$form1.ShowDialog()| Out-Null");
For Each str In ActiveXPosh.Output do
outtext = outtext + str;
outtext = outtext + Символы.ПС;
EndDo;
Сообщить(outtext);
ActiveXPosh.ClearOutput();
В данном случае ActiveXPosh - Это бесплатная COM-компонента от них же, которую можно использовать как уверяет разработчик из многих COM “совместимых” языков – из VBScript, JScript, KiXtart. Отчего же не использовать ее в 1С.
Данный компонент поддерживает выполнение следующих команд(из хелпа):
ClearOutput() - This method clears the internal output buffer.
Execute(strcommand) - Executes a PowerShell command or script.
Eval(strExpression) - Evaluates a PowerShell expression.
Init(execProfile) - Initial call to instantiate a PowerShell engine.
IsPowerShellInstalled - Returns True/False.
Output - A collection of strings filled with output from PowerShell
commands.
OutputString - The content of the output buffer as a single string.
OutputMode - Sets or gets the current output mode.
OutputWidth - Sets or gets the desired output width.
(В 1С я просто присвоил
OUTPUT_CONSOLE = 0;
OUTPUT_WINDOW = 1;
OUTPUT_BUFFER = 2; Для лучшей читабельности)
К примеру самое простое - листинг сервисов в ОС
outtext = "";
ActiveXPosh.OutputMode = OUTPUT_BUFFER;
ActiveXPosh.Execute("Get-WmiObject -class Win32_Service | Format-Table -property Name, State");
For Each str In ActiveXPosh.Output do
outtext = outtext + str;
outtext = outtext + Символы.ПС;
EndDo;
Сообщить(outtext);
ActiveXPosh.ClearOutput();
С использованием C#
outtext = "";
ActiveXPosh.OutputMode = OUTPUT_BUFFER;
ActiveXPosh.Execute("$source = @""
|public class BasicTest
|{
| public static int Add(int a, int b)
| {
| return (a + b);
| }
|
| public int Multiply(int a, int b)
| {
| return (a * b);
| }
|}
|""@
|
|Add-Type -TypeDefinition $source
|[BasicTest]::Add(4, 3)
|$basicTestObject = New-Object BasicTest
|$basicTestObject.Multiply(5, 2)");
For Each str In ActiveXPosh.Output do
outtext = outtext + str;
outtext = outtext + Символы.ПС;
EndDo;
Сообщить(outtext);
ActiveXPosh.ClearOutput();
C#, PowerShell и поворот строки
outtext = "";
ActiveXPosh.OutputMode = OUTPUT_BUFFER;
ActiveXPosh.Execute("$source = @""
|public class BasicTes
|{
| public static string Add(string s)
| {
| char[] arr = s.ToCharArray();
| System.Array.Reverse(arr);
| return new string(arr);
| }
|
| public int Multiply(int a, int b)
| {
| return (a * b);
| }
|}
|""@
|Add-Type -TypeDefinition $source
|[BasicTes]::Add(""765767567456769469697965794679467hhhhhhhhhhhhhhhhhhhhhhhhhh"")
|$basicTestObject = New-Object BasicTes
|$basicTestObject.Multiply(5, 2)");
For Each str In ActiveXPosh.Output do
outtext = outtext + str;
outtext = outtext + Символы.ПС;
EndDo;
Сообщить(outtext);
ActiveXPosh.ClearOutput();
Понравилось у PowerShell - возможность напрямую использовать дотнетовские сборки.
ЗЫ Это все прелюдия - а вот, что интересного такого сделать? Искал на
ЗЫ Давно появилась идея, но вот с реализацией туго, это сделать одно из двух - либо 1) сделать конфигурацию и программку на C#, для того, чтобы писать "скрипты" 1С в обычных текстовых файлах. В конфе бы просто содержались готовые "библиотечки". А программка бы идентифицировала эти "скрипты" (для того чтобы в назначенные задания - шедулер поставить) и отправляла через COM в 1С на выполнение в назначенное время. Можно подумать и об удаленной реализации - когда 1С на локальном компе нет. 2) Пришла идея - после
1) Ну тут проблем вообще никаких не вижу. За исключением того, что в базах 1С надо дописывать некоторые функции в модуле внешнего соединения, которые будут принимать эти скрипты.
2) >больше имеет смысл превращать код 1С в код C#
Именно этим и занимался - можно генерить ВК с уже прописанным на 1С кодом (в целях той же защиты, например).
(18) это хорошо (про карту) - просто наткнулся на пост про кэширование и не обнаружил нигде на ИС упоминание про это, вот и подумал, что никто не делал :D
ЗЫ вообще надо как-то мне собранее быть, а то из стороны в сторону кидает - увидел, что кто-то выложил обработку про поиск картинок, тут же стал смотреть google api на предмет использования в 1С...
if (loScript.bError)
MessageBox.Show(loScript.cErrorMsg + "\r\n\r\n" + loScript.cSourceCode);
else
MessageBox.Show(lcResult);
Как-то так они получают результат. Или есть методы попроще. Просто мне понравилась идея выполнения c# в 1С без ВК, но вот как результат получать? Вот и думаю как такую ВК написать, которая бы исполняла c# скрипты и возвращала результат.
param ([string] $HostAddress = "127.0.0.1")
$HostIp = [System.Net.IPAddress]::Parse("127.0.0.1")
if (! ([system.Net.IPAddress]::TryParse($hostaddress, [ref] $HostIP))) {"Not valid IP address"; return}
$hostentrydetails = [System.Net.Dns]::GetHostEntry($HostIP)
"Host Name : {0}" -f $hostentrydetails.HostName
foreach ($alias in $hostentrydetails.alises) {
"Alias : {0}" -f $alias
}
foreach ($addr in $hostentrydetails.addresslist) {
"Address : {0}" -f $Addr.ipaddresstostring
}
С помощью ActiveX от Sapien можно все это сделать 1С, также как в вышеприведенном комментарии. (...проблема в том, что не везде powershell...можно сделать portable, но только для личного пользования - кстати нельзя ли сделать framework portable? надо попробовать...)
Для получения уведомлений о новых публикациях автора подключите телеграм бот: Инфостарт бот
№ 78500
Создание 23.11.10 04:27
Обновление 23.11.10 04:26
Просмотры 17794
Загрузки 0
Рейтинг
15
Комментарии 26
Код открыт Не указано
Рубрики Языки и среды
Кому Программист
Тип файла Нет файла
Платформа Не имеет значения
Конфигурация Не имеет значения
Операционная система Windows
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)