OBJECT Table 50099 Dataport Generator Dataports
{
  OBJECT-PROPERTIES
  {
    =08.12.03;
    ६=18:32:03;
    ᮪ ᨩ=;
  }
  PROPERTIES
  {
    OnInsert=BEGIN
               IF "No." = 0 THEN
                 "No." := GetDataportNumber;
             END;

    CaptionML=[ENU=Dataport Generator Dataports;
               RUS=Dataport Generator Dataports];
    LookupFormID=Form50098;
    DrillDownFormID=Form50098;
  }
  FIELDS
  {
    { 1   ;   ;No.                 ;Integer       ;CaptionML=RUS=Dataport No }
    { 2   ;   ;Name                ;Text250        }
    { 3   ;   ;Import              ;Boolean        }
    { 4   ;   ;TargetFile          ;Text250        }
    { 5   ;   ;TabIDFilter         ;Text250        }
    { 6   ;   ;Description         ;Text250        }
    { 7   ;   ;Start Delimiter     ;Text1          }
    { 8   ;   ;End Delimiter       ;Text1          }
    { 9   ;   ;Separator           ;Text1          }
  }
  KEYS
  {
    {    ;No.                                      }
  }
  CODE
  {
    VAR
      "Permission Range"@1000000000 : Record 2000000044;
      Object@1000000001 : Record 2000000001;
      Dataports@1000000002 : Record 50099;

    PROCEDURE GetDataportNumber@1000000000() : Integer;
    VAR
      I@1000000000 : Integer;
    BEGIN
      // Available range
      "Permission Range".SETRANGE("Object Type", "Permission Range"."Object Type"::Dataport);
      "Permission Range".SETRANGE("Insert Permission", "Permission Range"."Insert Permission"::Yes);
      IF NOT "Permission Range".FIND('-') THEN
        EXIT(0);

      I := "Permission Range".From - 1;
      REPEAT
        I := I + 1;
        IF NOT Object.GET(Object.::Dataport, '', I) THEN BEGIN
          Dataports."No." := I;
          IF NOT Dataports.FIND('=') THEN
            EXIT(I);
        END;
      UNTIL I = "Permission Range"."To";
      EXIT(0);
    END;

    PROCEDURE WriteDataportToFile@1000000001(VAR F@1000000002 : File);
    VAR
      Ligne@1000000001 : Text[250];
      AllObj@1000000000 : Record 2000000038;
      Field@1000000003 : Record 2000000041;
    BEGIN
      // Text file header
      F.WRITE(STRSUBSTNO('OBJECT Dataport %1 %2', "No.", Name));
      F.WRITE('{');
      F.WRITE('  OBJECT-PROPERTIES');
      // FSH > OVOD
      // F.WRITE('  {Version List=PhD;}');
      F.WRITE('  PROPERTIES');
      F.WRITE('  {');
      F.WRITE(STRSUBSTNO('    UseReqForm=%1;', FALSE));
      F.WRITE('    OnInitDataport=VAR');
      F.WRITE('                     Import@1000000003 : Boolean;');
      F.WRITE('                     FileName@1000000004 : Text[250];');
      F.WRITE('                     d@1000000005 : Dialog;');
      F.WRITE('                   BEGIN');
      F.WRITE('                     Import := CurrDataport.IMPORT;');
      F.WRITE('                     FileName := CurrDataport.FILENAME;');
      F.WRITE('                     d.OPEN(''Import: #1#####\File Name: #2######################################'',Import,FileName);');
      F.WRITE('                     d.INPUT(1, Import);');
      F.WRITE('                     d.INPUT(2, FileName);');
      F.WRITE('                     CurrDataport.IMPORT := Import;');
      F.WRITE('                     CurrDataport.FILENAME := FileName;');
      F.WRITE('                   END;');
      IF NOT Import THEN
        F.WRITE(STRSUBSTNO('    Import=%1;', Import));
      TESTFIELD(TargetFile);
      F.WRITE('    FileName=' + TargetFile + ';');

      IF "Start Delimiter" <> '' THEN
        F.WRITE('    FieldStartDelimiter=[' + "Start Delimiter" + '];');
      IF "End Delimiter" <> '' THEN
        F.WRITE('    FieldEndDelimiter=[' + "End Delimiter" + '];');
      IF Separator <> '' THEN
        F.WRITE('    FieldSeparator=[' + Separator + '];');

      F.WRITE('  }');
      F.WRITE('  DATAITEMS');
      F.WRITE('  {');

      // Lookup selected tables
      TESTFIELD(TabIDFilter);
      AllObj.SETRANGE(AllObj." ꥪ", AllObj." ꥪ"::Table);
      AllObj.SETFILTER("ꥪ ID", TabIDFilter);
      IF AllObj.FIND('-') THEN REPEAT
        F.WRITE('    { PROPERTIES');
        F.WRITE('      {');
        F.WRITE(STRSUBSTNO('        DataItemTable=Table%1', AllObj."ꥪ ID"));
        F.WRITE('      }');
        F.WRITE('      FIELDS');
        F.WRITE('      {');
        // Dtail fichier texte
        Field.SETRANGE(TableNo, AllObj."ꥪ ID");
        Field.SETFILTER(Type, '<>%1', Field.Type::BLOB);
        Field.SETRANGE(Class, Field.Class::Normal);
        Field.SETRANGE(Enabled, TRUE);
        IF Field.FIND('-') THEN REPEAT
          Ligne := '        { ; ;"' + PADSTR(Field.FieldName + '"', 31);
          IF Field.Type IN [Field.Type::Integer, Field.Type::Decimal] THEN BEGIN
            F.WRITE(Ligne + ';');
            F.WRITE('                OnBeforeEvaluateField=BEGIN IF Text = '''' THEN Text := ''0'' END; }');
          END
          ELSE
            F.WRITE(Ligne + '}');
        UNTIL Field.NEXT = 0;
        F.WRITE('      }');
        F.WRITE('    }');
      UNTIL AllObj.NEXT = 0;
      F.WRITE('  }');

      // Request form
      F.WRITE('    REQUESTFORM');
      F.WRITE('    {');
      F.WRITE('      PROPERTIES');
      F.WRITE('      {');
      F.WRITE('        Width=9350;');
      F.WRITE('        Height=990;');
      F.WRITE('      }');
      F.WRITE('      CONTROLS');
      F.WRITE('      {');
      F.WRITE('      }');
      F.WRITE('    }');

      // Code
      F.WRITE('      CODE');
      F.WRITE('      {');
      F.WRITE('        BEGIN');
      F.WRITE('        END.');
      F.WRITE('      }');

      // The end
      F.WRITE('}');
    END;

    BEGIN
    END.
  }
}

OBJECT Form 50098 Dataport Generator Dataports
{
  OBJECT-PROPERTIES
  {
    =08.12.03;
    ६=18:40:50;
    ᮪ ᨩ=FSH;
  }
  PROPERTIES
  {
    Width=15070;
    Height=9130;
    TableBoxID=1000000000;
    SourceTable=Table50099;
    OnOpenForm=BEGIN
                 SaveToFileName := textDefaultSaveToFile;
               END;

  }
  CONTROLS
  {
    { 1000000000;TableBox;220 ;220  ;14520;7260 ;HorzGlue=Both;
                                                 VertGlue=Both }
    { 1000000001;TextBox;0    ;0    ;1700 ;0    ;ParentControl=1000000000;
                                                 InColumn=;
                                                 SourceExpr="No.";
                                                 OnValidate=BEGIN
                                                              IF Object.GET(Object.::Dataport, '', "No.") THEN
                                                                MESSAGE(textObjectExists, Object.);
                                                            END;
                                                             }
    { 1000000002;Label  ;0    ;0    ;0    ;0    ;ParentControl=1000000001;
                                                 InColumnHeading= }
    { 1000000003;TextBox;1693 ;0    ;2750 ;0    ;ParentControl=1000000000;
                                                 InColumn=;
                                                 SourceExpr=Name }
    { 1000000004;Label  ;0    ;0    ;0    ;0    ;ParentControl=1000000003;
                                                 InColumnHeading= }
    { 1000000009;TextBox;6032 ;0    ;4400 ;0    ;HorzGlue=Both;
                                                 ParentControl=1000000000;
                                                 InColumn=;
                                                 Title=;
                                                 SourceExpr=Description }
    { 1000000010;Label  ;0    ;0    ;0    ;0    ;ParentControl=1000000009;
                                                 InColumnHeading= }
    { 1000000015;CheckBox;8572;1650 ;1700 ;440  ;Visible=;
                                                 ParentControl=1000000000;
                                                 InColumn=;
                                                 ShowCaption=;
                                                 SourceExpr=Import }
    { 1000000016;Label  ;0    ;0    ;0    ;0    ;ParentControl=1000000015;
                                                 InColumnHeading= }
    { 1000000013;TextBox;12425;2200 ;4400 ;440  ;Visible=;
                                                 ParentControl=1000000000;
                                                 InColumn=;
                                                 SourceExpr=TargetFile }
    { 1000000014;Label  ;0    ;0    ;0    ;0    ;ParentControl=1000000013;
                                                 InColumnHeading= }
    { 1000000011;TextBox;8953 ;1760 ;4400 ;440  ;Visible=;
                                                 ParentControl=1000000000;
                                                 InColumn=;
                                                 SourceExpr=TabIDFilter }
    { 1000000012;Label  ;0    ;0    ;0    ;0    ;ParentControl=1000000011;
                                                 InColumnHeading= }
    { 1000000005;CommandButton;7480;8250;2200;550;
                                                 HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 Default=;
                                                 PushAction=LookupOK;
                                                 InvalidActionAppearance=Hide }
    { 1000000006;CommandButton;10010;8250;2200;550;
                                                 HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 Cancel=;
                                                 PushAction=LookupCancel;
                                                 InvalidActionAppearance=Hide }
    { 1000000007;CommandButton;12540;8250;2200;550;
                                                 HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 PushAction=FormHelp }
    { 1000000008;CommandButton;220;8250;2200;550;VertGlue=Bottom;
                                                 CaptionML=[ENU=Edit;
                                                            RUS=Edit];
                                                 OnPush=VAR
                                                          CardForm@1000000000 : Form 50099;
                                                        BEGIN
                                                          CardForm.SetDataportNo("No.");
                                                          CardForm.RUN;
                                                        END;
                                                         }
    { 1000000017;Label  ;2750 ;7700 ;1430 ;440  ;CaptionML=RUS=Save as: }
    { 1000000018;TextBox;4400 ;7700 ;10340;440  ;HorzGlue=Both;
                                                 VertGlue=Bottom;
                                                 SourceExpr=SaveToFileName }
    { 1000000019;CommandButton;2750;8250;2200;550;
                                                 VertGlue=Bottom;
                                                 CaptionML=[ENU=Generate;
                                                            RUS=Generate];
                                                 OnPush=BEGIN
                                                          // FSH > OVOD
                                                          SaveToFile();
                                                          // FSH < OVOD
                                                        END;
                                                         }
  }
  CODE
  {
    VAR
      textObjectExists@1000000000 : TextConst 'ENU=ATTENTION : Object already exists\(%1);RUS=ATTENTION : Object already exists\(%1)';
      Object@1000000001 : Record 2000000001;
      SaveToFileName@1000000002 : Text[250];
      textDefaultSaveToFile@1000000003 : TextConst 'RUS=C:\TEMP\Dataports.txt';

    PROCEDURE SaveToFile@1000000000();
    VAR
      F@1000000000 : File;
      Frm@1000000001 : Form 50099;
      TmpRec@1000000002 : Record 50099;
    BEGIN
      TmpRec.COPY(Rec);
      TmpRec.SETFILTER(TabIDFilter, '''''');
      IF TmpRec.FIND('-') THEN
        MESSAGE('%1 dataports have no table list. They will be ignored.');

      TmpRec.SETFILTER(TabIDFilter, '<>''''');
      IF NOT TmpRec.FIND('-') THEN
        ERROR('No tables selected');

      // Open text file
      F.TEXTMODE(TRUE);
      F.WRITEMODE(TRUE);
      IF NOT F.CREATE(SaveToFileName) THEN
        ERROR('Unable to create %1', SaveToFileName);

      REPEAT
        TmpRec.WriteDataportToFile(F);
      UNTIL TmpRec.NEXT = 0;
      F.CLOSE;
      MESSAGE('Generation OK.\You must now import text file %1.', SaveToFileName);
    END;

    BEGIN
    END.
  }
}

OBJECT Form 50099 Dataport generator
{
  OBJECT-PROPERTIES
  {
    =08.12.03;
    ६=21:02:51;
    ᮪ ᨩ=PhD;
  }
  PROPERTIES
  {
    Width=12760;
    Height=11220;
    SaveControlInfo=;
    InsertAllowed=;
    DeleteAllowed=;
    ModifyAllowed=;
    TableBoxID=1;
    SourceTable=Table2000000038;
    SaveTableView=;
    UpdateOnActivate=;
    SourceTableView=WHERE( ꥪ=CONST(Table));
    OnOpenForm=BEGIN
                 // FSH > OVOD
                 IF NumDataport = 0 THEN BEGIN
                   IF NOT Dataports.FIND('-') THEN BEGIN
                     Dataports.INIT;
                     Dataports.Name := 'New dataport';
                     Dataports.INSERT;
                   END;
                   Dataports.FIND('-');
                   SetDataportNo(Dataports."No.");
                 END;
                 // FSH < OVOD
               END;

    OnQueryCloseForm=BEGIN
                       // FSH > OVOD
                       IF IsChanged THEN
                         EXIT(CONFIRM('Cancel changes?'))
                       ELSE
                         EXIT(TRUE);
                       // FSH < OVOD
                     END;

    OnAfterGetRecord=BEGIN
                       IF "Info table".GET(COMPANYNAME, "ꥪ ID") THEN
                         NbRecord := "Info table"."᫮ ᥩ"
                       ELSE
                         NbRecord := 0;
                     END;

  }
  CONTROLS
  {
    { 1   ;TableBox     ;220  ;1430 ;9350 ;8030 ;HorzGlue=Both;
                                                 VertGlue=Both }
    { 4   ;TextBox      ;0    ;0    ;2033 ;0    ;Editable=;
                                                 ParentControl=1;
                                                 InColumn=;
                                                 SourceExpr="ꥪ ID";
                                                 OnFormat=BEGIN
                                                            // FSH > OVOD
                                                            CurrForm."ꥪ ID".UPDATESELECTED(MARK);
                                                            // FSH < OVOD
                                                          END;
                                                           }
    { 5   ;Label        ;0    ;0    ;0    ;0    ;ParentControl=4;
                                                 InColumnHeading=;
                                                 HorzAlign=Center }
    { 6   ;TextBox      ;0    ;0    ;4400 ;0    ;HorzGlue=Both;
                                                 Editable=;
                                                 ParentControl=1;
                                                 InColumn=;
                                                 SourceExpr=" ꥪ";
                                                 OnFormat=BEGIN
                                                            // FSH > OVOD
                                                            CurrForm." ꥪ".UPDATESELECTED(MARK);
                                                            // FSH < OVOD
                                                          END;
                                                           }
    { 7   ;Label        ;0    ;0    ;0    ;0    ;ParentControl=6;
                                                 InColumnHeading=;
                                                 HorzAlign=Center }
    { 11  ;TextBox      ;6271 ;2530 ;1637 ;440  ;Name=NbRecord;
                                                 Editable=;
                                                 ParentControl=1;
                                                 InColumn=;
                                                 CaptionML=RUS=Count;
                                                 BlankNumbers=BlankZero;
                                                 SourceExpr=NbRecord;
                                                 OnFormat=BEGIN
                                                            // FSH > OVOD
                                                            CurrForm.NbRecord.UPDATESELECTED(MARK);
                                                            // FSH < OVOD
                                                          END;
                                                           }
    { 12  ;Label        ;0    ;0    ;0    ;0    ;ParentControl=11;
                                                 InColumnHeading=;
                                                 HorzAlign=Center }
    { 10  ;CommandButton;10120;10340;2200 ;550  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 PushAction=FormHelp }
    { 2   ;MenuButton   ;7700 ;10340;2200 ;550  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 CaptionML=RUS=&Functions;
                                                 Menu=MENUITEMS
                                                 {
                                                   { ID=3;
                                                     ShortCutKey=F6;
                                                     CaptionML=RUS=Selection;
                                                     OnPush=BEGIN
                                                              // FSH > OVOD
                                                              MARK(NOT MARK);
                                                              IsChanged := TRUE;
                                                              // FSH < OVOD
                                                            END;
                                                             }
                                                   { ID=13;
                                                     MenuItemType=Separator }
                                                   { ID=1000000008;
                                                     ShortCutKey=Ctrl+F5;
                                                     CaptionML=RUS=Set Filter To Selection;
                                                     OnPush=BEGIN
                                                              // FSH > OVOD
                                                              ShowSelectedOnly := TRUE;
                                                              SETFILTER("ꥪ ID", GetIDFilter);
                                                              // FSH < OVOD
                                                            END;
                                                             }
                                                   { ID=1000000001;
                                                     ShortCutKey=Shift+F5;
                                                     CaptionML=RUS=Selection All Filtered;
                                                     OnPush=BEGIN
                                                              // FSH > OVOD
                                                              ShowSelectedOnly := TRUE;
                                                              SetIDFilter(GETFILTER("ꥪ ID"));
                                                              SETFILTER("ꥪ ID", '');
                                                              IsChanged := TRUE;
                                                              // FSH < OVOD
                                                            END;
                                                             }
                                                   { ID=1000000007;
                                                     CaptionML=RUS=---------------- }
                                                   { ID=14;
                                                     CaptionML=RUS=Unselect all;
                                                     OnPush=BEGIN
                                                              // FSH > OVOD
                                                              SetIDFilter('');
                                                              IsChanged := TRUE;
                                                              // FSH < OVOD
                                                            END;
                                                             }
                                                   { ID=1000000012;
                                                     MenuItemType=Separator }
                                                   { ID=1000000014;
                                                     ShortCutKey=Ctrl+A;
                                                     CaptionML=RUS=Show All;
                                                     OnPush=BEGIN
                                                              ShowSelectedOnly := FALSE;
                                                              MARKEDONLY(ShowSelectedOnly);
                                                            END;
                                                             }
                                                   { ID=1000000015;
                                                     ShortCutKey=Ctrl+S;
                                                     CaptionML=RUS=Selected Only;
                                                     OnPush=BEGIN
                                                              ShowSelectedOnly := TRUE;
                                                              MARKEDONLY(ShowSelectedOnly);
                                                            END;
                                                             }
                                                   { ID=1000000013;
                                                     MenuItemType=Separator }
                                                   { ID=9;
                                                     CaptionML=RUS=Available numbers;
                                                     OnPush=BEGIN
                                                              IF "Available objects".COUNT = 0 THEN
                                                                "Load Available objects";

                                                              FORM.RUNMODAL(FORM::Objects, "Available objects");
                                                            END;
                                                             }
                                                   { ID=8;
                                                     CaptionML=RUS=About Dataport genetaror;
                                                     OnPush=VAR
                                                              Dialogue@1000000001 : Dialog;
                                                              Text@1000000002 : Text[250];
                                                            BEGIN
                                                              Text := 'Dataport Generator';
                                                              Text := Text + '\Philippe Durand';
                                                              Text := Text + '\pdurand@soudage-automatique.fr';

                                                              Dialogue.OPEN(Text);
                                                              //SLEEP(4000);
                                                              //Dialogue.CLOSE;
                                                            END;
                                                             }
                                                 }
                                                  }
    { 16  ;CommandButton;2860 ;10340;2200 ;550  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 PushAction=OK;
                                                 OnPush=BEGIN
                                                          // FSH > OVOD
                                                          Dataports.GET(NumDataport);
                                                          Dataports.Import := Import;
                                                          Dataports.TargetFile := TargetFileName;
                                                          Dataports.TabIDFilter := GetIDFilter();
                                                          Dataports."Start Delimiter" := "Start delimiter";
                                                          Dataports."End Delimiter" := "End delimiter";
                                                          Dataports.Separator := Separator;
                                                          Dataports.MODIFY;
                                                          IsChanged := FALSE;
                                                          // FSH < OVOD
                                                        END;
                                                         }
    { 17  ;CommandButton;5280 ;10340;2200 ;550  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 Cancel=;
                                                 PushAction=Cancel }
    { 18  ;Label        ;220  ;220  ;2860 ;440  ;ParentControl=25 }
    { 19  ;TextBox      ;5060 ;220  ;7260 ;440  ;HorzGlue=Both;
                                                 Editable=;
                                                 CaptionML=RUS=N Dataport;
                                                 SourceExpr=NomDataport }
    { 20  ;OptionButton ;9790 ;4620 ;2200 ;440  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 CaptionML=RUS=Exportation;
                                                 SourceExpr=Import;
                                                 OptionValue=;
                                                 OnValidate=BEGIN
                                                              // FSH > OVOD
                                                              TargetFileHeader := 'Target File';
                                                              // FSH < OVOD
                                                            END;
                                                             }
    { 21  ;TextBox      ;9790 ;5720 ;2530 ;440  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 Editable=;
                                                 Focusable=;
                                                 ParentControl=22;
                                                 Border=;
                                                 SourceExpr=TargetFileHeader }
    { 22  ;TextBox      ;9790 ;6160 ;2530 ;550  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 SourceExpr=TargetFileName;
                                                 OnAssistEdit=BEGIN
                                                                // FSH > OVOD
                                                                // FSH < OVOD
                                                              END;
                                                               }
    { 23  ;Label        ;9790 ;7920 ;1760 ;440  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 ParentControl=26 }
    { 24  ;OptionButton ;9790 ;5170 ;2200 ;440  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 CaptionML=RUS=Import;
                                                 SourceExpr=Import;
                                                 OptionValue=;
                                                 OnValidate=BEGIN
                                                              // FSH > OVOD
                                                              TargetFileHeader := 'Source File';
                                                              // FSH < OVOD
                                                            END;
                                                             }
    { 25  ;TextBox      ;3190 ;220  ;1650 ;440  ;Editable=;
                                                 CaptionML=RUS=Dataport no.;
                                                 SourceExpr=NumDataport;
                                                 OnValidate=BEGIN
                                                              // FSH > OVOD
                                                              // FSH < OVOD
                                                            END;

                                                 OnAfterValidate=BEGIN
                                                                   // FSH > OVOD
                                                                   // FSH < OVOD
                                                                 END;
                                                                  }
    { 26  ;TextBox      ;11660;7920 ;660  ;440  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 HorzAlign=Center;
                                                 SourceExpr="Start delimiter" }
    { 15  ;Label        ;9790 ;8470 ;1760 ;440  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 ParentControl=27 }
    { 27  ;TextBox      ;11660;8470 ;660  ;440  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 HorzAlign=Center;
                                                 SourceExpr="End delimiter" }
    { 28  ;Label        ;9790 ;9020 ;1760 ;440  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 ParentControl=29 }
    { 29  ;TextBox      ;11660;9020 ;660  ;440  ;HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 HorzAlign=Center;
                                                 SourceExpr=Separator }
    { 1000000000;CommandButton;440;10340;2200;550;
                                                 HorzGlue=Right;
                                                 VertGlue=Bottom;
                                                 CaptionML=[ENU=Generate;
                                                            RUS=Generate];
                                                 OnPush=BEGIN
                                                          // FSH > OVOD
                                                          SaveToFile();
                                                          // FSH < OVOD
                                                        END;
                                                         }
    { 1000000002;OptionButton;9790;1430;2200;440;Name=Show All;
                                                 HorzGlue=Right;
                                                 SourceExpr=ShowSelectedOnly;
                                                 OptionValue=;
                                                 OnAfterValidate=BEGIN
                                                                   // FSH > OVOD
                                                                   MARKEDONLY(FALSE);
                                                                   // FSH < OVOD
                                                                 END;
                                                                  }
    { 1000000003;OptionButton;9790;1980;2310;440;Name=Selected Only;
                                                 HorzGlue=Right;
                                                 SourceExpr=ShowSelectedOnly;
                                                 OptionValue=;
                                                 OnAfterValidate=BEGIN
                                                                   // FSH > OVOD
                                                                   MARKEDONLY(TRUE);
                                                                   // FSH < OVOD
                                                                 END;
                                                                  }
    { 1000000004;TextBox;1870 ;9680 ;10450;440  ;HorzGlue=Both;
                                                 VertGlue=Bottom;
                                                 SourceExpr=SaveToFileName }
    { 1000000005;Label  ;220  ;9680 ;1430 ;440  ;CaptionML=RUS=Save as: }
    { 1000000006;TextBox;2860 ;880  ;4400 ;440  ;Name=TabNameToAdd;
                                                 SourceExpr=TabNameToAdd;
                                                 OnAfterValidate=BEGIN
                                                                   FindAndAdd();
                                                                 END;
                                                                  }
    { 1000000009;Label  ;1430 ;880  ;1430 ;440  ;CaptionML=[ENU=Find;
                                                            RUS=Find] }
  }
  CODE
  {
    VAR
      "Info table"@1000000000 : Record 2000000028;
      Object@1000000003 : Record 2000000001;
      "Available objects"@1000000004 : TEMPORARY Record 2000000001;
      Field@1000000005 : Record 2000000041;
      "Permission Range"@1000000006 : Record 2000000044;
      "License Permission"@1000000007 : Record 2000000043;
      Dataports@1000000008 : Record 50099;
      NbRecord@1000000011 : Integer;
      NumDataport@1000000013 : Integer;
      NomDataport@1000000014 : Text[30];
      Import@1000000015 : Boolean;
      TargetFileName@1000000016 : Text[80];
      TargetFileHeader@1000000017 : Text[30];
      "Start delimiter"@1000000019 : Text[1];
      "End delimiter"@1000000020 : Text[1];
      Separator@1000000001 : Text[1];
      ShowSelectedOnly@1000000021 : Boolean;
      SaveToFileName@1000000002 : Text[250];
      textDefaultObjectDir@1000000023 : TextConst 'RUS=C:\Temp\';
      textDefaultDataDir@1000000024 : TextConst 'RUS=C:\Temp\Data\';
      textDefaultExt@1000000025 : TextConst 'RUS=.txt';
      IsChanged@1000000009 : Boolean;
      TabNameToAdd@1000000010 : Text[80];

    PROCEDURE SetDataportNo@1000000010(DataportNo@1000000000 : Integer);
    BEGIN
      Dataports."No." := DataportNo;
      Dataports.FIND('=');
      NumDataport := Dataports."No.";
      NomDataport := Dataports.Name;
      Import := Dataports.Import;
      TargetFileName := Dataports.TargetFile;
      IF TargetFileName = '' THEN
        TargetFileName := textDefaultDataDir + NomDataport + textDefaultExt;
      SetIDFilter(Dataports.TabIDFilter);
      SaveToFileName := textDefaultObjectDir + NomDataport + textDefaultExt;
      "Start delimiter" := Dataports."Start Delimiter";
      "End delimiter" := Dataports."End Delimiter";
      Separator := Dataports.Separator;
      IsChanged := FALSE;
    END;

    PROCEDURE SetIDFilter@1000000000(IDFilter@1000000000 : Text[250]);
    BEGIN
      MARKEDONLY(TRUE);
      IF FIND('-') THEN BEGIN
        REPEAT
          MARK(FALSE);
        UNTIL NEXT() = 0;
      END;
      IF IDFilter <> '' THEN BEGIN
        MARKEDONLY(FALSE);
        SETFILTER("ꥪ ID", IDFilter);
        IF FIND('-') THEN BEGIN
          REPEAT
            MARK(TRUE);
          UNTIL NEXT() = 0;
        END;
        SETFILTER("ꥪ ID", '');
      END;
      MARKEDONLY(TRUE);
        IF FIND('-') THEN
          ;
      MARKEDONLY(ShowSelectedOnly);
    END;

    PROCEDURE SaveToFile@1000000002();
    VAR
      AllObj@1000000000 : Record 2000000038;
      Text@1000000001 : Text[250];
    BEGIN
      // FSH > OVOD
      AllObj.COPY(Rec);
      AllObj.SETFILTER("ꥪ ID", '');
      AllObj.MARKEDONLY(TRUE);
      // If no files selected, test with current record
      IF NOT AllObj.FIND('-') THEN BEGIN
        MESSAGE('No tables selected');
        EXIT;
      END;
      IF AllObj.COUNT > 250 THEN
        ERROR('Too much files selected (%1)', AllObj.COUNT);

      IF AllObj.COUNT = 1 THEN
        Text :=         '1 file selected'
      ELSE
        Text :=         '%4 files selected';
      Text := Text + '\Dataport %1 : %2';
      Text := Text + '\Save to file : %3';
      Text := Text + '\\Do you confirm ?';

      IF CONFIRM(Text, TRUE,
                    NumDataport, NomDataport,
                    SaveToFileName, AllObj.COUNT) THEN
        IF FileGeneration THEN
          MESSAGE('Generation OK.\You must now import text file %1.', SaveToFileName);
    END;

    PROCEDURE FileGeneration@5() : Boolean;
    VAR
      F@1000000001 : File;
    BEGIN
      // Open text file
      F.TEXTMODE(TRUE);
      F.WRITEMODE(TRUE);
      IF NOT F.CREATE(SaveToFileName) THEN
        ERROR('Unable to create %1', SaveToFileName);
      Dataports.GET(NumDataport);
      Dataports.Import := Import;
      Dataports.TargetFile := TargetFileName;
      Dataports.TabIDFilter := GetIDFilter();
      Dataports."Start Delimiter" := "Start delimiter";
      Dataports."End Delimiter" := "End delimiter";
      Dataports.Separator := Separator;
      Dataports.WriteDataportToFile(F);
      F.CLOSE;
      EXIT(TRUE);
    END;

    PROCEDURE "Load Available objects"@6();
    VAR
      I@1000000000 : Integer;
      J@1000000001 : Integer;
    BEGIN
      // Available range ?
      "Permission Range".SETRANGE("Object Type", "Permission Range"."Object Type"::Dataport);
      "Permission Range".SETRANGE("Insert Permission", "Permission Range"."Insert Permission"::Yes);
      IF NOT "Permission Range".FIND('-') THEN
        EXIT;

      // Impossible to use "Permission Range".To !!!
      // -> forced to use a stupid trick to determine last number !!!
      "License Permission".SETRANGE("Object Type", "License Permission"."Object Type"::Dataport);
      "License Permission".SETFILTER("Object Number", '%1..', "Permission Range".From);
      IF "License Permission".FIND('-') THEN REPEAT
      UNTIL ("License Permission".NEXT = 0) OR ("License Permission"."Insert Permission" = "License Permission"."Insert Permission"::" "
      );
      I := "License Permission"."Object Number" - 1;

      // Lookup
      FOR J := "Permission Range".From TO I DO BEGIN
        "Available objects".INIT;
        "Available objects". := "Available objects".::Dataport;
        "Available objects".ID := J;
        IF Object.GET(Object.::Dataport, '', J) THEN
          "Available objects". := Object.
        ELSE
          "Available objects". := '  < Available >';
        "Available objects".INSERT;
      END;

      // Reposition on first No.
      "Available objects".FIND('-');
    END;

    PROCEDURE GetIDFilter@1000000004() : Text[250];
    VAR
      AllObj@1000000004 : Record 2000000038;
      Cnt@1000000003 : Integer;
      Fst@1000000002 : Integer;
      Lst@1000000001 : Integer;
      More@1000000000 : Boolean;
      SelFilter@1000000005 : Text[250];
    BEGIN
      WITH AllObj DO BEGIN
        COPY(Rec);
        SETFILTER("ꥪ ID", '');
        MARKEDONLY(TRUE);
        Cnt := COUNT;
        SelFilter := '';
        IF COUNT > 0 THEN BEGIN
          FIND('-');
          WHILE Cnt > 0 DO BEGIN
            Cnt := Cnt - 1;
            MARKEDONLY(FALSE);
            Fst := "ꥪ ID";
            Lst := Fst;
            More := (Cnt > 0);
            WHILE More DO
              IF NEXT = 0 THEN
                More := FALSE
              ELSE
                IF NOT MARK THEN
                  More := FALSE
                ELSE BEGIN
                  Lst := "ꥪ ID";
                  Cnt := Cnt - 1;
                  IF Cnt = 0 THEN
                    More := FALSE;
                END;
            IF SelFilter <> '' THEN
              SelFilter := SelFilter + '|';
            IF Fst = Lst THEN
              SelFilter := SelFilter + STRSUBSTNO('%1', Fst)
            ELSE
              SelFilter := SelFilter + STRSUBSTNO('%1..%2', Fst, Lst);
            IF Cnt > 0 THEN BEGIN
              MARKEDONLY(TRUE);
              NEXT;
            END;
          END;
        END;
      END;
      EXIT(SelFilter);
    END;

    PROCEDURE FindAndAdd@1000000003();
    VAR
      b@1000000000 : Boolean;
      cnt@1000000001 : Integer;
      theID@1000000003 : Integer;
    BEGIN
        MARKEDONLY(FALSE);
        SETFILTER(" ꥪ", '@'+TabNameToAdd);
        b := FIND('-');
        cnt := COUNT;
        SETFILTER(" ꥪ", '');
        IF NOT b THEN BEGIN
          b := EVALUATE(theID, TabNameToAdd);
          IF b THEN BEGIN
            SETFILTER("ꥪ ID", TabNameToAdd);
            b := FIND('-');
            cnt := COUNT;
            SETFILTER("ꥪ ID", '');
          END;
        END;
        IF NOT b THEN BEGIN
          MESSAGE('Not found');
          CurrForm.TabNameToAdd.ACTIVATE;
        END ELSE BEGIN
          CurrForm.UPDATE(FALSE);
          IF cnt = 1 THEN BEGIN
            IF CONFIRM('1 table found. Mark?') THEN BEGIN
              MARK(TRUE);
              IsChanged := TRUE;
            END;
          END ELSE BEGIN
            SETFILTER(" ꥪ", '@'+TabNameToAdd);
            ShowSelectedOnly := FALSE;
          END;
        END;
        MARKEDONLY(ShowSelectedOnly);
        CurrForm.UPDATE(FALSE);
    END;

    BEGIN
    {
      Dataport Generator
      Created by Philippe Durand - Soudage Automatique - France

      The idea is to facilitate Dataport creation, especially for tables with a lot of fields.
      For any selected file, it will include all fields, without :
      . Flowfield fields
      . Flowfilter fields
      . BLOB fields
      The suggested Dataport No. is the first available number, but you can select another one.

      Utilization :
      . Select requested file with [F6]
      . Select Import / Export mode
      . Change source/target file if necessary
      . Change separator if necessary
      After validation, a text file will be created.
      This file has to be reimported in the Object designer, in order to created the Dataport.

      For any remark or suggestion, be welcome at : pdurand@soudage-automatique.fr
    }
    END.
  }
}

