Вход | Регистрация

1С:Предприятие ::

Метки:Запросы и построители

Помогите тупому с реализацией запроса в 1С, я всего лишь учусь;(

Я
   дядюшка Бишоп
 
13.03.04 - 21:10
Как многим известно в стандартной конфигурации ПУБа отчёты о взаиморасчётах между контрагентами и фирмой весьма малочитабельны, посему получил я тут задание наваять этакий ясный всем отчёт. Ниже привожу его текст.
А проблема вот в чём - когда формирую его по покупателям - всё в порядке, всё работает. Но если формирую по поставщикам, то появляется такой глюк - при выводе группировки "Контрагент" (в таблице это отдельная секция "Поставщик"), почему то вылазят сообщения вроде "Поле агрегатного объекта не обнаружено поcДолгНачОст". Переменная которую я использую в таблице, именно у поставщиков зовётся как "Запрос.поcДолгНачОст#N019.2". Причём, эта же байда касается и остальных трёх переменных (посДолгПриход, посДолгРасход, посДолгКонОст). Где у меня ошибка??? Я уже голову сломал:((( Что самое интересное, по поставщикам, в группировках по договорам и документам, эти переменные нормально выводятся в таблицу:(( Это в морг?:((

Перем ДолгПокупателя;
Перем НашДолгКонОст;
Перем ЕгоДолгКонОст;
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса;
   //Создание объекта типа Запрос

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

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

    Если ПустоеЗначение(ВыбКонтрагент) = 0
    Тогда
        ТекстЗапроса = ТекстЗапроса + "Условие(Контрагент = ВыбКонтрагент);";
    КонецЕсли;
    Если ПустоеЗначение(ВыбДоговор) = 0
    Тогда
        ТекстЗапроса = ТекстЗапроса + "Условие(Договор = ВыбДоговор);";
    КонецЕсли;
   // А тут у нас уже идут группировки

    Группировки = 
    "
    |Группировка Контрагент упорядочить по Контрагент.Наименование без групп;
    |Группировка Договор;
    |Группировка КодОперации без групп;
    |Группировка ТекущийДокумент упорядочить по ТекущийДокумент.ДатаДок без групп;
    |//}}ЗАПРОС

    ;
    
   // Конечный вариант запроса

    ТекстЗапроса = ТекстЗапроса + Группировки;
    
   // Если ошибка в запросе, то выход из процедуры

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
   // Вывод заполненной формы


   // Подготовка к заполнению выходных форм данными запроса

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица1");
   // Заполнение полей "Заголовок"

    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
       // Заполнение полей Контрагент    

       // 13.03.2004 - для проверки долгов у поставщиков

        Если (Запрос.посДолгНачОст <> 0)
        Или (Запрос.посДолгПриход <> 0)
        Или (Запрос.посДолгРасход <> 0)
        Или (Запрос.посДолгКонОст <> 0)
        Тогда
           // Обрабатываем поставщика

            Если Запрос.посДолгКонОст > 0
            Тогда
                ЕгоДолгКонОст = Запрос.посДолгКонОст;
                НашДолгКонОст = 0;            
            Иначе
                ЕгоДолгКонОст = 0;
                НашДолгКонОст = Запрос.посДолгКонОст * (-1);
            КонецЕсли;
            Таб.ВывестиСекцию("Поставщик");
        ИначеЕсли (Запрос.покДолгНачОст <> 0)
        Или (Запрос.покДолгПриход <> 0)
        Или (Запрос.покДолгРасход <> 0)
        Или (Запрос.покДолгКонОст <> 0)
        Тогда
           // Обрабатываем покупателя

            Если Запрос.покДолгКонОст > 0
            Тогда                                                                         
                ЕгоДолгКонОст = 0;
                НашДолгКонОст = Запрос.покДолгКонОст;
            Иначе
                НашДолгКонОст = 0;
                ЕгоДолгКонОст = Запрос.покДолгКонОст * (-1);
            КонецЕсли;
            Таб.ВывестиСекцию("Контрагент");                                                         
        КонецЕсли;    
        Пока Запрос.Группировка(2) = 1
        Цикл
           // Заполнение полей Договор

            Если ДетализацияДоговоров = 1
            Тогда                
               // 13.03.2004 - для проверки долгов у поставщиков

                Если (Запрос.посДолгНачОст <> 0)
                Или (Запрос.посДолгПриход <> 0)
                Или (Запрос.посДолгРасход <> 0)
                Или (Запрос.посДолгКонОст <> 0)
                Тогда
                   // Обрабатываем поставщика

                    Если Запрос.посДолгКонОст > 0
                    Тогда
                        ЕгоДолгКонОст = Запрос.посДолгКонОст;
                        НашДолгКонОст = 0;            
                    Иначе
                        ЕгоДолгКонОст = 0;
                        НашДолгКонОст = Запрос.посДолгКонОст * (-1);
                    КонецЕсли;                    
                    Таб.ВывестиСекцию("посДоговор");                    
                ИначеЕсли (Запрос.покДолгНачОст <> 0)
                Или (Запрос.покДолгПриход <> 0)
                Или (Запрос.покДолгРасход <> 0)
                Или (Запрос.покДолгКонОст <> 0)
                Тогда
                    Если Запрос.покДолгКонОст > 0
                    Тогда                                                                         
                        ЕгоДолгКонОст = 0;
                        НашДолгКонОст = Запрос.покДолгКонОст;
                    Иначе
                        НашДолгКонОст = 0;
                        ЕгоДолгКонОст = Запрос.покДолгКонОст * (-1);
                    КонецЕсли;
                    Таб.ВывестиСекцию("Договор");
                КонецЕсли;
            КонецЕсли;
            Пока Запрос.Группировка(3) = 1
            Цикл
               // Заполнение полей ТекущийДокумент

                Пока Запрос.Группировка(4) = 1
                Цикл
                   // Заполнение полей ТекущийДокумент

                    Если ДетализацияДокументов = 1
                    Тогда                        
                       // 13.03.2004 - для проверки долгов у поставщиков

                        Если (Запрос.посДолгНачОст <> 0)
                        Или (Запрос.посДолгПриход <> 0)
                        Или (Запрос.посДолгРасход <> 0)
                        Или (Запрос.посДолгКонОст <> 0)
                        Тогда
                           // Обрабатываем поставщика

                            Если Запрос.покДолгКонОст > 0
                            Тогда                                                                         
                                ЕгоДолгКонОст = 0;
                                НашДолгКонОст = Запрос.покДолгКонОст;
                            Иначе
                                НашДолгКонОст = 0;
                                ЕгоДолгКонОст = Запрос.покДолгКонОст * (-1);
                            КонецЕсли;                            
                            Таб.ВывестиСекцию("посДокумент");
                        ИначеЕсли (Запрос.покДолгНачОст <> 0)
                        Или (Запрос.покДолгПриход <> 0)
                        Или (Запрос.покДолгРасход <> 0)
                        Или (Запрос.покДолгКонОст <> 0)
                        Тогда
                            Если Запрос.покДолгКонОст > 0
                            Тогда                                                                         
                                ЕгоДолгКонОст = 0;
                                НашДолгКонОст = Запрос.покДолгКонОст;
                            Иначе
                                НашДолгКонОст = 0;
                                ЕгоДолгКонОст = Запрос.покДолгКонОст * (-1);
                            КонецЕсли;
                            Таб.ВывестиСекцию("Документ");
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;                
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
   // Заполнение полей "Итого"

    Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы

    Таб.ТолькоПросмотр(1);
    Таб.Показать("Таблица1", "");    
КонецПроцедуры
 
 
   GrayT
 
1 - 13.03.04 - 21:30
Мдя, все само собой рассоалось. Правда в другом месте :)


Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует