You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Задача - В соглашении есть галочка RecordPurchasePrices, эта же галочка есть в документ Purchase Invoice.
Надо при изменении соглашения - проставлять эту галочку в документ.
Модель MVC.
В модуле ControllerClientServer_V2 ищем функцию BindAgreement, т.е. смотрим какая функция выщывается при изменении соглашения в документе, и ищем ее Bind.
В самой функции ищем где у нас ключ структуры Binding будет нужным нам документом. В значении структуры - указаны шаги, которые будут выполнены. Наша задача описать новый шаг, который будет заменять эту галочку. В нашем случае назовем его StepChangeRecordPurchasePricesByAgreement, структура такая - "Step" + что делаем "Change" + что меняем "RecordPurchasePrices" + на основании чего "ByAgreement".
Итог такой:
Так как реквизит новый, то теперь надо создать все нужные функции. Для этого у нас есть регионы, каждый регион описывает один реквизит. Копируем регион который нам больше всего подходит, в нашем случае это регион PRICE_INCLUDE_TAX, и для начала просто переименовываем все вхождения, в итоге выйдет вот такой регион:
#RegionRECORD_PURCHASE_PRICES// RecordPurchasePrices.OnChange - Эта функция нам тоже не нужна, так как изменение этой галочки нам отлавливать не надо, поэтому мы ее просто удаляем.ProcedureRecordPurchasePricesOnChange(Parameters) ExportBinding= BindRecordPurchasePrices(Parameters);
ModelClientServer_V2.EntryPoint(Binding.StepsEnabler, Parameters);EndProcedure// RecordPurchasePrices.SetProcedureSetRecordPurchasePrices(Parameters,Results) ExportBinding= BindRecordPurchasePrices(Parameters);
SetterObject(Binding.StepsEnabler, Binding.DataPath, Parameters, Results);EndProcedure// RecordPurchasePrices.GetFunctionGetRecordPurchasePrices(Parameters)
Return GetPropertyObject(Parameters,"RecordPurchasePrices");EndFunction// RecordPurchasePrices.BindFunctionBindRecordPurchasePrices(Parameters)
DataPath="RecordPurchasePrices";Binding=New Structure();// Тут обратить внимание, на то что это шаг всегда финальный, т.е. при измении этой галочки - в документе ничего не меняется.// Поэтому мы не подставляем сюда следующий шаг, а просто пишем BindVoid. Это служебная функция-зашлушка.Return BindSteps("BindVoid", DataPath, Binding, Parameters,"BindRecordPurchasePrices");EndFunction// RecordPurchasePrices.ChangeRecordPurchasePricesByAgreement.StepProcedureStepChangeRecordPurchasePricesByAgreement(Parameters,Chain) Export
Chain.ChangeRecordPurchasePricesByAgreement.Enable =True;If Chain.Idle ThenReturn;EndIf;
Chain.ChangeRecordPurchasePricesByAgreement.Setter ="SetRecordPurchasePrices";Options= ModelClientServer_V2.ChangeRecordPurchasePricesByAgreementOptions();
Options.Agreement = GetAgreement(Parameters);// Вот тут мы получаем текущее значение этого реквизита, оно нам понадобится позже.
Options.CurrentRecordPurchasePrices = GetRecordPurchasePrices(Parameters);
Options.StepName ="StepChangeRecordPurchasePricesByAgreement";
Chain.ChangeRecordPurchasePricesByAgreement.Options.Add(Options);EndProcedure#EndRegion
Надо определить - какие параметры нам нужны для определения этой галочки. В нашем случае все просто - нам надо только соглашение.
Идем в общий модуль ModelClientServer_V2, там ищем регион CHANGE_PRICE_INCLUDE_TAX_BY_AGREEMENT и также копируем его рядом, и переименовываем все:
#RegionCHANGE_RECORD_PURCHASE_PRICES_BY_AGREEMENT// В этой процедуре мы описываем - какие поля нам нужны для получения данных в шагах выше.FunctionChangeRecordPurchasePricesByAgreementOptions() ExportReturn GetChainLinkOptions("Agreement, CurrentRecordPurchasePrices");EndFunction// Эта функция должны вернуть значение самой галочкиFunctionChangeRecordPurchasePricesByAgreementExecute(Options) Export// это условие испольует проверку текущих значений, т.е. мы можем смотреть - какое значение было у этого реквизита ранее, на момент первого изменения. Сейчас условие смотрит - если соглашение очистили, то система оставит то значение галочки, которые было на момент очистки.IfNotValueIsFilled(Options.Agreement) ThenReturn Options.CurrentRecordPurchasePrices;EndIf;AgreementInfo= CatAgreementsServer.GetAgreementInfo(Options.Agreement);Return AgreementInfo.RecordPurchasePrices;EndFunction#EndRegion
Далее смотри функцию CatAgreementsServer.GetAgreementInfo и там в запрос добавляем реквизит. Т.е. тут происходит логика вычисления значения реквизита.
Последний этап - надо зарегистрировать шаг StepChangeRecordPurchasePricesByAgreement, для этого в этом же модуле ищем функцию GetChain, и по аналогии с шагом PriceIncludeTax - добавляем свою цепочку:
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
Задача - В соглашении есть галочка RecordPurchasePrices, эта же галочка есть в документ Purchase Invoice.
Надо при изменении соглашения - проставлять эту галочку в документ.
Модель MVC.
StepChangeRecordPurchasePricesByAgreement
, структура такая - "Step" + что делаем "Change" + что меняем "RecordPurchasePrices" + на основании чего "ByAgreement".Итог такой:
PRICE_INCLUDE_TAX
, и для начала просто переименовываем все вхождения, в итоге выйдет вот такой регион:Идем в общий модуль
ModelClientServer_V2
, там ищем регионCHANGE_PRICE_INCLUDE_TAX_BY_AGREEMENT
и также копируем его рядом, и переименовываем все:StepChangeRecordPurchasePricesByAgreement
, для этого в этом же модуле ищем функциюGetChain
, и по аналогии с шагом PriceIncludeTax - добавляем свою цепочку:Тут мы регистрируем обработчик, можно было бы без этой регистрации, но тогда надо будет в 1С вызываеть Execute функцию, чего хотелось бы избежать.
Теперь будет работать модель и при изменении партнера, который изменит соглашение - отрабтает код, котоырй установит эту галочку.
Beta Was this translation helpful? Give feedback.
All reactions