Имя: Пароль:
1C
1С v8
Отбор по значению в таблице
0 Robert51
 
30.09.13
12:51
Всем привет!
Делаю печатную форму для Авансового отчета. Создаю Запрос на Содержание, Сумма и СчетУчетаНДС.
В ПечФорм хочу чтоб вывелось только содержащие СчетУчетаНДС = 19.03
Я так понял, что можно отобрать при запросе, либо вывести на печать с условием, но вот никак не получается. Помогите разобраться.
ЗЫ: Я нуб и только учусь)

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    АвансовыйОтчетПрочее.Содержание,
        |    АвансовыйОтчетПрочее.Сумма,
        |    АвансовыйОтчетПрочее.СчетУчетаНДС
                |ИЗ
        |    Документ.АвансовыйОтчет.Прочее КАК АвансовыйОтчетПрочее
        |ГДЕ
        |    АвансовыйОтчетПрочее.СчетУчетаНДС = &19.03 И
        |    АвансовыйОтчетПрочее.Ссылка = &ТекущийДокумент";

    Запрос.УстановитьПараметр("19.03", СсылкаНаОбъект);    
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    СтрТабЧасти = Запрос.Выполнить().Выбрать();
    СтрТабЧасти.Следующий();

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ТабДокумент.Вывести(ОбластьЗаголовок);

    ОбластьМакета = Макет.ПолучитьОбласть("Строка");
    Выборка = СтрТабЧасти;    
    Пока Выборка.Следующий() Цикл
         ОбластьМакета.Параметры.Заполнить(Выборка);
        КонецЦикла;
    ТабДокумент.Вывести(ОбластьМакета);
1 Галахад
 
гуру
30.09.13
12:53
Интересные параметры.
2 Robert51
 
30.09.13
13:16
"|    АвансовыйОтчетПрочее.СчетУчетаНДС = &19.03
    Запрос.УстановитьПараметр("19.03", СсылкаНаОбъект);"
это не работает, просто пробовал. Учимся методом проб и ошибок.
Через Если Тогда тоже не получается
3 hhhh
 
30.09.13
14:41
"|    АвансовыйОтчетПрочее.СчетУчетаНДС = &МойОфигенныйПараметр
    Запрос.УстановитьПараметр("МойОфигенныйПараметр", СсылкаНаОбъект);"
4 kosts
 
30.09.13
14:55

|ГДЕ
        |    АвансовыйОтчетПрочее.СчетУчетаНДС = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ)

5 Robert51
 
02.10.13
17:32
Не получается((
Ошибка при вызове метода контекста (Выполнить): {(9, 48)}: Синтаксическая ошибка "(ПланыСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ)"
АвансовыйОтчет.Прочее.СчетУчетаНДС = &ЗНАЧЕНИЕ<<?>>(ПланыСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ)
6 Robert51
 
02.10.13
17:43
Третий день извращаюсь над кодом)
Причем в Универсальном отчете все как надо получается, но там не посмотреть код запроса. В конструкторе пробую всё тоже самое, но 19.03 ему не нравится. Пробую вывести на печать строки только с 19.03, все равно выводит все. Мозгов не хватает уже. Есть мысли у кого-нибудь?
7 bolobol
 
02.10.13
18:35
&ЗНАЧЕНИЕ<<?>> - Зачем & перед ЗНАЧЕНИЕ??
8 bolobol
 
02.10.13
18:36
&19.03 - вообще песня! Кто учил наименование переменных с точками писать?
9 bolobol
 
02.10.13
18:40
Сделай ещё проще:

|ГДЕ
        |    АвансовыйОтчетПрочее.СчетУчетаНДС.Код = ""19.03""

Или, чтобы с параметрами не напугать 1С:

|ГДЕ
        |    АвансовыйОтчетПрочее.СчетУчетаНДС = &1903

УстановитьПараметр("1903", ПланСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ)
10 bolobol
 
02.10.13
18:41
Упс... забылся сам))
Вот так:

|ГДЕ
        |    АвансовыйОтчетПрочее.СчетУчетаНДС = &Сч1903

УстановитьПараметр("Сч1903", ПланСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ)
11 Robert51
 
05.10.13
02:06
Отлично, Спасибо! Всё получилось!
Один момент только остался. Дело в том, что подсчитанная сумма в Итого дублируется в Шапке, но так как мы выводим область в печатную форму раньше чем происходит Выборка, то оно не заполняется (пустое). Расставил Области по-другому, вывелась каша на печать (по понятным причинам). Добавил в Шапку такую же Выборку как и в Строке, больше Строка не работает, видимо второй раз программа делает Выборку из уже сделанной Выборки (как я понял).
Единственный выход нашел, это сделать еще один Запрос, но мне что-то кажется это вульгарно. Или всё правильно, так и надо делать?

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

    ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
    ОбластьШапки.Параметры.Организация = Шапка.Организация;
    ОбластьШапки.Параметры.Номер = Шапка.Номер;
    Выборка = СуммаШапки;
    ИтогСумма = 0;
    Пока Выборка.Следующий() Цикл
        ИтогСумма = ИтогСумма + Выборка.Сумма;
    КонецЦикла;
    ОбластьШапки.Параметры.ИтогоСумма = ИтогСумма;
    
    ТабДокумент.Вывести(ОбластьШапки);
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ТабДокумент.Вывести(ОбластьЗаголовок);
    
    ОбластьСтроки = Макет.ПолучитьОбласть("Строка");
    ОбластьИтого = Макет.ПолучитьОбласть("Итого");
    Выборка = СтрТабЧасти;
    НомерПП = 1;
    ИтогСумма = 0;
    Пока Выборка.Следующий() Цикл
        ОбластьСтроки.Параметры.НомерПП = НомерПП;
        НомерПП = НомерПП + 1;
        
        ОбластьСтроки.Параметры.Заполнить(Выборка);
        ТабДокумент.Вывести(ОбластьСтроки);
        
        ИтогСумма = ИтогСумма + Выборка.Сумма;
    КонецЦикла;
    ОбластьИтого.Параметры.ИтогоСумма = ИтогСумма;
    ТабДокумент.Вывести(ОбластьИтого);
    
    ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");
    ТабДокумент.Вывести(ОбластьПодвала);
        
    Возврат ТабДокумент;
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший