14 июн. 2017 г.

Подключиться к веб-сервису с Android

  • Качаем ksoap2.
  • В build.gradle пишем
dependencies {
...
repositories {
    maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' }
}
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1'
...
}
  • В манифест добавляем
<uses-permission android:name="android.permission.INTERNET" />
  • Главный класс выглядит так
package com.example.jaroslavh.ws1;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.ksoap2.HeaderProperty;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private static final String NAMESPACE = "http://www.w3.org/2001/XMLSchema";
    private static final String METHOD_NAME = "echo"; //метод веб-сервиса
    private static final String SOAP_ACTION = "tns:swtrade-wms#wms_tcd:echo"; // берем из xml страницы веб-сервиса
    private static String URL = "http://192.168.0.96/veres/uk_UA/ws/wms_tcd"; //  адрес веб-сервиса
    
    private TextView tv;
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView) findViewById(R.id.TextView); // на форме поле вывода
        btn = (Button) findViewById(R.id.button); // на форме кнопка

        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                new MyTask().execute();
            }

        });

    }

    public class MyTask extends AsyncTask<Void, Void, String> {

        ProgressDialog progress;
        String response = "";

        public void onPreExecute() {

            super.onPreExecute();
        }

        @Override
        protected String doInBackground(Void... arg0) {

            final SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            request.addProperty("text", "jaroslav"); // веб-сервис принимает один параметр text в виде строки

            final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

            envelope.setOutputSoapObject(request);
            envelope.dotNet = true;

            try {

                List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
                headerList.add(new HeaderProperty("Authorization", "Basic " + org.kobjects.base64.Base64.encode("admin:123".getBytes()))); // авторизация на веб-сервисе

                HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                androidHttpTransport.call(SOAP_ACTION, envelope, headerList);

                SoapObject result = (SoapObject) envelope.getResponse();
                response = result.toString();

            } catch (IOException e) {
                response = e.toString();
            } catch (XmlPullParserException e) {
                response = e.toString();
            }

            return response;
        }

        @Override
        public void onPostExecute(String res) {

            if (!(res.equalsIgnoreCase(""))) {
                tv.setText(res);
            }

        }
    }

}

27 мая 2017 г.

Как подключиться к базе firebird из android

Для подключения с android strudio нужно подготовиться, а именно:
  • В android studio ->  New module модуль Jaybird_2_2_12.aar (данный модуль взят с оф.сайта
  • После импорта появиться файл  build.gradle отвечающий за данный модуль. Туда пишем
configurations.maybeCreate("default")
artifacts.add("default", file('Jaybird_2_2_12.aar'))
  •  В главный файл  build-gradle пишем
dependencies {
.................
compile project(':Jaybird_2_2_12')
}
  • В файл  firebird.conf который относиться к субд firebird (2.x)  пишем 
WireCrypt = Disabled
AuthServer = Legacy_Auth, Srp, Win_Sspi
AuthClient = Legacy_Auth, Srp, Win_Sspi

А вот главный класс android studio
package com.example.jaroslavh.myapplication;

import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        try {
            Test2();
            Toast toast = Toast.makeText(this, "Успішно", Toast.LENGTH_LONG);
            toast.show();
        } catch (Exception e) {
            Toast toast = Toast.makeText(this, e.toString(), Toast.LENGTH_LONG);
            toast.show();
        }

    }

    public void Test2() throws Exception {

        Class.forName("org.firebirdsql.jdbc.FBDriver");

        Properties props = new Properties();
        props.setProperty("user", "SYSDBA");
        props.setProperty("password", "masterkey");
        props.setProperty("encoding", "UTF8");

        Connection connection = DriverManager.getConnection(
                "jdbc:firebirdsql:192.168.0.96/3050:C:/IBExpert/db/TEST1.FDB",
                props);
    }
}
Выделенные строки отвечают за подключение к базе данных, которая развернут по адресу
192.168.0.96 с портом 3050, а сам файл базы данных C:/IBExpert/db/TEST1.FDB


15 мая 2017 г.

Получение данных из нескольких источников недопустимо

Есть ограничения в платформе 1С:Підприємство 8.3 (8.3.10.2168), ну и ниже версий.

Нельзя использовать одновременно соединение таблиц базы данных (например таблицы регистра) и данные из ВнешнеИсточникиДанных в запросах.

Обойти это ограничение возможно сначала обратиться к ВнешниеИсточникиДанных с помощью запроса, а результат запроса выгрузить в таблицу значений.

Далее сделать еще один запрос и в качестве источника данных выбрать ранее выгруженную таблицу значений.
А далее в этом запросе готовую таблицу значений соединяем с нашими данными из базы 1С (например, регистром сведений).

У меня данный пример реализован в функции ПолучитьТЗ()

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
 
 //так как нельзя использовать в одном запросе обращение к таблицам внешних 
 //источников данных и таблицам информационной базы 1С делаем такой ход
 ТаблицаЗначенийРезультат = ПолучитьТЗ();
 //получим ТЗ и ее запихнем в отчет
 
 Если ТаблицаЗначенийРезультат.Количество() = 0 Тогда 
  Возврат;
 КонецЕсли;
 
 СтандартнаяОбработка = Ложь; 
 СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
 
 Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
 
 ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; 
 КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
 
 МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
 
 //поместим ТЗ в отчет
 ВнешнийНаборДанных = Новый Структура("fdu92doc", ТаблицаЗначенийРезультат);
 
 ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
 ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
 
 ДокументРезультат.Очистить();
 
 ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
 ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
 ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
 
КонецПроцедуры

Функция ПолучитьТЗ()
  
 Запрос = Новый Запрос;
 Запрос.Текст = 
 "ВЫБРАТЬ
 | AdjacentDoc.OID
 |ИЗ
 | ВнешнийИсточникДанных.fdu92doc.Таблица.AdjacentDoc КАК AdjacentDoc";
 
 fdu92doc = Запрос.Выполнить().Выгрузить();
   
 Запрос = Новый Запрос;
 Запрос.Текст = 
 "ВЫБРАТЬ
 | fdu92doc.OID
 |ПОМЕСТИТЬ ВременаяТаблица
 |ИЗ
 | &fdu92doc КАК fdu92doc
 |;
 |
 |//////////////////////////////////////////////
 |ВЫБРАТЬ 
 |  fdu92doc.OID
 |ИЗ 
 | РегистрСведений.fdu92doc КАК fdu92doc 
 |  СОЕДИНЕНИЕ ВременаяТаблица КАК ВременаяТаблица
 |ПО fdu92doc.OID = ВременаяТаблица.OID";
 
 Запрос.УстановитьПараметр("fdu92doc", fdu92doc); 
 
 Возврат Запрос.Выполнить().Выгрузить();
 
КонецФункции

22 апр. 2017 г.

Изменить стандартный сигнал 1С

Для сигнализирования события в 1С есть метод глобального контекста
Сигнал();
Но, что если нужно изменить мелодию звукового сигнала?! Для этого можно использовать внешние компоненты, например MSScriptControl.ScriptControl, а можно в изменить мелодию в звуковых настройках операционной системы



и после этого 1С будет воспроизводить тот звуковой сигнал, который будет установлен.

Компьютер не переходит в ждущий режим \ сон

Пуск - Выполнить - cmd 
powercfg.exe -requests
вывод команды был таким 
EXECUTION:
[PROCESS] \Device\HarddiskVolume6\Program Files (x86)\Google\Chrome\Application\chrome.exe Uploading data
теперь в командной строки выполняю по очереди
powercfg -requestsoverride PROCESS chrome.exe awaymode display system
powercfg -requestsoverride PROCESS chrome.exe awaymode display system execution
powercfg -requestsoverride PROCESS LockScreenContentServer.exe

21 апр. 2017 г.

Применить группировку \ сортировку для всех папок в проводнике

Чтобы применить понравившеюся группировку или сортировку в проводнике для всех остальных папок нужно открыть любую папку в проводнике, настроить нужную группировку или сортировку

далее зайти в параметры проводника не закрывая папку, где настроена группировка или сортировка 

и нажать кнопку Применить к папкам + ок


Получить предпоследнюю цену номенклатуры

      Ничего лучшего чем
ВЫБРАТЬ ПЕРВЫЕ 2
 ЦеныНоменклатуры.Период КАК Период,
 ЦеныНоменклатуры.Цена
ПОМЕСТИТЬ ПоследняяПредпоследняя
ИЗ
 РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
 ЦеныНоменклатуры.Номенклатура = &Номенклатура
 И ЦеныНоменклатуры.ТипЦен = &ТипЦен
 И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры

УПОРЯДОЧИТЬ ПО
 Период УБЫВ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
 ПоследняяПредпоследняя.Период КАК Период,
 ПоследняяПредпоследняя.Цена
ИЗ
 ПоследняяПредпоследняя КАК ПоследняяПредпоследняя

УПОРЯДОЧИТЬ ПО
 Период
не придумал, что бы получить предпоследнюю цену номенклатуры по определенному 
типу цен с определенной характеристикой

29 мар. 2017 г.

Задержка при смене раскладки клавиатуры

Windows 10 Version 10.0.15063.
При переключении языка ввода клавишами Ctrl+Пробел раскладка с задержкой переключается.

Нашел ветку
HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response
 Открыл параметр
DelayBeforeAcceptance
Изменил значение
с 1000 на 200 
Перезагрузил систему.


18 мар. 2017 г.

Не сохраняется цвет Форматированного документа 1С

Есть на форме поле с типом ФорматированныйДокумент.
На форму добавил Командную панель форматированного документа.
При форматировании в этом поле текста и дальнейшем  сохранении, все форматирования сохраняются кроме ЦветФона и ЦветТекста.


Не знаю точно, но скорее всего это баг платформы. Версия у меня 1С:Підприємство 8.3 (8.3.9.2033).

Добиться сохранения выше цветов удалось только при вставке в это поле форматированного текста, например скопировавшего с страницы веб браузера.

Сравнить значения выбора с типом Характеристики

Есть таблица на форме с колонками:


В пользовательском виде:


Настройка - имеет тип ПланВидовХарактеристикСсылка
Значение - имеет составной тип (СправочникСсылка, Булево, Строка, Дата, Число)

При выборе в таблицы Значения к определенной Настройке нужно делать проверку например:

  • Если выбрана Настройка "Порт SMTP" то значение должно быть только типа Число

Вышло вот что:
&НаКлиенте
Процедура НалаштуванняПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
 ПроверкаПравильностиВыбранногоЗначенияПоТипу(Элемент.ТекущиеДанные.Значення, Элемент.ТекущиеДанные.Налаштування);
КонецПроцедуры

&НаСервере
Процедура ПроверкаПравильностиВыбранногоЗначенияПоТипу(Значение,Настройка)
 Если Настройка = ПланыВидовХарактеристик.НаименованиеПВХ.ПортSMTP Тогда 
  Если Тип("Число") <> ТипЗнч(Значение) Тогда 
   Сообщить("В этом параметре нужно указать тип Число!")
  КонецЕсли;
 КонецЕсли;  
КонецПроцедуры
Сначала проверяем, выбранная ли настройка связанная с ПортSMTP, а далее проверяем,
введенное ли значение в этом поле типа Число.

Серверные вызовы при завершении работы запрещены

Нужно выполнять авто обмен с РИБ перед завершение работы системы, как это можно было делать и ранее.
Сейчас, как видно из ошибки выполнить действия, которые требуют серверную часть модуля нельзя. А как же выполнить обмен с РИБ перед закрытием платформы если без серверных методов не обойтись?!

Ничего лучшего кроме как

Процедура ПередЗавершениемРаботыСистемы(Отказ, ТекстПредупреждения)       
        Отказ = Истина;
        ТекстПредупреждения = "Нажмите Продолжить работу, что бы выполнить АвтоОбменРИБ";
     
        ПодключитьОбработчикОжидания("ВыполнитьОбмен",1,Истина);
КонецПроцедуры

Процедура ВыполнитьОбмен()Экспорт       
        Обмен.ВыполнитьОбменСоВсемаРИБ();
        ОтключитьОбработчикОжидания("ВыполнитьОбмен");   
КонецПроцедуры


не придумал. 
Тут все просто, перед завершением работы платформы, пользователю как бы намекаем, что "нажми продолжить". Если нажата кнопка "продолжить" то программа не завершиться, а передаст свое выполнение общему модулю с серверным контекстом где уже и осуществляется обмен со всеми РИБ.

16 мар. 2017 г.

DefaultAppPool stopped / остановлен

Установил IIS для дальнейшей публикации 1С Предприятия.

При переходе на главную страницу веб сервера http://localhost показывается ошибка, типа "Service Unavailabel Error code 503".

Смотрю в менеджер IIS в Application Pools, пул DefaultAppPool остановлен. При последующем запуске вручную DefaultAppPool он автоматически останавливается.

При поиске решений в интернете по IIS ошибках в Журнале событий Windows, результативного ничего не нашел.

Решение:
Зашел в Advanced Settings нашего Defaultapppool пула и установил параметр Identity на LocalService.
На всякий случай, перезапустил IIS + запустил вручную DefaultAppPool, который уже автоматически не останавливался.


Для успешной публикации базы 1С Предприятия, в моем случаи, параметр Identity был установлен в NetworkService

13 янв. 2017 г.

Скрыть общедоступную папку по сети

Открыли доступ в сеть к нескольким папкам и одну из папок хотим скрыть, что бы пользователь через Проводник не смог видеть?!

Для скрытия в конце имени папки нужно поставить знак $


т.е. берем пример с windows, которая по умолчанию скрывает некие папки для отображения в общедоступных папках в сети.
 

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07