|   |   | 
| 
 | Выгрузка данных из 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)+ Да там даже ЕСЛИ не закрывается. Модуль вообще не рабочий.
 Нам пудрят мозги. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |