Имя: Пароль:
1C
 
Выгрузка данных из Excel в 1с. Не отображается табличный документ.
0 Reflection1
 
12.10.24
14:51
Нужно сделать выгрузку через реквизит "Путь к файлу" и кнопку, однако кнопка не реагирует после диалога. Вероятнее всего ошибка где-то в коде, но к сожалению, я ее не вижу, буду благодарен по помощь или подсказку, код оставляю ниже.

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

&НаКлиенте
Процедура ПослеВыбораФайлов(ВыбранныеФайлы,ДополнительныеПараметры) Экспорт
    
    Если ВыбранныеФайлы=Неопределено Тогда
    Возврат
КонецЕсли;            
    Объект.ПутьКФайлу=ВыбранныеФайлы[0];  
    
КонецПроцедуры
         
&НаКлиенте
Процедура ПолучитьДоговора(Команда)  
ПолучитьДоговораНаСервере();        
КонецПроцедуры  

&НаСервере
Процедура  ПолучитьДоговораНаСервере()    
    
     ТабДок=Новый ТабличныйДокумент;    
    
    Попытка
        ТабДок.Прочитать(Объект.ПутьКФайлу,СпособЧтенияЗначенийТабличногоДокумента.Значение);
    Исключение  
        Сообщение=Новый СообщениеПользователю;
        Сообщение.Текст="Не удалось прочитать файл по причине"+ОписаниеОшибки();
        Сообщение.Сообщить();
        Возврат;
    КонецПопытки;
    
    КоличествоСтрок=ТабДок.ВысотаТаблицы;
        
    ДанныеФайла=Новый ТаблицаЗначений;  
    ДанныеФайла.Колонки.Добавить("Дата");
    ДанныеФайла.Колонки.Добавить("Номер");    
    ДанныеФайла.Колонки.Добавить("ТипДокумента");
    ДанныеФайла.Колонки.Добавить("Организация");
    ДанныеФайла.Колонки.Добавить("Сотрудник");
    ДанныеФайла.Колонки.Добавить("Сумма");
    ДанныеФайла.Колонки.Добавить("Начало");
    ДанныеФайла.Колонки.Добавить("Окончание");
    ДанныеФайла.Колонки.Добавить("МесяцНачисления");
    ДанныеФайла.Колонки.Добавить("Комментарий");
    
        
    Для НомерСтроки=2 по ДанныеФайла Цикл    
    
    СтрокаТаблица=ДанныеФайла.Добавить();    
    СтрокаТаблица.Дата=ТекущаяДата();  
    СтрокаТаблица.Номер=ТабДок.Область("R"+Формат(СтрокаТаблица,"ЧГ=0")+"С"+6).ТекущаяОбласть.Текст;    ;    
    СтрокаТаблица.ТипДокумента=Документы.ДоговорРаботыУслуги;
    СтрокаТаблица.Огранизация=Справочники.Организации.НайтиПоРеквизиту("ГоловнаяОрганизация");  
    СтрокаТаблица.Сотрудник=ТабДок.Область("R"+Формат(СтрокаТаблица,"ЧГ=0")+"С"+2).ТекущаяОбласть.Текст;    
    ЧетвертаяКолонка=ТабДок.Область("R"+Формат(СтрокаТаблица,"ЧГ=0")+"С"+4).ТекущаяОбласть.Текст;    
        Если ЧетвертаяКолонка="ВСЕГО НАЧИСЛЕНО" Тогда
        СтрокаТаблица.Сумма=ТабДок.Область("R"+Формат(СтрокаТаблица,"ЧГ=0")+"С"+5).ТекущаяОбласть.Текст;    
    КонецЕсли;
    СтрокаТаблица.Начало=Объект.ДатаНачала;
    СтрокаТаблица.Окончание=Объект.ДатаОкончания;
    СтрокаТаблица.МесяцНачисления=Объект.Месяц;
    СтрокаТаблица.Комментарий="";
    КонецЦикла;        
КонецПроцедуры
1 PR
 
12.10.24
14:53
(0) Смотри отладчик, конкретно "Объект.ПутьКФайлу=ВыбранныеФайлы[0];"
2 osa1C
 
12.10.24
15:42
(0) Для начала убери не нужное тебе здесь Оповещение и процедуру ПослеВыбораФайлов. У тебя уже все сделано в первой процедуре. Все что в первой процедуре перенеси в процедуру ПриИзменении Поля ПутьКФайлу. По кнопке сначала проверяй ПутьКФайлу на пустое значение, если не пустое, то выполняй все свои действия
3 Волшебник
 
12.10.24
15:44
Справочники.Организации.НайтиПоРеквизиту("ГоловнаяОрганизация");

Не передаётся второй параметр
4 Reflection1
 
12.10.24
15:46
(2) Заменил на: Объект.ПутьКФайлу=Диалог.Каталог; При нажатии на  кнопку пишет, что "ошибка при вызове метода контекста(прочитать). Ошибка доступа к выбранному файлу"
5 Reflection1
 
12.10.24
15:51
(3) Заменил на строчку, которую использовал в другой колонке, всё равно выдает ошибку, что ошибка в данной строчке: ТабДок.Прочитать(Объект.ПутьКФайлу,СпособЧтенияЗначенийТабличногоДокумента.Значение);
6 Доминошник
 
12.10.24
15:55
(5) Файл доступен на сервере по полученному на клиенте пути?
7 osa1C
 
12.10.24
16:04
(4) Вот тебе пример диалога выбора файла
код
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выбор файла";
    Диалог.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx";
    Диалог.ИндексФильтра = 0;
    Диалог.ПредварительныйПросмотр = Ложь;
    Диалог.ПроверятьСуществованиеФайла = Истина;
    Диалог.МножественныйВыбор = Ложь;
    Диалог.ПолноеИмяФайла = ПутьКФайлу;
    
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
    КонецЕсли;    

КонецПроцедуры
8 Волшебник
 
12.10.24
16:36
(5) Какая ошибка?
9 Reflection1
 
12.10.24
17:39
(6) Нет, не доступен
10 Reflection1
 
12.10.24
17:40
(8) "ошибка при вызове метода контекста(прочитать). Ошибка доступа к выбранному файлу"
11 Волшебник
 
12.10.24
17:43
(10) Дайте доступ
12 osa1C
 
12.10.24
17:43
(10) Делай все действия на клиенте.
13 Reflection1
 
12.10.24
18:21
(11) Простите за глупый вопрос, не подскажите как это правильно сделать?
14 craxx
 
12.10.24
20:25
(13) Ты на сервере пытаешься прочитать файл, который на клиенте. Передай его на сервер, есть разные способы это сделать.
15 PR
 
12.10.24
20:28
Да все просто же
Чувак выбирает файл на клиенте, а потом на сервере по выбранному пути пытается что-то с ним сделать
И конечно же на сервере по этому пути ничего нет, потому что ТС туда ничего не переместил с клиента
За три часа мог бы уже найти пример с интернете или типовой и разобраться
16 PR
 
12.10.24
20:28
О, пока писал (15), уже написали (14)
17 Reflection1
 
13.10.24
13:51
(15) Почти сразу нашёл пример и исправил. Спасибо всем за помощь.
18 Волшебник
 
13.10.24
13:54
(17) Покажите программный код
19 Reflection1
 
14.10.24
00:03
(18) Вы как чувствовали, попросили доработать немного, теперь опять возникает проблема, что документ не отображается на клиенте:

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


&НаКлиенте
Процедура ПолучитьДоговора(Команда)       
ДанныеПути=Новый ДвоичныеДанные(Объект.ПутьКФайлу);
АдресДанных=ПоместитьВоВременноеХранилище(ДанныеПути);    

ТабДок1=Новый ТабличныйДокумент;  
ТабДок1=ПолучитьДоговораНаСервере(АдресДанных);
ТабДок1.Показать();
       
КонецПроцедуры      
      

&НаСервере
Функция ПолучитьДоговораНаСервере(АдресДанных)  
    
     ТабДок=Новый ТабличныйДокумент;
        
     Данные=ПолучитьИзВременногоХранилища(АдресДанных);
     ПутьКФайлуНаСервере=ПолучитьИмяВременногоФайла("xls");
    
     Данные.Записать(ПутьКФайлуНаСервере);    
         
    Попытка
        ТабДок.Прочитать(ПутьКФайлуНаСервере,СпособЧтенияЗначенийТабличногоДокумента.Значение);
    Исключение  
        Сообщение=Новый СообщениеПользователю;
        Сообщение.Текст="Не удалось прочитать файл по причине"+ОписаниеОшибки();
        Сообщение.Сообщить();
        Возврат Сообщение;
    КонецПопытки;      
    
    ДанныеФайла=Новый ТаблицаЗначений;  
    ДанныеФайла.Колонки.Добавить("Дата");
    ДанныеФайла.Колонки.Добавить("Номер");    
    ДанныеФайла.Колонки.Добавить("ТипДокумента");
    ДанныеФайла.Колонки.Добавить("Организация");
    ДанныеФайла.Колонки.Добавить("Сотрудник");
    ДанныеФайла.Колонки.Добавить("Сумма");
    ДанныеФайла.Колонки.Добавить("Начало");
    ДанныеФайла.Колонки.Добавить("Окончание");
    ДанныеФайла.Колонки.Добавить("МесяцНачисления");
    ДанныеФайла.Колонки.Добавить("Комментарий");         
    
    КоличествоСтрок=ТабДок.ВысотаТаблицы;
    КоличествоКолонок = ТабДок.ШиринаТаблицы;
        
    Для НомерСтроки=2 по КоличествоСтрок Цикл  
        СтрокаТаблицы=ДанныеФайла.Добавить();
СтрокаТаблицы.Дата=ТекущаяДата();
СтрокаТаблицы.Номер=ТабДок.Область("R"+Формат(НомерСтроки,"ЧГ=0")+"C"+6).ТекущаяОбласть.Текст;  
СтрокаТаблицы.ТипДокумента=Документы.ДоговорРаботыУслуги;  
СтрокаТаблицы.Организация=Справочники.Организации.НайтиПоРеквизиту("ГоловнаяОрганизация");  
СтрокаТаблицы.Сотрудник=ТабДок.Область("R"+Формат(НомерСтроки,"ЧГ=0")+"C"+2).ТекущаяОбласть.Текст;    
ЧетвертаяКолонка=ТабДок.Область("R"+Формат(НомерСтроки,"ЧГ=0")+"C"+4).ТекущаяОбласть.Текст;    
Если ЧетвертаяКолонка="ВСЕГО НАЧИСЛЕНО" Тогда     СтрокаТаблицы.Сумма=ТабДок.Область("R"+Формат(НомерСтроки,"ЧГ=0")+"C"+5).ТекущаяОбласть.Текст;    
    //КонецЕсли;  
СтрокаТаблицы.Начало=Объект.ДатаНачала;
    СтрокаТаблицы.Окончание=Объект.ДатаОкончания;
    СтрокаТаблицы.МесяцНачисления=Объект.Месяц;
    СтрокаТаблицы.Комментарий="";    
КонецЦикла;    
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных=Новый ОписаниеИсточникаДанных(ДанныеФайла);
ПостроительОтчета.Вывести(ТабДок);
Возврат ТабДок;
     КонецФункции
20 Мультук
 
гуру
14.10.24
09:04
(19)

>>теперь опять возникает проблема, что документ не отображается на клиенте

1) Вы тупо не хотите сесть в отладчик и  начать думать головой

2)
  Возврат Сообщение; //Что это ? Зачем это возвращать ?

3) Строка вообще выполняется? Без ошибок (см пункт 1) ?
ТабДок.Прочитать(ПутьКФайлуНаСервере,СпособЧтенияЗначенийТабличногоДокумента.Значение);
21 Волшебник
 
14.10.24
09:32
Да это бот. Он опять сгенерил какой-то левый программный код
22 Волшебник
 
14.10.24
09:33
Ошибка (3) по-прежнему осталась:
Справочники.Организации.НайтиПоРеквизиту("ГоловнаяОрганизация"); 


Что он тут ищет, непонятно...
23 Волшебник
 
14.10.24
09:39
(22)+ более того

НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>)
Параметры:
<ИмяРеквизита> (обязательный)
<ЗначениеРеквизита> (обязательный)

Дальше этой строки ничего выполняться не будет.
Значит весь бред ниже про ЧетвертаяКолонка="ВСЕГО НАЧИСЛЕНО" — это всё бредокодогенерация.
24 Волшебник
 
14.10.24
09:47
(23)+ Да там даже ЕСЛИ не закрывается. Модуль вообще не рабочий.

Нам пудрят мозги.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший