Активация открытой книги Excel для корректировки Нужно было получить для изменения уже открытую книгу
Excel , а если она закрыта, то открыть и изменять.
Ниже код, который данную задачу решает.
Код 1C v 8.х
Попытка
Эксель = Неопределено;
Книга = Неопределено;
Лист = Неопределено;
Состояние("Выполняется подключение к Excel ");
Попытка
Книга = ПолучитьCOMОбъект(Файл, "Excel .Application");
Эксель = Книга.Application;
Исключение
Эксель = Новый COMОбъект("Excel .Application");
Книга = Эксель.WorkBooks.Open(Файл);
КонецПопытки;
Лист = Книга.WorkSheets(1);
Эксель.Visible = Истина;
Исключение
Сообщить("Не удалось подключить Excel ." + Символы.ПС + ОписаниеОшибки());
Возврат;
КонецПопытки;
Категория:
Работа с Microsoft Office и OpenOffice Как оформить отпуск по беременности и родам в 1С ЗУП? Меню: Кадровый учет, учет невыходов, отпуска по уходу за ребенком,
добавляете сотрудника, если принимаете на время отпуска другого работника, то ставите галку освободить на период отпуска ставку в штатном расписании, проставляете период отпуска работника, заполняете дату пособие до 1,5 лет, количество детей, пособие до 3 лет проставляете дату, записываете документ или проводите его, а затем печать Форма Т-6.
Необходимо распечатать Не по уходу за ребенком , а отпуск по беременности и родам .
В 1С 8 такая форма приказа не предусмотрена, только отдельно от программы в EXCEL
Категория:
1С Зарплата и Управление Персоналом 2.5 Значение параметра Extended Properties для разных версий MS Excel Параметр
Extended Properties=""Excel 8.0;" обозначает версию в котором сохранен файл
* 1997 год — Excel 97(8) — Microsoft Office 97
* 1999 год — Excel 2000 (9) — Microsoft Office 2000
* 2001 год — Excel 2002 (10) — Microsoft Office XP
* 2003 год — Excel 2003 (11) — Microsoft Office 2003
* 2007 год — Excel 2007 (12) — Microsoft Office 2007
* 2010 год — Excel 2010 (13) — Microsoft Office 2010
Примеры
Код 1C v 8.х //подключение
Conn= Новый COMОбъект("ADODB.Connection");
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Параметры.ИмяФайла+";
|Extended Properties=""Excel 8.0;"+?(Параметры.ЗаголовкиКолонокИменаСтолбцовExcel ,"HDR=NO;","")+"IMEX=1;""";
//Conn.ConnectionTimeout=0;
//Conn.CursorLocation=3;
Conn.Open();
//************Текст запроса
ТекстЗапроса="S_elect
| *
|FROM [Лист1$]
// |INNER JOIN
// | ON
// |WHERE
// |GROUP BY
// | ORDER BY
|";
Результат=Conn.Execute(ТекстЗапроса);
Ссылки по теме:
V8 1С8.1 и Excel 2007 Категория:
Работа с Microsoft Office и OpenOffice Добавление в список выбора листов excel -файла с возможностью последующего к ним обращения
Код 1C v 8.х
//Реквизит "Листы" - неопределённого типа
//Реквизит "Файл" - строковой реквизит, в котором хранится путь к excel -файлу
Процедура ЗаполнитьЛисты()
ЭлементыФормы.Листы.СписокВыбора.Очистить();
Таблица = ПолучитьCOMОбъект(Файл);
Для Н = 1 По Таблица.Sheets.Count Цикл
ТекущийЛист = Строка(Таблица.Sheets(Н).Index) + ". " + Таблица.Sheets(Н).Name;
ЭлементыФормы.Листы.СписокВыбора.Добавить(ТекущийЛист);
КонецЦикла;
ЭлементыФормы.Листы.Значение = ТекущийЛист;
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Кнопка)
Если ЭлементыФормы.Листы.Значение = "" Тогда
Предупреждение("Выберите лист", 5);
Возврат;
КонецЕсли;
Таблица = ПолучитьCOMОбъект(Файл);
Индекс = Число(Сред(ЭлементыФормы.Листы.Значение, 1, Найти(ЭлементыФормы.Листы.Значение, ". ") - 1));//извлекаем порядковый номер из текущего значения списка выбора
Лист = Таблица.Sheets(Индекс);//получаем лист по порядковому номеру
//теперь обращаемся к значениям в ячейках по своему усмотрению
Строка = 1;
Столбец = 4;
КодНоменклатуры = Лист.Cells(Строка, Столбец).Value);
Номенклатура = Лист.Cells(Строка, Столбец + 1).Text);
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Импорт документа Excel через web-клиент Во время реализации задачи по регистрации продаж дистрибьюторов на основании
Excel документов столкнулся с интересной задачей. Необходимо реализовать загрузку файла и на стороне сервера обработать его, заполнив табличную часть документа.
Решение состоит из двух функций: клиентской и серверной.
Клиентская часть инициирует выбор файла, передачу выбранного файла на сервер и передача управления серверной процедуре.
Код 1C v 8.2 УП #НаКлиенте
Процедура ИмпортИзВнешнегоФайла(Команда)
//Выбор и загрузка файла.
Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда
УстановитьРасширениеРаботыСФайлами();
КонецЕсли;
Если ПодключитьРасширениеРаботыСФайлами() Тогда
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
Фильтр = "Текст(*.xls)|*.xls";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.Заголовок = "Выберите файл для импорта";
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.МедицинскиеРаботники.Очистить();
ДанныеНачинаютсяС = 1;
Если Не ВвестиЧисло(ДанныеНачинаютсяС, "Данные начинаются со строки", 2, 0) Тогда
Возврат;
КонецЕсли;
МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
ПомещаемыеФайлы = Новый Массив;
Для Каждого Файл Из МассивФайлов Цикл
ТекФайл = Новый Файл(Файл);
Описание = Новый ОписаниеПередаваемогоФайла(Файл, "");
ПомещаемыеФайлы.Добавить(Описание);
КонецЦикла;
ПомещенныеФайлы = Новый Массив;
Если ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор) Тогда
//Запуск импорта
ИмпортироватьФайлИзВременногоХранилищаВТЗ(ПомещенныеФайлы, ДанныеНачинаютсяС);
КонецЕсли;
Иначе
Предупреждение("Файл(ы) не выбран!");
КонецЕсли;
Иначе
Предупреждение(НСтр("ru ='Данная возможность недоступна, так как не подключено расширение работы с файлами.'", "ru"));
КонецЕсли;
КонецПроцедуры //ИмпортИзВнешнегоФайла()
Серверная процедура перебирает полученные на сервер файлы. Получает COM-объекты и импортирует данные.
Код 1C v 8.2 УП #НаСервере
Процедура ИмпортироватьФайлИзВременногоХранилищаВТЗ(МассивФайлов, ДанныеНачинаютсяС)
ДокументОбъект = РеквизитФормыВЗначение("Объект");
//Обход файлов, записанных во временное хранилище
Для Каждого ЭлементМассива Из МассивФайлов Цикл
ФайлИзХранилища = ПолучитьИзВременногоХранилища(ЭлементМассива.Хранение);
ВременныйФайл = ПолучитьИмяВременногоФайла("xls");
//Сохранение во временнный файл на диске
ФайлИзХранилища.Записать(ВременныйФайл);
//Импорт
Док = ПолучитьCOMОбъект(ВременныйФайл);
ФИОУчастника = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 2).Value;
Пока СокрЛП(ФИОУчастника) ="" Цикл
// Добавление строки с файла в документ
НоваяСтрока = ДокументОбъект.МедицинскиеРаботники.Добавить();
НоваяСтрока.Фио = ФИОУчастника;
НоваяСтрока.Учреждение = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 7).Value;
НоваяСтрока.Адрес = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 3).Value;
НоваяСтрока.Телефон = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 4).Value;
НоваяСтрока.ЭлПочта = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value;
НоваяСтрока.Образование = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 6).Value;
ДанныеНачинаютсяС = ДанныеНачинаютсяС + 1;
ФИОУчастника = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 2).Value;
КонецЦикла;
Сообщить("Импорт завершён");
Док.Application.Quit();
КонецЦикла;
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры //ИмпортироватьФайлИзВременногоХранилищаВТЗ()
Источник Категория:
Работа с Microsoft Office и OpenOffice Отправка отчетов из 1С по электронной почте (E-Mail) Автоматическая генерация отчета "Анализ заказов поставщикам"
Отчет анализ заказов является штатным отчетом конфигурации 1С Управление производственным предприятием. Обработка для генерации отчета, рассматриваемая в данной статье, позволяет программно создать и настроить форму отчета, запустить его выполнение. Полученный результат сохраняется в файл Microsoft
Excel (XLS, XLSX) и может быть отправлен по электронной почте.
Предлагаемое решение состоит из трех файлов: Скачивать файлы может только зарегистрированный пользователь!
service.vbs служит для запуска 1С предприятия и генерации отчета;
emailer.vbs - VBS скрипт предназначен для отправки результатов выполнения запроса отчета на указанный при настройке адрес электронной почты;
rep_email.epf - сама внешняя обработка для генерации отчета, выполняющая настройки отображаемых показателей, группировок строк и столбцов, установки требуемых отборов отчета, обеспечивает выполнение запроса и формирования табличного документа по макету отчета и сохранение сформированного отчета в XLS файл.
Запуск отчета выполняется посредством VBS файла (vbscript) при помощи "Назначенных заданий". VBS программа обеспечивает запуск приложения 1С, устанавливает соединение с сервером 1С и передает управление внешней обработке через экспортную функцию ReportNow(), размещенную в общем модуле обработки по генерации отчета. Пример VBS Script для выполнения внешней обработки 1С из командной строки:
Код VBS ' Установить соединение с сервером 1С
Set v81 = CreateObject("V81.Application")
res = v81.Connect("Srvr=Server1C;Ref = db1C;Usr=User1C;Pwd=Password1C")
' Передать управление внешней обработке по генерации Отчета Анализ Заказов
res = v81.ExternalDataProcessors.Create("C:\1C\Service\rep_email.epf").ThisObject.Report()
v81.Exit(false)
' Дать возможность 1С закрыть все открытые файлы и выгрузиться из памяти
WScript.Sleep(5000)
' Вызвать VBS скрипт отправки почты по E-Mail
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\1C\ Service\emailer.vbs"
VBS E-Mail скрипт для отправки готового отчета в формате
Excel создает новое электронное письмо на заданный адрес, в теле письма указывает пояснение к отчету, а в качестве вложения прикрепляет файл, создание и наполнение информацией которого была произведена при запуске service.vbs
Код VBS 'Отправить сообщение с помощью локальной службы SMTP
Const cdoSendUsingPickup = 1
'Отправить сообщение с помощью сети (SMTP через сеть)
Const cdoSendUsingPort = 2
Const cdoAnonymous = 0
Const cdoBasic = 1
Const cdoNTLM = 2
Set objMessage = CreateObject("CDO.Message")
' Тема сообщения и адрес отправителя
objMessage.Subject = "Ежедневный отчет Анализ заказов поставщикам"
objMessage.From = """Генератор отчетов"" "
' Получатели письма указываются через " ; "
objMessage.To = "email@domain.org; recv@domain.net; last@domain.ru"
' Содержимое тела письма.
objMessage.TextBody = "JSC AUTO SERVICE. Please find Orders reporting in attachment." & vbCRLF & _
"------------------------------------------" & vbCRLF & _
"Best regards, Auto report service" & vbCRLF & _
"Support line: it@domian.ru" & vbCRLF
' Добавляем файл - вложение для отправки отчета по EMail
objMessage.AddAttachment "C:\1C\Service\ЗаказыПоставщику.xls"
' Секция настроек SMTP сервера для отправки почты.
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
' Имя или IP адрес SMTP Server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.ru"
' Тип используемой авторизации, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
' Авторизация на SMTP server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "report@domain.ru"
' Пароль SMTP server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "youpassword"
' Порт SMTP Server port (обычно 25, но может быть и другим)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
' Использование SSL для соединения (False или True)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
' Время ожидания соединения с почтовым сервером
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
' Сохранить настройки CDO для отправки сообщения
objMessage.Configuration.Fields.Update
' Отправить созданное почтовое сообщение с вложением отчета в формате XLS по указанному адресу
objMessage.Send
Внешняя обработка по запуску отчета "Анализ заказов поставщику" состоит из двух процедур. Первая - "ReportNow() Экспорт" служит для определения входной точки передачи управления от VBS к 1С. Вторая - "ОткрытьОтчетПоИмени()" - выполняет действия по настройке критериев отбора отчета, группировке строк и столбцов, определению состава количественных показателей. Данный способ вызова отчетов стандартной конфигурации широко применяется в различных формах 1С, и по мере развития конфигурации может быть позаимствован как минимум из нескольких форм списка справочников (Контрагенты, Номенклатура и т.д.). Исходный код первой функции: >
Код 1C v 8.х Процедура ReportNow() Экспорт
// Вызывается из vbscript, выполняет работы с отчетом.
ОткрытьОтчетПоИмени("АнализЗаказовПоставщикам");
КонецПроцедуры
Сохранение отчета из 1С в Excel
Процедура формирования формы отчета принимает в качестве параметра название объекта метаданных конфигурации, в данном случае - "АнализЗаказовПоставщикам". Очевидно, что в зависимости от типа отчета процедура будет меняться пропорционально используемым реквизитам. В рассматриваемом примере добавляется отбор по контрагенту. Для своего ключевого поставщика заменить значение искомого наименования на нужное.
Код 1C v 8.х Процедура ОткрытьОтчетПоИмени(НазваниеОтчета) Экспорт
// получаем отчет и открываем форму
// для построения отчета по названию отчета
Отчет = Отчеты[НазваниеОтчета].Создать();
Форма = Отчет.ПолучитьФорму(, , );
Форма.Открыть();
// Выполнить настройку отчета по умолчанию
Отчет.УстановитьНачальныеНастройки();
// Добавить требуемый отбор по поставщику
ТекОтбор = Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.ДоговорКонтрагентаВладелец;
ТекОтбор.Использование = Истина;
ТекОтбор.Значение = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик");
ТекОтбор.ВидСравнения = ВидСравнения.Равно;
// Добавляем специфичное для нас измерение в отборе - например, "осталось отгрузить"
// в данном случае из отчета уйдут позиции, по которым все получено.
Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.Добавить("ОсталосьОтгрузитьЕдиницОтчетов");
ТекОтбор1 = ОтчетОстатки.УниверсальныйОтчет.ПостроительОтчета.Отбор.ОсталосьОтгрузитьЕдиницОтчетов;
ТекОтбор1.Использование = Истина;
ТекОтбор1.Значение = 0;
ТекОтбор1.ВидСравнения = ВидСравнения.Больше;
// Состав отдельных ключевых показателей
// для каждого отчета можно посмотреть в конфигураторе
Отчет.СостояниеОтгрузкиПоЗаказу = истина;
Отчет.НеОтгружено = Истина;
Отчет.ОтгруженоЧастично = Истина;
// После завершения настроек нажмем программно кнопку "Сформировать"
Отчет.СформироватьОтчет(ФормаОтчета.ЭлементыФормы.ПолеТабличногоДокументаРезультат);
// Сформировать путь и имя файла для сохранения отчета
мПутьШаблон="C:\1C\Service";
мФайлШаблон="ЗаказыПоставщику.xls";
ИмяФайла = мПутьШаблон + "\" + мФайлШаблон;
// Полученные в отчете цифры и данные сохраним в файл Excel
Если Не ИмяФайла = Неопределено Тогда
Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат.СохранятьСвойстваОтображения = Истина;
Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS97);
КонецЕсли;
// Закрыть форму отчета после завершения работы
ФормаОтчета.Закрыть();
КонецПроцедуры
Для того, чтобы отладить обработку в режиме 1С:Предприятие, запущенного из конфигуратора можно создать экранную форму обработки и разместить в ней следующую процедур автоматического запуска отлаживаемого отчета:
Код 1C v 8.х Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = истина;
ОткрытьОтчетПоИмени("АнализЗаказовПоставщикам");
КонецПроцедуры
Надеемся, что успешная комбинация внешней обработки для запуска отчета по расписанию и vbscript поможет в автоматизации бизнеса вашего предприятия. Данная редакция настроек больше ориентирована на менеджера поставщика для вашей компании, что отслеживать взаимное движение товаров и документов.
Источник
Руководство компании, хочет получать оперативную сводку продаж по фирме Категория:
Работа с Интернет, Почтой (Mail), FTP Быстрая загрузка данных большого размера файла Excel в многомерный Массив Код 1C v 8.х // OldthiefXXX
Перем СерверExcel ;
Процедура КнопкаВыполнитьНажатие(Кнопка)
ФайлХЛС=СерверExcel .Application.Workbooks.Open(ДокументХЛС);
КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count;
КоличествоКолонокДанных=ФайлХЛС.ActiveSheet.UsedRange.Columns.Count;
Состояние("Загрузка в память данных ведомости...");
Excel Лист=ФайлХЛС.ActiveSheet;
Область = СерверExcel .Range(Excel Лист.Cells(1,1), Excel Лист.Cells(КонечнаяСтрокаДанных,КоличествоКолонокДанных));
МассивДанныхEXEL = Область.Value.Выгрузить();
КонецПроцедуры
Процедура ИнициализацииЕкселя()
Состояние("Происходит инициализация EXCEL ...");
Попытка
СерверExcel 1 = Новый COMОбъект("Excel .Application");
СерверExcel 1.DisplayAlerts = 0;
Исключение
ЗапущенExcel = 0;
Сообщить(ОписаниеОшибки(),"!");
КонецПопытки;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Преобразование XLS в MXL Конвертация таблиц из Excel в MXL - скачать Converter
Excel v MXL:
Для 8.х -
Скачивать файлы может только зарегистрированный пользователь!
Для 7.7 -
Скачивать файлы может только зарегистрированный пользователь!
Код 1C v 8.х // Выбор файла Microsoft Excel
Procedure FileNameStartChoice(Element, StdProcessing)
StdProcessing = False;
DialogFile = New FileDialog(FileDialogMode.Open);
DialogFile.Filter = "Файлы Microsoft Excel (*.xls)|*.xls";
DialogFile.DefaultExt = "xls";
If DialogFile.Choose() Then
FileName = DialogFile.FullFileName;
EndIf;
EndProcedure // FileNameStartChoice()
// Получить список листов текущей книги
Function GetSheets(Excel Application)
ListS_electSheet = New ValueList;
ListS_electSheet.Add(0, "Все листы");
NumberSheet = 0;
For FirstSheet = 1 To Excel Application.Worksheets.Count Do
NumberSheet = NumberSheet + 1;
ListS_electSheet.Add(
NumberSheet, Excel Application.WorkSheets(NumberSheet).Name
);
EndDo;
Return ListS_electSheet;
EndFunction // GetSheets()
// Преобразование XLS в MXL
Procedure ButtonExecuteClick()
If IsBlankString(FileName) Then
DoMessageBox("Не указано имя файла");
Return;
EndIf;
Try
Excel Application = GetCOMObject(FileName); // Excel .Application
Except
DoMessageBox("Ошибка чтения файла: " + FileName + " возможно защищен паролем.");
Return;
EndTry;
S_electSheet = 0;
S_electSheet = GetSheets(Excel Application).ChooseItem("Выберите лист", S_electSheet);
If S_electSheet = Undefined Then
Return;
EndIf;
S_electNumberSheet1 = S_electSheet.Value;
S_electNumberSheet2 = S_electNumberSheet1;
If S_electNumberSheet1 = 0 Then
S_electNumberSheet1 = 1;
S_electNumberSheet2 = Excel Application.Worksheets.Count
EndIf;
frmProgressBar = GetForm("FormProgressBar");
frmProgressBar.Caption = "Обрабатывается файл: " + FileName;
frmProgressBar.Controls.ProgressBarAll.MaxValue = S_electNumberSheet2;
frmProgressBar.Controls.ProgressBarAll.Value = 0;
For NumberSheet = S_electNumberSheet1 To S_electNumberSheet2 Do
frmProgressBar.Open();
SprDoc = New SpreadsheetDocument;
Try
WorkSheet = Excel Application.Sheets(NumberSheet).UsedRange;
Except
DoMessageBox(ErrorDescription());
Return;
EndTry;
AllStrings = WorkSheet.Rows.Count; // Всего строк
AllColumns = WorkSheet.Columns.Count; // Всего колонок
AllCells = AllStrings * AllColumns; // Все ячейки
frmProgressBar.Controls.InfoProgressBarAll.Value = "Обрабатывается лист № " +
NumberSheet + " из " +
S_electNumberSheet2;
frmProgressBar.Controls.ProgressBarAll.Value = frmProgressBar.Controls.ProgressBarAll.Value + 1;
If AllCells < 2 Then
Continue; // Пустой лист
EndIf;
frmProgressBar.Controls.ProgressBarCur.MaxValue = AllStrings;
frmProgressBar.Controls.ProgressBarCur.Value = 0;
For CurrentString = 1 To AllStrings Do
For CurrentColumn = 1 To AllColumns Do
frmProgressBar.Controls.InfoProgressBarCur.Value = "Обрабатывается строка №: " +
TrimAll(CurrentString) +
" из " + AllStrings +
", колонка №: " +
TrimAll(CurrentColumn) +
" из " + AllColumns;
Try
CurrentCell = WorkSheet.Cells(
CurrentString,
CurrentColumn
);
SlcCell = SprDoc.Area(
CurrentString,
CurrentColumn,
CurrentString,
CurrentColumn
);
SlcCell.RowHeight = CurrentCell.RowHeight;
SlcCell.ColumnWidth = CurrentCell.ColumnWidth;
// Горизонтальное положение
SlcCell.HorizontalAlign = mListHorizontalAlign.Get(
Format(CurrentCell.HorizontalAlignment, "NG=0")
);
// Вертикальное положение
SlcCell.VerticalAlign = mListVerticalAlign.Get(
Format(CurrentCell.VerticalAlignment, "NG=0")
);
// Размещение текста
SlcCell.TextPlacement = ?(
CurrentCell.WrapText = 0,
SpreadsheetDocumentTextPlacementType.Auto,
SpreadsheetDocumentTextPlacementType.Wrap
);
FontCell = CurrentCell.Font;
// Цвет фона
SlcCell.BackColor = mColorRGB(
CurrentCell.Interior.Color
);
// Цвет текста
SlcCell.TextColor = mColorRGB(
FontCell.Color
);
SlcCell.Font = New Font(
FontCell.Name,
Number(FontCell.Size),
?(Number(FontCell.Bold) = 0,
False, True),
?(Number(FontCell.Italic) = 0,
False, True),
?(Format(Number(FontCell.Underline),"NG=0") = "-4142",
False, True),
?(FontCell.Strikethrough, // Зачеркнутый шрифт
True, False)
);
SlcCell.Text = CurrentCell.Value;
// Рамка
Try
SlcCell.LeftBorder = mStyleBorder(CurrentCell, 7);
SlcCell.TopBorder = mStyleBorder(CurrentCell, 8);
SlcCell.RightBorder = mStyleBorder(CurrentCell, 10);
SlcCell.BottomBorder = mStyleBorder(CurrentCell, 9);
Except
EndTry;
SlcCell.Details = CurrentCell.Formula;
// Объединение ячеек
If (CurrentCell.MergeCells <> 0) and
(Find(CurrentCell.MergeArea.Rows.Address(,, 2),
CurrentCell.Address(,, 2)) = 1) Then
SlcCell = SprDoc.Area(
CurrentString,
CurrentColumn,
(CurrentString + CurrentCell.MergeArea.Rows.Count - 1),
(CurrentColumn + CurrentCell.MergeArea.Columns.Count - 1)
);
SlcCell.Merge();
EndIf;
Except
Message(ErrorDescription());
EndTry;
EndDo;
frmProgressBar.Controls.ProgressBarCur.Value = frmProgressBar.Controls.ProgressBarCur.Value + 1;
UserInterruptProcessing(); // Прерывание пользователя Ctrl+Break
EndDo;
SprDoc.Show("" + TrimAll(FileName) + ", лист " + NumberSheet,"");
EndDo;
frmProgressBar.Close();
Excel Application = "";
EndProcedure // ButtonExecuteClick()
Категория:
Работа с Microsoft Office и OpenOffice Разложение значения Цвета на состовляющие RGB Периодически могут возникать ситуации, когда необходимо разложить числовое значение цвета на его RGB-составлящие. Например, если говорить о платформе 1С 8, то для задания цвета шрифта, цвета области табличного документа и т.п. мы можем использовать либо web-цвета, либо цвета стилей, либо абсолютный цвет, который задается через RGB-составляющие:
Код 1C v 8.х Цвет = Новый Цвет(R,G,B);
где R,G,B - числовое значение цвета от 0 до 255 (красный, зеленый и синий соответственно)
В тоже время некоторые приложения, например
Excel , возвращают значение цвета одним десятичным числом, которое формируется из всех трех составляющих по определенному алгоритму. И если нам необходимо, например, скопировать формат ячейки
Excel в ячейку табличного документа 1С, то возникает вопрос, как нам разложить числовое представление цвета на его RGB-составляющие?
Чтобы разобраться в этом вопросе, давайте посмотрим, по какой формуле формируется числовое представление цвета. Формула достаточно проста:
Цвет = R + G * 256 + B * 65535
где R,G,B - числовое значение цвета от 0 до 255 (красный, зеленый и синий соответственно)
Если представить коэффициенты немного в другом виде, то наша формула преобразуется к следующему виду:
Цвет = R*(256^0) + G*(256^1) + B*(256^2)
То есть наше числовое представление цвета есть ни что иное, как трехзначное число по основанию 256. Поэтому, чтобы получить требуемые составляющие, нам надо всего лишь преобразовать значение цвета из 10-тичной системы в систему по основанию 256. Каждое из трех полученных значений и будет искомым значением составляющих цвета.
На примере переноса цвета ячейки
Excel код будет вылядеть так:
Код 1C v 8.х ЦветRGB = ЯчЕксел.Interior.Color;
R = ЦветRGB%256;
G = (Цел(ЦветRGB/256))%256;
B = (Цел(ЦветRGB/65535))%256;
Яч.ЦветФона = Новый Цвет(R,G,B);
Источник:
lessons1c Категория:
Полезные, Универсальные Функции Как выгрузить табличный документ в excel Процедура сохраняет табличный документ в файл
excel и открывает его
Код 1C v 8.х Процедура ОткрытьТабличныйДокументВExcel (ТабДокумент,ИмяФайла) Экспорт
ИмяФайла = Строка(ИмяФайла) + ".xls";
Каталог = КаталогВременныхФайлов();
ПолныйПутьКФайлу = Каталог + ИмяФайла;
Попытка
ТабДокумент.Записать(ПолныйПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);
Сообщить("Записан новый файл " + ПолныйПутьКФайлу);
ЗапуститьПриложение(ПолныйПутьКФайлу);
Исключение
СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Категория:
Табличный документ Экспорт и Импорт данных 1С - Microsoft Excel Экспорт
Процедура ОсновныеДействияФормыЭкспорт(Кнопка) - выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft
Excel с указанным именем, используя преобразование данных к типу число и типу строка;
Код 1C v 8.х Процедура ОсновныеДействияФормыЭкспорт(Кнопка)
Попытка
Попытка
// Загрузка объекта Microsoft Excel
Состояние("Выгрузка данных из 1С в Microsoft Excel ...");
Excel Приложение = Новый COMОбъект("Excel .Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Excel ."
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
// Создадим книгу, по умолчанию в ней уже есть листы
Книга = Excel Приложение.WorkBooks.Add();
// Используем первый лист книги Excel
Лист = Книга.WorkSheets(1);
// Сформировать шапку документа в первой строке листа
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Лист.Cells(1, Колонка).Value = стр.НазваниеРеквизита;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
// Выгрузить данные справочника
выборка = Справочники[ИмяСправочника].Выбрать();
СтрокаЛиста = 2;
Пока выборка.Следующий() Цикл
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Попытка
// Установить значение в строке и колонке
Если ТипЗнч(выборка[стр.НазваниеРеквизита])=Тип("Число") Тогда
// Установить формат для типа Число
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "0,00";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Формат(выборка[стр.НазваниеРеквизита],"ЧГ=0");
иначе
// Для всех других типов установим формат "Текстовый"
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "@";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Строка(выборка[стр.НазваниеРеквизита]);
КонецЕсли;
исключение
// в случае ошибки вывести номер строки и колонки
Сообщить("Ошибка установки значения для: " +
выборка[стр.НазваниеРеквизита]);
Сообщить("Стр: " +СтрокаЛиста+ " Кол: " +
Колонка+ " Рек: " + стр.НазваниеРеквизита);
КонецПопытки;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
СтрокаЛиста = СтрокаЛиста + 1;
Состояние("Экспорт из 1С в Excel " + СтрокаЛиста);
КонецЦикла;
// Сохраним созданную книгу в файл xls
Книга.SaveAs(имяФайла);
// Обязательно закроем соединение с COM объектом для освобождения памяти
Excel Приложение.Quit();
Сообщить("Файл выгружен успешно: " + имяФайла );
Исключение
// Обработка ошибок экспорта данных из 1С в Excel
Сообщить("Ошибка записи данных файла :" + имяФайла);
Сообщить(ОписаниеОшибки());
Попытка
Excel Приложение.Quit();
Исключение
КонецПопытки;
КонецПопытки;
КонецПроцедуры
Импорт
Исходный код процедуры 1С для загрузки XLS файла:
Код 1C v 8.х Процедура ЧтениеXLSФайла(Элемент)
Если ПустаяСтрока(ИмяФайла) Тогда
Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel .");
Возврат;
КонецЕсли;
Попытка
// Загрузка Microsoft Excel
Состояние("Загрузка Microsoft Excel ...");
Excel Приложение = Новый COMОбъект("Excel .Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel ." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Попытка
// Открытие файла Microsoft Excel
Состояние("Открытие файла Microsoft Excel ...");
Excel Файл = Excel Приложение.WorkBooks.Open(ИмяФайла);
Исключение
Сообщить("Ошибка открытия файла Microsoft Excel ." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
Попытка
// Обработка файла Microsoft Excel
Состояние("Обработка файла Microsoft Excel ...");
// Читаем данные первого листа книги
Excel Лист = Excel Файл.Sheets(1);
// Определить количество строк и колонок выбранного листа книги Excel
xlCellTypeLastCell = 11;
Excel ПоследняяСтрока = Excel Лист.Cells.SpecialCells(xlCellTypeLastCell).Row;
Excel ПоследняяКолонка = Excel Лист.Cells.SpecialCells(xlCellTypeLastCell).Column;
Исключение
Сообщить("Ошибка открытия листа №1 Microsoft Excel ." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
// Закрыть COM соединение для экономии памяти
Excel Приложение.Quit();
КонецПопытки;
// Создание описателя типов для таблицы значений
КЧ = Новый КвалификаторыЧисла(15,2);
КС = Новый КвалификаторыСтроки(50);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
Массив.Очистить();
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
// Очистить предыдущие значения
ТаблицаДокумента.Очистить();
ТаблицаДокумента.Колонки.Очистить();
// Создать колонки табличного документа
ТаблицаДокумента.Колонки.Добавить("Номер",ОписаниеТиповС,"Номер",5);
ТаблицаДокумента.Колонки.Добавить("Артикул",ОписаниеТиповС,"Артикул",11);
ТаблицаДокумента.Колонки.Добавить("Описание",ОписаниеТиповС,"Описание",25);
ТаблицаДокумента.Колонки.Добавить("Цена",ОписаниеТиповЧ,"Цена",6);
// Последовательное чтение строк с выбранного листа
Для Строка = 1 По Excel ПоследняяСтрока Цикл
// Обработка нажатия Ctrl + Break
ОбработкаПрерыванияПользователя();
// Добавить данные в табличную часть экранной формы
Стр=ТаблицаДокумента.Добавить();
Стр.Номер = Строка;
Попытка
Стр.Артикул = Excel Лист.Cells(Строка, 1).Value;
Стр.Описание = Excel Лист.Cells(Строка, 2).Value;
Стр.Цена = Excel Лист.Cells(Строка, 3).Value;
Исключение
// Не редко происходит ошибка конвертации отдельной ячейки документа
Сообщить("Ошибка чтения строки файла Microsoft Excel ." + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
// Отобразить информацию о ходе выполнения обработки
Состояние("Обработка файла Microsoft Excel : "
+ "строка " + Строка + " из " + Excel ПоследняяСтрока);
КонецЦикла;
// Закрыть COM соединение для экономии памяти
Excel Приложение.Quit();
// Отобразить результаты загрузки в форме элемента
ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();
КонецПроцедуры // ЧтениеXLSФайла(Элемент)
Категория:
Работа с Microsoft Office и OpenOffice Быстрая выгрузка отчетов в Excel , наложение Фильта и отображение ярлыка Вместо Таб.Показать() используем глобальную функцию - и отчет показывается сразу в
Excel в удобоваримом виде - с форматированием колонок по ширине, автофильтром и ярлычками листов
Код 1C v 7.x Процедура глОткрытьВЭкселе(Таб,ИмяФайла="",НеИзменятьВысотуСтроки=0) Экспорт
Попытка
// запускаем Excel -Server
Excel = СоздатьОбъект("Excel .Application");
Исключение
Excel = 0;
Предупреждение("MS Excel не загружен!");
Возврат;
КонецПопытки;
Если ТипЗначенияСтр(Таб)="Строка" Тогда
Excel .WorkBooks.Open(Таб);
Иначе
Если НеИзменятьВысотуСтроки=0 Тогда
ШиринаТаблицы=Таб.ШиринаТаблицы();
Область=Таб.Область(1,1,Таб.ВысотаТаблицы(),ШиринаТаблицы);
Область.ВысотаСтроки(12);
КонецЕсли;
Если Найти(ИмяФайла,":")=0 Тогда
ИмяФайла=КаталогПользователя()+ИмяФайла;
КонецЕсли;
Если Найти(Врег(ИмяФайла),"XLS")=0 Тогда
ИмяФайла=ИмяФайла+".xls";
КонецЕсли;
Таб.Записать(?(ПустоеЗначение(ИмяФайла)=0,ИмяФайла,КаталогПользователя()+"Таблица.xls"),"XLS");
Excel .WorkBooks.Open(ИмяФайла);
Excel .Visible = 0;
//добавляем автофильтр и форматирование колонок по ширине
Excel .Columns.AutoFit();
Range = Excel .Range(Excel .Cells(1, 1), Excel .Cells(1, ШиринаТаблицы));
Range.S_elect();
Range.AutoFilter();
//показываем вечно прячущиеся ярлычки листов
Excel .ActiveWindow.DisplayWorkbookTabs = -1;
Excel .ActiveWindow.TabRatio = 0.25;
КонецЕсли;
Excel .Visible=1;
Excel =0;
КонецПроцедуры
mikukrnet Категория:
Работа с Microsoft Office и OpenOffice Быстрая функция чтения данных с листа Excel При чтении файла
Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла
Excel в таблицу значений сокращается в десятки раз.
Вот текст функции:
Код 1C v 8.х Функция ПрочитатьЛистExcel (ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
Если ЛистЭксель = Неопределено Тогда
ЛистЭксель = ПолучитьCOMОбъект(,"Excel .Application");
КонецЕсли;
Если ВсегоСтрок = 0 Тогда
ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
КонецЕсли;
Если ВсегоКолонок = 0 Тогда
ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
КонецЕсли;
Если ТЗ = Неопределено Тогда
ТЗ = Новый ТаблицаЗначений;
Для Счетчик = 1 По ВсегоКолонок Цикл
ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
КонецЦикла;
КонецЕсли;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
НоваяСтрока = ТЗ.Добавить();
КонецЦикла;
Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();
Для Счетчик = 0 По ВсегоКолонок-1 Цикл
ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
ЛистЭксель = Неопределено;
Возврат ТЗ;
КонецФункции
Комментировать функцию, думаю, нет необходимости. Вот собственно и все, что я хотел сказать.
wildhog Категория:
Работа с Microsoft Office и OpenOffice Как таблицу значений выгрузить в Excel Код 1C v 8.х
Процедура ВыгрузкаВЭксель(Т) Экспорт
Попытка
XL = Новый COMОбъект ("Excel .Application");
Исключение
Сообщить("Ошибка создания Excel .Application");
Возврат;
КонецПопытки;
XL.Visible = 1;
wb = XL.Workbooks.Add();
sh = wb.Worksheets.Add();
Кол = Т.Колонки.Количество();
Если Кол = 0 Тогда
Возврат;
КонецЕсли;
Для К = 1 По Кол Цикл
Заг = Т.Колонки[К-1].Имя;
sh.Cells(1,К).Font.Name = "Tahoma";
sh.Cells(1,К).Font.Size = 10;
sh.Cells(1,К).Font.FontStyle = "Bold";
sh.Cells(1,К).FormulaR1C1 = Заг;
КонецЦикла;
Для Каждого Стр Из Т Цикл
Для К = 1 По Кол Цикл
Зн = Стр[К-1];
sh.Cells(Т.Индекс(Стр)+2, К).FormulaR1C1 = Строка(Зн);
КонецЦикла;
КонецЦикла;
sh.Columns.AutoFit();
КонецПроцедуры
Категория:
Работа с Таблицей Значений Как очистить, сократить журнал регистрации? В 1С 8.х
В процессе длительной эксплуатации системы в журнале регистрации может накапливаться значительное число записей. Поэтому поддерживается возможность сокращения журнала регистрации и удаления записей, ставших неактуальными. При сокращении журнала регистрации можно записать удаляемые события в файл, если предвидится необходимость их анализа в будущем.
В конфигураторе, в меню «Администрирование – Настройка журнала регистрации…» кнопкой «Сократить» – установив текущую дату. Там же можно сохранить журнал в файл.
В поле
Текущий диапазон событий , указывается диапазон времени за который есть данные.
Удалить события до – здесь указываем до какой даты можно удалить данные.
Удаляемые данные можно сохранить, для этого установим свойство “
Записать удаляемые события в файл ” и укажем папку в которую сохраним.
Если требуется периодически сокращать журнал и при этом иметь возможность просматривать уже удаленные события журнала, то установите флажок “
Сохранять разделение хранения журнала по периодам и объединять с сохраненным ранее журналом “.
Используя средства работы со списками, разработчик имеет возможность выгрузить журнал регистрации в текстовый или табличный документ, который в дальнейшем может быть сохранен в собственном формате или, например, формате листа
Excel или документа HTML.
Кроме этого поддерживается выгрузка журнала регистрации в формате XML, что может использоваться для последующего анализа выгруженных записей средствами встроенного языка.
Особенности функционирования журнала регистрации
При создании новой информационной базы для журнала устанавливается режим регистрации событий всех уровней важности; включение и выключение журнала регистрации. При загрузке информационной базы из файла журнал регистрации не очищается.
Как сократить журнал регистрации программно
Код DOS Batch File C:\Program Files\1cv8\bin\1cv8.exe" CONFIG /F"C:\DemoTrd2" /N"Федоров (администратор)" /P"" /OutD:\my\log.txt /ReduceEventLogSize 2004-12-26 -saveAsC:\OldLog.elf
Для 1С 7.7:
удалить файл <Путь к базе>\SYSLOG\1Cv7.mlg
Что такое Журнал регистрации? Категория:
Администрирование