Delphi 11 - нужна помощь

Здравствуйте, я новичок в программировании и учусь на 2-ом курсе. К сожалению в процессе учебы у меня сформировался на сегодня слабый опыт работы по теме множеств и их записи. Пожалуйста кто может помочь новичку с задание по лабораторной работе : фирма реализует изделия клиентам. Имеются следующие данные о продажах: изделие, цена, клиент, количество, дата продажи ( вывести сведения о продажах с подсчетом вырученной суммы в порядке возрастания даты продажи, для заданного изделия вывести сведения о продажах его клиентам в порядке убывания количества проданных изделий. Рассчитать общую вырученную сумму от продаж изделия).
Я понимаю что по сути прошу написать код с нуля , но я вот уже 2 дня подряд бьюсь над этой задачей , в плане реализации записи, и как итог я столкнулся с тем что Delphi имеет строгую типизацию из-за чего мои попытки написать код рушились на стадии вывода элементов множества по средством использования проверки с использованием диапазона значений в цикле. В конце в терминале выводились лишь символы или ошибка. Из-за этого я постоянно закрывал среду разработки без сохранения проекта (это было на эмоциях).
Пожалуйста можете помочь.

Так а в чем именно проблема, чем типизация мешает? :thinking:

Автосохранение в настройках можно включить )

Если быть точным , то итог у меня получился такой

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
      date =  set of 1..31;
      quantity= set of 1..100;
      d_1 = array[1..100] of date;
      q_1= array[1..100] of quantity;


 {В константах клиенты и установленная цена на общие изделие n-ой фирмы}
const clients:array[1..3] of string [100] = ('Иванов И.П','Федоров В.С','Семнов С.С' );
       price = 100 ;
 {Продедуры ввода информациии о клиенте:количество купленного и дата покупки}
procedure vvod_1(var a:date);
var a_1,i:byte;
  begin
    a:=[];
    for i:=1 to 3 do
         begin
           write('Дата покупки изделия клиентом ',' ',clients[i],' :');
           readln(a_1);
           if a_1 in a then a:=a+[a_1]
         end;
  end;
procedure vvod_2(var b:quantity);
var b_1,i:byte;
   begin
     b:=[];
     for i:=1 to 3 do
       begin
          write(' количество купленного изделия клиентом ',' ',clients[i],' :');
          readln(b_1);
          if b_1 in b then b:=b+[b_1]
       end;

   end;
 procedure print(a:date;b:quantity);
   var i:byte;
       begin
         for i:=1 to 3 do
          begin
            if i in a then write(clients[i]);if i in b then write(clients[i]);
            writeln;
          end;

       end;
procedure  rez_1(a:d_1;b:q_1; var s:date;g:quantity);
      var z,y,i:byte;
          begin
            y:=price;
            s:=[1..31];
            g:=[1..100];
              for i:=1 to 3 do
                begin
                  g:=g*a[i];
                end;

          end;

var a:d_1;b:q_1;
     i:byte;
     c:date;n:quantity;
begin
 write('---------------------');
 for i:=0 to 1 do  vvod_1(a[i]);
 for i:=0 to 1 do  vvod_2(b[i]);
 readln;

end.

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

Зачем set? Просто число, для которого не надо и свой тип объявлять.

И для дат есть например TDateTime.

лучше сделать record (или класс) со всеми полями, и один массив объектов этого типа.