В отличие от 1Cv7 (
где список зарегистрированных информационных баз хранится в системном реестре (Щелкните для просмотра примеров) ):
в 1C v 8 :
список зарегистрированных информационных баз хранится в текстовом файле v8ib.lst (кодировка UTF-8)
в каталоге \
Application Data\1C\1Cv8 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\
Application Data\1C\1Cv8\v8ib.lst
в 1C v 8.1 :
список зарегистрированных информационных баз хранится в текстовом файле ibases.v8i (кодировка UTF-8)
в каталоге \
Application Data\1C\1Cv81 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\
Application Data\1C\1Cv81\ibases.v8i
Если открыть этот файл в NotePad.exe, то видно, что он имеет структуру, схожую со стандартным INI-файлом :
[База Разработки]
Connect=File="F:\1C\1Cv8\DBRaz";
ID=1cd97bfa-4e57-4a23-9ee1-073a0a28e01c
OrderInList=16384
Folder=/
OrderInTree=16384
[Enterprise]
Connect=File="F:\1C\1Cv8\1cv8.db\Enterprise";
ID=647840fa-65e0-44e8-ad40-12476f178b92
OrderInList=20480
Folder=/
OrderInTree=32768
в 1C v 8.2 :
список зарегистрированных информационных баз хранится в текстовом файле ibases.v8i (кодировка UTF-8)
в каталоге \
Application Data\1C\1Cv8 текущего пользователя на локальном компьютере (где запускается программа 1С:Предприятие v 8).
т.е. C:\Documents and Settings\%CurrentUser%\
Application Data\1C\1CEStart\ibases.v8i
Если открыть этот файл в NotePad.exe, то там:
[1C:Документооборот 8 (демо)]
Connect=File="C:\Documents and Settings\E.S.Migachev\Мои документы\1C\DemoDoc8";
ID=b3b46c21-bd2a-481e-b100-e6cbdcba3e3d
OrderInList=16384
Folder=/
OrderInTree=256
External=0
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.2
Структура хранения информации по каждой информационной базе :
<Наименование информационной базы>
<ID>
<Connect>
<Folder>
<OrderInList>
<OrderInTree>
Где:
Connect - строка соединения с информационной базой,
ID - внутренний идентификатор информационной базы,
OrderInList - порядок в списке при представлении списком
Folder - наименование ветви в дереве информационных баз,
OrderInTree - порядок в ветви при представлении деревом.
В 1С 8.1 еще добавили External - но он всегда равен 0, для чего он пока не известно.
В 1С 8.2 добавлено:
ClientConnectionSpeed=Normal - скорость соединения
App=Auto - тип соединения - толстый, тонкий клиент.
WA=1
Version=8.2
Вот код получения получения списка баз из файла 1С 8.0 8.1 8.2
Код 1C v 8.х
Функция ПолучимСписокБаз1СИзФайла(Версия)
// Функция получения списка баз 1С 8.0 8.1 8.2 E_Migachev
// Возвращает Таблицу Значений содержащую Название, СтрокаСоединения с базами 1С
// Для начала получим программным путем полный путь к папке Application Data
// Способ из https://helpf.pro/faq/view/271.html
App = Новый COMОбъект("Shell.Application ");
AppData=App.Namespace(26).Self.Path;
ТЗБаз=Новый ТаблицаЗначений;
ТЗБаз.Колонки.Добавить("Название",,"Название",25);
ТЗБаз.Колонки.Добавить("СтрокаСоединения",,"СтрокаСоединения",30);
Если Версия = "v80" Тогда
СписокБаз=AppData+"\1C\1Cv8\v8ib.lst";
ИначеЕсли Версия = "v81" Тогда
СписокБаз=AppData+"\1C\1Cv81\ibases.v8i";
ИначеЕсли Версия = "v82" Тогда
СписокБаз=AppData+"\1C\1CEStart\ibases.v8i";
КонецЕсли;
Сообщить("Файл со списком баз: "+Строка(СписокБаз));
//Открываем файл в кодировке UTF8
ФайлБаз= Новый ЧтениеТекста;
ФайлБаз.Открыть(СписокБаз, КодировкаТекста.UTF8);
Стр = ФайлБаз.ПрочитатьСтроку();
Пока НЕ Стр = Неопределено Цикл
Если СтрДлина(СокрЛП(Стр)) Тогда
ТекущаяСтрока = СокрЛП(Стр);
Если Лев(ТекущаяСтрока, 1) = "[" Тогда
НоваяСтрока = ТЗБаз.Добавить();
НоваяСтрока.Название = ТекущаяСтрока;
КонецЕсли;
Если Лев(ТекущаяСтрока, 8) = "Connect=" Тогда
Попытка
НоваяСтрока.СтрокаСоединения = Прав(ТекущаяСтрока, СтрДлина(ТекущаяСтрока)-8);
Исключение
// Это группа
НоваяСтрока.СтрокаСоединения = "";
КонецПопытки;
КонецЕсли;
КонецЕсли;
Стр = ФайлБаз.ПрочитатьСтроку();
КонецЦикла;
//Удалим из ТЗ строки с пустой Строкой Соединения, т.к это группы, а они нам не нужны
ПустыеСтроки = ТЗБаз.НайтиСтроки(Новый Структура("СтрокаСоединения",));
Для каждого СтрокаТаблицы Из ПустыеСтроки Цикл
ТЗБаз.Удалить(СтрокаТаблицы)
КонецЦикла;
Возврат ТЗБаз;
КонецФункции
Процедура ПолучимИзФайла(Кнопка)
ТЗБаз = ПолучимСписокБаз1СИзФайла(Кнопка.Имя);
//Выведем список баз из ТЗ в табличное поле
Список=ТЗБаз;
ЭлементыФормы.Список.СоздатьКолонки();
КонецПроцедуры
Пример обработки для 1С 8.1 "Получения списка баз 1С 8.0 8.1 8.2 E_Migachev"
Скачивать файлы может только зарегистрированный пользователь!
Обработка для 1С 8.1 "Чтение списка информационных баз 1С 8.1"(формирует дерево баз) Fisca
Скачивать файлы может только зарегистрированный пользователь! Объяснить мне сразу трудно - поэтому давайте "на пальцах"
Свежий простой пример :
вопрос " Ексель.Cells(1,3).Formula= "=СЦЕПИТЬ(E1;C7)";" "
первое на что хочу обратить внимание
те функции которые Вы видите визуально в ячейке MS EXCEL для 1С "слегка не знакомы", ей лучше озвучить имя функции на VBA
откуда Вы знаете как это функция на VBA называется ???
я Вам расскажу, немного терпения:
1. открываем новую книгу MS EXCEL
2. идем в меню Сервис - Макрос - Начать запись - Ок (появится маленькое окошко с квадратной кнопкой - его не кое случае не закрывать)
3. кликаем ячейку "С1" и пишем в ней формулу =СЦЕПИТЬ(E1;C7)
4. после этого нажимаем на квадратную кнопочку (Мы только что с Вами записали макрос на языке VBA)
5.посмотрим что получилось
идем в меню Сервис - Макрос - Макросы - (там будет в новой книге по умолчанию Макрос1) - выбираем его и нажимаем кнопку "Войти"
Поздравляю - мы попали во встроенный редактор VBA (аналог конфигурартора 1С)
и что мы видим
Код Sub Макрос1()
Range("C1").S_elect
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)"
Range("C2").S_elect
End Sub
теоритически нам нужно только
Код Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)"
это и будет для 1С =
Код 1C v 7.x Cells(1,3).Formula= "=СЦЕПИТЬ(E1;C7)";" "
Проверим, напишем код на любимом 1С:
Код 1C v 7.x Процедура Сформировать()
Перем Кат,Шаб;
Ехсел=СоздатьОбъект("Excel.Application ");
Книга=Ехсел.Workbooks;
Если ФС.ВыбратьФайл(0,Кат,Шаб,"Выбери файл Еxcel",,"*.xls",)=1 Тогда
Книга.Open(Шаб+Кат);
Ехсел.Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
Книга.Close();
Ехсел="";
КонецЕсли;
КонецПроцедуры
все работает.
немного подумав, Вы поймете, что
Код 1C v 7.x Ехсел.Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
можно заменить на
Код 1C v 7.x Ехсел.Cells(1, 3).FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
и результат не изменится, а возможностей прибавится.
В MS EXCEL только амлет нельзя пожарить - возможности его одурманивают.
Tatitutu Код 1C v 7.x Код
//Функция открывает таблицу в MS Excel
//Таблица - печатная форма 1С
//ИмяЛиста - имя, которое будет присвоено листу книги MS Excel (если не задано, то остается "Sheet1")
//ОтображатьЯрлычки - показывать/скрыть ярлычки листов в MS Excel
//ОтображатьСетку - показывать/скрыть линии сетки в MS Excel
//УдалитьСтроки - позволяет удалить указанное количество верхних строк таблицы
//УдалитьСтроки - позволяет удалить указанное количество левых столбцов таблицы
Функция глОткрытьТаблицуВExcel(Таблица, ИмяЛиста = "", ОтображатьЯрлычки = 1, ОтображатьСетку = 1, УдалитьСтроки = 0, УдалитьСтолбцы = 0) Экспорт
Перем Excel, ExcelWB, ExcelSh, ExcelPS, ИмяФайла, Рез, Зн, Зн1;
Если ТипЗначенияСтр(Таблица) <> "Таблица" Тогда
Возврат 0;
КонецЕсли;
Попытка
Excel = СоздатьОбъект("Excel.Application ")
Исключение
Сообщить("Не удалось открыть MS Excel","!");
Возврат 0;
КонецПопытки;
Пока 1=1 Цикл
//Подберем уникальное имя для временного файла
ИмяФайла = КаталогВременныхФайлов() + "1c" + СтрЗаменить(ТекущееВремя(), ":", "");
Если (ФС.СуществуетФайл(ИмяФайла+".tmp") = 1) или (ФС.СуществуетФайл(ИмяФайла+".xls") = 1) Тогда
ФС.УдалитьФайл(ИмяФайла+".tmp");
ФС.УдалитьФайл(ИмяФайла+".xls")
Иначе
Прервать;
КонецЕсли
КонецЦикла;
Таблица.Записать(ИмяФайла+".tmp", "XLS");
Если ФС.СуществуетФайл(ИмяФайла+".tmp") = 0 Тогда
Сообщить("Ошибка записи файла """ + ИмяФайла + "tmp""","!");
Excel = "";
Возврат 0;
КонецЕсли;
Рез = 1;
Попытка
ExcelWB = Excel.Workbooks.Add(ИмяФайла+".tmp"); //Откроем временный файл в Excel в режиме шаблона (чтобы не блокировать файл)
Попытка //Если на клиентской машине не установлен принтер, обращение к настройкам страницы вызывает ошибку. Поэтому работаем в "Попытка ... КонецПопытки"
ExcelPS = ExcelWB.Sheets(1).PageSetup; //Исправим спецсимволы в колонтитулах
Зн = ExcelPS.LeftHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftHeader = Зн1 КонецЕсли;
Зн = ExcelPS.CenterHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterHeader = Зн1 КонецЕсли;
Зн = ExcelPS.RightHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightHeader = Зн1 КонецЕсли;
Зн = ExcelPS.LeftFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftFooter = Зн1 КонецЕсли;
Зн = ExcelPS.CenterFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterFooter = Зн1 КонецЕсли;
Зн = ExcelPS.RightFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightFooter = Зн1 КонецЕсли;
Исключение
КонецПопытки;
ExcelWB.SaveAs(ИмяФайла+".xls", -4143); //Сохраним, чтобы обновить формат файла до текущего (xlNormal = -4143)
ExcelWB.Close(0); //Закроем книгу ...
ExcelWB = Excel.Workbooks.Add(ИмяФайла+".xls"); //... и вновь откроем в режиме шаблона
Попытка
ExcelSh = ExcelWB.Sheets(1);
Если ПустаяСтрока(ИмяЛиста) = 0 Тогда //Зададим имя ярлычка
ExcelSh.Name = ИмяЛиста
КонецЕсли;
Если ОтображатьЯрлычки = 1 Тогда //Сделаем видимыми ярлычки листов
ExcelWB.Windows(1).DisplayWorkbookTabs = 1;
ExcelWB.Windows(1).TabRatio = 0.6 //... и отодвинем горизонтальную полосу прокрутки от левого края
КонецЕсли;
Если ОтображатьСетку = 0 Тогда //Скроем линии сетки
ExcelWB.Windows(1).DisplayGridlines = 0
КонецЕсли;
Если УдалитьСтроки > 0 Тогда //Удалим верхние строки
ExcelSh.Range(ExcelSh.Rows(1), ExcelSh.Rows(УдалитьСтроки)).Delete()
КонецЕсли;
Если УдалитьСтолбцы > 0 Тогда //Удалим левые столбцы
ExcelSh.Range(ExcelSh.Columns(1), ExcelSh.Columns(УдалитьСтолбцы)).Delete()
КонецЕсли;
Исключение
КонецПопытки;
ExcelWB.Saved = 0;
Исключение
Сообщить("Ошибка открытия файла в MS Excel","!"); Рез = 0
КонецПопытки;
Попытка
Excel.Visible = 1
Исключение
КонецПопытки;
ExcelWB = ""; ExcelSh = ""; ExcelPS = ""; Excel = "";
ФС.УдалитьФайл(ИмяФайла+".tmp");
ФС.УдалитьФайл(ИмяФайла+".xls");
Возврат Рез
КонецФункции //глОткрытьТаблицуВ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 = лист с данными)
КонецПроцедуры