Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Akramjon
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 17
1

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

04.02.2014, 11:29. Просмотров 720. Ответов 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 рублей)
я по созданию и сохранению прочитал много и люди помогли
вот теперь это задача очень тяжеловато для меня одного
спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 11:29
Ответы с готовыми решениями:

При считывании данных из таблицы, данные становятся пустыми
Проблема в том что когда я записываю новый элемент таблицы проблем не возникает...

Загрузить данные один раз с MySQL таблицы в память приложения, и в дальнейшем использовать ее
Всем добрый вечер, Есть ли возможность загрузить данные один раз с MYSQL...

как создать таблицы
привет всем! в общем так: есть таблица в SQLite, ее нужно вывести в таблицу...

SQLiteDatabase как обновить таблицы?
Привет, снова я )) Данные в базу закачиваются из других классов, то есть всё...

Как подключаться к БД из разных активностей? Как создать 2 таблицы?
Добрый вечер! Мучаюсь с таким вопросом. Есть БД, нужно создать 2 таблицы....

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

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

Но может понадобиться отдельная таблица для шапки документа и для таб. части документа, т.е. будут 5 таблиц.
Далее суммировать приходы и расходы по этой номенклатуре, после чего отнимать одно от другого. Можно получить одним запросом, а можно несколькими.
Остаток с ценой - это как? Цена не должна зависеть от предыдущего документооборота или должно быть что-то типа партионного учета?
Если не зависит, то связываем полученные данные (LEFT JOIN или INNER JOIN) с таблицей номенклатуры для получения цены определенного типа цен.
0
Akramjon
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 17
04.02.2014, 15:40  [ТС] 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();
    }
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 516
04.02.2014, 16:18 4
Надо бы сначала разобраться о структурой БД.

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

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

Ну и во вставке записей в документы должен фигурировать id номенклатуры, а не наименование.
0
Akramjon
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 17
04.02.2014, 16:44  [ТС] 5
я поставил текстовые потому что не как не смог int поставит
пожалуйста обьясните мне что вы хотели сказать здесь я исправлю
Цитата Сообщение от Slon747 Посмотреть сообщение
Ну и во вставке записей в документы должен фигурировать id номенклатуры, а не наименование.
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 516
04.02.2014, 17:22 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).
1
04.02.2014, 17:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 17:22

Как реализовать выделение элементов таблицы
Уважаемые знатоки, нужна ваша помощь :) Имеется таблица, созданная с помощью...

Как вытащить значение из таблицы бд sqlite
Здравствуйте.Помогите пожалуйста разобраться. Суть такая.Есть две таблицы в...

Как узнать имя таблицы на которую установлен курсор
Есть БД состоящая из нескольких таблиц. Как узнать на какую конкретно таблицу...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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