В предыдущей заметке «Использование шаблонов Word в 1С» был показан простой способ, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных. В текущей заметке «1с word шаблон» будет показан один из способов, как можно реализовать заполнение таблиц в шаблоне Word.
Для примера использовался шаблон Word следующего вида: 1с word шаблон — Заполнение таблиц в шаблоне Word — Шаблон
Как видно из шаблона, закладка «Таблица1» является указателем на начало таблицы и служит для позиционирования выделения.
Теперь непосредственно сам способ, для его реализации использовалась внешняя обработка, в модуле формы которой, описана лишь одна процедура «ПриОткрытии(Отказ)»:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
//Попытка создать COM объект
Попытка
ОбъектВорд = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
//Путь к шаблону
ОбъектВорд.Documents.Add("C:\Users\Константин\Desktop\Шаблон.docx");
ШаблонВорд = ОбъектВорд.ActiveDocument;
//Заполняем первую таблицу
Если ШаблонВорд.Bookmarks.Exists("Таблица1") Тогда
//Выделяем обязательную закладку начала таблицы
ШаблонВорд.Bookmarks("Таблица1").Select();
//Перемещаемся вниз, выделяем строку таблицы и копируем ее в буфер обмена
ШаблонВорд.Application.Selection.MoveDown();
ШаблонВорд.Application.Selection.SelectRow();
ШаблонВорд.Application.Selection.Copy();
Для Счетчик = 1 По 10 Цикл
//Заменяем значения
ШаблонВорд.Application.Selection.Find.Execute("Номер" ,,,,,,,,,Счетчик,2);
ШаблонВорд.Application.Selection.Find.Execute("ЗначениеКолонки1" ,,,,,,,,,Счетчик+10,2);
//Последний параметр поиска пустой
ШаблонВорд.Application.Selection.Find.Execute("ЗначениеКолонки2" ,,,,,,,,,Счетчик+100,);
//Перемещаемся вниз, вставляем из буфера обмена строку
ШаблонВорд.Application.Selection.MoveDown();
ШаблонВорд.Application.Selection.Paste();
//Перемещаемся вверх и выделяем строку для замены значений
ШаблонВорд.Application.Selection.MoveUp();
ШаблонВорд.Application.Selection.SelectRow();
КонецЦикла;
//Вырезаем лишнюю строку
ШаблонВорд.Application.Selection.Cut();
//Скрываем обязательную закладку начала таблицы
ШаблонВорд.Bookmarks("Таблица1").Select();
ШаблонВорд.Application.Selection.TypeText(" ");
КонецЕсли;
ОбъектВорд.Application.Visible = Истина;
ОбъектВорд.Activate();
//Закрытие документа
//ОбъектВорд.Application.Quit();
КонецПроцедуры
Как видно из кода процедуры, сначала находим закладку, выделяем и копируем строку таблицы находящуюся ниже, после заменяем текст на значения и вставляем скопированную строку. Результат работы внешней обработки 1С «Заполнение таблиц в шаблоне Word»: 1с word шаблон — Заполнение таблиц в шаблоне Word — Результат
Загрузка из Excel в 1С, довольно частая задача, которую приходится решать программистам 1С. В данной заметке будет показано, как произвести загрузку данных из файла Excel в 1С, наиболее быстрым и оптимальным способом. Перед тем как показать примеры кода, объяснюю как производить отладку и проверку выполнения SQL запросов к файлу Excel, для последующей загрузки данных в программу 1С.
Для примера будет использоваться файл формата Excel со следующей структурой и данными: Данные Excel для загрузки в 1С
Чтобы выполнить SQL запрос к файлу Excel и проверить результат, необходимо запустить программу Microsoft Excel, перейти в главном меню программы на вкладку «Данные», далее нажать кнопку «Из других источников» и в появившемся меню выбрать пункт «Из Microsoft Query»: Запуск MSQuery для загрузки из Эксель в 1С
После появится окно «Выбор источника данных», в нем необходимо выбрать пункт «Excel Files*» и нажать «ОК»: Выбор источника для загрузки
Далее выбрать непосредственно ваш файл Excel для выборки данных. Может появится предупреждение, что «Данный источник данных не содержит видимых таблиц», игнорируем его и нажимаем «ОК». После необходимо в параметрах установить пункт отображать системные таблицы: Выбор системные таблицы
После включения данной опции, появится возможность выбора листов из книги Excel и столбцов для запроса: Выбор столбцы запроса
Дальше необходимо несколько раз нажать «Далее» и на последнем шаге, выбрать пункт «Просмотр или изменение данных в Microsoft Query» и «Готово»: Просмотр изменение
Откроется окно «Microsoft Query», в котором мы видим выборку данных из нашего файл Excel. Для тестирования и редактирования SQL запросов к файлу Excel, используется кнопка «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С
В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.
В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.
Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом: Использование шаблонов Word в 1С Использование шаблонов Word в 1С
Далее необходимо в файл шаблона для 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С
Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.
Дополнение к заметке Использование шаблонов Word в 1С
Выражаю благодарность, всем тем, кто комментирует запись, благодаря вам, материал дополняется новыми данными и будет полезен более широкому кругу посетителей.
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 кодом:
Я получаю вместо нормального документа вот такой 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
Функция ЗаполнитьШаблонВорд()
//Попытка создать 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С. Если вы создали внешнюю обработку для заполнения табличной части документа на основе управляемых форм и теперь хотите обновить отображение данных документа, можете воспользоваться следующим способом:
&НаКлиенте
Процедура Заполнить(Команда)
//Код по изменению и сохранению данных документа в базе данных
//...
ФормаВладелец = ЭтаФорма.ВладелецФормы;
ФормаВладелец.Прочитать();
КонецПроцедуры
Данный код выполняется в форме обработке по заполнению табличной части.
Надо отдать должное компании 1С, так как благодаря их усилиям по внедрению повсеместно продуктов аналитического учета таких как 1С:Предприятие, найти работу обычным эникейщикам которые не имеют опыта работы с данными системами становиться очень сложно. Практически во всех вакансиях, которые присутствуют в общем доступе, требуются знание и опыт администрирования, а так же программирования в данной системе, желательны еще и знания бухгалтерского учета.
До первого знакомства с данной системой у меня было не особенно положительное мнение о встроенном языке программирования 1С, до сих пор в Интернете можно встретить высказывания негативного характера о данной системе, в основе этих высказываний лежит банальное невежество, будем это исправлять.
После анализа сложившейся ситуации пришел к выводу, что изучить данную систему просто необходимо, для этого решил воспользоваться программным продуктом «1С:Предприятие 8.2 Версия для обучения программированию». На официальном сайте о данном решение говориться следующие:
Версия для обучения программированию – доступное решение для широкого круга пользователей, которые хотят познакомиться с системой программ «1С:Предприятие 8» и научиться приемам конфигурирования: созданию и изменению структуры метаданных, написанию программных модулей, разработке диалогов и интерфейсов, администрированию прикладных решений на платформе «1С:Предприятие 8».
В состав продукта входит: Книги: 1С:Предприятие 8.2. Руководство разработчика (в 2-х частях);
1С:Предприятие 8.2. Руководство администратора
М.Г.Радченко, Е.Ю. Хрусталева «1С:Предприятие 8.2. Практическое пособие разработчика. Примеры и типовые приемы» (+ CD-ROM) CD-ROM: 1С:Предприятие 8.2. Версия для обучения программированию
На мой взгляд, очень полезным и интересным здесь является платформа для обучения, за столь не высокую цену получаем легальную систему для освоения администрирования и программирования. Хотя у нее много ограничений и притом снижена скорость работы, но все-таки для начала думаю самое то:
Ограничения и особенности учебной версии платформы «1С:Предприятия 8.2»
По сравнению с коммерческими версиями учебная версия платформы «1С:Предприятие 8.2» имеет следующие ограничения: ограничено количество данных:
максимальное количество записей в таблицах счетов 500;
максимальное количество записей в главных таблицах объектов 200;
количество записей в табличных частях объектов 1000;
количество записей в наборах записей 1000;
не поддерживается работа в варианте клиент-сервер;
не поддерживается работа распределенных информационных баз;
не поддерживается COM-соединение;
отсутствует возможность использования паролей и аутентификации операционной системы для пользователей;
печать и сохранение табличных документов поддерживаются только в режиме Конфигуратора;
не поддерживается копирование содержимого более чем одной ячейки табличного документа в режиме «1С:Предприятия»;
быстродействие учебной версии ниже, чем у коммерческой версии «1С:Предприятие 8.2»;
не поддерживается работа с хранилищем конфигурации;
не доступна функциональность, связанная с поставкой конфигурации;
количество одновременных сеансов работы с информационной базой ограничено одним сеансом.
Учебная версия платформы «1С:Предприятие 8.2» не имеет аппаратной или программной защиты, однако ее быстродействие снижено по сравнению с коммерческой версией «1С:Предприятие 8.2».
Первым делом регистрируемся на сайте по адресу: http://users.v8.1c.ru/getpswbase.jsp . Особенно порадовала непрошибаемая форма Регистрация пользователя на сайте по PIN-коду, где постоянно выдавала ошибку о том, что неверно заполнены данные регистрационного номера и PIN кода, хотя данные были проверены несколько раз и вводились крайне внимательно!
Потратив немного времени, все-таки после нескольких попыток мне удалось зарегистрироваться и благополучно получить свой пароль для доступа в личный кабинет. Главное что меня интересовало в это кабинете так это страница Порядок получения обновлений с пользовательского сайта «1С:Предприятия 8» где довольно подробно и с картинками было описан метод обновления.
После распаковки коробки и регистрации на сайте, пробуем установить учебную версию 1С, запускаем autorun.exe, появляется первоначальное окно запуска:
Выбираем автоматическую установку и далее программа установки сама все устанавливает без нашего вмешательства в процесс, в конце установки выводится окно запуска учебной версии 1С:Предприятия
Далее устанавливаем приложение к книге «1С:Предприятие 8.2 Практическое пособие разработчика. Примеры и типовые приемы», процесс не сложный и быстрый. В описании к поставке хорошо описано, что собой представляет данный комплект. Теперь можно смело приступать к изучению 1С.