Экспорт печатных форм и любых данных из 1С в BMP, JPEG, PCX, PDF, PNG и TIFF. Оптимальным решением является установка
Bullzip PDF Printer . После установки в системе появляется виртуальный принтер, с помощью которого можно "печатать" в файл pdf из любого приложения. Программа бесплатная, работает в терминале и имеет поддержку русского языка.
После установки, можно печатать напрямую используя код:
Код 1C v 8.х
//Таб - ТабличныйДокумент
//ИмяФайла – путь для сохранения файла PDF (например «D:\Torg12.pdf»)
Процедура СоздатьФайлПДФ(Таб, ИмяФайла)
Попытка
ПДФПринтер = Новый ComObject(«Bullzip.PDFPrinterSettings»);
ПДФПринтер.SetValue(«output», ИмяФайла);
ПДФПринтер.SetValue(«ShowSaveAS», «never»);
ПДФПринтер.SetValue(«ShowProgress», «no»);
ПДФПринтер.SetValue(«ShowProgressFinished», «no»);
ПДФПринтер.SetValue(«ShowSettings», «never»);
ПДФПринтер.SetValue(«ShowPDF», «no»);
ПДФПринтер.SetValue(«ConfirmOverwrite»,»no»);
ПДФПринтер.WriteSettings();
Таб.Автомасштаб = Истина;
Таб.ИмяПринтера = «Bullzip PDF Printer»;Таб.Напечатать(Истина);
PDFФайл = Новый Файл(ИмяФайла);
Пока НЕ PDFФайл.Существует() Цикл
ОбработкаПрерыванияПользователя();
КонецЦикла;
Исключение
Сообщить(ОписаниеОшибки());
Сообщить(«Скорее всего необходимо установить или переустановить «»Bullzip PDF Printer»);
КонецПопытки;
//устанавливаем принтер по умолчанию
Таб.ИмяПринтера = ПолучитьПринтерПоУмолчанию();
КонецПроцедуры
Здесь функция
ПолучитьПринтерПоУмолчанию() нужна для того чтобы вернуть печатной форме принтер по умолчанию, т.к. если напечатать без предварительного просмотра то печать пойдет на виртуальный PDF принтер BullzipPDFPrinter.
Код 1C v 8.х //получаем принтер по умолчанию
Функция ПолучитьПринтерПоУмолчанию()
Скрипт = Новый ComObject(«MSScriptControl.ScriptControl»);
Скрипт.Language = «vbscript»;
Скрипт.AddCode(»
|Function GetDefaultPrinter()
|GetDefaultPrinter=vbNullString
|Set objWMIService=GetObject(«»winmgmts:»" _
|& «»{impersonationLevel=impersonate}!\\.\root\cimv2″»)
|Set colInstalledPrinters=objWMIService.ExecQuery _
|(«»S_elect * from Win32_Printer»")
|For Each objPrinter in colInstalledPrinters
|If objPrinter.Attributes and 4 Then
|GetDefaultPrinter=objPrinter.Name
|Exit For
|End If
|Next
|End Function»);
Возврат СокрЛП(Скрипт.run(«GetDefaultPrinter»));
КонецФункции
Печать в PDF используя bioPDF Категория:
Администрирование Запрос к базе данных SQL Код 1C v 8.х Функция ПодключитьCOMОбъект(Путь) Экспорт
Отказ = Ложь;
COMСоединение = Новый COMОбъект("ADODB.Connection");
COMСоединение.ConnectionString = ".....";
COMСоединение.ConnectionTimeOut = 1200;
COMСоединение.CursorLocation = 3;
Попытка
COMСоединение.Open(COMСоединение.ConnectionString);
Исключение
Отказ = Истина;
COMСоединение = "";
Предупреждение("Невозможно установить соединение - " + ОписаниеОшибки());
Возврат НЕ Отказ;
КонецПопытки;
Возврат НЕ Отказ;
КонецФункции
Процедура КнопкаВыплонитьНажатие(Кнопка)
Если НЕ ПодключитьCOMОбъект(ПутьКФайлуГДБ) Тогда
ЗакрытьФормуИндикатора();
Возврат;
КонецЕсли;
КомандаАДО = Новый COMОбъект("ADODB.Command");
ТекстЗапроса = "S_elect id from nomenclature where ext _1c_id = 1";
Рекордсет = Новый COMОбъект("ADODB.Recordset");
Попытка
Рекордсет = КомандаАДО.Execute();
Исключение
Предупреждение("Не получилось выполнить запрос!" + " - " + ОписаниеОшибки());
КонецПопытки;
Рекордсет.MoveFirst();
Пока Рекордсет.EOF() = 0 Цикл
ОбработкаПрерыванияПользователя();
айди = Рекордсет.Fields("id").Value;
Сообщить(айди);
КонецЦикла;
КонецПроцедуры
еще пример:
Код 1C v 8.х стрПодключения = "Driver={SQL Server};"
стрПодключения = стрПодключения + ИмяСервера + ";";
стрПодключения = стрПодключения +"Uid=" + ИмяПользователя + ";";
стрПодключения = стрПодключения + "Pwd=" + Пароль + ";";
стрПодключения = стрПодключения + "DataBase =" + ИмяБазы + ";";
стрПодключения = стрПодключения + "Pwd=" + Пароль + ";";
Connection = Новый COMОбъект("ADODB.Connection");
Connection.OpenServer = стрПодключения;
RS = Новый COMОбъект("ADODB.Recordset");
// Запрос к базе на языке SQL запросов.
RS.Open("S_elect * from TradeUnit", Connection);
Пока RS.EOF() = 0 Цикл
// Можно обращаться и обрабатывать значения полей выборки.
ИД = RS.Fields("ID").Value;
Код = RS.Fields("Code").Value;
// Обработка других полей
RS.MoveNext ();
КонецЦикла;
RS.Close();
Connection.Close(); Категория:
COM-объекты, WMI, WSH Подключение к 1С из JavaScript Код //Подключается делает выборку прогоняет по циклу количество записей соответствует истине
function dataload()
{
var v8=new ActiveXObject("V81.COMConnector");
path='d:\\';
db='baza';
user='admin';
password='141004';
conn = v8.Connect("File='"+path+"';Ref='"+db+"';Usr='"+user+"';Pwd='"+password+"';");
tab = conn.Справочники.Клиенты;
query = conn.NewObject("Запрос");
query.text = 'ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ(Клиенты.Статус) КАК КлиентыПоСтатусу, КОЛИЧЕСТВО(Клиенты.Ссылка) КАК Количество ИЗ Справочник.Клиенты КАК Клиенты СГРУППИРОВАТЬ ПО Клиенты.Статус';
Qresult = query.execute().Choose();
strdat=''; n=1;
while (Qresult.next ())
{
strdat+=n+"). "+Qresult.КлиентыПоСтатусу+"<br>"; n++;
}
document.getElementById("message").innerHTML=strdat;
Категория:
COM-объекты, WMI, WSH Пример подключения к MySQL базе Код 1C v 8.х // Пример 1
Сервер="IP-адрес-сайта"; // IP адрес сайта
ПользовательСервера="имя-пользователя-базы-данных"; // имя пользователя базы данных
ПарольСервера="пароль-пользователя-базы-данных"; // пароль пользователя базы данных
БазаСервера="название-SQL-базы-данных"; // название SQL базы данных
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение_param = "driver={MySQL ODBC 5.1 Driver}; server="+СокрЛП(Сервер)+"; uid="+СокрЛП(ПользовательСервера)+"; pwd="+СокрЛП(ПарольСервера)+"; database="+СокрЛП(БазаСервера)+"; STMT=SET CHARACTER SET utf8";
Try
Соединение.open(Соединение_param);
СоединениеУстановлено = Истина;
Сообщить("Соединение установлено");
Except
ТекстСообщения = ""+ТекущаяДата()+" Connection error: "+ОписаниеОшибки();
Сообщить(ТекстСообщения);
СоединениеУстановлено = Ложь;
return;
EndTry;
Код 1C v 8.х ]// Пример 2
Соединение = Новый COMОбъект("ADODB.Connection");
ConnectionString = "driver={SQL Server}; server=; uid=; Pwd=; Database = "; // это для MS SQL строка
Попытка
Соединение.Open(ConnectionString);
Сообщить("Соединение осуществлено в "+ТекущаяДата());
Исключение
Предупреждение("Невозможно установить соединение");
Возврат;
КонецПопытки;
ТекстЗакпроса = "....................";
НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
НаборЗаписей.ActiveConnection = Соединение;
НаборЗаписей.Open(ТекстЗапроса);
Пока не НаборЗаписей.Eof() Цикл
// ............код обработки.....................
НаборЗаписей.MoveNext ();
КонецЦикла;
НаборЗаписей.Close();
Соединение.Close();
Сообщить("Обработка завершена в "+ТекущаяДата());
Код 1C v 7.x DB = СоздатьОбъект("ODBCDatabase");
DB.Соединение("DRIVER={MySQL ODBC 5.1 Driver}; SERVER=IP_Супер_мега_сервера; DATABASE=Мега_база; USER=Супер_юзер; PASSWORD=пароль_супер_мега_юзера; OPTION=3;");
RS = СоздатьОбъект("ODBCRecordSet");
RS.SetDatabase(DB);
Если RS.Выполнить("set names cp1251") = 0 Тогда
Сообщить("Ошибка подключения к MySQL" + РазделительСтрок + RS.ПолучитьОписаниеОшибки());
СтатусВозврата(0);
Возврат;
КонецЕсли;
Используя DSN . Большой плюс dsn есть режим проверки и также в текстах 1с
уже не нужен пользователь и пароль. Все детали скрыты в dsn
вот мой успешно работающий код для MY SQL
Код 1C v 7.x sql = СоздатьОбъект("ODBCDatabase");
Имя0 = "DragNet";
Фл1 = sql.Соединение("DSN=" + Имя0 + ";");
Если Фл1 = 0 Тогда
Сообщить("Не смогли открыть DSN = " + Имя0);
Сообщить("Ошибка = " + sql.ПолучитьОписаниеОшибки() );
Иначе
sql.УстТолькоЧтение(1);
КонецЕсли;
rc = СоздатьОбъект("ODBCRecordSet");
rc.УстБД(sql);
еще, драйвер 3.51:
Код 1C v 7.x //Тестируем установку параметров соединения
клМускул = СоздатьОбъект("ODBCDatabase");
клМускул.СтрокаСоединения = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;
|Port=3306;Database=_1c;User=_1c_user; Password=_1c_pass;
|Option=3;";
Результат = клМускул.СтрокаСоединения;
ПроверитьРавенство(Результат,"Driver={MySQL ODBC 3.51 Driver};Server=localhost;
|Port=3306;Database=_1c;User=_1c_user; Password=_1c_pass;
|Option=3;"); Категория:
COM-объекты, WMI, WSH ДБФ, работа с Индекс, Ключ Код 1C v 8.х ФайлНаДиске = Новый Файл(ИмяФайла);
Если НЕ(ФайлНаДиске.Существует()) Тогда
Предупреждение("Файл с таким именем не существует " + ИмяФайла);
Возврат;
КонецЕсли;
ДБФ = Новый xBase;
ДБФ.Кодировка = КодировкаXBase.OEM;
ДБФ.ОткрытьФайл(ИмяФайла);
Если ДБФ.Открыта() = 0 Тогда
Предупреждение("Неудалось открыть файл. Возможно он занят другим приложением!");
Возврат;
КонецЕсли;
ДБФ.Индексы.Добавить("IDX_vE","VAL(EXT ENSION)",Ложь,Ложь,"PREFLEN1>0");
ДБФ.СоздатьИндексныйФайл(ИмяИндекса);
ДБФ.ТекущийИндекс = ДБФ.Индексы.IDX_vE;
ДБФ.Ключ.EXT ENSION = "1002";
Если ДБФ.НайтиПоКлючу("=") = Истина Тогда
ТекЗапись=ДБФ.НомерЗаписи();
Пока СокрЛП(ДБФ.EXT ENSION) = "1002" Цикл
Сообщить("-" + ДБФ.EXT ENSION + " - " + ДБФ.НомерЗаписи() + "-");
ДБФ.Следующая();
КонецЦикла;
Иначе
Сообщить("Нет записи!");
КонецЕсли;
ДБФ.ЗакрытьФайл();
УдалитьФайлы(ИмяИндекса);
Код 1C v 8.х // Перекачка справочника "Подразделение" в DBF-файле
ФайлБД=КаталогИмя+"Spr_podr."; // Название файла без расширения
xБД=Новый Файл(ФайлБД+"dbf"); // Создание объекта файла в среде 1С
// Удалить, если файлы уже есть (в том числе и индексный файл)
Если xБД.Существует() Тогда
УдалитьФайлы(ФайлБД,"*");
КонецЕсли;
// Создание файлов
xБД = Новый XBase; // создание объекта файла формата xBase
// добавим поля
xБД.Поля.Добавить("Id", "S", 5);
xБД.Поля.Добавить("Name", "S", 25);
xБД.СоздатьФайл(ФайлБД+"dbf"); // создадим реальный файл из объекта
// Индексное выражение
ИндВр="Id";
xБД.индексы.Добавить("Id",ИндВр,Истина);
ИБД = xБД.СоздатьИндексныйФайл(ФайлБД+"cdx"); // создание индексного файла
xБД.АвтоСохранение=Истина;
xБД.ЗакрытьФайл();
// Выкачка данных
xБД.ОткрытьФайл(ФайлБД+"dbf",ФайлБД+"cdx");
xБД.ТекущийИндекс = xБД.индексы.Id;
Выборка=Справочники.Подразделения.Выбрать();
Пока Выборка.Следующий() Цикл
xБД.Добавить();
xБД.ID=Выборка.Код;
xБД.Name=Выборка.Наименование;
xБД.Записать();
КонецЦикла;
xБД.ЗакрытьФайл();
// проверка работы индекса
xБД.ОткрытьФайл(ФайлБД+"dbf",ФайлБД+"cdx");
xБД.ТекущийИндекс = xБД.индексы.Id;
Если xБД.Найти("00003",">=") Тогда
Сообщить(xБД.ID+" - "+xБД.NAME);
Пока xБД.Следующая() Цикл
Сообщить(xБД.ID+" - "+xБД.NAME);
КонецЦикла;
КонецЕсли;
xБД.ЗакрытьФайл(); Категория:
XML, DBF, TXT, CSV Заполнение табличного поля данными таблицы значений, полученной из SQL - Запроса Код 1C v 8.х Процедура ЗаполнитьНажатие(Элемент)
запрос = СоставитьЗапрос(); //Функция СоставитьЗапрос() возвращает строку запроса
ТаблицаВывода = Новый ТаблицаЗначений;
ТаблицаВывода.Очистить();
ТаблицаВывода = ЗапросКСкуль(CRM_MSSQL_Сервер,CRM_MSSQL_БазаДанных,CRM_MSSQL_Логин,CRM_MSSQL_Пароль,Запрос);
ТабличноеПоле.Очистить();
ЭлементыФормы.ТабличноеПоле.Значение=ТаблицаВывода;
ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
КонецПроцедуры
Функция ЗапросКСкуль(SQLServer,DSN,Login,Password,txtSQL)
Соединение = Новый COMОбъект("ADODB.Connection");
НаборЗаписей = Новый ComObject("ADODB.RecordSet");
Команда = Новый COMОбъект("ADODB.Command");
Соединение.ConnectionString = ("Provider=SQLOLEDB; Data Source = ") + SQLServer +
(";Initial Catalog=") + DSN + (";UID=") + Login + ("; PWD=") + Password + (";");
Соединение.ConnectionTimeOut = 15;
//Попытка
Соединение.Open();
// Сообщить("Connect");
//Исключение
// Сообщить("No connect");
//КонецПопытки;
Команда.ActiveConnection = Соединение;
Команда.CommandText = txtSQL;
//Попытка
НаборЗаписей = Команда.Execute ();
// Сообщить("Add record");
//Исключение
// Сообщить("No I_nsert");
//КонецПопытки;
Таблица = Новый ТаблицаЗначений;
//Состояние ("Заполнение временной таблицы...");
Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count-1 Цикл //Создание и добавление колонок во временную таблицу
ИмяСтолбца =НаборЗаписей.Fields.Item(НомерСтолбца).Name;
Таблица.Колонки.Добавить(ИмяСтолбца);
//Сообщить(ИмяСтолбца); // Тестовая строка
КонецЦикла;
Пока НЕ НаборЗаписей.EOF Цикл // Заполнение созданной таблицы
НоваяСтрока = Таблица.Добавить();
Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count-1 Цикл
НоваяСтрока.Установить(НомерСтолбца,НаборЗаписей.Fields(НомерСтолбца).Value);
//Сообщить ("Test " + ЗаписиSQL.Fields(НомерСтолбца).Value + ЗаписиSQL.Fields(НомерСтолбца).Name);
КонецЦикла;
НаборЗаписей.MoveNext ();
КонецЦикла;
//Состояние ("Закрываем соединение с SQL...");
Соединение.Close();
Возврат Таблица;
КонецФункции
Код 1C v 8.х Функция ЗапросSQL (SQLServer,Login,Password,ТекстSQL) //Функция выборки данных из SQL сервера и передача во временную таблицу 1С
СтрокаСоединения = ("Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = ") + SQLServer +
(";UID=") + Login + ("; PWD=") + Password + (";");
Подключение = Новый ComObject("ADODB.Connection");
Подключение.ConnectionString=СтрокаСоединения;
Попытка
Подключение.Open(СтрокаСоединения);
Состояние ("Подключение к серверу SQL...");
Исключение
Сообщить(ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
СоединениеSQL = Новый COMObject("ADODB.Command");
СоединениеSQL.ActiveConnection = Подключение;
СоединениеSQL.NamedParameters = True;
СоединениеSQL.CommandText = ТекстSQL;
СоединениеSQL.CommandType = 1;
//СоединениеSQL.Prepared = Истина;
Param1 = СоединениеSQL.CreateParameter("n",3,1,1,1);
СоединениеSQL.Parameters.Append(Param1);
Param2 = СоединениеSQL.CreateParameter("ДатаПриходаС",200,1,8,Формат(НачалоПериода,"ДФ=ггггММдд"));//Формат(НачалоПериода,"ДФ=ггггММдд"));
СоединениеSQL.Parameters.Append(Param2);
Param3 = СоединениеSQL.CreateParameter("ДатаПриходаПо",200,1,8,Формат(КонецПериода,"ДФ=ггггММдд"));
СоединениеSQL.Parameters.Append(Param3);
СоединениеSQL.Parameters.Refresh();
Состояние ("Выполнение запроса SQL...");
ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
ЗаписиSQL = СоединениеSQL.Execute();
Таблица = Новый ТаблицаЗначений;
Состояние ("Заполнение временной таблицы...");
Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл //Создание и добавление колонок во временную таблицу
ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name;
Таблица.Колонки.Добавить(ИмяСтолбца);
Сообщить(ИмяСтолбца);
КонецЦикла;
Пока ЗаписиSQL.EOF = 0 Цикл // Заполнение созданной таблицы
НоваяСтрока = Таблица.Добавить();
Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл
НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value);
Сообщить ("Test " + ЗаписиSQL.Fields(ИмяСтолбца).Value + ИмяСтолбца);
КонецЦикла;
ЗаписиSQL.MoveNext ();
КонецЦикла;
Состояние ("Закрываем соединение с SQL...");
ЗаписиSQL.Close();
Подключение.Close();
Возврат Таблица; // Возврат таблицы значений запроса SQL
КонецФункции Категория:
COM-объекты, WMI, WSH Копирование данных из одного созданного экселя в другой и открытие excel (с сохранением форматов) Копирование данных из одного созданного экселя в другой и открытие excel (с сохранением шрифта, рамки положения текста) и с созданием закладки на которую как раз копируются данные:
Код 1C v 8.х // Данный код создает эксель, с одним листом и открывает в нем файл
// далее тут же создается второй лист с нужным нам наименованием
// и в созданный второй лист копируем данные из другого экселя, с сохранением всех атрибутов текста
Процедура КопируемЕксел()
ДокExcel = Новый COMОбъект("Excel.Application");
// этот кусок отвечает за создание чистого листа
//ДокExcel.Application.Workbooks.Application.Workbooks.Add(1);
//ДокExcel.Application.Workbooks.Application.ActiveSheet.Application.Workbooks.Open("d:\temp\file.xls");
// а здесь мы просто открываем любой указанный файл
ДокExcel.Application.Workbooks.Application.Workbooks.Open("d:\temp\file.xls");
ДокExcel.Application.Workbooks.Application.ActiveSheet.Name = "Отчет Общий";
// создаем второй лист с наименованием "Отчет Региональный"
ДокExcel.Application.Workbooks.Application.ActiveWorkbook.Worksheets.Add();
ДокExcel.ActiveWorkbook.Sheets.Application.ActiveSheet.Name = "Отчет Региональный";
xlLastCell = 11;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open("d:\temp\Региональный.xls");
Состояние("Обработка файла Microsoft Excel...");
ExcelЛист = Excel.Sheets(1);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
КонецПопытки;
ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
RowCount = ActiveCell.Row; // количество строк
ColumnCount = ActiveCell.Column; // колиество колонок
Для Column = 1 По ColumnCount Цикл
// Выставляем ширину колонок
ДокExcel.Columns(Column).ColumnWidth = ExcelЛист.Columns(Column).ColumnWidth;
КонецЦикла;
Для Row = 1 По RowCount Цикл
Для Column = 1 По ColumnCount Цикл
// переносим значение ячейки
ДокExcel.Cells(Row,Column).Value = ExcelЛист.Cells(Row,Column).Value;
// Устанавливаем шрифт
ДокExcel.Cells(Row,Column).Font.Size = ExcelЛист.Cells(Row,Column).Font.Size;
ДокExcel.Cells(Row,Column).Font.Bold = ExcelЛист.Cells(Row,Column).Font.Bold;
// объединяем ячейки
ДокExcel.Range(ExcelЛист.Cells(Row,Column).MergeArea.Address).Select();
ДокExcel.Selection.Merge();
// обводим ячейки рамкой
ДокExcel.Range(ExcelЛист.Cells(Row,Column).MergeArea.Address).Borders.LineStyle = ExcelЛист.Cells(Row,Column).MergeArea.Borders.LineStyle; // рисуем рамку для одной ячейки или даипазона ячеек
ДокExcel.Range(ДокExcel.Cells(Row,Column), ДокExcel.Cells(Row,Column)).Borders.LineStyle = ExcelЛист.Cells(Row,Column).MergeArea.Borders.LineStyle; // рисуем рамку для одной ячейки или даипазона ячеек
ДокExcel.Range(ДокExcel.Cells(Row,Column), ДокExcel.Cells(Row,Column)).WrapText = Истина; // автоматический перенос больших строк
ДокExcel.Range(ДокExcel.Cells(Row,Column), ДокExcel.Cells(Row,Column)).VerticalAlignment = -4108; // Выравнивание по вертикали по центру //ExcelЛист.Cells(Row,Column).VerticalAlignment;
ДокExcel.Range(ДокExcel.Cells(Row,Column), ДокExcel.Cells(Row,Column)).HorizontalAlignment = - 4108; // Выравнивание по горизонтали по центру
КонецЦикла;
КонецЦикла;
Excel.WorkBooks.Close();
Excel = 0;
ДокExcel.Visible=1; //Делаем Ексель видимым
// Дополнительные параметры
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Interior.ColorIndex=1; //1= белый фон
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Font.ColorIndex=2; //2= черный цвет шрифта
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Font.Name= "Courier"; // указывает какой шрифт
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Font.Size=12; //размер шрифта
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Font.Bold=1; либо (0); //т.е. истина либо лож - ?(обычный, жирный)
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).InsertIndent(2); //устанавливаем отступ (в данном случае на 2 символа)
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).ColumnWidth= 10; // ширина колонки
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Borders(5).LineStyle = -4142; //очищаем все границы
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).Borders(7).LineStyle=1; //добавили левую границу (7 - левая, 8 - верхняя, 9 - нижняя, 10 - правая )
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).VerticalAlignment = -4160; //выравнивание по левому краю
//Exel.WorkBooks(1).WorkSheets(1).Cells(1,1).WrapText =1 (истина) //устанавливаем перенос слов
//Всего 56 цветов:
//1- белый
//2-черный
//3-красный
//5-синий
//6-желтый
//7-лиловый
//10-зеленый
//33-голубой
//39-сиреневый
//46-оранжевый
//адрес ячейки:
//.Address
//Прямоугольная область ячеек:
//Exel.WorkBooks(1).WorkSheets(2).Range("a1:b2");
//Exel.WorkBooks(1).WorkSheets(2).Range("a1:b2").Copy();
//Exel.WorkBooks(1).WorkSheets(2).Range("a11:b12").Select();
//Exel.WorkBooks(1).WorkSheets(2).Paste();
//Про Диаграммы:
//Два варианта: 1-й если Диаграмма будет распологаться непосредственно на листе с данными, 2-й на отдельном листе.
//Если Диаграмма распологается на листе с данными:
//в скобках параметры определения левого верхнего угла и размеры.
//Chart = Excel.WorkBooks(1).WorkSheets(2).ChartObjects.Add(,,,);
//Если все же на отдельном листе, то добавим Sheets наш элемент: *(СОДЕРЖИТ ЛИСТЫ ВСЕХ ТИПОВ)*
//Excel.WorkBooks(1).Sheets.Add(,,1,-4109);
//где:Add(ПЕРВЫЙ,ВТОРОЙ,1,-4109);
//ПЕРВЫЙ- номер листа, перед которым будет НАШ лист;
//ВТОРОЙ-номер листа, после которого будет НАШ лист;
//1- количество создоваемых листов;
//-4109 - рабочий лист ( -4109 = с диаграммой, -4167 = лист с данными)
КонецПроцедуры Категория:
Работа с Microsoft Office и OpenOffice Функция получения строки с данными из интернета Код 1C v 8.х Функция ПолучитьСИнетаКакСтроку(АдресП)
соминет = Новый COMОбъект("MSXML2.XMLHTTP");
соминет.open ("GET", АдресП, Ложь);
соминет.send();
Возврат соминет.responseText ;
КонецФункции Категория:
Работа с Интернет, Почтой (Mail), FTP Вывести список элементов справочника в Word используя шаблон spisok.dot Код 1C v 7.x Процедура ВывестиСписокЭлементовСправочникаВWord()
спр1=создатьобъект("справочник.сотрудники");
спр1.ИспользоватьДату(ТекущаяДата());
Сообщить( спр1.НайтиПоНаименованию("Администрация",0,1));
Сообщить(спр1.ПолучитьАтрибут("Наименование"));
сотр=создатьобъект("справочник.сотрудники");
сотр.ИспользоватьДату(ТекущаяДата());
сотр.ИспользоватьРодителя(спр1);
отчет=создатьобъект("word.application");
отчет.visible = 1;
отчет.documents.add("d:\spisok.dot");
отчет.documents(1).tables(1).cell(1,2).range.text = спр1.ПолучитьАтрибут("Наименование");
сотр.ВыбратьЭлементы();
ном=2;
Пока сотр.ПолучитьЭлемент(1)=1 цикл
Сообщить(сотр.ПолучитьАтрибут("Наименование"));
отчет.documents(1).tables(2).cell(ном,1).range.text = сотр.ПолучитьАтрибут("Код");
отчет.documents(1).tables(2).cell(ном,2).range.text = сотр.ПолучитьАтрибут("Наименование");
отчет.documents(1).tables(2).cell(ном,3).range.text = сотр.ПолучитьАтрибут("Должность");
отчет.documents(1).tables(2).cell(ном,4).range.text = сотр.ПолучитьАтрибут("Оклад");
отчет.documents(1).tables(2).rows.add();
ном=ном+1;
КонецЦикла;
КонецПроцедуры Категория:
Работа с Microsoft Office и OpenOffice Печать документа в Word используя шаблон doc.dot Код 1C v 7.x
Процедура ПечатьВWord()
wrd=создатьобъект("word.application");
wrd.documents.add("D:\doc.dot");
wrd.visible=1;
wrd.documents(1).tables(1).cell(1,2).range.text = НомерДок;
wrd.documents(1).tables(1).cell(1,4).range.text = ДатаДок;
wrd.documents(1).tables(1).cell(2,2).range.text = Склад.Наименование;
wrd.documents(1).tables(1).cell(3,2).range.text = Получатель.Наименование;
ВыбратьСтроки();
n=КоличествоСтрок() ;
Для i=1 по n-1 Цикл
wrd.documents(1).tables(2).rows.add(wrd.documents(1).tables(2).rows(2).range)
КонецЦикла;
стр = 2;
Пока ПолучитьСтроку()=1 Цикл
wrd.documents(1).tables(2).cell(стр,1).range.text = НомерСтроки;
wrd.documents(1).tables(2).cell(стр,2).range.text =Строка(Товар);
wrd.documents(1).tables(2).cell(стр,4).range.text =Строка(Цена);
wrd.documents(1).tables(2).cell(стр,3).range.text =Строка(Количество);
wrd.documents(1).tables(2).cell(стр,5).range.text =Строка(Сумма);
стр=стр+1;
КонецЦикла;
СуммаДокумента = Итог("Сумма");
wrd.documents(1).tables(2).cell(стр,5).range.text =Строка(СуммаДокумента);
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Получение списка зарегистрированных на текущем компьютере баз 1С Предприятие 1Cv7 Код 1C v 7.x // Процедура получает из реестра список зарегистрированных ИБ 7.7
Процедура ПолучитьСписокИБ()
Попытка
ScrptCtrl=Новый COMObject("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function Get1CV77Titles()
| const HKEY_CURRENT_USER = &H80000001
| Set oReg=GetObject(""winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"")
| strKeyPath = ""Software\1C\1Cv7\7.7\Titles""
| oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrValues
| strInfo=vbNullString
| Get1CV77Titles = strInfo
| On Error Resume Next
| For i = LBound(arrValues) To UBound(arrValues)
| call oReg.GetStringValue(HKEY_CURRENT_USER,strKeyPath,arrValues(i),Value)
| strInfo=strInfo & arrValues(i) & vbTab & Value & vbCrLf
| Next
| Get1CV77Titles = strInfo
|End Function
|");
Текст=СокрЛП(ScrptCtrl.Run("Get1CV77Titles"));
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ТаблицаПути.Очистить();
Если НЕ ЗначениеЗаполнено(Текст) Тогда
Возврат;
КонецЕсли;
Для Ном=1 По СтрЧислоСтрок(Текст) Цикл
СтрБазы=СтрПолучитьСтроку(Текст,Ном);
Разд=Найти(СтрБазы,Символы.Таб);
Путь=Лев(СтрБазы,Разд-1);
Название=Прав(СтрБазы,СтрДлина(СтрБазы)-Разд);
НоваяСтрока = ТаблицаПути.Добавить();
НоваяСтрока.Имя = Название;
НоваяСтрока.Путь = Путь;
КонецЦикла;
ТаблицаПути.Сортировать("Имя");
КонецПроцедуры //ПолучитьСписокИБ
Функция возвращает список значений содержащий список баз установленных на данном компьютаре. В котором в качестве значения указывается путь до базы, а в представлении название базы, так как она отображается в окне выбора баз при запуске 1С. Если баз не обнаруженно то возвращает строку "Error"
Код 1C v 7.x
функция сзПолучитьСписокБаз()
попытка
// Создаем объект Microsoft Script Control.
олеСкрипт = создатьобъект("MSScriptControl.ScriptControl");
// Устанавливаем в качестве языка для выполнения сценариев Visual Basic
олеСкрипт.Language = "VBScript";
// Формируем код на VB.
// В принципе он все делает. Создает объект
// Windows Management Instrumentation и уже через него
// получает значение ключи реестра преобразовывая данные
// в строку.
стрКод =
"function strGetListBase()
| const RootKey = &H80000001
| set Reg = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\."" &_
| ""\root\default:StdRegProv"")
| PathKey = ""Software\1C\1Cv7\7.7\Titles""
| Reg.EnumValues RootKey, PathKey, Arr
| Answer = ""{""""СписокЗначений"""",{""
| for x = LBound(Arr) to UBound(Arr)
| call Reg.GetStringValue(RootKey, PathKey, Arr(x), Value)
| Answer = Answer & ""{{""""Строка"""","""""" &_
| Arr(x) & """"""},"""""" & replace(Value, """""""", """""""""""") &_
| """""",""""0""""}""
| if x <> UBound(Arr) then Answer = Answer & "",""
| next
| Answer = Answer & ""}}""
| strGetListBase = Answer
|end function";
// Добавляем наш код.
олеСкрипт.AddCode(стрКод);
// Вызываем его на выполнение, и пытаемся из полученного результата
// сформировать список значений.
Ответ = значениеизстроки(олеСкрипт.Run("strGetListBase"));
// Отсортируем список по Представлению баз
Ответ.СортироватьПоПредставлению();
исключение
// Если произошла ошибка. Значит вернем "Error".
Ответ = "Error";
конецпопытки;
возврат Ответ;
конецфункции
Еще примеры! Получение списка баз 1С 7.7 из реестра Категория:
Полезные, Универсальные Функции Функция проверки типа значения Код 1C v 8.х
// Функция возвращает Истина при соответствии типов, ложь в обратном случае
Функция НужныйТипЗнач(ИсхЗнач,ТипЗнач)
Возврат ТипЗнч(ИсхЗнач) = Тип(ТипЗнач);
КонецФункции
// Некоторые примеры обращения
// ИсхЗнач - проверяемое значение
// НужныйТипЗнач(ИсхЗнач,"Строка")
// НужныйТипЗнач(глЗначениеПеременной("глТекущийПользователь"),"СправочникСсылка.Пользователи")
// НужныйТипЗнач(ИсхЗнач,"Форма")
// НужныйТипЗнач(ИсхЗнач,"Булево")
// НужныйТипЗнач(ИсхЗнач,"Строка")
// НужныйТипЗнач(ИсхЗнач,"Число")
// НужныйТипЗнач(ИсхЗнач,"Дата"))
// НужныйТипЗнач(ИсхЗнач,"Массив")
// НужныйТипЗнач(ИсхЗнач,"Структура")
// НужныйТипЗнач(ИсхЗнач,"Соответствие")
// НужныйТипЗнач(ИсхЗнач,"СписокЗначений")
// НужныйТипЗнач(ИсхЗнач,"ТаблицаЗначений")
// НужныйТипЗнач(ИсхЗнач,"ДеревоЗначений")
// НужныйТипЗнач(ИсхЗнач,"ПланСчетовСсылка.Хозрасчетный")
// НужныйТипЗнач(ИсхЗнач,"ПланСчетовСсылка.Налоговый")
// НужныйТипЗнач(ИсхЗнач,"ХранилищеЗначения")
// НужныйТипЗнач(ИсхЗнач,"Картинка")
// НужныйТипЗнач(ИсхЗнач,"ПолеВвода")
// НужныйТипЗнач(ИсхЗнач,"Панель")
// НужныйТипЗнач(ИсхЗнач,"Флажок")
// НужныйТипЗнач(ИсхЗнач,"РегистрРасчетаНаборЗаписей.УправленческиеНачисления")
// НужныйТипЗнач(ИсхЗнач,"ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций")
// НужныйТипЗнач(ИсхЗнач,"ДокументСсылка.ОтпускПоУходуЗаРебенком")
// НужныйТипЗнач(ИсхЗнач,"ИнтернетПочтовоеСообщение")
// НужныйТипЗнач(ИсхЗнач, "БизнесПроцессСсылка.м_Документооборот")
Код 1C v 7.x
// Функция возвращает 1 при соответствии типов, 0 в обратном случае
Функция НужныйТипЗнач(ИсхЗнач,ТипЗнач)
Если ТипЗначенияСтр((ИсхЗнач) = ТипЗнач тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
// Некоторые примеры обращения
// ИсхЗнач - проверяемое значение
// НужныйТипЗнач(ИсхЗнач,"Строка")
// Значения типов данных:
// ''Число'' (''Number'') - числовой тип данных;
// ''Строка'' (''String'') - строковый тип данных;
// ''Дата'' (''Date'') - тип данных Дата;
// ''Перечисление'' (''Enum'') - агрегатный тип данных ''Перечисление'';
// ''Справочник'' (''Reference'') - агрегатный тип данных ''Справочник'';
// ''Документ'' (''Document'') - агрегатный тип данных ''Документ'';
// ''Регистр'' (''Register'') - агрегатный тип данных ''Регистр'';
// ''Календарь'' (''Calendar'') - агрегатный тип данных ''Календарь'';
// ''ВидРасчета'' (''Calculation'') - агрегатный тип данных ''ВидРасчета'';
// ''ЖурналРасчетов'' (''CalcJournal'') - агрегатный тип данных ''ЖурналРасчетов'';
// ''ПланСчетов'' (''ChartOfAccounts'') - агрегатный тип данных ''ПланСчетов'';
// ''Счет'' (''Account'') - агрегатный тип данных ''Счет'';
// ''Операция'' (''Operation'') - агрегатный тип данных ''Операция'';
// ''КорректныеПроводки'' (''CorrectEntries'') - агрегатный тип данных ''КорректныеПроводки'';
// ''БухгалтерскиеИтоги'' (''BookkeepingTotals'') - агрегатный тип данных ''БухгалтерскиеИтоги'';
// ''Таблица'' (''Table'') - агрегатный тип данных ''Таблица'';
// ''Текст'' (''Text '') - агрегатный тип данных ''Текст'';
// ''Запрос'' (''Query'') - агрегатный тип данных ''Запрос'';
// ''СписокЗначений'' (''ValueList'') - агрегатный тип данных ''СписокЗначений'';
// ''ТаблицаЗначений'' (''ValueTable'') - агрегатный тип данных ''ТаблицаЗначений'';
// ''Периодический'' (''Periodic'') - агрегатный тип данных ''Периодический'';
// ''Картинка'' (''Picture'') - агрегатный тип данных ''Картинка'';
// ''ГрупповойКонтекст'' (''GroupContext '') - контекст программного модуля или Формы;
// ''OLE'' (''OLE'') - OLE-объект.
// ''НеизвестныйОбьект'' (''UnknownObject'') - для типов, для которых в системе не предусмотрено специальное строковое обозначение;
// '''' (пустая строка) - неопределенный тип данных.
Категория:
Работа с Типами данных Получение локальных, сетевых, сменных (флешек) дисков компьютера При разработке отчетов или обработок рано или поздно приходится сталкиваться с необходимостью определения имени локального диска, сменного накопителя (флешки), сетевого диска. В данной статье представлены 3 способа получения списка дисков компьютера:
Примеры для 8-ой версии, для того чтобы заработало в 7-ой замените:
Код 1C v 8.х Новый COMОбъект(
на
Код 1C v 7.x СоздатьОбъект(
1-вый способ:
Код 1C v 8.х FSO = Новый COMОбъект("Scripting.FileSystemObject");
// Выборка объектов из коллекции Drives
Для каждого Диск Из FSO.Drives Цикл
// Диск.DriveLetter - буква диска
Стр = Диск.DriveLetter;
// Диск.DriveType = 1 - Flash накопитель
// Диск.DriveType = 2 - Локальный жесткий диск
// Диск.DriveType = 3 - Сетевой диск
// Диск.DriveType = 4 - CD/DVD дисковод
Если Диск.DriveType = 3 Тогда // если это сетевой диск, то укажем сетевой путь
Стр = Стр + " - " + Диск.ShareName;
ИначеЕсли Диск.IsReady Тогда
Стр = Стр + " - " + Диск.VolumeName;
Иначе
Стр = Стр + " - [Диск не найден]";
КонецЕсли;
Сообщить(Стр);
КонецЦикла;
2-ой способ:
Код 1C v 8.х
//При помощи скрипта получаем перечень всех дисков компьютера:
Попытка
ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.addcode("
|Function GetComputers()
| Set objWMIService = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"")
| Set colDisks = objWMIService.ExecQuery (""Select * from Win32_LogicalDisk"")
| For Each objDisk in colDisks
| disk = disk & objDisk.DeviceID & "";"" & objDisk.DriveType& "";""
| Next
| GetComputers = disk
|End Function
|");
Текст=СокрЛП(ScrptCtrl.Run("GetComputers"));
Исключение
Предупреждение(ОписаниеОшибки());
КонецПопытки;
//Далее создадим таблицу дисков компьютера
ТабДисков = Новый ТаблицаЗначений;
ТабДисков.Колонки.Добавить("Диск");
ТабДисков.Колонки.Добавить("Описание");
//Переберая полученную информацию из скрипта добавляем ее в таблицу
Пока СтрДлина (Текст)> 0 Цикл
Строка = ТабДисков.Добавить();
Строка.Диск = Лев(Текст,2);
// Далее определим тип диска:
// 1 - Дисковод
// 2 - Flash накопитель
// 3 - Локальный жесткий диск
// 4 - Сетевой диск
// 5 - CD/DVD дисковод
Строка.Описание = Сред(Текст,4,1);
Текст = Сред(Текст,6,СтрДлина (Текст)-5);
КонецЦикла;
// Далее переберая элементы таблицы выведем флешки в окно сообщений
Сообщить("Флешки:");
Для Каждого Элемента Из ТабДисков Цикл
Если Элемента.Описание = "2" Тогда
Сообщить(Элемента.Диск);
КонецЕсли;
КонецЦикла;
3-ий способ:
Код 1C v 8.х //Попытка подключения к WMI на локальном компьютере
Попытка
Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ServicesSet = Locator.ConnectServer(".");
//Извлечение экземпляров класса Win32_LogicalDisk
ObjectSet = ServicesSet.InstancesOf("Win32_LogicalDisk");
Для каждого Item Из ObjectSet Цикл
Сообщить("Имя: " + Item.Caption);
Сообщить("Описание: " + Item.Description); // здесь выводится тип диска
Сообщить("Файловая система: " + Item.FileSystem);
Сообщить("Свободное место: " + Item.FreeSpace);
Сообщить("Метка диска: " + Item.VolumeName);
Сообщить ("=======================") ;
КонецЦикла;
Автор:
Мигачев Евгений Категория:
COM-объекты, WMI, WSH Как конвертировать БД 1С SQL в БД 1с обычную dbf? Последовательность действий такая:
1. Создать новую базу 1С. (Создать пустой каталог, скопировать в него папку Ext Forms, в старотовом окне 1С нажать кнопку добавить, написать название базы и путь к только что созданному каталогу - ок)
2. В старой базе 1С sql сделать "Выгрузку данных" (не путать с "Сохранением данных").
3. В новой базе 1С сделать "Загрузку данных" (не путать с "Восстановлением данных").
Все... пользуемся.
Категория:
Администрирование Подключение к EXCEL и чтение данных из листа Excel Код 1C v 8.х Ex = Новый COMObject("Excel.Application");
Ex.Workbooks.Open(Путь);
Ex.Visible = 1;
ТекЛист=Ex.WorkSheets(1);
Для Ячейка = 1 по 400 цикл
Если НЕ ТекЛист.Cells(Ячейка,1).Value = Неопределено тогда
Сообщить(Строка(ТекЛист.Cells(Ячейка,1).Value));
Карта = Справочники.Номенклатура.НайтиПоКоду(ИзЧислаВСтроку(ТекЛист.Cells(Ячейка,1).Value));
Если Карта.Пустая() тогда
Сообщить(" Пустой элемент " + ТекЛист.Cells(Ячейка,1));
иначе
Объект = Карта.ПолучитьОбъект();
Объект.ОсновнойПоставщик = ОсновнойКлиент;
Объект.Записать();
конецесли;
конецесли;
конеццикла;
Примеры процедур для чтения данных из EXCEL
Код 1C v 8.х
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_ADO(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0) Экспорт
#Если Клиент Тогда
Состояние("Установка соединения с Excel");
#КонецЕсли
//ЗаголовкиВСтроке1 = "HDR=YES;"
ЗаголовкиВСтроке1 = "HDR=NO;";
СтрокаСоединения ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(пФайл) +" ;Ext ended Properties=""Excel 8.0;" + ЗаголовкиВСтроке1 + "IMEX=1;""";
Connection = Новый COMОбъект("ADODB.Connection");
Connection.ConnectionString = СтрокаСоединения;
Попытка
Connection.Open();
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;
RS = Новый COMОбъект("ADODB.Recordset");
ТекстЗапроса =
"S_elect
| Лист.*
|FROM
| [" + пЛист + "$] as Лист";
Попытка
RS.Open(ТекстЗапроса, Connection);
Исключение
Сообщить ("Проблемы с выполнением запроса");
Возврат Неопределено;
КонецПопытки;
Таблица = Новый ТаблицаЗначений;
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По RS.Fields.Count Цикл
Поле = RS.Fields.Item(Счетчик - 1);
Колонка = Таблица.Колонки.Добавить("К" + Счетчик, , Поле.Name);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
КонецЦикла;
КонецЕсли;
НомерСтроки = 0;
КолвоСтрок = RS.RecordCount;
Пока RS.EOF() = 0 Цикл
НомерСтроки = НомерСтроки + 1;
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
ОбработкаПрерыванияПользователя();
#КонецЕсли
Если НомерСтроки < НачСтрока Тогда
RS.MoveNext ();
Продолжить;
КонецЕсли;
Если КонСтрока > 0 И НомерСтроки > КонСтрока Тогда
Прервать;
КонецЕсли;
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По RS.Fields.Count Цикл
Поле = RS.Fields.Item(Счетчик - 1);
НоваяСтрока["К" + Счетчик] = Поле.Value;
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Поле = RS.Fields.Item(КлючИЗначение.Значение - 1);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value;
КонецЦикла;
КонецЕсли;
// Обработка других полей
RS.MoveNext ();
КонецЦикла;
// Завершение работы
RS.Close();
Connection.Close();
Возврат Таблица;
КонецФункции
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_COM(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт
#Если Клиент Тогда
Состояние("Открытие Excel");
#КонецЕсли
Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.DisplayAlerts = Ложь;
КонецЕсли;
Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;
Лист = Book.Sheets(1);
КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Таблица = Новый ТаблицаЗначений;
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По КолвоКолонок Цикл
Колонка = Таблица.Колонки.Добавить("К" + Счетчик);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
КонецЦикла;
КонецЕсли;
НачСтрока = ?(НачСтрока = 0, 1, НачСтрока);
КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока);
КонСтрока = Мин(КонСтрока, КолвоСтрок);
Для НомерСтроки = НачСтрока По КонСтрока Цикл
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КонСтрока));
ОбработкаПрерыванияПользователя();
#КонецЕсли
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для НомерКолонки = 1 По КолвоКолонок Цикл
Поле = Лист.Cells(НомерСтроки, НомерКолонки);
НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Поле.Value;
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Поле = Лист.Cells(НомерСтроки, КлючИЗначение.Значение);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value;
КонецЦикла;
КонецЕсли;
КонецЦикла;
XLSОбъект.Application.Quit();
Возврат Таблица;
КонецФункции
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_COMArray(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт
#Если Клиент Тогда
Состояние("Открытие Excel");
#КонецЕсли
Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.DisplayAlerts = Ложь;
КонецЕсли;
Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;
Лист = Book.Sheets(1);
КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Таблица = Новый ТаблицаЗначений;
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По КолвоКолонок Цикл
Колонка = Таблица.Колонки.Добавить("К" + Счетчик);
КонецЦикла;
Иначе
МаксимальныйНомерКолонки = 0;
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
МаксимальныйНомерКолонки = Макс(МаксимальныйНомерКолонки, КлючИЗначение.Значение);
КонецЦикла;
КолвоКолонок = Мин(КолвоКолонок, МаксимальныйНомерКолонки);
КонецЕсли;
НачСтрока = ?(НачСтрока = 0, 1, НачСтрока);
КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока);
КонСтрока = Мин(КонСтрока, КолвоСтрок);
// Массив типа COMSafeArray
Массив = Лист.Range(Лист.Cells(НачСтрока, 1), Лист.Cells(КонСтрока, КолвоКолонок)).Value;
КолвоСтрок = Массив.GetUpperBound(1);
Для НомерСтроки = 1 По КолвоСтрок Цикл
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
ОбработкаПрерыванияПользователя();
#КонецЕсли
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для НомерКолонки = 1 По КолвоКолонок Цикл
НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Массив.GetValue(НомерКолонки, НомерСтроки);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
НоваяСтрока[КлючИЗначение.Ключ] = Массив.GetValue(КлючИЗначение.Значение, НомерСтроки);
КонецЦикла;
КонецЕсли;
КонецЦикла;
XLSОбъект.Application.Quit();
Возврат Таблица;
КонецФункции
// Функция получает список листов Excel
//
// Параметры:
// пФайл - Имя файла
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// СписокЗначений
//
Функция Excel_ПолучитьСписокЛистов(пФайл, XLSОбъект = Неопределено) Экспорт
Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.DisplayAlerts = Ложь;
КонецЕсли;
Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Возврат Новый СписокЗначений;
КонецПопытки;
СписокЛистов = Новый СписокЗначений;
Для каждого Лист Из XLSОбъект.Sheets Цикл
СписокЛистов.Добавить(Лист.Name);
КонецЦикла;
XLSОбъект.Application.Quit();
Возврат СписокЛистов;
КонецФункции
Код 1C v 7.x Попытка
Excel = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки()+"; программа Excel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
РабочиеКниги=Excel.WorkBooks; // создаем рабочую книгу
Попытка // открываем файл
Отчет=РабочиеКниги.Open(Каталог+ИмяФайла);
Исключение
Сообщить(ОписаниеОшибки()+"; фаил с макросом не найден!");
Возврат;
КонецПопытки;
// заносим в таблицу какие-либо данные
Лист = Отчет.Worksheets(1);
Для Ном=1 По 20 Цикл
Ячейка = Лист .Cells(ном,1); Ячейка.Value;
Сообщить(Ячейка );
КонецЦикла;
Excel.Visible=1;
Попытка
Отчет.Save();
Исключение
Сообщить(ОписаниеОшибки()+"; не могу сохранить отчет!");
Возврат;
КонецПопытки; Категория:
Работа с Microsoft Office и OpenOffice