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