Имя: Пароль:
1C
1С v8
заполнение ТЧ макета из запроса к БД
0 spapin87
 
09.08.13
10:14
Здравствуйте. Запросом получаю значение и бегу циклом пока не конец файла, но не пойму как заполнить ОбластьСтрока.Параметры.... по каждой новой строке. Пытался добавлять каждый раз новую строку в макете (НоваяСтрока = ТабДок.Добавить();) и заполнять каждым значением ...

Макет = Справочники.ПрайсЛисты.ПолучитьМакет("ЗагруженнаяИнформация");
    ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТаблицы");
    ТабДок=Новый ТабличныйДокумент;
    ТабДок.Очистить();
    ОбластьЗаголовок.Параметры.Поставщик=Наименование;
    Дата = ЭлементыФормы.ИсторияИзмененияЦен.ТекущаяСтрока.ДатаПрайса;
    Дата = Дата(Дата);
    ДатаПрайса = Формат(Дата,"ДФ=dd.MM.yyyy; ДЛФ=D");
    ОбластьЗаголовок.Параметры.ДатаПрайса = ДатаПрайса;
    
    qs_ord = "SELECT
    |    I.item_number,
    |    I.item_name,
    |    P.qty,
    |    P.price,
    |    S.sup_name
    |FROM deon_items AS I
    |INNER JOIN prices AS P ON P.id_item = I.id_item
    |INNER JOIN suppliers AS S ON S.id_sup = P.id_sup
    |WHERE S.sup_name = '"+Контрагент.КодНаименование+"' AND FROM_UNIXTIME(P.prc_date, '%d.%m.%Y') = '"+ДатаПрайса+"'";
    
    rs_ord.Open(qs_ord, Con);
    Пока не rs_ord.EOF цикл
        печАртикул = 0;
        печНаименование = 0;
        печАртикул = TrimAll(rs_ord.fields("item_number").value);
        печНаименование = TrimAll(rs_ord.fields("item_name").value);
        печКоличество = TrimAll(rs_ord.fields("qty").value);
        печЦена = TrimAll(rs_ord.fields("price").value);
        печПоставщик = TrimAll(rs_ord.fields("sup_name").value);

    
        ОбластьСтрока.Параметры.Заполнить(qs_ord);
        rs_ord.MoveNext();
    КонецЦикла;
    Попытка
        Con.Close();
    Исключение
    КонецПопытки;
    
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапка);
    ТабДок.Вывести(ОбластьСтрока);
    ТабДок.Показать( );
1 Godofsin
 
09.08.13
10:21
Имена полей должны совпадать с именами переменных в макете
2 spapin87
 
09.08.13
10:30
Все совпадает. Ошибка: {Справочник.ПрайсЛисты.Форма.ФормаЭлемента(311)}: Ошибка при вызове метода контекста (Заполнить)
        ОбластьСтрока.Параметры.Заполнить(qs_ord);
по причине:
Несоответствие типов (параметр номер '1')
3 Defender aka LINN
 
09.08.13
10:31
(2) Ручками устанавливай
4 spapin87
 
09.08.13
10:37
Выводится последняя строка запроса таким образом ...

Пока не rs_ord.EOF цикл
        печАртикул = TrimAll(rs_ord.fields("number").value);
        печНаименование = TrimAll(rs_ord.fields("name").value);
        печКоличество = TrimAll(rs_ord.fields("qty").value);
        печЦена = TrimAll(rs_ord.fields("price").value);
        печПоставщик = TrimAll(rs_ord.fields("sup_name").value);

        //ОбластьСтрока.Параметры.Заполнить(qs_ord);
        ОбластьСтрока.Параметры.number = печАртикул;
        ОбластьСтрока.Параметры.name = печНаименование;
        ОбластьСтрока.Параметры.qty = печКоличество;
        ОбластьСтрока.Параметры.price = печЦена;
        ОбластьСтрока.Параметры.sup_name = печПоставщик;
        rs_ord.MoveNext();
    КонецЦикла;
5 Defender aka LINN
 
09.08.13
10:39
(4) Врешь ты все, в этом коде ничего не выводится
6 spapin87
 
09.08.13
10:41
Я просто дал часть кода
вот полный:

Макет = Справочники.ПрайсЛисты.ПолучитьМакет("ЗагруженнаяИнформация");
    ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТаблицы");
    ТабДок=Новый ТабличныйДокумент;
    ТабДок.Очистить();
    ОбластьЗаголовок.Параметры.Поставщик=Наименование;
    Дата = ЭлементыФормы.ИсторияИзмененияЦен.ТекущаяСтрока.ДатаПрайса;
    Дата = Дата(Дата);
    ДатаПрайса = Формат(Дата,"ДФ=dd.MM.yyyy; ДЛФ=D");
    ОбластьЗаголовок.Параметры.ДатаПрайса = ДатаПрайса;
    
    qs_ord = "SELECT
    |    I.item_number AS number,
    |    I.item_name AS name,
    |    P.qty AS qty,
    |    P.price AS price,
    |    S.sup_name AS sup_name
    |FROM deon_items AS I
    |INNER JOIN prices AS P ON P.id_item = I.id_item
    |INNER JOIN suppliers AS S ON S.id_sup = P.id_sup
    |WHERE S.sup_name = '"+Контрагент.КодНаименование+"' AND FROM_UNIXTIME(P.prc_date, '%d.%m.%Y') = '"+ДатаПрайса+"'";
    
    rs_ord.Open(qs_ord, Con);
    Пока не rs_ord.EOF цикл
        печАртикул = TrimAll(rs_ord.fields("number").value);
        печНаименование = TrimAll(rs_ord.fields("name").value);
        печКоличество = TrimAll(rs_ord.fields("qty").value);
        печЦена = TrimAll(rs_ord.fields("price").value);
        печПоставщик = TrimAll(rs_ord.fields("sup_name").value);

        //ОбластьСтрока.Параметры.Заполнить(qs_ord);
        ОбластьСтрока.Параметры.number = печАртикул;
        ОбластьСтрока.Параметры.name = печНаименование;
        ОбластьСтрока.Параметры.qty = печКоличество;
        ОбластьСтрока.Параметры.price = печЦена;
        ОбластьСтрока.Параметры.sup_name = печПоставщик;
        rs_ord.MoveNext();
    КонецЦикла;
    Попытка
        Con.Close();
    Исключение
    КонецПопытки;
7 Defender aka LINN
 
09.08.13
10:49
(6) Тут тоже ничего не выводится
8 spapin87
 
09.08.13
11:05
а как быть?
9 John D
 
09.08.13
11:10
Вывести заполненную область в отчет:
Типа

ТабДок.Вывести(ОбластьСтрока);
10 spapin87
 
09.08.13
11:15
Выводится последняя строка ...
Макет = Справочники.ПрайсЛисты.ПолучитьМакет("ЗагруженнаяИнформация");
    ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТаблицы");
    ТабДок=Новый ТабличныйДокумент;
    ТабДок.Очистить();
    ОбластьЗаголовок.Параметры.Поставщик=Наименование;
    Дата = ЭлементыФормы.ИсторияИзмененияЦен.ТекущаяСтрока.ДатаПрайса;
    Дата = Дата(Дата);
    ДатаПрайса = Формат(Дата,"ДФ=dd.MM.yyyy; ДЛФ=D");
    ОбластьЗаголовок.Параметры.ДатаПрайса = ДатаПрайса;
    
    qs_ord = "SELECT
    |    I.item_number AS number,
    |    I.item_name AS name,
    |    P.qty AS qty,
    |    P.price AS price,
    |    S.sup_name AS sup_name
    |FROM deon_items AS I
    |INNER JOIN prices AS P ON P.id_item = I.id_item
    |INNER JOIN suppliers AS S ON S.id_sup = P.id_sup
    |WHERE S.sup_name = '"+Контрагент.КодНаименование+"' AND FROM_UNIXTIME(P.prc_date, '%d.%m.%Y') = '"+ДатаПрайса+"'";
    
    rs_ord.Open(qs_ord, Con);
    Пока не rs_ord.EOF цикл
        печАртикул = TrimAll(rs_ord.fields("number").value);
        печНаименование = TrimAll(rs_ord.fields("name").value);
        печКоличество = TrimAll(rs_ord.fields("qty").value);
        печЦена = TrimAll(rs_ord.fields("price").value);
        печПоставщик = TrimAll(rs_ord.fields("sup_name").value);

        //ОбластьСтрока.Параметры.Заполнить(qs_ord);
        ОбластьСтрока.Параметры.number = печАртикул;
        ОбластьСтрока.Параметры.name = печНаименование;
        ОбластьСтрока.Параметры.qty = печКоличество;
        ОбластьСтрока.Параметры.price = печЦена;
        ОбластьСтрока.Параметры.sup_name = печПоставщик;
        rs_ord.MoveNext();
    КонецЦикла;
    Попытка
        Con.Close();
    Исключение
    КонецПопытки;
    
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапка);
    ТабДок.Вывести(ОбластьСтрока);
    ТабДок.Показать( );
11 Godofsin
 
09.08.13
11:44
ну так вывод в цикл наверное запихать надо, не?
12 spapin87
 
09.08.13
11:59
как построить цикл по rs_ord это COMОбъект? пишет: Итератор для значения не определен
13 Godofsin
 
09.08.13
12:08
млять...

    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапка);
    Пока не rs_ord.EOF цикл
        печАртикул = TrimAll(rs_ord.fields("number").value);
        печНаименование = TrimAll(rs_ord.fields("name").value);
        печКоличество = TrimAll(rs_ord.fields("qty").value);
        печЦена = TrimAll(rs_ord.fields("price").value);
        печПоставщик = TrimAll(rs_ord.fields("sup_name").value);

        //ОбластьСтрока.Параметры.Заполнить(qs_ord);

        ОбластьСтрока.Параметры.number = печАртикул;
        ОбластьСтрока.Параметры.name = печНаименование;
        ОбластьСтрока.Параметры.qty = печКоличество;
        ОбластьСтрока.Параметры.price = печЦена;
        ОбластьСтрока.Параметры.sup_name = печПоставщик;
        ТабДок.Вывести(ОбластьСтрока);
        rs_ord.MoveNext();
    КонецЦикла;
    Попытка
        Con.Close();
    Исключение
    КонецПопытки;
    

    ТабДок.Показать( );
14 spapin87
 
09.08.13
12:23
Godofsin, Спасибо!