Как переделать программу под БЭСТ5?
Select messages from
# through # FAQ
[/[Print]\]

-> Программирование в БЭСТ-4

#1: Как переделать программу под БЭСТ5? Author: ewgenLocation: Евгений PostPosted: 15 Aug 2007 07:18
    —
Code:
// Изменение даты проводок дт ... - кт 97 аналитика 000101-000112
// для отпускных будущих периодов
// запускается из книги хозопераций в учете заработной платы
// перед закрытием зарплаты текущего месяца
// В типовой операции в проводке #2 - 97 последние 2 цифры аналитики 97сч
// формируются по формуле "0001"+substr(P21,6,2)
Function main()
PRIVATE aSet,aSetKey,i,a,b,b1,b2,b3,c,m1,v,an,g,g1,g2,g3,nz,nz1,nz2

altd()
dbpush()
aSet:=SaveSet()
aSetKey:=SaveSetKey()

NETUSE("_main",LoadPath()+"main.DBF",,.F.)
_main->(ORDSETFOCUS("TAG_TASK"))
NETUSE("_setting",LoadPath()+"salary\setting.DBF",,.F.)

// nz - массив для хранения номеров отфильтрованных записей
nz:=afill(array(1000),0)
nz1:=afill(array(9))
sayandwait("AU1")
// расчетный месяц (b), следующий месяц (b1), следующий за следующим (b2)
b:=substr(_setting->s_period,6,2)
g:=substr(_setting->s_period,1,4)
sayandwait("AU2")
 if ((val(b)+1)>9.and.(val(b)+1)<13)
  b1:=str(val(b)+1,2,0)
 else
  if (val(b)+1)=13
   b1:="01"
  else
   b1:="0"+str(val(b)+1,1,0)
  endif
 endif

 if ((val(b1)+1)>9.and.(val(b1)+1)<13)
  b2:=str(val(b1)+1,2,0)
 else
  if (val(b1)+1)=13
   b2:="01"
  else
   b2:="0"+str(val(b1)+1,1,0)
  endif
 endif

 if ((val(b2)+1)>9.and.(val(b2)+1)<13)
  b3:=str(val(b2)+1,2,0)
 else
  if (val(b2)+1)=13
   b3:="01"
  else
   b3:="0"+str(val(b2)+1,1,0)
  endif
 endif


// установка года для месяцев b1,b2,b3 - g1,g2 и g3 соответственно
 if b1>b
  g1:=g
 else
  g1:=str(val(g)+1,4,0)
 endif
 if b2>b1
  g2:=g1
 else
  g2:=str(val(g1)+1,4,0)
 endif
 if b3>b2
  g3:=g2
 else
  g3:=str(val(g2)+1,4,0)
 endif

// начальные значения переменных для итогового sayandwait
   nz1[1]:=dtos(EOM(ctod("01/"+b1+"/"+g1)))
  nz1[2]:=0
  nz1[3]:=0
   nz1[4]:=dtos(EOM(ctod("01/"+b2+"/"+g2)))
  nz1[5]:=0
  nz1[6]:=0
   nz1[7]:=dtos(EOM(ctod("01/"+b3+"/"+g3)))
  nz1[8]:=0
  nz1[9]:=0
sayandwait("AU")

 if select("_main")<>0

// установка скопа на 1 месяц по проводкам зарплаты
  _main->(setscope())
  _main->(SETSCOPE(UPPER("TAG_TASK"),"14"+dtos(ctod("01"+"/"+b+"/"+g)),"14"+dtos(EOM(ctod("01/"+b+"/"+g)))))
  _main->(DBgoTOP())

// заполнение массива номерами отфильтрованных записей
  i:=1
  while (_main->(!EOF()))
   nz[i]:=recno()
   i:=i+1
   _main->(dbskip())
  enddo

// цикл по отфильтрованным записям
  i:=1
  while (nz[i]<>0)
   _main->(dbgoto(nz[i]))
   if ((substr(_main->kt_code,4,1)=="1").and.((_main->kt_schet=="97        ").or.(_main->kt_schet=="971       ")))
// sayandwait("12345"+str(_main->summa))
    if (substr(_main->kt_code,5,2)==b1)
     nz1[2]:=nz1[2]+1
     nz1[3]:=nz1[3]+_main->summa
     _main->(RECLOCK())
     _main->( FIELDPUT(FIELDPOS("DATAOPER"),EOM(ctod("01/"+b1+"/"+g1))) )
     _main->(dbunlock())
    endif

    if (substr(_main->kt_code,5,2)==b2)
     nz1[5]:=nz1[5]+1
     nz1[6]:=nz1[6]+_main->summa
     _main->(RECLOCK())
     _main->( FIELDPUT(FIELDPOS("DATAOPER"),EOM(ctod("01/"+b2+"/"+g2))) )
     _main->(dbunlock())
    endif

    if (substr(_main->kt_code,5,2)==b3)
     nz1[8]:=nz1[8]+1
     nz1[9]:=nz1[9]+_main->summa
     _main->(RECLOCK())
     _main->( FIELDPUT(FIELDPOS("DATAOPER"),EOM(ctod("01/"+b3+"/"+g3))) )
     _main->(dbunlock())
    endif

   endif
   i:=i+1
   _main->(DBCOMMIT())
  enddo

  sayandwait("Перенесено на "+nz1[1]+" "+str(nz1[2],3,0)+" записей на сумму "+str(nz1[3],9,2)+" "+;
             "Перенесено на "+nz1[4]+" "+str(nz1[5],3,0)+" записей на сумму "+str(nz1[6],9,2)+" "+;
             "Перенесено на "+nz1[7]+" "+str(nz1[8],3,0)+" записей на сумму "+str(nz1[9],9,2))

 endif

_main->(DBCOMMIT())
_main->(dbCloseArea())

RestSetKey(aSetKey)
RestSet(aSet)
dbpop()
return nil

#2:  Author: Дениска PostPosted: 15 Aug 2007 14:02
    —
А что не работает?

#3:  Author: nordkLocation: Горбунов Константин PostPosted: 15 Aug 2007 14:26
    —
Ну да переложите исходный текст в инетерейс программирования Б5, откомпилируйте. Подключите в Б5.
Описание действий (как это делать) идет в поставке с Б5
Все должно работать

#4:  Author: ewgenLocation: Евгений PostPosted: 15 Aug 2007 15:19
    —
Спасибо!
Я переустановил сегодня БЭСТ (локально) - ушли многие проблемы!
Теперь нормально проходит отладчиком всю программу!

Еще вопросы.
1. Под каждую программку создавать свой проект или достаточно в одном проекте создавать свои процедуры с разными именами и пользоваться в разных модулях?
Как я понимаю присутствие процедуры main() уже необязательно?

2. При открытии *.dbf Visual Fox 7 в БЭСТ5 спрашивает


Что отвечать? Можно открывать рабочие файлы или только смотреть на копии?

3. В БЭСТ4 было сочетание клавиш ALT+Ё - отображалась информация о дате создания и пользователе. Какое сочетание клавиш используется в БЭСТ5?

Спасибо.

#5:  Author: Титов АлександрLocation: Титов Александр Александрович PostPosted: 15 Aug 2007 19:27
    —
Добрый день!

ewgen wrote:
Спасибо!
Я переустановил сегодня БЭСТ (локально) - ушли многие проблемы!
Теперь нормально проходит отладчиком всю программу!

Еще вопросы.
1. в одном проекте создавать свои процедуры с разными именами и пользоваться в разных модулях?
Как я понимаю присутствие процедуры main() уже необязательно?

Да, да.

ewgen wrote:


2. При открытии *.dbf Visual Fox 7 в БЭСТ5 спрашивает


Что отвечать? Можно открывать рабочие файлы или только смотреть на копии?


Видимо, вы копировали таблицы или изменяли структуру не через FoxPro и эти изменения не отразились в контейнере БД Best5.dbc.
Можно поступить следующим образом:
- открыть таблицу в экслюзивном режиме и удалить ссылку на контейнер, поработать с таблицей, но потом сделать индексацию с восстановлением через БЭСТ-5 или через утилиту FoxBro;
- создать БД с помощью например утилиты FoxBro и работать с таблицей в распределенном режиме.
Лучше идти по второму пути. В отличии от Б4 тут надор понимать, что БД (контейнер) best5.dbc должен всегда соотвествовать содержимому БД (составу и структуре таблиц, индексов и пр.)

ewgen wrote:

3. В БЭСТ4 было сочетание клавиш ALT+Ё - отображалась информация о дате создания и пользователе. Какое сочетание клавиш используется в БЭСТ5?

В планах есть журнал регистрации изменений. По срокам пока затрудняю

#6:  Author: ewgenLocation: Евгений PostPosted: 16 Aug 2007 15:12
    —
Quote:
- создать БД с помощью например утилиты FoxBro и работать с таблицей в распределенном режиме.


1. Как создать? В foxBro есть только "Открыть базу данных", "Закрыть базу данных".

2. Для написания своих источников данных для отчетов НЕОБХОДИМ FoxPro? То есть нужно еще покупать и FoxPro 7 или старш

#7:  Author: Титов АлександрLocation: Титов Александр Александрович PostPosted: 16 Aug 2007 16:15
    —
ewgen wrote:
Quote:
- создать БД с помощью например утилиты FoxBro и работать с таблицей в распределенном режиме.


1. Как создать? В foxBro есть только "Открыть базу данных", "Закрыть базу данных".

1. Открыть best5.dbc
2. Перейти в пункт "Утилиты" в верхнем меню
3. Выполнить первый пункт меню "Утилиты", который называется "Создание БД БЭСТ-5"



-> Программирование в БЭСТ-4


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group