Имя: Пароль:
1C
 
Запрос данных документа основания
0 Aftee
 
26.07.16
11:39
Доброго времени суток!
Хочу для ВПФ док-та ПриходныйКассовыйОрдер получить данные док-та основания.

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


Собственно как получить ссылку на док-т основание? Или можно сделать это напрямую в запросе?
1 Aftee
 
26.07.16
13:48
Сделал через 2 запрос, прогнал каждый из них в консоли - цепляет нужное. Но на макет не выводит значения параметра. Куда копать?

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

Пока Выборка3.Следующий() Цикл
        ОбластьМакета.Параметры.Заполнить(Выборка3);        
        КонецЦикла;
2 Nuobu
 
26.07.16
13:50
ТабДок = ПолучитьМакет("Макет1");
Пока Выборка3.Следующий() Цикл
        ОбластьМакета.Параметры.НаименованиеПараметра = Выборка3.СуммаСтавка;        
ТабДок.Вывести(ОбластьМакета);
        КонецЦикла;
3 Zmich
 
26.07.16
13:54
(1). Чтобы использовать Заполнить(Выборка), имя параметра в макете должно быть таким же, как и в запросе. Т.е. СуммаСтавка в твоем случае.
4 Aftee
 
26.07.16
13:56
(2) (3)  Все равно не выводится.
5 _stay true_
 
26.07.16
13:58
(4) Целиком процедуру формирования табдока покажи.
6 Aftee
 
26.07.16
14:00
(5)
Функция СформироватьПечатнуюФормуКО1(МассивОбъектов, ОбъектыПечати, КомплектыПечати, ПараметрыПечати)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КО1";
    Макет = ПолучитьМакет("ПФ_MXL_КО1");
    
    ИспользуетсяРеглУчет = (Метаданные.ПланыСчетов.Найти("Хозрасчетный") <> Неопределено);
    
    
    
    
    ТекстЗапроса =
    "ВЫБРАТЬ
    |    ДанныеДокумента.Ссылка КАК Ссылка,
    |    ДанныеДокумента.Дата КАК ДатаДокумента,
    |    ДанныеДокумента.Номер КАК Номер,
    |    ДанныеДокумента.Организация.Наименование КАК НаименованиеОрганизации,
    |    ДанныеДокумента.Организация.НаименованиеСокращенное КАК НаименованиеОрганизацииСокращенное,
    |    ДанныеДокумента.Организация.Префикс КАК Префикс,
    |    ВЫБОР
    |        КОГДА ДанныеДокумента.Валюта = &ВалютаРеглУчета
    |            ТОГДА ""50.01""
    |        ИНАЧЕ ""50.21""
    |    КОНЕЦ КАК КодДебета,
    |    ДанныеДокумента.Касса.КассоваяКнига.СтруктурноеПодразделение КАК ПредставлениеПодразделения,
    |    ДанныеДокумента.Контрагент КАК Контрагент,
    |    ДанныеДокумента.Контрагент.Представление КАК КонтрагентПредставление,
    |    ДанныеДокумента.ПринятоОт КАК ПринятоОт,
    |    ДанныеДокумента.Основание КАК Основание,
    |    ДанныеДокумента.Приложение КАК Приложение,
    |    ДанныеДокумента.ВТомЧислеНДС КАК ВТомЧисле,
    |    ДанныеДокумента.СуммаДокумента КАК Сумма,
    |    ДанныеДокумента.Валюта КАК Валюта,
    |    ДанныеДокумента.Валюта.Представление КАК ВалютаПредставление,
    |    ДанныеДокумента.Организация.КодПоОКПО КАК ОрганизацияПоОКПО,
    |    ДанныеДокумента.Кассир.ФизическоеЛицо КАК Кассир,
    |    ТаблицаОтветственныеЛица.ГлавныйБухгалтерНаименование КАК ГлавныйБухгалтер,
    |    ДанныеДокумента.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
    |    ДанныеДокумента.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств
    |ИЗ
    |    Документ.ПриходныйКассовыйОрдер КАК ДанныеДокумента
    |        ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОтветственныеЛица КАК ТаблицаОтветственныеЛица
    |        ПО ДанныеДокумента.Ссылка = ТаблицаОтветственныеЛица.Ссылка
    |ГДЕ
    |    ДанныеДокумента.Ссылка В(&МассивДокументов)
    |УПОРЯДОЧИТЬ ПО
    |    Номер
    |;";
    
    Если Не ИспользуетсяРеглУчет Тогда
        ТекстЗапроса = ТекстЗапроса + "
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ВложенныйЗапрос.Ссылка,
        |    ВложенныйЗапрос.СтатьяДвиженияДенежныхСредств,
        |    СтатьиДвиженияДенежныхСредств.КорреспондирующийСчет КАК КорСчетКод
        |ИЗ
        |    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        |        ДанныеДокумента.Ссылка КАК Ссылка,
        |        ДанныеДокумента.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств
        |    ИЗ
        |        Документ.ПриходныйКассовыйОрдер КАК ДанныеДокумента
        |    ГДЕ
        |        ДанныеДокумента.Ссылка В(&МассивДокументов)
        |    
        |    ОБЪЕДИНИТЬ
        |    
        |    ВЫБРАТЬ РАЗЛИЧНЫЕ
        |        РасшифровкаПлатежа.Ссылка,
        |        РасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств
        |    ИЗ
        |        Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК РасшифровкаПлатежа
        |    ГДЕ
        |        РасшифровкаПлатежа.Ссылка В(&МассивДокументов)) КАК ВложенныйЗапрос
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СтатьиДвиженияДенежныхСредств КАК СтатьиДвиженияДенежныхСредств
        |        ПО ВложенныйЗапрос.СтатьяДвиженияДенежныхСредств = СтатьиДвиженияДенежныхСредств.Ссылка
        |
        |УПОРЯДОЧИТЬ ПО
        |    КорреспондирующийСчет";
    КонецЕсли;
    
    Запрос = Новый Запрос(ТекстЗапроса);
    
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ОтветственныеЛицаСервер.СформироватьВременнуюТаблицуОтветственныхЛицДокументов(МассивОбъектов, МенеджерВременныхТаблиц);
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    
    
    Запрос.УстановитьПараметр("МассивДокументов", МассивОбъектов);
    Запрос.УстановитьПараметр("ВалютаРеглУчета", Константы.ВалютаРегламентированногоУчета.Получить());
    
    МассивРезультатов = Запрос.ВыполнитьПакет();
    Выборка           = МассивРезультатов[0].Выбрать();
    КорСчета          = МассивРезультатов[1].Выгрузить();
    
                
    Запрос2 = Новый Запрос;
    Запрос2.Текст = "
    |ВЫБРАТЬ
    |    ДанныеДокумента.Основание КАК СтавкаОснование
    |ИЗ
    |   Документ.ПриходныйКассовыйОрдер КАК ДанныеДокумента
    |ГДЕ
    |    ДанныеДокумента.Ссылка В(&МассивОбъектов)";
    Запрос2.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
    
    ДокументОснование = Запрос2.Выполнить().Выгрузить();
    
    Запрос3 = Новый Запрос;
    Запрос3.Текст = "
    |ВЫБРАТЬ
    |    СУММА(ДанныеДокумента.Сумма) КАК СуммаСтавка
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК ДанныеДокумента
    |ГДЕ
    |    ДанныеДокумента.Ссылка В(&ДокументОснование)";
    Запрос3.УстановитьПараметр("ДокументОснование", ДокументОснование);
    Выборка3 = Запрос3.Выполнить().Выбрать();
    
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    Пока Выборка3.Следующий() Цикл
        ОбластьМакета.Параметры.СуммаСтавка = Выборка3.СуммаСтавка;
        ТабличныйДокумент.Вывести(ОбластьМакета);
    КонецЦикла;
    

    
    Пока Выборка.Следующий() Цикл
        
        
        // Для печати комплектов
        Если КомплектыПечати <> Неопределено И КомплектыПечати.Колонки.Найти("Ссылка") <> Неопределено Тогда
            КомплектПечатиПоСсылке = КомплектыПечати.Найти(Выборка.Ссылка,"Ссылка");
            Если КомплектПечатиПоСсылке = Неопределено Тогда
                КомплектПечатиПоСсылке = КомплектыПечати[0];
            КонецЕсли;
            Если КомплектПечатиПоСсылке.Экземпляров = 0 Тогда
                Продолжить
            КонецЕсли;
        КонецЕсли;
        
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
        ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, Выборка.Ссылка);
        ОбластьМакета.Параметры.Заполнить(Выборка);
        
        
    
        Если Не ПустаяСтрока(Выборка.НаименованиеОрганизацииСокращенное) Тогда
            ОбластьМакета.Параметры.ПредставлениеОрганизации = Выборка.НаименованиеОрганизацииСокращенное;
        Иначе
            ОбластьМакета.Параметры.ПредставлениеОрганизации = Выборка.НаименованиеОрганизации;
        КонецЕсли;
        
        Сумма = Формат(Выборка.Сумма, "ЧЦ=15; ЧДЦ=2");
        ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
        Если ВалютаРегламентированногоУчета <> Выборка.Валюта Тогда
            Сумма = Сумма + " " + СокрЛП(Выборка.ВалютаПредставление);
        КонецЕсли;
        ОбластьМакета.Параметры.Сумма = Сумма;
        ОбластьМакета.Параметры.СуммаРубКоп = ФормированиеПечатныхФорм.СуммаРубКоп(
            Выборка.Сумма,
            Выборка.Валюта,    
            ВалютаРегламентированногоУчета);
        Если Выборка.Валюта <> ВалютаРегламентированногоУчета Тогда
            ОбластьМакета.Параметры.СуммаРубКоп = ОбластьМакета.Параметры.СуммаРубКоп + " " + СокрЛП(Выборка.ВалютаПредставление);
        КонецЕсли;
        ОбластьМакета.Параметры.СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(
            Выборка.Сумма,
            Выборка.Валюта,
            Ложь); // ВыводитьСуммуБезКопеек
        ОбластьМакета.Параметры.НомерДокумента = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(
            Выборка.Номер,
            Ложь,
            Истина);
        ОбластьМакета.Параметры.СубСчет = КорреспондирующийСчет(Выборка, КорСчета, ИспользуетсяРеглУчет);
        
            Если ПустаяСтрока(Выборка.ВТомЧисле) Тогда
            ОбластьМакета.Параметры.ВТомЧисле = НСтр("ru='без налога (НДС)'");
        Иначе
            Если Выборка.Валюта = ВалютаРегламентированногоУчета Тогда
                ОбластьМакета.Параметры.ВТомЧисле = ОбластьМакета.Параметры.ВТомЧисле + " руб.";
            Иначе
                ОбластьМакета.Параметры.ВТомЧисле = ОбластьМакета.Параметры.ВТомЧисле + " " + СокрЛП(Выборка.ВалютаПредставление);
            КонецЕсли;
        КонецЕсли;
        
        ОбластьМакета.Параметры.ФИОГлавногоБухгалтера = Выборка.ГлавныйБухгалтер;
        ОбластьМакета.Параметры.ФИОКассира = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(Выборка.Кассир, Выборка.ДатаДокумента);
        
        ТабличныйДокумент.Вывести(ОбластьМакета);
        
        // Выведем нужное количество экземпляров (при печати комплектов)
        Если КомплектыПечати <> Неопределено И КомплектыПечати.Колонки.Найти("Ссылка") <> Неопределено И КомплектПечатиПоСсылке.Экземпляров > 1 Тогда
            ОбластьКопирования = ТабличныйДокумент.ПолучитьОбласть(НомерСтрокиНачало,,ТабличныйДокумент.ВысотаТаблицы);
            Для Итератор = 2 По КомплектПечатиПоСсылке.Экземпляров Цикл
                ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                ТабличныйДокумент.Вывести(ОбластьКопирования);
            КонецЦикла;
        КонецЕсли;
        
        ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
            ТабличныйДокумент,
            НомерСтрокиНачало,
            ОбъектыПечати,
            Выборка.Ссылка);
        
    КонецЦикла;
    
    
    Возврат ТабличныйДокумент;
    
КонецФункции
7 hhhh
 
26.07.16
14:06
(6)   |ГДЕ
    |    ДанныеДокумента.Ссылка = &ДокументОснование ";
8 _stay true_
 
26.07.16
14:06
Запрос 3 точно отрабатывает? Ты передаешь таблицу значений туда из Запрос2.Выполнить.Выгрузить(). Точно не помню, но по моему такая конструкция понимает только массив.

попробуй в качестве параметра сразу ссылку передавать, либо объявляй новый массив и загоняй туда ссылки из выборки пореквизитно.

Либо запрос 2 и запрос 3 объедини в 1. Там легко: делай запрос сразу к табличной части, и устанвливай параметры.
9 Aftee
 
26.07.16
14:26
(7) не работает
Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ДанныеДокумента.Ссылка <<?>>= &ДокументОснование
(8) Через Левое соединение или как?
10 Aftee
 
26.07.16
15:12
С массивом тоже не работает
    Запрос2 = Новый Запрос;
    Запрос2.Текст = "
    |ВЫБРАТЬ
    |    ДанныеДокумента.Основание КАК СтавкаОснование
    |ИЗ
    |   Документ.ПриходныйКассовыйОрдер КАК ДанныеДокумента
    |ГДЕ
    |    ДанныеДокумента.Ссылка В(&МассивОбъектов)";
    Запрос2.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
    
    ДокументОснование = Запрос2.Выполнить().Выгрузить();
    Основа = Новый Массив;
    Основа.Добавить(ДокументОснование);
    
    Запрос3 = Новый Запрос;
    Запрос3.Текст = "
    |ВЫБРАТЬ
    |    СУММА(ДанныеДокумента.Сумма) КАК СуммаСтавка
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК ДанныеДокумента
    |ГДЕ
    |    ДанныеДокумента.Ссылка В(&ДокументОснование)";
    Запрос3.УстановитьПараметр("ДокументОснование", ДокументОснование);
    Выборка3 = Запрос3.Выполнить().Выбрать();
    
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    Пока Выборка3.Следующий() Цикл
        ОбластьМакета.Параметры.СуммаСтавка = Выборка3.СуммаСтавка;
        ТабличныйДокумент.Вывести(ОбластьМакета);
    КонецЦикла;
11 Aftee
 
26.07.16
15:48
Действительно обработка результата Запроса2 была неправильная. Переделал так:

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


Проверил результат Запрос2, вывел его в макет. Получил ссылку на документ основание. Но все равно Запрос3 не выводит ничего.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс