Имя: Пароль:
1C
1С v8
УФ 8,3 загрузка данных из ДБФ, организовать временное хранилище и вывод на экран
,
0 kot275
 
28.06.14
21:53
Доброго времени суток. Нужно выполнить загрузку данных из ДБФ, организовать временное хранилище и вывод на экран. Вопрос в чем. УФ это только показать на экране пользователю. Сами данные надо обрабатывать на сервере. Подскажите какой тип данных можно использовать на сервере для временно хранения данных и отображения их на экране в элементе формы типа "таблица". Организация обмена. Заранее спасибо.
1 Маленький Вопросик
 
28.06.14
22:06
Таблица значений?
2 kot275
 
28.06.14
22:31
(1) Ок, таблица значений. Работает только на сервере. Тогда мне надо передать туда файл, и показать ее на экране. На клиенте таблица значений не применима.
3 Aleksey
 
28.06.14
22:59
(2) ТЗ -реквизит на форме
4 Aleksey
 
28.06.14
22:59
"На клиенте таблица значений не применима." - брехня. Нельзя передовать на сервер ТЗ, но можно преобразовать её или использовать реквизит на форме
5 dj_serega
 
29.06.14
00:35
(0) А состав колонок заранее известен?
6 ДенисЧ
 
29.06.14
07:15
На клиенте взять файл, поместить его в двоичные данные, передать на сервер, там сохранить во временый файл, прочитать, положить в ТЧ формы....
7 H A D G E H O G s
 
29.06.14
09:34
ДенисЧ как всегда ересь несет.

На клиенте взять файл, прочитать в ДанныеФормыКоллекцияСтруктур (которая есть интерпретация ТЗ на УФ и которая показана пользователя лицом). Пользователь ее подредактирует и отправит (а может не отправит) на обработку на сервер (запись в базу, поиск соответствия объектам базы по ИНН, Артикулу, и.т.д.)
8 runoff_runoff
 
29.06.14
09:42
mb ВнешниеИсточникиДанных?
9 kot275
 
29.06.14
10:50
(3) (4) Да. Есть такое. Проглядел.
(5)Да состав постоянен и известный.
(7)Справку прочитал, мне бы еще пример. Не понял я, как это реализовать.
(8)Можно и так наверное.

Пока нарисовал такое.
&НаКлиенте
Процедура кнЗагрузитьИзФайла(Команда)
    кнЗагрузитьИзФайлаНаСервере();
КонецПроцедуры

&НаСервере
Процедура кнЗагрузитьИзФайлаНаСервере()
    
    тзДанные = Новый ТаблицаЗначений;
    тзДанные.Колонки.Добавить("Номенклатура");
    тзДанные.Колонки.Добавить("Цена");
    
    
    //ДБФ=Новый Xbase;
    ДБФ = Новый xBase("C:\Temp\1.dbf");
    Пока ДБФ.Следующая() Цикл
        НоваяСтрока = тзДанные.Добавить();
        НоваяСтрока.Номенклатура = ДБФ.TOVAR;
        НоваяСтрока.Цена = ДБФ.KOLVO;
        Сообщить(ДБФ.TOVAR + " - " + ДБФ.KOLVO);
    КонецЦикла;
    ДБФ.ЗакрытьФайл();
КонецПроцедуры

Данные почему-то выводятся со второй записи, буду копать Интернет.
И как сервер получает файл из этой строчки ДБФ = Новый xBase("C:\Temp\1.dbf");?
10 kot275
 
29.06.14
10:55
Как связать таблицу на сервере и таблицу на форме. Обе тип таблица значений?
11 m-serg74
 
29.06.14
11:01
(10) про РеквизитФормыВЗначение не читал?
12 m-serg74
 
29.06.14
11:03
(9) /"C:\Temp\1.dbf"/

файл действительно лежит на сервере, на диске С, или на компе пользователя?

в (6) есть решение
13 kot275
 
29.06.14
11:11
(12)В том и прикол, лежит на компе пользователя.

Так что-то я сосем туплю. Как таблицу на форме нарисовать-то?
Сделал реквизит тип таблица значений.  На форму добавил элемент таблица, связал с реквизитом. В процедуре на сервере прописал ЗначениеВРеквизитФормы(тзДанные, "ТЗ");
На экране ничего.
14 m-serg74
 
29.06.14
11:16
(13) про вторую строку из СП пример
Пример:

// Обнуляет значения всех полей всех существующих записей
xB.Первая();
Пока Истина Цикл
    xB.Очистить();
    xB.Записать();
    Если Не xB.Следующая() Тогда
        Прервать;
    КонецЕсли;
КонецЦикла;
15 дедушка Вах
 
29.06.14
11:16
типа дфвьюер - отстой, 1с круто?
16 Wobland
 
29.06.14
11:16
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Если НЕ ЭтоАдресВременногоХранилища(АдресФайла) Тогда
        Возврат;
    КонецЕсли;
    НЗ=РегистрыСведений.ФайлыЗаданий.СоздатьНаборЗаписей();
    НЗ.Отбор.Задание.Установить(Объект.Ссылка);
    Запись=НЗ.Добавить();
    //к этому моменту ссылка не должна быть пустой
    Запись.Задание=Объект.Ссылка;
    Запись.Файл=Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресФайла));
    Запись.Расширение=РасширениеФайла;
    НЗ.Записать();
КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
    Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.МножественныйВыбор=Ложь;
    Диалог.Фильтр="Документы Word|*.doc|Все файлы|*.*";
    Диалог.Каталог="c:\temp";
    Если Диалог.Выбрать() Тогда
        АдресФайла=ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), УникальныйИдентификатор);
        Ф=Новый Файл(Диалог.ПолноеИмяФайла);
        РасширениеФайла=Сред(Ф.Расширение, 2);
        Модифицированность=Истина;
    КонецЕсли;
КонецПроцедуры
17 kot275
 
29.06.14
11:23
(14) Не помогло.

Почему не показывается таблица разобрался. Надо колонки было добавить.
18 kot275
 
29.06.14
11:28
Вот так переделал.

&НаКлиенте
Процедура кнЗагрузитьИзФайла(Команда)
    кнЗагрузитьИзФайлаНаСервере();
КонецПроцедуры

&НаСервере
Процедура кнЗагрузитьИзФайлаНаСервере()
    ДБФ = Новый xBase("C:\Temp\1.dbf");
    ДБФ.Первая();
    Пока ДБФ.Следующая() Цикл
        НоваяСтрока = ТЗ.Добавить();
        НоваяСтрока.Товар = ДБФ.TOVAR;
        НоваяСтрока.Колво = ДБФ.KOLVO;
        Сообщить(ДБФ.TOVAR + " - " + ДБФ.KOLVO);
    КонецЦикла;
    ДБФ.ЗакрытьФайл();
КонецПроцедуры
19 KUBIK
 
29.06.14
11:30
(18) У тебя опять со второй строки будет читать
20 KUBIK
 
29.06.14
11:31
ДБФ.Первая();
       НоваяСтрока = ТЗ.Добавить();
        НоваяСтрока.Товар = ДБФ.TOVAR;
        НоваяСтрока.Колво = ДБФ.KOLVO;
        Сообщить(ДБФ.TOVAR + " - " + ДБФ.KOLVO);

    Пока ДБФ.Следующая() Цикл
       НоваяСтрока = ТЗ.Добавить();
        НоваяСтрока.Товар = ДБФ.TOVAR;
        НоваяСтрока.Колво = ДБФ.KOLVO;
        Сообщить(ДБФ.TOVAR + " - " + ДБФ.KOLVO);

     КонецЦикла;
21 kot275
 
29.06.14
11:37
(19) (20) Спасибо, понял. Тогда может быть так?
&НаСервере
Процедура кнЗагрузитьИзФайлаНаСервере()
    ДБФ = Новый xBase("C:\Temp\1.dbf");
    ДБФ.Первая();
    Пока НЕ ДБФ.ВКонце() Цикл
        НоваяСтрока = ТЗ.Добавить();
        НоваяСтрока.Товар = ДБФ.TOVAR;
        НоваяСтрока.Колво = ДБФ.KOLVO;
        Сообщить(ДБФ.TOVAR + " - " + ДБФ.KOLVO);
        ДБФ.Следующая()
    КонецЦикла;
    ДБФ.ЗакрытьФайл();
КонецПроцедуры
22 m-serg74
 
29.06.14
11:38
(21) я тебе пример для чего и присылал :)
23 KUBIK
 
29.06.14
11:39
(21) А чем вариант (14) не устраивает?
24 m-serg74
 
29.06.14
11:41
(23) да по сути теже я... только в профиль :)
25 kot275
 
29.06.14
11:42
(22) (23) (24) Простите, сразу не сообразил.
26 KUBIK
 
29.06.14
11:45
(24) я...=коки :)))))