CftClub.ru
Клуб специалистов ЦФТ-Банк

Экспорт-импорт нескольких файлов сразу

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеВт Фев 27, 2018 14:28   Экспорт-импорт нескольких файлов сразу Ответить с цитатой
Полезность: Нет оценки
Доброго времени суток!
Возник вопрос! Можно ли сделать импорт нескольких файлов сразу? Я создаю параметр P_FILE, указываю что это массив и тип указываю "Экспорт-импорт файлов", Confused в результате при компиляции в "Пакет" - "Интерфейс" вылетает ошибка:
"компонента 'A#SRC_NAME' должна быть объявлена"!
И то же самое с A#SRC_PATH и A#SRC_MASK.
Question Как их можно объявить? На форме операции эти параметры есть.
Спасибо!
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Фев 27, 2018 14:35    Ответить с цитатой
Полезность: Нет оценки
можно сделать, и я такое делал - как импорт нескольких файлов, так и экспорт (с конкретными именами файлов).

использовал ::[DOCUMENT].[COPYFILES]
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеСр Фев 28, 2018 11:45    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
я такое делал - как импорт нескольких файлов

А по подробнее можно? На форме я вижу стандартную структуру "Экспорт-импорт файлов", вижу тип, что это сделано как массив этих файлов. А как сделать так, чтобы именно загрузка сразу кучи файлов и в дальнейшем уже обработка этих файлов, соответственно я должен знать куда всё выгрузилось на сервере. Есть пример?
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Фев 28, 2018 13:33    Ответить с цитатой
Полезность: Нет оценки
widla пишет:
vtar пишет:
я такое делал - как импорт нескольких файлов

А по подробнее можно? На форме я вижу стандартную структуру "Экспорт-импорт файлов", вижу тип, что это сделано как массив этих файлов. А как сделать так, чтобы именно загрузка сразу кучи файлов и в дальнейшем уже обработка этих файлов, соответственно я должен знать куда всё выгрузилось на сервере. Есть пример?


воспользуйся поиском по этому сайту, например по ключевому слову COPYFILES
http://cftclub.ru/viewtopic.php?t=3432&highlight=COPYFILES

а также по тому же слову поиск в текстах операций в твоем администраторе словаря
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеЧт Мар 01, 2018 08:02    Ответить с цитатой
Полезность: Нет оценки
Ничего нового не нашел в найденных скриптах, один из них вроде как работает, но копируется только первый файл, остальные делает вид, что копирует (смотрю по монитору сессии), а когда происходит обращение к ним, то находится на сервере только первый файл Sad

В проверке пишу
Код:

begin     
   if P_MESSAGE = 'DEFAULT' then
      V_PATH := путь к папке источнику;
      V_PATH_LOAD := путь к папке источнику||'\ARC';
      V_PATH_SERV := ::[SYSTEM_PARAMS].[GET]('PATH', False);   elsif P_MESSAGE = 'VALIDATE' then
      if p_info = 'ADD_FILE' then
         V_LISTM(V_LISTM.count + 1) := v_filename;
         ::[TAX_LIMIT_FILES].[LIB].CopyFile(V_LISTM.count, true, v_filename, V_PATH, V_PATH_SERV, p_del == true, p_not_copy == true);
      elsif P_INFO = 'OK' then
         if V_LISTM.count > 0 then
            stdio.put_line_buf('<%PLPCALL [TAX_LIMIT_FILES].[CALL_COPYFILES](%VAR%.V_COUNT=>'''|| V_LISTM.count ||''') %>');
         end if;
      end if;
   end if;
end;
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеЧт Мар 01, 2018 08:05    Ответить с цитатой
Полезность: Нет оценки
Далее в Клиент-скрипте идет это:
Код:

function SplitBy(byref s, sep)
   res = ""
   p = instr(s, sep)
   if p > 0 then ' разделитель найден
      res = mid(s, 1, p - 1)
      s = mid(s, p + len(sep))
   else ' разделитель не найден
      res = s
      s = ""
   end if
   SplitBy = res
end function

Public function is_valid_name(p_filename)
Dim ret
Dim ras
   ret = 0
   if instr(p_filename,".")=0 Then
      Exit Function
   end if
   'расширение файла
   ras = Mid(p_filename,instrrev(p_filename,".")+1)   'ищем с конца строки
   if (ras = "XLSX" or ras = "xlsx") then
      ret = 1      
   end if      
   is_valid_name = ret
end Function

Public Function Main(LastControl)   
   'on error resume next
   Set fso = CreateObject("Scripting.FileSystemObject")
   Dim path   'Путь к директории
   
   if LastControl Is Nothing Then               
         if V_PATH.text = "" then
            msgbox("Не указана директория для загрузки реестров")
         end if
         s = V_PATH.Text
         While len(s) > 0
            path = Splitby(s, "*")
            If Not (fso.FolderExists(path)) Then
               if Msgbox("Не найден путь к директории загрузки реестров """&path&""". Создать?", vbYesNo) = vbYes then
                  'если директории нет, создадим
                  Set fs = fso.CreateFolder(path)
               else
                  Main = NULL
                  Exit Function
               end if
               End If                     
         Wend
         
         Dim fs, f, f1, fc
         'Получим список файлов из каталога пользователя
         Set f = fso.GetFolder(V_PATH)
         Set fc = f.Files
         ' Поскольку строка с именами файлов может превысить 32000 - используем таблицу строк
         For Each f1 in fc
               If is_valid_name(f1.name)>0 Then
               v_filename = f1.name 'сохраняем имя файла в текстовую переменную
               Form1.ScriptServerValidate nothing, "ADD_FILE" 'вызываем валидатор сервера для добавления имени файла в массив
            end if
         Next   
   else
      if LastControl is OK then
         if V_PATH_LOAD.text = "" then
            msgbox("Не указана директория для загруженных реестров")
         end if

         s = V_PATH_LOAD.Text
         While len(s) > 0
            path = Splitby(s, "*")
            If Not (fso.FolderExists(path)) Then
               if Msgbox("Не найден путь к директории загруженных реестров """&path&""". Создать?", vbYesNo) = vbYes then
                  'если директории нет, создадим
                  Set fs = fso.CreateFolder(path)
               else
                  Main = NULL
                  Exit Function
               end if
               End If                     
         Wend
      end if
   end if   
      Main = True      
End Function
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеЧт Мар 01, 2018 08:08    Ответить с цитатой
Полезность: Нет оценки
В теле уже остатки такие:
Код:

begin
   if V_LISTM.count > 0 then
      for i in V_LISTM.first .. V_LISTM.last loop
         file_name := V_LISTM(i);

         -- Здесь происходит обработка загруженных файлов

         ::[TAX_LIMIT_FILES].[LIB].CopyFile(i, false, file_name, V_PATH_SERV, V_PATH_LOAD, p_del == true, p_not_copy == false);   -- перемещаем файл в папку загруженных
      end loop;
   end if;
end;
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеЧт Мар 01, 2018 08:11    Ответить с цитатой
Полезность: Нет оценки
В проверках стоит "Сервер, Клиент", в обмене информацией "Выводит команды в буфер сессии".
Что не так, не могу понять Sad
widla
Участник со стажем


Вступление в Клуб: 22.01.2018
СообщениеЧт Мар 01, 2018 10:28    Ответить с цитатой
Полезность: Нет оценки
widla пишет:
Что не так, не могу понять Sad

Всё, разобрался! CheckValidate у ОК забыл установить.
Спасибо!
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru