Pull to refresh

Comments 52

Мои глаза кровоточат.

И я даже не про то, что тут адская помесь ру/eng в коде, и даже не про то, что методы имеют ошибки в наименовании (eg. ТестАсинхрнногоВыполнителяНажатие, ПолучитьСписоуURL), а в целом про статью.
И срсредоточится на разработку языка, наконец добавив замыкания, Linq, указание типа для intellisense


Несерьёзный подход к написанию статьи (да и кода тоже).
Полностью с вами соглашусь.
Хотелось бы высказать своё мнение по-поводу этого «замечательного языка», а может быть и просто замечательного языка — если честно я не незнаю, но всё-таки тревожит меня здесь содержание русского языка, т.к зачем он(мои глаза просто читают его как китайский язык — т.к просто не привычно читать и тем более писать программы на своём оттечественном языке), думаю что Инностранные программисты также воспринимают языки программирования, которые содержат оттечественный язык.
Всё же лучше писать программы на каком-нибудь другом языке, ежели на своём оттечественном языке.
Сидят значит где-нибудь в Microsoft, кровоточат от английского, и только мечтают перейти на 1C.
Впрочем против 1C ничего не имею)
Очень helpful статья, и ъЯзык замечательный. Thanks вам, за то что продвигаете его в массы КонецСпасибо
Эта статья для 1С ников. Там пишут все по русски. И я 1С овец. Мне проще давать имена переменным и методам осмыленные русские. А не искать аналоги в переводчиках. Кроме того с добавлением синонимов можно использовать любые классы .Net на русском.
искать аналоги в переводчиках

При знании языка это делать не приходится

Еще раз я 1С ник. Мне не зачем англицкий.
Таблицу умножения предлагаю тоже забыть. Компьютер умножать умеет сам.
Понимаешь, я пишу основной код на 1С. Там все по русски. И этот код предназначен для 1С. Мне писать на русском и английском нет проблем. И я выбираю, то что мне удобно. Но вот мне интересно, что всех так коробит от латиницы? Вы русский забыли? А в школе я учил немецкий, в институте английский. Но удобнее мне русский.
А, что по существу? И кстати здесь код на 1С в основном.
А по существу: Стр=ъ(Клиент.GetStringAsync(uriSources)).Result; в данной строки какая-то каша из кириллицы и латиницы, а зачем?
По существу это код 1С.

ъ это из других статей

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

А почему нельзя использовать полностью латиницу?
Потому, что нужно писать все на кириллице. Для этого создана возможность добавлять синонимы для членов класса
По существу это код 1С. А там принято писать на кириллице

ъ это из других статей

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



В статье я как раз упоминал про синонимы.
Так добавив Синонми
Врап.ДобавитьСиноним(HTTPClient.ПолучитьСсылку(),"ПолучитьСтроку","GetStringAsync");
Врап.ДобавитьСиноним(Task.ПолучитьСсылку(),"Результат","Result");



Я могу использовать все на русском

Стр=ъ(Клиент.ПолучитьСтроку(адрес)).Результат;
Я программирую на разных языках. Чему подтверждение мои статьи. Но основной мой язык программирования 1С.
await вобще то и в C++ полного аналога нет.
«АсинхронныйВыполнитель», ору, простите
И что должно приводить тебя в экстаз? AsyncRuner?
Еще раз вы с гор спустились? Кириллицу ни разу не видели? Зачем ввели возможность использовать Юникод?
Кирилицу видел, код программы видел, код на кирилице не видел) Это как дом из спичек и желудей. По отдельности это обычные вещи, но вместе вывзывают когнитивный диссонанс
Вы кроме кириллицы ничего не видите? Это как красная тряпка для быка?
На 1С уже лет 20 как пишут. И у всех кто программирует на 1С вызывает только восторги. У них как раз на латиницу отторжение.
Хотя по мне так смешение языков это нормально. Даже на МКС разговаривают на РусЛише
UFO landed and left these words here
Даже если для 1С норма писать вот так — это все равно выглядит ужасно, что бы автор не говорил
Еще раз можно добавлять синонимы. Вы хоть почитайте. При чем в самом начале статьи.

Стр=ъ(Клиент.GetStringAsync(uriSources)).Result;


И напомню про синонимы из предыдущей статьи/ Так добавив синоним

Врап.ДобавитьСиноним(HTTPClient.ПолучитьСсылку(),"ПолучитьСтроку","GetStringAsync");
Врап.ДобавитьСиноним(Task.ПолучитьСсылку(),"Результат","Result");


Я могу использовать все на русском

Стр=ъ(Клиент.ПолучитьСтроку(адрес)).Результат;


Если кого то раздражает смешение языков то может писать чисто на русском или английском.
Меня это не раздражает и я выбираю тот который мне нравится.
Например в 1С для
Get синоним ОтправитьДляОбработки
Я выбираю первый вариант, а все остальное мне удобнее писать на русском.
Вы кроме кириллицы больше ничего не видите?
Мы видим DSL, который по недоразумению стали считать языком программирования обещго назначения и строгать на нем всякое вот подобное
Количество нетерпимости зашкаливает, а казалось бы, умные люди собрались на специализированном сайте…
Каждый инструмент создан для своих задач, и раз люди пользуются 1С, им это нравится, значит инструмент нашёл свою нишу и своих пользователей.
Спасибо. Самый смех, что большинству кто здесь отписался не интересны не 1С, не возможность использования кроссплатформенного использования .Net классов из натива. Но все таки, данная разработка привлекла их внимание. И это тоже неплохо.
UFO landed and left these words here
А я и мне подобные имеем право писать на Руслише. Суть то не в этом. Ни одного комментария по сути статьи. А именно кроссплатформенного использования классов .Net в нативе. Суть в том, что возможности 1С можно расширить за счет классов .Net и синтаксис использования максимально приблизить к синтаксису C#. Вот об этом ни слова.
UFO landed and left these words here
Возможно. Просто когда я писал про использование .Net классов в 1С через Ireflect все кричали не кроссплатформенно и все на латинице.
Ввел кроссплатформенность и ведение синонимов. Можно писать все на русском, максимально довел синтаксис до C#. И молчание.
1С это не язык программирования, это среда программирования бизнесс-алгогритмов.
Я тоже зарабатываю на жизнь автоматизируя бизнесс-процессы, используя 1С.
Пишу код только на русском, т.к. этот код имеет не только алгоритмическую, но и смысловую нагрузку.
Читая код, можно быстро (без толмача) понять, чего хотел добиться программист и какие результаты работы обработки или документа должны получиться.

Это специфическая среда разработки и создана она российскими разработчиками.

Пы.Сы. При создании 1С предполагалось, что бухгалтер сам сможет вносить изменения в код обработок и документов. Из-за этого было принято решение команды и процедуры, описывающие внутренние механизмы взаимодействия объектов конфигурации, писать кириллицей.
У бухгалтеров как-то не сложилось, а программисты 1С так и пишут, используя кириллическое написание команд.
Ну насчет бухгалтеров это скорее в 5 и 6. Помню одну которая делала шаблоны для печати документов. А вот начиная с сырой 7.0 уже требовало навыков программирования.
Скажу больше. До сих пор нерадивые директора малых и средних предприятий (некоторые из них, были моими клиентами) говорят бухгалтеру: «Я же купил вам бухгалтерию предприятия? Я же заплатил деньги? Зачем ещё звать программиста, ведь там всё должно быть?! А если этого нет, делайте сами!» :)
В общем жесть жестяная :)
Жалко нет смайликов. Улыбнуло.
Статья про 1С на хабре приравнивается к хабрасуициду.
Впрочем, вполне обоснованно.
А почему обоснованно? Я не считаю себя камикадзе. Привлек внимание кому это интересно. Кто то впервый раз увидел кириллицу в коде, и пришел в шок от этого. Это нормально.
Плохо, когда статья не вызывает никаких эмоций.
Ради всех цифровых богов, не подумайте, что хотел обидеть или задеть. Попробую объяснить свою, возможно, сугубо субъективную точку зрения.
Начнем с предпосылок, с чего все начинается.
Начинается все с человека, искренне увлеченного 1С. Собственно, это только хорошо, и, даже более того, вызывает уважение. Увлеченность вообще штука редкая и склонная вызывать уважение (причем не только среди 1С-ников, но и в любой другой сфере в принципе). Вот этот самый человек пишет статью на хабр. Увлеченно пишет, в восторженных тонах, ведь он нашел очень интересный материал (в вашем случае прямо честно скажу, материал интересный, да и подход мне лично понравился). Естественно, человек ожидает некоторой отдачи, причем положительного толка, на то, что он написал. И вот тут, как правило, закопана собака. Эта собака закопана в той части, которая Хабрахабр.
Кто здесь собирается и комментирует? Правильно, технические специалисты совершенно различного толка, но, как правило, с некоторым опытом за спиной. Взгляните на вашу статью глазами «не 1С-ника» (смею уверить, таких тут подавляющее большинство).
Вы показываете некоторую «прорывную фичу», которая для любого разработчика (не 1С) кажется нормой и вообще «ничем удивительным». При этом выглядит решение, мягко говоря, «странно».
Коммент «Очень helpful статья, и ъЯзык замечательный. Thanks вам, за то что продвигаете его в массы КонецСпасибо» — он, конечно, может показаться излишне язвительным, но, суть в том, что он «по теме» (при этом выдержано идеально в стилистике и корректно ровно в той мере, каковая необходима для сохранения смысла шутки-с-долей-правды, респект автору).
К сожалению, человеку свойственно рефлексировать. И вы, как и все прошлые авторы «в тематике», не избежали этой участи. Я вас не виню, это действительно очень сложно — не отреагировать на подкол, а рассмотреть за ним вполне конструктивную критику. А она есть, и она действительно указывает на существенный недостаток. Вы же «срефлексировали». Вот это: «Понимаешь, я пишу основной код на 1С. Там все по русски. И этот код предназначен для 1С...» — больше похоже на детскую обиду и что-то вроде «а ты ваще вали отсюда, я тут пишу».
Вот тут — самый опасный капкан.
Если вы чувствуете в себе силы «отшутиться», подколоть в ответ, либо разумно по полочкам разложить «конструктивную часть вопроса» и проигнорировать все «неконструктивные выпады», тогда да — вопросов нет, вы специалист, который, в окружении неразумных детей разъясняет суть вопроса. Если вы хоть раз ответили обидой или «неконструктивом» со своей стороны, вся ваша идея с публикацией неизбежно превращается в балаган в комментариях и корм для троллей, когда сурово-адекватные пользователи минусуют вас за неконструктив, а «кормящиеся» участники продолжают вас троллить.
Собственно, вот так и получается хабрасуицид. Что с этим делать — решать вам. Вы можете больше не писать на эту тему, либо подготовиться к реакции многоуважаемой публики. Можете попробовать написать на профильные ресурсы по 1С, но, боюсь, там это будет неинтересно (специфика специализации на 1С).
Если хотите конструктивной и выдержанной критики и полемики — милости прошу, можно пообсуждать конкретно вашу статью. Попробуем потренироваться в сдержанности, мне это тоже не повредит)
Спасибо. Я уже понял здешние нравы. Я просто новичок. на данном форуме.
Я пишу на разные площадки. Суть то в том, что с помощью данной разработки можно расширить возможности 1С, при этом приблизить синтаксис вызова методов и свойств .Net классов из нативного 1С, до синтаксиса C#. Я давно уже пишу обертки над .Net классами.
Вот все разработки

Смысл использовать существующие .Net библиотеки в 1С, так и адаптация кода под 1С.
И добавлю что на ресурсах 1С согласны пользоваться этой разработкой, если она будет интегрирована 1С.
Пока моя задача просто показать возможности и довести по максимуму удобство использования. Что я и показал в статьях.
Нравы, как раз, нормальные. Даже образцовые, я бы сказал. Хоть и не без перегибов. Вон, и я минусов нахватал).
Просто в вашей же статье немного спорная подача. Взять хотя бы заголовок: «Асинхронное программирование в 1С через .Net Native ВК».
Дело в том, что непосредственно сама механика RPC в кроссплатформе в .Net Core к 1С отношение имеет постольку-поскольку. Ну, т.е., практически никакого. Да и представление об «асинхронном программировании» может варьироваться. Вы же сами, несмотря на громкий заголовок, пишете «Это конечно не совсем асинхронное программирование». Признаться, из заголовка можно было ожидать большего, но, чуда не случилось.
Впрочем, пора, наверное, завязывать с речами «адвоката Хабра». Чисто по сути, язык 1С — это DSL, возможно, неплохой, но при этом достаточно ограниченный, замкнутый, обреченный на отставание и завязанный на своей вполне себе проприетарной экосистеме, причем от единственного вендора, практически не встречаемого за пределами СНГ (если надобно, могу привести обоснования по каждому пункту из перечня).
По статье конкретно из критики:
лист=ъНовый(«System.Collections.Generic.List`1[System.Threading.Tasks.Task]»);
Вот это действительно страшно выглядит. Тут остается только искренне сочувствовать тем, кто вынужден это писать. И, таки да, по моему мнению кириллица в программировании — зло. Ну хотя бы из-за таких вот языковых конструкций. Вдумайтесь. Давайте на примере попробуем:
Sheet = xNew(«System.Collections.Generic.List`1[System.Threading.Tasks.Task]») — ну реально же лучше. Даже не потому, что смотрится более «нативно». Просто есть такая штука — контекст. В данном случае я говорю о мыслительном контексте. И вот его «переключение» — штука достаточно накладная. Да, в данном случае его не избежать при любом раскладе. Мы имеем строку на C#, обернутую в строку 1С. Т.е. нам надо с 1С-контекста переключиться на контекст C#, что уже неприятно. Вы предлагаете в процессе переключиться еще и с русского языка на английский. Вот чисто по мне — это недостаток.
Ну а по поводу «если она будет интегрирована 1С» из вашего следующего коммента. Не уверен, что это нужно самой 1С. Даже ваша статья — это попытка «побега» из текущих реалий 1С. Много просто нет, а хочется. В случае «бесшовной интеграции» с .Net, имхо, миграция конфигураций с 1С на .Net — вопрос исключительно временный. Не уверен, что 1С в этом хоть сколько-нибудь заинтересовано. Впрочем, тут могу ошибаться. Некоторое достаточно продолжительное уже время с 1С не пересекался, потому за «курсом компании» не слежу.
Вот ниже есть метод

     Клиент = ъ(Врап.Новый(HttpClient.ПолучитьСсылку(),handler.ПолучитьСсылку()));
	
	лист=ъНовый("System.Collections.Generic.List`1[System.Threading.Tasks.Task]");
	сч=0;
	Для каждого стр из ПолучитьСписокURL() Цикл
          // Получаем задачу
		Задача=ъ(Клиент.GetStringAsync(стр));
        // Получаем данные привязанные к данной задаче
		объект=ПолучитьДанныеДляЗадачи(стр,сч);
	//public static void ВыполнитьЗадачу(System.Threading.Tasks.Task Задача, String ИмяМетода, Object ДанныеДляЗадача)
              
		Врап.ВыполнитьЗадачу(Задача.ПолучитьСсылку(),"ПолученаСтраница",объект.ПолучитьСсылку());
		сч=сч+1;
		
	КонецЦикла;



В данном случае создается объект с задачей, после выполнения задачи вызвается метод в 1С ВнешнееСобытие, котрый по переданным данным вызывает метод связанный с эти событием.

Процедура   ПолученаСтраница(знач данные)
	
	Задача=ъ(данные.Задача);
	ДанныеДляЗадача=ъ(данные.ДанныеДляЗадача);
	Сообщить("Адрес="+ДанныеДляЗадача.Адрес);
	Сообщить("Номер="+ДанныеДляЗадача.Номер);

       // При возникновении ошибки при выполнении задачи
      // IsFaulted будет истина, а в Exception будет ошибка
	Если (Задача.IsFaulted) Тогда  // Ошибка выполнения
		    ошибка=Задача.Exception;
		    Сообщить("Ошибка "+Врап.ВСтроку(ошибка));
		//  Если сделать как ниже 1С хочет присвоить Задача.Exception новое значение
		//  Даже если оно не было изменено
                // Так как считает, что параметр передан по ссылке
		// Сообщить("Ошибка "+Врап.ВСтроку(Задача.Exception));
	    	   возврат;
	КонецЕсли;
		
	результат=Задача.Result;
	Сообщить(СтрДлина(результат));
КонецПроцедуры	

Процедура ВнешнееСобытие(Источник, Событие, Данные)
	// Вставить содержимое обработчика.
	
	Сообщить("Источник="+Источник);
	Сообщить("Событие="+Событие);
	Сообщить("Данные="+Данные);
	
	Если Источник="АсинхронныйВыполнитель" Тогда
		Данные=ъ(Данные);
		Выполнить(Событие+"(Данные)");
	КонецЕсли; 
КонецПроцедуры


Что касается руслиша, то я пишу на нем лет 20 и он мне нравится. Писать приходится много и давать осмысленные имена на русском проще. Кроме того в свойства документов справочников они русские. 1С как раз неудобна латиница. Поэтому я ввел синонимы. Теперь можно писать только на одном языке.
По поводу интеграции, то в 1С есть ComОбъект, который не отличается от предлженного мной NetОбъект или JavaОбъект.
1С это не только DSL. Это совмещение клиентского и серверного кода, удобные генераторы отчетов (Система компоновки данных СКД)
Готовые конфигурации, которые можно расширять. 1С заинтересована выходить за пределы СНГ. Чем больше функционал, тем проще решать проблемы.
>> 1С это не только DSL.
Все же DSL. Все же, язык не поворачивается назвать 1С языком общего назначения. Ну вот хоть режьте.
Более того, ваша статья — прямое подтверждение моих слов. Вы пишете обертку для использования в коде 1С конструкций C#, высокоуровневого языка общего назначения. Зачем вы это делаете? Очевидно, компенсируете недостающие в 1С механизмы.
Насчет поддержки со стороны компании 1С. Ну, в бытность мою штатным программистом 1С 7.7 такие вещи как «1С++» и «прямые запросы» были не только «глотком воздуха», но и шикарнейшим подспорьем. Насколько я в курсе, каких-то попыток интегрировать (хотя бы на уровне идей) или поддержать со стороны вендора замечено не было. Оно и логично. Дайте возможность «бесшовной интеграции» 1С с Net или Java, и возникновение мысли «А зачем в этой конструкции 1С?» станет исключительно вопросом времени. В конечном итоге, фирма 1С заинтересована не только и не столько в количестве возможностей для разработчика, сколько в удержании разработчика «внутри себя», в пределах строго своего технологического стека (очень похоже на ранний Microsoft). В конечном итоге, 1С раскачивается что-то сделать тогда, когда разработчики уже буквально бьются головой о стену, завывая «ну дайте уже фичу, ну интегрируйте продукт». На выходе мы получаем, как правило, узкоприменимое местечковое решение от самой 1С без интеграции с чем-то уже имеющимся. Возьмите хоть пресловутый контроль версий и «выгружаемую конфигурацию».
>>> 1С заинтересована выходить за пределы СНГ.
Ну, это все хотят. Но именно с этим у 1С проблемы. Без глобальной смены политики — не получится. Короче, не верю.
Ну а по поводу «руслиша»… Ну, может оно и моя личная неприязнь. Но даже вот по клавиатуре посмотрите. Есть такие символы, как <>…
Если Переменная1(тут переключение раскладки) > (переключение раскладки) Переменная2 Тогда…
Ну неудобно…
Я пишу на руслише 20 лет. У меня это не вызывает проблем. Кроме того 1С сама дает названия
ComОбъект, ЧтениеXML, ОбъектXDTO итд. Что касается 7 ки, то С++ это более продвинутый инструмент 8 ки. Он конкурент. Поэтому и нет смысла его внедрять. Что касается моей разраьотки, то она направлена прежде всего на кросссплатформенность. На Windows есть COM через который можно все интегрировать. С Линуксом значительно сложнее. В любом случае я сделал всё, что мог. Найду другое приложение своих сил. Просто в данную разработку я вложил много времени. Как на получение новых знаний, так и на саму разработку. И аналог через IReflect позволяет решать кучу задач. Начиная от неподдерживаемых 1С вэб сервисов, Regex закачинвая месенджерами например на основе SignalR парсерами типа AngleSharp итд.
Мою разработку можно использовать из любого языка на нативе если нужно использовать какуюлибо сборку на .Net.
Не то, чтобы ComОбъект и прочее было проблемой. Но неудобство оно вызывает, тут вы, наверное, со мной согласитесь.
>> В любом случае я сделал всё, что мог. Найду другое приложение своих сил.
А отчаиваетесь вы зря. Инструмент вы создали, при этом достаточно неплохой, и он, вероятно, будет востребован. Просто с аудиторией промахнулись.

Вот лично мне интероп с 1С интересен в обратную сторону. Когда, условно, COM-сервером выступает сама 1С-ка. Т.е. интерфейс, который позволяет, скажем, из .Net-кода или из Java замутить конструкцию вида:
List GoodsListFrom1S = Com1SInterface.getInstanceByQuery(«Справочник.Номенклатура»)
.getByParent(«001245»);
for(Inst1SItem item: GoodsListFrom1S) {
System.out.println(item.Name());
}
В 1С есть
http://infostart.ru/public/192374/
http://www.sql.ru/forum/1078706/integraciya-c-i-1s

Можно интегрировать через Linq to ODATA

Можно и напрямую Code First и Linq to EF на примере 1С версии 7.7 и 8.3 часть I

Code First и Linq to EF на примере 1С версии 8.3 часть II

Linq to EF. Практика использования. Часть III
А вот это прямо интересно. Спасибо за наводку, куда копать!
Ну сейчас это возможно через COM. Кстати в статье Быстрое создание Внешних Компонент на C#. Примеры использования Глобального Контекста, IAsyncEvent, IExtWndsSupport, WinForms и WPF
Можно в ВК использовать глобальный Контекст и создавать любые объекты 1С. Но это COM.
Для Native ВК это тоже возможно, но…

ctrl+f Mithgol
хмммм, ему тут место, мне кажется.

Only those users with full accounts are able to leave comments. Log in, please.