Встановлення статусів стану окремих елементів конструкцій усередині замовлення

Матеріал з ADGroupWiki
Перейти до навігації Перейти до пошуку

Усередині замовлення кожному елементу конструкції - так само як і всьому замовленню - може бути прописано певний стан.

Приклад встановлення етапу виконання для окремого елемента конструкції (або для всіх елементів конструкції) наведено нижче.

uses SysUtils;         
procedure Set_Elem_State(zk_id, izd_id, okpi_num, state, value: integer);
// встановлює стан одному або всім елементам усередині конструкції зазначеного замовлення
// zk_id - ідентифікатор замовлення
// izd_id - ідентифікатор виробу
// okpi_num - номер елемента виробу (нумерація починається з 0) для встановлення всім елементам слід передати -1
// state - номер етапу (1..16 - відповідають номерам у списку)
// value - стан (0 - не встановлено, 1 - потрібен, 2 - у роботі, 3 - виконано)
var
  zk: TZakaz; // об'єкт замовлення
  izd: TIzdTyp; // об'єкт конструкції
  okpi: TOneKonProcessItem; // об'єкт виробу всередині конструкції
  i, j: integer; // лічильники
  flag: boolean; // прапор необхідності збереження внесених змін
begin
  flag := false; // змін не було
  zk := gd.Zakazes.Items.GetById(zk_id); // отримуємо об'єкт замовлення за ідентифікатором
  if assigned(zk) then // якщо замовлення знайдено
  begin
    gd.Zakazes.ReloadNew2(zk, true);
    // завантажуємо замовлення повністю з бази (щоб уникнути втрати деяких даних із нього)
    izd := zk.Izd.Items.GetById(izd_id); // отримуємо об'єкт конструкції
    if assigned(izd) then // якщо конструкцію отримано
    begin
      if (okpi_num = -1) then // блок встановлення стану для всіх елементів конструкції
      begin
        for j:=0 to (izd.OneKonProcessItems.Count - 1) do // йдемо по всіх виробах певної конструкції
        begin
          okpi := izd.OneKonProcessItems.GetByNum(j); // отримуємо інформацію про виріб
          okpi.KonState.SetStateById(state, value); // встановлюємо потрібний стан
          flag := true; // відбулися зміни
        end;    
      end
      if (okpi_num > -1) then // блок встановлення стану одному елементу конструкції
      begin
        okpi := izd.OneKonProcessItems.GetByNum(okpi_num); // отримуємо інформацію про виріб
        if assigned(okpi) then
        begin
          okpi.KonState.SetStateById(state, value); // встановлюємо потрібний стан
          flag := true; // внесено зміни
        end else
          ShowMessage('Елемент конструкції не знайдено');                   
      end
    end else
      ShowMessage('Конструкція не знайдена'); // повідомляємо про проблему; 
    if flag then // якщо були внесені зміни
    begin
      gd.Zakazes.Items.Update(zk); // збережемо їх у базу
      ShowMessage('Робота успішно завершена'); // повідомляємо про позитивний результат 
    end;
  end else    
    ShowMessage('Замовлення не знайдено'); // повідомляємо про проблему
end;
begin
  Set_Elem_State(61271, 2, -1, 6, 1);
end.