Группировка строк Excel В ниже указанном коде нужно убрать символ
_
Код 1C v 8.х
//Группировка строк по уровню 2
Worksheet.Range("7:8").Rows.Group();
Worksheet.Range("10:11").Rows.Group();
Worksheet.Range("14:15").Rows.Group();
Worksheet.Range("17:18").Rows.Group();
//Группировка строк по уровню 1
Worksheet.Range("6:11").Rows.Group();
Worksheet.Range("13:18").Rows.Group();
//Свёртка группировок до первого уровня
Worksheet.Outline.ShowLevels(1);
//или
Excel.Range("A3:A6").S_elect();
Excel.S_election.Rows.Group();
// еще пример
BegCell = Лист.Cells(1,1);
EndCell = Лист.Cells(4,1);
Лист.Range(BegCell,EndCell).Rows.Group();
Код 1C v 7.x
//Простейший пример вывода из 1С:Предприятия 7.7 в MS Excel. Обеспечение наличия у рабочей книги единственного листа,
//установка размера, жирности и цвета шрифта, ширины колонок, рамок и заливки ячеек. Выравнивание текста
//ячеек, группировка строк, установка числового формата ячеек, закрепление области.
Процедура Вывод()
Попытка
Application=СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки(),"!!!");
Сообщить("Возможно, MS Excel не установлен на этом компьютере.");
Возврат;
КонецПопытки;
//Создание рабочей книги
WorkBook=Application.WorkBooks.Add();
//Получение окна
Window=WorkBook.Windows(1);
//Установка невидимости окна для убыстрения вывода
Window.Visible=0;
//Обеспечение наличия у рабочей книги единственного листа
Если WorkBook.Worksheets.Count=0 Тогда
WorkBook.Worksheets.Add();
Иначе
Application.DisplayAlerts=0;//не выдавать предупреждений
Пока WorkBook.Worksheets.Count>1 Цикл
WorkBook.Worksheets(1).Delete();
КонецЦикла;
Application.DisplayAlerts=-1;//восстановление флага выдачи предупреждений
КонецЕсли;
//Получение рабочего листа
Worksheet=WorkBook.Worksheets(1);
//Задание имени рабочего листа
Worksheet.Name="Пример вывода";
//Заголовок документа
Worksheet.Range("A1").Val ue="Пример вывода из 1С:Предприятия в MS Excel";
Worksheet.Range("A2").Val ue="сегодня "+ТекущаяДата();
Worksheet.Range("A1:A2").Font.Size=14;//размер шрифта
Worksheet.Range("A1:A2").Font.Bold=-1;//жирный шрифт
//Задание ширины колонок
Worksheet.Columns(1).ColumnWidth=60;
Worksheet.Columns(2).ColumnWidth=15;
Worksheet.Columns(3).ColumnWidth=15;
//Шапка документа
Worksheet.Range("A4").Val ue="Первая колонка";
Для ы=7 по 10 Цикл//рамки
Worksheet.Range("A4").Borders(ы).LineStyle=1;
Worksheet.Range("A4").Borders(ы).Weight=-4138;//xlMedium
КонецЦикла;
Worksheet.Range("A4").Interior.ColorIndex=15;//заливка серым
Worksheet.Range("A4").HorizontalAlignment=-4108;//выравнивание текста по центру
Worksheet.Range("B4").Val ue="Вторая";
Для ы=7 по 10 Цикл
Worksheet.Range("B4").Borders(ы).LineStyle=1;
Worksheet.Range("B4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("B4").Interior.ColorIndex=15;
Worksheet.Range("B4").HorizontalAlignment=-4108;
Worksheet.Range("C4").Val ue="Третья";
Для ы=7 по 10 Цикл
Worksheet.Range("C4").Borders(ы).LineStyle=1;
Worksheet.Range("C4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("C4").Interior.ColorIndex=15;
Worksheet.Range("C4").HorizontalAlignment=-4108;
//Для группировки строк:
Worksheet.Outline.SummaryRow=0;//"итоговые" строки отображать сверху (если снизу, то 1)
//Вывод строк
Worksheet.Range("A5").Val ue="Объект аналитики";
Worksheet.Range("A5").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B5").Val ue=123.45;
Worksheet.Range("B5").Font.ColorIndex=5;
Worksheet.Range("C5").Val ue=678.9;
Worksheet.Range("C5").Font.ColorIndex=5;
Worksheet.Range("A6").Val ue="Объект аналитики";
Worksheet.Range("A6").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B6").Val ue=123.45;
Worksheet.Range("B6").Font.ColorIndex=3;
Worksheet.Range("C6").Val ue=678.9;
Worksheet.Range("C6").Font.ColorIndex=3;
Worksheet.Range("A7").Val ue="Объект аналитики";
Worksheet.Range("B7").Val ue=123.45;
Worksheet.Range("C7").Val ue=678.9;
Worksheet.Range("A8").Val ue="Объект аналитики";
Worksheet.Range("B8").Val ue=123.45;
Worksheet.Range("C8").Val ue=678.9;
Worksheet.Range("A9").Val ue="Объект аналитики";
Worksheet.Range("A9").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B9").Val ue=123.45;
Worksheet.Range("B9").Font.ColorIndex=3;
Worksheet.Range("C9").Val ue=678.9;
Worksheet.Range("C9").Font.ColorIndex=3;
Worksheet.Range("A10").Val ue="Объект аналитики";
Worksheet.Range("B10").Val ue=123.45;
Worksheet.Range("C10").Val ue=678.9;
Worksheet.Range("A11").Val ue="Объект аналитики";
Worksheet.Range("B11").Val ue=123.45;
Worksheet.Range("C11").Val ue=678.9;
Worksheet.Range("A12").Val ue="Объект аналитики";
Worksheet.Range("A12").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B12").Val ue=123.45;
Worksheet.Range("B12").Font.ColorIndex=5;
Worksheet.Range("C12").Val ue=678.9;
Worksheet.Range("C12").Font.ColorIndex=5;
Worksheet.Range("A13").Val ue="Объект аналитики";
Worksheet.Range("A13").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B13").Val ue=123.45;
Worksheet.Range("B13").Font.ColorIndex=3;
Worksheet.Range("C13").Val ue=678.9;
Worksheet.Range("C13").Font.ColorIndex=3;
Worksheet.Range("A14").Val ue="Объект аналитики";
Worksheet.Range("B14").Val ue=123.45;
Worksheet.Range("C14").Val ue=678.9;
Worksheet.Range("A15").Val ue="Объект аналитики";
Worksheet.Range("B15").Val ue=123.45;
Worksheet.Range("C15").Val ue=678.9;
Worksheet.Range("A16").Val ue="Объект аналитики";
Worksheet.Range("A16").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B16").Val ue=123.45;
Worksheet.Range("B16").Font.ColorIndex=3;
Worksheet.Range("C16").Val ue=678.9;
Worksheet.Range("C16").Font.ColorIndex=3;
Worksheet.Range("A17").Val ue="Объект аналитики";
Worksheet.Range("B17").Val ue=123.45;
Worksheet.Range("C17").Val ue=678.9;
Worksheet.Range("A18").Val ue="Объект аналитики";
Worksheet.Range("B18").Val ue=123.45;
Worksheet.Range("C18").Val ue=678.9;
//Установка рамок
Для НомСтр=5 по 18 Цикл
Для ы=7 по 10 Цикл
Worksheet.Range("A"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("B"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("C"+НомСтр).Borders(ы).LineStyle=1;
КонецЦикла;
КонецЦикла;
//Группировка строк
Worksheet.Range("7:8").Rows.Group();
Worksheet.Range("10:11").Rows.Group();
Worksheet.Range("14:15").Rows.Group();
Worksheet.Range("17:18").Rows.Group();
Worksheet.Range("6:11").Rows.Group();
Worksheet.Range("13:18").Rows.Group();
//Свёртка группировок до первого уровня
Worksheet.Outline.ShowLevels(1);
//Установка числового формата
Попытка
Worksheet.Range("B5:C18").NumberFormat="# ##0.00";
Исключение
Попытка
Worksheet.Range("B5:C18").NumberFormat="# ##0,00";
Исключение
КонецПопытки;
КонецПопытки;
//Установка видимости приложения и его окна
Application.Visible=-1;
Window.Visible=-1;
//Закрепление области
Worksheet.Range("A5").S_elect();
Window.FreezePanes = -1;
КонецПроцедуры //Вывод
Категория:
Работа с Microsoft Office и OpenOffice ДБФ, работа с Индекс, Ключ Код 1C v 8.х ФайлНаДиске = Новый Файл(ИмяФайла);
Если НЕ(ФайлНаДиске.Существует()) Тогда
Предупреждение("Файл с таким именем не существует " + ИмяФайла);
Возврат;
КонецЕсли;
ДБФ = Новый xBase;
ДБФ.Кодировка = КодировкаXBase.OEM;
ДБФ.ОткрытьФайл(ИмяФайла);
Если ДБФ.Открыта() = 0 Тогда
Предупреждение("Неудалось открыть файл. Возможно он занят другим приложением!");
Возврат;
КонецЕсли;
ДБФ.Индексы.Добавить("IDX_vE","VAL (EXTENSION)",Ложь,Ложь,"PREFLEN1>0");
ДБФ.СоздатьИндексныйФайл(ИмяИндекса);
ДБФ.ТекущийИндекс = ДБФ.Индексы.IDX_vE;
ДБФ.Ключ.EXTENSION = "1002";
Если ДБФ.НайтиПоКлючу("=") = Истина Тогда
ТекЗапись=ДБФ.НомерЗаписи();
Пока СокрЛП(ДБФ.EXTENSION) = "1002" Цикл
Сообщить("-" + ДБФ.EXTENSION + " - " + ДБФ.НомерЗаписи() + "-");
ДБФ.Следующая();
КонецЦикла;
Иначе
Сообщить("Нет записи!");
КонецЕсли;
ДБФ.ЗакрытьФайл();
УдалитьФайлы(ИмяИндекса);
Код 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(НомерСтолбца).Val ue);
//Сообщить ("Test " + ЗаписиSQL.Fields(НомерСтолбца).Val ue + Записи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(НомерСтолбца).Val ue);
Сообщить ("Test " + ЗаписиSQL.Fields(ИмяСтолбца).Val ue + ИмяСтолбца);
КонецЦикла;
Записи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).Val ue = ExcelЛист.Cells(Row,Column).Val ue;
// Устанавливаем шрифт
Док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 Получение номера релиза конфигурации из внешней обработки путем анализа файла 1sconst.dbf Для контроля версий обрабатываемых конфигураций можно получить номер релиза из внешней обработки путем анализа файла 1sconst.dbf:
Код 1C v 7.x ДБФ = СоздатьОбъект("XBase");
ДБФ.КодоваяСтраница(0);
ИмяФайла = СокрП(ПутьККаталогуСБазой)+"1sconst.dbf";
Попытка
ДБФ.ОткрытьФайл(ИмяФайла,,1);
Если ДБФ.Открыта() = 1 Тогда
ДБФ.Первая();
Пока ДБФ.ВКонце() = 0 Цикл
Если Найти(ДБФ.Val ue,"7.70.") > 0 Тогда
НомерРелиза = СокрП(ДБФ.Val ue);
ДБФ.ЗакрытьФайл();
Прервать;
КонецЕсли;
ДБФ.Следующая();
КонецЦикла;
ДБФ.ЗакрытьФайл();
Исключение
Сообщить("ОШИБКА: " + ОписаниеОшибки());
КонецПопытки;
Категория:
Полезные, Универсальные Функции Получение списка зарегистрированных на текущем компьютере баз 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.EnumVal ues HKEY_CURRENT_USER, strKeyPath, arrVal ues
| strInfo=vbNullString
| Get1CV77Titles = strInfo
| On Error Resume Next
| For i = LBound(arrVal ues) To UBound(arrVal ues)
| call oReg.GetStringVal ue(HKEY_CURRENT_USER,strKeyPath,arrVal ues(i),Val ue)
| strInfo=strInfo & arrVal ues(i) & vbTab & Val ue & 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.EnumVal ues RootKey, PathKey, Arr
| Answer = ""{""""СписокЗначений"""",{""
| for x = LBound(Arr) to UBound(Arr)
| call Reg.GetStringVal ue(RootKey, PathKey, Arr(x), Val ue)
| Answer = Answer & ""{{""""Строка"""","""""" &_
| Arr(x) & """"""},"""""" & replace(Val ue, """""""", """""""""""") &_
| """""",""""0""""}""
| if x <> UBound(Arr) then Answer = Answer & "",""
| next
| Answer = Answer & ""}}""
| strGetListBase = Answer
|end function";
// Добавляем наш код.
олеСкрипт.AddCode(стрКод);
// Вызываем его на выполнение, и пытаемся из полученного результата
// сформировать список значений.
Ответ = значениеизстроки(олеСкрипт.Run("strGetListBase"));
// Отсортируем список по Представлению баз
Ответ.СортироватьПоПредставлению();
исключение
// Если произошла ошибка. Значит вернем "Error".
Ответ = "Error";
конецпопытки;
возврат Ответ;
конецфункции
Еще примеры! Получение списка баз 1С 7.7 из реестра Категория:
Полезные, Универсальные Функции Загрузка списка номенклатуры в ТЗ из Excel Код 1C v 8.х
Попытка
XLSОбъектОсновной = Новый COMОбъект("Excel.Application");
Исключение
Предупреждение("Невозможно загрузить MS EXCEL !!!" + Символы.ПС + ОписаниеОшибки(), 10, "Ошибка");
Возврат;
КонецПопытки;
XLSОбъектКниги = XLSОбъектОсновной.WorkBooks;
Попытка
XLSОбъект = XLSОбъектКниги.Open(элементыформы.пвИмяФайла.Значение);
Исключение
Предупреждение("Невозможно открыть файл " + элементыформы.пвИмяФайла.Значение + " !!!" + Символы.ПС + ОписаниеОшибки(), 10, "Ошибка");
Возврат;
КонецПопытки;
XLSОбъект.Application.Caption = "Открыто из 1С";
//определим диапозоны
Если НомерСтрокиСДанными = 0 Тогда
// То с первой строки
НомерСтрокиСДанными = 1;
КонецЕсли;
Если НомерСтраницы = 0 Тогда
// То с первой страницы
НомерСтраницы = 1;
КонецЕсли;
Лист = XLSОбъект.Sheets(НомерСтраницы);
Если КолВоКолонок = 0 Тогда
//КолВоКолонок не установлено, будем автоматически заполнять
КолВоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
КонецЕсли;
Если КолВоСтрок = 0 Тогда
// КолВоСтрок не уставновлено, Будем автоматически заполнять количество строк.
КолВоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
КонецЕсли;
// ТЗДанных - Таблица значений на форме
ТЗДанных.Очистить();
Лист = XLSОбъект.Sheets(НомерСтраницы);
Для чС = (НомерСтрокиСДанными + 1) По КолВоСтрок Цикл
Состояние("Загружаем строки:" + чС);
ностр=ТЗДанных.Добавить();
попытка
//грузим номенклатуру
Ячейка = Лист.Cells(чС,1);
ностр.НоменклатураЕксел = Ячейка.Val ue;
исключение
сообщить("Номенклатура - строка - "+чс + Символы.ПС + ОписаниеОшибки());
конецпопытки;
попытка
//грузим количество
Ячейка = Лист.Cells(чС, 2);
ностр.Количество = Ячейка.Val ue;
исключение
сообщить("Количество - строка - "+чс + Символы.ПС + ОписаниеОшибки());
конецпопытки;
попытка
//грузим сумму
Ячейка = Лист.Cells(чС, 3);
ностр.Сумма = Ячейка.Val ue;
исключение
сообщить("Сумма - строка - "+чс + Символы.ПС + ОписаниеОшибки());
конецпопытки;
попытка
//грузим единица измерения
Ячейка = Лист.Cells(чС, 4);
ностр.ЕдИзмеренияЕксел = Ячейка.Val ue;
исключение
сообщить("Ед. измерения - строка - "+чс + Символы.ПС + ОписаниеОшибки());
конецпопытки;
//КонецЦикла;
КонецЦикла;
XLSОбъект.Application.Quit();
Категория:
Работа с Microsoft Office и OpenOffice Функция проверки типа значения Код 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'') - агрегатный тип данных ''Запрос'';
// ''СписокЗначений'' (''Val ueList'') - агрегатный тип данных ''СписокЗначений'';
// ''ТаблицаЗначений'' (''Val ueTable'') - агрегатный тип данных ''ТаблицаЗначений'';
// ''Периодический'' (''Periodic'') - агрегатный тип данных ''Периодический'';
// ''Картинка'' (''Picture'') - агрегатный тип данных ''Картинка'';
// ''ГрупповойКонтекст'' (''GroupContext'') - контекст программного модуля или Формы;
// ''OLE'' (''OLE'') - OLE-объект.
// ''НеизвестныйОбьект'' (''UnknownObject'') - для типов, для которых в системе не предусмотрено специальное строковое обозначение;
// '''' (пустая строка) - неопределенный тип данных.
Категория:
Работа с Типами данных Подключение к EXCEL и чтение данных из листа Excel Код 1C v 8.х Ex = Новый COMObject("Excel.Application");
Ex.Workbooks.Open(Путь);
Ex.Visible = 1;
ТекЛист=Ex.WorkSheets(1);
Для Ячейка = 1 по 400 цикл
Если НЕ ТекЛист.Cells(Ячейка,1).Val ue = Неопределено тогда
Сообщить(Строка(ТекЛист.Cells(Ячейка,1).Val ue));
Карта = Справочники.Номенклатура.НайтиПоКоду(ИзЧислаВСтроку(ТекЛист.Cells(Ячейка,1).Val ue));
Если Карта.Пустая() тогда
Сообщить(" Пустой элемент " + ТекЛист.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= " + СокрЛП(пФайл) +" ;Extended 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);
НоваяСтрока["К" + Счетчик] = Поле.Val ue;
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Поле = RS.Fields.Item(КлючИЗначение.Значение - 1);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Val ue;
КонецЦикла;
КонецЕсли;
// Обработка других полей
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")] = Поле.Val ue;
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Поле = Лист.Cells(НомерСтроки, КлючИЗначение.Значение);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Val ue;
КонецЦикла;
КонецЕсли;
КонецЦикла;
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(КонСтрока, КолвоКолонок)).Val ue;
КолвоСтрок = Массив.GetUpperBound(1);
Для НомерСтроки = 1 По КолвоСтрок Цикл
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
ОбработкаПрерыванияПользователя();
#КонецЕсли
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для НомерКолонки = 1 По КолвоКолонок Цикл
НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Массив.GetVal ue(НомерКолонки, НомерСтроки);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
НоваяСтрока[КлючИЗначение.Ключ] = Массив.GetVal ue(КлючИЗначение.Значение, НомерСтроки);
КонецЦикла;
КонецЕсли;
КонецЦикла;
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); Ячейка.Val ue;
Сообщить(Ячейка );
КонецЦикла;
Excel.Visible=1;
Попытка
Отчет.Save();
Исключение
Сообщить(ОписаниеОшибки()+"; не могу сохранить отчет!");
Возврат;
КонецПопытки;
Категория:
Работа с Microsoft Office и OpenOffice Получение списка баз 1С 7.7 из реестра Ниже приведено несколько способов получения списка баз 1С 7.7 из реестра:
Код получения списка баз 1С 7.7 из 8.х
Код 1C v 8.х функция сзПолучитьСписокБаз()
попытка
олеСкрипт = новый COMОбъект("MSScriptControl.ScriptControl");
олеСкрипт.Language = "VBScript";
стрКод =
"function strGetListBase()
| const RootKey = &H80000001
| set Reg = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\."" &_
| ""\root\default:StdRegProv"")
| PathKey = ""Software\1C\1Cv7\7.7\Titles""
| Reg.EnumVal ues RootKey, PathKey, Arr
| Answer = ""{""""#"""",4772b3b4-f4a3-49c0-a1a5-8cb5961511a3,"" & chr(10)
| Answer = Answer & ""{3,1e512aab-1b41-4ef6-9375-f0137be9dd91,0,0,"" & chr(10)
| Answer = Answer & ""{"" & (UBound(Arr) + 1) & "","" & chr(10)
| for x = LBound(Arr) to UBound(Arr)
| call Reg.GetStringVal ue(RootKey, PathKey, Arr(x), Val ue)
| Answer = Answer & ""{1e512aab-1b41-4ef6-9375-f0137be9dd91,"" & chr(10) &_
| ""{"""""" & replace(Val ue, """""""", """""""""""") & """""",0,"" &_
| chr(10) & ""{""""S"""","""""" & Arr(x)& """"""},"" &_
| chr(10) & ""{3,0,"" & chr(10) & ""{0},"""""""",-1,-1,0,0}"" &_
| chr(10) & ""}"" & chr(10) & ""}""
| if x <> UBound(Arr) then Answer = Answer & "",""
| Answer = Answer & chr(10)
| next
| Answer = Answer & ""},"" & chr(10) & ""{""""Pattern""""}"" & chr(10) &_
| ""}"" & chr(10) & ""}""
| strGetListBase = Answer
|end function";
олеСкрипт.AddCode(стрКод);
стрОтвет = олеСкрипт.Run("strGetListBase");
Ответ = ЗначениеИзСтрокиВнутр(стрОтвет);
Ответ.СортироватьПоПредставлению();
исключение
Ответ = новый СписокЗначений;
Ответ.Добавить("Базы 1С:Передприятия 7.7 не обнаруженны!");
конецпопытки;
возврат Ответ;
конецфункции
Код для 1С 7.7
Код 1C v 7.x
Функция ПолучитьСписокБаз1()
Перем Val ue,arrVal ues;
Scr = CreateObject("MSScriptControl.ScriptControl");
Scr.Language = "vbscript";
Scr.Timeout=-1;
HKEY_CURRENT_USER = 2147483649;
strKeyPath = "Software\1C\1Cv7\7.7\Titles";
Locator=СоздатьОбъект("WbemScripting.SWbemLocator");
ServiceDef=Locator.ConnectServer(".","root\default");
oReg = ServiceDef.Get("StdRegProv");
Dict=СоздатьОбъект("Scripting.Dictionary");
Scr.AddObject("Dict",Dict);
Scr.AddObject("oReg",oReg);
Scr.ExecuteStatement("dim arrVal ues,Val ue:");
Scr.ExecuteStatement("oReg.EnumVal ues "+HKEY_CURRENT_USER+","""+strKeyPath+""",arrVal ues:");
Scr.ExecuteStatement("for i=lbound(arrVal ues) to ubound(arrVal ues):Dict.add ""pj"" & i, arrVal ues(i):next");
ТЗБаз=СоздатьОбъект("ТаблицаЗначений");
ТЗБаз.НоваяКолонка("Путь");
ТЗБаз.НоваяКолонка("Описание");
Для к=0 По Dict.count Цикл
Д=Dict.Item("pj"+к);
Scr.ExecuteStatement("oReg.GetStringVal ue "+HKEY_CURRENT_USER+","""+strKeyPath+""","""+Д+""",Val ue");
ТЗБаз.НоваяСтрока();
ТЗБаз.Путь = Д;
ТЗБаз.Описание = Scr.eval ("Val ue");
КонецЦикла;
//Посмотрим что в ТЗ
//ТЗБаз.ВыбратьСтроку();
Возврат ТЗБаз;
КонецФункции
Процедура ПолучитьСписокБаз2()
Попытка
scrptCtrl=createobject("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.EnumVal ues HKEY_CURRENT_USER, strKeyPath, arrVal ues
|strInfo=vbNullString
|For i = LBound(arrVal ues) To UBound(arrVal ues)
| call oReg.GetStringVal ue(HKEY_CURRENT_USER,strKeyPath,arrVal ues(i),Val ue)
| strInfo=strInfo & arrVal ues(i) & ""="" & Val ue & vbCrLF
|Next
|Get1CV77Titles = strInfo
|End Function");
Сообщить(scrptCtrl.run("Get1CV77Titles"));
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
<Сообщил Gloom>
Процедура ПолучитьСписокБаз3()
Ключ="HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles";
ИмяКаталога=СокрЛП(КаталогПользователя());
ИмяБазы=СокрЛП(каталогИБ());
Если прав(ИмяКаталога,1)<>"\" Тогда ИмяКаталога=ИмяКаталога+"\" КонецЕсли;
Если прав(ИмяБазы,1)<>"\" Тогда ИмяБазы=ИмяБазы+"\" КонецЕсли;
ИмяБазыСтр=Симв(34)+СтрЗаменить(ИмяБазы,"\","\\")+Симв(34);
ИмяФайла="USER.TXT";
Команда="Regedit /ea "+Симв(34)+ИмяКаталога+ИмяФайла+Симв(34)+" "+Симв(34)+Ключ+Симв(34);
КомандаСистемы(Команда);
Текст=СоздатьОбъект("Текст");
Текст.КодоваяСтраница(0);
Текст.Открыть(ИмяКаталога+ИмяФайла);
Текст.Показать();
Стр=""; Нашли=0;
Для сч=1 по Текст.КоличествоСтрок() Цикл
Стр=СокрЛП(Текст.ПолучитьСтроку(сч));
Сообщить(Стр);
Если Найти(стр,ИмяБазыСтр)<>0 Тогда
Нашли=1;
прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Категория:
COM-объекты, WMI, WSH Как включить запись событий DBMSSQL в технологический журнал? Файл C:Program Files1Cv81inconflogcfg.xml должен содержать:
Код
< config xmlns="http://v8.1c.ru/v8/tech-log">
< log history="168" location="C:Program Files1Cv81inlogs">
< event>
< eq property="name" value="dbmssql"/>
< /event>
< property name="all"/>
< /log>
< /config>
Категория:
Администрирование Недостаточно свободной памяти на сервере 1С:Предприятия После разнесение сервера 1С:Предприятия и SQL-сервера на разные машины при загрузке dt-файла в базу расположенную на SQL-сервере стали получать ошибку "Недостаточно свободной памяти на сервере 1С:Предприятия".
или (Ошибка СУБД: Microsoft OLE DB Provider for SQL Server: there is insufficient memory in resource pool ‘default’ to run this query. HRESULT=80040E14 )
Решение проблемы:
1. При возникновении ошибки перезапустить службу сервера 1С.
2. Использовать много процессов(В свойствах кластера поставить галочку "Много процессов"). Добавить рабочие процессы, оптимальное значение 4-5 процессов.
3. Использовать регламентный перезапуск рабочих процессов. Но это не снимет проблему. Просто сократит "утечку" памяти.
4. Для операций с базой данных, например копирование базы данных использовать средства ms sql, а не работу с файлами dt.
5. Включите запись событий DBMSSQL в
Технологический журнал
(Смотрите текст файла "logcfg.xml" ниже или воспользуйтесь обработкой с ИТС НастройкаТехнологическогоЖурнала.epf) и определите, на загрузке какой таблицы происходит ошибка. Если config, то выполните загрузку в файловый вариант и очистку конфигурации поставщика:
5.1 Для этого надо проверить конфигурацию на наличие некорректной информации. Для этого следует выполнить команду меню Конфигурация - "Проверка конфигурации" (НЕ ТЕСТИРОВАНИЕ!) с ОДНИМ установленным флажком "Проверка логической целостности конфигурации". При выявлении проблем будет выдано сообщение. Некорректная информация при этом будет удалена автоматически
5.2 Если Ваша конфигурация находится на поддержке, следует подобным образом проверить конфигурацию поставщика. Для этого в настройке поддержки следует сохранить конфигурацию поставщика в cf файл, загрузить его в новую базу и выполнить описанную в пункте 1 процедуру. В случае, если было получено сообщение об исправлении ("Удалена некорректная информация о метаданных"), значит конфигурация поставщика содержит некорректную информацию. В этом случае следует снять Вашу конфигурацию с поддержки и заново поставить путем объединения со свежим релизом конфигурации поставщика.
Добавление рабочего процесса
Добавление рабочего процесса, в отличие от просмотра, возможно, только для конкретного сервера кластера.
Для добавления нового рабочего процесса сервера кластера следует выбрать в дереве центральных серверов требуемый сервер, выбрать требуемый кластер, выбрать требуемый сервер кластеров выбрать ветку «Процессы» и выполнить команду контекстного меню "Создать - Процесс", галочкой Включить процесс.
Если процесс НЕ добавляется, то проверьте и сделайте следующее:
1. В свойствах Кластера должна стоять галочка "Много процессов"
2. В свойствах Рабочего сервера Увеличьте Диапозон IP адресов
По поводу перезапуска рабочих процессов - с какого момента начинается отсчет указанный в настройке кластера?
С момента старта процесса. Например стартовал в 18:00:00. Период перезапуска 86400 секунд, т.е. 24 часа. Соответственно через сутки в 18:00:00 процесс остановится и будет создан новый процесс.
Оптимизация перезапуска рабочих процессов:
1. Интервал перезапуска: 86400 сек (24 часа). Момент перезапуска не регламентируется, видимо с момента установки параметров, либо запуска сервера приложений.
2. Также можно указать допустимый объем памяти: 3000000 Кб (3 Гб).
3. Интервал превышения допустимого объема памяти — это непрерывный интервал времени превышения допустимого объема памяти, после которого сервер перезапустит процесс. Если указано 0 сек — будет ждать вечно.
Источник:
raw8.ru
Как включить запись событий DBMSSQL в технологический журнал?
Файл C:\Program Files\1Cv81\bin\conf\logcfg.xml должен содержать:
Код
< config xmlns="http://v8.1c.ru/v8/tech-log">
< log history="168" location="C:\Program Files\1Cv81\bin\logs">
< event>
< eq property="name" val ue="dbmssql"/>
< /event>
< property name="all"/>
< /log>
< /config>
Категория:
Администрирование Как сохранить поле BLOB (image) как файл на диск? Наиболее эффективно это можно сделать с помощью объектов OLE Automation , работа с которыми осуществляется при помощи:
sp_OACreate, sp_OAGetProperty, sp_OASetProperty, sp_OAMethod, sp_OAGetErrorInfo, sp_OADestroy (подробное описание есть в http://technet.microsoft.com/ru-ru/library/ms203721(sql.90).aspx).
Рабочий пример процедуры (была написана для сохранения zip-архивов, хранящихся в базе):
Код CREATE PROCEDURE dbo.SaveRequestDataAsFile (
@FileName varchar(1024) --имя файла
,@FilePath varchar(1024) --путь файла
,@ReqID --некое условие на таблицу
)
AS
BEGIN
DECLARE
@Stream integer,
@Buffer varbinary(4096),
@Size integer,
@Pos integer,
@BufSize integer,
@FileNameLocal varchar(1024),
@HR integer
if RIGHT(@FilePath, 1)<>'&# 092;' begin set @FilePath=@FilePath+'&# 092;' end
set @FileNameLocal = @FilePath + @FileName
SET @BufSize = 4096
EXEC @HR = sp_OACreate 'ADODB.Stream',@Stream OUT
if @HR<>0
begin
--обработка ошибки создания объекта
EXEC [dbo].[sp_displayoaerrorinfo] @Stream ,@HR
end
EXEC @HR = sp_OASetProperty @Stream,'Type',1 -- binary
EXEC @HR = sp_OASetProperty @Stream,'Mode',3 -- write|read
EXEC @HR = sp_OAMethod @Stream,'Open'
S_elect
@Size = DATALENGTH(SrvRequests.RequestData)
FROM SrvRequests WHERE SrvRequests.RequestID = @ReqID
Set @Pos=0
WHILE @Pos < @Size BEGIN
SET @BufSize = CASE WHEN @Size - @Pos < 4096 THEN @Size - @Pos ELSE 4096 END
S_elect @Buffer = substring(SrvRequests.RequestData ,@Pos+1, @BufSize)
from SrvRequests where SrvRequests.RequestID = @ReqID
EXEC @HR = sp_OAMethod @Stream, 'Write', NULL, @Buffer
SET @Pos = @Pos + @BufSize
END
EXEC @HR = sp_OAMethod @Stream,'SaveToFile',null, @FileNameLocal,2
EXEC @HR = sp_OAMethod @Stream,'Close'
EXEC @HR = sp_OADestroy @Stream
END
Рекомендуется создать еще пару процедур для внятного описания ошибок в случае их возникновения
Код CREATE PROCEDURE sp_hexadecimal
@binval ue varbinary(255),
@hexval ue varchar(255) OUTPUT
AS
DECLARE @charval ue varchar(255)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
S_elect @charval ue = '0x'
S_elect @i = 1
S_elect @length = DATALENGTH(@binval ue)
S_elect @hexstring = '0123456789abcdef'
WHILE (@i <= @length)
BEGIN
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
S_elect @tempint = CONVERT(int, SUBSTRING(@binval ue,@i,1))
S_elect @firstint = FLOOR(@tempint/16)
S_elect @secondint = @tempint - (@firstint* 16)
S_elect @charval ue = @charval ue +
SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
S_elect @i = @i + 1
END
----------------------------------------------------------------------
CREATE PROCEDURE sp_displayoaerrorinfo
@object int,
@hresult int
AS
DECLARE @output varchar(255)
DECLARE @hrhex char(10)
DECLARE @hr int
DECLARE @source varchar(255)
DECLARE @description varchar(255)
PRINT 'OLE Automation Error Information'
EXEC sp_hexadecimal @hresult, @hrhex OUT
S_elect @output = ' HRESULT: ' + @hrhex
PRINT @output
EXEC @hr = sp_OAGetErrorInfo @object, @source OUT, @description OUT
IF @hr = 0
BEGIN
S_elect @output = ' Source: ' + @source
PRINT @output
S_elect @output = ' Description: ' + @description
PRINT @output
END
ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
Категория:
OLE, ActiveX