Перейти к содержимому

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

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

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

Простая сцена в 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):

Скриншоты:

Character: Robo

Персонаж: Robo - (Blender, ZBrush, Photoshop)

Небольшой набросок персонажа Robo, потрепанный с искренними глазами робот. На лице повязка, скрывающая удаленный голосовой модуль. На голове старый цилиндр, помятый и местами порванный. Штаны старые, в заплатках и местами не аккуратно штопанные, на теле множество масленых потеков, царапин, заплаток, при движении местами появляются искры. На одной ноге старый, рваный ботинок, другая частично повреждена. Шея и руки удлиненные, телескопические и гибкие. Ремень представляет из себя простую веревку(бечевку) или сплетенные провода.

Зарисовка персонажа:

Character: Robo - sketch
Character: Robo — sketch

Первый этап моделирования:
character-robo

Добавлено немного деталей:
character-robo-2

Смоделированы еще детали персонажа, следующий этап скульптинг:
character-robo-3

08.04.2013 Скульптинг в ZBrush, небольшая детализация:

Robo sculpt zbrush
Robo sculpt zbrush

12.04.2013 Результат:

Персонаж: Robo - (Blender, ZBrush, Photoshop)
Персонаж: Robo

Персонаж: Robo - (Blender, ZBrush, Photoshop)
Персонаж: Robo

Бетти Эдвардс: «Открой в себе художника» — Результаты и итоги.

Бетти Эдвардс: «Открой в себе художника» - Результаты и итоги.

Всю свою жизнь, я всегда мечтал научиться рисовать и завидовал тем людям, которые могли просто взять карандаш и изобразить на бумаге, что-то прекрасное, необычное или же просто объект из повседневной суеты. Теперь же, я понимаю, что научится раз и навсегда рисовать не возможно, это процесс длиною в жизнь. Оглядываясь назад и оценивая рисунки «до» и «после», то прогресс заметен, только все равно, еще не так хорошо, как хотелось бы. Критическое отношение осталось и это правильно, так как всегда нужно стремиться к совершенству, хотя оно и ни когда не будет достигнуто, в этом то и вся прелесть рисования.

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

На многих ресурсах в сети интернет, встречается большое количество нелестных и негативных отзывов и комментариев к данной книге, хочу посоветовать, ни обращать внимание на это, так как, данные слова на первых порах, могут ввести вас в заблуждение. Хочу объяснить данный момент, дело в том, что большинство людей, которые пишут столь отрицательные отзывы, либо используют свои академические навыки рисования либо просто не поняли основную мысль, которую хотел донести автор. Что еще хуже, просмотрев первые страницы и прочитав про «Л» и «П» — режимы, приходят в недоумение и начинают «брызгать слюной», в этом случае все понятно, у людей случился когнитивный диссонанс, это и понятно, всю жизнь их учили одному, а тут какие-то режимы, полушарии мозга и «махинации» с переключениями. Автор дает правильные навыки рисования, контурное рисование, свет и тень, пропорции человека, негативное и позитивное пространство, с единственной разницей, в том что, упор делается на функционирование правого полушария головного мозга.

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

P.S. Хочу выразить благодарность, человеку под псевдонимом Fcl, за статью «Развитие правого полушария головного мозга или как я учился рисовать», без которой, я бы ни когда не узнал, о столь замечательной книге.

Шесть простых и бесплатных иконок / Six simple and free icons

Простые иконки сделанные в программе Blender, если кому понравилось можете использовать на свое усмотрение.

Шесть простых и бесплатных иконок / Six simple and free icons
Шесть простых и бесплатных иконок / Six simple and free icons

Скачать бесплатно: Шесть простых и бесплатных иконок / Six simple and free icons

Лицензия Creative Commons
Произведение «Six simple and free icons» созданное автором по имени Blagin Kostya, публикуется на условиях лицензии Creative Commons «Attribution» («Атрибуция») 3.0 Непортированная.

Львиная голова / Lion Head

Нарисовал львиную голову, если кому нужно, можете скачивать исходник и использовать.

Львиная голова / Lion Head
Львиная голова / Lion Head

Скачать бесплатно: Львиная голова / Lion Head

Лицензия Creative Commons
Произведение «Lion Head» созданное автором по имени Blagin Kostya, публикуется на условиях лицензии Creative Commons «Attribution-ShareAlike» («Атрибуция — На тех же условиях») 3.0 Непортированная.
Разрешения, выходящие за рамки данной лицензии, могут быть доступны на странице https://blagin.ru/contacts/.

Создание HDR изображения в Blender / Create HDR image in Blender

В данном примере, хочу показать, как можно создать, свою собственную карту освещения для ваших 3D сцен. Делать мы ее будем в программе Blender, используя движок Cycles Render, пример такого изображения и его использования, вы можете видеть на рисунке ниже:

Создание HDR изображения в Blender
Создание HDR изображения в Blender

Подробнее »Создание HDR изображения в Blender / Create HDR image in Blender