Topic: перенос данных + дни

Добрый день.
Есть программа.
Хотелось бы ее довести до ума. Но я не совсем понимаю как.
1 вопрос:
на главной форме, когда выбираешь человека, справа стоит кнопка со знаком "+" Ее нажимаешь, открывается другая форма. На ней я не могу удалить запись. Пишет ошибку, хотя вроде все нормально.

2 вопрос:
вкладка main'' содержит две вкладки ("всі відпустки" , "в архіві")
Если я могу перенести запись из вкладки "всі відпустки"  в таблицу вкладки "в архіві",   обратно уже не получается. Хотя сделал, вроде по логике (моей) должно работать.   (надо смотреть на вкладки add_periods,   edit_periods   на "chekbox2"   и кнопку "До загального списку")
Кажется проблема может быть в них.

3 вопрос: (самый сложный)
3.1. Есть стандартный отпуск (30 дней).
3.2. Есть периоды, за которые набегают эти 30 дней. (скажем первый период будет с 04.05.2018 по 03.05.2019)
3.3. Человек взял отпуск (с основного, который 30 дней за период с 04.05.2018 по 03.05.2019), скажем, 14 дней.  Итого остается 16 за тот же период.
3.4. На следующий календарный год этот же человек берет отпуск в количестве 10 дней, но уже за след период (из след. 30 дней , т.е. 04.05.2019 по 03.05.2020)  Итого остается 20 дней  и + те неизрасходованные за первый период 16 дней.

Надеюсь идею я донес.

Вот как реализовать именно эти остатки по предыдущим периодам, что-бы они показывались еще?

Программу прилагаю.
С ув., Станислав.

Post's attachments

Attachment icon Учет Отпусков и больничных работников ЦНАП.zip 346.34 kb, 260 downloads since 2020-05-04 

Re: перенос данных + дни

и еще добавочек (т.е. что-бы в отдельную табличку на отдельной вкладке выбирались только остатки по периодам)
фото желаемого  прилагаю

Post's attachments

Attachment icon IMG_20200504_163429.jpg 183.87 kb, 114 downloads since 2020-05-04 

Re: перенос данных + дни

немного добавлю...  может понятнее станет

Post's attachments

Attachment icon IMG_20200505_111814.jpg 210.52 kb, 112 downloads since 2020-05-05 

Re: перенос данных + дни

а, я вспомнил Ваш проект... Вы  придумали как реализовать  периоды отпусков?

у Вас есть два значения  (общее кол-во дней ) (сколько взял дней)...

в вычисляемом поле  такую запись

 (SELECT всего_дней  FROM таблица_отпусков) -  (SELECT взял_дней  FROM таблица_отпусков) 

в итоге Вы получите остаток..

Re: перенос данных + дни

sibprogsistem wrote:

а, я вспомнил Ваш проект... Вы  придумали как реализовать  периоды отпусков?

у Вас есть два значения  (общее кол-во дней ) (сколько взял дней)...

в вычисляемом поле  такую запись

 (SELECT всего_дней  FROM таблица_отпусков) -  (SELECT взял_дней  FROM таблица_отпусков) 

в итоге Вы получите остаток..


формула эта есть у меня, только в другом виде

abs(const-days)

Но мне нужно немного другое.
На вкладке "Все записи" - отображается, как и положено, все записи начиная с принятия человека на работу.
Во второй вкладке "діючі" - должны отбираться только записи с положительным остатком количества дней от общего числа дней (30).

Т.е., я так понимаю, должна быть некая промежуточная запись, которая запоминается (значение в ней), от которой и будет отсчитываться взятые дни.

Поясню:
Первый отпуск человек взял 10 дней из 30. В остатке 20 дней. Вот эти 20 дней должны запоминаться.
Следующий его отпуск, , к примеру 7 дней, должны вычитаться уже из того остаточного значения в 20 дней. И эти 13 дней должны записаться в таблицу "діючі".
В итоге остается 13 дней из общего количества дней.  И эти 13 дней должны записаться в таблицу "діючі". А те, предыдущие 20 должны удалиться.

Так будет правильнее.

Re: перенос данных + дни

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

7 (edited by stas.kodpi 2020-05-06 13:18:44)

Re: перенос данных + дни

а вы смотрели мой проект?
может я по-другому сформулирую свои хотелки.

Человек в первый раз идет в отпуск. Он берет какое-то количество дней от своего основного. Остается в итоге какое-то количество дней, скажем 20.
Вот эти 20 и должны потом играть роль.
Т.е.:
1. Первый отпуск - (должно задействовано быть число дней основного отпуска (30)  - 10. В итоге будет эти 20 оставшихся дней..
2. Следующий поход в отпуск  - уже должен отсчет вестись от 20 дней. (но записываться в одну и ту же таблицу (общую со всеми датами)
3. Также положительный остаток дней (до 0) должен переносится в таблицу "діючі".


Но если число в остатке будет 0    -  то, подразумевается, что начинается новый период отпуска (т.е. новый год), где снова будет фигурировать значение 30 (ну или 24, у кого как).  И дальше ве по пунктам снова.

Вот, вроде все. Надеюсь теперь более понятно.

P.S. у меня не получается реализовать именно запоминание значения остатка, что-бы именно от этого значения вычитание дальше происходило и с записью этого значения в таблицу "діючі".

Re: перенос данных + дни

сделал не большой проект ,  немного грубовато но думаю Вы найдете там нужное

Post's attachments

Attachment icon test.7z 5.59 kb, 247 downloads since 2020-05-06 

Re: перенос данных + дни

капец.
все работает!  круто!

вот только два моментика:
1. а можно попросить вас расшифровать свои скрипты?  (а то я не совсем понимаю что к чему в коде)
2. многое ли мне в своей программе надо поменять, что-бы работало как у вас? (конечно хотелось бы минимум изменений, потому что это удобно для меня, да и много времени и сил потратил на эту программу).


заранее благодарен

10 (edited by sibprogsistem 2020-05-07 06:47:57)

Re: перенос данных + дни

// получаем разницу в днях между выбранными числами

procedure newOtpusk_DateTimePicker2_OnChange (Sender: TObject);
var    TD1,TD2:TDateTime;
        M,Y,D:Integer;
        Year, Month, Day, Year2, Month2, Day2: Word;
begin
    TD1:=Trunc(newOtpusk.DateTimePicker1.Date);
    TD2:=Trunc(newOtpusk.DateTimePicker2.Date);
    Decodedate(TD1,Year, Month, Day );
    Decodedate(TD2,Year2, Month2, Day2 );
    Y:=Year2-Year;
    M:=Month2-Month;

    if Month2<Month then
    begin
        dec(Y);
        M:=(Month2+12)-Month
    end else M:=Month2-Month;

    if Day2<Day then begin dec(M);
    D:=(Day2+30)-Day end else D:=Day2-Day;

  newOtpusk.Edit5.Text:=IntToStr(D); //присваиваем разницу

end;

// от оставшихся дней отпусков отнимаем сколько берет дней
procedure newOtpusk_Edit5_OnChange (Sender: TObject);
begin
  newOtpusk.Edit7.Value:=  newOtpusk.Edit6.Value - newOtpusk.Edit5.Value;   
end;

// получаем  оставшиеся дни отпуска
procedure newOtpusk_ComboBox2_OnChange (Sender: TObject);
var
allvzyal: string;
begin
// с начало берем все дни отпуска в периоде которые уже взял сотрудник и складываем их
  allvzyal:=SQLExecute('SELECT SUM(IFNULL(vzyal,0)) FROM otpuska WHERE id_rabotniki='+newOtpusk.ComboBox2.sqlValue+' AND id_periody_otpuskov='+newOtpusk.ComboBox1.sqlValue+);

//теперь берем все дни отпуска в периоде и отнимаем от них уже взятые дни
  newOtpusk.Edit6.Value:=SQLExecute('SELECT IFNULL(snum,0)-"'+allvzyal+'" FROM periody_otpuskov WHERE id='+newOtpusk.ComboBox1.sqlValue);
end;

Вам нужно сделать новую таблицу с отпусками (сколько взял и сколько осталось) также связать ее с именами сотрудников ...
в моем примере, периоды отпусков также  записаны в отдельную таблицу и связаны с отпусками..

Re: перенос данных + дни

спасибо огроменное.
сейчас буду пытаться внедрить этот код в свою программу...
может и смогу )

12 (edited by stas.kodpi 2020-12-17 10:09:28)

Re: перенос данных + дни

Добрый день
После небольшого перерыва в несколько месяцев все же понадобилось допиливание программы.
Пока продолжаю с того места, где остановился.
Запускаю проект, вношу периоды отпусков, а оно мне в итоге выдает ошибку, что в таблице "периоды" нету колонки "остаток_дни"
хотя все есть и все верно, вроде...
и в табформе, в последней вкладке "вислуга" если я вношу 2 человека, то выдает значения для двоих, а не для конкретно выбранного человека.

прилагаю проект

Post's attachments

Attachment icon Учет отпусков ЦНАП.zip 766.47 kb, 215 downloads since 2020-12-17 

Re: перенос данных + дни

stas.kodpi wrote:

Добрый день
После небольшого перерыва в несколько месяцев все же понадобилось допиливание программы.
Пока продолжаю с того места, где остановился.
Запускаю проект, вношу периоды отпусков, а оно мне в итоге выдает ошибку, что в таблице "периоды" нету колонки "остаток_дни"
хотя все есть и все верно, вроде...
и в табформе, в последней вкладке "вислуга" если я вношу 2 человека, то выдает значения для двоих, а не для конкретно выбранного человека.

прилагаю проект

ostatok_days из таблицы period - это вычисляемое поле, оно формируется ( самостоятельно ), Вы же пытаетесь создать запись в этом поле