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