Имя: Пароль:
1C
1С v8
Выгрузка файла
0 ALEX7519
 
29.10.18
16:25
1с зуп 8.3

Не подскажите, как исправить :
была обработка по выгрузке данных в дбф, работала в файловом режиме

на клиенте процедура выбора файла

&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ВыборФайла=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ВыборФайла.Фильтр= "*.dbf)|*.dbf";
    ВыборФайла.МножественныйВыбор=Ложь;
    ВыборФайла.Каталог=ИмяФайла;
    ВыборФайла.ПроверятьСуществованиеФайла=Ложь;
    Если ВыборФайла.Выбрать() тогда
        ИмяФайла = ВыборФайла.ПолноеИмяФайла;        
    КонецЕсли;
КонецПроцедуры


&НаКлиенте
Процедура Выгрузить()
    ВыгрузитьНаСервере();
    
    //    Предупреждение("Все");
    
КонецПроцедуры

&НаСервере
Процедура ВыгрузитьНаСервере()

    
    XBase = Новый XBase;
    XBase.ОткрытьФайл(ИмяФайла);

...
XBase=Новый XBase;

XBase.Поля.Добавить("p8","N",15,2);
        
        xbase.Кодировка=КодировкаXBase.ANSI;
        
        XBase.СоздатьФайл(ИмяФайла);



....

        XBase.Записать();


после перевода базы на sql перестало работать.
я так понимаю, не видит путь, который мы выбираем на клиенте ?
как это обойти ? как то через временное хранилище ???
1 Дмитрий
 
29.10.18
16:29
на сервере складывай данные в массив, передавай на клиента, на клиенте записывай в файл
2 DmitriyDI
 
29.10.18
16:30
(0) если не переписывать код, можно использовать сетевой путь, обязательно чтобы у пользователя под которым работает 1С был доступ к папке.
3 ALEX7519
 
29.10.18
16:34
(1) а сразу на сервере можно формирорвать какой-ниб временный файл и потом передавать его на клиент можно как-нибудь ?
а как передать потом на клиент обратно массив ?
4 Lexey_
 
29.10.18
16:40
(3) можно конечно
5 Маленький Вопросик
 
29.10.18
16:40
(0) это потому, что в файловом режиме у тебя работало на локальной машине. а тут все на том сервере, где установлено
6 ALEX7519
 
29.10.18
16:41
(4) а как ?
7 Lexey_
 
29.10.18
16:45
(6) ПоместитьВоВременноеХранилище()
8 ZDenis
 
29.10.18
16:46
(6) &На клиенте
АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла ),ЭтаФорма.УникальныйИдентификатор);
ЧтоТоТамНаСервере(АдресВременногоХранилища)


&НаСервере
ДанныеХранилища = ПолучитьИзВременногоХранилища(АдресВременногоХранилища)
9 ZDenis
 
29.10.18
16:51
+8

Дальше можно типа так (там же на сервере)

    ФайлПриемник = "/tmp/temp_v83.dbf";
    ДанныеХранилища.Записать(ФайлПриемник);
    XBase = Новый XBase;
    XBase.ОткрытьФайл(ФайлПриемник);
10 ALEX7519
 
29.10.18
16:55
(9) потом заполняю XBase и потом даю команду
XBase.Записать();

и он сформирует файл на клиентской машине ?
11 ZDenis
 
29.10.18
16:57
(10) не не не, он его сформирует на сервере, а потом через временное хранилище обратно
12 ALEX7519
 
29.10.18
16:59
(11) простите конечно нуба, но как его обратно на клиенте из временного хранилища ?  :)

&На клиенте
АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла ),ЭтаФорма.УникальныйИдентификатор);
ЧтоТоТамНаСервере(АдресВременногоХранилища)

ДанныеХранилища = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
????
13 ZDenis
 
29.10.18
17:00
(12) по аналогии, т.е. на сервере ПоместитьВоВременноеХранилище, а потом на клиенте ПолучитьИзВременногоХранилища
14 ALEX7519
 
29.10.18
17:06
(13) на сервере ?ПоместитьВоВременноеХранилище(ФайлПриемник,ЭтаФорма.УникальныйИдентификатор);

ЭтаФорма.УникальныйИдентификатор -  на сервере видно ее ?

и еще
"/tmp/temp_v83.dbf";

каталог /tmp/ всегда есть ?
15 ZDenis
 
29.10.18
17:18
УникальныйИдентификатор передается исключительно для того чтобы при закрытии форму временное хранилище очищалось.
Для передачи на клиент оно и не надо.

Т.е. на клиенте запускаешь процедуру, в ней помещаешь во временное, потом в ней вызываешь серверную. В серверной заполняешь и возвращаешься в эту же клиентскую процедуру и в ней получаешь из временного хранилища.

"каталог /tmp/ всегда есть ?" Должен быть, проверь.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший