Встановлення статусів стану додаткових елементів виробів
Перейти до навігації
Перейти до пошуку
Додаткові елементи виробів мають особливі статуси, якими теж можна керувати за допомогою скриптів. На підставі стану готовності елементів можна встановлювати стани для виробів. Нижче наведено приклад коду.
uses SysUtils, Shared; var g_dsr: TDopolnenieStateRec; // объект статуса в котором будем менять состояние procedure UpdateKonState(zk_id, izd_id, okpi_num, state_id: integer); // обновляет состояние state_id изделия var zk: TZakaz; // заказ izd: TIzdTyp; // конструкция okpi: TOneKonProcessItem; // изделие ws: TZakazStateRec; flag, need_update: boolean; begin // умеем менять только статусы с такими номерами if not ((state_id = 9) or (state_id = 16)) then exit; 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 okpi := izd.OneKonProcessItems.GetByNum(okpi_num); // получаем информацию об изделии if assigned(okpi) then // если изделие есть begin case state_id of // устанавливаем флаг готовности всех элементов рассматриваемого этапа 9: flag := izd.DopolnenieSteklIsProduced(okpi.Id); // остекление готово 16: flag := izd.DopolnenieIsProduced(okpi.Id); // дополнительные элементы готовы end; need_update := false; // флаг необходимости обновления заказа в базе ws := okpi.KonState.GetById(state_id); // получаем текущее состояние этапа case ws.StateNew of // в зависимости от текущего состояния этапа 0, 1, 2: // <нет>, "нужен", "в работе" begin if flag then // в случае готовности begin okpi.KonState.SetStateById(state_id, 3); // устанавливаем состояние "выполнен" для всего изделия need_update := true; end; end; 3: // "выполнен" begin if not flag then // в случае НЕготовности begin okpi.KonState.SetStateById(state_id, 2); // делаем откат из состояния "выполнен" до состояния "в работе" need_update := true; end; end; end; if need_update then // если были внесены изменения и требуется обновление заказа gd.Zakazes.Items.Update(zk); // обновляем end; end; end; end; procedure GetDop(zk_id, izd_id, okpi_num, IdDop: integer; var item: TDopolnenieStateRec); // получение записи статусов для элемента изделия по его IdDop var zk: TZakaz; // заказ izd: TIzdTyp; // конструкция okpi: TOneKonProcessItem; // изделие begin 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 okpi := izd.OneKonProcessItems.GetByNum(okpi_num); // получаем информацию об изделии if assigned(okpi) then // если изделие есть begin if okpi.KonState.IdDopToNum(IdDop)>=0 then // если информация о статусах есть begin item := okpi.KonState.GetByIdDopT(IdDop); // по id дополнения получаем его статусы end else begin item := okpi.KonState.AddDopolnenieState(IdDop); // в противном случае создаем для дополнения с указанным IdDop пустые статусы gd.Zakazes.Items.Update(zk); end; end; end; end; end; procedure SetDop(zk_id, izd_id, okpi_num, IdDop: integer; item: TDopolnenieStateRec); // устанавливает для элемента изделия с IdDop статусы var zk: TZakaz; // заказ izd: TIzdTyp; // конструкция okpi: TOneKonProcessItem; // изделие begin 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 okpi := izd.OneKonProcessItems.GetByNum(okpi_num); // получаем информацию об изделии if assigned(okpi) then // если изделие есть begin okpi.KonState.SetByIdDopT(IdDop, item); // по id дополнения устанавливаем его статусы gd.Zakazes.Items.Update(zk); // обновляем заказ в базе UpdateKonState(zk_id, izd_id, okpi_num, 9); // обновляем статус остекления UpdateKonState(zk_id, izd_id, okpi_num, 16); // обновляем статус готовности дополнительных элементов end; end; end; end; begin GetDop(1, 2, 0, 2, g_dsr); g_dsr.Produced := true; g_dsr.ProducedDate := now; SetDop(1, 2, 0, 2, g_dsr); end.