![]() |
![]() |
![]() |
|
ОШИБКА: Метод объекта не обнаружен ПолучитьОбъект() 🠗 (Волшебник 16.08.2017 18:23) |
☑ | ||
---|---|---|---|---|
0
mihalich979
16.08.17
✎
18:13
|
Конфа самописная
1С 8.3.10 Вот кусок кода: Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим); Фильтр = "CSV (*.csv)|*.csv"; ДиалогОткрытия.Фильтр = Фильтр; ДиалогОткрытия.МножественныйВыбор = Ложь; ДиалогОткрытия.Заголовок = "Выберите файл"; Если ДиалогОткрытия.Выбрать() Тогда ИмяФайла = ДиалогОткрытия.ПолноеИмяФайла; Иначе Предупреждение("Нет выбранного файла!"); КонецЕсли; Таблица = Новый ТаблицаЗначений; //очищаем таблицу и удаляем информацию Таблица.Очистить(); Таблица.Колонки.Очистить(); // чтение ЗагружаемыйФайл = Новый ТекстовыйДокумент; ЗагружаемыйФайл.Прочитать(ИмяФайла); //шапка по умолчанию первая строчка Шапка = ЗагружаемыйФайл.ПолучитьСтрoку(1); Уважаемый all помогите. |
|||
1
mihalich979
16.08.17
✎
18:14
|
ОШИБКА метод объекта не обнаружен ПолучитьСтроку()
П.С. В заголовке ошибка |
|||
2
Heckfy
16.08.17
✎
18:16
|
А где в коде ПолучитьОбъект()???
ЗЫ: Вангую, код выполняется на клиенте. :) |
|||
3
Heckfy
16.08.17
✎
18:20
|
Вот этот ШЕДЕВР :)
Таблица = Новый ТаблицаЗначений; //очищаем таблицу и удаляем информацию Таблица.Очистить(); Таблица.Колонки.Очистить(); Тоже не будет на клиенте работать. Вот это: ЗагружаемыйФайл = Новый ТекстовыйДокумент; ЗагружаемыйФайл.Прочитать(ИмяФайла); не есть гуд. На больших файлах получишь жестокий тупняк лучше замени на Новый ЧтениеТекста |
|||
4
mihalich979
16.08.17
✎
18:23
|
(3) работает в толстом клиенте прекрасно.
(2) получитьОбъект() - это про какой именно объект? |
|||
5
Волшебник
модератор
16.08.17
✎
18:23
|
в цитируемом фрагменте кода ПолучитьОбъект не найден
|
|||
6
mihalich979
17.08.17
✎
10:24
|
Возможно я что-то делаю не так.
Задача: - Есть файл CSV (разделитель ";") который надо загрузить в таблицу документа что хочу: - заполнить таблицу документа на основании данного файла что делаю: - открываю файл - пытаюсь его загнать в ТаблицуЗначений - потом хочу пробежавшись по таблице значений заполнить таблицу документа (есть вероятность что будут элементы которые надо будет добавить в справочники, поэтому в таблицузначений а не сразу в документ. Ну и не все данные из файла загружаются в таблицу документа) П.С. Файл формализован изначально, и я не могу повлиять на его содержимое. Редактирование файла перед загрузкой не рассматривается. П.П.С. запутался немного что на клиента что на сервере делать и как между ними передавать данные. Вот мой код: &НаКлиенте Процедура Загрузить(Команда) Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим); Фильтр = "CSV (*.csv)|*.csv"; ДиалогОткрытия.Фильтр = Фильтр; ДиалогОткрытия.МножественныйВыбор = Ложь; ДиалогОткрытия.Заголовок = "Выберите файл"; Если ДиалогОткрытия.Выбрать() Тогда ИмяФайла = ДиалогОткрытия.ПолноеИмяФайла; Иначе Предупреждение("Нет выбранного файла!"); КонецЕсли; // чтение //ЗагружаемыйФайл = Новый ТекстовыйДокумент; ЗагружаемыйФайл = Новый ЧтениеТекста; ЗагружаемыйФайл.Прочитать(ИмяФайла); //шапка по умолчанию первая строчка Шапка = ЗагружаемыйФайл.ПрочитатьСтрoку(); //раскладываем строку в массив МассивКол = РазложитьСтрокуВМассивПодстрок(Шапка,";"); // процедура из типовой конфигурации, разбивает строку в массив по разделителям Таблица = Новый ТаблицаЗначений; //очищаем таблицу и удаляем информацию Таблица.Очистить(); Таблица.Колонки.Очистить(); //генерируем столбцы Для Каждого ИмяСтолбца Из МассивКол Цикл ИмяБезПробелов = СтрЗаменить(ИмяСтолбца," ",""); // убираем из имени пробелы Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяСтолбца); НовыйСтолбец = Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяСтолбца); НовыйСтолбец.Данные = ИмяБезПробелов; КонецЦикла; Для НомерСтроки=2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл // получить стрoку с указанным номером и преобразуем её в массив Строка = ЗагружаемыйФайл.ПрочитатьСтроку();//ПолучитьСтроку(НомерСтроки); МассивКол = РазложитьСтрокуВМассивПодстрок(Строка,";");// процедура из типовой конфигурации, разбивает строку в массив по разделителям НоваяСтрочка= Таблица.Добавить(); Если МассивКол.Количество() <> Таблица.Колонки.Количество() Тогда Продолжить; // скорее всего в тексте содержит разделитель КонецЕсли; Для НомерСтолбца= 1 по МассивКол.Количество() Цикл //заполняем строчку значениями ТекущееЗначение = МассивКол[НомерСтолбца-1]; ИмяКолонки = Таблица.Колонки[НомерСтолбца-1].Имя; НоваяСтрочка[ИмяКолонки] = ТекущееЗначение; КонецЦикла; КонецЦикла; ТабДанныеЗаМесяц = ЭтотОбъект.Элементы.ДанныеЗаМесяц; Для Каждого Строка ИЗ Таблица Цикл НоваяСтрока = ТабДанныеЗаМесяц.ДобавитьСтроку(); НоваяСтрока.Дата = Строка.Дата; КонецЦикла; КонецПроцедуры &НаСервере Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Результат = Новый Массив; // для обеспечения обратной совместимости Если ПропускатьПустыеСтроки = Неопределено Тогда ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); Если ПустаяСтрока(Строка) Тогда Если Разделитель = " " Тогда Результат.Добавить(""); КонецЕсли; Возврат Результат; КонецЕсли; КонецЕсли; // Позиция = Найти(Строка, Разделитель); Пока Позиция > 0 Цикл Подстрока = Лев(Строка, Позиция - 1); Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда Результат.Добавить(Подстрока); КонецЕсли; Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); Позиция = Найти(Строка, Разделитель); КонецЦикла; Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда Результат.Добавить(Строка); КонецЕсли; Возврат Результат; КонецФункции |
|||
7
mihalich979
17.08.17
✎
10:25
|
(6)
попытался заменить на "чтениетекста" еще не работает в данном виде |
|||
8
mihalich979
17.08.17
✎
10:59
|
ура. что-то получилось.
передал файл на сервер во временное хранилище и получил его оттуда и смог прочитать. &НаКлиенте Процедура Загрузить(Команда) Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим); Фильтр = "CSV (*.csv)|*.csv"; ДиалогОткрытия.Фильтр = Фильтр; ДиалогОткрытия.МножественныйВыбор = Ложь; ДиалогОткрытия.Заголовок = "Выберите файл"; Если ДиалогОткрытия.Выбрать() Тогда ИмяФайла = ДиалогОткрытия.ПолноеИмяФайла; Иначе Предупреждение("Нет выбранного файла!"); КонецЕсли; // создадим тестовый файл для передачи ОповещениеОЗавершении = Новый ОписаниеОповещения("ВыполнитьПослеПомещенияФайла", ЭтотОбъект); НачатьПомещениеФайла(ОповещениеОЗавершении, , // адрес в хранилище ИмяФайла, // имя файла Ложь, // интерактивно ЭтаФорма.УникальныйИдентификатор); // если опустить последний параметр, то помещенный файл // будет удален после очередного запроса сервера // а если указать - то только после удаления объекта формы // если нужно предоставить пользователю возможность // выбрать файл самому четвёртый параметр (интерактивно) // нужно установить в Истина КонецПроцедуры &НаСервере Процедура ПрочитатьФайлНаСервереИзХранилищаНаСервере(АдресФайлаВХранилище) Если АдресФайлаВХранилище = "" Тогда Сообщить("Сначала нужно передать файл с клиента на сервер."); Возврат; КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВХранилище); Если ДвоичныеДанные = Неопределено Тогда Сообщить("Похоже файл уже был удалён из хранилища."); Возврат; КонецЕсли; ДвоичныеДанные.Записать("c:\temp\server.txt"); Текст = Новый ЧтениеТекста("c:\temp\server.txt"); Пока Истина Цикл Строка = Текст.ПрочитатьСтроку(); Если Строка = Неопределено Тогда Прервать; Иначе Сообщить(Строка); КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ВыполнитьПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт Если Результат Тогда // сохраним полученный адрес в реквизит формы АдресФайлаВХранилище = Адрес; Сообщить( "Наконец-то! Файл " + ВыбранноеИмяФайла + " передан на сервер и сохранён во " + "временном хранилище по адресу " + Адрес); Иначе Сообщить("Не удалось передать файл на сервер."); КонецЕсли; ПрочитатьФайлНаСервереИзХранилищаНаСервере(АдресФайлаВХранилище) КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |