Установка статусов состояния отдельных элементов конструкций внутри заказа

Материал из 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.