Ваши комментарии
var CL=CreateObject("CombineList");
var it = CL.CreateIterator();
for (it.SetBegin();!it.IsEnd();it.Next()) //цикл по должностям (it.CurKey() - внутр.код совместительства )
{
int combine=it.CurKey(); }
Пример функции:
TryFindCodeValidOnDate(comb,extCode,kDate) { var Prob = CreateObject("APropBE"); Prob.Init(CLL_TOTAL_SRC,CLL_TOTAL_SUBJECT,CLL_TOTAL_PODR,comb); //инициализируем APropBE вн.кодом совместительства int rowkod[ROWMAX];//массив с номерами строк int cntrow=poiskosnkodProp(Extern_To_Intern(extCode),rowkod,0,Prob);//получаем список строк с кодом==kod for (int row=0; row<cntrow; row++) { double ikod=GetCode(rowkod[row]); var dbRow=KDateFromD(GetBegDate(rowkod[row])); var deRow=KDateFromD(GetEndDate(rowkod[row])); if (dbRow.IsValid() && dbRow.GT(kDate)) //вид еще не открыт continue; if (deRow.IsValid() && deRow.LT(kDate)) //вид закрыт continue; return row; } return -1; }
Использовать так:
var d=KDateFromInt_WithDay(1,mrasch); if (TryFindCodeValidOnDate(comb,extCode,d)==-1) //вид на 1 первое число расчетного месяца не найден.. { //код для открытия вида }
Существование за какой период нужно проверить ( за расчетный месяц?) ? Как это планируется использовать?
Почему не получится? Цикл по месяцам нужного периода, суммируем месячные значения и вуаля!
Есть переменная InternCodE, в которой находится внутренний точный код вида печатаемой строки.
Через GetShifrZatrRow(double IntCode) можно получить шифр затрат...
Добавить печать значения ШЗ можно например в comexcel.S в функции StringExcel(Part)
Например:
sprintf(cell,"S%d",NumStr); tWriteStringToCell(cell,OemToAnsi(ts1)); sprintf(cell,"T%d",NumStr); tWriteStringToCell(cell,OemToAnsi(arg)); }
Заменяем на
sprintf(cell,"S%d",NumStr); tWriteStringToCell(cell,OemToAnsi(ts1)); sprintf(cell,"T%d",NumStr); tWriteStringToCell(cell,OemToAnsi(arg)); if (kod==305) //ШЗ печатаем только для 305 вида { sprintf(cell,"U%d",NumStr); tWriteStringToCell(cell,OemToAnsi(GetShifrZatrRow(InternCodE))); } }
GetNorma(what,mAbs);
где what:
- 0 – нopмa paбoчих днeй зa первую пoлoвину месяцa
- 1 – нopмa paбoчиx днeй месяца
- 2 – нopмa paбoчиx чacoв месяца.
Что "ваяете", если не секрет?
Надо написать что то вроде:
int cntDays=CountDaySimv("01.01.2018",""20.02.2018","2",0,1);
CountDaySimv(DateBeg,DateEnd,StrSimv,Tip,bNorm);
/////////////////////////////////////////////////////////////////////////
// Подсчитывает количество дней помеченных символами StrSimv в табеле
// работника между датами [DateBeg,DateEnd]
// Отличия от функции dney_v_tab в том что дата начала и конца периода
// могут находится в разных месяцах!
// Tip = 0 - подсчитывает точное количество дней
// 1 - отвечает на вопрос есть ли хотя бы один!
// 2 - отвечает на вопрос есть ли хотя бы один, но при этом просмотр
// ведет с даты конца.
// В том случае, если определяется "есть хотя бы один", возвращается кол-во дней
// до этого "одного" (включая дату от которой велась проверка!).
// bNorm - смотрим не табель, а нормативный график
там сложность в том, что "квиток" формируется на всех в одной книге...
А если хотим отправить на почту - надо формировать квитки с разбивкой по сотрудникам ( каждый сотрудник в отдельной книге)
Ну т.е. сделать "быстро" не получится.
Немного "отойду" от отчетности и посмотрю..
Excel квитки по почте не отправляются
Сервис поддержки клиентов работает на платформе UserEcho
pos_tvx- позиция вида в ТВХ
получить ее можно через