Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Не выводится табличный документ на форме , Используется ОписаниеОповещения          
vet07 Подменю пользователя
сообщение 16.12.17, 13:42
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Платформа 8.3.10.25.61. Конфигурация самописная (на основе БСП). Управляемое приложение.
Задача: Необходимо загрузить данные из эксель и вывести их в табдок на форме.
Решение: файл из клиента через вр.хранилеще передается на сервер. Там обрабатывается и предаеться
на форму клиенту.
Вопрос: Не могу понять почему табдок не передается с сервера на клиента? На сервере он формируется.
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("РасширениеФайла", РасширениеФайла);
    ДополнительныеПараметры.Вставить("ТабДок", Объект.ДанныеИзФайла);
    
    //Сохранение файла во временное хранилище.
    ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьФайлВХранилище", ЭтаФорма, ДополнительныеПараметры);    
    НачатьПомещениеФайла(ОписаниеОповещения, , ПолноеИмяФайла, Ложь, УникальныйИдентификатор);


Объект.ДанныеИзФайла - это реквизит обработки с типом табдок.
Далее на сервере обрабатывется и формируется табдок. Но через ДополнительныеПараметры.ТабДок не передаеться на клиента.

//Загрузить файл с временного хранилища.
    ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище);    
    ИмяФайла = ПолучитьИмяВременногоФайла(ДополнительныеПараметры.РасширениеФайла);
    ФайлВременногоХранилища.Записать(ИмяФайла);
    УдалитьИзВременногоХранилища(АдресВХранилище);
    
    ТабДокДанные = Новый ТабличныйДокумент;
    Попытка
        ТабДокДанные.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
        УдалитьФайлы(ИмяФайла);
    Исключение
        УдалитьФайлы(ИмяФайла);
        Возврат;
    КонецПопытки;
    
    //Преобразование табличного документа в таблицу значений    
    ТабЗначДанные =  ПреобразоватьТабличныйДокументВТаблицуЗначений(ТабДокДанные);
    ПреобразоватьСтрокуВДату(ТабЗначДанные);
    
    ОпределитьКонечнуюДатуЗаявки(ТабЗначДанные);
        
    //Разделение колонки "Работник" на две: "ИФ_Анг" и "ИОФ_Рус".
    //Измененние колонки ИОФ_Рус на ФИО_Рус
    РазделитьФИОРусскийАнглийский(ТабЗначДанные);    
    
    ПроверитьЗагруженныеДанные(ТабЗначДанные);    
    
    УдалитьПустыеКолонки(ТабЗначДанные);
    
    ДополнительныеПараметры.ТабДок.Очистить();    
    ДополнительныеПараметры.ТабДок = ПреобразоватьТаблицуЗначенийВТабличныйДокумент(ТабЗначДанные);


Сообщение отредактировал Vofka - 18.12.17, 9:32

logist Подменю пользователя
сообщение 16.12.17, 16:54
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(vet07 @ 16.12.17, 13:42) *
Но через ДополнительныеПараметры.ТабДок не передаеться на клиента.

А где код который это делает?


Signature
Личные бесплатные консультации не даю, для этого есть форум!

vet07 Подменю пользователя
сообщение 16.12.17, 17:56
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

logist @ Сегодня, 16:54 * ,
Выкладываю весь необходимый код (без обработки ТабЗначДанные):
&НаКлиенте
Процедура ЗагрузитьДанныеИзФайла(Команда)
    
    Файл = Новый Файл(СокрЛП(Объект.ПутьКФайлу));
    РасширениеФайла =  Файл.Расширение;
    ПолноеИмяФайла = Файл.ПолноеИмя;
    
    Элементы.СформироватьЗаявкиНаОтпуск.Доступность = Ложь;
    
    Если НЕ ЗначениеЗаполнено(ПолноеИмяФайла) Тогда
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = НСтр("ru = 'Вы не выбрали файл для загрузки.' "
        + "; en = 'You did not select a file to upload.' ");
        Сообщение.Сообщить();            
        Возврат;
    КонецЕсли;    
    
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("РасширениеФайла", РасширениеФайла);
    ДополнительныеПараметры.Вставить("ТабДок", Объект.ДанныеИзФайла);
    
    //Сохранение файла во временное хранилище.
    ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьФайлВХранилище", ЭтаФорма, ДополнительныеПараметры);    
    НачатьПомещениеФайла(ОписаниеОповещения, , ПолноеИмяФайла, Ложь, УникальныйИдентификатор);
    
    //Кол = ДополнительныеПараметры.ТабДок.Области.Количество();
    Если ДополнительныеПараметры.ТабДок.Области.Количество() > 0 Тогда
        Объект.ДанныеИзФайла = ДополнительныеПараметры.ТабДок;
        Элементы.ДанныеИзФайла.Показать();
        //ЭтаФорма.ОбновитьОтображениеДанных(Элементы.ДанныеИзФайла);
    Иначе
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = НСтр("ru = 'Не удалось загрузить данные!' "
        + "; en = 'Failed to load data!' ");
        Сообщение.Сообщить();
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьФайлВХранилище(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
    
    Если Не Результат Тогда
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = НСтр("ru = 'Не удалось открыть файл!' "
        + "; en = 'Could not open file!' ");
        Сообщение.Сообщить();                    
        Возврат;    
    КонецЕсли;
    
    ЗагрузитьДанныеИзФайлаНаСервере(Адрес, ДополнительныеПараметры);    
            
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьДанныеИзФайлаНаСервере(Знач АдресВХранилище,ДополнительныеПараметры)            
        
    //Загрузить файл с временного хранилища.
    ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище);    
    ИмяФайла = ПолучитьИмяВременногоФайла(ДополнительныеПараметры.РасширениеФайла);
    ФайлВременногоХранилища.Записать(ИмяФайла);
    УдалитьИзВременногоХранилища(АдресВХранилище);
    
    ТабДокДанные = Новый ТабличныйДокумент;
    Попытка
        ТабДокДанные.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
        УдалитьФайлы(ИмяФайла);
    Исключение
        УдалитьФайлы(ИмяФайла);
        Возврат;
    КонецПопытки;
    
    //Преобразование табличного документа в таблицу значений    
    ТабЗначДанные =  ПреобразоватьТабличныйДокументВТаблицуЗначений(ТабДокДанные);
    ПреобразоватьСтрокуВДату(ТабЗначДанные);
    
    ОпределитьКонечнуюДатуЗаявки(ТабЗначДанные);
        
    //Разделение колонки "Работник" на две: "ИФ_Анг" и "ИОФ_Рус".
    //Измененние колонки ИОФ_Рус на ФИО_Рус
    РазделитьФИОРусскийАнглийский(ТабЗначДанные);    
    
    ПроверитьЗагруженныеДанные(ТабЗначДанные);    
    
    УдалитьПустыеКолонки(ТабЗначДанные);
    
    ДополнительныеПараметры.ТабДок.Очистить();    
    ДополнительныеПараметры.ТабДок = ПреобразоватьТаблицуЗначенийВТабличныйДокумент(ТабЗначДанные);
    
КонецПроцедуры


В переменной ДополнительныеПараметры.ТабДок табличный документ существует (ДополнительныеПараметры.ТабДок.Области.Количество() = 5)
и передается в процедуру ЗагрузитьФайлВХранилище. Но дальше не передается. И как передать на клиента я не пойму?

Сообщение отредактировал Vofka - 18.12.17, 9:33

logist Подменю пользователя
сообщение 16.12.17, 20:20
Сообщение #4

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Зачем вы вообще его гоняете между клиентом и сервером, если он доступен на сервере... Еще, вы сами придумали весь этот код? Просто вы делаете кучу бесполезных вещей, помещаете файл во временное хранилище, затем извлекаете его, сохраняете и потом читаете, не проще ли сразу прочитать файл в табдок? Ну и работать с полем табдока на сервере.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: vet07,

vet07 Подменю пользователя
сообщение 17.12.17, 6:50
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

logist @ Вчера, 20:20 * ,
Изначально я так и думал сделать, но, метод прочитать не работает на тонком клиенте.
Может у кого есть ссылки как прочитать файл в табдок на клиенте?
В на сайтах где я смотрел методика одна - через врем. хранилище.
И все равно интересно, как именно в моем случае табдок передать на клиента?

vet07 Подменю пользователя
сообщение 17.12.17, 9:39
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Вообщем решил задачку. Проблема состояла в моем непонимании, что форма одновременно формируется как на клиенте
так и на сервере. Поэтому ничего на сервер (ДополнительныеПараметры.ТабДок) передавать не надо.
Может кому пригодится, выложу переделанный код:
&НаКлиенте
Процедура ЗагрузитьДанныеИзФайла(Команда)
        
    Файл = Новый Файл(СокрЛП(Объект.ПутьКФайлу));
    РасширениеФайла =  Файл.Расширение;
    ПолноеИмяФайла = Файл.ПолноеИмя;
    
    Элементы.СформироватьЗаявкиНаОтпуск.Доступность = Ложь;
    
    Если НЕ ЗначениеЗаполнено(ПолноеИмяФайла) Тогда
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = НСтр("ru = 'Вы не выбрали файл для загрузки.' "
        + "; en = 'You did not select a file to upload.' ");
        Сообщение.Сообщить();            
        Возврат;
    КонецЕсли;    
        
    //Сохранение файла во временное хранилище.
    ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьФайлВХранилище", ЭтаФорма, РасширениеФайла);    
    НачатьПомещениеФайла(ОписаниеОповещения, , ПолноеИмяФайла, Ложь, УникальныйИдентификатор);
        
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьФайлВХранилище(Результат, Адрес, ВыбранноеИмяФайла, РасширениеФайла) Экспорт
    
    Если Не Результат Тогда
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = НСтр("ru = 'Не удалось открыть файл!' "
        + "; en = 'Could not open file!' ");
        Сообщение.Сообщить();                    
        Возврат;    
    КонецЕсли;
    
    ЗагрузитьДанныеИзФайлаНаСервере(Адрес, РасширениеФайла);    
            
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьДанныеИзФайлаНаСервере(Знач АдресВХранилище,РасширениеФайла)            
    
    Объект.ДанныеИзФайла.Очистить();
    
    //Загрузить файл с временного хранилища.
    ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище);    
    ИмяФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);
    ФайлВременногоХранилища.Записать(ИмяФайла);
    УдалитьИзВременногоХранилища(АдресВХранилище);
    
    ТабДокДанные = Новый ТабличныйДокумент;
    Попытка
        ТабДокДанные.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
        УдалитьФайлы(ИмяФайла);
    Исключение
        УдалитьФайлы(ИмяФайла);
        Возврат;
    КонецПопытки;
    
    //Преобразование табличного документа в таблицу значений    
    ТабЗначДанные =  ПреобразоватьТабличныйДокументВТаблицуЗначений(ТабДокДанные);
    
    Если НЕ ЗначениеЗаполнено(ТабЗначДанные) Тогда
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = НСтр("ru = 'Не удалось загрузить данные!' "
        + "; en = 'Failed to load data!' ");
        Сообщение.Сообщить();
        Возврат;
    КонецЕсли;
    
    ПреобразоватьСтрокуВДату(ТабЗначДанные);
    
    ОпределитьКонечнуюДатуЗаявки(ТабЗначДанные);
        
    //Разделение колонки "Работник" на две: "ИФ_Анг" и "ИОФ_Рус".
    //Измененние колонки ИОФ_Рус на ФИО_Рус
    РазделитьФИОРусскийАнглийский(ТабЗначДанные);    
    
    ПроверитьЗагруженныеДанные(ТабЗначДанные);    
    
    УдалитьПустыеКолонки(ТабЗначДанные);
        
    Объект.ДанныеИзФайла.Вывести(ПреобразоватьТаблицуЗначенийВТабличныйДокумент(ТабЗначДанные));
    Элементы.СформироватьЗаявкиНаОтпуск.Доступность = Истина;
        
КонецПроцедуры


Сообщение отредактировал Vofka - 18.12.17, 9:33

logist Подменю пользователя
сообщение 17.12.17, 17:55
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(vet07 @ 17.12.17, 6:50) *
Может у кого есть ссылки как прочитать файл в табдок на клиенте?

Если сервер имеет доступ к этому пути, то читать файл на клиенте не обязательно, передайте на сервер путь и там сразу прочитайте в табдок.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

vet07 Подменю пользователя
сообщение 18.12.17, 8:55
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Сервер может находиться очень далеко, пользователи могут быть из разных стран. Поэтому проще закинуть
файл на сервер.

Vofka Подменю пользователя
сообщение 18.12.17, 9:34
Сообщение #9

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

vet07, код надо вставлять между тегами [ code ] КОД [ /code ], а не [ code ][ /code ] КОД [ code ][ /code ]

vet07 Подменю пользователя
сообщение 18.12.17, 10:00
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 9:34 * ,
Понял. Исправлюсь. icon_beer17.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 11:45
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!