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

Не получается создать и заполнить файл на локальном диске.

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


Вступление в Клуб: 28.03.2018
СообщениеПт Мар 30, 2018 10:41   Не получается создать и заполнить файл на локальном диске. Ответить с цитатой
Полезность: Нет оценки
Накопились вопросы - извините. )

Обрабатываю xml-файл.
На основании него хочу создать другой xml-файл.

Кусок кода прилагаю. Для понимания вопроса просто. Смысла там нет особенного.

fileR := stdio.open(P_FILE_ALT.[DST_PATH], P_FILE_ALT.[DST_NAME], 'r');

while stdio.get_line(fileR, g_str, false, stdio.WINTEXT) loop
stdio.put_line_buf('<КоличествоПередаваемыхФайлов>1</КоличествоПередаваемыхФайлов>');
end loop;

stdio.close(fileR);

После этого естественно выводится только на экран.
Нужно вывести в файл.

Пытался сделать
fileR := stdio.open(P_FILE_ALT.[DST_PATH], P_FILE_ALT.[DST_NAME], 'w');

На экранной форме выводится конструкция Источник-Приемник.
Не разобрался с этим - так что вывожу просто на экран.
При попытке сохранить - упорно пытается залезть на сервер, хотя галоки сохранять на клиента ставлю.
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеПт Мар 30, 2018 11:06    Ответить с цитатой
Полезность: Нет оценки
Код PL+ работает на сервере. Файлы на клиенте надо создавать через клиент-скрипт.

Либо, создавать на сервере и потом копировать на клиента, с помощью той самой структуры FILE#LOAD
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеПт Мар 30, 2018 11:19    Ответить с цитатой
Полезность: Нет оценки
воспользуйся поиском по этому сайту, например по ключевому слову COPYFILES этот метод умеет в обе стороны копировать
http://cftclub.ru/viewtopic.php?t=3432&highlight=COPYFILES

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


Вступление в Клуб: 28.03.2018
СообщениеВт Апр 03, 2018 09:16    Ответить с цитатой
Полезность: Нет оценки
Здравствуйте.
Поискал по этой теме - правда в отпуске был - так что не очень активно.
Тут конечно бы на примере, как можно более простом - я потом разберусь.

На форме сделано так: (в архиве)

Есть тело и локальное описание.
Там конечно лишнего много.
Мне бы код, когда просто Создается файл на сервере с одной строкой и потом копируется на локальную машину.

Короче примера не нашел. )

Тело

i integer := 1;

begin

if substr(P_File.[DST_PATH], -1) != '\' then
P_File.[DST_PATH] := P_File.[DST_PATH] || '\';
end if;

-- Формируем имя файла выгрузки

Files(i).name := P_File.[DST_NAME];
Debug_pipe('Формируем файл выгрузки баланса.', 0);
EXP_BAL_1(P_Filial, P_D1, P_D2, Upper(P_File.[DST_NAME]),[NUMBER_LEN]);

----------------------------------------

::[DOCUMENT].[COPYFILES].tbl_F$L(i).[SRC_NAME] := Upper(Files(i).name);
::[DOCUMENT].[COPYFILES].tbl_F$L(i).[SRC_PATH] := cPathServ;
::[DOCUMENT].[COPYFILES].tbl_F$L(i).[SRC_TYPE] := true; -- С сервера
::[DOCUMENT].[COPYFILES].tbl_F$L(i).[SRC_DELETE] := true; -- Потом удалить
::[DOCUMENT].[COPYFILES].tbl_F$L(i).[DST_NAME] := Upper(Files(i).name);
::[DOCUMENT].[COPYFILES].tbl_F$L(i).[DST_PATH] := P_File.[DST_PATH];
::[DOCUMENT].[COPYFILES].tbl_F$L(i).[DST_TYPE] := false; -- На клиента
::[DOCUMENT].[COPYFILES].tbl_F$L(i).[DST_DELETE] := false;
Debug_pipe('Копирую файл с сервера "' || cPathServ || Files(i).name ||
'" на клиента в "' || P_File.[DST_PATH] || Files(i).name || '"', 0);
v_ret := v_ret || '<% CALL DOCUMENT COPYFILES ' || nvl(::[SYSTEM]%id,1) || ' %>';

stdio.put_line_buf(v_ret);

Debug_pipe('Закончили.', 0);

end;


Вот локальное описание

procedure EXP_BAL_1(Filial in ref [BRANCH], Dt1 in Date, Dt2 in Date,FileName in String, num_len in [SHORT3] default 16) is
file Integer;
cPathServ String := '.';
num_format String := '90D99'; -- BFS00020291
begin
-- Иниц-ция пакета
[UNIMP].RESET;
[UNIMP].EXPFORMAT := Null;
[UNIMP].DELIMITER := null;
[UNIMP].GenException := false;
[UNIMP].FILLING := ' ';
[UNIMP].FILLTONAME := false;
[UNIMP].DATEFORMAT := 'DD/MM/YYYY';
num_format := LPAD(num_format, num_len-1, '9'); -- BFS00020291 - добываем шаблон 9-ками
num_len := num_len; -- BFS00020291
--debug_pipe('num_format = '||num_format,0);

-- Готовим структуру файла
--[UNIMP].Set_Column( 'BS2', 6, null, null, 'C' ); -- Номер бал.счета

-- Открываем файл
Debug_pipe('Открываем файл на сервере ' || cPathServ || FileName, 0);
file := stdio.open(cPathServ, FileName, 'w');
stdio.put_line(file, 'Б', null, null, stdio.DOSTEXT);

[UNIMP].Put_Line(file);
IF file is not null then
stdio.close_all;
Debug_pipe('Закрываем сформированный файл на сервере ' || cPathServ || FileName, 0);
end if;

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

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