Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Оцените дизайн сайта

Супер
Симпатично
Пойдет
Ничего хорошего
Просто клиника


Результаты
Другие опросы

Всего голосов: 890
Комментарии: 2


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Статьи и обзоры



Отправка печатных форм 1С как рисунка по E-mail

1С-Предприятие - это программный комплекс, контролирующий все стадии товарооборота, от поступления товара на склад до его продажи и проведения через бухгалтерские книги. Первоначально этот комплекс задумывался как бухгалтерская программа и назывался 1C-Бухгалтерия.

В этой функции переданные параметры записываются в список значений, который передается внешней обработке ПараметрыОтправкиПочты.ert в подкаталоге ExtForms каталога базы данных. Запрос параметров имеет вид:

title


Возвращенные значения записываются в файл, параметры которого (путь, имя, и т.п.) заданы в конце глобального модуля.
В самой обработке ничего интересного нет: чтение параметров из списка, отображение и проверка параметров при нажатии кнопки Отправить. Если не заданы необходимые параметры (ОтКого, Кому) или адреса E-Mail указаны не правильно - будет выдано сообщение и форма не закроется.

Рассмотрим параметры вызова даной функции:

* Заголовок - заголовок формы, на рисунке - синяя надпись "Тестовый документ №3 от 30.04.04";
* Кому, ОтКого, Копия - E-mail или список E-Mail`ов (через ",");
* Тема, Сообщение - соответствующие параметры письма;
* Запретить - какие поля запрещены для редактирования (на рисунке - поле Тема);
* БезФормы - если 1: форма не отображается и при правильных параметрах письмо отправится автоматически.


Следующая функция вызывает эту и если все прошло успешно - вызывает внешнюю обработку для небольшой предподготовки таблицы при печати и отправки ее:

Код
// ======================================
// Запрос параметров, предподготовка таблицы и отправка почты
Функция глОтправитьПоПочтеРисунок(Таб, Знач Заголовок, Знач Кому, Знач ОтКого,
Знач Копия="", Знач Тема="", Знач Сообщение="",
Знач Запретить="", Знач БезФормы=0, Знач Масштаб=0) Экспорт
Перем Сп, Файл;

// Запрашиваем подтверждения параметров
Файл=глПараметрыОтправкиПочты(Заголовок,Кому,ОтКого,
Копия,Тема,Сообщение,Запретить,БезФормы);

Если ПустаяСтрока(Файл)=1 Тогда
Сообщить("Почта не была отправлена","!");
Возврат 0;
КонецЕсли;

// Устанавливаем значения для отправки и инициализируем отправку
Сп=СоздатьОбъект("СписокЗначений");
Сп.Установить("Таблица", Таб);
Сп.Установить("Масштаб", Масштаб);
ОткрытьФормуМодально("Отчет", Сп, КаталогИБ()+"ExtForms\ОтправитьКакРисунок.ert");

СТаб=СимволТабуляции;
глЗаписатьЛог("ОтправитьПоПочтеРисунок", Шаблон(
"ОтКого:[ОтКого]"+СТаб+"Кому:[Кому]"+СТаб+"Копия:[Копия]"+СТаб+"Тема:[Тема]"));
// В этот момент ушло на принтер, но возможно еще не обработалось
Сообщить("Отправляется. Ожидайте копию письма на адрес: "+ОтКого);
Возврат 1;
КонецФункции


Здесь уже большая функциональность перенесена на обработку. Она (обработка) вообще не открывается, только выполняет некоторые действия. Рассмортим параметры:

* Таб - Значение типа "Таблица", которую и будем печатать;
* Заголовок, Кому, ОтКого, Копия, Тема, Сообщение, Запретить, БезФормы - просто передаются в функцию глПараметрыОтправкиПочты и подробно рассмотрены в ней;
* Масштаб - масштаб печати таблицы. Если не задан - автомасштаб по ширине.


В обработке всего 2 процедуры: ПроверитьПараметр для проверки корректности переданных значений и ПриОткрытии, в которой подготавливается и печатается таблица. Выглядит весь модуль обработки так:

Код: (1c)
Код
Перем Принтер;
// ======================================
Функция ПроверитьПараметр(Сп, Назв, ВсеОк, Обязат=1, Умолч="", Тип="")
Зн=Сп.Получить(Назв);
Если (ПустоеЗначение(Зн)=1) Тогда
Если (Обязат=1) Тогда
ВсеОк=0;
Сообщить(Шаблон("Не задан обязательный параметр: '[Назв]'"),"!");
Иначе
Зн=Умолч;
КонецЕсли;
КонецЕсли;
Если ПустаяСтрока(Тип)=0 Тогда
ТипЗн=ТипЗначенияСтр(Зн);
Если НРег(ТипЗн)<>НРег(Тип) Тогда
ВсеОк=0;
Сообщить(Шаблон("Для '[Назв]' не верен тип ('[ТипЗн]'). Ожидаемый тип: '[Тип]'"),"!");
КонецЕсли;
КонецЕсли;

Возврат Зн;
КонецФункции
// ======================================
Процедура ПриОткрытии()
// Проверим корректность вызова
Путь=""; Назв="";
РасположениеФайла(Путь, Назв);
Назв=СтрЗаменить(Назв,".ert","")+": ";
СтатусВозврата(0); // а вообще не нужно открывать!
ВсеОк=1;
Если Форма.МодальныйРежим()=0 Тогда
Сообщить(Назв+"Запустите обработку в модальном режиме!","!");
ВсеОк=0;
КонецЕсли;
Сп=Форма.Параметр;
Если ТипЗначенияСтр(Сп)<>"СписокЗначений" Тогда
Сообщить(Назв+"В качестве параметра необходим СписокЗначений!","!");
ВсеОк=0;
КонецЕсли;
Если ВсеОк=0 Тогда Возврат; КонецЕсли;

Таб=ПроверитьПараметр(Сп, "Таблица", ВсеОк, 1, "", "Таблица");
Масштаб=Число(ПроверитьПараметр(Сп, "Масштаб", ВсеОк, 0, -1));

Если ВсеОк=0 Тогда Возврат; КонецЕсли;
Состояние("Обработка таблицы...");
Таб.Область().ЦветТекста(0); // Все черное, кроме...
// Пробежимся по всем ячейкам и поменяем контроль=авто,
// т.е. красный цвет на отрицательных значениях
// на черный цвет
Для И1=1 По Таб.ВысотаТаблицы() Цикл
Для И2=1 По Таб.ШиринаТаблицы() Цикл
Обл=Таб.Область(И1,И2,И1,И2);
Если Обл.Контроль()=5 Тогда Обл.Контроль(1);
ИначеЕсли Обл.Контроль()=6 Тогда Обл.Контроль(3);
КонецЕсли;
КонецЦикла;
КонецЦикла;
// Чтобы параметры печати не путались с другими - даем им имя
Таб.Опции(,,,,"Как рисунок "+Принтер,,,);
// Только книжная ориентация
Таб.ПараметрыСтраницы(1,,,5,5,5,5,,,,,Принтер);
// Автомасштабирование по ширине, если явно не задан масштаб
Если Масштаб>0 Тогда Таб.ПараметрыСтраницы(,Масштаб,,,,,,,,,,);
Иначе Таб.ПараметрыСтраницы(,,,,,,,,,1,,); КонецЕсли;
// Только 1 экземпляр
Таб.ЭкземпляровНаСтранице(1);
Таб.КоличествоЭкземпляров(1);
// Вперед!
Таб.Напечатать(0);
КонецПроцедуры
Принтер="Send EMail";


Вот практически и все, что касается программы в 1С. Некоторые сервисные функции, которые не были описаны здесь, можно посмотреть в примере конфигурации. Таким образом ничего сложного здесь нет. Больше сложностей вызывает настройка системы для правильной работы. Выглядит отправленный документ приблизительно так:

title


Замечания в процессе эксплуатации

Сразу скажу - в боевом режиме система работает недолго (с 15.04.2004), но даже за это время были замечены некоторые "особенности" работы:

* Формат tiff оказался не таким уж стандартным. Потому пришлось его заменить на png. Сделать это нужно в двух местах: в суффиксе исходящего файла в скрипте (чтобы Postie правильно поставил его Content-Type:) и в настройках GS (параметр -sDEVICE=pngmono собственно и задает выходной формат файла). Можно заменить и на еще более стандартный jpeg, но при этом сильно вырастет размер файла. К сожалению gif уже не поддерживается в текущей версии GS (как я понял из документации - из-за возможных проблем с лицензированием этого формата). Можно добится поддержки gif, выдрав ее из исходников предыдущих версий и перекомпилировав текущую, но я пока этого не делал. Возникла мысль передавать в настроечном файле (%UserProfile%\SendMail\mail.ini) параметры, как отправлять изображения (jpeg, tif, png; color/mono; ...) и в скрипте динамически менять.
* PostScript шрифты, идущие в поставке GS, не так хорошо "вылизаны", как TrueType. Потому русские буквы выглядят жирнее англиских. Пока жалоб на это не было :-)
* В новой версии Postie у меня почему-то не работает ключ -bcc (ошибки не выдает, но и не отправляет по указанным адресам). Так и не разобрался - пришлось откатится на старую версию (POSTIE Version 4)
* Хотя ломать ничего и не пришлось, но все-таки мы нарушаем лицензию Postie, который "free for personal use". Может кто знает другую программу отправки почты из коммандной строки?

Благодарности

Моему любимому директору - за неуемный ум и новые интересные задания.
Вадиму Ханасюку - за неопубликованную здесь, но полезную компоненту SysInfo (получение каталога профиля пользователя по имени) и помощь в поиске нужного софта.
Всем сотрудникам, которые не мешали работать.





Нет комментариев. Почему бы Вам не оставить свой?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



Статьи и обзоры Программирование Отправка печатных форм как рисунка по E-mail Все началось до банального просто любимый директор сказал & quot Хочу Аргументация была следующей Переводится много бумаги для печати отправки по факсу клиентов потому отправленные счета сразу выбрасываются найти нужный документ даже через день нереально Электронная почта есть наши дни всех каждого& то что сам ею не пользуется другой вопрос Тратится меньше времени персонала нужно сидеть ждать перед