14 июн. 2017 г.

Вывод в две колонки при печати \ 1С

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

//++ jaroslav.h 12.06.2017 #1904
Процедура ВыводВНесколькоКолонок(ПолеТабличногоДокумента, ТабличныйДокументИсточник) Экспорт

т1 = Новый ТабличныйДокумент;
т2 = Новый ТабличныйДокумент;
т3 = Новый ТабличныйДокумент;

т1.Вывести(ТабличныйДокументИсточник);
т2.Вывести(ТабличныйДокументИсточник);

выс = Макс(т1.ВысотаТаблицы, т2.ВысотаТаблицы);

о1 = т1.ПолучитьОбласть(1,1, выс, т1.ШиринаТаблицы);
о2 = т2.ПолучитьОбласть(1,1, выс, т2.ШиринаТаблицы); ПолеТабличногоДокумента.Вывести(о1);

ПолеТабличногоДокумента.Присоединить(о2);

ПолеТабличногоДокумента.ПолеСверху = 1;
ПолеТабличногоДокумента.ПолеСправа = 1;
ПолеТабличногоДокумента.ПолеСнизу = 1;
ПолеТабличногоДокумента.ПолеСлева = 1;

ПолеТабличногоДокумента.АвтоМасштаб = Истина;
ПолеТабличногоДокумента.Защита = Истина;
ПолеТабличногоДокумента.ТолькоПросмотр = Истина; 

ПолеТабличногоДокумента.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

КонецПроцедуры //-- jaroslav.h 12.06.2017 #1904

Не влезает на одну страницу печати \ 1С

Для проверки, помещается ли готовый табличный документ на одну страницу печати, передаем в функцию

//++ jaroslav.h 12.06.2017 #1904
Функция ВозможностьПечатиНаОднойСтранице(ТабличныйДокументИсходный) Экспорт

ТабличныйДокументРезервный = Новый ТабличныйДокумент;
Возврат ТабличныйДокументРезервный.ПроверитьВывод(ТабличныйДокументИсходный);

КонецФункции //-- jaroslav.h 12.06.2017 #1904

готовый табличный документ и в результате получаем Истина или Ложь

Выпадающий список в Android

package com.example.jaroslavh.myapplication1;

import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
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 {
            GetUser();
        } catch (Exception e) {
            print(e.toString());
        }

    }

    public void GetUser() 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);

        Statement statement = null;
        String query = " SELECT * FROM users";

        statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(query);

        Spinner spinner = (Spinner) findViewById(R.id.spinner);

        ArrayList<User> users = new ArrayList<User>();

        while (resultSet.next()) {
            users.add(new User(resultSet.getInt("ID"), resultSet.getString("NAME"), resultSet.getInt("PASSWD")));
        }

        ArrayAdapter<User> adapter = new ArrayAdapter<User>(this, android.R.layout.simple_spinner_item, users);
        spinner.setAdapter(adapter);

//        ArrayAdapter<User> adapter = new ArrayAdapter<User>(this, android.R.layout.simple_spinner_item, new User[]{//                new User(1, "Петя", 111),//                new User(2, "Саша", 222),//                new User(3, "Вася", 333),//        });
    }

    public void Exit(View view) {
        finishAffinity();
    }

    public void In(View view) {
        Intent intent = new Intent(this, ListOperations.class);
        intent.putExtra("p1""hello");
        startActivity(intent);
    }

    void print(String message) {
        Toast toast = Toast.makeText(this, message, Toast.LENGTH_LONG);
        toast.show();
    }
}





package com.example.jaroslavh.myapplication1;

/** * Created by jaroslav.h on 30.05.2017. */
public class User {

    int id;
    String name;
    int pass;

    User(int id, String name, int pass) {
        this.id = id;
        this.name = name;
        this.pass = pass;
    }

    User(){

    }

    @Override    public String toString() {
        return name;
    }

}

Сделать фотографию с android

package com.example.jaroslavh.myapplication1;

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;

public class Nomenklature extends AppCompatActivity {

private static final int REQUEST_IMAGE_CAPTURE = 1;

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

}

void dispatchTakePictureIntent(View view) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {

ImageView mImageView = (ImageView) findViewById(R.id.imageView2);

Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
mImageView.setImageBitmap(imageBitmap);
}
}
}

Сохранить значение формы при смене ориентации экрана

package com.example.jaroslavh.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {


EditText editText;
TextView textView;
TextWatcher tw;

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

editText = (EditText) findViewById(R.id.editText2);
textView = (TextView) findViewById(R.id.textView);

tw = new TextWatcher() {

public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

public void onTextChanged(CharSequence s, int start, int before, int count) {
}

public void afterTextChanged(Editable s) {
editText.removeTextChangedListener(tw);
textView.setText(s.toString());
s.clear();
editText.addTextChangedListener(tw);
}

};

editText.addTextChangedListener(tw);
}

protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
textView.setText(savedInstanceState.getString("textView"));
}

protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("textView", textView.getText().toString());
}

}

Сканировать из Android

Главный класс

package com.example.jaroslavh.myapplication;


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {


    EditText editText;
    TextView textView;
    TextWatcher tw;

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

        editText = (EditText) findViewById(R.id.editText2);
        textView = (TextView) findViewById(R.id.textView);

        tw = new TextWatcher() {

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            public void afterTextChanged(Editable s) {
                editText.removeTextChangedListener(tw);
                textView.setText(s.toString());
                s.clear();
                editText.addTextChangedListener(tw);
            }

        };

        editText.addTextChangedListener(tw);
    }

    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        textView.setText(savedInstanceState.getString("textView"));
    }

    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("textView", textView.getText().toString());
    }

}

Подключиться к веб-сервису с 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); 
 
 Возврат Запрос.Выполнить().Выгрузить();
 
КонецФункции

 

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