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

Запрос из временной ТаблЗначений на форме

Автор Funt432286, 27 фев 2024, 17:52

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

Funt432286

Всем доброго времени суток!

Не стал делать новую тему, может тут подскажут!

Есть ТабличныйДокумент, заполненный из файла эксель, теперь нужно его загнать данные во временную таблицу, дабы потом получать данные через запрос!

Выдает ошибку и почему-то данные не загружаются во временную таблицу!

&НаСервере
Процедура ЗаполнитьОзонНаСервере(ТабДокумент)

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаТовары", ТабДокумент);
Запрос.Текст = "
|ВЫБРАТЬ *
        |ПОМЕСТИТЬ ВТ_Товары
        |ИЗ
        |    &ТаблицаТовары КАК ТаблицаТовары";
Выборка = Запрос.Выполнить().Выбрать();

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


&НаКлиенте
Процедура ЗаполнитьОзон(Команда)

ЗаполнитьОзонНаСервере(ТабличныйДокумент);

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

LexaK

Funt432286, Хм, таб.док нельзя в параметрах задавать!
сначала его надо превратить в тЗ
если помогло нажмите: Спасибо!

Funt432286

LexaK,
пытаюсь преврать ТекДок в ТЗ, но как-то не выходит. Вот код превращения:
Функция ПолучитьТЗИзМакета(ТабДок, КолонкаИндекса = 1) Экспорт
   
    ТаблицаДанных = Новый ТаблицаЗначений;
    НомерКолонки = 0;
    Пока Истина Цикл
        НомерКолонки = НомерКолонки + 1;
        ИмяКолонки = ТабДок.Область(1, НомерКолонки).Текст;
        Если ПустаяСтрока(ИмяКолонки) Тогда
            Прервать;
        КонецЕсли;       
        ТаблицаДанных.Колонки.Добавить(ИмяКолонки);
    КонецЦикла;
   
    СчетчикКолонок = НомерКолонки - 1;
   
    НомерСтроки = 1; ФлагПрерывания = Ложь;
    Пока Истина Цикл
        НомерСтроки = НомерСтроки + 1;
        Стр = ТаблицаДанных.Добавить();
       
        Для А = 1 ПО СчетчикКолонок Цикл
            ТекстКолонки = ТабДок.Область(НомерСтроки, А).Текст;
            Если ПустаяСтрока(ТекстКолонки) Тогда
                Если А = КолонкаИндекса Тогда
                    Флагпрерывания = Истина;
                    ТаблицаДанных.Удалить(Стр);
                КонецЕсли;
            Иначе
                Стр[А - 1] = ТекстКолонки
            КонецЕсли;
           
            Если Флагпрерывания Тогда
                Прервать
            КонецЕсли;
        КонецЦикла;
       
        Если Флагпрерывания Тогда
            Прервать
        КонецЕсли;
    КонецЦикла;
   
    Возврат ТаблицаДанных
КонецФункции

Система долго обрабатывает данные потом выдает ошибку

antoneus

Пользуйтесь свойствами табдока ШиринаТаблицы и ВысотаТаблицы.

LexaK

(дурацкий сайт, пропал классный ответ, вот сокрашенная версия)

вот кусок кода получения ТЗ и табдока
//через построитель получаем все данные из ТабДОк
лкПостроитель = Новый ПостроительЗапроса;
лкПостроитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаДанных.Область());
лкПостроитель.Выполнить();

// Установим отборы - не используется
//тОтбор = лкПостроитель.Отбор.Добавить("Магазин");
//тОтбор.ВидСравнения = ВидСравнения.Равно;
//тОтбор.Значение = Магазин.Код;
//тОтбор.Использование = Истина;

// Возвращаем таблицу значений с отобранными из макета данными
Попытка
лкТЗ = лкПостроитель.Результат.Выгрузить();
Исключение
//скорее всего не загружены данные из буфера, ТабДок - пустой
лкОшибка = ОписаниеОшибки();
Сообщить(лкОшибка);
//ИспользоватьВнешниеДанные = Ложь;
лкТЗ = Неопределено;
//ВызватьИсключение лкОшибка;
КонецПопытки;

Возврат лкТЗ;

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

Funt432286

LexaK,
Вот ошибка:
{Обработка.СформироватьОтчетКомиссионера.Форма.Форма.Форма(2399)}: Ошибка при получении значения атрибута контекста (Результат): {(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
Функция обМакетВТаблицуЗначений(Макет) Экспорт

    //через построитель получаем все данные из ТабДОк
    лкПостроитель = Новый ПостроительЗапроса;
    лкПостроитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
    лкПостроитель.Выполнить();
   
    // Установим отборы - не используется
    //тОтбор = лкПостроитель.Отбор.Добавить("Магазин");
    //тОтбор.ВидСравнения = ВидСравнения.Равно;
    //тОтбор.Значение = Магазин.Код;
    //тОтбор.Использование = Истина;
   
    // Возвращаем таблицу значений с отобранными из макета данными
    Попытка
        лкТЗ = лкПостроитель.Результат.Выгрузить();
    Исключение
        //скорее всего не загружены данные из буфера, ТабДок - пустой
        лкОшибка = ОписаниеОшибки();
        Сообщить(лкОшибка);
        //ИспользоватьВнешниеДанные = Ложь;
        лкТЗ = Неопределено;
        //ВызватьИсключение лкОшибка;
    КонецПопытки;

    Возврат лкТЗ;

КонецФункции

&НаКлиенте
Процедура ЗаполнитьОзон(Команда)
   
    ТаблЗначений = обМакетВТаблицуЗначений(ТабличныйДокумент);   
   
КонецПроцедуры

LexaK

ну имена параметров кто будет соблюдать?

ТаблЗначений = обМакетВТаблицуЗначений(ТабличныйДокумент); //передали ТабличныйДокумент
Функция обМакетВТаблицуЗначений(Макет) Экспорт //здесь ТабличныйДокумент = Макет
лкПостроитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаДанных.Область());//а здесь ТаблицаДанных
 
если помогло нажмите: Спасибо!

Funt432286

LexaK, все равно та же ошибка

    лкПостроитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область());

{Обработка.СформироватьОтчетКомиссионера.Форма.Форма.Форма(2399)}: Ошибка при получении значения атрибута контекста (Результат): {(1, 1)}: Ожидается выражение "ВЫБРАТЬ"

LexaK

Funt432286, ТЗ получается из макета?
что в строке 2399? Запрос.Выполнить()?
если помогло нажмите: Спасибо!

Funt432286

LexaK,         лкТЗ = лкПостроитель.Результат.Выгрузить();

Теги:

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

Рейтинг@Mail.ru

Поиск