Архив метки: 1C

Загрузка из Excel в 1С

Загрузка из Excel в 1С

Загрузка из Excel в 1С, довольно частая задача, которую приходится решать программистам 1С. В данной заметке будет показано, как произвести загрузку данных из файла Excel в 1С, наиболее быстрым и оптимальным способом. Перед тем как показать примеры кода, объяснюю как производить отладку и проверку выполнения SQL запросов к файлу Excel, для последующей загрузки данных в программу 1С.

Для примера будет использоваться файл формата Excel со следующей структурой и данными:

Загрузка из Эксель в 1С. SQL запрос к файлу Excel. Загрузка из Excel с помощью запроса SQL в 1С.

Данные Excel для загрузки в 1С


Чтобы выполнить SQL запрос к файлу Excel и проверить результат, необходимо запустить программу Microsoft Excel, перейти в главном меню программы на вкладку «Данные», далее нажать кнопку «Из других источников» и в появившемся меню выбрать пункт «Из Microsoft Query»:
Запуск MSQuery для загрузки из Эксель в 1С

Запуск MSQuery для загрузки из Эксель в 1С


После появится окно «Выбор источника данных», в нем необходимо выбрать пункт «Excel Files*» и нажать «ОК»:
Выбор источника для загрузки

Выбор источника для загрузки


Далее выбрать непосредственно ваш файл Excel для выборки данных. Может появится предупреждение, что «Данный источник данных не содержит видимых таблиц», игнорируем его и нажимаем «ОК». После необходимо в параметрах установить пункт отображать системные таблицы:
Выбор системные таблицы

Выбор системные таблицы


После включения данной опции, появится возможность выбора листов из книги Excel и столбцов для запроса:
Выбор столбцы запроса

Выбор столбцы запроса


Дальше необходимо несколько раз нажать «Далее» и на последнем шаге, выбрать пункт «Просмотр или изменение данных в Microsoft Query» и «Готово»:
Просмотр изменение

Просмотр изменение


Откроется окно «Microsoft Query», в котором мы видим выборку данных из нашего файл Excel. Для тестирования и редактирования SQL запросов к файлу Excel, используется кнопка «SQL», при помощи которой вызывается окно редактирования запроса:
Запрос SQL

Запрос SQL


Теперь, когда вы знаете, как тестировать ваши SQL запросы к файлу Excel, попробуем загрузить данные в программу 1С, для этого создадим внешнюю обработку, добавим основную форму, для удобства вывода информации добавим реквизит формы с типом «Табличный документ» и отобразим его на форме. В модуле формы добавим процедуру «ПриОткрытии».
Далее приведен код с поясняющими комментариями:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	//Указываем путь к файлу Excel
	ФайлExcel = "C:\Users\Константин\Desktop\Данные.xls";
	
	//Создаем объект Файл
	ФайлОстатков = Новый Файл(ФайлExcel);
	
	//Проверка на существование файла
	Если ФайлОстатков.Существует() Тогда
		
		//Формируем строку соединения
		СтрокаСоединения = "Driver={Microsoft Excel Driver (*.xls)};
		|DriverId=790;
		|Dbq="        + ФайлОстатков.ПолноеИмя + ";
		|DefaultDir=" + ФайлОстатков.Путь + ";"; 
		
		//Создаем СОМ объект ADODB.Connection
		Соединение = Новый COMОбъект("ADODB.Connection"); 
		Попытка
			//Пробуем подключится к файлу Excel
			Соединение.Open(СтрокаСоединения);           
		Исключение
			Сообщить("Ошибка соединения ADODB.Connection: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
			Возврат;	
		КонецПопытки;
		
		//Пробуем получить имена колонок из файла Excel
		//В случае возникновении ошибки: Попробуйте написать: "SELECT * FROM "[Лист1$A1:IV]" или "SELECT * FROM `Sheet1$A1:IV`"
		ТекстЗапросаSQL = "SELECT * FROM `Лист1$A1:IV`";
		Попытка
			НаборЗаписей = Соединение.Execute(ТекстЗапросаSQL);
		Исключение
			Сообщить("Ошибка соединения ADODB.Recordset: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
			Возврат;	
		КонецПопытки;
		
		//Проверяем количество полученных полей
		Если НаборЗаписей.Fields.Count > 0 Тогда
			
			//Выводим полученные имена колонок
			СтрокДляВывода = "";
			Для каждого СтрокаИзНабора Из НаборЗаписей.Fields Цикл
				СтрокДляВывода = СтрокДляВывода + СтрокаИзНабора.Name + Символы.Таб;
			КонецЦикла;
			
			ВыводСообщений.ДобавитьСтроку(СтрокДляВывода);
			
			//Пробуем получить данные из файла Excel
			ТекстЗапросаSQL = "SELECT * FROM `Лист1$A1:BB`";
			Попытка
				НаборЗаписей = Соединение.Execute(ТекстЗапросаSQL);
			Исключение
				Сообщить("Ошибка соединения ADODB.Recordset: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
				Возврат;	
			КонецПопытки;
			
			//Выводим данные на экран
			Пока НЕ НаборЗаписей.EOF Цикл
				
				СтрокДляВывода = "";
				Для каждого СтрокаИзНабора Из НаборЗаписей.Fields Цикл
					СтрокДляВывода = СтрокДляВывода + СтрокаИзНабора.Value + Символы.Таб;
				КонецЦикла;
				
				ВыводСообщений.ДобавитьСтроку(СтрокДляВывода);
				
				//Перемещяем курсор дальше
				НаборЗаписей.MoveNext();
				
			КонецЦикла;
			
		Иначе
			Сообщить("Не найдены наименования колонок!");
		КонецЕсли;
		
		//Закрываем соединение
		Соединение.Close();
		
	Иначе
		Сообщить("Файл: " + ФайлExcel + " не найден!");
	КонецЕсли;
	
КонецПроцедуры

Результат выполнения внешней обработки по загрузке данных из файла Excel в 1С с помощью запроса SQL, показан на изображении:

Результат выполнения загрузки из Excel в 1С

Результат выполнения загрузки из Excel в 1С

Скачать файлы внешней обработки и данных Excel.

Использование шаблонов Word в 1С

Использование шаблонов Word в 1С

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

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

Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:

Использование шаблонов Word в 1С

Использование шаблонов Word в 1С


Использование шаблонов Word  в 1С

Использование шаблонов Word в 1С

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

Установка закладки, шаблон Word для 1С

Установка закладки, шаблон Word для 1С


Когда файл шаблона Word готов, создаем новую внешнею обработку в 1С, добавляем форму и в модуле формы вставляем следующий код:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ЗаполнитьШаблонВорд();
	
КонецПроцедуры

&НаКлиенте
Функция ЗаполнитьШаблонВорд()

	//Попытка создать COM объект
	Попытка
		ОбъектВорд = Новый COMОбъект("Word.Application"); 
	Исключение
		Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
		Возврат Неопределено;
	КонецПопытки;
	
	//Путь к шаблону
	ОбъектВорд.Documents.Add("C:\Users\Константин\Desktop\Шаблон.docx");
	ШаблонВорд = ОбъектВорд.ActiveDocument;
	
	//Получаем все закладки из шаблона
	Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл
		Сообщить(ЗакладкаВорд.Name);		
	КонецЦикла;
	
	//Заменяем закладку1 на текст
	ШаблонВорд.Bookmarks("Закладка1").Select();
	ШаблонВорд.Application.Selection.TypeText("Текст для закладки №1.");
	
	//Заменяем закладку2 на текст
	ШаблонВорд.Bookmarks("Закладка2").Select();
	ШаблонВорд.Application.Selection.TypeText("Текст для закладки №2.");
	
	//Заменяем закладку3 на текущую дату
	ШаблонВорд.Bookmarks("Закладка3").Select();
	ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());
	
	ОбъектВорд.Application.Visible = Истина;
	ОбъектВорд.Activate();
	
	//Закрытие документа
	//ОбъектВорд.Application.Quit();
	
КонецФункции

В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:

Результат использования шаблонов Word в 1С

Результат использования шаблонов Word в 1С

Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.

Скачать файл обработки 1С и шаблона Word.

Дополнение к заметке Использование шаблонов Word в 1С

Выражаю благодарность, всем тем, кто комментирует запись, благодаря вам, материал дополняется новыми данными и будет полезен более широкому кругу посетителей.

1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:

//Заменяем закладку3 на текущую дату
ШаблонВорд.Bookmarks("Закладка3").Select();

ШаблонВорд.Application.Selection.Font.Bold = 1;
ШаблонВорд.Application.Selection.Font.Size = 20;
	
ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());

2. Картинки есть возможность выгружать в шаблон?
Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:

// Вставка изображения
ШаблонВорд.Bookmarks("Закладка3").Select();
ШаблонВорд.Application.Selection.InlineShapes.AddPicture("C:\Users\Константин\Desktop\logo_1c.png");

3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:\Шаблон.docx».

4. Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:

ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Макет    = ОбработкаОбъект.ПолучитьМакет("ШаблонПисьмаПросрочка"); 
ИмяФайла = КаталогВременныхФайлов() + "\"файл.doc";
Макет.Записать(ИмяФайла);

Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
Предполагаю, что метод Записать(< ИмяФайла>, < ТипФайлаТаблицы>) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».

5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:

Sub Макрос1()
'
' Макрос1 Макрос
'
'
    Selection.MoveLeft Unit:=wdCharacter, Count:=15, Extend:=wdExtend
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
        "C:\Users\Константин\Desktop\Тест.txt", SubAddress:="", ScreenTip:="", _
        TextToDisplay:="ТестоваяСсылка"
End Sub

Описание метода добавления в MSDN: https://msdn.microsoft.com/en-us/vba/word-vba/articles/hyperlinks-add-method-word

Соответственно код для 1С следующий:

Функция ЗаполнитьШаблонВорд()

	//Попытка создать COM объект
	Попытка
		ОбъектВорд = Новый COMОбъект("Word.Application"); 
	Исключение
		Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
		Возврат Неопределено;
	КонецПопытки;
	
	//Путь к шаблону
	ОбъектВорд.Documents.Add("C:\Users\k.blagin\Desktop\Шаблон.docx");
	ШаблонВорд = ОбъектВорд.ActiveDocument;
	
	//Получаем все ссылки из шаблона
	Для каждого ЗакладкаВорд Из ШаблонВорд.Hyperlinks Цикл
		Сообщить(ЗакладкаВорд.Name);		
	КонецЦикла;
	
	//Меняем адрес уже существующей ссылки
	ШаблонВорд.Hyperlinks("Logs.zip").Address = "C:\Users\k.blagin\Desktop\Memory.zip";
	
	//Заменяем закладку на ссылку
	ОбъектЗакладка = ШаблонВорд.Bookmarks("Закладка3");
	ШаблонВорд.Hyperlinks.Add(ОбъектЗакладка.Range, "C:\Users\k.blagin\Desktop\Шаблон.docx", "", "Шаблон.docx", "C:\Users\k.blagin\Desktop\Шаблон.docx");
	
	ОбъектВорд.Application.Visible = Истина;
	ОбъектВорд.Activate();
	
	//Закрытие документа
	//ОбъектВорд.Application.Quit();
	
КонецФункции

1С ERP Генерация штрих кода типовыми средствами

1С ERP Генерация штрих кода типовыми средствами

В программе 1С ERP имеется типовая возможность создавать штрихкоды и выводить их на печать без использования дополнительных средств, пример кода:

//...
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина",          100);
ПараметрыШтрихкода.Вставить("Высота",          75);
ПараметрыШтрихкода.Вставить("Штрихкод",        СокрЛП(СтрокаТЗ.Штрихкод));
ПараметрыШтрихкода.Вставить("ТипКода",         1); // EAN13
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
ПараметрыШтрихкода.Вставить("РазмерШрифта",    12);
					
ОбластьШтрихкод = Макет.ПолучитьОбласть("Штрихкод");
ОбластьШтрихкод.Рисунки.ШК.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
ТабДок.Вывести(ОбластьШтрихкод);
//...

1С Как обновить форму документа в тонком клиенте

1С Как обновить форму документа в тонком клиенте

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

&НаКлиенте
Процедура Заполнить(Команда)
	
	//Код по изменению и сохранению данных документа в базе данных
	//...
	
	ФормаВладелец = ЭтаФорма.ВладелецФормы;
	ФормаВладелец.Прочитать();
	
КонецПроцедуры

Данный код выполняется в форме обработке по заполнению табличной части.

1С:Предприятие, мои первые шаги в обучении

Надо отдать должное компании 1С, так как благодаря их усилиям по внедрению повсеместно продуктов аналитического учета таких как 1С:Предприятие, найти работу обычным эникейщикам которые не имеют опыта работы с данными системами становиться очень сложно. Практически во всех вакансиях, которые присутствуют в общем доступе, требуются знание и опыт администрирования, а так же программирования в данной системе, желательны еще и знания бухгалтерского учета. Читать далее