Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  11:59[Войти] | [Зарегистрироваться]
Ответ на вопрос № 83882

16-03-2024 02:09
Здравствуйте.

Помогите пожалуйста! Я запутался и не могу ничего придумать.

Есть программа, считывает данные с весового терминала. Алгоритм взвешивания автотранспорта хаотичный, может проехать сначала порожний, потом груженный и наоборот. На форме имеется 2 кнопки "Груженный" "Порожний". Один из важных факторов ввода данных, это бортовой номер автосамосвала. При вводе номера в Edit (Например 11) и нажатии одной из кнопок (Например "Порожний"), записываются данные в БД, поле TARA... . Далее, если соблюдать порядок, в Edit ввести 11 и нажать кнопку "Груженный". То значение попадут в поле "BRUTTO". Все отлично! Но существует человеческий фактор. И если снова нажмут "Порожний", появится новая запись с новыми показаниями и таким же номером 11. Если в двух словах... То необходимо найти запись с введенным в Edit номером, проверить если поле BRUTTO заполнено, то туда записать тару. И наоборот, номер есть, поле TARA не пустое, туда записать BRUTTO. Если номера такого нет, или если есть, но тара и брутто не NULL. То записать ка новую запись. Ниже код двух кнопок. Все расписал в сообщении, но могу реализовать. Извините, если решение на поверхности, а я туплю. Запутался в конец.

procedure TForm1.Button_ToDB_EmptyClick(Sender: TObject); // ПОРОЖНИЙ
begin
strOutput := IntToStr(RandomRange(17000, 70000)); // Имитирую ответ от весов

if (EditNum.Text <> 'Номер транспорта') and (EditNum.Text <> '') then
    begin                         
      if ADOTableAzharHrom.Locate('NUMTRANSP;BRUTTO', VarArrayOf([EditNum.Text, NULL]), []) then // not(null) не срабатывает
      begin
        ADOTableAzharHrom.Edit;
        ADOTableAzharHrom.FieldByName('TARA').AsFloat := StrToFloat(strOutput)/1000;
        ADOTableAzharHrom.FieldByName('NETTO').AsFloat := ADOTableAzharHrom.FieldByName('BRUTTO').AsFloat - ADOTableAzharHrom.FieldByName('TARA').AsFloat;
        ADOTableAzharHrom.Post;
      end
      else
      if strOutput <> '' then // если номер не найден, надо записать все данные
      begin
        ADOTableAzharHrom.Insert;
        ADOTableAzharHrom.FieldByName('NUMTRANSP').AsString := EditNum.Text;
        ADOTableAzharHrom.FieldByName('MARKATRANSP').AsString := ComboBoxMarkaT.Text;
        ADOTableAzharHrom.FieldByName('TARA').AsFloat := StrToFloat(strOutput)/1000;
        ........

        ADOTableAzharHrom.FieldByName('DataFilter').AsString := DateToStr(Now);
        ADOTableAzharHrom.Post;
      end;
    end
    else
      ShowMessage('Введите номер транспорта');
    EditNum.Text := '';
end;

procedure TForm1.Button_ToDB_EmptyClick(Sender: TObject); // ГРУЖЕННЫЙ
begin
strOutput := IntToStr(RandomRange(17000, 70000)); // Имитирую ответ от весов

if (EditNum.Text <> 'Номер транспорта') and (EditNum.Text <> '') then
    begin                         
      if ADOTableAzharHrom.Locate('NUMTRANSP;TARA', VarArrayOf([EditNum.Text, NULL]), []) then // not(null) не срабатывает
      begin
        ADOTableAzharHrom.Edit;
        ADOTableAzharHrom.FieldByName('BRUTTO').AsFloat := StrToFloat(strOutput)/1000;
        ADOTableAzharHrom.FieldByName('NETTO').AsFloat := ADOTableAzharHrom.FieldByName('BRUTTO').AsFloat - ADOTableAzharHrom.FieldByName('TARA').AsFloat;
        ADOTableAzharHrom.Post;
      end
      else
      if strOutput <> '' then // если номер не найден, надо записать все данные
      begin
        ADOTableAzharHrom.Insert;
        ADOTableAzharHrom.FieldByName('NUMTRANSP').AsString := EditNum.Text;
        ADOTableAzharHrom.FieldByName('MARKATRANSP').AsString := ComboBoxMarkaT.Text;
        ADOTableAzharHrom.FieldByName('BRUTTO').AsFloat := StrToFloat(strOutput)/1000;
        ........

        ADOTableAzharHrom.FieldByName('DataFilter').AsString := DateToStr(Now);
        ADOTableAzharHrom.Post;
      end;
    end
    else
      ShowMessage('Введите номер транспорта');
    EditNum.Text := '';
end;

За ранее благодарю!

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

07-06-2024 11:41
To Ivax: В готовых решениях есть даже распознавание номера автоматическое. Но это довольно-таки платные решения, так что, вероятно, не покатит.
А вот идея определять вес пустой и полной тар заранее, чтобы потом выводить: "Чувак, ты точно уверен, что тара полная? Она в норме то весит 100 килограмм, а весы показывают 107 килограмм! Может, туда просто кошка нагадила?"
В общем, сперва надо на человеческом языке описать алгорим работы (а для повышения мотивации, рекомендую почитать товарища Джоэла о программировании ) и уже потом начинать лабать код, а не следовать странным инструкциям грозящего Южному централу мужика

22-03-2024 09:26 | Вопрос к автору: запрос дополнительной информации
Очень странная постановка задачи. У Вас NETTO автомобиля меняется от поездки к поездке? Почему TARA (ADOTableAzharHrom.FieldByName('TARA').AsFloat := StrToFloat(strOutput)/1000;) это показания весов, если показания весов может быть NETTO или NETTO + TARA или BRUTTO (т.е. NETTO + TARA + вес груза)? А что мешает пользователю дважды перепутать кнопки и сделать BRUTTO < NETTO? А если автомобиль дважды проедет груженный, а потом один раз пустой, какую из записей апдейтить?
Ну и не понятно какая БД используется, но в общем подходе лучше уйти от использования ADO для вставки и апдейта, а использовать хранимые процедуры. А необходимые проверки повесить на триггер.

19-03-2024 03:31 | Замечание модератора
Не стоит присылать вопрос ещё раз, если не получили ответа. Это запрещено правилами Круглого Стола.

17-03-2024 10:57
При нажатии любой кнопки сравнивайте значение EditNum.Text с запомненным ранее значением.

17-03-2024 05:40
>>>Но существует человеческий фактор
Вот тут ты самое важное сказал. И этот "фактор" в забивании номера грузовика в поле Edit может ошибиться кнопочкой, дальнейшие проверки не помогут. По хорошему радиометки у тары надо сделать, но это хотелки. Интерфейс программы должен помогать оператору избегать ошибок.

Сколько грузовиков на предприятии? Если количество обозримое, то сделать кнопочки с номерами. Нажимаем на кнопку с номером тары, программа проверяет данные в базе и блокирует неправильную кнопку взвешивания. А лучше что-бы кнопка была одна, но выполняла нужное действие в зависимости от условий. Проверка проводится до нажатия кнопки и по результатам сообщает оператору что произойдет при нажатии на кнопку (дополнение, новая запись, ошибка и т.д.).

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

>>> Запутался в конец
я тоже, пытаясь понять алгоритм записей в базу. Как это - сначала груженый, потом пустой ... откуда едут, куда едут ... зачем едут. Может в базу ещё добавить поле времени и поле направления движения (С->Ю, З->В:)?

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

Еще момент что при любой ошибке виноват программист. Предложу сразу поставить вебку и делать снимок при нажатии кнопки. По нему можно и номер в дальнейшем определять.

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

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Раз дощечка, два дощечка будет лесенка. Раз словечко, два словечко, будет ЧТО?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования