Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 18:59

Не могу понять в чем ошибка

Автор maxxi, 12 сен 2023, 10:52

0 Пользователей и 1 гость просматривают эту тему.

maxxi

Максим75,
"вангую что пусто, Вам на это и указали, что Вы файл Экселя открываете, и дальше с ним ничего не делаете.
соответственно, что когда в запрос передаете НИЧЕГО, то на выходе НИЧЕГО и получаете."

Не знаю что писать/добавить, ничего не приходить в голову(((

LexaK

Максим75,
очень сложно, объяснить начинающему ученику 1С что (обычным) запросом 1С
не получится прочитать данные из файла Ексель!

(а идея просто замечательная!)
1.подключаем файл Ексель как источник ОДБС,
2.уже из него читаем данные именно Запросом 1С
3.и результат запроса (данные файла Екселя) помещаем в ТаблицуЗначений!

что и требовалось!!!
если помогло нажмите: Спасибо!

maxxi

LexaK, я не правильно выразился, правильнее будет "хочу из файла загрузить и поместить в ТаблицуЗначений."

Максим75

maxxi, я Вам и выслал как прочитать из Эксель и в таблицу значений на форме запихнуть.
Вам только изменить на свои реквизиты и вперед.

maxxi

Максим75, я от Вас ничего не получил.

Максим75

maxxi, таки да, глюк какой-то.

вот смотрите:

&НаКлиенте
Процедура ПрочитатьФайл_XLS()

//есть несколько вараинтов чтения из Екселя
//здесь реализовано чтение через объект ТабличныйДокумент
//у ТабличногоДокумента метод Прочитать доступен долько на сервере
//поэтому вызываем процедуру чтения на сервере
Объект.ДанныеФайла.Очистить();

//1. на стороне клиента сначала получаем двоичные данные файла
ДанныеФайла = Новый ДвоичныеДанные(Объект.ПутьКФайлу);
//2. полученные данные помещаем во временное хранилище
АдресДанных = ПоместитьВоВременноеХранилище(ДанныеФайла);
//3. Адрес данных передаем как параметр при вызове серверной процедуры
ПрочитатьФайл_XLS_НаСервере(АдресДанных);

КонецПроцедуры

&НаСервере
Процедура ПрочитатьФайл_XLS_НаСервере(Адрес)

ТабДок = Новый ТабличныйДокумент;

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

//количество строк в табличном документе, оно же кол-во строк в файле Ексель
//через свойство табличного документа ВысотаТаблицы
КолвоСтрок = ТабДок.ВысотаТаблицы;
//Сообщить("Кол-во строк "+КолвоСтрок);
//ну и в цикле обходим строки
Для НомерСтроки = 2 по КолвоСтрок цикл

НоваяСтрока = Объект.ДанныеФайла.Добавить();
НоваяСтрока.Наименование = ТабДок.ПолучитьОбласть("R"+Формат(НомерСтроки,"ЧГ=0")+"C1").ТекущаяОбласть.Текст;
НоваяСтрока.ПолноеНаименование = ТабДок.ПолучитьОбласть("R"+Формат(НомерСтроки,"ЧГ=0")+"C2").ТекущаяОбласть.Текст;
НоваяСтрока.ОКПО = ТабДок.ПолучитьОбласть("R"+Формат(НомерСтроки,"ЧГ=0")+"C3").ТекущаяОбласть.Текст;

КонецЦикла;


КонецПроцедуры

Вам только подправить под свои колонки и под свою таблицу значений на форме

LexaK

Цитата: maxxi от 12 сен 2023, 16:00"хочу из файла загрузить и поместить в ТаблицуЗначений."
это понятно, это уже выяснили через 20 сообщений

вопрос в следующем ?

я хочу что бы мне сделали эту загрузку
или
"Просто я сам хочу все написать в целях обучения,"

(это две большие разницы в подходе решения задач)

если помогло нажмите: Спасибо!

maxxi

LexaK, "Просто я сам хочу все написать в целях обучения"

maxxi

Вот обновленный код.


&НаСервере
Процедура СформироватьНаСервере()
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТЧ_Норматив.Товары КАК Товары,
        |    ТЧ_Норматив.НормативДень КАК НормативДень
        |ПОМЕСТИТЬ ВТ_ТЧ_Норматив
        |ИЗ
        |    &ТЧ КАК ТЧ_Норматив
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_ТЧ_Норматив.Товары КАК Товары,
        |    ВТ_ТЧ_Норматив.НормативДень КАК НормативДень,
        |    Товары.Ссылка КАК Ссылка
        |ИЗ
        |    ВТ_ТЧ_Норматив КАК ВТ_ТЧ_Норматив
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товары
        |        ПО ВТ_ТЧ_Норматив.НормативДень = Товары.Ссылка
        |            И ВТ_ТЧ_Норматив.НормативДень = Товары.Ссылка";
   
    ТЧ= Объект.ДанныеФайла.Выгрузить();
   
    Запрос.УстановитьПараметр("ТЧ",ТЧ);
   
    РезультатЗапроса = Запрос.Выполнить();
   
    Выборка = РезультатЗапроса.Выбрать();
   
    Пока Выборка.Следующий() Цикл
       
        ТабЗнач=Объект.ДанныеФайла.Добавить();
       
        ТабЗнач.Товары=Выборка.Ссылка;
       
        ТабЗнач.НормативДень=Выборка.НормативДень;

    КонецЦикла;
   
КонецПроцедуры


Здесь я сопоставил/соединил данные из файла с данными 1с.
Но если соединить "Левое" или "Внутреннее" то ничего не видно, если соединить "Правое" или "Полное" тогда в поле "Товары" выводятся все товары, даже которые  нет в файле. А мне надо что сопоставить/выводить только те товары которые есть в файле.
Спасибо.

Максим75

а зачем два раза в связи?
ПО ВТ_ТЧ_Норматив.НормативДень = Товары.Ссылка
        |            И ВТ_ТЧ_Норматив.НормативДень = Товары.Ссылка";

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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск