0
На рассмотрении

Функция разноски "ЗАМЕНА_БЗ"

Александр Корюков 11 месяцев назад в Прочее обновлен 11 месяцев назад 2

Добрый день.

Функции "ЗАМЕНА_БЗ" закрывает старую строку, но разносит строку с новым базовым значением по основному месту, источнику и т.д. Уважаемые разработчики, есть ли аналог этой функции, которая учитывает набор реквизитов класса APropBE заменяемой строки при разноске новой? Или можно как-то задать фильтрацию в таблице разноски?

Script
На рассмотрении

ЗАМЕНА_БЗ работает только по коду.
А чем вас не устраивает обычная таблица, в которую добавить стандартные столбцы: код вида, БЗ, источник, объект и т.д.?

Как вариант, всегда можно написать скрипт, который выполнит всю нужную логику по разноске (найдет существующие строки, проанализирует их свойства, если надо откроет новую строку и наконец-то поместит новое БЗ (в подходящую старую или в открытую новую).

Посмотрите, пожалуйста, этим кодом лицевые не испорчу.

//РАЗНОСКА ВИДА С НОВЫМ BZ
RaznNewVid(Extern_Cod,NewDate,NewSum,Base)
{
 int rowkod[ROWMAX];//массив с номерами строк
 var Prop = CreateObject("APropBE");
 int cntrow=poiskosnkodProp(Extern_To_InternE(Extern_Cod),rowkod,1,Prop); //поиск по точному коду
 var NewD=CreateObject("KDate");
 NewD.SetDate(static_cast_to_string(NewDate)); //дата начала деяствия нового вида
 
  if(cntrow > 0)
  {
   var DatB = CreateObject("KDate"); DatB.SetDateD(GetBegDate(rowkod[0])); //дата начала действия строки
   var DatE = CreateObject("KDate"); DatE.SetDateD(GetEndDate(rowkod[0])); //дата конца действия строки 
   var DatEnew = CreateObject("KDate"); DatEnew.SetDateD(NewD.GetDouble()); // новая дата конца действия строки

   double ikod=GetCode(rowkod[0]);  //точный внутренний код строки

   //фильтруем строки не действующие на новую дату
   if (DatB.LT(NewD) && DatE.GT(NewD)) //дата_начала вида меньше новой даты и дата_окончания больше новой даты
   {
    PutEndDate(rowkod[0],DatEnew.Dec()); //заменяем дату конца на новую дату минус 1 день
    PutBase(rowkod[0],Base); //разносим БЗ старой строки из таблицы разноски
    PutSumm(rowkod[0],colc1,Base); //разносим сумму в старую строку из таблицы разноски 
   
    toMatrLS();
    struct SumElemS E_N;
      E_N.summa=atof(NewSum);
      E_N.rv=0;
      E_N.m=mrasch;
      E_N.mv=mrasch;
      E_N.mp=INVALID_MONTH_VALUE;
      E_N.dayp=INVALID_DAY_VALUE;

    double NewCode = PutSummProp(Extern_To_Intern(Extern_Cod),E_N,GetPropOfRow(ikod),BE_FREESUM); 
    toUseal(1);
 
    if(NewCode > 0)
    {
      int rowkodN[ROWMAX];//массив с номерами строк
      int cntrowN=poiskosnkodProp(NewCode,rowkodN,1,GetPropOfRow(NewCode));
      if(cntrowN > 0) 
      {
        PutBegDate(rowkodN[0],NewD.GetDouble()); //дата начала новой строки
        PutBase(rowkodN[0],NewSum); //БЗ новой строки
      }
      return NewCode; 
    }
   }
  } 
  return 0;
}

Сервис поддержки клиентов работает на платформе UserEcho