1С Linux. Что не хватает по сравнению с Windows?

1. Serginio 938 24.08.16 10:37 Сейчас в теме
В свое время я разработал Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент

1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp

Использование классов .Net в 1С для новичков

.Net в 1С. Асинхронные HTTP запросы, отправка Post нескольких файлов multipart/form-data, сжатие трафика с использованием gzip, deflate, удобный парсинг сайтов и т.д.

.Net в 1С. На примере использования HTTPClient,AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция

Использование ТСД на WM 6 как беспроводной сканер с получением данных из 1С

Но меня упрекали в том что
1. Код не кроссплатформенный.
2. Приходится использовать Руслиш (смесь латиницы с кириллицей)

С выходом .Net Core и возможностью вызова из натива сделал ВК для использования классов .Net из любой оси поддерживаемой .Net Core. Список можно посмотреть и скачать Здесь

Воодушевившись я сделал

Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux

Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II

Асинхронное программирование в 1С через использование классов .Net из Native ВК

1С, Linux, Excel, Word, OpenXML, Net Core

В общем то сделано много. Это и поддержка методов с переменным количеством параметров, методов расширений, вывод типов дженерик методов, и более простое использование методов дженерик методов, поддержка Linq итд.

А так же добавление русскоязычных синонимов (в прочем как и английских вариантов русских названий методов и свойств)
Так как в Native API нельзя возвращать и передавать объекты то приходится передавать и возвращать строку. А оборачивать объект через функцию ъ (аналог $ в JQuery) и передавать строку используя метод ПолучитьСтроку().

По поводу того, что нужно знать C#, то напомню, что для работы с Excel сначала использовались примеры на VBA, а затем с появлением кода на 1С уже вступил в силу закон Copy-Paste и народ начал использовать уже код на 1С. Кстати я постарался максимально приблизить использования кода на C# и достаточно его легко адаптировать под 1С.

Ну в общем то вопрос, что не хватает на Linux для полного счастья. С помощью .Net Core можно сделать замену COM. Он развивается и пока конечно далек от взрослого, но на нем уже можно много сделать.

Основная задача это привлечь внимание 1С модифицировать Native API для возможности возвращения объектов из ВК и передачи объектов в параметрах.
Или интегрировать в 1С по аналогии с ComОбъект (NetОбъект, JavaОбъект, NetТип, JavaТип )

Или если это никому не нужно, то бросить всё и заняться вышиванием крестиком?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Serginio 938 24.08.16 10:42 Сейчас в теме
Для лучшего понимания приведу основные методы

//1С при передаче по ссылке свойства ВК Список.Current
// при выходе из метода присваивает  Список.Current значение переданное изначально
// Поэтому помечаем входной параметр как Знач
//Или же делать так, если методы изменить нельзя 
// То нужно присвоить значение переменной и вызвать метод передав в параметрах эту переменную
//Стр=Список.Current; 
//Зазача=ъ(Стр);
Функция Ъ(знач Ссылка)
	
	// Создаем объект по ссылке полученной из методов .Net классов
	//Физически это строка ёЁ<Ьъ>№_%)Э?&2 содержащее 12 символов для отделения их от других строк
	//и индекс в спике исполуемых объектов на стороне .Net
	
	рез = Новый("AddIn.NetObjectToNative.NetObjectToNative");
	// И установим ссылку
	рез.УстановитьСсылку(Ссылка);    
	возврат  рез
КонецФункции // СоздатьОбъектПоСсылке()


// Сокращенное использование метода ВК Новый
// Создает объект по строковому представлению типа или по ссылке на тип
Функция ъНовый(знач стр)
	возврат ъ(Врап.Новый(стр));
КонецФункции


// Сокращенное использование метода ВК ПолучитьТип
// Создает получает тип по строковому представлению типа 
Функция ъТип(знач стр,ИмяФайла="",ГлобальнаяСборка=ложь)
	возврат ъ(Врап.Тип(стр,ИмяФайла,ГлобальнаяСборка));
КонецФункции
Показать
3. Serginio 938 24.08.16 11:44 Сейчас в теме
То есть на Linux все есть? Ни одного ответа. Или никого нет у кого 1С на Linux?
linuxmaster; +1 Ответить
5. Xershi 1475 24.08.16 12:54 Сейчас в теме
(3) Serginio, проще на винде ломаной))
6. Serginio 938 24.08.16 13:04 Сейчас в теме
(5) Крестиком? Неуж то нет Линуксоидов, или их нет потому, что нет инструментов?
7. Xershi 1475 24.08.16 13:06 Сейчас в теме
(6) Serginio, на форуме тем с линуксом я наверно и не встречал. Но может просто не пишут.
8. Serginio 938 24.08.16 14:15 Сейчас в теме
18. alex_sh2008 4 29.08.16 11:02 Сейчас в теме
(3) Serginio, Все что нужно в linux есть, вопросы возникают с менталитетом пользователей и привычками, от которых бывает избавится практически не возможно.
19. Serginio 938 29.08.16 11:31 Сейчас в теме
(18) Ну на самом то деле нет COM, а писать ВК не так просто как кажется.
20. alex_sh2008 4 29.08.16 14:32 Сейчас в теме
(19) Serginio, При должной тренировке Native компоненты не сложнее писать, чем используя COM, а вот преимуществ больше как по меж платформенному переносу так и стабильности работы.
21. Serginio 938 29.08.16 14:39 Сейчас в теме
(20) Поверь мне сложнее. Но я предлагаю использовать либо существующие библиотек .Net Core либо написать свои классы. Поверь это значительно проще.
23. alex_sh2008 4 29.08.16 14:44 Сейчас в теме
(21) Serginio, А причем тут COM и .Net, это вообще то разные вещи.
4. Serginio 938 24.08.16 12:35 Сейчас в теме
Значит пора вышивать крестиком?
9. Serginio 938 24.08.16 16:41 Сейчас в теме
Просили про отправку почты. Заодно исправил ошибку

 smtp = "smtp.yandex.ru";
    login = "XXXX@yandex.ru";
    password = "YYYYYY";
    Кому = "YYYYYYY@XXXXXXXX.ru";
    
    
    СборкаMailKit=ъ(Врап.Сборка("MailKit.dll"));
    СборкаMimeKit=ъ(Врап.Сборка("MimeKit.dll"));
    
    MimeMessage=ъ(СборкаMimeKit.GetType("MimeKit.MimeMessage"));
    MailboxAddress=ъ(СборкаMimeKit.GetType("MimeKit.MailboxAddress"));
    TextPart=ъ(СборкаMimeKit.GetType("MimeKit.TextPart"));
    
    SmtpClient=ъ(СборкаMailKit.GetType("MailKit.Net.Smtp.SmtpClient"));
    
    
    
    message = ъНовый(MimeMessage.ПолучитьСсылку());
    From= ъ(Врап.Новый(MailboxAddress.ПолучитьСсылку(),"Сергей Смирнов", login));
    ъ(message.From).Add( From.ПолучитьСсылку());
    
    ToMail=ъ(Врап.Новый(MailboxAddress.ПолучитьСсылку(),"Сергей Смирнов", Кому));
    ъ(message.To).Add(ToMail.ПолучитьСсылку());
    message.Subject = "Как дела?";
    
    ТелоСообщения=  ъ(Врап.Новый(TextPart.ПолучитьСсылку(),"plain"));
    ТелоСообщения.Text = "Здесь любое сообщение
    | что фантазия подскажет
    | Это тест отправки почты";
    
    message.Body=ТелоСообщения.ПолучитьСсылку();
    client =ъНовый(SmtpClient.ПолучитьСсылку());
    client.Connect(smtp, 465, true);
    
    // Note: since we don't have an OAuth2 token, disable
    // the XOAUTH2 authentication mechanism.
    ъ(client.AuthenticationMechanisms).Remove("XOAUTH2");
    
    // Note: only needed if the SMTP server requires authentication
    client.Authenticate(login, password);
    
    client.Send(message.ПолучитьСсылку());
    client.Disconnect(true);
    Врап.ЗакрытьРесурс(client.ПолучитьСсылку()); 

Показать
10. Serginio 938 25.08.16 11:43 Сейчас в теме
Вот SQL запрос к MS SQL



	СборкаSqlClient=ъ(Врап.Сборка("System.Data.SqlClient.dll"));
	SqlConnection=ъ(СборкаSqlClient.GetType("System.Data.SqlClient.SqlConnection"));
	SqlCommand=ъ(СборкаSqlClient.GetType("System.Data.SqlClient.SqlCommand")); 
	
	connection =ъ(Врап.Новый(SqlConnection.ПолучитьСсылку(),ConnectionString));
	connection.Open();
	
	ТекстЗапроса = "Sel ect Номенклатура.DESCR Наименование  Fr om sc84 Номенклатура where DESCR Like '%'+@Строка+'%'
	|order by Номенклатура.DESCR";
	
	
	command = ъ(Врап.Новый(SqlCommand.ПолучитьСсылку(),ТекстЗапроса,connection.ПолучитьСсылку()));
	
	Parameters=ъ(command.Parameters);
	Parameters.AddWithValue("@Строка", "ДСП");
	dr = ъ(command.ExecuteReader());
	
	Пока dr.Read() Цикл
		Сообщить(dr.get_Item("Наименование"));
	КонецЦикла;

Показать
11. Serginio 938 25.08.16 11:52 Сейчас в теме
По поводу Торгового оборудования, то для Декстопа обязательно идет API на C#. Даже на WinCE было API, правда там был Interop над С++ dll.
Что можно делать и сейчас. Просто сделать Interop и использовать .Net сборку проще чем писать ВК
12. Serginio 938 26.08.16 11:26 Сейчас в теме
Подыму. Неужто всего хватает?
13. bubnov-pi 26.08.16 15:00 Сейчас в теме
(12) Serginio, мне, как скорее администратору, сильно не хватает механизма управления кластером серверов "с человеческим лицом". Разработкой как таковой не занимаюсь, поэтому оценить полезность всего вышеперечисленного скорее всего не смогу.
Что касается управления кластером (сервером), которого действительно не хватает в Linux - я в своё время рисовал вэб-админку на php, которая дёргала командную строку по мотивам материалов с http://oparin.info/1c/administrirovanie-serverov-1s-pod-linux-ubuntu
14. Serginio 938 29.08.16 10:07 Сейчас в теме
(13) Ок. Постараюсь разобраться.
15. herfis 498 29.08.16 10:35 Сейчас в теме
Если говорить о серверной части, то сплошь и рядом проще, легче и дешевле в сопровождении поставить виндовый сервер, даже имея линуксовую БД.
Тупо потому, что виндовый работает СТАБИЛЬНЕЕ в суровом продакшене. Долго мучались с линуксовым, но количество инцидентов задолбало. Постоянно нужно следить за этим тамагочи, который то память начинает жрать, то деградацию производительности дает непонятной природы, то еще какие фортели и коленца выкидывает. После каждого обновления вырабатывать новую стратегию сопровождения, чтобы эта хрень хотя бы видимость стабильности в работе давала. Использовать костыли для интеграций. В итоге плюнули, перешли на виндовый сервер (оставив postgresql на linux) и теперь горя не знаем. Один виндовый сервер в инфраструктуре, который особо лицензий не просит - чепуха на фоне количества снимаемой головной боли. Соответственно, попутно снимаются все проблемы со всевозможными интеграциями. Поэтому, хотя количество проделанной тобой работы и впечетляет, но особой пользы я от этого не вижу, уж извини.
Главная проблема - клиентов на линукс перевести. А тут главный тормоз - работа с торговым оборудованием. Плохо дело с готовыми и надежными дровами под Native API под всякое разное. А высокоуровневая байда как-то и не держит особо. Технически, во всяком случае.
16. Serginio 938 29.08.16 10:47 Сейчас в теме
(15) Кстати а клиентов каких используете. Просто для не Windows сборки идут только 64 разрядные
17. Serginio 938 29.08.16 10:47 Сейчас в теме
(15) Большое спасибо за отклик!
22. Serginio 938 29.08.16 14:41 Сейчас в теме
Вот я привел примеры работы с парсером HTML, Excel, Word, доступ к базам данных и тп. А вот писать обертки над ними на ВК муторное занятие.
24. alex_sh2008 4 29.08.16 14:47 Сейчас в теме
(22) Serginio, В линукс нет ни Word ни Excel, за исключение пожалуй IOS, но и там свои компоненты интеграции есть, а что касается муторности, то на помощь приходит ООП, которая устраняет кучу сложностей в написании компонентов
25. Serginio 938 29.08.16 17:35 Сейчас в теме
(24) Ты шапку читал. Через ВК можно использовать любые сборки .Net Core и использовать их аналогично как в COM.

Вот пример замены COM 1С, Linux, Excel, Word, OpenXML, ADO, Net Core
26. alex_sh2008 4 29.08.16 20:30 Сейчас в теме
(25) Serginio, Ну написал ты компоненты на .Net, с таким же успехом можно написать на C, С++, Java, но это не замена COM, а обычный Native ВК. COМ серьезная архитектура и включает в себя достаточно большие функциональные возможности, от обычных экспортных функций, до серьезных визуальных решений интегрирующихся в приложение, пользователь даже не определит с чем он работает с самой платформой или это работает внешний компонент. Писать альтернативу COM в линукс не имеет ни какого смысла
27. Serginio 938 30.08.16 10:34 Сейчас в теме
(26) Я не пишу. Они уже есть. COM это прежде всего Idispatch. То о чем ты говоришь это ActiveX. Контейнеры.
Это не обычный ВК. Это ВК позволяющий использовать любую сборку .Net. Котрых готовых огромное количество. Как Word Excel ADO
28. alex_sh2008 4 30.08.16 10:46 Сейчас в теме
(27) Serginio, COM это и есть часть функциональности OLE, ActiveX. Если уже писать библиотеку, то писать полноценный Native модуль классов .Net на базе которого можно быстро и без проблем генерировать любой сложности компоненты без применения технологий COM (ActiveX, OLE), тогда такой модуль можно будет портировать на линукс с использованием библиотеки Mono, или open source Microsoft Net. Core. Писать же прослойку между ВК и другими компонентами на мой взгляд пустое занятие и не принесет результатов, во первых в Windows гораздо эффективнее применять именно COM технологию, а в линукс, IOS, наиболее распространен C++ и С языки для написания системных приложение и компонентов.
29. Serginio 938 30.08.16 12:37 Сейчас в теме
(28) Использование сборок .Net даже проще чем COM. Нет ограничений на поддержку объектов Idispatch, нет проблем с перегрузкой методов. Мало того у меня есть разработка Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент . Там объекты .Net оборачиваются через COM обертку через Шкуадусе.

Кстати из недавнего http://forum.infostart.ru/forum26/topic157233/message1611063/#message1611063
Там COM обертка над .Net классами ничем не отличается от моей.

А что такое генерить? Зачем генерить если можно использовать через обертку.
Другое дело, что в отличие от большой .Net нельзя использовать динамическую компиляцию.
1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp

.Net в 1С. На примере использования HTTPClient,AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция

.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
30. Serginio 938 30.08.16 15:10 Сейчас в теме
Вот мотри специально не поленился

Вот COM вариант


CryptoProvider    = Новый COMОбъект("System.Security.Cryptography.SHA1Managed");
StringBuilder    = Новый COMОбъект("System.Text.StringBuilder");

FileStream = Новый COMОбъект("ADODB.Stream");
FileStream.Open();
FileStream.Type = 1;
FileStream.LoadFromFile(файл);

мРез= CryptoProvider.ComputeHash_2(FileStream.Read());

КолЭлементовМассива = мРез.GetLength();
Для Ит = 0 ПО КолЭлементовМассива - 1 Цикл 
        StringBuilder.AppendFormat("{0:x02}", мРез.GetValue(Ит));
КонецЦикла;

Рез    = StringBuilder.ToString();
Показать


А вот кроссплатформенный вариант

    SHA1= ъТип("System.Security.Cryptography.SHA1","System.Security.Cryptography.Algorithms");
	CryptoProvider = ъ(SHA1.Create());
	File=ъТип("System.IO.File","System.IO.FileSystem");
	FS = ъ(File.OpenRead(файл));
	
	Врап.ДвоичныеДанныеКакОбъект=истина; // Двоичные данные нужны для передачи обратно в .Net
	
	мРез = ъ(CryptoProvider.ComputeHash(FS.ПолучитьСсылку()));
	BitConverter=ъТип("System.BitConverter","System.Runtime.Extensions");
	рез= СтрЗаменить(BitConverter.ToString(мРез.ПолучитьСсылку()),"-","");
	Сообщить(рез);
	Врап.ЗакрытьРесурс(FS.ПолучитьСсылку());
Показать



Код отличается незначительно. Для стандартных сборок в будущем можно опускать местонахождение.
31. alex_sh2008 4 30.08.16 19:00 Сейчас в теме
(30) Serginio, COM проще и не нужно ничего изобретать, не вижу смысла в таком решении для Windows
32. Serginio 938 30.08.16 19:44 Сейчас в теме
(31) Еще раз моя разработка кроссплатформенная. Работает на Линукс.

Второе для Windows позволяет использовать любые библиотеки .Net. 1С совец может их использовать как COM сервер.
Я начал использовать данную разработку, когда мне нужно было подключиться к Вэб сервису не поддерживаемому 1С (Header WS протоколы). Там были десятки методов и сотни классов. Для использования через СОМ делать обертку вручную было муторно. Используя эту разработку обертка создается автоматически, а использования даже легче чем 1С кого доступа к Вэб сервисам.

Кроме того динамическая поддержка событий. Значительно упрощает работу.
33. PerlAmutor 129 31.08.16 18:13 Сейчас в теме
Я бы с удовольствием использовал в коде классы и функции библиотеки Qt 5.x (gcc/mingw, никакого MSVS), в том числе для создания произвольных форм (QtQuick).
34. Serginio 938 31.08.16 21:11 Сейчас в теме
(33) Суть моей разработки в том, что через Reflection я получаю доступ к методам и свойствам класса и вызываю их на объекте либо статические методы.
Что касается С++ то там с все очень грустно с этим. Опять же моя разработка кроссплатформенная
35. herfis 498 01.09.16 09:17 Сейчас в теме
Я начал использовать данную разработку, когда мне нужно было подключиться к Вэб сервису не поддерживаемому 1С

Кстати, великолепный практический пример полезности твоей разработки. Любое другое решение что на windows, что на linux будет сложнее и "деревяннее".
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)