Отправка почты через Mail.ru с использованием технологии шифрования SSL Часто клиенты просят сделать автоматическую отправку счетов или отчетов на электронную почту, ниже приведены примеры кода для разных версий 1С:
Код 1C v 8.3
Функция ПолучитьПрофильПочты()
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль. АдресСервераSMTP = "smtp.mail.ru" ;
Профиль. АдресСервераPOP3 = "pop.mail.ru" ;
Профиль. ПортPOP3 = 995 ;
Профиль. ПортSMTP = 465 ;
Профиль. Пользователь = "s_v@inbox.ru" ;
Профиль. Пароль = "8mFTnDjC4KftTzh" ;
Профиль. ПользовательSMTP = "s_v@inbox.ru" ;
Профиль. ПарольSMTP = "8mFTnDjC4KftTzh" ;
Профиль. АутентификацияSMTP = СпособSMTPАутентификации. Login;
Профиль. ИспользоватьSSLPOP3 = Истина ;
Профиль. ИспользоватьSSLSMTP = Истина ;
Возврат Профиль;
КонецФункции
Процедура ОсновныеДействияФормыСчетОтправитьНаПочту(Кнопка)
Если ЗначениеЗаполнено( Ответственный. ПочтаДляОтправкиСчета) Тогда
Почта = Новый ИнтернетПочта;
Письмо = Новый ИнтернетПочтовоеСообщение;
Текст = Письмо. Тексты. Добавить( "В приложении счет" ) ;
Текст. ТипТекста = ТипТекстаПочтовогоСообщения. ПростойТекст;
Письмо. Тема = Строка( Ссылка) ;
Письмо. Отправитель = "s_vmeste@inbox.ru" ;
Письмо. ИмяОтправителя = "1С" ;
Письмо. Получатели. Добавить( Ответственный. ПочтаДляОтправкиСчета) ;
врфайл= ПолучитьИмяВременногоФайла( "pdf" ) ;
текТабдок= СчетФаксимилеТовары( ) ;
текТабдок. Записать( врфайл, ТипФайлаТабличногоДокумента. PDF) ;
Письмо. Вложения. Добавить( врфайл) ;
Попытка
Почта. Подключиться( ПолучитьПрофильПочты( ) ) ; Почта. Послать( Письмо) ; Предупреждение( "Письмо отправлено" , 3 ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
Почта. Отключиться( ) ;
Письмо. Вложения. Очистить( ) ;
Иначе
Предупреждение( "В настройках ответственного не указана почта для отправки счета" ) ;
КонецЕсли ;
КонецПроцедуры
С версиями 8.2 сложнее, так как все почтовые сервисы перешли на SSL, а медоты:
Код 1C v 8.3 Профиль. ИспользоватьSSLPOP3 = Истина ;
Профиль. ИспользоватьSSLSMTP = Истина ;
появились только в 8.3.1 , остается использовать stunnel или CDO :
Код 1C v 8.2 УП
Функция ПослатьПоПочте(Знач Адрессаты, ТемаСообщения = "" ,ТекстСообщения = "" ,СписокВложений = "" ) Экспорт
Оправитель = "s_v@inbox.ru" ;
Пароль = "8mFTnDjC4KftTzh" ;
loConfig = Новый COMОбъект( "CDO.Configuration" ) ;
loCdoMessage = Новый COMОбъект( "CDO.Message" ) ;
loCdoMessage. Configuration = loConfig;
loCdoMessage. From = Строка( "1С <" + Оправитель+ ">" ) ;
loCdoMessage. To = Адрессаты;
loCdoMessage. Subject = ? ( ТемаСообщения= "" , "1С" , ТемаСообщения) ;
loCdoMessage. TextBody = "1C" ;
HTMLBody = "<html>
|<head>
|<meta content="" text/html; charset=Windows-1251"" http-equiv="" content-type"" >
|<title> Тестовое сообщение </title>
|</head>
|<body>
|<h4>" + ТекстСообщения + "</h4>
|<p></p>
|</body>
|</html>" ;
loCdoMessage. HTMLBody = HTMLBody;
Если ТипЗнч( СписокВложений) = Тип( "Строка" ) И Не СписокВложений = "" Тогда
Попытка
loCdoMessage. AddAttachment( СписокВложений) ;
Исключение
КонецПопытки ;
ИначеЕсли ТипЗнч( СписокВложений) = Тип( "СписокЗначений" ) Тогда
Для каждого ПутьКВложению Из СписокВложений Цикл
Попытка
loCdoMessage. AddAttachment( ПутьКВложению. Значение) ;
Исключение
КонецПопытки ;
КонецЦикла ;
КонецЕсли ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ) . Value = 2 ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ) . Value = "smtp.mail.ru" ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ) . Value = "465" ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ) . Value = 1 ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ) . Value = Оправитель;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ) . Value = Пароль;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ) . Value = 1 ;
loConfig. Fields. Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout" ) . Value = 60 ;
loConfig. Fields. Update( ) ;
Попытка
loCdoMessage. Send( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
Возврат Ложь ;
КонецПопытки ;
КонецФункции
Процедура ОсновныеДействияФормыСчетТовары(Кнопка)
Если ЗначениеЗаполнено( Менеджер. ПочтаДляОтправкиСчета) Тогда
врфайл= ПолучитьИмяВременногоФайла( "xls" ) ;
текТабдок= СчетФаксимилеТовары( ) ;
текТабдок. Записать( врфайл, ТипФайлаТабличногоДокумента. XLS) ;
ПослатьПоПочте( Менеджер. ПочтаДляОтправкиСчета, Строка( Ссылка) , "Счет в приложении" , врфайл) ;
Предупреждение( "Письмо отправлено" , 3 ) ;
Иначе
Предупреждение( "В настройках ответственного не указана почта для отправки счета" ) ;
КонецЕсли ;
КонецПроцедуры
Через stunnel в 1С код, менять не нужно, только установить программу и изменить настройки подключения к почтовому ящику
Скачиваем stunnel c официального сайта (stunnel.org) и запускаем инсталятор, жмем yes при установке спросит страну и ваши данные, это нужно для создания сертификата на вашем компьютере.
После запуска в трее появится его иконка, правой клавишей и редактировать edit configuration
В блокноте откроется файл настроек, там будет пример для gmail дополняем или заменяем его следующим:
Код Batch File (DOS, CMD, BAT) [gmail-pop3]
client = yes
accept = 127 .0 .0 .1 :10110
connect = pop.gmail.com:995
[gmail-imap]
client = yes
accept = 127 .0 .0 .1 :10143
connect = imap.gmail.com:993
[gmail-smtp]
client = yes
accept = 127 .0 .0 .1 :10025
connect = smtp.gmail.com:465
[yandex-pop3]
client = yes
accept = 127 .0 .0 .1 :20110
connect = pop.yandex.ru:995
[yandex-imap]
client = yes
accept = 127 .0 .0 .1 :20143
connect = imap.yandex.ru:993
[yandex-smtp]
client = yes
accept = 127 .0 .0 .1 :20025
connect = smtp.yandex.ru:465
[mail-pop3]
client = yes
accept = 127 .0 .0 .1 :30110
connect = pop.mail.ru:995
[mail-imap]
client = yes
accept = 127 .0 .0 .1 :30143
connect = imap.mail.ru:993
[mail-smtp]
client = yes
accept = 127 .0 .0 .1 :30025
connect = smtp.mail.ru:465
Сохраняем файл и делаем Reload configuration
В настройка 1С меняем порты для работы
gmail
pop3 10110
imap 10143
smtp 10025
yandex
pop3 20110
imap 20143
smtp 20025
mail
pop3 30110
imap 30143
smtp 30025
Если в коде прописано, то:
Код 1C v 8.х Функция ПолучитьПрофильПочты()
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль. АдресСервераSMTP = "localhost" ;
Профиль. АдресСервераPOP3 = "localhost" ;
Профиль. ПортPOP3 = 30110 ;
Профиль. ПортSMTP = 30025 ;
Профиль. Пользователь = "s_v@inbox.ru" ;
Профиль. Пароль = "8mFTnDjC4KftTzh" ;
Профиль. ПользовательSMTP = "s_v@inbox.ru" ;
Профиль. ПарольSMTP = "8mFTnDjC4KftTzh" ;
Профиль. АутентификацияSMTP = СпособSMTPАутентификации. Login;
Возврат Профиль;
КонецФункции
Все, можно отправлять и проверять работу через консоль Show log window в меню
P.S. Почтовый ящик в примерах не рабочий, как пример
Категория:
Работа с Интернет, Почтой (Mail), FTP Функции сохранения таблицы значений в файл и чтения из файла В данном примере хочу привести несколько универсальных функций по выгрузке таблицы значений в файл и дальнейшего чтения из файла:
П орядок программных действий при выгрузке в файл выглядит так:
Подготавливаем таблицу значений (выгружаем из табличной части, выбираем колонки); Конвертируем таблицу значений в табличный документ; Сохраняем табличный документ в MXL.
При загрузке таблицы порядок действий такой:
Читаем из файла табличный документ; Конвертируем табличный документ в таблицу значений; Используем эту таблицу значений в своих целях (загружаем в табличную часть).
Соответственно файл для хранения данных таблицы имеет расширение *.mxl.
Основные функции для реализации поставленной задачи следующие:
ПреобразоватьТДвТЗ – Функция преобразования табличного документа в таблицу значений.
ПреобразоватьТЗвТД – Функция обратного преобразования таблицы значений в табличный документ.
ПрочитатьТЗИзMXL – Читает из файла данные, определяет колонки таблицы и преобразует эти данные в таблицу значений.
ЗаписатьТЗВMXL – Преобразует таблицу значений в табличный документ и записывает его в файл.
Код 1C v 8.3
Функция ПреобразоватьТДвТЗ(ТабДок, СтруктураКолонок, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, Знач КонецСтрока = Неопределено, Знач КонецСтолбец = Неопределено) Экспорт
Если НачалоСтрока = Неопределено И НачалоСтолбец = Неопределено Тогда
НачалоСтрока = 1 ;
НачалоСтолбец = 1 ;
КонецЕсли ;
Если НачалоСтрока = Неопределено Тогда
НачалоСтрока = 1 ;
Пока НЕ ТабДок. Область( НачалоСтрока, НачалоСтолбец) . СодержитЗначение
И НачалоСтрока < ТабДок. ВысотаТаблицы
Цикл
НачалоСтрока = НачалоСтрока + 1 ;
КонецЦикла ;
ИначеЕсли НачалоСтолбец = Неопределено Тогда
НачалоСтолбец = 1 ;
Пока НЕ ТабДок. Область( НачалоСтрока, НачалоСтолбец) . СодержитЗначение
И НачалоСтолбец < ТабДок. ШиринаТаблицы
Цикл
НачалоСтолбец = НачалоСтолбец + 1 ;
КонецЦикла ;
КонецЕсли ;
КонецСтрока = ? ( КонецСтрока = Неопределено , ТабДок. ВысотаТаблицы, КонецСтрока) ;
КонецСтолбец = ? ( КонецСтолбец = Неопределено , ТабДок. ШиринаТаблицы, КонецСтолбец) ;
ЭтоТаблица = ( ТипЗнч( СтруктураКолонок) = Тип( "ТаблицаЗначений" ) ) ;
ТабЗначений = ПолучитьТаблицуВывода( СтруктураКолонок) ;
Для ИндексСтроки = НачалоСтрока По КонецСтрока Цикл
СтрокаТЗ = ТабЗначений. Добавить( ) ;
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из СтруктураКолонок Цикл
НаименованиеКолонки = ? ( ЭтоТаблица, Колонка. Наименование, Колонка. Ключ) ;
пИндексКолонки = ? ( ЭтоТаблица, Колонка. СтолбецОтчёт, ИндексКолонки) ;
Если ТабДок. Область( ИндексСтроки, пИндексКолонки) . СодержитЗначение Тогда
СтрокаТЗ[НаименованиеКолонки] = ТабДок. Область( ИндексСтроки, пИндексКолонки) . Значение;
Иначе
СтрокаТЗ[НаименованиеКолонки] = ТабДок. Область( ИндексСтроки, пИндексКолонки) . Текст;
КонецЕсли ;
ИндексКолонки = ИндексКолонки + 1 ;
КонецЦикла ;
КонецЦикла ;
Возврат ТабЗначений;
КонецФункции ;
Функция ПреобразоватьТЗвТД(ТабЗначений, ТабДок = Неопределено, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, ВыводитьЗаголовки = Ложь) Экспорт
Если ТабДок = Неопределено Тогда
ТабДок = Новый ТабличныйДокумент;
КонецЕсли ;
НачалоСтрока = ? ( НачалоСтрока = Неопределено , 1 , НачалоСтрока) ;
НачалоСтолбец = ? ( НачалоСтолбец = Неопределено , 1 , НачалоСтолбец) ;
ИндексСтроки = НачалоСтрока;
Если ВыводитьЗаголовки Тогда
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из ТабЗначений. Колонки Цикл
ТабДок. Область( ИндексСтроки, ИндексКолонки) . Текст = ? ( ПустаяСтрока( Колонка. Заголовок) , Колонка. Имя, Колонка. Заголовок) ;
ИндексКолонки = ИндексКолонки + 1 ;
КонецЦикла ;
ИндексСтроки = ИндексСтроки + 1 ;
КонецЕсли ;
Для Каждого Элемент Из ТабЗначений Цикл
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из ТабЗначений. Колонки Цикл
ТабДок. Область( ИндексСтроки, ИндексКолонки) . СодержитЗначение = Истина ;
ТабДок. Область( ИндексСтроки, ИндексКолонки) . ТипЗначения = Новый ОписаниеТипов( Колонка. ТипЗначения) ;
ТабДок. Область( ИндексСтроки, ИндексКолонки) . Значение = Элемент[Колонка. Имя];
ИндексКолонки = ИндексКолонки + 1 ;
КонецЦикла ;
ИндексСтроки = ИндексСтроки + 1 ;
КонецЦикла ;
Возврат ТабДок;
КонецФункции ;
Функция ПрочитатьТЗИзMXL(ИмяФайла, СтруктураКолонок = Неопределено, ЕстьЗаголовок = Истина) Экспорт
ТабДок = Новый ТабличныйДокумент;
ТабДок. Прочитать( ИмяФайла) ;
Если СтруктураКолонок = Неопределено И ЕстьЗаголовок Тогда
СтруктураКолонок = Новый Структура;
Для ИндексКолонки = 1 По ТабДок. ШиринаТаблицы Цикл
Обл1 = ТабДок. Область( 1 , ИндексКолонки) ;
Обл2 = ТабДок. Область( 2 , ИндексКолонки) ;
ИмяКолонки = СокрЛП( Обл1 . Текст) ;
ИмяКолонки = ? ( Найти( ИмяКолонки, " " ) > 0 , СтрЗаменить( ТРег( ИмяКолонки) , " " , "" ) , ИмяКолонки) ;
СтруктураКолонок. Вставить( ИмяКолонки, ? ( Обл2 . СодержитЗначение, Обл2 . ТипЗначения, Новый ОписаниеТипов) ) ;
КонецЦикла ;
ИначеЕсли СтруктураКолонок = Неопределено И НЕ ЕстьЗаголовок Тогда
СтруктураКолонок = Новый Структура;
Для ИндексКолонки = 1 По ТабДок. ШиринаТаблицы Цикл
Обл2 = ТабДок. Область( 1 , ИндексКолонки) ;
ИмяКолонки = "К" + Формат( ИндексКолонки, "ЧДЦ=0; ЧН=0; ЧГ=0" ) ;
СтруктураКолонок. Вставить( ИмяКолонки, ? ( Обл2 . СодержитЗначение, Обл2 . ТипЗначения, Новый ОписаниеТипов) ) ;
КонецЦикла ;
КонецЕсли ;
Таблица = ПреобразоватьТДвТЗ( ТабДок, СтруктураКолонок, ? ( ЕстьЗаголовок, 2 , 1 ) , 1 ) ;
Возврат Таблица;
КонецФункции ;
Процедура ЗаписатьТЗВMXL(ИмяФайла, ТабЗначений, ЕстьЗаголовок = Истина) Экспорт
ТабДок = ПреобразоватьТЗвТД( ТабЗначений, Неопределено , 1 , 1 , ЕстьЗаголовок) ;
ТабДок. Записать( ИмяФайла, ТипФайлаТабличногоДокумента. MXL) ;
КонецПроцедуры ;
Еще небольшой набор функций для вывода таблицы значений в табличный документ. После формирования табличного документа, - сохраняем его в файл mxl.
Табличный документ можно сохранить a файлы следующих типов:
ANSITXT - Текстовый документ DOCX - документ MS Word HTML HTML3 HTML4 HTML5 MXL MXL7 ODS - Файл Open Office PDF - файл Acrobat Readr TXT - Текстовый документ XLS - файл Excel XLS95 - файл Excel95 XLS97 - файл Excel97 XLSX - файл Excel2010
Код 1C v 8.3
Функция ЗагрузитьТЗизФайла(ИмяФайла)
Путь = КаталогВременныхФайлов( ) + ИмяФайла;
Текст = Новый ЧтениеТекста( Путь, КодировкаТекста. UTF8) ;
стрТЗ = Текст. Прочитать( ) ;
Текст. Закрыть( ) ;
ТЗ = ЗначениеИзСтрокиВнутр( стрТЗ) ;
Возврат ТЗ;
КонецФункции
Функция ЗаписьТЗ2ТабДок(записьТЗ,НомерСтроки,ТабличныйДокумент)
НомерКолонки = 1 ;
Символ160 = Символ( 160 ) ;
Для каждого полеТЗ из ЗаписьТЗ цикл
типПоляТЗ = ТипЗнч( полеТЗ) ;
если типПоляТЗ = Тип( "Число" ) тогда
полеТЗ= Строка( полеТЗ) ;
полеТЗ= СтрЗаменить( полеТЗ, Символ160 , "" ) ;
полеТЗ= СтрЗаменить( полеТЗ, "," , "." ) ;
иначеесли типПоляТЗ = Тип( "Строка" ) тогда
иначе
полеТЗ = строка( полеТЗ) ;
КонецЕсли ;
имяОбласти = "R" + номерСтроки + "C" + НомерКолонки;
имяОбласти = СтрЗаменить( имяОбласти, Символ( 160 ) , "" ) ;
Ячейка = ТабличныйДокумент. Область( имяОбласти) ;
Ячейка. Текст = полеТЗ;
НомерКолонки = НомерКолонки + 1 ;
КонецЦикла ;
КонецФункции
Функция НаимКолонок2Mxl(ТаблицаЗначений,ТабличныйДокумент)
номерСтроки= 1 ;
номКолонки= 1 ;
ТабличныйДокумент = новый ТабличныйДокумент;
Для НомКол= 0 по ТаблицаЗначений. Колонки. Количество( ) - 1 Цикл
имяКолонки= ТаблицаЗначений. Колонки[НомКол]. Имя;
имяОбласти = "R" + номерСтроки + "C" + номКолонки;
имяОбласти = СтрЗаменить( имяОбласти, Символ( 160 ) , "" ) ;
Ячейка = ТабличныйДокумент. Область( имяОбласти) ;
Ячейка. Текст = имяКолонки;
ЖирныйШрифт = ? ( ЖирныйШрифт = Неопределено , Новый Шрифт( Ячейка. Шрифт, , , Истина ) , ЖирныйШрифт) ;
Ячейка. Шрифт = ЖирныйШрифт;
номКолонки = номКолонки + 1 ;
КонецЦикла ;
КонецФункции
Функция Таблица2Mxl(ТаблицаЗначений,ТабличныйДокумент)
НомСтр= 1 ;
Для каждого записьТЗ из ТаблицаЗначений Цикл
НомСтр = НомСтр + 1 ;
ЗаписьТЗ2 ТабДок( записьТЗ, НомСтр, ТабличныйДокумент) ;
КонецЦикла ;
КонецФункции
Функция ТаблицаЗначений2Mxl(ТаблицаЗначений,ФайлMxl)
ТабличныйДокумент = новый ТабличныйДокумент;
НаимКолонок2 Mxl( ТаблицаЗначений, ТабличныйДокумент) ;
Таблица2 Mxl( ТаблицаЗначений, ТабличныйДокумент) ;
ТабличныйДокумент. Записать( ФайлMxl, ТипФайлаТабличногоДокумента. MXL) ;
ТабличныйДокумент. Показать( ФайлMxl, ФайлMxl) ;
Возврат 0 ;
КонецФункции
Функция Тест_ВыгрузитьТЗвMxl() ;
файл_мТЗИсходныеДанные = "мТЗИсходныеДанные.dat" ;
ТЗ = ЗагрузитьТЗизФайла( файл_мТЗИсходныеДанные) ;
ФайлMxl = КаталогВременныхФайлов( ) + СтрЗаменить( файл_мТЗИсходныеДанные, ".dat" , ".mxl" ) ;
ТаблицаЗначений2 Mxl( ТЗ, ФайлMxl) ;
КонецФункции
Тест_ВыгрузитьТЗвMxl( ) ;
Пример выгруженной таблицы значений в файл:
Категория:
Работа с Таблицей Значений Отдаем PDF файл через Web-сервис В инфраструктурах, активно использующих возможности web-сервисов 1С, нередко возникает потребность получения не только массивов данных из базы, но и различных файлов. Сам файл через веб-сервис так просто не передашь, но на его основе можно создать объект ДвоичныеДанные, который, в свою очередь, уже сериализуется в base64Binary. После такой операции наш веб-сервис без проблем передает данные и получателю остается только выполнить на своей стороне обратное преобразование и сохранить файл.
В качестве примера такого механизма я буду создавать в 1С счет на оплату на основании переданных через сервис ИНН контрагента и суммы, и возвращать PDF печатной формы. На этот раз, кроме примеров кода, дополнительно был записан скринкаст разработки.
Для начала создадим в пустой конфигурации справочник "Контрагенты" с реквизитом "ИНН" и документ "Счет" с реквизитами "Контрагент" и "СуммаДокумента".
Теперь добавим пакет XDTO "test_ws"с пространством имен "http://www.test-ws.org", в котором опишем тип объекта "File". Он будет содержать свойства:
binaryData - (base64Binary (http://www.w3.org/2001/XMLSchema));
ext - string (http://www.w3.org/2001/XMLSchema);
message - string (http://www.w3.org/2001/XMLSchema).
Создаем web-сервис "DocWork", пространство имен "http://www.test-ws.org", выбираем пакет "http://www.test-ws.org". Добавляем в сервис операцию "CreateBill", возвращаемый тип File (http://www.test-ws.org), входные параметры:
INN - string (http://www.w3.org/2001/XMLSchema);
Summ - decimal (http://www.w3.org/2001/XMLSchema).
Код web-сервиса:
Код 1C v 8.3 Функция CreateBill(INN, Summ)
typeFile = ФабрикаXDTO. Тип( "<a href=" http:
текФайл = ФабрикаXDTO. Создать( typeFile) ;
текФайл. binaryData = ФабрикаXDTO. Создать( ФабрикаXDTO. Тип( "<a href=" http:
текФайл. ext = ФабрикаXDTO. Создать( ФабрикаXDTO. Тип( "<a href=" http:
Если ПустаяСтрока( INN) ИЛИ Summ = 0 Тогда
текФайл. message = "empty data" ;
Возврат текФайл;
КонецЕсли ;
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН = &ИНН" ;
Запрос. УстановитьПараметр( "ИНН" , INN) ;
Результат = Запрос. Выполнить( ) . Выгрузить( ) ;
Если Результат. Количество( ) = 0 Тогда
текФайл. message = "client not found" ;
Возврат текФайл;
КонецЕсли ;
СчетДок = Документы. Счет. СоздатьДокумент( ) ;
СчетДок. Дата = ТекущаяДата( ) ;
СчетДок. Контрагент = Результат[0 ]. Ссылка;
СчетДок. СуммаДокумента = Summ;
СчетДок. Записать( ) ;
ТабДок = Новый ТабличныйДокумент;
Документы. Счет. Печать( ТабДок, СчетДок. Ссылка) ;
ИмяФайла = ПолучитьИмяВременногоФайла( "pdf" ) ;
ТабДок. Записать( ИмяФайла, ТипФайлаТабличногоДокумента. PDF) ;
ДанныеФайла = Новый ДвоичныеДанные( ИмяФайла) ;
текФайл. binaryData = ДанныеФайла;
текФайл. message = "ok" ;
текФайл. ext = "pdf" ;
Возврат текФайл;
КонецФункции < br>
Тестовая обработка
Код 1C v 8.3 &НаСервере
Функция ПолучитьПДФ()
ОпределениеВС = Новый WSОпределения( "<a href=" http:
СсылкаВС = Новый WSПрокси( ОпределениеВС, "<a href=" http:
ФайлСервис = СсылкаВС. CreateBill( ИНН, Сумма) ;
Возврат ФайлСервис. binaryData;
КонецФункции
&НаКлиенте
Процедура СоздатьСчет(Команда)
мДанные = ПолучитьПДФ( ) ;
Если мДанные = Неопределено Тогда
Возврат ;
КонецЕсли ;
мДанные. Записать( "c:\temp_bil.pdf" ) ;
КонецПроцедуры < br>
А так же обещанное видео, как есть, без купюр
Источник
Категория:
WEB-сервисы, WS-ссылки, XDTO-пакеты Вывести табличный документ в PDF Данный пример работает на платформе выше 8.2.13
Код 1C v 8.х Макет = ПолучитьМакет( "Макет" ) ;
ОбластьШапка = Макет. ПолучитьОбласть( "Шапка" ) ;
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка. Параметры. НомерДок = Номер;
ОбластьШапка. Параметры. ДатаДок = Формат( Дата, "DDMMMMYYYY" ) ;
ОбластьШапка. Параметры. Руководитель = Руководитель;
ТабДок. Вывести( ОбластьШапка) ;
ТабДок. Защита= Истина ;
ВремФайл= ПолучитьИмяВременногоФайла( "pdf" ) ;
ТабДок. Записать( ВремФайл, ТипФайлаТабличногоДокумента. PDF) ;
ЗапуститьПриложение( ВремФайл) ;
Категория:
Табличный документ Как получить Временный каталог или Временный файл Временный каталог:
Код 1C v 8.х КаталогВременныхФайлов( )
Получает имя каталога, который используется программой для размещения временных файлов.
Пример:
Код 1C v 8.х ГдеИскать = КаталогВременныхФайлов( ) ;
Код 1C v 8.2 УП
ИмяФайла = КаталогВременныхФайлов( ) + Элемент. ТекущиеДанные. ПредставлениеВложения;
Данные. Записать( ИмяФайла) ;
ЗапуститьПриложение( ИмяФайла) ;
!!! КаталогВременныхФайлов() недоступен на Веб-клиенте !!!
Это ограничение web-клиента. Вся работа с файловой системой в интерактивном режиме. Типа безопасность клиентской машины прежде всего
Временный файл:
Код 1C v 8.х ПолучитьИмяВременногоФайла( < Расширение> ( необязательный)
Указывает желаемое расширение имени временного файла. Если параметр не задан, то создается временный файл с расширением по умолчанию (.tmp). Желаемое расширение задается строкой, которая и будет использована в качестве расширения. Указание точки в начале расширения не обязательно. Например, при указании ".xml" или "xml" результат будет одинаковый.
!!! Рекомендуется удалять временный файл самостоятельно после его использования. !!!
Пример:
Код 1C v 8.х Для каждого СтрокаТаблицы Из ТаблицаОтчетов Цикл
ИмяТемпФайла = ПолучитьИмяВременногоФайла( ) ;
СтрокаТаблицы. Отчет. Записать( ИмяТемпФайла,
ТипФайлаТабличногоДокумента. HTML) ;
ТекстHТМЛ = Новый ТекстовыйДокумент;
ТекстHТМЛ. Прочитать( ИмяТемпФайла) ;
ТекстHТМЛ = ТекстHТМЛ. ПолучитьТекст( ) ;
КонецЦикла ;
Код 1C v 8.х Макет = ПолучитьМакет( "Макет" ) ;
ОбластьШапка = Макет. ПолучитьОбласть( "Шапка" ) ;
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка. Параметры. НомерДок = Номер;
ОбластьШапка. Параметры. ДатаДок = Формат( Дата, "DDMMMMYYYY" ) ;
ОбластьШапка. Параметры. Руководитель = Руководитель;
ТабДок. Вывести( ОбластьШапка) ;
ТабДок. Защита= Истина ;
ВремФайл= ПолучитьИмяВременногоФайла( "pdf" ) ;
ТабДок. Записать( ВремФайл, ТипФайлаТабличногоДокумента. PDF) ;
ЗапуститьПриложение( ВремФайл) ;
Категория:
Работа с Файлами и Каталогами Отправка отчетов из 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
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 )
WScript.Sleep(5000 )
Dim WshShell
Set WshShell = WScript.CreateObject ("WScript.Shell" )
WshShell.Run "C:\1C\ Service\emailer.vbs"
VBS E-Mail скрипт для отправки готового отчета в формате Excel создает новое электронное письмо на заданный адрес, в теле письма указывает пояснение к отчету, а в качестве вложения прикрепляет файл, создание и наполнение информацией которого была произведена при запуске service.vbs
Код VBS
Const cdoSendUsingPickup = 1
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
objMessage.AddAttachment "C:\1C\Service\ЗаказыПоставщику.xls"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing" ) = 2
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver" ) = "mail.domain.ru"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ) = cdoBasic
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername" ) = "report@domain.ru"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword" ) = "youpassword"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport" ) = 25
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl" ) = False
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout" ) = 60
objMessage.Configuration.Fields.Update
objMessage.Send
Внешняя обработка по запуску отчета "Анализ заказов поставщику" состоит из двух процедур. Первая - "ReportNow() Экспорт" служит для определения входной точки передачи управления от VBS к 1С. Вторая - "ОткрытьОтчетПоИмени()" - выполняет действия по настройке критериев отбора отчета, группировке строк и столбцов, определению состава количественных показателей. Данный способ вызова отчетов стандартной конфигурации широко применяется в различных формах 1С, и по мере развития конфигурации может быть позаимствован как минимум из нескольких форм списка справочников (Контрагенты, Номенклатура и т.д.). Исходный код первой функции: >
Код 1C v 8.х Процедура ReportNow() Экспорт
ОткрытьОтчетПоИмени( "АнализЗаказовПоставщикам" ) ;
КонецПроцедуры
Сохранение отчета из 1С в Excel
Процедура формирования формы отчета принимает в качестве параметра название объекта метаданных конфигурации, в данном случае - "АнализЗаказовПоставщикам". Очевидно, что в зависимости от типа отчета процедура будет меняться пропорционально используемым реквизитам. В рассматриваемом примере добавляется отбор по контрагенту. Для своего ключевого поставщика заменить значение искомого наименования на нужное.
Код 1C v 8.х Процедура ОткрытьОтчетПоИмени(НазваниеОтчета) Экспорт
Отчет = Отчеты[НазваниеОтчета]. Создать( ) ;
Форма = Отчет. ПолучитьФорму( , , ) ;
Форма. Открыть( ) ;
Отчет. УстановитьНачальныеНастройки( ) ;
ТекОтбор = Отчет. УниверсальныйОтчет. ПостроительОтчета. Отбор. ДоговорКонтрагентаВладелец;
ТекОтбор. Использование = Истина ;
ТекОтбор. Значение = Справочники. Контрагенты. НайтиПоНаименованию( "Поставщик" ) ;
ТекОтбор. ВидСравнения = ВидСравнения. Равно;
Отчет. УниверсальныйОтчет. ПостроительОтчета. Отбор. Добавить( "ОсталосьОтгрузитьЕдиницОтчетов" ) ;
ТекОтбор1 = ОтчетОстатки. УниверсальныйОтчет. ПостроительОтчета. Отбор. ОсталосьОтгрузитьЕдиницОтчетов;
ТекОтбор1 . Использование = Истина ;
ТекОтбор1 . Значение = 0 ;
ТекОтбор1 . ВидСравнения = ВидСравнения. Больше;
Отчет. СостояниеОтгрузкиПоЗаказу = истина ;
Отчет. НеОтгружено = Истина ;
Отчет. ОтгруженоЧастично = Истина ;
Отчет. СформироватьОтчет( ФормаОтчета. ЭлементыФормы. ПолеТабличногоДокументаРезультат) ;
мПутьШаблон= "C:\1C\Service" ;
мФайлШаблон= "ЗаказыПоставщику.xls" ;
ИмяФайла = мПутьШаблон + "\" + мФайлШаблон;
Если Не ИмяФайла = Неопределено Тогда
Форма. ЭлементыФормы. ПолеТабличногоДокументаРезультат. СохранятьСвойстваОтображения = Истина ;
Форма. ЭлементыФормы. ПолеТабличногоДокументаРезультат. Записать( ИмяФайла, ТипФайлаТабличногоДокумента. XLS97) ;
КонецЕсли ;
ФормаОтчета. Закрыть( ) ;
КонецПроцедуры
Для того, чтобы отладить обработку в режиме 1С:Предприятие, запущенного из конфигуратора можно создать экранную форму обработки и разместить в ней следующую процедур автоматического запуска отлаживаемого отчета:
Код 1C v 8.х Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = истина ;
ОткрытьОтчетПоИмени( "АнализЗаказовПоставщикам" ) ;
КонецПроцедуры
Надеемся, что успешная комбинация внешней обработки для запуска отчета по расписанию и vbscript поможет в автоматизации бизнеса вашего предприятия. Данная редакция настроек больше ориентирована на менеджера поставщика для вашей компании, что отслеживать взаимное движение товаров и документов.
Источник
Руководство компании, хочет получать оперативную сводку продаж по фирме Категория:
Работа с Интернет, Почтой (Mail), FTP Как выгрузить табличный документ в excel Процедура сохраняет табличный документ в файл excel и открывает его
Код 1C v 8.х Процедура ОткрытьТабличныйДокументВExcel(ТабДокумент,ИмяФайла) Экспорт
ИмяФайла = Строка( ИмяФайла) + ".xls" ;
Каталог = КаталогВременныхФайлов( ) ;
ПолныйПутьКФайлу = Каталог + ИмяФайла;
Попытка
ТабДокумент. Записать( ПолныйПутьКФайлу, ТипФайлаТабличногоДокумента. XLS) ;
Сообщить( "Записан новый файл " + ПолныйПутьКФайлу) ;
ЗапуститьПриложение( ПолныйПутьКФайлу) ;
Исключение
СообщитьОбОшибке( ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецПроцедуры
Категория:
Табличный документ Выгрузка в PDF из 1С (Средствами OpenOffice) Возникла задача отправлять счета почтой. PDFcreator не подошёл поскольку не удалось вместить счёт на одну страницу по ширине. Решил попробовать OpenOffice. Как сохранять в PDF нашёл быстро, а вот как уместить счёт на одну страницу вширь искал долго.
В версии 1С 8.2.232 появилась возможность сохранять табличный документ в xls файл на сервера под линуксом. А вот работать с Опеном офисом из-под линукса пока не получается. Собственно комментари ненужны. Вот весь код. Самое интересное это бодание со стилями страниц в Опене Офисе. Жаль что этот фрагмент работает только на клиенте. На сервере вопрос не решается *08
Код 1C v 8.2 УП Процедура КнопкаВыполнитьНажатие(Кнопка)
Если Письмо. Основание. Пустая( ) Тогда
Возврат
КонецЕсли ;
Попытка
ServiceManager = Новый COMОбъект( "com.sun.star.ServiceManager" ) ;
Исключение
Возврат
КонецПопытки ;
Заказ = Письмо. Основание. ПолучитьОбъект( ) ;
Расшифровка= Новый Структура;
Расшифровка. Вставить( "СсылкаНаВнешнююОбработку" , Константы. ПФСчетаДляКлиента. Получить( ) ) ;
Расшифровка. Вставить( "ВидПечатнойФормы" , Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма) ;
Расшифровка. Вставить( "НомерСтроки" , 1 ) ;
тд = УниверсальныеМеханизмы. НапечататьВнешнююФорму( Заказ, Расшифровка) ;
ВременныйФайл = ПолучитьИмяВременногоФайла( ) ;
ВременныйФайлXLS = ВременныйФайл + ".xls" ;
ВременныйФайлPDF = ВременныйФайл + ".pdf" ;
тд. Записать( ВременныйФайлXLS, ТипФайлаТабличногоДокумента. XLS97) ;
Desktop = ServiceManager. createInstance( "com.sun.star.frame.Desktop" ) ;
НастройкиОткрытия = Новый COMSafeArray( "VT_VARIANT" , 1 ) ;
PropertyValue = ServiceManager. Bridge_GetStruct( "com.sun.star.beans.PropertyValue" ) ;
PropertyValue. Name = "Hidden" ;
PropertyValue. Value = Истина ;
НастройкиОткрытия. SetValue( 0 , PropertyValue) ;
ВременныйФайлXLS_какУРЛ = "file:///" + СтрЗаменить( ВременныйФайлXLS, "\" , "/" ) ;
ОпенОфис = Desktop. LoadComponentFromURL( ВременныйФайлXLS_какУРЛ, "_blank" , 0 , НастройкиОткрытия) ;
Стили = ОпенОфис. StyleFamilies. getByName( "PageStyles" ) ;
Для поз = 0 по Стили. count - 1 Цикл
МойСтиль = Стили. getByIndex( поз) ;
МойСтиль. ScaleToPagesX = 1 ;
КонецЦикла ;
НастройкиСохранения = Новый COMSafeArray( "VT_VARIANT" , 1 ) ;
PropertyValue = ServiceManager. Bridge_GetStruct( "com.sun.star.beans.PropertyValue" ) ;
PropertyValue. Name = "FilterName" ;
PropertyValue. Value = "calc_pdf_Export" ;
НастройкиСохранения. SetValue( 0 , PropertyValue) ;
ВременныйФайлPDF_какУРЛ = "file:///" + СтрЗаменить( ВременныйФайлPDF, "\" , "/" ) ;
ОпенОфис. storeToURL( ВременныйФайлPDF_какУРЛ, НастройкиСохранения) ;
ОпенОфис. close( - 1 ) ;
ОпенОфис = Неопределено ;
объектПисьмо = Письмо. ПолучитьОбъект( ) ;
стрВложение = объектПисьмо. Вложения. Добавить( ) ;
стрВложение. ИмяФайла = "Счёт " + Строка( Заказ. Номер) + ".pdf" ;
стрВложение. Файл = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ВременныйФайлPDF) ) ;
объектПисьмо. Записать( ) ;
Попытка
УдалитьФайлы( ВременныйФайлXLS) ;
УдалитьФайлы( ВременныйФайлPDF) ;
Исключение
КонецПопытки ;
КонецПроцедуры
Автор:
Трактор
Функция позволяющая выполнить выгрузку табличного документа в PDF средствами OpenOffice
Код 1C v 8.х
Функция ВыгрузитьТабличныйДокументВPDF(ДанныеВыгрузки, ПутьВыгрузки, ИмяФайлаБезРасширения)
Если НЕ ЗначениеЗаполнено( ПутьВыгрузки) Тогда
ПутьВыгрузки = КаталогВременныхФайлов( ) ;
КонецЕсли ;
ПутьВыгрузки = ? ( Прав( ПутьВыгрузки, 1 ) = "\" , ПутьВыгрузки, ПутьВыгрузки + "\" ) ;
РасширениеXSL = ".xls" ;
РасширениеPDF = ".pdf" ;
ПолноеИмяФайлаXLS = ПутьВыгрузки + ИмяФайлаБезРасширения + РасширениеXSL;
#Если Клиент Тогда
Состояние( "Создание временного файла..." ) ;
#КонецЕсли
Попытка
Если ТипЗнч( ДанныеВыгрузки) = Тип( "ТабличныйДокумент" ) Тогда
ДанныеВыгрузки. Записать( ПолноеИмяФайлаXLS, "XLS" ) ;
ИначеЕсли ТипЗнч( ДанныеВыгрузки) = Тип( "ТекстовыйДокумент" ) Тогда
ДанныеВыгрузки. Записать( ПолноеИмяФайлаXLS, "XLS" ) ;
Иначе
#Если Клиент Тогда
Сообщить( "Данные для выгрузки переданы в неподдерживаемом формате. Дальнейшее выполнение невозможно." + Символы. ПС + ОписаниеОшибки( ) ) ;
#КонецЕсли
Возврат 0 ;
КонецЕсли ;
Исключение
#Если Клиент Тогда
Сообщить( "Произошла ошибка при выгрузке временного файла. Возможно ошибка доступа к папке, в которую происходит запись." + Символы. ПС + ОписаниеОшибки( ) ) ;
#КонецЕсли
Возврат 0 ;
КонецПопытки ;
Попытка
#Если Клиент Тогда
Состояние( "Открытие компоненты OpenOffice..." ) ;
#КонецЕсли
ServiceManager = Новый COMОбъект( "com.sun.star.ServiceManager" ) ;
Скрипт = Новый COMОбъект( "MSScriptControl.ScriptControl" ) ;
Скрипт. language = "javascript" ;
Скрипт. AddObject( "OpenOffice" , ServiceManager) ;
#Если Клиент Тогда
Состояние( "Открытие временного файла..." ) ;
#КонецЕсли
Скрипт. eval( "Массив=new Array()" ) ;
Массив = Скрипт. eval( "Массив" ) ;
Скрипт. eval( "Массив[0] = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')" ) ;
Скрипт. eval( "Массив[0].Name = 'Hidden'" ) ;
Скрипт. eval( "Массив[0].Value = true" ) ;
Скрипт. AddCode( "function SetItem(ind,val){Массив[ind]=val}" ) ;
Скрипт. AddObject( "ServiceManager" , ServiceManager) ;
Desktop = ServiceManager. createInstance( "com.sun.star.frame.Desktop" ) ;
Document = Desktop. LoadComponentFromURL( "file:///" + ПолноеИмяФайлаXLS, "_blank" , 0 , Массив) ;
#Если Клиент Тогда
Состояние( "Запись в PDF..." ) ;
#КонецЕсли
Скрипт. eval( "Массив2=new Array()" ) ;
Массив2 = Скрипт. eval( "Массив2" ) ;
Скрипт. eval( "Массив2[0] = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')" ) ;
Скрипт. eval( "Массив2[0].Name = 'FilterName'" ) ;
Скрипт. eval( "Массив2[0].Value = 'writer_pdf_Export'" ) ;
ПолноеИмяФайлаPDF = "file:///" + СтрЗаменить( ПолноеИмяФайлаXLS, РасширениеXSL, РасширениеPDF) ;
ПолноеИмяФайлаPDF = СтрЗаменить( ПолноеИмяФайлаPDF, ВРег( РасширениеXSL) , РасширениеPDF) ;
ПолноеИмяФайлаPDF = СтрЗаменить( ПолноеИмяФайлаPDF, "\" , "/" ) ;
Document. storeToURL( ПолноеИмяФайлаPDF, Массив2 ) ;
Document. close( - 1 ) ;
Document = Неопределено ;
Desktop = Неопределено ;
#Если Клиент Тогда
Состояние( "Удаление временного файла..." ) ;
#КонецЕсли
Попытка
УдалитьФайлы( ПолноеИмяФайлаXLS) ;
Исключение
#Если Клиент Тогда
Сообщить( "Произошла ошибка при удалении временного файла. Возможно, потребуется удалить его вручную." + Символы. ПС + ОписаниеОшибки( ) ) ;
#КонецЕсли
КонецПопытки ;
ПолноеИмяФайлаPDF = СтрЗаменить( ПолноеИмяФайлаPDF, "file:///" , "" ) ;
ПолноеИмяФайлаPDF = СтрЗаменить( ПолноеИмяФайлаPDF, "/" , "\" ) ;
#Если Клиент Тогда
Состояние( "Выгрузка выполнена." ) ;
Предупреждение( "Выгрузка выполнена." + Символы. ПС + ПолноеИмяФайлаPDF) ;
#КонецЕсли
Возврат ПолноеИмяФайлаPDF;
Исключение
Document. close( - 1 ) ;
#Если Клиент Тогда
Предупреждение( ОписаниеОшибки( ) ) ;
#КонецЕсли
Возврат 0 ;
КонецПопытки
КонецФункции
Автор:
doom_2001 Категория:
Работа с Microsoft Office и OpenOffice Установка полей и масштаба документа при сохранении из 1С MS Excel
Код 1C v 8.х Попытка
Excel = Новый COMОбъект( "Excel.Application" ) ;
Исключение
Сообщить( "ВНИМАНИЕ! TOpenOffice не установлен или недостаточно прав доступа!
| - " + ОписаниеОшибки( ) , СтатусСообщения. ОченьВажное) ;
Возврат ;
КонецПопытки ;
ТабДокумент = ПечатьЦенника( ВидЦенника) ;
ИмяФайла = ПутьДляСохранения+ "\" + ТабДокумент. ИспользуемоеИмяФайла+ ".xls" ;
ТабДокумент. Записать( ИмяФайла, ТипФайлаТабличногоДокумента. XLS97) ;
МакетОформления = Неопределено ;
Excel. Workbooks. Open( ИмяФайла) ;
КнигаExcel = Excel. Workbooks. Item( Excel. Workbooks. Count) ;
ЛистExcel = КнигаExcel. WorkSheets. Item( 1 ) ;
КнигаExcel. Activate( ) ;
ЛистExcel. Activate( ) ;
ЛистExcel. PageSetup. LeftMargin = 28 ;
ЛистExcel. PageSetup. RightMargin = 28 ;
ЛистExcel. PageSetup. TopMargin = 25 ;
ЛистExcel. PageSetup. BottomMargin = 25 ;
Если ТабДокумент. ОриентацияСтраницы = ОриентацияСтраницы. Ландшафт Тогда
ЛистExcel. PageSetup. Orientation = 2 ;
Иначе
ЛистExcel. PageSetup. Orientation = 1 ;
КонецЕсли ;
ЛистExcel. PageSetup. Zoom = ТабДокумент. МасштабПечати;
КнигаExcel. Save( ) ;
Excel. Visible = 1 ;
Excel. Quit( ) ;
OpenOffice Calc
Код 1C v 8.х Попытка
СервисМанагер = Новый COMОбъект( "Com.Sun.Star.ServiceManager" ) ;
Исключение
Сообщить( "Не могу создать объект Open Office!
| - " + ОписаниеОшибки( ) , СтатусСообщения. ОченьВажное) ;
Возврат ;
КонецПопытки ;
ТабДокумент = ПечатьЦенника( ВидЦенника) ;
ИмяФайла = ПутьДляСохранения+ "\" + ТабДокумент. ИспользуемоеИмяФайла+ ".xls" ;
ТабДокумент. Записать( ИмяФайла, ТипФайлаТабличногоДокумента. XLS97) ;
МакетОформления = Неопределено ;
Скрипт = новый COMОбъект( "MSScriptControl.ScriptControl" ) ;
Скрипт. language = "javascript" ;
Скрипт. eval( "Massiv=new Array()" ) ;
Массив = Скрипт. eval( "Massiv" ) ;
Скрипт. AddObject( "СервисМанагер" , СервисМанагер) ;
Скрипт. eval( "Massiv[0]=СервисМанагер.Bridge_GetStruct('com.sun.star.beans.PropertyValue')" ) ;
Скрипт. eval( "Massiv[0].Name='Hidden'" ) ;
Скрипт. eval( "Massiv[0].Value=true" ) ;
Стол = СервисМанагер. createInstance( "com.sun.star.frame.Desktop" ) ;
ВремПуть = СтрЗаменить( ПутьДляСохранения, "\" , "/" ) ;
ВремПуть = СтрЗаменить( ВремПуть, " " , "%20" ) ;
УРЛ = "file:///" + ВремПуть+ "/" + ТабДокумент. ИспользуемоеИмяФайла+ ".xls" ;
Документ = Стол. LoadComponentFromURL( УРЛ, "_blank" , 0 , Массив) ;
Документ. lockControllers( ) ;
Документ. addActionLock( ) ;
Листы= Документ. getSheets( ) ;
ЛистДанные= Листы. getByIndex( 0 ) ;
СтилиСтраницы= Документ. StyleFamilies. getByName( "PageStyles" ) ;
ПараметрыСтраницы= СтилиСтраницы. getByName( ЛистДанные. PageStyle) ;
ПараметрыСтраницы. LeftMargin = ТабДокумент. ПолеСлева * 100 ;
ПараметрыСтраницы. RightMargin = ТабДокумент. ПолеСправа * 100 ;
ПараметрыСтраницы. TopMargin = ТабДокумент. ПолеСверху * 100 ;
ПараметрыСтраницы. BottomMargin = ТабДокумент. ПолеСнизу * 100 ;
Если ТабДокумент. ОриентацияСтраницы = ОриентацияСтраницы. Ландшафт Тогда
ПараметрыСтраницы. IsLandscape = Истина ;
ПараметрыСтраницы. Width = 29700 ;
ПараметрыСтраницы. Height = 21000 ;
Иначе
ПараметрыСтраницы. IsLandscape = Ложь ;
ПараметрыСтраницы. Width = 21000 ;
ПараметрыСтраницы. Height = 29700 ;
КонецЕсли ;
ПараметрыСтраницы. PageScale = ТабДокумент. МасштабПечати;
Документ. unlockControllers( ) ;
Документ. removeActionLock( ) ;
Документ. store( ) ;
Документ. Close( Истина ) ;
Стол. terminate( ) ;
Категория:
Работа с Microsoft Office и OpenOffice Выбрать Остатки и Обороты по указанным счетам, отбор по субконто и выгрузка результата в EXCEL Код 1C v 8.х Запрос= Новый Запрос;
Запрос. Текст= "
|ВЫБРАТЬ
| ХозрасчетныйОстаткиИОбороты.Счет,
| ХозрасчетныйОстаткиИОбороты.Субконто1,
| ХозрасчетныйОстаткиИОбороты.Субконто2,
| ХозрасчетныйОстаткиИОбороты.Субконто3,
| ХозрасчетныйОстаткиИОбороты.Организация,
| ХозрасчетныйОстаткиИОбороты.СуммаОборот,
| ХозрасчетныйОстаткиИОбороты.СуммаОборотДт,
| ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
| &ДатаНач,
| &ДатаКон,
| Период,
| ,
| Счет В (&Cчета),
| ," ;
Если Не Контрагент. Пустая( ) Тогда
Запрос. Текст= Запрос. Текст+ "
| Субконто1 = &Контрагент
| ИЛИ Субконто2 = &Договор" ;
КонецЕсли ;
Запрос. Текст= Запрос. Текст+ "
|) КАК ХозрасчетныйОстаткиИОбороты
|" ;
СписокСчетов= Новый СписокЗначений;
СписокСчетов. Добавить( ПланыСчетов. Хозрасчетный. РасчетыСПоставщикамиИПодрядчиками) ;
СписокСчетов. Добавить( ПланыСчетов. Хозрасчетный. РасчетыПоАвансамВыданным) ;
Запрос. УстановитьПараметр( "Cчета" , СписокСчетов) ;
Запрос. УстановитьПараметр( "ДатаКон" , ДатаК) ;
Запрос. УстановитьПараметр( "ДатаНач" , ДатаН) ;
Запрос. УстановитьПараметр( "Договор" , Договор) ;
Запрос. УстановитьПараметр( "Контрагент" , Контрагент) ;
Результат = Запрос. Выполнить( ) ;
ТабДок= ЭлементыФормы. ТД;
ТабДок. Очистить( ) ;
ПечатьТЗвТаб( ТабДок, Результат) ;
Режим = РежимДиалогаВыбораФайла. Сохранение;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытияФайла. ПолноеИмяФайла = "" ;
Фильтр = "Excel(*.xls)|*.xls" ;
ДиалогОткрытияФайла. Фильтр = Фильтр;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
ДиалогОткрытияФайла. Заголовок = "Выберите куда сохранить файл Excel" ;
Если ДиалогОткрытияФайла. Выбрать( ) Тогда
ПутьКФайлу = ДиалогОткрытияФайла. ПолноеИмяФайла;
КонецЕсли ;
ТабДок. Записать( ПутьКФайлу, ТипФайлаТабличногоДокумента. XLS97) ;
Категория:
Запросы Сохранение отчета в Excel и его открытие Код 1C v 8.х ИмяФайла = "Отчет.xls" ;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
ДиалогОткрытияФайла. ПолноеИмяФайла = ИмяФайла;
ДиалогОткрытияФайла. Каталог = КаталогВременныхФайлов( ) ;
ДиалогОткрытияФайла. Фильтр = "Файлы Microsoft Excel (*.xls)|*.xls|Все файлы (*.*)|*.*" ;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
Если ДиалогОткрытияФайла. Выбрать( ) тогда
ЭлементыФормы. ПолеОтчета. Записать( ДиалогОткрытияФайла. ПолноеИмяФайла, ТипФайлаТабличногоДокумента. XLS) ;
ДокExcel = ПолучитьCOMОбъект( "" , "Excel.Application" ) ;
ДокExcel. Workbooks. Open( ДиалогОткрытияФайла. ПолноеИмяФайла) ;
ДокExcel. Visible = 1 ;
КонецЕсли ;
Категория:
Работа с Microsoft Office и OpenOffice