Code: Select all
*************************
*** Pedro ***************
*set device to printer
*set printer on
*set printer to ("Res_naz.txt")
*set console off
*...Print commands
*Set device to screen
*Set printer off
*Set printer to
*Set console on
*************************
// Загрузить M_PathAppl с диска
M_PathAppl = DC_ARestore("_PathAppl.arx")
*mFileName = M_PathAppl+"Res_naz.txt"
 mFileName = "Res_naz.txt"
*MsgBox(mFileName)
set device to printer
set printer on
set printer to (mFileName)
set console off
?"РЕЗУЛЬТАТЫ НАЗНАЧЕНИЙ ОБЪЕКТОВ РАСПОЗНАВАЕМОЙ ВЫБОРКИ НА КЛАССЫ"
?DTOC(DATE())+SPACE(2)+TIME()+SPACE(43)+"г.Краснодар"
Ln = 74
?REPLICATE("=",Ln)
mStr = "|ХАРАКТЕРИСТИКИ ЭФФЕКТИВНОСТИ НАЗНАЧЕНИЯ:"                                              ;?mStr+SPACE(Ln-1-LEN(mStr))+"|"
?REPLICATE("~",Ln)
mStr = "|СУММА ПО ВСЕМ КЛАССАМ:"                                                                ;?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Начальный ресурс класса:............................ " +ALLTRIM(STR(Ar_field[ 3],17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Остаток ресурса после назначений объектов на классы: " +ALLTRIM(STR(Ar_field[ 4],17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Суммарное сходство:................................. " +ALLTRIM(STR(Ar_field[ 6],17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Фактические суммарные затраты:...................... " +ALLTRIM(STR(Ar_field[ 7],17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Средневзвешенное удельное сходство:................. " +ALLTRIM(STR(Ar_field[ 8],17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Среднее на объект суммарное сходство:............... " +ALLTRIM(STR(Ar_field[ 9],17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Средние на объект фактические суммарные затраты:.... " +ALLTRIM(STR(Ar_field[10],17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Всего назначено на классы объектов:................. " +ALLTRIM(STR(Ar_field[ 5],17))  ;?mStr+SPACE(Ln-1-LEN(mStr))+"|"
?REPLICATE("~",Ln)
mStr = "|СРЕДНЕЕ НА КЛАСС:"                                                                             ;?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Начальный ресурс класса:............................ " +ALLTRIM(STR(Ar_field[ 3]/N_Klass,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Остаток ресурса после назначений объектов на классы: " +ALLTRIM(STR(Ar_field[ 4]/N_Klass,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Суммарное сходство:................................. " +ALLTRIM(STR(Ar_field[ 6]/N_Klass,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Фактические суммарные затраты:...................... " +ALLTRIM(STR(Ar_field[ 7]/N_Klass,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Средневзвешенное удельное сходство:................. " +ALLTRIM(STR(Ar_field[ 8]/N_Klass,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Среднее на объект суммарное сходство:............... " +ALLTRIM(STR(Ar_field[ 9]/N_Klass,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|Средние на объект фактические суммарные затраты:.... " +ALLTRIM(STR(Ar_field[10]/N_Klass,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|В среднем на класс назначено объектов:.............. " +ALLTRIM(STR(Ar_field[ 5]/N_Klass,17))  ;?mStr+SPACE(Ln-1-LEN(mStr))+"|"
?REPLICATE("=",Ln)
?""
SELECT Rasp_naz
SET FILTER TO Klas_naz > 0
SET ORDER TO 1
DBGOTOP()
M_KodKl_Old = -9999
Num_pp = 0
DBGOTOP()
DO WHILE .NOT. EOF()
   M_KodObj  = Kod_obj          // Здесь ВСЕ проверить, наименования полей заменены на новые
   M_NameObj = Name_Obj
   M_KodCls  = Kod_Cls
   M_NameCls = Name_Cls
   M_UrSxod  = Ur_Sxod
   M_Zatr    = Zatrati
   M_UdSxod  = Ud_Sxod
   M_KodKln  = Klas_naz
   ** Печать информации по новому классу из БД Klas_res.dbf
   IF M_KodKl_Old <> M_KodKln
      Num_pp = 0
      M_KodKl_Old = Klas_naz
      IF M_KodKl_Old <> -99999
         SELECT Klas_res
         DBGOTO(M_KodCls)
         ?REPLICATE("=",Ln)
         mStr = "|КЛАСС НАЗНАЧЕНИЯ:"                                                                  ;?mStr+SPACE(Ln-1-LEN(mStr))+"|"
         mStr = "|Код: "+ALLTRIM(STR(M_KodKln,4))+", наименование:    " +ALLTRIM(M_NameCls)           ;?mStr+SPACE(Ln-1-LEN(mStr))+"|"
         mStr = "|Начальный ресурс класса:........................... " +ALLTRIM(STR(Resource  ,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
         mStr = "|Остаток ресурса после назначений объектов на класс: " +ALLTRIM(STR(OstatokRes,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
         mStr = "|Суммарное сходство:................................ " +ALLTRIM(STR(Sum_UrSxod,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
         mStr = "|Фактические суммарные затраты:..................... " +ALLTRIM(STR(Sum_Zatrat,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
         mStr = "|Средневзвешенное удельное сходство:................ " +ALLTRIM(STR(Svz_UdSxod,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
         mStr = "|Среднее на объект суммарное сходство:.............. " +ALLTRIM(STR(Avr_UrSxod,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
         mStr = "|Средние на объект фактические суммарные затраты:... " +ALLTRIM(STR(Avr_Zatrat,17,7));?mStr+SPACE(Ln-1-LEN(mStr))+"|"
         mStr = "|Всего на данный класс назначено объектов:.......... " +ALLTRIM(STR(Kol_obj,17))     ;?mStr+SPACE(Ln-1-LEN(mStr))+"|"
      ENDIF
      ?REPLICATE("~",Ln)
      mStr = "| Номер |  Код  | Наименование  |Ур-нь сходст| Затраты на  |Удельное сход";?mStr+SPACE(Ln-1-LEN(mStr))+"|"
      mStr = "|по пор.|объекта|   объекта     |об.с классом|назн. объекта|об. с классом";?mStr+SPACE(Ln-1-LEN(mStr))+"|"
*             | 12345 | 12345 |123456789012345|1234.6789012|12345.7890123|12345.7890123
      ?REPLICATE("~",Ln)
   ENDIF
   mStr = "|"+" "+STR(++Num_pp,5)+" "+"|"+" "+STR(M_KodObj,5)+" "+"|"+SUBSTR(M_NameObj,1,15)+"|"+STR(M_UrSxod,12,7)+"|"+STR(M_Zatr,13,7)+"|"+STR(M_UdSxod,13,7);?mStr+SPACE(Ln-1-LEN(mStr))+"|"
   SELECT Rasp_naz
   DBSKIP(1)
ENDDO
?REPLICATE("=",Ln)
?""
mStr = "ДАННЫЕ ПО НЕНАЗНАЧЕННЫМ ОБЪЕКТАМ:"                                        ;?mStr+SPACE(Ln-1-LEN(mStr))
?REPLICATE("=",Ln)
mStr = "| Номер |  Код  | Наименование  |Ур-нь сходст| Затраты на  |Удельное сход";?mStr+SPACE(Ln-1-LEN(mStr))+"|"
mStr = "|по пор.|объекта|   объекта     |об.с классом|назн. объекта|об. с классом";?mStr+SPACE(Ln-1-LEN(mStr))+"|"
*       | 12345 | 12345 |123456789012345|1234.6789012|12345.7890123|12345.7890123
?REPLICATE("~",Ln)
***** Убрать из списка неназначенных объектов все назначенные (с помощью массива)
CLOSE ALL
USE Rasp_naz EXCLUSIVE NEW
SELECT Rasp_naz
SET FILTER TO Klas_naz = 0
N_ObjNen = 0                             // Количество неназначенных объектов
Num_pp   = 0
mSum_UrSxod = 0   
mSum_Zatr   = 0
mSum_UdSxod = 0
DBGOTOP()
DO WHILE .NOT. EOF()
   M_KodObj = Kod_obj
   IF ASCAN(aObjNaz, M_KodObj) = 0       // Объект Kod_obj не назначен
      mStr = "|"+" "+STR(++Num_pp,5)+" "+"|"+" "+STR(M_KodObj,5)+" "+"|"+SUBSTR(Name_Obj,1,15)+"|"+STR(Ur_Sxod,12,7)+"|"+STR(Zatrati,13,7)+"|"+STR(Ud_Sxod,13,7);?mStr+SPACE(Ln-1-LEN(mStr))+"|"
      ++N_ObjNen
      mSum_UrSxod = mSum_UrSxod + Ur_Sxod
      mSum_Zatr   = mSum_Zatr   + Zatrati
      mSum_UdSxod = mSum_UdSxod + Ud_Sxod
   ENDIF
   DBSKIP(1)
ENDDO
?REPLICATE("~",Ln)
mAvr_UrSxod = mSum_UrSxod / N_ObjNen
mAvr_Zatr   = mSum_Zatr   / N_ObjNen
mAvr_UdSxod = mSum_UdSxod / N_ObjNen
mStr = "|"+" "+SPACE(5)+" "+"|"+" "+SPACE(5)+" "+"|"+"В СРЕДНЕМ:     "+"|"+STR(mAvr_UrSxod,12,7)+"|"+STR(mAvr_Zatr,13,7)+"|"+STR(mAvr_UdSxod,13,7);?mStr+SPACE(Ln-1-LEN(mStr))+"|"
*                                                     123456789012345
?REPLICATE("=",Ln)
mStr = 'Универсальная когнитивная аналитическая система "Эйдос"';?mStr+SPACE(Ln-1-LEN(mStr))
CLOSE ALL
*** Pedro **********
Set device to screen
Set printer off
Set printer to
Set console on
aMess := {}
AADD(aMess, 'ПРОЦЕСС НАЗНАЧЕНИЯ ОБЪЕКТОВ НА КЛАССЫ ЗАВЕРШЕН УСПЕШНО !!!')
AADD(aMess, 'Результаты назначений в файлах: "Res_naz.txt", "Rasp_naz.dbf", "Klas_res.dbf"')
AADD(aMess, 'в папке: '+M_PathAppl)
LB_Warning(aMess, "4.1.6.3. Задача о назначениях. Назначение объектов на классы")
RUNSHELL( mFileName,"NOTEPAD.EXE",.T.,.T.)             // Посмотреть напечатанный файл в блокноте