Код С# в bat-файле

23.11.10

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

Маленькая забавность о том, как использовать все возможности dotNet в обычных bat-скриптах. Или сделать скриптовый язык из С#.

Статья очень зацепила, и вот - моя первая реализация скриптового применения возможностей .NET

См. также

Зачем нам 1С:Элемент

Мобильная разработка Языки и среды Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    6850    ROk_dev    56    

37

(Не) Строгая типизация 1С

Языки и среды Платформа 1С v8.3 Бесплатно (free)

Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.

16.01.2024    4216    SeiOkami    21    

55

Простое приложение на Dart

Языки и среды Бесплатно (free)

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

08.08.2023    3192    acvatoris    6    

13

Статический анализатор кода 1С на Си

Языки и среды Платформа 1С v8.3 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    2982    prohorp    15    

12

Сквозная задача на Исполнителе - часть первая (IMAP)

Языки и среды Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    1894    0    kembrik    2    

7

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

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

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

7 стартмани

07.04.2023    9286    4    SerVer1C    56    

43

Независимая разработка совместимых компонент на ORM 1С – миф или истина где-то в аннотациях Java?

Языки и среды Платформа 1С v8.3 Бесплатно (free)

При работе с 1С ORM (object relation mapping) все время преследует ощущение постоянного создания монолитного приложения — один раз привязался к какой либо сущности (например, справочник Контрагенты), и весь код заполнен ссылками на эту конкретную реализацию. Можно ли независимо разрабатывать в ORM совместимые между собой справочник «Контрагентов» и использующий его документ «Платежное поручение», но при этом избежать жестких зависимостей? Спасут ли нас микросервисы? Пример на аннотациях Java демонстрирует, как это возможно делать.

13.03.2023    1024    1CUnlimited    0    

2

xPath в 1С

Файловый обмен (TXT, XML, DBF), FTP Языки и среды Платформа 1С v8.3 Бесплатно (free)

Опыт работы методами языка xPath в 1С.

04.03.2023    4935    DemetrKlim    40    

46
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Трактор 1246 23.11.10 10:51 Сейчас в теме
Изврат какой-то. Не проще два файла пользовать?
3. Душелов 4013 23.11.10 16:29 Сейчас в теме
(1) Какие 2 файла?
(2) Не все на повершеле можно сделать
4. Трактор 1246 23.11.10 16:32 Сейчас в теме
(3) батник и файл с исходниками на любом языке. Батником компили, исполняй что хочешь делай. Весь прикол держится только на том что всё затолкано в один файл.
5. Душелов 4013 23.11.10 17:03 Сейчас в теме
(4) Именно так, и то, что он сразу сам и исполняется. И все библиотеки, которые нужны там же и подключаются.
2. cool.clo 23.11.10 11:32 Сейчас в теме
не более чем прикол ,на деле даже не представляю смысл это использовать - в конце концов powershell был придуман. (даже в xp - скачать и поставить powershell не проблема)
6. anig99 2843 03.12.10 18:05 Сейчас в теме
7. cool.vlad4 2 06.01.11 15:39 Сейчас в теме
(0) Познавательно. На англоязычном ресурсе я где-то даже более изящное решение видел. Возник вопрос. Возможно ли использовать смешанный способ в 1С? Что я имею ввиду - к примеру я написал ВК, где у меня она ссылается на сборку, а в свою очередь сборка динамически компилируется ну предположим как здесь описано в 1С.
9. Душелов 4013 07.01.11 00:15 Сейчас в теме
(7) Вполне возможно это сделать. Единственное, что не понятно, для каких целей это надо )
11. cool.vlad4 2 07.01.11 08:29 Сейчас в теме
(9) динамическая компиляция отжирает кучу времени, Зачем компилировать то, что можно скомпилировать заранее, и потом все думаю как linq в 1С прикрутить...(linq to xls или xml например)
PS (10) :D ну как же без них... на самом деле bat редко использую, есть powershell и команда add-type.
Душелов; +1 Ответить
12. Душелов 4013 09.01.11 22:43 Сейчас в теме
(11) Ну давай возьмем какой-нибудь пример и попробуем сделать такой скрипт )
ЗЫ: Иногда скриптов стандартных не хватает, как в примере с геолокацией в Windows 7, тогда и такие батники помогают.
13. cool.vlad4 2 10.01.11 20:53 Сейчас в теме
(12) Да, нужно что-нибудь интересное придумать...сегодня правда бездельничал - голова чего-то болит...для powershell лучше использовать продукты от sapien - какие-то бесплатные, какие-то платные(самый известный primal scripts), с помощью primal forms можно формы лепить - код будет примерно такой (для 1С)
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 - возможность напрямую использовать дотнетовские сборки.
ЗЫ Это все прелюдия - а вот, что интересного такого сделать? Искал на http://gallery.technet.microsoft.com/ - но наверное плохо искал.
ЗЫ Давно появилась идея, но вот с реализацией туго, это сделать одно из двух - либо 1) сделать конфигурацию и программку на C#, для того, чтобы писать "скрипты" 1С в обычных текстовых файлах. В конфе бы просто содержались готовые "библиотечки". А программка бы идентифицировала эти "скрипты" (для того чтобы в назначенные задания - шедулер поставить) и отправляла через COM в 1С на выполнение в назначенное время. Можно подумать и об удаленной реализации - когда 1С на локальном компе нет. 2) Пришла идея - после http://infostart.ru/projects/3181/ - мне кажется смысла в компиляторе нет - поскольку огромная пропасть между языком 1С и "обычным" языком для трансляции из одного в другой. (Возможно, больше имеет смысл превращать код 1С в код C#, который выполняет такие же действия в 1С через COM). Идея создания скриптового языка 1С подобного. С библиотечками. Либо, чтобы он понимал чужие библиотечки. Может кому-то бы и пригодилось, но даже не знаю как это реализовать - сделать свой скриптовый язык это мощно, конечно.
cool.clo; +1 Ответить
14. Душелов 4013 10.01.11 23:47 Сейчас в теме
(13)
1) Ну тут проблем вообще никаких не вижу. За исключением того, что в базах 1С надо дописывать некоторые функции в модуле внешнего соединения, которые будут принимать эти скрипты.
2) >больше имеет смысл превращать код 1С в код C#
Именно этим и занимался - можно генерить ВК с уже прописанным на 1С кодом (в целях той же защиты, например).
15. cool.vlad4 2 11.01.11 00:02 Сейчас в теме
(14) С первым действительно все достаточно прозрачно - через модуль внешнего соединения -> процедура -> выполнить(код). Проблематично сделать скриптовый язык по языку (синтаксически) похожий на 1С. С 1С подобными запросами, имеющие возможность работы с различными объектами. Хотя может проще сделать "переводчик" в какой-нибудь скриптовый язык по типу работы вашего компилятора http://infostart.ru/projects/3181/ - вопрос насколько все это нужно?
18. Душелов 4013 12.01.11 10:32 Сейчас в теме
(15) Вот это уже ближе к истине, что большей частью никому не надо )
(16) Для него надо писать конструктор ) Как WMI Code Creator )
(17) Я делал
19. cool.vlad4 2 12.01.11 17:54 Сейчас в теме
Про code creator с самого начала и подумал, но сейчас заботы ...малоинтересные, надо как-нибудь попробовать в целях образовательных хотя бы...
(18) это хорошо (про карту) - просто наткнулся на пост про кэширование и не обнаружил нигде на ИС упоминание про это, вот и подумал, что никто не делал :D
ЗЫ вообще надо как-то мне собранее быть, а то из стороны в сторону кидает - увидел, что кто-то выложил обработку про поиск картинок, тут же стал смотреть google api на предмет использования в 1С...
20. cool.vlad4 2 13.01.11 10:49 Сейчас в теме
(18) Еще один глупый вопрос Василий - из прочтения статьи http://www.west-wind.com/presentations/DynamicCode/DynamicCode.htm я так понял - конечный результат это генерация c# скриптов для динамического выполнения в asp.net - вопрос следующий - возможно ли сделать в 1С такую штуку для генерации C# скрипта для динамического выполнения и получения результата
lcResult = (string) loScript.ExecuteCode(lcCode, "rick strahl",(int) x,(decimal) 10 );
if (loScript.bError)
MessageBox.Show(loScript.cErrorMsg + "\r\n\r\n" + loScript.cSourceCode);
else
MessageBox.Show(lcResult);

Как-то так они получают результат. Или есть методы попроще. Просто мне понравилась идея выполнения c# в 1С без ВК, но вот как результат получать? Вот и думаю как такую ВК написать, которая бы исполняла c# скрипты и возвращала результат.
22. Душелов 4013 14.01.11 00:12 Сейчас в теме
24. cool.vlad4 2 14.01.11 18:12 Сейчас в теме
(22) Elisy мне не нужен, сам сделаю :D . Пока задач серьезных нет, потому и маюсь. Скрипты да, что-то в этом есть - Exchange 2010 почти весь на повершелле говорят.
8. cool.vlad4 2 06.01.11 15:42 Сейчас в теме
10. Душелов 4013 07.01.11 00:15 Сейчас в теме
(8) Что-то сильно громоздкая компиляция ) Зато с кучей проверок.
16. cool.vlad4 2 11.01.11 14:52 Сейчас в теме
+ Powershell скрипт обращения к методу GetHostEntry() - System.Net.DNS (помнится мне надо было разрешать адреса)

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? надо попробовать...)
17. cool.vlad4 2 11.01.11 14:58 Сейчас в теме
off: ни у кого не нашел карту google или yandex с кэшированием для работы оффлайн - никто не делал?
21. cool.vlad4 2 13.01.11 11:14 Сейчас в теме
+ 20 либо через полеhtmlдокумента, как-то через библиотечки javascript вызывать/выполнять c# код. а из полеhtml получать результат js
ЗЫ :D смешались в кучу кони люди
23. Душелов 4013 14.01.11 00:13 Сейчас в теме
(21) Да это все несложно реализовать. Но компонента все равно понадобится. Скрипты все таки универсальнее будут.
25. yellow444 10.01.12 13:23 Сейчас в теме
вот раздолье вирусаписцам то
Оставьте свое сообщение