Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Akramjon
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 17
#1

Как минусоват данные с таблицы 2 от таблицы 1 - Android

04.02.2014, 11:29. Просмотров 613. Ответов 5
Метки нет (Все метки)

Я пока добился чего хотел. Данный момент у меня есть 2 таблицы в одной БД. Первая приход товаров называется TABLE_GOODS, и вторая таблица расходов TABLE_SELL, у обоих все сохраняется по разным id. Обе выводят под разным listview свои данные. Теперь моя задача минусоват товары и вывести их на новый activity или listview Остаток.
Например я сделал новый приход
в TABLE_GOODS 10 шт книг по 5 рублей (например у него id 10)
в TABLE_SELL пищу что продал 4 книг по 10 рублей (например у него id 11)
как мне соединит их вместе чтобы отминусоват (ну как бы id10- id11 но я сам точно не знаю) и чтобы в результате у меня в listview Остаток показывал
6 книг по 5 рублей (или продано 4 книг по 10 рублей)
я по созданию и сохранению прочитал много и люди помогли
вот теперь это задача очень тяжеловато для меня одного
спасибо большое
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 11:29     Как минусоват данные с таблицы 2 от таблицы 1
Посмотрите здесь:

Android как создать таблицы
Создать 2 таблицы в БД! Android
Загрузить данные один раз с MySQL таблицы в память приложения, и в дальнейшем использовать ее Android
Создание таблицы Android
Записать массив String как столбец таблицы базы данных Android
Android Как подключаться к БД из разных активностей? Как создать 2 таблицы?
Android При считывании данных из таблицы, данные становятся пустыми
Android Как вывести все записи из таблицы в текстовое поле?
Как вытащить значение из таблицы бд sqlite Android
Android Как узнать имя таблицы на которую установлен курсор
SQLiteDatabase как обновить таблицы? Android
Android Как реализовать выделение элементов таблицы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 420
04.02.2014, 13:49     Как минусоват данные с таблицы 2 от таблицы 1 #2
Не совсем понятно. В данном случае речь идет об одной и той же позиции номенклатуры?
При чем тут вообще цена?
Если всего 2 типа цены (закупочная и розничная), то проще сделать так:

1-я таблица: номенклатура, в ней кроме описания свойств есть 2 столбца для 2 типов цен
2-я таблица - приход
3-я таблица - раход

Но может понадобиться отдельная таблица для шапки документа и для таб. части документа, т.е. будут 5 таблиц.
Далее суммировать приходы и расходы по этой номенклатуре, после чего отнимать одно от другого. Можно получить одним запросом, а можно несколькими.
Остаток с ценой - это как? Цена не должна зависеть от предыдущего документооборота или должно быть что-то типа партионного учета?
Если не зависит, то связываем полученные данные (LEFT JOIN или INNER JOIN) с таблицей номенклатуры для получения цены определенного типа цен.
Akramjon
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 17
04.02.2014, 15:40  [ТС]     Как минусоват данные с таблицы 2 от таблицы 1 #3
Здесь я создаю таблицу и добавляю данные
Код
public class DBHandlerImpl extends SQLiteOpenHelper implements  DBHandler<Goods>{
    private static final int DATABASE_VERSION = 4;
    private static final String DATABASE_NAME = "app_bases";

    private static final String TABLE_GOODS = "users";
    private static final String TABLE_SELL = "sell";

    private static final String KEY_ID = "id";
    private static final String KEY_NAME_GOODS = "name_goods";
    private static final String KEY_DATE = "date";
    private static final String KEY_AMOUNT = "amount";
    private static final String KEY_COST = "cost";

    public DBHandlerImpl(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = "Create Table " + TABLE_GOODS + "(" + KEY_ID + "INTEGER PRIMARY KEY, " +
                                                            KEY_NAME_GOODS + " TEXT, " +
                                                            KEY_DATE + " TEXT, " +
                                                            KEY_AMOUNT + " TEXT, " +
                                                            KEY_COST + " TEXT);";
        db.execSQL(query);

         query = "Create Table " + TABLE_SELL + "(" + KEY_ID + "INTEGER PRIMARY KEY, " +
                                                            KEY_NAME_GOODS + " TEXT, " +
                                                            KEY_DATE + " TEXT, " +
                                                            KEY_AMOUNT + " TEXT, " +
                                                            KEY_COST + " TEXT);";
        db.execSQL(query);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i2) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_GOODS);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_SELL);
        onCreate(db);
    }

    @Override
    public void addRashod(Goods goods) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_NAME_GOODS, goods.getName_goods());
        values.put(KEY_DATE, goods.getDate());
        values.put(KEY_AMOUNT, goods.getAmount());
        values.put(KEY_COST, goods.getCost());
        db.insert(TABLE_SELL, null, values);
        db.close();
    }

      @Override
    public void addPrihod(Goods goods) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_NAME_GOODS, goods.getName_goods());
        values.put(KEY_DATE, goods.getDate());
        values.put(KEY_AMOUNT, goods.getAmount());
        values.put(KEY_COST, goods.getCost());
        db.insert(TABLE_GOODS, null, values);
        db.close();
    }
здесь сохраняю приход в Приход активити

Код
 public void saveTovar(View v){
        AlertDialog.Builder builder = new AlertDialog.Builder(Prihod.this);
        builder.setTitle("Потдвердить сохранение...");
        builder.setMessage("Вы уверены, что хотите сохранить?");
        builder.setIcon(R.drawable.save);
        builder.setPositiveButton("Да", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                goods = new Goods(1, edtTovar.getText().toString(),
                        editDate.getText().toString(),
                        editAmount.getText().toString(),
                        editCost.getText().toString());
                db.addPrihod(goods);
                Toast.makeText(getApplicationContext(), "Новый товар сохранен!", Toast.LENGTH_SHORT).show();
            }
        });

        builder.setNegativeButton("Нет", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }
здесь сохраняю расход в Расход активити

Код
 public void saveRashod(View v){
        AlertDialog.Builder builder = new AlertDialog.Builder(Rashod.this);
        builder.setTitle("Потдвердить сохранение...");
        builder.setMessage("Вы уверены, что хотите сохранить?");
        builder.setIcon(R.drawable.save);
        builder.setPositiveButton("Да", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                goods = new Goods(1, editRashod.getText().toString(),
                        editDateRashod.getText().toString(),
                        editAmountRashod.getText().toString(),
                        editCostRashod.getText().toString());
                db.addRashod(goods);
                Toast.makeText(getApplicationContext(), "Новый расход сохранен!", Toast.LENGTH_SHORT).show();
            }
        });

        builder.setNegativeButton("Нет", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.show();
    }
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 420
04.02.2014, 16:18     Как минусоват данные с таблицы 2 от таблицы 1 #4
Надо бы сначала разобраться о структурой БД.

1. Таблица TABLE_GOODS
Поля KEY_AMOUNT и KEY_COST - я так понимаю, остаток и цена?
А почему тогда они текстовые?
И если документы влияют на остаток товара, то зачем тогда остаток в таблице номенклатуры?

2. Таблица TABLE_SELL
Почему поле KEY_NAME_GOODS имеет текстовый тип, если уникальное поле в TABLE_GOODS с типом int?
Поля KEY_AMOUNT и KEY_COST тоже почему-то текстовые.

Ну и во вставке записей в документы должен фигурировать id номенклатуры, а не наименование.
Akramjon
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 17
04.02.2014, 16:44  [ТС]     Как минусоват данные с таблицы 2 от таблицы 1 #5
я поставил текстовые потому что не как не смог int поставит
пожалуйста обьясните мне что вы хотели сказать здесь я исправлю
Цитата Сообщение от Slon747 Посмотреть сообщение
Ну и во вставке записей в документы должен фигурировать id номенклатуры, а не наименование.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 420
04.02.2014, 17:22     Как минусоват данные с таблицы 2 от таблицы 1 #6
Зачем в документах наименование товара? Как потом этим пользоваться?
В документах должна быть ссылка на строку таблицы номенклатуры с типом "INTEGER NOT NULL", т.к. уникальный индекс в таблице номенклатуры целочисленный (id).
Т.е. имея id из таблицы номенклатуры и к примеру GOOD из таблицы документов мы сможем связать между собой эти данные и далее делать что угодно.
Java
1
2
3
4
5
String query = "Create Table " + TABLE_GOODS + 
    "(id INTEGER PRIMARY KEY, name_goods TEXT, cost1 DOUBLE NOT NULL, cost2 DOUBLE NOT NULL);";
 
query = "Create Table " + TABLE_SELL
    + "(id INTEGER PRIMARY KEY, good INTEGER NOT NULL, date TEXT, amount INTEGER NOT NULL);";
Из номенклатуры выкинул date (если нужно - верните), остаток и добавил 2 поля для хранения цены.
Из таблицы документов выкинул поле цена (т.к. я понял, что цена фиксированная из справочника номенклатуры).
Поле good в таблице документов целочисленное. Оно связано с полем id номенклатуры.
После этого, например, получаем все продажи одного из товаров с ценой:
SQL
1
2
3
4
SELECT sell.*, users.cost2
FROM sell
LEFT JOIN users ON sell.good = users.id
WHERE sell.good = 123
P.S. Вообще то вам нужно почитать основы СУБД (совсем не обязательно про SQLite).
Yandex
Объявления
04.02.2014, 17:22     Как минусоват данные с таблицы 2 от таблицы 1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru