Author Topic: Формирование отчетов в 1С  (Read 1661 times)

0 Members and 1 Guest are viewing this topic.

Lucius

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Формирование отчетов в 1С
« on: September 12, 2019, 05:43:15 PM »
Добрый вечер!

Есть код на 2+ тысячи строк + библиотека на 1500+
Формируется выторг за этот месяц,  прошлый год и т.д. по времени
По максимуму повторения процессов занес в библиотеку,
но вот сам блок закручивания выторга, выставления периодов приходится дублировать с изменением периодов и названия для экспорта.



Проблема в слабой стабильности( вылетело окно обновления винды - все пропало, зависла база, задержалось экспортирование, где-то почему-то не сработало - то же самое)
Частично проверок выполнения действий наделал, повставлял эти сабы на 2000+ строчек, но   не уверен что лучший вариант (хотя и рабочий)

Возможно кто-то настраивал ежедневную рутину такого плана.
Нужен совет! В какую сторону посмотреть для оптимизации кода? Массив пока не могу продумать...



 
Code: [Select]
 

//Период2018
SUB(10Beg)
   KEYPRESS(#0)
   WAITMS(500)
   KEYPRESS(#1)
   WAITMS(500)
   KEYPRESS(#RIGHT)
   WAITMS(500)
   KEYPRESS(#1)
   WAITMS(500)
   KEYPRESS(#0)
   WAITMS(500)
   KEYPRESS(#RIGHT)
   WAITMS(500)
   KEYPRESS(#DOWN)
END_SUB
SUB(10End)
   KEYPRESS(#DOWN)
   WAITMS(500)
END_SUB
SUB(20_310Beg)
   KEYPRESS(#0)
   WAITMS(500)
   KEYPRESS(#1)
   WAITMS(500)
   KEYPRESS(#RIGHT)
   WAITMS(500)
   KEYPRESS(#1)
   WAITMS(500)
   KEYPRESS(#1)
   WAITMS(500)
END_SUB
SUB(PostBeg)
   KEYPRESS(#0)
   WAITMS(500)
   KEYPRESS(#1)
   WAITMS(500)
END_SUB

///////////////////////////////////////////////////////////////////////////////
////////////////////////////// ФОРМИРУЕМ Поступления   ////////////////////////
///////////////////////////////////////////////////////////////////////////////




//==============================================================================



SUB(MORNING)
   begin:
   
   reopen()
   
   
   
   //==============================================================================
   
   LOGWRITE("Таймер сработал. запуск")
   WAIT(1)
   HWN()
   //присвоили переменные с кодами всех окон
   
   WAITMS(100)
   
   
   // открываем отчет выторг
   пост()
   wait(3)
   GETSCREEN
   COLORMODE(6)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("Картинки ОП\","Отчет.bmp"),-1,70)  //ищем границы отчета
      LOGWRITE("+найден открытый отчет выторга")
   Else
      LOGWRITE("1НЕ найден открытый отчет выторга")
      scr()
      halt
   end_if
   $X1=0
   $X1=$_return1
   $Y1=0
   $Y1=$_return2
   logwrite("X1=",$X1)
   logwrite("y1=",$Y1)
   $X2=0
   $X2=$X1+400
   $Y2=0
   $Y2=$Y1+500
   logwrite("X2=",$X2)
   logwrite("y2=",$Y2)
   // присвоили переменные - границы окна настройки выторга
   
   wait(1)
   LCLICK($X1+100, $Y1+30)
   wait(1)
   ///Вкладка ДЕТАЛЬНО


////////////ФОРМИРУЕМ ТЕКУЩИЕ  для выторга /////////////////////////////
   
   //открыть дату окончания
   MOVE($X1+282, $Y1+95)
   waitms(100)
   LCLICK($X1+282, $Y1+95)
   
   //выставить сегодня
   GETSCREEN($x1,$y1,$x1+280,$y1+280)
   COLORMODE(5)
   IF_PICTURE_IN ($x1,$y1, $x1+280,$y1+280, STRCONCAT("Картинки ОП\","сегодня.bmp"),-1,80)//дата   окончания на сегодня
      waitms(900)
      lclick($_return1+10, $_return2+5)
      waitms(900)
      LCLICK($_return1, $_return2-148)
      waitms(900)
     
      10End()
     
   Else
      LOGWRITE("8НЕ СМОГ найти день окончания-сегодня")
      scr()
   end_if  // обнулили дату окончания к  закрытому дню
   
   //   найдем начальный период
   waitms(500)
   LCLICK($X1+90, $Y1+95)
   waitms(500)
   GETSCREEN($x1,$y1,$x1+250,$y1+260)
   COLORMODE(5)
   IF_PICTURE_IN ($x1,$y1,$x1+250,$y1+260, STRCONCAT("Картинки ОП\","сегодня.bmp"),-1,80)//дата   начала на сегодня
      waitms(900)
      LCLICK($_return1, $_return2)
      waitms(900)
      LCLICK($_return1, $_return2-148)
      waitms(900)
   Else
      LOGWRITE("НЕ СМОГ найти день начала-сегодня")
      scr()
   end_if
   
   PostBeg()
   
   
   
   //обнулить отдел,  подставить галку подгруппа
   waitms(500)
   LCLICK($X1+351, $Y1+258)
   waitms(500)
   LCLICK($X1+351, $Y1+308)
   waitms(500)
   LCLICK($X1+351, $Y1+335)
   waitms(500)
   //галка поддепартамент
   LCLICK($X1+21, $Y1+414)
   waitms(500)
   
   //сформировать
   MOVE($x1+50,$y1+450)
   waitms(500)
   LCLICK($x1+50,$y1+450)
   
   
   wait(1)
   LoadWait()
   
   wait(1)
   
   moneyIncome()
   
   wait(1)
   KEYDOWN (#CTRL)
   WAITMS (50)
   KEYDOWN (#E)
   WAITMS (50)
   KEYUP (#E)
   WAITMS (50)
   KEYUP (#CTRL)
   wait(2)
   
   saveAs()
   
   wait(1)
   toclip("С\Выторг\текущий ")
   WAITMS(50)
   KEYDOWN (#CTRL)
   WAITMS (50)
   KEYDOWN (#V)
   WAITMS (50)
   KEYUP (#V)
   KEYUP (#CTRL)
   WAITMS (50)
   KEYPRESS(#BACKSPACE)
   WAITMS(500)
   KEYPRESS(#ENTER)
   WAITMS(500)
   $smena=0
   $smena=wndfind("Подтвердить сохранение в виде")
   IF($smena > 0)
      WNDBUMP( $smena)
      KEYPRESS(#LEFT)
      WAITMS(500)
      KEYPRESS(#ENTER)
   ELSE
      LOGWRITE("!!!!!!!!!!!ОКНО ЗАМЕНЫ НЕ НАЙДЕНО,", $smena)
   END_IF
   wait(10)
   // заэкспортировали
   ExpWait()
   //проверили что уже заэкспортировался
   wait(5)
   wndbump($P1)
   wait(1)
   wndbump($P1)
   waitms(500)
   
   close()
   
   moneyIncomeClosed()
   
   wait(1)
   LOGWRITE("Выторг Текущие закручены")
   
   //////////////////////////////////////////////////////////////////////////////
   ////////////////////////  ЗАКРУТИЛИ ТЕКУЩИЕ//////  ///////////////////////////
   //////////////////////////////////////////////////////////////////////////////

RemmGen

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Формирование отчетов в 1С
« Reply #1 on: September 12, 2019, 06:57:28 PM »
Проблему отклика я решаю несколькими проверками через циклы for или WHILE
Для примера нажатие кнопки Esc делаем проверку на открытие окна и остановку цикла. Если что-то не сработало, цикл запускает еще один клик и ожидает проверку. Если задать переменную
$Esc = 0 // бесконечное ожидание
будет пауза до выполнения отклика на бесконечный клик кнопки Esc....
Code: (clickermann) [Select]
//--------------------------------  кнопка Esc
FOR($Esc=0, $Esc < 10)
KEYPRESS(#Esc) // кнопка Esc
WAITMS(1000)
GETSCREEN
$bEsc = PXLCOUNT($X-20,$Y+45, $X+20, $Y+55, 3325695) // кнопка Esc   
IF($bEsc > 5)
$Esc = 100
// $Esc = 0 // бесконечное ожидание
END_IF
WAITMS(200)
END_CYC
//--------------------------------