Имя: Пароль:
1C
1С v8
1С,Linux,Excel,Word,OpenXML,Net Core
,
0 Serginio1
 
22.08.16
14:09
Это продолжение статей
Кроссплатформенное использование классов .Net в 1С через Native ВК.
Кроссплатформенное использование классов .Net в 1С через Native ВК II
С того времени я добавил использование расширений Linq.
В этой статье я коснусь практического использования моей компоненты. А именно кроссплатформенной работой с файлами Excel и Word c помощью OpenXML и NetStandart.

Собственно ради чего эта разработка и задумывалась.
В своих статьях я хочу донести прежде всего до 1С, что есть кроссплатформенная замена COM с помощью NetStadart.
Но к моему большому сожалению пока данный подход никого не интересует. Привлекает внимание только Руслиш.
Если у кого будут идеи чем можно привлечь внимание к замене COM пишите. Буду только рад.

Статьи можно посмотеть здесь
https://habrahabr.ru/post/308216/
http://catalog.mista.ru/public/544232/

Исходники здесь https://yadi.sk/d/jRSHEA19svgrn
1 Garykom
 
гуру
22.08.16
14:20
Засунь свои изделия в nuget (или еще какой аналог пакетной системы) или хотя бы в https://chocolatey.org/packages
2 trdm
 
22.08.16
14:23
Песец.
Отстрелить пальцы только за неумное чередование кирилицы и латиницы.
// Строки хранятся отдельно
// В ячейках хранится индекс
pt=ъ(ъ(workbookPart.in(SharedStringTablePart.ПолучитьСсылку())).GetPartsOfType());
sstpart = ъ(pt.First());
sst = ъ(sstpart.SharedStringTable);
ОбщиеСтроки=ъ(sst.ChildElements);

workbook = ъ(workbookPart.Workbook);

// Получим список страниц
sheets = ъ(ъ(workbook.in(Sheet.ПолучитьСсылку())).Descendants());
sheets=ъ(Врап.ПолучитьЭнумератор(sheets.ПолучитьСсылку()));

.................
нафейхоа так делать?

Я и в прямых запросах забадываюсь прыгать с кирилицы на латиницу и писать "SELECT спр.ТипТовара as ТипТовара FROM $Справочник.Номенклатура as спр(NOLOCK)".
3 Serginio1
 
22.08.16
14:25
Засуну. Пока времени нет. У меня дел по горло.

А Nuget то зачем? Он в 1С то не применяется
Вот на  github имеет смысл
(2) Еще раз там есть возможность использования синонимов. Никто тебе не запрещает их использовать.

Мне же лениво писать синонимы
4 Gary417
 
22.08.16
14:26
А слово "Энумератор" это кто так переводил интересно?
5 Gary417
 
22.08.16
14:27
прям всплывает в голове "Иф а=1 тзен б=2 эндиф"
6 Serginio1
 
22.08.16
14:27
(2)

Ну, а кроме Русслиша, неинтересно?
1. Использование классов .Net в нативе
2. Кроссплатформенность как замена COM
3. Использование сахара как методы расширения, вывод типа в дженерик методах, асинхронное программирование?

(4) Я!
7 Gary417
 
22.08.16
14:30
(6) кошмар какойто, если уж писать по русски то надо писать по русски, всмысле по одинесному. а не делать транслит ради русских букв
8 Garykom
 
гуру
22.08.16
14:31
(3) Пофиг что но чтобы установка всего поделия для работы и запуска примеров из коробки была как: "apt-get install NetObjectToIDispatch45"
9 trdm
 
22.08.16
14:31
(6) просто нет необходимости. Я как-то Qt обхожусь. Из него ком-объект сделать - как 2 пальца обоссать.
Я им МС-офисные документы читаю/пишу.
10 Serginio1
 
22.08.16
14:33
(7) На вас не угодишь. Enumerator перечислитель. Народу это не понравилось.
А кроме руслиша что понравилось, что нет?
(9) На Линукс?
11 Gary417
 
22.08.16
14:42
(10) идея хорошая, но я даже не думаю гдето реализовывать т.к. когда уйду в другой отдел мой преемник очумеет это поддерживать
12 Gary417
 
22.08.16
14:43
(11) *реализовывать - в смысле использовать
13 Serginio1
 
22.08.16
14:48
(11) Если 1С встроет поддержку как COM думаю не очумеет.
Суть то та же. Как b при работе с Вэб сервисамию
Есть пространство имен, есть типы, объекты. Тот же Руслиш.
В чем сложность?
14 Gary417
 
22.08.16
14:49
(13) сложность что не все C# знают
15 Gary417
 
22.08.16
14:49
и вообще знание .Net не подразумевается на вакансиях 1С
16 Serginio1
 
22.08.16
14:53
(15) А многие знают COM или Вэб сервисы?
Нужно знать методы классов.
А они, что в COM, что в вэб сервисах или .Net классов одинаковы.
Есть описание методов. Кроме того есть великий и могучий Copy-Paste
Единственоо в .Net классах есть дженерики.
17 Gary417
 
22.08.16
14:59
(16) <Кроме того есть великий и могучий Copy-Paste>

За который отрывать надо руки

мне очень нравится древний пример из книг по программированию сети где написано чёто типа

while (!connection.establish)
{
wait(0);
}

====

и пипец, запускаешь какуюнить программу где интернета нет, и всё, вся система в ступоре....потомучто ктото скопипастил пример из книжки
18 Garykom
 
гуру
22.08.16
15:00
(17) Некоторые вирусы по этому примеру написаны...
19 trdm
 
22.08.16
15:01
(14) > сложность что не все C# знают

+100
Да и не все его любят. Специфическое поделие.
20 Gary417
 
22.08.16
15:02
(18) да почти весь софт так написан, такая хренота даже в браузерах встречается, когда отмену загрузки страницы нажать нельзя пока таймаут по подключению не пройдёт
21 Serginio1
 
22.08.16
15:03
(17) Copy-Paste и бездумный Copy-Paste это разные вещи.
Бездумно можно написать, что угодно.
Просто писать тонны кода, вместо того, что бы подправить в нескольких местах проще.

(19) Здесь не надо знать C#, нужно знать классы и их методы.
Как в COM и вэб сервисах. И не имеет смысла на чем они написаны
22 Serginio1
 
22.08.16
15:04
(17) Кстати код то небось скопировал?
23 Gary417
 
22.08.16
15:04
(22) этот код я сам написал только что. потому что оригинал помню ещё на VB6, и примерно воспроизвёл какбы он выглядел на какойнить яве/c#
24 Gary417
 
22.08.16
15:05
потому что искать книжку откуда копировать дольше чем написать
25 Serginio1
 
22.08.16
16:44
Подыму. Может кому и интересно.
26 Serginio1
 
23.08.16
17:58
Сейчас поставил punto switcher набрал твой текст. Только
справочник.Номенклатура  пришлось исправить через Shift + Break

Select спр.типтовара as ТипТовара From $справочник.Номенклатура as спр

А ты конструктором запросов не пользуешься. Очень удобно
27 _stay true_
 
25.08.16
09:22
Разработка очень интересная. Только из-за того, что обмен со СБИСом и Аксаптой(от которой отказываемся) писался на СОМ-ке, приходится для этого держать отдельный сервак на винде, вся остальная часть давно уже линуховая: и рабочие компы, и сервера. Будем пробовать переписать обмен с использованием этой технологии)))
28 _stay true_
 
25.08.16
10:32
А можно как-то с помощью Вашей компоненты подклбючиться к другой базе 1С(как по COM) и выполнить прямой запрос? Ответ желательно в стиле "для блондинок"
29 Garykom
 
гуру
25.08.16
10:40
(28) Можно, но не нужно, потому что изврат.
30 _stay true_
 
25.08.16
10:56
(29) Соглсен. Но новый начальник линухизирован до нельзя, хочет от винды вообще отказаться. А весь обмен с внешними системами написан с использованием СОМ. Нашёл статью, увидел заветную фразу "Замена СОМ на Linux" и разбирайтесь, пацаны. Так что очень надо)))
31 Serginio1
 
26.08.16
23:15
(28) Вот так

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



При этом можно сделать обертку DynamicObject над SqlDataReader и использовать так

Пока dr.Read() Цикл
        Сообщить(dr.Наименование);
    КонецЦикла;
Независимо от того, куда вы едете — это в гору и против ветра!