Ваши комментарии

Ошибка. Исправим.

В инструкции написано:

// В настройке "Столбец для выборки сумм" нужно указать номер стобца 
// Виды начислений должны быть помечены символом 1 в этом столбце. 

Столбцы для ЗП-СОЦ указываются в 3 настройках:

"Настройка -> 5.  Настройки таблиц и форм печати -> >> Отчетность по статистике -> >> Формы ЗП-хх -> 3. Настройки для формы 3П-соц":


  1. "Столбец для бюджетов всех уровней" - то что попадет в графу 6
  2. "Столбец для ОМС" - то что попадет в графу 7
  3. "Столбец для приносящей доход деятельности" - то что попадет в графу 8
обычно видно куда этот минус нужно "впихнуть"

Ну "обычно видно" - это человеку обычно видно. А как научить видеть программу? Расскажите четкие правила по которым видно куда надо "впихнуть".

У вас блок отрицательный может быть потому что не хватило положительных сумм по другим людям чтобы перекрыть отрицательную. Все суммы перетаскивать в другой блок (и положительные и отрицательные) или только часть отрицательных (для которых не хватило положительных), или все отрицательные? Все это решается бухгалтером в каждом конкретном случае с оглядкой на платежки по НДФЛ.
Да, блок может быть отрицательным, но была платежка по НДФЛ к этому блоку по положительным работникам. Значит надо перекидывать только отрицательные суммы, а положительные оставить.


 а добавлять 2 строки (в таблице???) с фиктивным л/с в нужные блоки - в минусовой блок строку с плюсовыми суммами, в плюсовой блок - строку с минусовыми суммами. 

?! В какой блок то совать строку с минусовыми суммами? Ведь такого же блока (с таким же набором дат) нет + оперировать надо на уровне целого блока, а не на уровне записи по одному человеку. 


То есть это какая-то дополнительная обработка после того как отчет создан и мы хотим спрятать минусы. Ну то есть это что-то вроде вызов действия "спрятать минусы" на готовом отчете.

Такая функция поможет:

UsrGetNormPeriod(what,&D1,&D2,numcalend)
{
   int am1 = KDateFromStr(D1).GetAbs();
   int am2 = KDateFromStr(D2).GetAbs();
   int tmrasch = mrasch;
   int tmp = nkalend;
   if ( nkalend!=numcalend && numcalend>0 )
      rwnorma(numcalend,0);
   double Total = 0.;
   for (int am=am1; am<=am2; ++am )
   {
      mrasch=am;
      s118();
      Total += norm(what);
   }
   mrasch=tmrasch;
   if ( nkalend!=tmp )
   {
      rwnorma(tmp,0);
      s118();
   }  
   return Total;
}

Пример вызова: 

return UsrGetNormPeriod(1,"01.01.2018","31.12.2018",2);


в поставку добавили параметр 0 - по принадлежности, 1 - по начислению 

CL_COL надо тоже убрать из параметров.

Правильный флаг:  CL_EXACT | CL_MV | CL_NACH для начислений и CL_EXACT | CL_MV | CL_UD - для удержаний. В противном случае если будет несколько строк с одинаковым кодом, суммы по этому коду удвоятся.

Старый надо оставить как "базу знаний" там накопился достаточно большой объем вопросов-ответов, которые актуальны и сейчас. Поэтому в режиме "только для чтения", старый форум был бы полезен.

Скорее всего он перестал им категорически не нравится после того как отпускные перестали неожиданно быть зарплатой и стали облагаться по месяцу начисления.

s1001simv_mv выборку по источникам делает (в данном случае по всем источникам). Если у вас источники - то взлетит если вместо 0 перед ST_ALIMENT укажете mrasch.

Если же исп.должности нужны то 

var CurProp = GetCurPropCountLS();
info.n1 = s1001simv_mv("1",info.d1,info.d2,mrasch,ST_ALIMENT,2, CL_MV | CL_COL | CL_NACH, CurProp);



активнее голосуем и отписываемся в комментариях :)

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