Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Реестр документов


Автор: dmd1980 27.4.2009, 04:05
Здраствуйте.
Делаю форму реестра документов, и немогу сделать отбор по котрагенту. т.е. при выборе контрагента показываются только документы где присутствует этот контрагент. сейчас у меня работает только выборка по дате. Помогите, буду очень благодарен.
Вот мой листнг:
//*******************************************
Процедура Сформировать()
    Док=СоздатьОбъект("Документ");//попадают документы всех типов
    
    Таб=СоздатьОбъект("Таблица");//создаем таблицу
    Таб.ИсходнаяТаблица("Реестр");//присваеваем таблице имя
    //Док=СоздатьОбъект("Документ.Приход"); попадают только приход
    //ВидДок=Док.Вид(); перебор вида документа
    Таб.ВывестиСекцию("Шапка");
    Док.ВыбратьДокументы(НачДата,КонДата);//перебор документа по датам
    //если скобки пустые то перебераются все документы за весь период
    
    Пока Док.ПолучитьДокумент()=1 Цикл // проверка полученных документов
        Вид=Док.Вид(); 
        Если Вид="Оплата" Тогда
            Инфо=Док.Контрагент;            
        ИначеЕсли Вид="Перемещение" Тогда  
            Инфо="Сосклада"+Строка(Док.Склад)+ " Насклада " +Строка(Док.СкладНазначения);
        Иначе
            Инфо=Док.Склад; 
            //     СуммаДок=Док.Итог("Сумма");
        КонецЕсли;    
        Таб.ВывестиСекцию("Элемент");
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Реестр");
КонецПроцедуры


Автор: Naghual 27.4.2009, 09:46
В вашем случае нужно просто добавить проверку на контрагента:
Код

Пока Док.ПолучитьДокумент()=1 Цикл // проверка полученных документов
    Если Док.Контрагент = ВыбКонтрагент Тогда
        Вид=Док.Вид();
        Если Вид="Оплата" Тогда
            Инфо=Док.Контрагент;
        ИначеЕсли Вид="Перемещение" Тогда  
            Инфо="Сосклада"+Строка(Док.Склад)+ " Насклада " +Строка(Док.СкладНазначения);
        Иначе
            Инфо=Док.Склад; 
            //     СуммаДок=Док.Итог("Сумма");
        КонецЕсли;
        Таб.ВывестиСекцию("Элемент");
    КонецЕсли;
КонецЦикла;


Однако замечу, что такой метод не является оптимальным. Рекомендую Вам подробнее ознакомится с Запросами.

Автор: dmd1980 27.4.2009, 13:18
Цитата(Naghual @ 27.4.2009,  09:46)
В вашем случае нужно просто добавить проверку на контрагента:
Код

Пока Док.ПолучитьДокумент()=1 Цикл // проверка полученных документов
    Если Док.Контрагент = ВыбКонтрагент Тогда
        Вид=Док.Вид();
        Если Вид="Оплата" Тогда
            Инфо=Док.Контрагент;
        ИначеЕсли Вид="Перемещение" Тогда  
            Инфо="Сосклада"+Строка(Док.Склад)+ " Насклада " +Строка(Док.СкладНазначения);
        Иначе
            Инфо=Док.Склад; 
            //     СуммаДок=Док.Итог("Сумма");
        КонецЕсли;
        Таб.ВывестиСекцию("Элемент");
    КонецЕсли;
КонецЦикла;


Однако замечу, что такой метод не является оптимальным. Рекомендую Вам подробнее ознакомится с Запросами.

Сделал как ты посоветовал и у меня выходит следуюшая ошибка:

Если Док.Контрагент = ВыбКонтрагент Тогда
{Отчет.Реестр.Форма.Модуль(15)}: Поле агрегатного объекта не обнаружено (Контрагент)

Добавлено через 3 минуты и 26 секунд
у меня вот такая вот форма

Автор: Naghual 27.4.2009, 14:05
А подумать?

Добавлено через 2 минуты и 18 секунд
Я же не знаю что у тебя за конфигурация. Ты не указал.
Данное сообщение говорит лишь о том, что у конкретного Документа нет такого реквизита Контрагент.
Может у тебя в конфигурации он не так называется, а может что у данного документа и вовсе нет такого.

Так что  думай

Автор: dmd1980 28.4.2009, 03:16
Naghual. А я до пер после часа напряженной работы smile !!!
Если кому нужно то выкладываю листинг пользуйтесь на здоровье:
//********************************************************
КонтрИзДока = "";
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент()=1 Цикл // проверка полученных документов
   Попытка
        КонтрИзДока = Док.Контрагент;
   Исключение
        Продолжить;
   КонецПопытки;
     Если ВыбКонтр.Выбран() = 1 Тогда
         Если Док.Контрагент <> ВыбКонтр Тогда
              Продолжить;
         КонецЕсли;    
    КонецЕсли; 
        Инфо=Док.Контрагент;
        Если Док.Вид()="Перемещение" Тогда  
            Инфо="Сосклада"+Строка(Док.Склад)+ " На склад " +Строка(Док.СкладНазначения);
        Иначе
            Попытка // не во всех документах могут быть Склад и Сумма в табл части, на всякий случай )))
                 Инфо=Док.Склад; 
                 СуммаДок=Док.Итог("Сумма");
            Исключение
                 Инфо=""; 
                 СуммаДок=0;
            КонецПопытки;  
        КонецЕсли;
        Таб.ВывестиСекцию("Элемент");
  КонецЦикла;

Автор: Naghual 28.4.2009, 11:23
Цитата(dmd1980 @  28.4.2009,  03:16 Найти цитируемый пост)
Naghual. А я до пер после часа напряженной работы smile !!!

Искренне за Вас рад.

Автор: dmd1980 30.4.2009, 04:22
Здравствуйте. Возвращаюсь к выше указанному примеру
 создал обработку, которая показывает за определенный период документы, могу выбирать, как сортировать по контрагенту, по складу. Создал так же список значений где указанны документы нужно так же сортировку по ним производить: например если выбираю "Реализация" то отчет формируется только по документам Реализация. Список значений сделал, а вот на них действие прописать не могу из головы совсем вылетело.
Выкладываю свой листинг:
//*******************************************
Процедура ПриОткрытии();
    СП.ДобавитьЗначение("ПриходТовара");
    СП.ДобавитьЗначение("Реализация"); 
    СП.ДобавитьЗначение("Счет");     
    СП.ДобавитьЗначение("ЗаказПоставщику");
    СП.ДобавитьЗначение("Перемещение");
    СП.ДобавитьЗначение("Оплата");
КонецПроцедуры

//*******************************************
Процедура Сформировать() 
    Док=СоздатьОбъект("Документ");//попадают документы всех типов 
    Таб=СоздатьОбъект("Таблица");//создаем таблицу
    Таб.ИсходнаяТаблица("Реестр");//присваеваем таблице имя
    Таб.ВывестиСекцию("Шапка");
    КонтрИзДока="";
    СкладИзДока="";
    Док.ВыбратьДокументы(НачДата,КонДата);    
    
    Пока Док.ПолучитьДокумент()=1 Цикл // проверка полученных документов
        Попытка 
            КонтрИзДок=Док.Контрагент;// приравниваем, что выбраный контрагент имется в реквизите документа
            СкладИзДоку=Док.Склад;// приравниваем, что выбраный склад имется в реквизите документа
        Исключение
            Продолжить;
        КонецПопытки; 
        Если ВыбСклад.Выбран()=1 Тогда
            Если Док.Склад<>ВыбСклад Тогда//выполняется условие если скалд выбрат то формируем отчет 
                Продолжить;
            КонецЕсли;
        КонецЕсли;
        Если ВыбКонтр.Выбран()=1 Тогда
            Если Док.Контрагент<>ВыбКонтр Тогда//выполняется условие если скалд выбрат то формируем отчет 
                Продолжить;
            КонецЕсли;
        КонецЕсли;
        Таб.ВывестиСекцию("Элемент"); 
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Реестр");
КонецПроцедуры

Автор: Naghual 2.5.2009, 23:49
Выбор галочками или просто подсвеченный элемент?
Выбор из СпискаЗначений множественный?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)