|
Динамическая компиляция для использования .Net событий в 1С | ☑ | ||
---|---|---|---|---|
0
Serginio1
12.11.15
✎
15:15
|
Выложил статью .NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
http://catalog.mista.ru/public/417830/ Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия, а так же генерация модулей на C# и 1С для подключения к событиям. Использование DynamicMethod и ILGenerator. Представлены примеры на использовании событий System.IO.FileSystemWatcher (Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.) и SerialPort (обработка сканера штрих кода подключенного к COM порту). Обертка позволяет использовать сборки .Net только на языке 1С. Эта статья является дополнением разработки Использование сборок .NET в 1С 7.x b 8.x находящейся здесь http://catalog.mista.ru/public/238584/ v8: v8: Использование сборок .NET в 1С 7.x и 8.x |
|||
1
aleks_default
12.11.15
✎
15:29
|
За такие вещи всегда уважуха.
|
|||
2
Кирпич
12.11.15
✎
15:37
|
Я конечно понимаю будущее за NET, но как то мне не хочется вместо 5 строчек кода на Delphi городить всю эту лабудень...
Но NET апокалипсис неминуем. С++ и Delphi выкинут на помойку, все будут писать тормоза на .NET, а однополые браки станут нормой. |
|||
3
Serginio1
12.11.15
✎
15:43
|
(1) Спасибо.
(2)А почему тормоза то? Net проигрывает только из-за отсутствия инлайнига лямбд. Так он на уровне того же C++ и 1С. А по сравнению с 1С так реактивный самолет. Да и суть использование сборок Net в 1С без дополнительных DLL обвязок |
|||
4
mistеr
12.11.15
✎
15:50
|
(2) Нифига. Все будут писать на JavaScript или его преемнике. И в 1С тоже.
Запомните этот твит. |
|||
5
Кирпич
12.11.15
✎
15:52
|
(3) да тормознутый он этот NET, как и Java. Слава богу компы стали помощнее последнее время, а было убожество. Ну а так то я не против такой идеи. Все равно эти NET гигабайты лежат уже на компе. Пускай работают. Ну хоть штрих код читают :(
|
|||
6
Мэс33
12.11.15
✎
15:55
|
(5) А что не тормознуто?
|
|||
7
Кирпич
12.11.15
✎
15:55
|
+(5) и вообще лучше бы язык 1с в .NET компилировали. Может меньше бы тормозило.
|
|||
8
Serginio1
12.11.15
✎
15:56
|
(4) Уже и сейчас пишут, но больше используют TypeScript, а JS используется типа ассеблера.
(5) Я делал в свое время тесты на C# и Delphi Net не проигрывал, а даже выигрывал. Сейчас идет модификация Roslyn как я написал в статье Так сейчас на подходе релиз scripting api. А по поводу штрих кода это просто показать понятные всем компоненты. На самом деле полно классов с кучей событий |
|||
9
Garikk
12.11.15
✎
16:06
|
<Но NET апокалипсис неминуем. С++ и Delphi выкинут на помойку>
не выкинут NET и Ява, это вирт.машины, их судьба уже окончательно сложилась у Deplhi конечно незавидная судьба, из-за и так не особо большой популярности. а C/C++ будут жить вечно |
|||
10
Кирпич
12.11.15
✎
16:07
|
(8) ну на тестах он конечно шустрый, а как увидишь какое нибудь приложение на NET, так оно еле шевелится. Хотя наверное от рук зависит. Вот например paint.net летает, а стоит у меня тут astral-отчет - это какое то дикое тормозное некрасивое угробище.
|
|||
11
Serginio1
12.11.15
✎
16:11
|
(10) На самом деле от версии к версии совершенствуется и JIT компилятор и GC сборка мусора. Плюс если раньше большинство библиотек были просто оболочками над нативными функциями, то сейчас это уже самостоятельные единицы
|
|||
12
Кирпич
12.11.15
✎
16:19
|
(11) да компиляторы уже некуда совершенствовать. и так уже у всех одинаково на выходе получается. другое дело, что NET на лету компилит и чем лучше компилит, тем больше тормоза во время компиляции. Ну всё равно NET это круто, хотя мне оно нафиг не нужно. Ну а кому нужно, тем очень повезло.
|
|||
13
Garikk
12.11.15
✎
16:26
|
(12) <уже у всех одинаково на выходе получается.>
Ну не у всех... процессоры тоже совершенствуются, архитектуры меняются. и компиляторы под них помню была история что программа собранная интеловским компилятором работала на AMDшных процессорах быстрее чем собранная AMD-щным |
|||
14
Serginio1
12.11.15
✎
16:30
|
(12) Напрасно. С помощью данной компоненты можно расширять возможности 1С. Например Перекодировка текста из base64
|
|||
15
Serginio1
13.11.15
✎
14:11
|
апну. Все таки пятница. Может кому и пригодится. А вообще 1С совцы могли встроить поддержку .NET. А то COMОбъект есть, могли бы и поддержку использования сборок .Net встроить
|
|||
16
oleg_km
13.11.15
✎
16:51
|
(15) ДА тогда уж и JAVA до кучи
|
|||
17
Serginio1
13.11.15
✎
17:01
|
(16) С явой тяжелее. У неё нет такой фичи как IReflect, а через неё как раз и идет преобразование Idispatch к Ireflect. Но учитывая движение .Net к кроссплатформенности Что-то кроме 1С
можно начать и с .Net. Тем более уже есть рабочий вариант |
|||
18
oleg_km
13.11.15
✎
17:13
|
(17) Ну если есть Invoke то можно было бы просто сделать метод Invoke и передавать первым параметром. Ну это так.
|
|||
19
Serginio1
13.11.15
✎
17:24
|
(19) Не знаю есть ли в JAVA поддержка IDispatch http://javagu.ru/portal/dt?last=false&provider=javaguru&ArticleId=GURU_ARTICLE_81506&SecID=GURU_SECTION_80693#IDAPJOVF
Все таки разные технологии. В Нативе просто дается ссылка на некую переменную содержащая VMT и указывающая на функции заглушки корректирующю this по смещению переменной и перенаправляющая на реальный адрес функции. Еще и сборка мусора. Нужны определенные заглушки уже на уровне среды выполнения JAVA |
|||
20
Serginio1
16.11.15
✎
10:28
|
А вообще сейчас стало модным писать на серверной стороне
считаться язык JavaScript (который стало можно запускать на сервере при помощи рантаймов вроде Node.js или io.js) и несколько его разных фреймворков, например Meteor. На клиенте сейчас модно angularjs и промежуточный TypeScript. Так, что сейчас 1С нужно делать правильный выбор, а то реально может появится убийца 1С. |
|||
21
orefkov
16.11.15
✎
10:36
|
(11)
>> если раньше большинство библиотек были просто оболочками над нативными функциями, >> то сейчас это уже самостоятельные единицы Всё в конечном итоге доходит до какой-либо CreateWindowW или FindFirstFileW. Только на С++ я их сразу вызываю, без сотни посредников. |
|||
22
trdm
16.11.15
✎
10:45
|
Был не очень мощный комп установил какую-то версию Net, комп стал шевелиться ощутимо медленнее.
Net засирает реестр конкретно из-за чего его чтение замедляется. С тех пор любви к этому фраймверку не питаю. Практически все можно сделать без этого фраймверка. И софт будет шевелиться намного шустрее.. |
|||
23
trdm
16.11.15
✎
10:51
|
(14) > Напрасно. С помощью данной компоненты можно расширять возможности 1С. Например Перекодировка текста из base64.
QByteArray text("Qt is great!"); text.toBase64(); // returns "UXQgaXMgZ3JlYXQh" QByteArray text = QByteArray::fromBase64("UXQgaXMgZ3JlYXQh"); text.data(); // returns "Qt is great!" Слепить из Qt-шного модуля COM-сервер раз плюнуть: http://doc.qt.io/qt-4.8/examples-activeqt.html |
|||
24
trdm
16.11.15
✎
10:52
|
+(23) И по ресурсам будет менее затратно чем Net.
|
|||
25
Serginio1
16.11.15
✎
10:55
|
(21) Ну Net это не только Win API. Кстати они развивают WPF и HTML 5
(22) Приведи примеры. Проблема и достоинства .Net только в одном. Это JIT компиляция в ран тайме, ну и отсутствие инлайнинга. Но все течет, все меняется http://habrahabr.ru/company/enterra/blog/252105/ От версии к весрии и GC быстрее и JIT компиляторы более оптимальные (23) А здесь и плевать ненадо. Используй любые сборки без переделывания кода на COM. (24) И на каждую хотелку генерить свою COM библиотеку. А еще с поддержкой событий или внешних событий. В моем варианте тебе нужно знать только библиотеки NET, а обертка к ним одна в том числе и к событиям. |
|||
26
Serginio1
16.11.15
✎
10:57
|
(23) Кстати начал использовать http://catalog.mista.ru/public/238584/ тогда, когда из 1С не смог достучаться до C# сервисов на по WS- протоколам итд. Там была развитая система классов, и описывать всех из через СОМ было муторно. Через обертку IReflect оказалось значительно проще
|
|||
27
trdm
16.11.15
✎
11:03
|
(25) Какие тебе примеры привести, фанатик? Всю свою жизнь софт пишу. Ни разу не пришлось использовать дотнет.
Вот тебе лучший пример того, что этот твой фрайм по сути и не шибко нужен. |
|||
28
Serginio1
16.11.15
✎
11:10
|
(27) Примеры засирания реестра и из-за этого замедления работы всей системы.
Ну дык от фанатика то и слышу. То, что ты предпочитаешь лопату вместо экскаватора это ни о чем не говорит. Сам перешел на Net с со своего любимого Delphi именно по причине бОльшей мощи как языка так и платформы. |
|||
29
orefkov
16.11.15
✎
11:18
|
(25)
>> Ну Net это не только Win API. Кстати они развивают WPF и HTML 5 Вот-вот, твои слова как-раз живая иллюстрация к тому, что я напиасл. Невозможно выполнять код на винде, и не вызывать WinAPI. Все эти WPF, HTML5 и прочие свистелки и перделки, в конце-концов дёргают какую-нибудь CreateWindow, GetDC, DrawText и т.п., только расположены повыше. Нет другого способа обратиться к ОС, кроме вызова WinAPI. Только количество прокладок увеличивается. |
|||
30
Кирпич
16.11.15
✎
11:27
|
У нет есть один большой плюс. В нем куча готовых классов с документацией. Ну C# еще красивый язык. Но это на любителя. Остальное минусы.
|
|||
31
Кирпич
16.11.15
✎
11:28
|
+(30) сам не понял, что написал. :))
|
|||
32
Serginio1
16.11.15
✎
11:41
|
(29) Ну почему же. Пример где Win API не нужен это куча библиотек. Начиная от System (String,StringBuilder,Convert)
итд. А что касается скорости вызова на 1С обертки над WIN API то это мелочи по сравнению с затратами вызова метода в 1С. |
|||
33
Garikk
16.11.15
✎
11:44
|
(32) Эти библиотеки всеголишь надстройки над WinAPI...и "ненужен" он лишь для вашего кода
|
|||
34
Serginio1
16.11.15
✎
11:56
|
(33) То есть String это Win Api?
Да в String куча unsafe. Но он родной. В первых версиях было полно Unmanaged |
|||
35
MM
16.11.15
✎
12:00
|
(29) Но в АПИ есть тоже слои, например, функции начинающиеся c Nt. Разве они не могут вызываться минуя обычные функции пользовательского режима?
|
|||
36
Garikk
16.11.15
✎
12:01
|
(34) какая разница как он называется? Всёравно для использования системных функций вызывается Winapi.
.Net это виртуальая машина которая работает поверх winapi Буквально WinApi для .Net это как процессор для ассемблера |
|||
37
Serginio1
16.11.15
✎
12:30
|
(36) Выдумщик.
|
|||
38
Serginio1
16.11.15
✎
12:32
|
37+ почитай 25. Все в итоге компилируется в натив
|
|||
39
trdm
16.11.15
✎
12:40
|
(28) Да с фенами спорить - без толку. Обычно с кем борешся таким и становишся. Не хочу мутировать в фена мелкософта.
Предпочитаю традиционную сексуальную и программную ориентацию ))) |
|||
40
Serginio1
16.11.15
✎
12:43
|
http://habrahabr.ru/post/196596/
(39) Во уже и ориентация в ход пошла. А чем тебе MONO не угодил. А что касается QT то по ориентации это скорее свингеры, хотя и традиционные, но тоже с прибамбахами |
|||
41
Serginio1
16.11.15
✎
12:47
|
(40) И 1С у тебя сплошь на линуксах, Андроидах и IOS?
И как живется? |
|||
42
DmitrO
16.11.15
✎
12:57
|
(39)наш человек )
Благославляю! Дети мои, боритесь за истинную, католическую, веру! Не дайте проклятым гугенотам предать христово учение! Не позволим сборщику мусора освобождать нашу память когда ему вздумется! |
|||
43
MM
16.11.15
✎
13:41
|
(0) Может этот проект на GitHabе, или чём-то похожем опубликуете?
|
|||
44
Serginio1
16.11.15
✎
13:42
|
(39) Я программно предпочитаю быть импотентом. Нада как можно меньше заниматься сексом при программировании ()
|
|||
45
Serginio1
16.11.15
✎
14:27
|
(43) Надо бы. Сейчас закончу с ExpandoObject и подумаю.
Просто мало кому это нужно. К моему огромному сожалению. |
|||
46
Serginio1
17.11.15
✎
11:32
|
На заметку
Случайно изменил в AssemblyInfo.cs [assembly: ComVisible(true)] и Для каждого Цикл перестал работать Который работает через EnumVariantImpl : IEnumVARIANT / Параметр ComVisible со значением FALSE делает типы в сборке невидимыми // для COM-компонентов. Если требуется обратиться к типу в этой сборке через // COM, задайте атрибуту ComVisible значение TRUE для этого типа. [assembly: ComVisible(false)] |
|||
47
Serginio1
17.11.15
✎
14:40
|
Добавил возможность использования ExpandoObject напрямую с добавлением свойств и методов
Объект=ЗагрузкаComОбъекта.ПолучитьExpandoObject(); // Получим словарь для чтения и добавления свойств и методов Объект2=Врап.ПолучитьИнтерфейс(Объект,"IDictionary`2"); // Установим свойсва через словарь Объект2.set_Item("Число",5); //Сообщить(Объект.Item("Имя")); Сообщить(Объект2.get_Item("Имя")); Сообщить(Объект2.get_Item("Число")); Объект2.set_Item("Имя","Вызов Метода"); Сообщить(Объект2.get_Item("ВСтроку").DynamicInvoke()); // Теперь можно обращаться в свойствам и методам напрямую Объект.Число=6; Сообщить(Объект.Имя); Сообщить(Объект.Число); Объект.Имя="Вызов Метода"; Сообщить(Объект.ВСтроку()); // Добавим новое поле Объект2.Add("НовоеПоле",66); // Нужно обновить информацию о новых методах и свойствах Объект=врап.ОбновитьДанныеОметодахИСвойствах(Объект); // Сообщить(Объект.НовоеПоле); |
|||
48
MM
17.11.15
✎
14:51
|
скачивания с публичных ресурсов пока не появилось?
(47) А что это даёт? |
|||
49
trdm
17.11.15
✎
14:58
|
(48) +1 Даже в 1Сv77 есть структура.
Есть смысл расширять возможность встроеных объектов 1С, для хранения информации, что-бы избавиться от лишних параметров в процедурах, но это похоже унвозможно.. |
|||
50
Serginio1
17.11.15
✎
15:04
|
(48) Давай почту. Отправлю.
Это дает поддержку использования ExpandoObject без извращения доступа полям через IDictionary. По сути это структура, только с поддержкой методов. Например я могу динамически скомпилировать ДелегатИЛИ=ПолучитьМетод(); Объект2.Add("ИЛИ",ДелегатИЛИ); Объект=врап.ОбновитьДанныеОметодахИСвойствах(Объект); значение=Объект.ИЛИ(2,4); |
|||
51
Serginio1
17.11.15
✎
15:05
|
(49) Ты можешь получать данные из вне ввиде ExpandoObject
|
|||
52
trdm
17.11.15
✎
16:24
|
(51) Не требуется.
|
|||
53
quest
17.11.15
✎
16:43
|
(0) а примера связи 1С и F# нет? интересно было бы глянуть
|
|||
54
Serginio1
17.11.15
✎
16:45
|
(52) Тогда в чем смысл твоих комментариев если ты не разбираешься в предмете обсуждения? Просто, что то написать?
Повтори на чистом 1С (50) раз структуры есть еще в 7.7 (53) Кстати а есть FSharpCodeProvider? |
|||
55
Serginio1
17.11.15
✎
16:50
|
(53) Ну ты можешь на крайний случай использовать MSIL
Функция ПолучитьМетод() //"System.Func`3" NotifyFilters=врап.ПолучитьТип("System.IO.NotifyFilters"); helloArgs =врап.СоздатьМассив(врап.ПолучитьТип("System.Type"),2); helloArgs.SetValue(NotifyFilters,0); helloArgs.SetValue(NotifyFilters,1); // Create a dynamic method with the name "Hello", a return type // of Integer, and two parameters whose types are specified by // the array helloArgs. Create the method in the module that // defines the String class. ТипДляМодуля=Врап.ТипКакОбъект(врап.ПолучитьТип("System.String")); hello = врап.СоздатьОбъект("System.Reflection.Emit.DynamicMethod","OR", NotifyFilters, helloArgs, ТипДляМодуля.Module); // Get an ILGenerator and emit a body for the dynamic method, // using a stream size larger than the IL that will be // emitted. il = hello.GetILGenerator(); il.DeclareLocal(NotifyFilters); // THIS ONE! iL0007Label = il.DefineLabel(); OpCodes=врап.ПолучитьТип("System.Reflection.Emit.OpCodes"); // Load the first argument, which is a string, onto the stack. il.Emit(OpCodes.Nop); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldarg_1); // Call the overload of Console.WriteLine that prints a string. il.Emit(OpCodes.Or); il.Emit(OpCodes.Stloc_0); il.Emit(OpCodes.Br_S, iL0007Label); il.MarkLabel(iL0007Label); il.Emit(OpCodes.Ldloc_0); il.Emit(OpCodes.Ret); тип = врап.ПолучитьТип("System.Func`3"); типДелегата = Врап.ТипКакОбъект(тип).MakeGenericType(NotifyFilters,NotifyFilters,NotifyFilters); res = hello.CreateDelegate(типДелегата); //hello.CreateDelegate(); // Func<NotifyFilters, NotifyFilters, NotifyFilters> res = (Func<NotifyFilters, NotifyFilters, NotifyFilters>)hello.CreateDelegate(typeof(Func<NotifyFilters, NotifyFilters, NotifyFilters>)); //hello.CreateDelegate(); // return (NotifyFilters)res.OR(val1, val2); return res КонецФункции |
|||
56
Serginio1
17.11.15
✎
16:51
|
Так или иначе есть классы и методы. Можно посмотреть например через ILSpy
|
|||
57
trdm
17.11.15
✎
16:53
|
(54) Я такие темы просматриваю что-бы полезняшки выдергивать.
А не костыляшки. |
|||
58
Serginio1
17.11.15
✎
16:55
|
(57) Ну извини, что данная тема для тебя костыляшка.
И спасибо, что тему поддерживаешь. К сожалению моя костыляшка никому кроме тебя и не нужна. |
|||
59
MM
18.11.15
✎
10:35
|
Ну почему никому. То что, я её в производстве нигде не применил, не преуменьшает возможностей средств NET в 1С.
|
|||
60
Serginio1
18.11.15
✎
10:41
|
(59) Тогда давай я её тебе вышлю
|
|||
61
quest
18.11.15
✎
10:46
|
гляну после экзамена. может и будет что полезного из этого.
|
|||
62
Serginio1
18.11.15
✎
10:55
|
(61) Примера связи 1С и F# нет. Есть связь 1С и .Net.
А в Net есть классы. У классов есть методы, свойства, поля, Интерфейсы. Ну и самое главное это Reflection, через который мы можем получить информацию о классе. |
|||
63
Garykom
гуру
18.11.15
✎
11:19
|
(58) просто теория мало кому интересна, нужно практическое очень полезное применение
тогда и интерес будет к теме |
|||
64
Serginio1
18.11.15
✎
11:36
|
(63) Так там есть конкретные примеры
Представлены примеры на использовании событий System.IO.FileSystemWatcher (Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.) и SerialPort (обработка сканера штрих кода подключенного к COM порту). Обертка позволяет использовать сборки .Net только на языке 1С. |
|||
65
mikecool
18.11.15
✎
11:43
|
(2) насчет "будущее за нет" уже предание, в которое верится с трудом ))
|
|||
66
Serginio1
18.11.15
✎
11:47
|
(65) Ну это ты зря. Будущее конечно не за .Net, но точно с ним Что-то кроме 1С
|
|||
67
sapphire
18.11.15
✎
11:50
|
(66) Кинь ссылку на тоже самое, только с инфостарта, ты же и там тоже отметился
|
|||
68
sapphire
18.11.15
✎
11:51
|
(62) Эх... Когда ж одинце реализует reflection
|
|||
69
Garykom
гуру
18.11.15
✎
11:54
|
(65) будущее будет за .net когда можно будет автоматом иметь .нет с собой всегда и везде
а не как сейчас когда вышла новая ось (стала популярной) и приехали вообще .net это просто развитие идеи java только как то однобоко |
|||
70
Garykom
гуру
18.11.15
✎
11:56
|
(64) плохой примера ))
сорри но как насчет соединить с 1script ? |
|||
71
Garykom
гуру
18.11.15
✎
11:56
|
(70) + http://oscript.io/
|
|||
72
Serginio1
18.11.15
✎
12:09
|
(67) Ты про что?
(68) А им надо переходить либо на JS с языком типа TypeScript. Либо брать Java или NET. Кстати по применеии Java в Net IKVM.NET https://ru.wikipedia.org/wiki/IKVM.NET (69) Да нет. Сейчас развивают кроссплатформенность. Смотри 66 (70) Предложи свои. Сделаю. Да ты сам можешь сделать, все что твоей душе угодно |
|||
73
Serginio1
18.11.15
✎
12:33
|
(70) Посмотрел. Кстати
Отличия от стандартного языка 1С: •Не реализовано динамическое выполнение кода функциями Вычислить и Выполнить •Не реализованы функции ДобавитьОбработчик, УдалитьОбработчик для обработки событий COM-объектов. •Не поддерживается оператор Перейти и метки •Добавлена нестандартная директива препроцессора #Использовать, предназначенная для подключения внешних библиотек. В новых версиях Net будет лего выполнять скрипты http://daveaglick.com/posts/compiler-platform-scripting ScriptState state = CSharpScript.Run("NotifyFiltersOR(NotifyFiltersx,NotifyFiltersy) { return x |y; }"); var fn = state.CreateDelegate<Func<NotifyFilters, NotifyFilters, NotifyFilters>>("OR"); var value = fn(5); То есть использование .Net в 1С станет достаточно простым |
|||
74
Garykom
гуру
18.11.15
✎
12:49
|
(72) плохо все с кроссплатформенностью, многие части .net только для win к примеру есть
|
|||
75
Serginio1
18.11.15
✎
13:01
|
(74) Для кроссплатформенности есть Net Core
https://msdn.microsoft.com/ru-ru/library/ms171868(v=vs.110).aspx Ну и есть Xamarin https://msdn.microsoft.com/ru-ru/library/dn878908(v=vs.110).aspx .NET Core можно переносить на другие платформы, так как несмотря на то, что она является подмножеством полной версии .NET Framework, она предоставляет ключевые возможности для реализации функций приложений, необходимых для повторного использования этого кода независимо от целевой платформы.Раньше в разных версиях .NET для разных платформ отсутствовали общие функции для ключевых задач, таких как чтение локальных файлов.Доступные целевые платформы Майкрософт для .NET Core включают традиционную настольную систему Windows, а также устройства и телефоны под управлением ОС Windows.При использовании сторонних средств, таких как Xamarin, требуется возможность переноса .NET Core на устройства IOS и Android.Кроме того, среда .NET Core будет скоро доступна для операционных систем Mac и Linux, позволяющих запускать веб-приложения на этих системах. |
|||
76
Garykom
гуру
18.11.15
✎
13:11
|
(75) вот и говорю, java, версия 2
|
|||
77
Garykom
гуру
18.11.15
✎
13:11
|
(76)+ на те же самые грабли скоро наступят
|
|||
78
Garykom
гуру
18.11.15
✎
13:13
|
(77) это когда разных фреймоворков, причем большая часть уже того или не работает или между собой несовместимы
больше чем программистов их пытающихся использовать |
|||
79
Garykom
гуру
18.11.15
✎
13:20
|
Чем хороша 1С, если "сторонний фреймворк" заслуживает внимания, то его сами реализуют и включают в платформу
примеров много, ftp zip xml json etc |
|||
80
Garykom
гуру
18.11.15
✎
13:20
|
(79)+ получается некий стандарт от 1С
а вот где эти "стандартные подсистемы" от MS ? |
|||
81
Serginio1
18.11.15
✎
13:36
|
(79) А еще куча вещей которые не поддерживают. Однако через Net можно расширить функционал до небес.
(80) Куча библиотек до которых 1С и мечтать невозможно. |
|||
82
Serginio1
18.11.15
✎
13:43
|
(78) Ну тут так. Хочешь кроссплатформенность используй .NET Core, хочешь больше возможностей, но под Windows бери .NET Framework 4.6
|
|||
83
Garykom
гуру
18.11.15
✎
13:51
|
(81) насчет кучи библиотек
хочу прочитать xls или dbf, но "бесплатно" какую взять? скажем у меня студенческая поделка :) |
|||
84
Serginio1
18.11.15
✎
14:00
|
Да их куча. Можно через ADO и то и другое.
https://www.google.ru/search?ie=UTF-8&hl=ru&q=северодонецк%20выборы%202015&gws_rd=ssl#newwindow=1&hl=ru&q=c%23+xls+reader |
|||
85
Garykom
гуру
18.11.15
✎
14:02
|
(84) :) веселый запрос
https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=c%23%20xls%20reader а теперь попробовать найти среди них те которые кириллицу не портят )) |
|||
86
Serginio1
18.11.15
✎
14:04
|
(85) Тебе надо ты и ищи. В чем проблема то с языками.
Первый попавшийся http://www.codeproject.com/Articles/16210/Excel-Reader понимает иероглифы |
|||
87
Serginio1
18.11.15
✎
14:07
|
(85) На самом деле всегда можно найти решение на любые случаи жизни. На том же http://stackoverflow.com/
Нет проблем. |
|||
88
Garykom
гуру
18.11.15
✎
14:08
|
(86) так не про "Тебе надо ты и ищи"
а про то что чтобы писать на C# коммерческий софт... сначала разорись на VS или Xamarin... потом найди то что тебе надо, заплати за это ЗЫ 1С:Предприятие 8.2. Версия для обучения программированию руб 600 |
|||
89
Serginio1
18.11.15
✎
14:09
|
||||
90
qwerty2469
18.11.15
✎
14:09
|
(88) net версия для обучения 0 руб.
|
|||
91
Serginio1
18.11.15
✎
14:10
|
(88) За что заплати?
Microsoft недавно выпустила бесплатный Visual Studio Community Edition с той же функциональностью, что и Professional Edition. |
|||
92
Garykom
гуру
18.11.15
✎
14:10
|
(87) пробовал уже и не и не раз, реально как повезет
по факту или сразу не пашет или потом такие глюки всплывают к примеру когда на java писал для работы с xls пришлось использовать 2 разные библиотеки (каждая причем со своими зависимостями это пи.. был в результате) одна хорошо читала (чтобы начала понимать русский пришлось найти сорцы, исправить) а вторая хорошо писала (читать не умела совсем, тупо падала) |
|||
93
Garykom
гуру
18.11.15
✎
14:11
|
(90) (91) хы, про бесплатный сыр напомнить?
|
|||
94
qwerty2469
18.11.15
✎
14:12
|
(92) а на java для работы с xls есть хорошая библиотека от apache.
|
|||
95
Serginio1
18.11.15
✎
14:13
|
(92) Я тебе привел ссылки на Net. Как они работают не знаю. Но иероглифы понимают. В конце концов можно использовать родной Microsoft.Office.Interop.Excel;
https://msdn.microsoft.com/ru-ru/library/dd264733.aspx |
|||
96
Garykom
гуру
18.11.15
✎
14:14
|
||||
97
Serginio1
18.11.15
✎
14:15
|
(93) Не понимаю. Я пользуюсь и не вижу проблем. Надо будет буду использовать Java если будет от этого польза
|
|||
98
Garykom
гуру
18.11.15
✎
14:15
|
(96)+ и еще овер 30 метров файл вроде пишут падает
|
|||
99
Garykom
гуру
18.11.15
✎
14:16
|
(97) лицензию читал?
|
|||
100
Serginio1
18.11.15
✎
14:17
|
(97) Я пишу для нужд компании. Если я буду продавать, то тогда почему бы и не заплатить.
|
|||
101
trdm
18.11.15
✎
14:17
|
(97) > Я пользуюсь и не вижу проблем.
Хм. подсадили СССР на майкрософт, теперь милиарды рублей улетают за бугор каждый год, + снифер в каждом компе, включая госконторы. О, да. Нет проблем. Фанатизм - он такой, зашоривает и нифига по бокам не видно. |
|||
102
Serginio1
18.11.15
✎
14:18
|
(99) А за 1С ты не платишь для нужд собственной компании?
|
|||
103
Serginio1
18.11.15
✎
14:20
|
(101) Вот кто фанатик так это ты. Я выберу тот инструмент который мне подходит. Заметь изначально то программист 1С.
Так что фанатизморм то прет только от тебя. Фанатик не Майкрософт. Ты кстати не ответил у тебя 1С только на линукс, андроид и IOS? |
|||
104
trdm
18.11.15
✎
14:20
|
(101) Демо версия СУБД Линтер без ограничений - 0 рублей.
Линукс - 0 рублей. Qt+Qt Creator - 0 рублей. (102) Это гнилая отмазка. Когда человек отстраняется от предприятия, которое его кормит - это попахивает гнильцой. |
|||
105
trdm
18.11.15
✎
14:23
|
+(104) Для нормально умственно развитого человека - предприятие на котором он работает - ПАРТНЕР. Хороший или плохой, но партнер. А партнеры должны учитывать интересы друг-друга.
|
|||
106
Serginio1
18.11.15
✎
14:24
|
(104) Так и sql server express тоже бесплатный
Разъясни про гнилую отмазку? Для использования VS не для комерции я могу использовать на своем предприятии бесплатно. А вот 1С ты обязан купить. |
|||
107
qwerty2469
18.11.15
✎
14:24
|
(104) https://ru.wikipedia.org/wiki/ЛИНТЕР
Написано, что ЛИНТЕР комерческая. |
|||
108
Serginio1
18.11.15
✎
14:25
|
(105) Ты куда то не туда понесся. QT видно куда то ударило.
|
|||
109
trdm
18.11.15
✎
14:26
|
(103) >> Вот кто фанатик так это ты. Я выберу тот инструмент который мне подходит.
Это чистый эгоизм паря. Хватит уже в нос совать гадюшникософт. (107) Для вузов бесплатно, демо-версия ограничений не имеет. Внедряй, покупай. |
|||
110
Garykom
гуру
18.11.15
✎
14:27
|
(102) ничего не понял...
за использование написанной мной конфы (на учебной версии 1С) предприятие платит купив лицензии 1С (обычные) понятно что часто учебной не хватает и выдается/покупается ключик обычной 1С однопользовательской |
|||
111
trdm
18.11.15
✎
14:28
|
Майкрософт не любят за её политику, за подсадку многих стран на свою наркоту.
Использовать её софт приходится, об этом речь не идет. Но чем меньше софта гадюшникософта у меня на компе, тем как-то мне спокойнее. |
|||
112
qwerty2469
18.11.15
✎
14:29
|
(111) +
|
|||
113
Serginio1
18.11.15
✎
14:30
|
(110) https://www.visualstudio.com/ru-ru/products/visual-studio-community-vs.aspx
Любой индивидуальный разработчик может создавать бесплатные или платные приложения с помощью Visual Studio Community Visual Studio Community может использовать неограниченное число пользователей в организации в следующих случаях: в учебных аудиториях, для научных исследований или участия в проектах с открытым кодом. Для всех прочих сценариев использования: в некорпоративных организациях Visual Studio Community может использовать до 5 пользователей. В корпоративных организациях (в которых используется >250 ПК или годовой доход которых >1 млн долларов США) использование запрещено, за исключением случаев, перечисленных выше (открытый код, научные исследования и учебные аудитории). |
|||
114
Serginio1
18.11.15
✎
14:34
|
(109) Я беру то что мне помогает в работе. Используя классы Net я расширяю функционал 1С. Предложи свой вариант не MS и я с удовольствием буду использовать его. Пока твои аргументы таковы, что ты не любишь MS и значит любой продукт на его основе это гадюшникософта.
Еще раз повторю выбираю тот инструмент, на котором легче добиться поставленной цели. |
|||
115
trdm
18.11.15
✎
14:35
|
Qt Creator (ранее известная под кодовым названием Greenhouse) — кроссплатформенная свободная IDE для разработки на С, С++ и QML. Разработана Trolltech (Digia) для работы с фреймворком Qt. Включает в себя графический интерфейс отладчика и визуальные средства разработки интерфейса как с использованием QtWidgets, так и QML. Поддерживаемые компиляторы: GCC, Clang, MinGW, MSVC, Linux ICC, GCCE, RVCT, WINSCW.
Доступна в исходных кодах. Свободна и бесплатна, как и её целевой инстумент: Qt позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования. Лицензия GNU LGPL или GNU GPL[4], коммерческая[5] Сайт qt.io --------------------------------------- есть на чем ваять и помимо пукнет. |
|||
116
Serginio1
18.11.15
✎
14:36
|
(109) Кстати спасибо за комплимент. В 52 года и еще парнь. Молодею
|
|||
117
trdm
18.11.15
✎
14:37
|
+(115) Пардон, ссылки забыл.
https://ru.wikipedia.org/wiki/Qt_Creator https://ru.wikipedia.org/wiki/Qt |
|||
118
Serginio1
18.11.15
✎
14:37
|
(115) Так ваяй. Кто тебе мешает? И сделай компонент который является сабжем. Только и всего.
|
|||
119
trdm
18.11.15
✎
14:41
|
(116) К твоему сведению психологический цикл взросления психики человека - 49 лет. Если человек его неправильно прошел и не стал мудрым, он начинается заново. Так что твои ребяческие замашки вполне объяснимы с точки зрения ведической психологии.
|
|||
120
Serginio1
18.11.15
✎
14:45
|
(118) Про ребяческие замашки поясни о мудрейший. И ответь на 118
|
|||
121
qwerty2469
18.11.15
✎
14:48
|
(104) На форумах пишут, что ЛИНТЕР - это копия PostgreSQL 7.2
|
|||
122
trdm
18.11.15
✎
14:49
|
(120) А нафига мне делать то, что не нужно?
(121) Там есть такая версия, основанная на слонике, но это побочный продукт. |
|||
123
Serginio1
18.11.15
✎
14:51
|
(122) Тогда зачем ты хаешь, то что тебе не нужно?
И про ребяческие замашки поясни . |
|||
124
trdm
18.11.15
✎
14:51
|
+(122) Меня просто раздражает конкретно пиар гнилософта.
|
|||
125
Serginio1
18.11.15
✎
14:54
|
(124) Я предлагаю конкретные решения, а не пиар. А пиаром занимаешься ты, так как не приводишь конкретных решений.
Мою компоненту может взять любой 1С знакомый с Net и расширять возможности 1С без написания внешних библиотек. Что в этом плохого? |
|||
126
trdm
18.11.15
✎
14:59
|
(125) Да, я понял. Думаешшь только о програминге, и ни о чем большем. Плыви куда хочешь.
|
|||
127
Serginio1
18.11.15
✎
15:02
|
(126) Спасибо о мудрейший. Чем заняты твои помыслы о вечном? Мне программирование приносит удовольствие. И думаю, что мои труды приносят пользу не только мой фирме. Направь меня на путь истинный.
|
|||
128
Garykom
гуру
18.11.15
✎
15:08
|
(127) (126) Вы еще подеритесь горячие финские деды
|
|||
129
Garykom
гуру
18.11.15
✎
15:15
|
(115) (117) Кстати заметил кому нравится виджеты Qt, то тем не нравятся WinForms обычно
и наоборот ЗЫ я не смог въехать в логику построения интерфейсов Qt, примерно как и в логику python'а ЗЗЫ winforms нравится все понятно почти как swing иди vcl/lcl |
|||
130
trdm
18.11.15
✎
15:23
|
(129) В чем спотык?
|
|||
131
trdm
18.11.15
✎
15:25
|
(127) >> Направь меня на путь истинный.
Иди, посчитай сколько копий винды и офиса продано в России и прикинь сколько денег утекло у нас из страны. Вернешся, доложишь. |
|||
132
trdm
18.11.15
✎
15:26
|
+(131) Скуль не забудь и прочее.
|
|||
133
Garykom
гуру
18.11.15
✎
15:41
|
(130) "Ключевое слово emit вырабатывает сигнал valueChanged() объекта с новым значением в качестве аргумента.
В следующем примере мы создаем два объекта типа Counter и соединяем сигнал valueChanged() первого со слотом setValue() второго используя статическую функцию QObject::connect():" |
|||
134
oleg_km
18.11.15
✎
15:42
|
(131) И че дальше? А сколько нефти продано из страны?
И что, теперь каждый программист лично в ответе перед народом, что это из-за него страна, даже не знаю как закончить фразу? Эк вас в какие выси занесло. На землю спуститесь. |
|||
135
Garykom
гуру
18.11.15
✎
15:43
|
(133)+ осталось сигналы через tcp/ip передавать и чтобы слоты тоже могли быть на удаленном компе, не так где запущена программа
|
|||
136
Garykom
гуру
18.11.15
✎
15:46
|
(134) проблема в отсутствии конкуренции
нефть можно выбрать кому продавать, и не только нефть продавать но и еще много чего а вот попробуйте купить ноут с осью отличной от M$ |
|||
137
trdm
18.11.15
✎
15:55
|
(133) моя любимая сигнал-слотная модель обмена сообщениями.
void cls::setValue(int& val) { if (val != m_val){ m_val = val; emit valueChanged(m_val); // рассылает всем объектам, подписанным на valueChanged(int& val) данное сообщение. } } подписываться на событие можно функцией QObject::connect(): bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoCompatConnection ) [static] Создает соединение типа type сигнала signal объекта sender с методом method в объекте receiver. При успешном выполнении возвращает true; в противном случае - false. Вы должны использовать макросы SIGNAL() и SLOT() для спецификации signal and the method, например: QLabel *label = new QLabel; QScrollBar *scrollBar = new QScrollBar; QObject::connect(scroll, SIGNAL(valueChanged(int)), label, SLOT(setNum(int))); http://qtdocs.narod.ru/4.1.0/doc/html/qobject.html#connect |
|||
138
trdm
18.11.15
✎
15:58
|
похоже в доке ошибка.
QLabel *label = new QLabel; QScrollBar *scrollBar = new QScrollBar; QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label, SLOT(setNum(int))); вот так надо. |
|||
139
trdm
18.11.15
✎
15:59
|
(134) >> А сколько нефти продано из страны?
А нам надо нефть продавать? Это просто желание наживы. Могли бы снабжать мир зерновыми и лесом и технологиями. Просто пошли по легкому пути, что-бы обогатиться. |
|||
140
Garykom
гуру
18.11.15
✎
16:02
|
(139) зря ТС пожаловался на не активность темы... ой зря ))
но оффтопик уже дикий пошел |
|||
141
Serginio1
18.11.15
✎
16:11
|
(131) Тебе шашечки или ехать?
Пусть в России создадут такой продукт. Или ты предпочитаешь ездить на телеге, раз в России не производят машины. Предложи альтернативу. Пока предлагаемая тобой QT это телега. И при этом обвиняешь меня, что я ею не пользуюсь. |
|||
142
Serginio1
18.11.15
✎
16:13
|
(140) У человека сердце за отчизну болит. Я с ним солидарен. Только вот QT почему то не отечественный.
|
|||
143
trdm
18.11.15
✎
16:14
|
(140) ага. и мысль о том, что надо же всетаки работать дергает за ухо..
|
|||
144
trdm
18.11.15
✎
16:16
|
(141) >> Тебе шашечки или ехать?
Когда человек видит только 2 варианта, значит у него глаза зашоренные. Надо думать шире. Не ребенок чай уже. |
|||
145
trdm
18.11.15
✎
16:18
|
(142) >> Только вот Qt почему то не отечественный.
Это не важно. Важно то, что он не тянет за собой леску, привязанную к удочке. |
|||
146
Serginio1
18.11.15
✎
16:23
|
(144) Так вот ты не привел свое решение. Покажи раз ты видишь. У тебя один ответ, что тебе это не нужно.
(145) Угу и почему это у QT нет лески? Те же коммерческие версии http://www.qt.io/ru/download/ А еще меня фанатом обзываешь. Это ты кроме QT ничего не видишь. |
|||
147
Serginio1
18.11.15
✎
17:26
|
Ну вот подыматель темы ушел
|
|||
148
oleg_km
18.11.15
✎
21:05
|
(147) Фигли, спугнули.
|
|||
149
Serginio1
19.11.15
✎
10:46
|
(148) Кстати помню как Borland выпустил Kylix. Тогда многие подумали, что вот сейчас мы нагнем M$ будем использовать QT формы. И все потихоньку перейдут на Линукс. Но идея оказалась провальной. Потом появился .Net. Помню какая оживленная полемика была, какие ожидания. Но по настоящему на приемлемый уровень Net вышел только к версии 4.5. Сейчас это очень мощный инструмент.
В общем с возрастом понимаешь, что инструментов очень много и нужно просто выбрать, тот который максимально подходит для решения задачи. Нужен бейсик, значит бейсик. Нужно понять функциональное программирование для развития мозгов берем Хаскель,Nemerle, нужно написать сайт берем JavaScript,TypeScript, AngularJS И приходится постоянно учиться, в том числе и 1С. |
|||
150
trdm
19.11.15
✎
11:49
|
||||
151
Serginio1
19.11.15
✎
12:53
|
(150) Извини. Будем знать такие тонкости
|
|||
152
Oftan_Idy
19.11.15
✎
12:58
|
Господа скажите - а нафига все это (0)?
Какое практическое применение? |
|||
153
Барматолог
19.11.15
✎
14:20
|
(152) а что конкретно не понятно?
|
|||
154
Oftan_Idy
19.11.15
✎
14:21
|
(153) Какое может быть практическое применение "Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия" ?
Вот реальная задача для бизнеса какая может быть? |
|||
155
Serginio1
19.11.15
✎
14:35
|
(154)Представлены примеры на использовании событий System.IO.FileSystemWatcher (Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.) и SerialPort (обработка сканера штрих кода подключенного к COM порту). Обертка позволяет использовать сборки .Net только на языке 1С.
Есть огромная куча .Net классов у которых есть события. Статья показывает как использовать объекты таких классов. Это и ВэбСокеты и Сокеты TCP/IP, разные формы, WhatsApp итд. Позволяет расширить возможности 1С без Написания ВК. |
|||
156
Serginio1
19.11.15
✎
14:35
|
Вот так всеми любимый пример чтение Com порта
sp= Врап.СоздатьОбъект("System.IO.Ports.SerialPort","COM" + НомерПорта); ПИ="System.IO.Ports."; sp.BaudRate= 9600; sp.Parity= Врап.ПолучитьТип(ПИ+"Parity").None; sp.StopBits= Врап.ПолучитьТип(ПИ+"StopBits").One; sp.DataBits= 8; sp.Handshake= Врап.ПолучитьТип(ПИ+"Handshake").None; СоздатьОбертку(sp); sp.Open(); и обработка события Процедура DataReceived(Данные) sp1 = Данные.sender; ШтрихКод= sp1.ReadExisting(); Компорт= sp1.PortName; Сообщить(СтрШаблон("ШК=%1 Порт=%2",ШтрихКод,Компорт)); КонецПроцедуры |
|||
157
Serginio1
19.11.15
✎
14:43
|
А вот метод
Процедура СоздатьОбертку(объект) // Вот ради этой единственной строчки и написана статья ОберткаСобытий=врап.СоздатьОберткуДляСобытий(объект); ДобавитьОбработчик ОберткаСобытий.ОшибкаСобытия,ОшибкаСобытия; ДобавитьОбработчик ОберткаСобытий.ErrorReceived, ErrorReceived; ДобавитьОбработчик ОберткаСобытий.PinChanged, PinChanged; ДобавитьОбработчик ОберткаСобытий.DataReceived, DataReceived; ДобавитьОбработчик ОберткаСобытий.Disposed, Disposed; КонецПроцедуры |
|||
158
Гёдза
19.11.15
✎
14:46
|
А в тонком клиенте работает нормально?
|
|||
159
Serginio1
19.11.15
✎
14:54
|
Не пробовал. А разве тонкий клиент не поддерживает COM и ДобавитьОбработчик ?
|
|||
160
Serginio1
19.11.15
✎
15:08
|
А вот для семерки будет так
Функция СоздатьОбертку(ОбертываемыйОбъект) ПодключитьВнешнююКомпоненту("AddIn.GlobalContext1C"); объект = СоздатьОбъект("AddIn.GlobalContext1C"); ГлобальныйКонтекст = объект.ГлобальныйКонтекст; ОберткаСобытий = врап.СоздатьОберткуДляСобытий77(ОбертываемыйОбъект,ГлобальныйКонтекст); КонецФункции // СоздатьОбертку // Свойства ОберткаСобытий.DataReceived // sender:System.Object // e:System.IO.Ports.SerialDataReceivedEventArgs Функция DataReceived() Сообщить("DataReceived "+Врап.ВСтроку(ОберткаСобытий.DataReceived)); sp1 = ОберткаСобытий.sender; ШтрихКод= sp1.ReadExisting(); Компорт= sp1.PortName; Сообщить(Шаблон("ШК=[ШтрихКод] Порт=[Компорт]")); КонецФункции Процедура ОбработкаВнешнегоСобытия(Источник, ИмяСобытия, Данные) Если Источник = "System_IO_Ports_SerialPort" Тогда Шаблон("[" + ИмяСобытия + "()]"); КонецЕсли; КонецПроцедуры // ОбработкаВнешнегоСобытия |
|||
161
Serginio1
19.11.15
✎
15:41
|
(154) Кстати может отдельную статью написать
Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент http://catalog.mista.ru/public/238584/ А то народ жалуется, что тяжелая статья, для людей незнакомым с Net? |
|||
162
Serginio1
20.11.15
✎
12:52
|
Многие жалуются, что материал в http://catalog.mista.ru/public/238584/
плохо читаем. Думаю сделать статью по азам Net и возможностям NetObjectToIDispatch для доступа к нетовским классам. Посоветуйте какие примеры лучше использовать, что бы людей заинтересовала эта тема. Что то несложное, но понятное Например Thread.Sleep String IndexOf и LastIndexOf с индексом начала поиска PadLeft,PadLeft EndsWith StringBuilder https://msdn.microsoft.com/ru-ru/library/kc12ydtf(v=vs.110).aspx Подскажите, что можно добавить, что бы 1С никам было интересно использовать данную компоненту |
|||
163
Serginio1
20.11.15
✎
12:55
|
Regex https://msdn.microsoft.com/ru-ru/library/system.text.regularexpressions.regex(v=vs.110).aspx
Не слишком сложно? |
|||
164
Serginio1
20.11.15
✎
12:56
|
||||
165
Serginio1
20.11.15
✎
13:13
|
Вот Регулярные выражения FAQ - C#
http://www.cyberforum.ru/csharp-beginners/thread244709.html может народ Regex заинтересуют Или Работа с файлами, директориями, дисками, памятью http://www.cyberforum.ru/csharp-beginners/thread163620.html то чего нет в 1С |
|||
166
Serginio1
20.11.15
✎
13:20
|
char
IsLetter,IsUpper |
|||
167
Serginio1
20.11.15
✎
14:04
|
Пятница однако
|
|||
168
MM
20.11.15
✎
14:06
|
(162) В 8.3.6 многое по работе со строками появилось, например, поиск не с начала строки.
(163) Можно многое через CreateObject("VBScript.RegExp") можно сделать и есть ВК от Orefkova для работы с регулярными выражениями встроенными в платформу. (166) Это для тех кто с не русскими языками работает нужно. Особенно, с азиатскими языками. Может удобная работа с какими-нибудь интернет сервисами найдётся? или с оборудованием? |
|||
169
Кирпич
20.11.15
✎
14:06
|
(166) Дааа :)))) Подключать мегабайты библиотек чтобы узнать, что буква 'А' не цифра это реально круто.
|
|||
170
Кирпич
20.11.15
✎
14:08
|
(167) Ё. я думал сегодня четверг. планы меняются.
|
|||
171
Serginio1
20.11.15
✎
14:11
|
(168) Согласен. Поэтому и сспрашиваю, чем заинтересовать 1С ников. Да и Regex в Net по возможностям думаю все же чем в VBScript.RegExp
(169) Ты не прав. Подгружается и компилируется только то, что нужно (170) Ну вот не зря зашел на ветку. |
|||
172
Serginio1
20.11.15
✎
14:13
|
(168) И смысл в том, что для использования всех классов Net нужна всего одна библиотека.
|
|||
173
Гёдза
20.11.15
✎
14:18
|
(172) Не понимания тебя сообществом в том, что нет готовых задач-примеров.
Так же если бы на 1с не было ни одной типовой конфы, а только голая платформа. Если ты хочешь двигать свою идею в массы, то нужно выкатить хоть одну задачу-решение |
|||
174
Garykom
гуру
20.11.15
✎
14:27
|
(173) не просто задачу решение
а в стиле хабра статью причем задача может быть гиковская главное расписать решение так чтобы интересно было - ооо, вот как еще можно извращаться... уважаем... |
|||
175
Garykom
гуру
20.11.15
✎
14:30
|
(174)+ к примеру есть стандартная http://www.dx.com/p/keyes-1-channel-usb-control-switch-relay-module-for-pc-red-5v-308292
-USB реле Тут многие постоянно хотят пользователей из 1С напрямую "током бить" там есть https://app.box.com/s/0v2dprnozmry05luxopv "дрова" вот как насчет подключить удобно из 1С? ЗЫ я тупо их прогу из примера вызывал с параметрами, но это же не не правильное решение ;) |
|||
176
Serginio1
20.11.15
✎
14:35
|
(173) Вот я и спрашиваю, что может заинтересовать 1С ца.
У меня куча таких задач, но они не массовые. (175) Не думаю, что это массовая задача. Но еще нужно и обертку Net сделать на PInvoke |
|||
177
Garykom
гуру
20.11.15
✎
14:38
|
(176) ну 99% 1С-ников периодически хотят током того кого нить... значит массовая
|
|||
178
Garykom
гуру
20.11.15
✎
14:45
|
Но можно задачку и поинтереснее и "по массивнее". Как насчет такой штуки.
На компе (с инетом) цели с установленной 1С запускается некая прога/обработка в 1С Далее на любом компе с инетом (причем любым) и 1С также можно используя (0) работать с "удаленной" 1С как с текущей, просто "оборачивая вызовы" |
|||
179
Кирпич
20.11.15
✎
14:45
|
(176) Тебе платят что-ли как евангелисту? Чо ты всех манишь и манишь в свой дотнет, как михалыч. Кому надо тот и так пользуется, а кому не надо, тому и не надо.
|
|||
180
Serginio1
20.11.15
✎
16:05
|
(179) Нет не платят. Просто мне непонятно, почему мало кто хочет использовать мощь Net?
Да и на самом деле я в эту компоненту кучу труда вложил. Жалко ведь труды если они по сути напрасны. Да эта компонента помогает мне, но я хочу помочь и другим. |
|||
181
Кирпич
20.11.15
✎
16:12
|
(180) "Просто мне непонятно, почему мало кто хочет использовать мощь Net"
Ну видимо хватает других мощей. (178) это зачем? Что-бы 1С еще медленнее работала? |
|||
182
Garykom
гуру
20.11.15
✎
16:12
|
(180) потому что сейчас практически везде профицит товара, предложение превышает намного спрос
мало что то сделать (написать вложив кучу труду), нужно это еще и "продать" очень плохие (не надо принимать как хулу) описания (статьи) с точки зрения пробежать по диагонали если вопрос сложный, а это так, то нужно сначала в начале статьи любым способом привлечь внимание потом разжевывать по шагам (и не забывать про комментарии в коде желательно веселые) а в процессе так же делать отступления от темы чтобы не надоело читать (отвлечение и снова привлечение внимания) |
|||
183
Garykom
гуру
20.11.15
✎
16:15
|
(181) речь не про 1С и медленне
а увязка кучи разных 1С в одну онлайн/распределенную систему минимумом усилий вся увязка производится только с одной стороны, с другой требуется только разрешение на доступ просто сейчас чтобы сделать передачу данных между двумя системами требуется 2 программиста если системы в их ответсвенности |
|||
184
Кирпич
20.11.15
✎
16:21
|
(183) осспадя... вышли клиенту свою обработку по почте и не выдумывай.
|
|||
185
Serginio1
20.11.15
✎
16:22
|
(181) Угу тут месацами ищут ВК для чтения ШК итд. Куча вопросов, где через Net можно решить любую задачу. Плюс в интернете огромная база решений. Нужно просто перевести из C# на 1С. Просто многие не понимают как это сделать. А вот в этом я и хочу помочь
|
|||
186
Serginio1
20.11.15
✎
16:24
|
(182) Я не продаю. Я хочу поделиться опытом.
|
|||
187
Кирпич
20.11.15
✎
16:25
|
(185) Так им готовое нужно. Им хоть C# хоть не С#, лишь бы работало.
|
|||
188
Кирпич
20.11.15
✎
16:32
|
+(187) а кто сам может сделать, то сделает на чем умеет и не будет на форумах глупые вопросы задавать чо да как.
|
|||
189
Гёдза
20.11.15
✎
16:34
|
(176) Например можно взять классическую задачу: Оповещения сервером клиентов, или чат какой-нибудь
|
|||
190
Гёдза
20.11.15
✎
16:36
|
Или сложную математику делать, если это конечно возможно.
Всякие там решения задач рюкзака |
|||
191
oleg_km
20.11.15
✎
16:46
|
(189) Как раз можно и оповещение клиентов с сервера и чат. У меня активно используется TCP/UDP обмен, как со сторонними сервисами, внутри предприятия, так и даже для служебного внутри-конфигурационного обмена. Например асинхронная работа в 1С. Клиент создает форму, вешает на нее сокет в ActiveX (.NET) потом запускает фоновое задание и передает в него адрес и порт сокета формы. Фоновое задание тоже создает сокет (.NET) и шлет клиенту любые сообщения. Там куча разных возможностей. Сокеты бывают даже с kerberos авторизацией, т.е. на стороне сервера можно узнать, кто залогинен со стороны клиента.
|
|||
192
Serginio1
20.11.15
✎
16:48
|
(189) Так там есть обмен через TCP/IP. Можно вообще SignalR и вэб сокеты использовать.
На самом деле нужно как то людей заинтересовать и их самих стимулировать самим делать. Многие просто будут тупо использовать существующие решения. |
|||
193
oleg_km
20.11.15
✎
16:48
|
(185) Сергей, 90 % 1С-ников нужно схватить что-то готовое и быстро воткнуть в свою конфу. Т.е. им нужна рыба, а ты предлагаешь удочку. Удочки мало кому нужны, большинству нужна рыба, желательно уже приготовленная.
|
|||
194
Serginio1
20.11.15
✎
16:48
|
(192) Там это в статье
|
|||
195
Гёдза
20.11.15
✎
16:49
|
(192) С таким подходом каши не сваришь
|
|||
196
Serginio1
20.11.15
✎
16:52
|
(195) Так все то о чем ты говоришь есть. Каша то все равно не варится
|
|||
197
Гёдза
20.11.15
✎
16:53
|
(196) Сделай хоть ОДИН готовый пример!!!
|
|||
198
Гёдза
20.11.15
✎
16:53
|
Не надо говорить что МОЖНО сделать. нужно его СДЕЛАТЬ
|
|||
199
Serginio1
20.11.15
✎
16:54
|
(197) Они есть http://catalog.mista.ru/public/238584/
|
|||
200
Garykom
гуру
20.11.15
✎
16:55
|
(196) горшочек неправильный :)
Или мануала понятного нет |
|||
201
Гёдза
20.11.15
✎
16:56
|
(199) Эхххх, менеджера тебе толкового не хватает
|
|||
202
H A D G E H O G s
20.11.15
✎
17:02
|
(201) Даже мне становится страшно, когда я открываю (199) :-)
|
|||
203
Serginio1
20.11.15
✎
17:11
|
(202) Так давай я сделаю с вашей помощью так, что бы это было интересно.
(198) Вот готовые решения на SignalR2 http://metanit.com/sharp/mvc5/16.1.php Кстати сейчас уже SignalR3 http://habrahabr.ru/company/luxoft/blog/253349/ |
|||
204
Serginio1
20.11.15
✎
17:12
|
(200) Я это понимаю. Поэтому и прошу совета
|
|||
205
Гёдза
20.11.15
✎
17:15
|
(204) п.1 Выбери себе задачу, которую бы ты хотел решить (из тех что предлагал или свою но подобную)
|
|||
206
Serginio1
20.11.15
✎
17:19
|
Кстати а что непонятно в
врап=новый COMОбъект("NetObjectToIDispatch45"); smtp = "smtp.yandex.ru"; login = "[email protected]"; password = "XXXXXXX"; Кому = "[email protected]"; Port=25; mail = врап.СоздатьОбъект("System.Net.Mail.SmtpClient",smtp, Port); mail.EnableSsl = true; mail.UseDefaultCredentials = false; mail.Credentials = врап.СоздатьОбъект("System.Net.NetworkCredential",login, Password); mail.DeliveryMethod = Врап.ПолучитьТип("System.Net.Mail.SmtpDeliveryMethod").Network; Message = врап.СоздатьОбъект("System.Net.Mail.MailMessage"); MailAddressType= Врап.ПолучитьТип("System.Net.Mail.MailAddress"); Message.From = врап.СоздатьОбъект(MailAddressType,login); Message.To.Add(врап.СоздатьОбъект(MailAddressType,Кому)); Message.Subject = "Тема Тест отправки почты SSL"; Message.IsBodyHtml = true; Message.Body = "Тело Тест отправки почты SSL"; mail.Send(Message);//отправка Message.Dispose(); mail.Dispose(); |
|||
207
Serginio1
20.11.15
✎
17:25
|
(205) Вот пример из недавнего
Нужно интегрировать turbosms в 1 с 7.7 Ну не понимают 1С вэб клиент soap:Header WS- протоколы. Решение элементарное, но .. |
|||
208
Garykom
гуру
20.11.15
✎
17:29
|
(206) ну первое замечание, вот пример моего кода на C# ))
public void ДобавитьУсловияКолонки(List<string> Условия, КолонкаТаблицыЗначений Колонка) { ДобавитьУсловие(Условия, Перечисления.ТипыУсловия.НомерРавен, new List<Object> { Колонка.Индекс() }); foreach (СтрокаТаблицыЗначений строка in Колонка.Таблица) { ЯчейкаТаблицы ячейка = строка[Колонка]; ДобавитьУсловие(Условия, Перечисления.ТипыУсловия.ЕстьЯчейкаСТекстом, new List<Object> { ячейка.Значение }); ДобавитьУсловие(Условия, Перечисления.ТипыУсловия.ЯчейкаНомерСодержитТекст, new List<Object> { Колонка.Индекс(), ячейка.Значение }); } } |
|||
209
Garykom
гуру
20.11.15
✎
17:30
|
(208) + не хочется обижать простых 1С-ников, но в массе английский плохо
вот если кроме 1С знают еще что то скорее всего технический английский есть какого то уровня но все равно писать по максимуму на русском, хотя бы имена переменных |
|||
210
Garykom
гуру
20.11.15
✎
17:33
|
(206) далее у тебя код "для себя", а не "для пользователя" - программиста (в т.ч. начинающего)
ко многим строчкам просто нужны комментарии например mail.EnableSsl = true; // включаем использование шифрования mail.UseDefaultCredentials = false; // не дефолтное mail.Credentials = врап.СоздатьОбъект("System.Net.NetworkCredential",login, Password); // хз зачем но нужно для авторизации |
|||
211
Гёдза
20.11.15
✎
17:37
|
(207) по 77 уже никому не интересны задачи
|
|||
212
Гёдза
20.11.15
✎
17:38
|
А почту можно и типовыми методами отсылать.
Нужна задача, которая не решается типовыми способами |
|||
213
Garykom
гуру
20.11.15
✎
17:38
|
(211) сча как адепты 7.7 набегут... запинают ведь
|
|||
214
Garykom
гуру
20.11.15
✎
17:40
|
(212) обычное создание бэкапов по расписанию (управляемому) с управляемым выгоном всех из базы и убиванием зависших
причем универсальное неважно 1С 7.7 какая версия файловая или нет или 8.X |
|||
215
Serginio1
20.11.15
✎
17:40
|
(208) Так я тоже использую в своих классах русский. Просто стандартные классы из GAC да и другие решения коечно есть и на китайском, но в большинстве случаев на английском.
Ну в общем то согласен. Только этот код можно найти в https://msdn.microsoft.com/ru-ru/library/system.net.mail.smtpclient(v=vs.110).aspx Согласен. Вот я и хочу на простых примерах объяснить и показать как самим просто использовать классы Net (211) Там проблема не в 7.7 Это и 8.3 не понимает там данные в soap:Header |
|||
216
Serginio1
20.11.15
✎
17:41
|
(214) Это опять из области SignaR. Причем подписываться и получать сообщения по HTTP
|
|||
217
Garykom
гуру
20.11.15
✎
17:42
|
(215) ага только заметь сколько комментов по ссылке
|
|||
218
Serginio1
20.11.15
✎
17:44
|
(217) Согласен.
|
|||
219
Serginio1
20.11.15
✎
18:01
|
218 Просто для меня из названий методов и присвоений все понятно. Но там даже нужно описать методы
|
|||
220
Serginio1
20.11.15
✎
18:01
|
Так понятней?
// Создаем враппер для нетовских классов врап=новый COMОбъект("NetObjectToIDispatch45"); smtp = "smtp.yandex.ru"; login = "[email protected]"; password = "XXXXXXX"; Кому = "[email protected]"; Port=25; // Враппер позволяет создавать объект класса по его полному имени. // Параметры конструктора передаются после названия класса // По аналогии с 1с Новый("Структура") mail = врап.СоздатьОбъект("System.Net.Mail.SmtpClient",smtp, Port); // Теперь нам доступны свойства,поля и методы объекта mail.EnableSsl = true;//Указывает, использует ли SmtpClient протокол SSL для шифрования подключения. mail.UseDefaultCredentials = false;//Возвращает или задает значение Boolean, которое управляет отправкой учетных данных DefaultCredentials вместе с запросами. / /Инициализирует новый экземпляр класса NetworkCredential с заданными значениями пароля и имени пользователя. mail.Credentials = врап.СоздатьОбъект("System.Net.NetworkCredential",login, Password);//Возвращает или задает учетные данные, используемые для проверки подлинности отправителя. //перечисление SmtpDeliveryMethod Задает способ доставки сообщений электронной почты. mail.DeliveryMethod = Врап.ПолучитьТип("System.Net.Mail.SmtpDeliveryMethod").Network; //System.Net.Mail.MailMessage Представляет сообщение электронной почты Message = врап.СоздатьОбъект("System.Net.Mail.MailMessage"); // Для повторного использования получим тип System.Net.Mail.MailAddress который Представляет адрес отправителя или получателя электронной почты. MailAddressType= Врап.ПолучитьТип("System.Net.Mail.MailAddress"); Message.From = врап.СоздатьОбъект(MailAddressType,login); Message.To.Add(врап.СоздатьОбъект(MailAddressType,Кому)); Message.Subject = "Тема Тест отправки почты SSL"; // Тема сообщения Message.IsBodyHtml = true; //Получает или задает значение, показывающее, имеет ли основная часть почтового сообщения формат HTML Message.Body = "Тело Тест отправки почты SSL"; // Тело сообщения mail.Send(Message)//отправка Message.Dispose(); // Уничточим ресурсы связанные с Message. mail.Dispose(); // Уничточим ресурсы связанные с SmtpClient |
|||
221
Garykom
гуру
20.11.15
✎
18:05
|
(220) намного понятнее ))
т.е. в статьях кода нужно минимум, больше интересного текста )) ЗЫ а весь сложный код внизу под катом ЗЗЫ и без поллитры в нем не разобраться ЗЗЗЫ или без помочи автора |
|||
222
Serginio1
20.11.15
✎
18:15
|
(221) Это я понял. Какие примеры актуальны кроме
System.Threading.Thread.Sleep |
|||
223
Garykom
гуру
20.11.15
✎
18:20
|
(222)+ типовые которые средствами 1С плохо решаются и которые часто на форуме возникают
т.е. просто сканить форум на идеи/пожелания |
|||
224
Serginio1
20.11.15
✎
18:29
|
(223) Буду искать и сюда выкладывать
|
|||
225
oleg_km
20.11.15
✎
19:10
|
(221) Странно, я с минимальной помощью автора разобрался в основных возможностях его библиотеки. Может потому что никогда не зацикливался только на оном 1Се?
|
|||
226
Serginio1
20.11.15
✎
19:25
|
(225) У тебя было желание с этим разобраться и самое главное нужные знания.
Но вот я задумал как то вывести это в массы. На самом то деле код получаемый на 1С мало отличается от C#. |
|||
227
Garykom
гуру
20.11.15
✎
19:57
|
(225) не будем меряться, но как раз окромя 1С еще много других языков "неплохо" знаю, и еще кучу плохо знаю (типа питон и c++ с mfc)
тут в самом принципе дело понятности кода и метода его подачи в массы )) |
|||
228
Serginio1
21.11.15
✎
08:39
|
Может народ заинтересует Application.DoEvents
Обрабатывает все сообщения Windows, которые в данный момент находятся в очереди сообщений. Для обновления данных в циклах? https://msdn.microsoft.com/ru-ru/library/system.windows.forms.application.doevents(v=vs.110).aspx |
|||
229
Serginio1
21.11.15
✎
11:38
|
Можно показать обработку изображений
http://www.argc-argv.com/1_2011/article01.pdf |
|||
230
Serginio1
21.11.15
✎
12:09
|
Еще в 1С нет шифрования HMAC
http://billatnapier.com/security01.aspx https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.hmac(v=vs.110).aspx Функция ВычислитьHMAC(key,message) врап=новый COMОбъект("NetObjectToIDispatch45"); encoding=Врап.ПолучитьТип("System.Text.Encoding").ASCII; keyByte = encoding.GetBytes(key); hmacmd5 = Врап.СоздатьОбъект("System.Security.Cryptography.HMACMD5",keyByte); hmacsha1 = Врап.СоздатьОбъект("System.Security.Cryptography.HMACSHA1",keyByte); messageBytes = encoding.GetBytes(message); hashmessage = hmacmd5.ComputeHash(messageBytes); hashmessage2 = hmacsha1.ComputeHash(messageBytes); BitConverter=Врап.ПолучитьТип("System.BitConverter"); Strhashmessage=СтрЗаменить(BitConverter.ToString(hashmessage),"-",""); Strhashmessage2=СтрЗаменить(BitConverter.ToString(hashmessage2),"-",""); Сообщить(Strhashmessage); Сообщить(Strhashmessage2); КонецФункции // ВычислитьHMAC() Процедура HMACНажатие(Элемент) // Вставить содержимое обработчика. ВычислитьHMAC("hello","testing123") КонецПроцедуры |
|||
231
Garykom
гуру
21.11.15
✎
12:10
|
(229) угу авторизацию по фейсу из вебкамеры вместо ввода пароля очень по гиковски
ЗЫ только чтобы улыбку распознавало или еще какое действие (по требованию системы) а то фоткой статичной это обойдут... |
|||
232
oleg_km
21.11.15
✎
12:11
|
(229) Обработка изображений требует ActiveX в котором будет отображаться изображение, и заодно будут события мыши. В принципе все это есть в проекте Elisy, но даже с его продвижением это маловостребовано.
|
|||
233
Serginio1
21.11.15
✎
12:22
|
(232) Необязательно. Суть в сохранении в определенном формате например. Монохром.
|
|||
234
oleg_km
21.11.15
✎
12:25
|
(233) А просто обработка. Это да, повороты изменение разрешения. Да все это можно, согласен.
|
|||
235
Garykom
гуру
21.11.15
✎
12:40
|
(234) можно, только зачем?
практическое то применение какое? в учетной системе? |
|||
236
Serginio1
21.11.15
✎
12:45
|
(235) Например для хранения изображения товара. Выбрал картинку в любом формате, а в базу сохранил в jpeg.
Смысл собрать простые но нужные примеры. |
|||
237
Serginio1
21.11.15
✎
13:27
|
Кстати смотрю я на всякие вацапы, Skype а на самом деле легко сделать чат, рассылка сообщений 1С клиентам на основе SignalR http://metanit.com/sharp/mvc5/16.1.php
При этом можно сделать клиента на HTML с JS библиотекой, можно клиента на C# в том числе и для Android |
|||
238
Serginio1
21.11.15
✎
13:37
|
Просто делал Вацап для серверного варианта. ДСделал консольное приложение которое запускалось на компьютере 1С сервера и обмен из 1С к консольному приложению через пайпы, а из консоли к 1С через wеб сервер.
А без вацапа можно поднядь вэб сервис на Asp.Net и через него рассылать и получать сообщения |
|||
239
oleg_km
21.11.15
✎
13:45
|
(235) Мы храним изображения договоров, некоторых документов. Чтобы упорядочить объем данных автоматом приводим их к нужной цветности и разрешению. Да у меня уже мест в конфе, где используется .NET столько, что только перечисления хватит на экран. У меня уже пользователи взвоют, если я захочу отказаться от .NET
|
|||
240
Garykom
гуру
21.11.15
✎
14:11
|
(239) у нас сканер автоматом приводит ))
но насчет что много где можно применить это не спорю |
|||
241
Serginio1
21.11.15
✎
14:27
|
||||
242
Serginio1
21.11.15
✎
14:29
|
||||
243
Serginio1
21.11.15
✎
14:42
|
||||
244
Serginio1
21.11.15
✎
14:50
|
Вот пример использования xamarin в Visual Studio 2015
http://studyxnet.com.br/xamarin-forms/xamarin-e-signalr-chat-cross-plataform-parte-2/ |
|||
245
Serginio1
21.11.15
✎
15:45
|
(232) Кстати необязательно использовать ActiveX. Имея обертку над событиями мы можем использовать любую нетовскую форму. Кстати здесь http://catalog.mista.ru/public/238584/ есть пример использования формы.
public string СоздатьОкно() { // m_1cApp.AppDispatch.Сообщить("Привет из ВК"); // не работает для упрощения работы создань динамический объект ДинамикГК // выполняющий аналогичную фунцию IExtWndsSupport n; ГК.Сообщить("Привет из ВК", ГК.СтатусСообщения.Важное); n = (IExtWndsSupport)Object1C; IntPtr hwnd; n.GetAppMainFrame(out hwnd); // Создаем форму, устанавливаем нативные хэндлы и устанвливаем окно 1С владельцем нетовского окна var form = new Form1(); form.CreateControl(); SetOwner(form.Handle.ToInt32(), hwnd.ToInt32()); form.EventTo1C = Object1C as IAsyncEvent; form.Show(); return "Методы ВК выполнены!"; } |
|||
246
oleg_km
21.11.15
✎
15:58
|
(245) Ну мне все-таки нужно чтобы это была не просто форма, а контрол 1С с привязками, положенный на форму 1С. Все это эмулировать запарно. Проще написать один раз контрол и зарегистрировать его как ActiveX
|
|||
247
oleg_km
21.11.15
✎
16:01
|
(240) В одних случаях одна настройка, в других другая. А потом есть файлы полученные по эл. почте. Они тоже автоматом приводятся к нужному формату при загрузке в соответствующие документы.
Дак а работа с КОМ-портом. У меня и штрих-кодирование работает на .NET и обмен с GSM-модемом для получения и отправки СМС. И не парят проблемы с 1С-ными компонентами. |
|||
248
Gepard
21.11.15
✎
17:43
|
(24)
>>Проблема и достоинства .Net только в одном. Это JIT компиляция в ран тайме, ну и отсутствие инлайнинга. вообще-то онлайн компиляция не обязательна. Можно после установки скомпилировать и все. |
|||
249
Gepard
21.11.15
✎
17:48
|
(185) все что нужно для 1С - можно сделать на 1С или взять готовую компоненту.
Например: Проще взять проверенную компоненту для чтения ШК, чем использовать это, а потом вылавливать баги. К тому же помимо написания чего-то, это что-то надо еще и поддерживать. И тут сразу встает зарплатный вопрос: нужно искать не просто 1С-ника, а еще и знающего C#. При этом обычно и обычного толкового 1С-ника найти трудно. |
|||
250
oleg_km
21.11.15
✎
18:32
|
(249) У вас несколько пиететное отношение к 1С. То что у 1С миллионы тестеров, к сожалению, не приводит к тому что ее ПО становится качественнее. Чаще приходится сталкиваться с тем, что пользователи 1С мучаются, но жрут кактус. По поводу ШК: сначала мучился с штатной обработкой, потом с МС ActiveX, постоянно что-то отваливалось, нужно было перезапускать ПК. Сейчас уже два года пользуюсь ActiveX, написанном на дотнете и вообще проблем не знаю. Попутно освоил работу с GSM-модемом. А штатный есть объект по работе с модемом?
|
|||
251
oleg_km
21.11.15
✎
18:33
|
И тут сразу встает зарплатный вопрос: нужно искать не просто 1С-ника, а еще и знающего C#. При этом обычно и обычного толкового 1С-ника найти трудно.
А как же миф, 1Сники зарабатывают больше чем шарписты и явисты вместе взятые? |
|||
252
Garykom
гуру
21.11.15
✎
18:41
|
(251) просто их больше, 1С-ников
на них спрос у нас больше поэтому и зарабатывают но по C# скажем у нас в городе всего одна вакансия и знать там нужно побольше чем рядовому 1С-нику (к примеру я с трудом прохожу по знаниям) а зп сравнимая с рядовым (если по минимуму, а максимум вряд ли сразу дадут или от проектов будет зависеть) http://29.ru/job/vacancy/1499434.html |
|||
253
Serginio1
21.11.15
✎
22:27
|
(249) Поверь SerialPort проверенный класс аж до дыр.
Сейчас C# изучают везде. Просто непонятно откуда берут 1С ников. Знать только 1 язык очень скучно. |
|||
254
Garykom
гуру
21.11.15
✎
22:35
|
(253) сейчас английский тоже "изучают везде", как много ладно понимать/говорить, но хотя бы читать умеет?
|
|||
255
Garykom
гуру
21.11.15
✎
22:37
|
(254)+ т.е. уровень этого изучения C# в массе смешной
а 1С на реальных задачках (перенести/поправить данные) и(или) отчетах натаскиваются за полгода/год |
|||
256
Garykom
гуру
21.11.15
✎
22:38
|
(255)+ ну или сразу на сертификаты целенаправленно готовятся, это тоже неплохо
|
|||
257
oleg_km
21.11.15
✎
22:49
|
Тебя то как парят проблемы переемников? Станешь незаменимым
|
|||
258
Serginio1
21.11.15
✎
22:55
|
(255) И смешно, что постоянно ищут компоненту чтения ШК через COM порт.
Смотрим 156 и ничего такого сложного не видим. |
|||
259
MM
30.11.15
✎
09:34
|
А можно как-нибудь пройтись по коллекции без применения метода ПолучитьSafeArrayИзЭнумератора?
|
|||
260
Serginio1
30.11.15
✎
10:41
|
(259)
Случайно изменил в AssemblyInfo.cs [assembly: ComVisible(true)] и Для каждого Цикл перестал работать Который работает через EnumVariantImpl : IEnumVARIANT / Параметр ComVisible со значением FALSE делает типы в сборке невидимыми // для COM-компонентов. Если требуется обратиться к типу в этой сборке через // COM, задайте атрибуту ComVisible значение TRUE для этого типа. [assembly: ComVisible(false)] |
|||
261
Serginio1
30.11.15
✎
10:59
|
260+ В новой версии все исправлено. Дай адрес куда выслать
|
|||
262
MM
03.12.15
✎
10:39
|
Подумал на предложенным вами способом динамической компиляции через Emit, для добавления в 1С битовой операции, он показался мне слишком сложным. Разве не удобнее использовать конструкцию вроде:
строкаКласса = "namespace MMfor1C { public class BinOp { public static int XOR(int x, int y) {return x ^ y; } } }"; compiler = НетО.СоздатьОбъект("Microsoft.CSharp.CSharpCodeProvider"); parameters = НетО.СоздатьОбъект("System.CodeDom.Compiler.CompilerParameters"); parameters.ReferencedAssemblies.Add("System.dll"); parameters.ReferencedAssemblies.Add("System.Core.dll"); parameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll"); parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); parameters.GenerateInMemory = true; parameters.GenerateExecutable = false; parameters.IncludeDebugInformation = true; res = compiler.CompileAssemblyFromSource(parameters, строкаКласса); БинОп = НетО.ПолучитьТип("MMfor1C.BinOp"); //Сообщить(БинОп.XOR(3, 1)); NotifyFilters=НетО.ПолучитьТип("System.IO.NotifyFilters"); // нето.ПолучитьРеальныйОбъект(NotifyFilters.LastWrite) Сообщить(БинОп.XOR(NotifyFilters.LastAccess,БинОп.XOR(NotifyFilters.LastWrite,БинОп.XOR(NotifyFilters.FileName,NotifyFilters.DirectoryName))) ); Которая гораздо более гибкая и компактная. |
|||
263
Serginio1
03.12.15
✎
16:48
|
(262) Да только этот класс в отличие от DynamicMethod останется в памяти, а DynamicMethod подвергается сборке.
Так полностью можно исключить внешние сборки. Мало того сейчас на подходе релиз scripting api. Вот неплохое введение, всю серию статей можно смело читать, вредным не будет. UPD. И ещё статья вдогонку. То есть вместо IL можно использовать ScriptState state = CSharpScript.Run("NotifyFilters OR(NotifyFilters x, NotifyFilters y) { return x | y; }"); https://github.com/dotnet/roslyn/tree/master/src/Scripting/Core https://joshvarty.wordpress.com/2015/10/15/learn-roslyn-now-part-14-intro-to-the-scripting-api/ http://daveaglick.com/posts/compiler-platform-scripting Кстати вышло апдейт для VS 2015 http://rsdn.ru/forum/dotnet/6263620.flat |
|||
264
Serginio1
03.12.15
✎
16:55
|
(263) Я просто показал разные подходы. А какой удобнее тот и выбирай. Но с выходом scripting api будет самый удобный для использования динамических статических методов, в который можно засовывать динамики и использовать объекты 1С и использовать их как делегаты
|
|||
265
Serginio1
03.12.15
✎
16:59
|
Кстати а оно уже вышло
The Scripting API is finally here! After being removed from Roslyn’s 1.0 release it’s now available (for C#) in pre-release format on NuGet. To install to your project just run: https://www.nuget.org/packages/Microsoft.CodeAnalysis.Scripting/ Install-Package Microsoft.CodeAnalysis.Scripting -Pre |
|||
266
Serginio1
03.12.15
✎
18:10
|
||||
267
Serginio1
03.12.15
✎
18:20
|
||||
268
Masquerade
03.12.15
✎
23:17
|
(267)
Зачем ты так усердно тащишь всё это в 1С? 1С-никам это не нужно. Если будет нужно - уйдут туда, куда нужно. Зачем скрещивать телегу с ракетой? |
|||
269
Serginio1
04.12.15
✎
11:01
|
(268) Я сам 1С ник со стажем более 20 лет (учитывая 5 и 6)
Всегда была проблема расширения 1С за счет Com объектов, ВК. Но проблема в том, что это надо регистрировать. Кроме того обычно это обертки над существующими классами. И чем сложнее класс тем сложнее обертка. С появлением .Net 4.5 (хотя и в 2.0 можно делать, но 4.5 мощнее в частности поддержка params) использовать классы Net стало очень просто и удобно. Нужно иметь только один COM класс и через него использовать любые классы Net, в том числе и их события. Это просто значительно удобнее. Что касается Scripting API, то это аналог 1С ного выполнить и вычислить. Тебе не ну дополнительные сборки, весь скомпилированный код поддается сборке мусора. |
|||
270
Serginio1
04.12.15
✎
11:03
|
(260) Да таких как я мало. Но мы в тельняшках! Кому то мои исследования помогли. И я рад этому.
|
|||
271
Masquerade
04.12.15
✎
12:06
|
(269)
Нафига в 1С "использовать классы Net"?? Используй их в .NET! |
|||
272
oleg_km
04.12.15
✎
12:13
|
(271) Мальчик, не мешай, проходи мимо. Тебе не надо - и прекрасно. А мне уже без них вообще не обойтись. Кто-то и без 1С обходится и сидит как ты недоумевает: нафига им 1С, прекрасно в ехеле можно таблички создавать
|
|||
273
Serginio1
04.12.15
✎
12:29
|
(271) Для связи 1С с внешним миром. Ты плохо прочитал 269.
Тебе не нужно писать COM обертки, ВК итд. Регистрировать их, писать кучу лишнего кода. (272) Ничего. Пусть тему поддержит. |
|||
274
Serginio1
04.12.15
✎
14:06
|
Кстати можно выполнять скрипты на IronPython
http://metanit.com/sharp/tutorial/9.3.php |
|||
275
MM
04.12.15
✎
14:10
|
(274) это добро отдельно ставить надо?
Кстати в чистой вин7 сп1 нету NET.4 ( |
|||
276
Serginio1
04.12.15
✎
14:17
|
(275) Ну DDL то нужна.
Сейчас уже .Net 4.6.1 https://msdn.microsoft.com/en-us/library/ms171868(v=vs.110).aspx |
|||
277
Serginio1
04.12.15
✎
14:20
|
||||
278
MM
04.12.15
✎
14:29
|
Чего в этой компоненте не хватает, так это полноценного инсталятора, который сам запросит элевацию, зарегистрирует 32 и 64 COM и выкачает и поставит подходящий НЕТ, если его нет.
Не плохо бы msi, для доменной установки. |
|||
279
Masquerade
04.12.15
✎
14:42
|
(272)
-- А мне уже без них вообще не обойтись. Это от небольшого ума. |
|||
280
Музон Хиггса
04.12.15
✎
14:43
|
(274) Если кому-то захочется, тогда уж лучше так: https://github.com/mrprint/OnePy
|
|||
281
kyvv
04.12.15
✎
14:45
|
(279)На Мисте выяснили, что его вообще нет.
|
|||
282
kyvv
04.12.15
✎
14:49
|
(278) Согласен. Должна быть одна большая кнопка.
|
|||
283
Serginio1
04.12.15
✎
14:51
|
(278) Надо будет сделать на досуге. https://msdn.microsoft.com/ru-ru/library/ms173084(v=vs.90).aspx
Но посмотри на количество скачавших. (280) А чем лучше? (279) А как использовать, то чего в 1С нет? |
|||
284
kyvv
04.12.15
✎
14:54
|
Программисты что-то подобное давно используют, для остальных - неподъемный груз.
|
|||
285
MM
04.12.15
✎
14:56
|
(282) после нажатия на эту кнопку, остальное уже от разработчика конфигурации зависеть будет. Эта компонента не для пользователя.
|
|||
286
oleg_km
04.12.15
✎
14:56
|
(283)
>> (279) А как использовать, то чего в 1С нет? А применить к данному случаю Евангелие от Матфея гл.7 стих 6. Он все равно ничего не поймет, т.к. мнит себя большим умом |
|||
287
Музон Хиггса
04.12.15
✎
14:57
|
(283) > А чем лучше?
Более тесной интеграцией. |
|||
288
Serginio1
04.12.15
✎
15:03
|
(287) Там даже ReadMe нет. Посмотрел внутренности обертка через ВК.
А используя NetObjectToIDispatch45 и ExpandoObject делай, что угодно. Тем более, что Scripting API помощнее будет (266) |
|||
289
Музон Хиггса
04.12.15
✎
15:06
|
(288) Там и Python кода нет (публиковалось одноразово для потенциального работодателя). Затачивалось под совместимость с XP и 7.7. Потому и так.
|
|||
290
Serginio1
04.12.15
✎
15:21
|
(289) Я понял, что библиотека аналогичная Elisy.NetBridge4 только для выполнения кода питона.
NetObjectToIDispatch20 тоже работает с 2.0 и 7.7. Только я на неё честно говоря наплевал. Так напиши хотя бы ReadME думаю многих заинтересует кто знает питоновские библиотеки. Опубликуй статью на Инфостарте. |
|||
291
kyvv
04.12.15
✎
15:30
|
«Peter Gribanov, Technology evangelist in 1C». Статью на хабре здесь уже приводили (http://habrahabr.ru/company/1c/blog/267321/). В этой статье он сравнивает ЯР1С с JavaScript. Я вот и подумал, а не хочет ли 1С заменить свой язык на js? Или на Dart. V8 в 1С и у google. А если еще Nodejs присобачить.
|
|||
292
Masquerade
04.12.15
✎
15:34
|
(283)
-- А как использовать, то чего в 1С нет? Ты не поверишь, но лично я поступаю так: Беру другой инструмент/платформу и решаю задачу на ней. |
|||
293
Masquerade
04.12.15
✎
15:35
|
+
Зачем тащить в среду противоестественные для неё штуки? А потом решать связанные с этим проблемы, которые (поверьте) лежат даже не области кода. |
|||
294
Serginio1
04.12.15
✎
15:35
|
(291) Лучше TypeScript. Но есть куча трансляторов из манагед кода (.Net,Java) кода в JS для Вэб клиента.
(292) Ну и чем это лучше чем из 1С использовать классы .Net. Ты 1С интегрируешь через COM? |
|||
295
kyvv
04.12.15
✎
15:37
|
Кстати, ЯR1C for developer.
|
|||
296
Serginio1
04.12.15
✎
15:37
|
(293) А чем твое то решение лучше. Твой COM сервер тоже чуждая среда и в ней кроме автора мало кто подправит.
|
|||
297
Serginio1
04.12.15
✎
15:41
|
(295) И, что это за зверь?
|
|||
298
oleg_km
04.12.15
✎
15:41
|
(293) В чем противоествественность? Поддержка КОМ пока заявлена в 1С, сама 1С даже в типовых не гнушается ее использовать. Вот при взаимодействии с .NET еще ни разу не сталкивался, что что-то не работает. А вот с "нативными" объектами регулярно: то ИнтернетПочта сломается, то HTTPСоединение не фурычит.
|
|||
299
kyvv
04.12.15
✎
15:45
|
Встроенный язык 1с с английским синтаксисом для индусов.
|
|||
300
MM
04.12.15
✎
16:10
|
(298) Значит с помощью НЕТа почту и инет проверяете?
Или ещё для чего на практике используете? |
|||
301
oleg_km
04.12.15
✎
16:30
|
(300) Сейчас попробую все перечислить:
1) Отправка эл почты - в свое время обожглись на встроенной, когда после смены релиза вся наша почта встала, а 1С подтвердило ошибку и предложила ждать след. релиза платформы. 2) Очень много используется TCP/UDP 3) Сворачивание 1С на трей 4) Работа с КОМ: 4.1) Работа с GSM-модемом, отправка и прием СМС 4.2) Работа со сканером ШК полностью переведена на .NET 5) Рисование графики, карты, маршруты, места доставки. Через GDI+ рисуется в десятки раз быстрее чем посредством HTML+JS Ну и так по мелочевке дофига всего |
|||
302
oleg_km
04.12.15
✎
16:31
|
А, забыл, вместо HTTPСоединение изначально используем WebRequest. Требовались возможности, которых нет в HTTPСоединение, а теперь и не хочу связываться с 1С'ным. Его как я читаю, тоже периодически ломают.
|
|||
303
oleg_km
04.12.15
✎
16:38
|
А, еще, в трех местах используется System.IO.FileSystemWatcher - оповещение об изменении каталога для запуска различных обработок: обработки эл. почты, данных из СКУД и технологического журнала 1С.
Видите, уже всего и не упомнить |
|||
304
Serginio1
04.12.15
✎
16:41
|
(300) У меня еще 7 ка, а там куча всего.
Для 8 5ки изначально писал для доступа к Вэб сервисам по ws- протоколам. WhatsApp, SignalR. Кстати скоро выложу. Ну и по мелочи куча всего, чего в 1С нет или работает криво. |
|||
305
Masquerade
04.12.15
✎
17:00
|
(301)
Какой кошмар. Модемы. Карты. GDI туда же. АРХИТЕКТОРЪ! |
|||
306
Masquerade
04.12.15
✎
17:02
|
Всё, кроме "4.2) Работа со сканером ШК полностью переведена на .NET" прекрасно реализуется отднльно стоящим web-сервисом, доступным через http. Со всеми плюшками и преимуществами.
|
|||
307
Masquerade
04.12.15
✎
17:04
|
Забегая вперед, не надо только напрягаться насчет фантастических историй про сканера ШК. У меня их 150 штук. И без .NET
|
|||
308
MM
04.12.15
✎
17:05
|
(306) Сворачивание в трей тоже веб-сервисом?
|
|||
309
Masquerade
04.12.15
✎
17:05
|
(301)
-- 4.1) Работа с GSM-модемом, отправка и прием СМС У вас одна база что-ли?? |
|||
310
Masquerade
04.12.15
✎
17:05
|
(308)
-- Сворачивание в трей тоже веб-сервисом? Когда коту делать нечего - он знаете что делает?? |
|||
311
Serginio1
04.12.15
✎
17:25
|
(306) И в чем премущества? Это как штаны через голову надевать. Единственно, что такой подход нужен для реализации событий на сервере.
(307) Но через COM или Native API которая тоже чужеродна. (310) Ну так можно обо всем говорить. |
|||
312
Serginio1
04.12.15
✎
17:51
|
(310) Начал я эту разработку с того, что мне нужно было прикрутить Вэб сервис на ws- протоколах. С кучей классов с обширной иерархией. Писать отдельно для каждого класса обертку муторно, поэтому и сделал обертку над нетовскими классами. Теперь использовать неподдерживаемые вэб сервисы (в том числе с передачей данных через soap:Header) стало легко при этом есть куча примеров использования на C#.
И легко использовать классы NetObjectToIDispatch45 также как и встроенные в 1С классы для работы с Вэб сервисами, HTTP итд. |
|||
313
oleg_km
04.12.15
✎
18:58
|
(307) Да если на то пошло и сканер ШК можно реализовать локальным http сервисом. Вон полно шлюзов RS232 - TCP. Ты что доказать хочешь? Что правильно не выходить за возможности платформы? Но твои сканеры ШК уже используют ВК. Или правильные ВК - это только ВК, сделанные 1С'ом? Тоже сомнительно. Или все что ты считаешь ненужным - не нужно никому? Ну да, такая активная жизненная позиция.
|
|||
314
Serginio1
05.12.15
✎
09:21
|
(306) Кстати реально была ситуация, когда на складе была плохая связь. А базу перенесли в ДатаЦентр и работали с ней через RDP. Порты прокинули, но все это дело ужасно тормозило.
Мало того, печть по понятным причинам тоже жутко тормозила. А надо было печатать этикетки на огромное количество товаров. Выход такой. Сделал пустую базу, которая соединялась с реальной по TCP/IP через VPN c реальным сеансом. То есть шк считывались с локальной базы и по TCP/IP передавалась в реальную базу. При печати с реалного сеанса передавались только данные, а печатная форма создавалась на локальной базе. И все залетало. |
|||
315
Garykom
гуру
05.12.15
✎
09:34
|
(308) а нафейхуа?
если нету $ на отдельный "типа сервер", зачем им трей? в смысле не вижу смысла держать 1С-ку свернутой в трей, ладно еще держать там свою программку/агента которая и будет что нужно делать в т.ч. запуская 1с когда нужно (com или ole это уже по вкусу) |
|||
316
Serginio1
05.12.15
✎
09:55
|
314 + кстати http://catalog.mista.ru/public/238584/ там есть пример обмена по TCP/IP со сжатием данных для уменьшения трафика
|
|||
317
Garykom
гуру
05.12.15
✎
10:37
|
(314) когда гланды не через рот удаляют это конечно интересно... познавательно... но нафига?
в данном случае чем стандартный РИБ плох? специально настроенный чтобы не было лишнего? |
|||
318
Serginio1
05.12.15
✎
10:43
|
(317) База данных огромная. 60 миллионов записей по прайсам постоянно обновляющееся итд.
РДП в данном случае это как раз удаление гланд через одно место. |
|||
319
Garykom
гуру
05.12.15
✎
10:55
|
(318) так может надо было сделать чтобы .net вообще без tcp/ip (связи) работал?
свой принцип гравитационной или нейтринной изобрести? :) почему просто канал не наладить то было? до этого "датацентра" а то получилось стандартно, сначала создаем себе трудности чтобы потом героически их преодолевать |
|||
320
Serginio1
05.12.15
✎
11:17
|
(319) Склад находился в неудачном месте. Потом переехали на другой склад. Но решение нужно было сейчас.
Да суть и не в этом. Решение через TCP/IP на самом деле ооочень простое решение. Ничем не отличается от Вэб сервисов, только с обменом в обе стороны. Ты же их не считаешь чем то героическим. Обычная рутина. Кстати и сейчас решение формирование печатной формы на сервере, и передача её на клиента для печати огромных данных тоже не является оптимальным решением при работе через HTTP. Скоро выложу обмен сообщений,любых файлов по HTTP используя SignalR (WebSocket,Long polling). Можно использовать в браузере, в 1С, а мобильных девайсах (пока для андроида). По сути это аналог обмена по Tcp/Ip Знаю, что многие используют WhatsAp. Как ты думаешь такое решение нужно? |
|||
321
Garykom
гуру
05.12.15
✎
12:29
|
(320) телеграм нужно, а не вацап
|
|||
322
Serginio1
05.12.15
✎
12:32
|
(321) Я предлагаю независимое решение использовании связки Asp.Net + Nancy c byntuhfwbtq клиента в 1С, Web и мобильные приложения для связи клиентов 1С. В том числе и для мобильных клиентов. И не зависеть не от кого.
|
|||
323
Garykom
гуру
05.12.15
✎
12:35
|
А SignalR это вообще нечто... аналог tcp/ip протокола реализованный поверх http...
|
|||
324
Serginio1
05.12.15
✎
12:46
|
(323) И значительно проще в использовании.
http://metanit.com/sharp/mvc5/16.1.php |
|||
325
2mugik
05.12.15
✎
15:45
|
(0)хотелось бы попробовать, где можно скачать первоначальные файлы с обертками?
|
|||
326
Serginio1
05.12.15
✎
16:11
|
http://catalog.mista.ru/public/238584/
или в понедельник вышлю на почту |
|||
327
Serginio1
07.12.15
✎
10:31
|
(325) Гугл не пропускает
|
|||
328
Serginio1
07.12.15
✎
10:32
|
||||
329
Пикчер
15.12.15
✎
10:29
|
(301) не встречалась компонента прослушивания порта и отправки пакетов по udp?
|
|||
330
oleg_km
15.12.15
✎
10:59
|
(329) Что значит встречалась? Я ее сам за час написал. Вернее, если допустим нужно просто в синхроне например в фоновом задании читать и отвечать, то там даже компонент не нужен, кроме (328), вот код объекта СокетДатаграммы:
Процедура Инициализировать(Порт = 0) Экспорт Плагин = БиблАП.ПолучитьNET(); Сокет = Плагин.NewObj(Плагин.GetType("System.Net.Sockets.UdpClient", "System"), Порт); Запрос = Неопределено; ТаймАут = 10000; Кодировка = "windows-1251"; КонецПроцедуры Процедура Закрыть() Экспорт Сокет.Close(); КонецПроцедуры Функция ПринятьДанные(Адрес = Неопределено) Экспорт Если Запрос = Неопределено Тогда Запрос = Сокет.BeginReceive(Неопределено, Неопределено); КонецЕсли; мсДанные = Неопределено; Если Запрос.AsyncWaitHandle.WaitOne(ТаймАут) Тогда текАдрес = Плагин.NewObj(Плагин.GetType("System.Net.IPEndPoint", "System"), 0, 0); мсДанные = Сокет.EndReceive(Запрос, текАдрес); Запрос = Неопределено; Если ТипЗнч(мсДанные) = Тип("Число") Тогда ВызватьИсключение "СокетДатаграммы. Чтение данных"; КонецЕсли; Адрес = Новый Структура("Хост, Порт", текАдрес.Address.ToString(), текАдрес.Port); КонецЕсли; Возврат мсДанные; КонецФункции Процедура ПередатьДанные(Хост, Порт, мсДанные) Экспорт Сокет.Send(мсДанные, мсДанные.Length, Хост, Порт); КонецПроцедуры |
|||
331
Пикчер
15.12.15
✎
11:06
|
(330) в том то и дело, что должно генериться внешнее событие для 1с, когда на прослушиваемый порт приходит пакет
|
|||
332
Пикчер
15.12.15
✎
11:30
|
(331) + нашел рабочий код с ExternalEvent
|
|||
333
Serginio1
15.12.15
✎
11:53
|
(332) Так Динамическая компиляция в том числе и генерирут обертку для внешних событий
ПодключитьВнешнююКомпоненту("AddIn.GlobalContext1C"); объект = СоздатьОбъект("AddIn.GlobalContext1C"); ГлобальныйКонтекст= объект.ГлобальныйКонтекст; ОберткаСобытий= врап.СоздатьОберткуДляСобытий77(ОбертываемыйОбъект,ГлобальныйКонтекст); |
|||
334
Serginio1
17.12.15
✎
10:05
|
(331) Посмотри 1C Messenger для отправки сообщений, файлов и обмена данными между пользователям
SignalR это аналог udp только по HTTP со всеми вытекающими. Плюс простота программирования. |
|||
335
Serginio1
18.12.15
✎
10:37
|
Можно повторно использовать скомпилированную сборку например
использовано здесь 1C Messenger для отправки сообщений, файлов и обмена данными между пользователям Процедура ПолучитьОбертку(NetОбъект) // Использовал методы .Net классов для того, что бы показать технику использования обертки .Net классов Если не Объект.ИспользоватьСкомпилированнуюСборку Тогда ОберткаСобытий=врап.СоздатьОберткуДляСобытий(NetОбъект); возврат КонецЕсли; //Так как сборка компилируется в реальную DLL, то если сборка SignalRHelloClient.dll не менялась, то и обертку событий компилировать не нужно // Используем ТипКакОбъект для получения методов Type // По умолчанию для типа используются статические методы Тип=Врап.ТипКакОбъект(NetОбъект.GetType()); ИмяФайлаСборки = тип.Assembly.Location; Path=Врап.ПолучитьТип("System.IO.Path"); Каталог = Path.GetDirectoryName(ИмяФайлаСборки); ТипСтрРеальногоОбъекта = тип.FullName; // Применим метод ОбернутьЛюбойОбъект для получения методов String // Так как String возвращается без обертки ИмяКласса = "ВрапперДля" + Врап.ОбернутьЛюбойОбъект(Врап.ОбернутьЛюбойОбъект(ТипСтрРеальногоОбъекта).Replace(".", "_")).Replace("+", "_"); OutputAssembly = Path.Combine(Каталог, ИмяКласса) + ".dll"; Если Врап.ПолучитьТип("System.IO.File").Exists(OutputAssembly) Тогда ТипОбертки=Врап.ПолучитьТипИзСборки(ИмяКласса,OutputAssembly); // У типа ТипОбертки есть статический метод СоздатьОбъект который принимает обертываемый объект Попытка объектОбертка=ТипОбертки.СоздатьОбъект(Врап,NetОбъект); Исключение врап.ВывестиПоследнююОшибку() КонецПопытки; // Нужно получить COM объект из обертки ОберткаСобытий=Врап.ПолучитьРеальныйОбъект(объектОбертка); Иначе // Нет скомпилированной DLL ОберткаСобытий=врап.СоздатьОберткуДляСобытий(NetОбъект); КонецЕсли; КонецПроцедуры // ПолучитьОбертку() |
|||
336
Serginio1
30.12.15
✎
11:14
|
Кстати посмотрел многих заинтересовала Строка в дату
http://catalog.mista.ru/public/434345/ Может кто подскажет, что может заинтересовать людей, то что нет в 1С, но есть в .Net |
|||
337
Garykom
гуру
30.12.15
✎
11:31
|
(336) заинтересовало потому что тема нужная, но вот реализация все равно сложновата (хотя надо признать уже намного понятнее статья вышла)
для 1С-ников нужно нечто ТекДата = Строка2Дата(ТекСтрока, ТекФормат); где ТекФормат = "ДД-ММ-ГГГГ" или ТекФормат="ДД.ММ.ГГ" |
|||
338
Garykom
гуру
30.12.15
✎
11:34
|
(337)+ т.е. скрывать всё длинное и непонятное под спойлеры и(или) упрощать по максимуму вызовы из 1С
т.е. подключил ВК 1-2 строками, и просто вызвал метод и все ЗЫ по поводу что нужно, недавно куча запросов была на сохранение табличных документов в картинку |
|||
339
Serginio1
30.12.15
✎
11:39
|
(338) Ну сделать, то функцию не проблема. Кстати ничем не сложнее ComОбъект
|
|||
340
Garykom
гуру
30.12.15
✎
11:42
|
(339) это смотря кому "не проблема"
|
|||
341
Serginio1
30.12.15
✎
11:51
|
(340) Причесать не проблема. Проблема понять, что причесывать. Например
БиблиотекаNET = новый COMОбъект("NetObjectToIDispatch45"); DateTime = БиблиотекаNET.ПолучитьТип("System.DateTime"); КлассCultureInfo = БиблиотекаNET.ПолучитьТип("System.Globalization.CultureInfo"); ОбъектCultureInfo = БиблиотекаNET.СоздатьОбъект(КлассCultureInfo, "ru-Ru"); DataTimeStyles = БиблиотекаNET.ПолучитьТип("System.Globalization.DateTimeStyles"); Дата = DateTime.ParseExact ( "10 февраля 1978", "dd MMMM yyyy", ОбъектCultureInfo, DataTimeStyles.None ); Не проблема завернуть в функцию. С этим справится не только взрослый, но даже |
|||
342
Garykom
гуру
30.12.15
✎
11:54
|
(341) так это нужно знать c# чтобы "правильно завернуть"
иначе при заворачивания ничего не будет работать |
|||
343
Serginio1
30.12.15
✎
12:00
|
(342) Знать надо .Net. Есть документация например https://msdn.microsoft.com/ru-ru/library/system.datetime.parseexact(v=vs.110).aspx
Есть Google, форумы где можно найти решение проблемы. Главное задать вопрос и многие помогут. Проблема в том, что никто и задавать то вопросы не хочет, а если даешь готовое решение, то не берут, но кактус то едят |
|||
344
Garykom
гуру
30.12.15
✎
18:06
|
(343) кактус невкусный можно не жуя проглотить быстро, а на изучение .net сколько времени уйдет?
|
|||
345
Garykom
гуру
30.12.15
✎
18:07
|
(344)+ а кто .net уже изучил тому (0) нафиг не сдалось, так как легко в шаблон ВК что нужно вставит
или другим способом извратится при желании |
|||
346
Serginio1
30.12.15
✎
19:16
|
(345) Я делал эту разработку, для того что бы использовать вэб сервисы неподдерживаемые 1С, где была куча классов и оборачивать их в COM было муторно. Кроме того динамическая компиляция свойств просто экономит кучу времени, где это надо делать вручную.
Еще раз. Многие пользуются COM объектами просто копируя примеры. Использование .Net будет больше, когда этих примеров будет тоже куча. Но к сожалению пока очень мало, кто использует эту разработку. Поэтому я и прилагаю силы для её рекламы. Кстати 1C Messenger для отправки сообщений, файлов и обмена данными между пользователям тоже многих заинтересовал http://catalog.mista.ru/public/434771/ |
|||
347
Serginio1
30.12.15
✎
19:17
|
Кроме того динамическая компиляция событий
|
|||
348
Serginio1
30.12.15
✎
19:22
|
346 +
Добавил в 1C Messenger рабочий вариант для Android на Xamarin. Проверял на эмуляторе. На IOS не проверял. Из пакетов убрал Xamarin.Forms.2.0.0.6490 он 20 мб |
|||
349
Serginio1
21.01.16
✎
13:58
|
Поигрался со Scripting-APIhttps://github.com/dotnet/roslyn/wiki/Scripting-API-Samples#exprstrong
Создал сборку. Проинсталировал Install-Package Microsoft.CodeAnalysis.Scripting Создал класс namespace ScriptApiDlls { public class КлассДляВычесленияВыражений { public static Microsoft.CodeAnalysis.Scripting.ScriptOptions Опции { get { return Microsoft.CodeAnalysis.Scripting.ScriptOptions.Default; } } public static object Вычислить(string Код, Microsoft.CodeAnalysis.Scripting.ScriptOptions опции ) { return Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync(Код, опции).Result; } } } |
|||
350
Serginio1
21.01.16
✎
14:01
|
Теперь можно на примере регулярных выражений создать делегат и использовать его в Replace? например для того, что бы все слова начинались с заглавной буквы
врап=новый COMОбъект("NetObjectToIDispatch45"); Match=Врап.ПолучитьТипИзСборки("System.Text.RegularExpressions.Match","System.dll"); Regex=Врап.ПолучитьТип("System.Text.RegularExpressions.Regex"); КлассДляВычесленияВыражений=Врап.ПолучитьТипИзСборки("ScriptApiDlls.КлассДляВычесленияВыражений",ПутьКДлл+"ScriptApiDlls.dll"); ScriptOptions=КлассДляВычесленияВыражений.Опции; Слова = "надо заменить все первые буквы в словах на заглавные"; pattern = "\w+"; // MatchEvaluator evaluator = (MatchEvaluator)ПолучитьДелегат(); scr = ScriptOptions.Default.WithReferences(Врап.ТипКакОбъект(Match).Assembly) .WithImports("System", "System.Text.RegularExpressions"); ТекстДелегата = "return (MatchEvaluator)((match) => |{ | string x = match.Value; |// Если первая буква в нижнем регистре то заменяем на заглавную |if (char.IsLower(x[0])) |{ | // Capitalize it. | return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1); |} |return x; | | });"; evaluator = КлассДляВычесленияВыражений.Вычислить(ТекстДелегата,scr); Сообщить(Regex.Replace(Слова, pattern, evaluator)); |
|||
351
Serginio1
21.01.16
✎
14:02
|
В итоге получаем
Надо Заменить Все Первые Буквы В Словах На Заглавные |
|||
352
Serginio1
21.01.16
✎
14:03
|
Может кто то придумает более интересные примеры и применение делегатов для часто используемых вычислений
|
|||
353
Serginio1
21.01.16
✎
15:04
|
Кстати практический пример. На инфостарте редактор схлопывает span с пробелами. Я не большой знаток регкспов по этому у меня вопрос.
Вот делегат который заменяет <span> </span на nbsp; по количеству пробелов MatchEvaluator ПолучитьДелегатДляЗкменыПробела() { return (MatchEvaluator)((match) => { var группа = match.Groups[1]; int размерГруппы = группа.Value.Length; if (размерГруппы == 0) return ""; return string.Concat(Enumerable.Repeat(@" ", размерГруппы)); }); } |
|||
354
Serginio1
21.01.16
✎
15:07
|
Сам регекс такой
string words =textBoxOrig.Text; string pattern = @"<span>( +)</span>"; MatchEvaluator evaluator = (MatchEvaluator)ПолучитьДелегатДляЗкменыПробела(); textBoxEval.AppendText(Regex.Replace(words, pattern, evaluator)); |
|||
355
Serginio1
22.01.16
✎
11:34
|
Поизвращался еще с делегатами объекта
string ПолучитьСтрокуКласса() { var res = @" class ClassTest { string строка; public Func<string> ЗаданнаяСтрока; public ClassTest(string Строка) { строка = Строка; ЗаданнаяСтрока = () => строка; } public static Func<string> ПолучитьДелегатОбъекта(string Строка) { var obj = new ClassTest(Строка); return obj.ЗаданнаяСтрока; } } return new Func<string, Func<string>>(ClassTest.ПолучитьДелегатОбъекта); "; return res; } private void button2_Click(object sender, RoutedEventArgs e) { var делегат = (Func < string, Func< string >> )ClassTest.testReturnDelegate(); textBoxEval.AppendText(делегат("Тестовая строка")()+Environment.NewLine); var scr = Microsoft.CodeAnalysis.Scripting.ScriptOptions.Default .WithImports("System"); var Скрипт = Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.Create(ПолучитьСтрокуКласса(), scr); // Скрипт.ContinueWith("return new Func<string, Func<string>>(ClassTest.ПолучитьДелегатОбъекта);"); var obj = делегат = (Func<string, Func<string>>)(Скрипт.CreateDelegate()().Result); textBoxEval.AppendText(делегат("Тестовая строка 2")() + Environment.NewLine); } } |
|||
356
Serginio1
22.01.16
✎
17:23
|
Хотя можно вызвать и
var result = Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync(ПолучитьСтрокуКласса(), scr).Result; делегат = (Func<string, Func<string>>)result; textBoxEval.AppendText(делегат("Тестовая строка 2")() + Environment.NewLine); |
|||
357
Garykom
гуру
22.01.16
✎
18:15
|
(356) Не подскажешь как на .net с чужими окнами работать?
К примеру отслеживать текст в них? Хочу мини расширение для конфигуратора штатного, по шорткату чтобы интеллсенсе свой открывался |
|||
358
Garykom
гуру
22.01.16
✎
18:28
|
(357)+
А еще можно ли в 1С 8 сделать динамическую компиляцию "кода 1С"? Смысл сделать свою веб БСП. Нечто вроде вызова в коде "ПодключитьМодуль("МойМодуль");" И после этого можно вызывать процедуры и функции из "МойМодуль" На языке 1С понятно тело модуля и процедур/функций. Просто можно удобно сделать тогда и универсально для разных платформ и даже разных конф типовых готовые процедуры/функции сгруппированные по модулям. |
|||
359
Карупян
22.01.16
✎
18:33
|
(357) хочешь свой опенконф написать?
|
|||
360
Garykom
гуру
22.01.16
✎
18:41
|
(359) нафуя? мне просто анализа кода и подстановки нужного хватит
или банальной вставки шаблонов тех же типовых циклов или прочих типа получение данных запросом и т.д. |
|||
361
Garykom
гуру
22.01.16
✎
18:43
|
(360)+ логично к примеру что если пишу
"Для Каждого ТекСтр Из ТЗ Цикл" то после ентер оно "КонецЦикла;" само вставило ниже и пустую строку еще оставило куда курсор встал автоматом )) |
|||
362
Garykom
гуру
22.01.16
✎
18:45
|
(361)+ хотя да это одна из возможностей опенконфа для 1С 7.7
кроме прочей кучи плагинов |
|||
363
oleg_km
22.01.16
✎
19:47
|
(357) Это вроде как hook
Вот мой класс, который отслеживает активизацию всех окон в 1С, может на основе свое создашь: using System; using System.Collections; using System.Runtime.InteropServices; using System.Diagnostics; namespace _1CAddInNET { [ComVisible(true)] [ProgId("1CAddInNET.HookWnd")] [ClassInterface(ClassInterfaceType.AutoDispatch)] [Guid("193E58D3-E598-4AA5-B624-0770A90AEBBD")] public class HookWnd { private const int HCBT_ACTIVATE = 5; private const int SW_HIDE = 0; private const int WH_CBT = 5; private ArrayList hookID; [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHook, WinCallbackProc lpfn, IntPtr hMod, int dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool IsWindowVisible(IntPtr wParam); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool ShowWindow(IntPtr wParam, int nMode); private delegate IntPtr WinCallbackProc(int nCode, IntPtr wParam, IntPtr lParam); private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode == HCBT_ACTIVATE) if (IsWindowVisible(wParam)) ShowWindow(wParam, SW_HIDE); return IntPtr.Zero; } public HookWnd() { hookID = new ArrayList(); } public void SetHook() { foreach (ProcessThread curThread in Process.GetCurrentProcess().Threads) hookID.Add(SetWindowsHookEx(WH_CBT, HookCallback, IntPtr.Zero, curThread.Id)); } public void DoneHook() { foreach (IntPtr curHook in hookID) UnhookWindowsHookEx(curHook); } } } |
|||
364
Garykom
гуру
22.01.16
✎
19:56
|
(363) думал проще только через
[DllImport("user32")] public static extern int FindWindow(string ClassName,string lpWindowName ); и даже без хуков на клаву, хотя с ними лучше будет |
|||
365
Serginio1
22.01.16
✎
20:15
|
(364) Можно пройтись по элементам
http://rsdn.ru/forum/pda/2953653.1 |
|||
366
Serginio1
22.01.16
✎
20:16
|
Кроме того в ТестВК есть поиск окна 1С 7.7 и установки видимости
|
|||
367
Garykom
гуру
22.01.16
✎
20:18
|
(365) угу только вроде 1с 8 на вин мобайл не того ;)
|
|||
368
Serginio1
22.01.16
✎
20:22
|
(367) Win.Api то одинаковый. Посмотри как и ищется нужный элемент
public static bool isChecked(IntPtr hwndCheck) { int BM_GETCHECK = 240; int BST_CHECKED = 1; int BST_UNCHECKED = 0; IntPtr res = Win32Window.SendMessage(hwndCheck, BM_GETCHECK, 0, 0); // Если галочка стоит. if ((int)res == BST_CHECKED) { return true; } // Если галочка не стоит. if ((int)res == BST_UNCHECKED) { return false; } return false; } public static void SetWLANState(bool state) { //SetWifi(true); // WiFiAdapter(). String ExeName = "ctlpnl.exe"; String CmdLine = "\\Windows\\WLanPower.cpl,0"; ProcessInfo pi = new ProcessInfo(); // CreateProcess(ExeName,CmdLine , pi); Int32 INFINITE; unchecked { INFINITE = (int)0xFFFFFFFF; } if (pi == null) pi = new ProcessInfo(); byte[] si = new byte[128]; CreateProcess(ExeName, CmdLine, IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, si, pi); // Thread.Sleep(1000); IntPtr hWnd = Win32Window.FindWindow(null, "Set WLAN Power"); while (hWnd == IntPtr.Zero) { Thread.Sleep(100); hWnd = Win32Window.FindWindow(null, "Set WLAN Power"); } IntPtr gg; IntPtr OKHandle = IntPtr.Zero; IntPtr WLHandle = IntPtr.Zero; IntPtr CancelHandle = IntPtr.Zero; // MessageBox.Show(Win32Window.GetWindowText(hEdit)); gg = Win32Window.GetWindow(hWnd, GW.CHILD).Handle; while (gg != IntPtr.Zero) { if (Win32Window.GetWindowText(gg) == "OK") OKHandle = gg; if (Win32Window.GetWindowText(gg) == "WirelessLAN ON") WLHandle = gg; if (Win32Window.GetWindowText(gg) == "Cancel") CancelHandle = gg; // MessageBox.Show(Win32Window.GetWindowText(gg)); // MessageBox.Show(gg.Text); gg = Win32Window.GetWindow(gg, GW.HWNDNEXT).Handle; // gg = Win32Window.GetWindow(gg, GW.CHILD).Handle; } // MessageBox.Show(isChecked(WLHandle).ToString()); if (isChecked(WLHandle)!=state) { emulPress(WLHandle); emulPress(OKHandle); } else emulPress(CancelHandle); WaitForSingleObject(pi.hProcess, INFINITE); } |
|||
369
Serginio1
22.01.16
✎
20:55
|
А вообще тебе проще обратиться к orefkov
а вин апи перевести на C# не проблема |
|||
370
Garykom
гуру
22.01.16
✎
20:57
|
(368) да как бы в курсе как через вин апи, делал на лазарусе прогу по управлению другой прогой
вдруг думал на нет фреймворке что то уже изобрели |
|||
371
Garykom
гуру
22.01.16
✎
20:57
|
(369) не будем отвлекать товарища, а то никогда снегопата не дождемся
|
|||
372
Serginio1
22.01.16
✎
21:04
|
(370) Ну интероп функций можно посмотреть здесь
http://www.pinvoke.net/default.aspx/user32.getwindow |
|||
373
Garykom
гуру
23.01.16
✎
14:23
|
(372) бесполезно (почти) смотреть
похоже 1С очень не понравился openconf и в 8-ке сделано многое чтобы низзя было так просто наваять нечто подобное поэтому и снегопату плохо )) и если в 1С захотят оно никогда не взлетит |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |