Установка статусов состояния дополнительных элементов изделий
Go to navigation
Go to search
Дополнительные элементы изделий имеют особые статусы, которыми тоже можно управлять посредством скриптов. На основании состояния готовности элементов можно устанавливать состояния для изделий. Ниже приведен пример кода.
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.