Архив автора: Благин Константин

Загрузка из 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.

Интернет-магазин шин — ООО Оптом-Колёса

Интернет-магазин шин - ООО Оптом-Колёса
Интернет-магазин «Оптом-колеса», который представляет широчайший ассортимент шин, как отечественных, так и мировых производителей. Основной целью интернет-магазина «Оптом-колеса» является продажа шин оптом. В каталоге нашего магазина Вы можете ознакомиться с ассортиментом колес и оформить заказ.
Адрес Оптом-Колёса, почта интернет-магазин шин Оптом Колёса, реквизиты шины оптом, оптовикам шины расчетный счет, почта колёса оптом, график работы оптом колеса, реквизиты счет колеса, счет на шины, купить по перечислению шины
Мы предлагаем Вам автошины ведущих мировых производителей, следующих брендов: Кама, Кама EURO, Viatti (ассортимент постоянно расширяется). Каждая модель шин интернет-магазина имеет описание, которое поможет сделать правильный выбор. Компания «Оптом-колеса» предоставляет Вам отличную возможность купить шины по оптовым ценам не выходя из дома (офиса), то есть экономит не только Ваш бюджет, но и Ваше время.

На правах рекламы.

Использование шаблонов 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С. Если вы создали внешнюю обработку для заполнения табличной части документа на основе управляемых форм и теперь хотите обновить отображение данных документа, можете воспользоваться следующим способом:

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

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

Старые концепты — Old concepts of weapons

Старые концепты, которые вряд ли, когда либо, будут воплощены в жизнь.

Spider — zbrush speed sculpting

Паучок сделанный за вечер, по старому рисунку, по-моему получилось довольно мило 🙂

Простая сцена в UDK / Simple UDK Scene

Пока есть время и возможность, изучаю игровой движок Unreal, разработка игр в котором ведется при помощи программного комплекса под названием UDK (Unreal Developer’s Kit), для более подробного изучения решил создать небольшую сцену с фонтаном. Фонтан будет представлять из себя ангела с кувшином, из которого будет литься вода. Примерный набросок фигуры можно видеть на рисунке, в данный момент объект готов частично:

Набросок и первичная модель ангела

Набросок и первичная модель ангела


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

План сцены


Изначально, базовые низкополигональные модели были созданы в Blender и Makehuman, одежда была создана при помощи симуляции. Далее было решение делать скульптинг в Blender, но как выяснилось на опыте, он не может стабильно работать с большим количеством полигонов, при превышении порога в 1,5 миллиона, он просто завершался. На помощь пришел ZBrush, который с успехом справляется и с более большим количеством полигонов.

Обновление (30.05.2013): Модель ангела для фонтана, тестовый рендер в ZBrush.

Обновление (05.06.2013): Сделано основание фонтана, добавлены детали, такие как трещины, сколы, царапины. Так же добавлены текстуры и материалы. Дальнейший шаг, ретопология высоко-полигональной модели(около 3 миллионов полигонов), в программе TopoGun.

Обновление (20.06.2013): Наконец то сделана, низко полигональная модель, которая будет использоваться в игровом движке, в итоге получилось 11 тысяч полигонов. Как было сказано выше, ретопологию хотел сделать в программе TopoGun, но в ней есть одна особенность, которая мне очень мешала, объект ретопологии просвечивал и были видны полигоны на обратной стороне, что сильно сбивало с толку, может эту функцию можно было отключить, к сожалению, так и не нашел как это сделать. Зато в TopoGun, очень удобно генерировать карты нормалей и текстуры, что как раз будет сделано именно в ней. Ретопология же производилась в программе Blender , при помощи модификатора Shrinkwrap, дополнения Bsurfaces и включенной опции Snap.

Обновление (21.06.2013): Сегодня были созданы карты нормалей и текстуры объектов, с помощью программы TopoGun. Так же, создан тестовый рендер в программе Marmoset Toolbag.

Обновление (01.07.2013): Тестовый рендер модели в UDK, смотрится вроде бы не плохо.

Обновление (03.07.2013): Вот и готова простая сцена в UDK, к сожалению реализовать все задуманное не получилось, так как, мой компьютер просто не способен на большее, как играть в сапера, чуть не туда нажал и все, конец.
Видео (смотрите в HD):

Скриншоты:

Еще немного зарисовок