1 (edited by kunar80 2018-08-06 12:58:22)

Topic: Проект учёта материальных средств учреждения (организации)

В прилагаемом проекте на frmMINUS_details не работает Edit4.
Процедура для него записана так:

frmMINUS_details.Edit4.Text := SQLExecute ('SELECT calc_ostatok FROM sklad WHERE id='+frmMINUS_details.ComboBox1.sqlValue);

. Прошу помощи!

Post's attachments

Attachment icon Stockroom.7z 279.15 kb, 382 downloads since 2018-07-05 

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

calc_ostatok - это вычисляемое поле?
Если да, то вы не можете его использовать в SQL запросах, т.к. его на самом деле его не существует в базе данных.


Допустим если выч. поле у вас например такое Cost*Quantity, тогда ваш запрос выглядел бы так

frmMINUS_details.Edit4.Text := SQLExecute ('SELECT (Cost*Quantity) FROM sklad WHERE id='+frmMINUS_details.ComboBox1.sqlValue);

вам просто необходимо продублировать содержание выч. поля в SQL запросе.

Dmitry.

Re: Проект учёта материальных средств учреждения (организации)

DriveSoft wrote:

calc_ostatok - это вычисляемое поле?
Если да, то вы не можете его использовать в SQL запросах, т.к. его на самом деле его не существует в базе данных.


Допустим если выч. поле у вас например такое Cost*Quantity, тогда ваш запрос выглядел бы так

frmMINUS_details.Edit4.Text := SQLExecute ('SELECT (Cost*Quantity) FROM sklad WHERE id='+frmMINUS_details.ComboBox1.sqlValue);

вам просто необходимо продублировать содержание выч. поля в SQL запросе.

Вычисляемое поле такое:

(
(SELECT TOTAL(sklad.amountPlus) FROM sklad WHERE sklad.id_product=product.id) -
(SELECT TOTAL(sklad.amountMinus) FROM sklad WHERE sklad.id_product=product.id)
)

(все приходы по определённому продукту минус все расходы по нему)
Попробовал сделать так, как Вы подсказали. В итоге ничего кроме красных ругательств. А очень нужно при оформлении выдачи видеть остаток по складу.

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

В вашем случае необходимо сделать так

procedure frmMINUS_details_ComboBox1_OnChange (Sender: string);
begin
    if frmMINUS_details.ComboBox1.dbItemID<>-1 then
    begin
        frmMINUS_details.Edit1.Text := SQLExecute ('SELECT unitName FROM unit WHERE id='+frmMINUS_details.ComboBox1.sqlValue);
        frmMINUS_details.Edit2.Text := SQLExecute ('SELECT cost FROM product WHERE id='+frmMINUS_details.ComboBox1.sqlValue);

        frmMINUS_details.Edit4.Text := SQLExecute ('SELECT '+
        '(SELECT TOTAL(sklad.amountPlus) FROM sklad WHERE sklad.id_product='+frmMINUS_details.ComboBox1.sqlValue+') -'+
        '(SELECT TOTAL(sklad.amountMinus) FROM sklad WHERE sklad.id_product='+frmMINUS_details.ComboBox1.sqlValue+')');
    end;
end;
Dmitry.

Re: Проект учёта материальных средств учреждения (организации)

Доброго всем дня! В работе над проектом для складского учёта материальных средств учреждения столкнулся с непоняткой.
При вводе новых товаров через файл CSV (на вкладке 7 словарей) вроде бы всё выглядит нормально и загрузка происходит корректно. В гриде на этой вкладке также всё выглядит правильно (таблица "product")(см. цена на блокнот = 10,380). Но в гридах на frmOrderPLUS_detail и frmOrderMINUS_detail (та же самая таблица "product") в цене три знака после запятой почему-то обнуляются (Цена на блокнот = 10,000). Если же новый товар вводить не через CSV, а вручную, то этой проблемы не возникает. Если в словаре на вкладке 7 через редактирование перезаписать товар, то и на указанных выше формах (это выбор товара при приходе и расходе) всё становится на свои места. Вот такая вот у меня непонятка. Прошу помощи друга.

Post's attachments

Attachment icon Stockroom3.7z 14.15 kb, 345 downloads since 2018-08-02 

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

Приветствую.


При импорте чисел (цены) необходимо использовать точку в качестве разделителя, также кавычки не нужны. Видимо в вашем CSV файле используется запятая, поэтому эту строку

          // sCost
               if arrStr[2]<>'' then sCost := '"'+arrStr[2]+'"' else sCost := 'NULL';

замените на

          // sCost
               arrStr[2] := ReplaceStr(arrStr[2], ',', '.');
               if arrStr[2] <> '' then sCost := arrStr[2] else sCost := 'NULL';
Dmitry.

Re: Проект учёта материальных средств учреждения (организации)

Спасибо, Дмитрий. Так работает.

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

Никак не пойму, почему не работает процедура:

procedure frmOrderMINUS_detail_TableGrid1_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
frmOrderMINUS_detail.ComboBox2.dbItemID := SQLExecute ('SELECT IFNULL(id_product, -1) FROM invNum WHERE id='+frmOrderMINUS_detail.TableGrid1.sqlValue);
end;

В TableGrid1 таблица product
В ComboBox2 - id_product таблицы invNum

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

TableGrid1 возвращает id таблицы product

но вы используете его для таблицы invNum

FROM invNum WHERE id='+frmOrderMINUS_detail.TableGrid1.sqlValue

Это неправильно.

Dmitry.

10 (edited by kunar80 2018-08-06 16:11:03)

Re: Проект учёта материальных средств учреждения (организации)

DriveSoft wrote:

Это неправильно.

1) Никак не могу сообразить, как организовать выбор инвентарного номера выдаваемого товара, причём выбор только из свободных номеров.
2) [РЕШЕНО - знак равенства в условии заменил на LIKE] Если номер документа не число (по нему отбираются значения) , то SQL запрос почему то сообщает об ошибке, хотя формат для номера установлен текстовый 
Всех заинтересованных в программе учёта мат. средств организации (учреждения) прошу помочь довести до ума проект!

Post's attachments

Attachment icon Stockroom3.7z 19.86 kb, 337 downloads since 2018-08-06 

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

Как-то потерялся мой глас, взывающий о помощи в создании проекта. И адресован был он не только Дмитрию. На форуме уже неоднократно поднимался вопрос о складской программе. Делился и Дмитрий проектом Склад2. То, что сейчас имею я - это уже вполне рабочий проект. Пишу из дому, поэтому не могу приложить текущую версию. В ней уже можно работать, что я и делаю как лицо материально ответственное в своём учреждении. Не решён только вопрос с инвентарными номерами (см. "1)" в предыдущем топике). В списке материалов присутствуют и принтеры, имеющие инвентарные номера, и туалетная бумага, которую уборщица по ведомости получает, а оформляется она накладной по итогам месяца. Поэтому иметь поле invNum в таблице products просто нет смысла. Поставить на приход три-четыре сотни компьютеров, каждый отдельной строкой и со своим инвентарным - это труд немалый, да и не нужный именно в этом проекте. Моё видение таково: эти три сотни компьютеров (или стульев) приходуются одной строкой без учёта инвентарных номеров, как и записано в накладной поставщика, а инвентарный номер учитывается в расходной накладной при выдаче в эксплуатацию. При приходовании этих самых стульев (или телефонов) в таблицу invNum заносятся через CSV эти самые триста номеров - всего-то два значения - наименование и инвентарный номер. А при оформлении расходной накладной из инвентарных номеров, привязанных к конкретному наименованию, выбирается тот, который 1) действительно привязан к этому наименованию и 2) свободен и находится на складе.
Вот эти два пункта у меня до сих пор не решены.
Так что, друзья, если заинтересованы в наличии такой складской программки - присоединяйтесь к решению проблемы. Такая прога действительно нужна не только мне. Попробуйте-ка найти в интернете что-либо похожее, да ещё и бесплатное! Не найдёте.
Завтра с работы выложу текущую наработку. Реальные документы удалять не буду, с ними всё-же нагляднее.

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

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

Re: Проект учёта материальных средств учреждения (организации)

sibprogsistem wrote:

хотел посмотреть Ваш проект, так как заинтересован в нечто подобном

Прикрепляю. Но, как говорил выше, более новый вариант у меня на работе. Хотя и здесь видна та проблема, о которой говорил: откройте расходную (видаткову по-укр) и добавьте новую позицию. Вот там и нужен выбор инв. номера.

Post's attachments

Attachment icon Stockroom3.rar 23.79 kb, 357 downloads since 2018-08-07 

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

не нашел видаткову,  как её открыть?

Re: Проект учёта материальных средств учреждения (организации)

Выкладываю последнюю версию. Это уже рабочий проект с реальными документами. Расходную (видаткову) создайте новую, т.к. я ещё ни одну в базу не внёс. И ещё что хотелось бы: на форме отчётов (переход с главной по кнопке "Звіти") видно движение по материалам. Хочется через запрос выводить на печать карточку, в которой отображена вся инфа по материалу от момента его прихода до текущего дня. Полагаю, что с этим справлюсь. НО КАК В НЁМ СДЕЛАТЬ ПРОМЕЖУТОЧНЫЕ ИТОГИ (за месяц, за год) ДАЖЕ НЕ ПРЕДСТАВЛЯЮ.

Post's attachments

Attachment icon Stockroom3.7z 27.48 kb, 416 downloads since 2018-08-08 

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

          // productNameID
               if arrStr[0] <> '' then
               begin
                    productNameID  := SQLExecute ('SELECT id FROM product WHERE productName LIKE "' + arrStr[0] +'"');
                    if productNameID  = '' then
                    begin
                         SQLExecute ('INSERT INTO product (productName) VALUES ("'+ arrStr[0] +'");');
                         productNameID  := IntToStr(Last_Insert_id('productName'));
                         if productNameID  = '-1' then productNameID := 'NULL';
                    end;
               end else productNameID  := 'NULL';
    // unitNameID
               if arrStr[1] <> '' then
               begin
                    unitNameID  := SQLExecute ('SELECT id FROM unit WHERE unitName LIKE "' + arrStr[1] +'"');
                    if unitNameID  = '' then
                    begin
                         SQLExecute ('INSERT INTO unit (unitName) VALUES ("'+ arrStr[1] +'");');
                         unitNameID  := IntToStr(Last_Insert_id('unitName'));
                         if unitNameID  = '-1' then unitNameID := 'NULL';
                    end;
               end else unitNameID  := 'NULL';

здесь
productNameID  := IntToStr(Last_Insert_id('productName'));
unitNameID  := IntToStr(Last_Insert_id('unitName'));

указано много параметров

Re: Проект учёта материальных средств учреждения (организации)

В последних версиях у функции Last_Insert_id были убраны параметры, т.е. нужно писать

productNameID  := IntToStr(Last_Insert_id);
Dmitry.

Re: Проект учёта материальных средств учреждения (организации)

Значит я правельно сделал  ))

какая  таблица является основной?

Re: Проект учёта материальных средств учреждения (организации)

DriveSoft wrote:

В последних версиях у функции Last_Insert_id были убраны параметры, т.е. нужно писать

productNameID  := IntToStr(Last_Insert_id);

У меня версия 1.52

Не боги горшки лепят!

Re: Проект учёта материальных средств учреждения (организации)

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


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

Dmitry.

Re: Проект учёта материальных средств учреждения (организации)

Могу помочь только с материалами для обучения
http://www.sql.ru/forum/998443-1/osnovy … koy-bd-v-2

Post's attachments

Attachment icon Учетная система.odt 45.9 kb, 840 downloads since 2018-08-08 

Dmitry.

Re: Проект учёта материальных средств учреждения (организации)

я правельно понимаю, что вам нужно это??

Post's attachments

Attachment icon 44444.png 89.89 kb, 248 downloads since 2018-08-08 

Re: Проект учёта материальных средств учреждения (организации)

Как-то так. После выбора материала кликом по гриду и записи количества "1" в комбобоксе должны открываться не все инвентарные номера, существующие в базе, а только те, которые привязаны конкретно к этому материалу. Это задача № 1. И задача № 2 :  в комбобоксе видны только те номера, которые не привязаны к расходным накладным, иначе говоря не выданы и находятся на складе.

Не боги горшки лепят!

24 (edited by sibprogsistem 2018-08-09 05:37:57)

Re: Проект учёта материальных средств учреждения (организации)

1. клик по гриду должен передовать sqlValue в ComboBox1
2. ComboBox2 связан с ComboBox1
3. в комбобоксе видны только те номера, которые не привязаны к расходным накладным, то есть  для ComboBox2 нужен фильт
4. После выбора материала кликом по гриду и записи количества "1" в комбобоксе должны открываться не все инвентарные номера
не понимаю почему именно такой порядок, может просто проверку на заполнение поля перед сохранением?
Дмитрий, скажите можно ли на ComboBox повесить фильтр?

Ну или в место этого сделать еще один ComboBox, что-то вроди этого

ComboBox1  = получает sqlValue от грида
ComboBox2  = переводим в значение 1- пусто
ComboBox3  = выводим номера не привязаны к расходным накладным - пусто


и еще как вариант сделать дополнитульную таблицу и переносить в нее номера  привязаные к расходным накладным

Re: Проект учёта материальных средств учреждения (организации)

Не пойму, почему в отчёте не вычисляется сумма, а вместо этого последовательно перечисляются значения слагаемых.
Запись в ячейке такая:
[SUM(<Report."amountMINUS">,MasterData1)] (см. рисунок)

Post's attachments

Attachment icon 2018-08-17_105037.jpg 148.49 kb, 212 downloads since 2018-08-17 

Не боги горшки лепят!