WEB-приложение Сведение отчетности   (02.10.2017)
Загрузка текстовых файлов
В дополнение к ранее описанным объектам, скрипт загрузки текстового файла имеет доступ к следующему:
  • Переменная StringCount : Integer (только для чтения) содержит количество строк в загружаемом текстовом файле.
  • Функция Strings(Index: Integer) : string возвращает строку загружаемого файла с номером Index. Строки нумеруются с нуля. Попытка обратиться к несуществующей строке приведет к ошибке.
        Ниже приведен откомментированный пример скрипта загрузки текстового файла:
'Так можно и нужно анализировать строки пришедшего текстового файла.
'Количество строк - StringCount, строка с номером I - Strings(I), нумерация с 0.

'Фактически здесь написано: если на четвертой (с номером 3) строке написано что-то,
'отличное от "Форма 160/128q", то это не "наш" текстовый файл, его не надо обрабатывать.
if StringCount < 4 then
  'Количество строк меньше четырех. Это точно не "нащ" файл.
  InvalidData = True
elseif Strings(3) <> "Форма 160/128q" then
  'Текстовый файл не признан "своим".
  InvalidData = True
else
  'Следите за отступами.

  Message("Анализируем файл.") 'Сообщение пользователю в протокол загрузки.

  '1. Создание корневого элемента REPORTS
  set xml.documentElement = xml.createElement("REPORTS")

  '2. Создание элемента-отчета. Повторять столько раз, сколько нужно отчетов.
  with xml.documentElement.appendChild(xml.createElement("REPORT"))

    '3. Атрибуты отчета

    .appendChild(xml.createElement("AGENT")).appendChild(xml.createTextNode("Мнемокод контрагента"))
    .appendChild(xml.createElement("FORM")).appendChild(xml.createTextNode("Мнемокод формы"))
    .appendChild(xml.createElement("BDATE")).appendChild(xml.createTextNode("Дата в формете YYYY-MM-DD"))
    .appendChild(xml.createElement("NOTE")).appendChild(xml.createTextNode("Примечание!!!"))
    .appendChild(xml.createElement("KIND")).appendChild(xml.createTextNode("0")) '0-первичный, 1-сводный

    'Также можно установить дополнительные атрибуты отчета:
    '.appendChild(xml.createElement("CATALOG")).appendChild(xml.createTextNode("Наименование каталога"))
    '.appendChild(xml.createElement("CHECKED")).appendChild(xml.createTextNode("1"))
    '.appendChild(xml.createElement("STATE")).appendChild(xml.createTextNode("2"))
    '.appendChild(xml.createElement("SENT")).appendChild(xml.createTextNode("1"))

    '4. Список подотчетов
    with .appendChild(xml.createElement("SUBREPORTS"))

      '5. Главный подотчет (без мнемокода)
      with .appendChild(xml.createElement("SUBREPORT"))

        '6. Список значений
        with .appendChild(xml.createElement("VALUES"))

          'Создать столько значений, сколько нужно.
          '7. Значение числового показателя
          with .appendChild(xml.createElement("VALUE"))
            .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Мнемокод числового показателя"))
            .appendChild(xml.createElement("NVAL")).appendChild(xml.createTextNode("100.10"))
          end with

          '8. Значение строкового показателя
          with .appendChild(xml.createElement("VALUE"))
            .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Мнемокод строкового показателя"))
            .appendChild(xml.createElement("SVAL")).appendChild(xml.createTextNode("Строковое значение"))
          end with

          '9. Значение показателя типа "дата".
          with .appendChild(xml.createElement("VALUE"))
            .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Мнемокод показателя типа дата"))
            .appendChild(xml.createElement("DVAL")).appendChild(xml.createTextNode("2020-01-01"))
          end with

        end with

        '10. Таблицы показателей - если редакция содержит таблицы показателей.
        with .appendChild(xml.createElement("TABLES"))

          '11. Таблица. Повторять столько раз, сколько нужно таблиц.
          with .appendChild(xml.createElement("TABLE"))

            '12. Наименование таблицы
            .appendChild(xml.createElement("NAME")).appendChild(xml.createTextNode("Наименование таблицы"))

            '13. Строки таблицы
            with .appendChild(xml.createElement("ROWS"))

              '14. Строка таблицы
              with .appendChild(xml.createElement("ROW"))

                '15. Значение строкового показателя
                with .appendChild(xml.createElement("VALUE"))
                  .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Показатель в составе талицы"))
                  .appendChild(xml.createElement("SVAL")).appendChild(xml.createTextNode("Строковое значение"))
                end with

                with .appendChild(xml.createElement("VALUE"))
                  .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Другой показатель в составе талицы"))
                  .appendChild(xml.createElement("SVAL")).appendChild(xml.createTextNode("Строковое значение"))
                end with

              end with

              '16. Строка таблицы
              with .appendChild(xml.createElement("ROW"))

                '17. Значение строкового показателя
                with .appendChild(xml.createElement("VALUE"))
                  .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Показатель в составе талицы"))
                  .appendChild(xml.createElement("SVAL")).appendChild(xml.createTextNode("Строковое значение"))
                end with

                with .appendChild(xml.createElement("VALUE"))
                  .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Другой показатель в составе талицы"))
                  .appendChild(xml.createElement("SVAL")).appendChild(xml.createTextNode("Строковое значение"))
                end with

              end with

            end with

          end with

        end with

      end with

      '18. Подотчет. Повторять столько раз, сколько нужно подотчетов.
      with .appendChild(xml.createElement("SUBREPORT"))

        '19. Мнемокод разреза подотчета
        .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Мнемокод разреза"))

        '20. Список занчений
        with .appendChild(xml.createElement("VALUES"))

          'Создать столько значений, сколько нужно.
          '21. Значение числового показателя
          with .appendChild(xml.createElement("VALUE"))
            .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Мнемокод числового показателя"))
            .appendChild(xml.createElement("NVAL")).appendChild(xml.createTextNode("100.10"))
          end with

          '22. Значение строкового показателя
          with .appendChild(xml.createElement("VALUE"))
            .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Мнемокод строкового показателя"))
            .appendChild(xml.createElement("SVAL")).appendChild(xml.createTextNode("Строковое значение"))
          end with

          '23. Значение показателя типа "дата".
          with .appendChild(xml.createElement("VALUE"))
            .appendChild(xml.createElement("CODE")).appendChild(xml.createTextNode("Мнемокод показателя типа дата"))
            .appendChild(xml.createElement("DVAL")).appendChild(xml.createTextNode("2020-01-01"))
          end with

        end with

        'Создать таблицы, если они нужны.

      end with

    end with
  end with
end if