Программное сохранение отчета СКД в файл Excel

Задача: по расписанию формировать файл отчета СКД и отправлять его по электронной почте.

Решение:

1. Формируем файл

таб1=новый ТабличныйДокумент();
	
	СКД=Отчеты.ПрибыльЗаПериод.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Настройки=СКД.НастройкиПоУмолчанию;
	Дата1=Настройки.ПараметрыДанных.Элементы.Найти("Дата1");
	Дата1.Значение=НачалоМесяца(ТекущаяДата());
	Дата2=Настройки.ПараметрыДанных.Элементы.Найти("Дата2");
	Дата2.Значение=КонецДня(ТекущаяДата());
	ВидЦены=Настройки.ПараметрыДанных.Элементы.Найти("ВидЦены");
	ВидЦены.Значение=Справочники.ВидыЦен.НайтиПоНаименованию("Основная цена закупки");
	Магазин=Настройки.ПараметрыДанных.Элементы.Найти("Магазин");
	Магазин.Значение=Справочники.Магазины.НайтиПоНаименованию("Вологда Торговля");

	 	Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
		КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    
		
        //Передаем в макет компоновки схему, настройки и данные расшифровки
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, Расшифровка);    
        ВнешниеПараметры = Новый Структура;    
		
        //Выполним компоновку с помощью процессора компоновки
        ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеПараметры, Расшифровка);    
		
        //Выводим результат в табличный документ
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(таб1);    
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);    	 
		
		таб1.Записать("c:\temp\моржа.xls",ТипФайлаТабличногоДокумента.XLS);

2.Отправляем его по почте

	ПараметрыПочты = новый ИнтернетПочтовыйПрофиль;
		ПараметрыПочты.АдресСервераSMTP = пснмп;
		ПараметрыПочты.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
		ПараметрыПочты.ПользовательSMTP = плогин;
		ПараметрыПочты.ПарольSMTP=ппароль;
		
		Письмо=новый ИнтернетПочтовоеСообщение;
		Письмо.Тема="Комплексный отчет по продажам в магазине Вологда Торговля";
		Письмо.ИмяОтправителя="1С отправка отчетов";
		Письмо.Отправитель=побратный;
		Письмо.Получатели.Добавить(пполучатель);	
		Письмо.Получатели.Добавить("blabla@mail.ru");	

		Письмо.Тексты.Добавить("Комплексный отчет по продажам в магазине Вологда Торговля");		
		Письмо.Вложения.Добавить("c:\temp\моржа.xls");
		
		Подключение=новый ИнтернетПочта;
		Попытка
		Подключение.Подключиться(ПараметрыПочты);
		Подключение.Послать(Письмо);        

Винни-Пух и день забот (с)

  1. У родителей приставы сняли с карточки 40 тыс за долги однофамильцы. А Сбербанк с радостным повизгиванием, не проверив, эти деньги им перевел. У пенсионеров! Последние! Живите как хотите, пока там разберуться, пока вернут.. Наверняка еще за это никто и наказание не понесёт.
  2. Почта России. На обслуживание 3-х человек потратили:
    — оформление подписки на журнал — 12 минут
    — забрать посылку наложным с платежом  — 14 минут
    — заплатить бабушке за газ 6 минут,
    Итого:  32 минуты. На элементарные действия! При чем девушка не сидела без дела. Всё чтото писала, печатала, в ПК информацию вводила. Было плохо. Стало еще хуже. Сделайте обратно плохо!

Запрос выбора SSL сертификата в компоненте WebView

Задача: при открытии страницы https необходимо позволить пользователю выбрать необходимый сертификат ssl из установленых в хранилище.

Решение:

private class NocWebViewClient extends WebViewClient {
    @Override
    public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) {
        Log.v(getClass().getSimpleName(), "===> certificate required!");

        KeyChain.choosePrivateKeyAlias(Form1.this, new KeyChainAliasCallback(){
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void alias(String alias) {
                Log.v(getClass().getSimpleName(), "===>Key alias is: " + alias);
                try {
                    PrivateKey changPrivateKey = KeyChain.getPrivateKey(Form1.this, alias);
                    X509Certificate[] certificates = KeyChain.getCertificateChain(Form1.this, alias);
                    Log.v(getClass().getSimpleName(), "===>Getting Private Key Success!" );
                    request.proceed(changPrivateKey, certificates);
                } catch (KeyChainException e) {
                    Log.e(getClass().getSimpleName(), Util.printException(e));
                } catch (InterruptedException e) {
                    Log.e(getClass().getSimpleName(), Util.printException(e));
                }
            }
        },new String[]{"RSA"}, null, null, -1, null);
    }
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        return true;
    }
    @Override
    public void onPageFinished(WebView view, String url){

    }

О понятности кода..

Вот если выбирать как писать код, вот так:

 $url = ($path == '') ? 'javascript:void(0)' : "index.php?content_page=$path";

Или вот так:

if ($path==""){
   $url='javascript:void(0)';
} else {
   $url="index.php?content_page=$path";
};

То я выберу последнее. И меня коробит немножко когда читаю код, написаный в «коротком» стиле. Не роботы же. Может конечно это сила привычки, и со временем, если постоянно писать «сокращенный» код то он становится читаемым «на лету». Но я всё-же за более «человечный» код, чтоб было понятно сразу, без разбора конструкции.