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

Публикация № 544232

Разработка - Разработка внешних компонент

Excel Word C# OpenXML Net Core

В данной статье показаны примеры кроссплатформенной работы с файлами Excel и Word (xlsx,docx) с помощью библиотеки OpenXML и Net Core

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

С того времени я добавил использование расширений Linq.
В этой статье я коснусь практического использования моей компоненты. А именно кроссплатформенной работы с файлами Excel и Word c помощью OpenXML и NetStandart.

Собственно ради чего эта разработка и задумывалась.
Исходники были взяты отсюда github.com/ph1ll/Open-XML-SDK/tree/netstandard
К сожалению, без Nuget подключить библиотеку к проекту нельзя. Но через CoreClr его можно подключить.

Справочную информацию по работе с OpenXML можно посмотреть здесь
msdn.microsoft.com/ru-ru/library/office/gg278325.aspx

Итак, начнем с чтения страниц Excel. Задача - преобразовать данные в ТаблицуЗначений.

Процедура ПрочитатьExcel(ИмяФайла)
	
	// Загрузим сборку 
	СборкаOpenXml=ъ(Врап.Сборка("DocumentFormat.OpenXml.dll"));
	
	// Получим типы
	SpreadsheetDocument=ъ(СборкаOpenXml.GetType("DocumentFormat.OpenXml.Packaging.SpreadsheetDocument"));
	SharedStringTablePart=ъ(СборкаOpenXml.GetType("DocumentFormat.OpenXml.Packaging.SharedStringTablePart"));
	
	CellValues=ъ(СборкаOpenXml.GetType("DocumentFormat.OpenXml.Spreadsheet.CellValues"));
	
	SharedString=ъ(CellValues.SharedString);
	Cell=ъ(СборкаOpenXml.GetType("DocumentFormat.OpenXml.Spreadsheet.Cell"));
	Sheet=ъ(СборкаOpenXml.GetType("DocumentFormat.OpenXml.Spreadsheet.Sheet"));
	Regex=ъТип("System.Text.RegularExpressions.Regex","System.Text.RegularExpressions",истина);
	
	// Вот чего не хватает в 1С так это  Regex
	ШаблонКолонки=ъ(Врап.Новый(Regex.ПолучитьСсылку(),"[A-Za-z]+"));
	ШаблонСтроки=ъ(Врап.Новый(Regex.ПолучитьСсылку(),"\d+"));
	
	// Откроем файл Excel
	doc = ъ(SpreadsheetDocument.Open(ИмяФайла, false));
	workbookPart = ъ(doc.WorkbookPart);
	
	// Строки хранятся отдельно
	// В ячейках хранится индекс
	pt=ъ(ъ(workbookPart.in(SharedStringTablePart.ПолучитьСсылку())).GetPartsOfType());
	sstpart = ъ(pt.First());
	sst = ъ(sstpart.SharedStringTable);
	ОбщиеСтроки=ъ(sst.ChildElements);
	
	workbook = ъ(workbookPart.Workbook);
	
	// Получим список страниц
	sheets = ъ(ъ(workbook.in(Sheet.ПолучитьСсылку())).Descendants());
	sheets=ъ(Врап.ПолучитьЭнумератор(sheets.ПолучитьСсылку()));
	
	
	Пока sheets.MoveNext() Цикл
		sheet= ъ(sheets.Current);
		id=ъ(sheet.Id).Value;
		ИмяСтраницы=ъ(sheet.Name).Value;
		Сообщить(ИмяСтраницы);
		worksheetPart = ъ(workbookPart.GetPartById(id));
		
		Worksheet=ъ(worksheetPart.Worksheet);
		// Так как данные хранятся только те которые имеют значения 
		// Получим тз с колонками ИмяЯчейки,ИмяКолонки,НомСтроки,ЗначениеЯчейки
		//Где  ИмяЯчейки= A1, ИмяКолонки=A,НомСтроки=1;
		Тз=ЗаписатьСтраницуВТЗ(Worksheet,ОбщиеСтроки);
		// Можно можно эту тз проиндексировать и получать доступ к ячейкам
		// через Найти  используя ИмяЯчейки или
		// НайтиСтроки используя ИмяКолонки и  НомСтроки
		
		// Получим таблицу с колонками A,B,D..AA,AB..
		Тз=ПреобразоватьВТаблицу(Тз);
		Тз.ВыбратьСтроку(ИмяСтраницы);
		
	КонецЦикла
	
КонецПроцедуры

 

Рассмотрим более подробно методы для получения данных о ячейках таблицы

Функция ИмяКолонки(ИмяЯчейки)
	//Получим Имя колнки ячейки
	match = ъ(ШаблонКолонки.Match(ИмяЯчейки));
	return match.Value;
	
КонецФункции

Функция НомерСтроки(ИмяЯчейки)
	// Получим Номер строки ячейки
	match = ъ(ШаблонСтроки.Match(ИмяЯчейки));
	return число(match.Value);
КонецФункции

Процедура ЗаписатьДанныеЯчейки(знач Тз,знач Ячейка,знач ОбщиеСтроки)
	Перем ТипДанных;
	
	// Получим адрес ячейки и Тип данных
	адрес=ъ(Ячейка.CellReference).InnerText;
	ТипДанных=Ячейка.DataType;
	ФлЕстьДанные=ложь;				
	Если ТипДанных<> null Тогда
		ТипДанных=ъ(ъ(ТипДанных).Value);
		// Проверим тип данных на Строку
		Если ТипДанных.Equals(SharedString.ПолучитьСсылку()) Тогда
			//В CellValue хранится индек строки в таблице общих строк
			CellValue=ъ(ячейка.CellValue);
			Text=CellValue.Text;
			ssid = Число(Text);
			ChildElement=ъ(ОбщиеСтроки.get_Item(ssid));
			ЗначениеЯчейки = ChildElement.InnerText;
			ФлЕстьДанные=истина;
		КонецЕсли;
	КонецЕсли;
	
	// Если это не строка то получим, то получим значение из  CellValue
	Если не  ФлЕстьДанные Тогда
		ЗначениеЯчейки= ячейка.CellValue;
		Если (ЗначениеЯчейки<> null) Тогда
			ЗначениеЯчейки=ъ(ЗначениеЯчейки);
			ЗначениеЯчейки=ЗначениеЯчейки.Text;
			ФлЕстьДанные=истина;
		КонецЕсли;
		
	КонецЕсли;
	
	Если   ФлЕстьДанные Тогда
		Стр=Тз.Добавить();
		Стр.ИмяЯчейки=адрес;
		Стр.ИмяКолонки=ИмяКолонки(адрес);
		Стр.НомСтроки =НомерСтроки(адрес);
		Стр.ЗначениеЯчейки=ЗначениеЯчейки;
	КонецЕсли;
	
	
КонецПроцедуры
Функция СоздатьТз()
	// Так как данные хранятся не ввиде таблицы
	// То создадим ТЗ с данными по ячейкам
	ТипЧисла = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0,ДопустимыйЗнак.Неотрицательный)); 
	Тз=новый ТаблицаЗначений;
	Колонки=Тз.Колонки;
	Колонки.Добавить("ИмяЯчейки",ОписаниеСтроки());
	Колонки.Добавить("ИмяКолонки",ОписаниеСтроки());
	Колонки.Добавить("НомСтроки",ТипЧисла);
	Колонки.Добавить("ЗначениеЯчейки",ОписаниеСтроки());
	
	возврат тз;
КонецФункции

Функция ЗаписатьСтраницуВТЗ(знач sheet,Знач ОбщиеСтроки)
	
	// Прочитаем все ячейки страницы
	cells = ъ(ъ(sheet.in(Cell.ПолучитьСсылку())).Descendants());
	cells=ъ(Врап.ПолучитьЭнумератор(cells.ПолучитьСсылку()));
	
	Тз= СоздатьТз();
	// Запишем данные ячейки в ТЗ
	Пока cells.MoveNext() Цикл
		Ячейка=ъ(cells.Current);
		ЗаписатьДанныеЯчейки(Тз,Ячейка,ОбщиеСтроки)		
	КонецЦикла;
	
	возврат Тз;
КонецФункции

 

Теперь нам нужно преобразовать ТЗ с данными о ячейках в Таблицу Здначений аналогичной Странице Excel

 

Функция ЗаписатьКолонки(Колонки,НачСтр,Разряд,КоличествоРазрядов,Сравнивать,ПоследняяКолонка)
// Процедура создает колонки которые меньше или равны имени последней колоки
// A,B,..,AA..ABC
	Для сч=КодСимвола("A") по  КодСимвола("Z") Цикл
		НовСтр=НачСтр+Символ(сч);
		
		Если  Разряд<КоличествоРазрядов Тогда
			рез= ЗаписатьКолонки(Колонки,НовСтр,Разряд+1,КоличествоРазрядов,Сравнивать,ПоследняяКолонка);
			Если Сравнивать и Рез Тогда
				возврат истина
			КонецЕсли;	
		Иначе
			Колонки.Добавить(НовСтр,ОписаниеСтроки());
			
			Если Сравнивать и НовСтр=ПоследняяКолонка Тогда
				возврат  истина
			КонецЕсли
		КонецЕсли;
	КонецЦикла;
	
	
	возврат ложь;
КонецФункции

Процедура СоздатьКолонки(Колонки,ПоследняяКолонка)
	
	// Создадим колонки учитывая разряды
	// Например если имя последней колоки ABC то колонки идут по разрядно
	//A..Z
	//AA..ZZ
	//AAA..ABC
	КоличествоРазрядов=СтрДлина(ПоследняяКолонка);
	
	Для сч=1 По  КоличествоРазрядов Цикл
		Сравнивать=сч=КоличествоРазрядов;
		рез= ЗаписатьКолонки(Колонки,"",1,сч,Сравнивать,ПоследняяКолонка);
		Если Сравнивать и рез Тогда
			возврат;
		КонецЕсли;	
	КонецЦикла;	
КонецПроцедуры

Функция НайтиИмяПоследнейКолонки(Тз)
	рез="";
	ДлинаРез=0;
	Для каждого стрТз из Тз Цикл 
		Стр=стрТз.ИмяКолонки;
		СтрДл=СтрДлина(стр);
		
		Если СтрДл>ДлинаРез Тогда
			ДлинаРез=СтрДл;
			рез=Стр;
		ИначеЕсли СтрДл=ДлинаРез и  Стр>рез Тогда
			рез=Стр;
		КонецЕсли;	
	КонецЦикла;
	возврат рез;
КонецФункции

Функция ПреобразоватьВТаблицу(Тз)
	рез=новый ТаблицаЗначений;
	ПоследняяКолонка=НайтиИмяПоследнейКолонки(Тз);
	СоздатьКолонки(рез.Колонки,ПоследняяКолонка);
	Колонки=рез.Колонки;
	// Часто исползую данную функцию
	// Код можно посмотреть здесь  //infostart.ru/public/371762/
	// Сгруппируем данные ТЗ по номеру строки
	Тз=глСгруппироватьТзПоПолю(тз,"НомСтроки");
	сч=1;
	
	Для каждого стрТз из Тз Цикл 
		НомСтроки=стрТз.НомСтроки;
           // Добавим колонки номера которых меньше НомСтроки
		Пока сч<НомСтроки Цикл
			сч=сч+1;
			рез.Добавить();
		КонецЦикла;
                сч=сч+1;
		стр=рез.Добавить();
		ТзГр=стрТз.ТзПоГруппе;
		
		
		Для каждого стрТзГр из ТзГр Цикл
			// Можно конечно получить индекс зная смещение символа 64 относительно 1 и 26 разрядную систему
			// но найдем колонку по имени и её индекс
			Колонка=Колонки.Найти(стрТзГр.ИмяКолонки);
			стр.Установить(Колонки.Индекс(Колонка),стрТзГр.ЗначениеЯчейки); 
		КонецЦикла;	
	КонецЦикла;
	возврат рез;
КонецФункции

 

Теперь перейдем к чтению данных файла Word.

 

Функция GetPlainText(знач Элемент)
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();

	// Получим секции и рекурсивно пройдемся по их значениям
	Секции=ъ(Элемент.Elements());         
	
	Секции=ъ(Врап.ПолучитьЭнумератор(Секции.ПолучитьСсылку()));
	
	Пока Секции.MoveNext() Цикл
		Секция= ъ(Секции.Current);
		ИмяСекции=Секция.LocalName;
		Если ИмяСекции= "t" Тогда
			Стр=Секция.InnerText;
			ЗаписьXML.ЗаписатьБезОбработки(Стр);
			
		ИначеЕсли    ИмяСекции= "cr" или ИмяСекции= "br"  Тогда
			ЗаписьXML.ЗаписатьБезОбработки(NewLine); 
		ИначеЕсли    ИмяСекции= "tab"  Тогда
			ЗаписьXML.ЗаписатьБезОбработки(Таб); 
			// Paragraph
		ИначеЕсли    ИмяСекции= "p"  Тогда
			ЗаписьXML.ЗаписатьБезОбработки(GetPlainText(Секция));
			ЗаписьXML.ЗаписатьБезОбработки(NewLine+NewLine);
		Иначе
			ЗаписьXML.ЗаписатьБезОбработки(GetPlainText(Секция));
		КонецЕсли;            
	КонецЦикла;
	
	возврат  ЗаписьXML.Закрыть();
КонецФункции

Функция ПрочитатьWord(ИмяФайла)
    СборкаOpenXml=ъ(Врап.Сборка("DocumentFormat.OpenXml.dll"));
	WordprocessingDocument=ъ(СборкаOpenXml.GetType("DocumentFormat.OpenXml.Packaging.WordprocessingDocument"));
	Пакет = ъ(WordprocessingDocument.Open(ИмяФайла, ложь));
	Элемент = ъ(ъ(ъ(Пакет.MainDocumentPart).Document).Body);
	if (Элемент = null) Тогда
		возврат ""
	КонецЕсли;
	
	возврат GetPlainText(Элемент);
КонецФункции // 

 

 Очень удобно использовать Productivity Tool", она умеет генерировать код Генерируем OfficeOpenXML-документы за 5 минут      

 

Кроме того есть множество провайдеров к различным базам данных, как MS SQL так и другим, в том числе NoSQL

Приведу пример доступа к MS SQL

СборкаSqlClient=ъ(Врап.Сборка("System.Data.SqlClient.dll"));
    SqlConnection=ъ(СборкаSqlClient.GetType("System.Data.SqlClient.SqlConnection"));
    SqlCommand=ъ(СборкаSqlClient.GetType("System.Data.SqlClient.SqlCommand")); 
    
    connection =ъ(Врап.Новый(SqlConnection.ПолучитьСсылку(),ConnectionString));
    connection.Open();
    
    ТекстЗапроса = "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.Наименование);
    КонецЦикла;

 

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

Примеры и исходники - в приложенном файле. 

Скачать файлы

Наименование Файл Версия Размер
TestVK

.zip 34,52Mb
05.09.16
65
.zip 34,52Mb 65 Скачать бесплатно

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. TrinitronOTV 5 23.08.16 05:41 Сейчас в теме
Данным методом можно получить не значение ячейки Эксель, а цвет шрифта в этой ячейке?
3. zekrus 153 24.08.16 07:39 Сейчас в теме
Доброе утро!
Тема весьма актуальная.
Было бы здорово если бы вы дали больше информации и по другим задачам например в Fedora!
(t-sql запросы из 1С под OS Linux, отправка почты из 1С под OS Linux).
С уважением
4. Serginio 819 24.08.16 07:51 Сейчас в теме
(3) Ок посмотрю. Но Линукса то у меня нет, но код кроссплатформен.
5. Serginio 819 24.08.16 10:04 Сейчас в теме
(3) А разве нельзя отправить почту средствами 1С?
8. Serginio 819 24.08.16 16:39 Сейчас в теме
(3) Сейчас проверил

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


Показать
10. Serginio 819 25.08.16 11:42 Сейчас в теме
(3) Вот SQL запрос к MS SQL



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

Показать
6. oleg_km 24.08.16 10:50 Сейчас в теме
Прикольно, Сергей, а я не понял - какая это сборка, как ее установить не устанавливая Оффис
7. Serginio 819 24.08.16 10:56 Сейчас в теме
(6) oleg_km, Ссылка на исходники здесь https://yadi.sk/d/jRSHEA19svgrn
Ссылка на OpenXML NetStandart здесь

https://github.com/ph1ll/Open-XML-SDK/tree/netstandard

На взрослую Nuget OpenXML
9. Serginio 819 24.08.16 16:40 Сейчас в теме
(6) Нашел ошибку, можешь обновить исходники.
11. I_G_O_R 62 25.08.16 18:20 Сейчас в теме
Добавлю, а то может не все в курсе, этот OpenXML прикольная тема, документы можно генерить прямо на сервере без установленного офиса. А чтобы легче было разобраться с форматом, нужно юзать программу от майков "Open XML SDK *.* Productivity Tool", она умеет генерировать код, вот статья на хабре
12. Serginio 819 25.08.16 23:03 Сейчас в теме
(11) Да забыл написать про неё. Спасибо. Добавлю в статью.
13. user970630 29.10.18 14:57 Сейчас в теме
Большое спасибо. Очень помогло
14. Serginio 819 30.10.18 11:47 Сейчас в теме
(13) Спасибо за спасибо! Рад, что труды не пропали зря.
Оставьте свое сообщение

См. также

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

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    73337    0    Serginio    108    

Работа с журналом регистрации. Выходим за границы платформы

Журнал регистрации Бесплатно (free)

Работа с журналом регистрации нестандартными средствами. А также немного про использование платформы .NET в экосистеме 1С.

12.05.2020    4142    0    YPermitin    24    

PinkRabbitMQ - Native API компонента 1С с открытым исходным кодом, для обмена сообщениями через RabbitMQ

Разработка внешних компонент v8 Бесплатно (free)

PinkRabbitMQ представляет собой Native API компоненту для 1С Предприятия 8 (Windows 32bit и 64bit) с открытым исходным кодом на с++ (можно собрать компоненту самостоятельно). PinkRabbitMQ это низкоуровневая компонента которая реализует обмен по протоколу AMQP с брокером сообщений RabbitMQ. Для организации высокоуровнего обмена между информационными базами предназначен Адаптер. Компонента разрабатывается в рамках проекта Адаптер.

29.07.2019    13407    0    Begemoth80    144    

Внешняя компонента для ping (под win)

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

Цель: выполнение ping из 1С без использования команд системы. Может быть полезна разработчикам для проверки доступности компьютеров.

05.01.2019    4915    3    milut    0    

Методы для группировки данных по полю,полям в Таблице Значений на примере универсального метода списания по партиям, а также отбора строк в ТЗ по произвольному условию. Для 8.x и 7.7 Промо

Универсальные функции Практика программирования v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Я очень часто использую группировку данных по полю и полям, как в восьмерке, так и в семерке. Это аналог запроса Итоги, но там строится дерево, а в большинстве случаев нужны "плоские данные". Да и делать запрос в большинстве случаев более накладный процесс, чем работа с ТЗ. Все достоинства такого подхода приведены на примере метода универсального списания по париям, а так же отбора строк в ТЗ по произвольному условию. Для 7.7 еще отчеты сравнения двух ТЗ. Работая с различными базами для упрощения сравнения номенклатуры, или как аналог джойнов(join), сделал сравнение двух таблиц значений по нескольким полям. Пока группировки полей должны быть уникальны. Часто приходится искать дубли, для универсального поиска есть ДублиВТзПоПолю и пример в Тест.ert.

1 стартмани

25.06.2015    26407    3    Serginio    1    

.Net Core, обмен с 1C по TCP/IP между различными устройствами

Разработка внешних компонент v8 Бесплатно (free)

Часто нужно обмениваться данными с клиентом 1С из различных устройств, между клиентами 1С, а также при виртуализации между разными ОС на компьютере. Это кроссплатформенная ВК, позволяющая обмениваться сообщениями по TCP/IP между различными устройствами по определенному протоколу.

28.09.2016    20697    0    Serginio    8    

Net Core. Динамическая компиляция класса обертки для получения событий .Net объекта в 1С

Разработка внешних компонент v8 Бесплатно (free)

Часто нужно использовать события объектов .Net. Например событие от COM порта, поступление сообщений по WhatsAp, сообщение об изменение в директории итд. Напрямую этого сделать нельзя, но можно сделать класс обертку и через него получать ВнешнееСобытие

14.09.2016    15746    0    Serginio    1    

.Net Core, 1C, динамическая компиляция, Scripting API

Разработка внешних компонент Практика программирования v8 Бесплатно (free)

Очень часто приходится использовать динамический код в 1С, используя Выполнить или Вычислить. Аналогичная задача и для использования скриптов на .Net. Я постарался показать, как можно скрестить ежа с ужом и получить удобный код. В этой статье много вражеского кода для чистого одноэсника, но все когда-то бывает впервые.

07.09.2016    18675    0    Serginio    7    

Miracle Native - ВК для V8 Промо

Разработка внешних компонент v8 Россия Бесплатно (free)

Настоящая ВК написана по технологии 1С-Native. По методам и свойствам является наследницей MIracveV8 с планируемым развитием функционала. Версия 1.2.1.1 Не триальная, подправлена некорректная работа под х64

23.04.2012    31174    0    Abadonna    81    

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

Разработка внешних компонент v8 Бесплатно (free)

Это продолжение статьи Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II http://infostart.ru/public/541518/ В этой статье покажу, как можно асинхронно вызывать асинхронные методы и вызывать ВнешнееСобытие в 1С из сборки .Net

09.08.2016    17324    0    Serginio    3    

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

Практика программирования v8 Бесплатно (free)

Это продолжение статьи http://infostart.ru/public/534901/ С того времени добавил поддержку методов с параметрами по умолчанию, вызов методов расширений, вывод типов для дженерик методов, поддержка объектов реализующих IDynamicMetaObjectProvider (ExpandoObject,DynamicObject), добавление синонимов к членам типа и асинхронное программирование на 1С!

09.08.2016    14353    0    Serginio    1    

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

Практика программирования v8 Бесплатно (free)

С выходом .Net Core CLR стало возможным использование классов .Net не только на Windows, но и других операционных системах. Это особенно важно в разрезе импортозамещения. И главное - это аналог COM под Linux. Сейчас под Linux для расширения возможностей 1С используются Web сервисы. Данная разработка позволит использовать не только сборки входящие в состав .Net Core, но и пользовательские портативные сборки.

04.07.2016    19645    0    Serginio    33    

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

Разработка внешних компонент Практика программирования WEB v7.7 v8 Бесплатно (free)

Очень часто нужно при работе с HTTP сервисами или сайтами использовать Асинхронные HTTP запросы, отправку на сервер нескольких файлов, использование сжатия трафика. Эта статья про то, как этого легко добиться.

09.03.2016    30820    0    Serginio    22    

Быстрое создание Внешних Компонент на C#. Примеры использования Глобального Контекста, IAsyncEvent, IExtWndsSupport, WinForms и WPF

Практика программирования Разработка внешних компонент v8 Бесплатно (free)

В большинстве случаев хватает и обычного COM объекта, учитывая, что в 8.х можно использовать события. Но иногда нужно использовать Глобальный Контекст для вызова глобальных функций, таких как Сообщить, NewObject и т.д. Кроме того, для использования форм нужен дескриптор окна 1С. Это продолжение статей Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент. http://infostart.ru/public/238584/ Там же лежат и исходники .NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия http://infostart.ru/public/417830/ 1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp http://infostart.ru/public/434771/ Использование классов .Net в 1С для новичков http://infostart.ru/public/448668/

15.02.2016    28758    0    Serginio    13    

Подсветка синтаксиса 1С в текстовых редакторах Atom, Sublime Text, VS Code

Инструментарий разработчика Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

Пакеты, добавляющие поддержку синтаксиса языка 1С:Предприятие 8 в текстовые редакторы Atom, Sublime Text и VS Code. И не только.

02.02.2016    26913    0    nixel    38    

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

Разработка внешних компонент Математика и алгоритмы v7.7 v8 Бесплатно (free)

Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия, а так же генерация модулей на C# и 1С для подключения к событиям. Использование DynamicMethod и ILGenerator. Представлены примеры для использовании событий System.IO.FileSystemWatcher (Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.) и SerialPort (обработка сканера штрих кода подключенного к COM порту). Обертка позволяет использовать классы .Net только на языке 1С. Реализация 1C Messenger описанного здесь http://infostart.ru/public/434771/

12.11.2015    45844    0    Serginio    36    

1С с "плюсами"

Разработка внешних компонент Математика и алгоритмы Универсальные функции v8 Бесплатно (free)

- Разработана методика подключения внешней компоненты, снимающая ограничения на типы данных аргументов и возвращаемого значения. - Проведено документирование основных типов данных (объектов, интерфейсов) платформы. - Разработан объект «Делегат» для реализации функциональных объектов (указатель-на-функцию). - Разработана концепция итератора произвольного доступа для основных контейнеров платформы с целью сопряжения со стандартной C++ библиотекой. - В процессе разработки механизм 1С классов (наследование, интерфейсы) для возможности использования парадигм объектно-ориентированного программирования на уровне кода.

14.10.2015    22718    0    IntelInside    48    

Генерация штрих-кода для вставки его в 1С при работе в Linux

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

В Linux есть отличная команда barcode, которая генерирует штрих-коды в векторном формате ps. Но 1С не понимает такие форматы. Более того, barcode генерирует штрих-код на размер листа А4 или Letter. Установка пользовательского размера листа не увенчалась успехом. Но не будем же мы вставлять изображение штрих-кода размером с лист А4… Однако есть способ, как решить данные проблемы.

01.07.2015    16254    0    rudjuk    4    

Простейший способ создания штрих-кода в формате PNG из командной строки в Linux Ubuntu

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

В Linux есть огромное количество способов создания линейного штрих-кода. В данной статье мы рассмотрим, как сгенерировать графическое изображение штрих-кода прямо из командной строки. При этом, решение будет совершенно бесплатным и очень простым как в установке, так и в использовании.

29.06.2015    11997    0    rudjuk    15    

Компилирование внешней компоненты AddInNative в ОС Linux

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

В статье отражены некоторые моменты, которые нужно учесть, чтобы скомпилировать пример 1С-вской внешней компоненты AddInNative в ОС Linux.

14.01.2015    20351    0    q_i    22    

Использование внешних COM-компонент (.dll) или любых клиентских методов в регламентных заданиях серверной базы.

Практика программирования Разработка внешних компонент Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Для расширения возможностей платформы 1С существует огромное количество внешних компонент (дополнительные функции, взаимодействие с софтом и железом других производителей, ключи защиты). К сожалению, большинство из них написано на технологии .COM и не могут использоваться на сервере. Для использования в регламентных заданиях серверной базы их приходится переписывать на Native API. Однако, иногда нет возможности переписать компоненту на новую технологию, но нужно вызвать ее в регламентном задании на сервере.

10.12.2014    45006    0    ekaruk    51    

Мини-Эверест: Native ВК для 8.х

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

Список и свойства HDD, список и свойства ОЗУ, список запущенных процессов (для терминала - всех пользователей с указанием номера сессии), список запущенных сервисов, характеристики BIOS

20.08.2014    16049    0    Abadonna    7    

ВК для работы с файлами FilesNative.dll

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

Компонента реализует некоторые методы работы с файлами (архивами). Поддерживаемые форматы распаковки архивов: ZIP, JAR, XPI, BZ2, BZIP2, TBZ2,TBZ,RAR, R00, ARJ, Z, TAZ, LZH, LHA, 7Z, CAB, LZMA, LZMA86, ISO, XAR, MSI,RPM, TAR, GZ, TGZ, TPZ

18.06.2014    16949    0    Abadonna    9    

NetNative: ВК для работы с сетью

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Прослушивание UDP-портов, посылка UDP-сообщений, возможность организации UDP-чата, некоторые сетевые команды. Написана по технологии Native

23.02.2014    18733    0    Abadonna    10    

Отслеживание изменений каталога в REAL-TIME: Native ВК для 8.х

Разработка внешних компонент v8 Россия Бесплатно (free)

Давно у меня была задумка отследить, например, появление определенного файла в каталоге базы данных без использования различных таймеров и обработчиков ожидания. Настоящая ВК отслеживает изменения в выбранном каталоге в реальном времени и генерирует в 1С соответствующие внешние события. Выбранный каталог может быть как папкой, так и целым диском.

09.10.2013    19960    0    Abadonna    38    

Трей-мессенджер: Native ВK для 8.х

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Иконка 1С в трее с popup-mеnu, баллуны, оповещения, обратная связь. Выполнена по технологии Native, не требует регистрации в реестре и особых прав пользователя. Имеет обратную связь с 1С через генерацию внешних событий. Имеет popup-menu на иконке в трее для управления окном 1С (закрыть, скрыть, показать+ 2 пункта генерации событий). Есть возможность убрать кнопку главного окна из панели задач.

23.09.2013    25564    0    Abadonna    121    

Обработка изображений 1С средствами .Net framework

Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

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

19.04.2013    20360    0    Elisy    13    

Внешняя компонента для работы со строками

Разработка внешних компонент v8 Россия Бесплатно (free)

ВК по технологии Native для работы со строками: хеши по различным алгоритмам, крутое шифрование, вычисление релевантности (схожести) строк. Событие переключения подсистем.

20.03.2013    24814    0    Abadonna    105    

Подсистема "COMExchange": ускорение выгрузки запросов ADO или «игра с огнём».

Практика программирования Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Описана поддержка подсистемой "COMExchange"работы с ВК GameWhithFire.dll и в частности ускоренная выгрузка результата запроса ADO средствами ВК.

11.03.2013    19701    0    yuraos    4    

Простой пример создания ActiveX-control на Qt

Практика программирования Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

Мне была поставлена задача разработать некий ActiveX-control. Так как основным языком программирования для разработки у нас используется C++, то C# не рассматривался. Я решил выбрать Qt, так как он мне интересен. Создание ActiveX объектов на Qt достаточно простой процесс, в примерах к QtCreator есть несколько вариантов, показывающих как можно использовать ActiveQt (например этот). При написании компонента пришлось много времени потратить на поиск ответов на казалось бы простые вопросы, по крупицам их собирать. В результате я получил, что требовалось и решил написать простой пример, чтобы ускорить процесс старта разработки ActiveX-control другим. Сразу обращу внимание, что не описываю всю технологию ActiveQt, подробную информацию можно получить в документации Qt Assistant и в интернете (например здесь), это пример и пара интересных на мой взгляд моментов.

25.02.2013    9010    0    theshadowco    3    

Finger-биометрия в 1С

Разработка внешних компонент v8 Россия Бесплатно (free)

О различных методиках использования сканеров отпечатков пальцев в 1С.

02.07.2012    26943    0    fixin    22    

Решение проблем с регистрацией внешних компонент в терминале

Разработка внешних компонент Розничная торговля Учет ТМЦ Розничная торговля Учет ТМЦ v8 УТ10 Россия УУ Бесплатно (free)

Зачастую у программистов возникают проблемы с подключением внешних компонент (например, драйверов торгового оборудования), когда пользователи работают с 1С, подключаясь к серверу через терминал. Это связано с некоторыми особенностями работы функции глобального контекста ПодключитьВнешнююКомпоненту().

22.09.2011    66641    0    Spacer    41    

ВК для 1С:Предприятие 8.2 NativeAPI на Delphi (запуск приложений, раскладка клавиатуры, события и др.)

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Внешняя компонента на основе разработки Крипича http://infostart.ru/public/81644/ - NativeAPI на Delphi реализует запуск процесса с заданным приоритетом и видимостью окна, переключение раскладки клавиатуры, всплывающие сообщения в трее, паузу sleep без загрузки процессора и внешние события.

01.08.2011    44696    0    romix    57    

Драйвер клавиатурного сканера

Разработка внешних компонент v8 Россия Бесплатно (free)

Драйвер сканеров USB-HID (эмуляция клавиатуры) для 1С Предприятие 8.2. Дополнительно может отсылать текст на дисплей покупателя Posiflex PD2601.

13.07.2011    9869    0    Ma_X_X    12    

Новая версия 1С:Предприятие 8.2 конфликтует с C# и .Net framework

Практика программирования Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

Суть конфликта 1С 8.2 с C# и .Net framework в следующем. В версии 8.2 1С анонсировала новый способ написания внешних компонент 1С с использованием так называемого Native API. Самое интересное, что на C# предложенный подход реализовать невозможно, а реализация Native API на VC++/CLI теоретически возможна, но при попытке подключения DLL, скомпилированных с опцией /CLR, происходит зависание 1С (версия 8.2.13.202). Еще один конфликт – в новой версии 1С нет поддержки технологии ActiveX, на основе которой многие разработчики вставляли в формы 1С свои WinForms-приложения.

15.12.2010    21151    0    Elisy    128    

Учим внешнюю компоненту правильному склонению не только ФИО, но и должностей, и подразделений (ЗУП 2.5)

Разработка внешних компонент Практика программирования v8 ЗУП2.5 Россия Бесплатно (free)

Многие из нас сталкивались с проблемой неверного склонения должностей и подразделений внешней компонентой склонения ФИО. Результат при этом может напоминать следующее: 1.Именительный "Главный специалист" 2.Родительный "Главныя специалиста" 3.Дательный "Главныю специалисту " 4.Винительный "Главныя специалиста " 5.Творительный "Главныем специалистом " 6.Предложный "Главные специалисте " Метод борьбы с данным недугом предлагаю ниже.

21.11.2010    60723    0    director04    64    

Thermal Print Library - ActiveX библиотека для печати на термопринтерах Godex BZB2/EZ2/EZ4, C.Itoh EZ2/EZ4, Citizen CLP-521/621

Разработка внешних компонент v8 1cv8.cf 1cv7.md Россия Бесплатно (free)

Библиотека Thermal Print Library является COM сервером и предназначается для использования в любых средах, которые в состоянии выступить в роли OLE-клиента (MS Office, 1С Предприятие, VB, VBScript, и т.д.). Допускается применение со следующими моделями термопринтеров : Godex BZB2/EZ2/EZ4, C.Itoh EZ2/EZ4, Citizen CLP-521/621.

20.09.2010    20784    0    GreenLab    23    

[BackgroundWorker] - Фоновые задания в файловом режиме 1С 8.x

Практика программирования Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

ActiveX-компонента позволяет выполнять задачи в фоне с индикацией прогресса и возможностью прерывания выполнения. Также работает и клиент/серверном варианте, в качестве альтернативы типовым фоновым заданиям

04.03.2010    22110    0    Душелов    15    

Архивация базы 1С-Предприятие

Разработка внешних компонент Архивирование (backup) v8 1cv8.cf Россия Бесплатно (free)

Используем стандартный планировщик Windows и файл Visual Basic Script с файлом настроек, для плановой выгрузки базы данных.

29.12.2009    10083    0    alves    4    

ActiveX - плейер для 1С

Разработка внешних компонент v8 1cv8.cf Россия Бесплатно (free)

Для тех, кто любит всё внутри 1С ;) Форматы: mp3 и wav

01.12.2009    16618    0    Abadonna    39