7.7 Отбор контрагентов

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Peroman, 16 июн 2010.

  1. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Код:
     
    ИначеЕсли ВидОтчета = 3 Тогда 
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ПакетПродаж = Документ.ПакетПродаж.ТекущийДокумент;
    |Контрагент = Документ.ПакетПродаж.Контрагент;
    |Склад = Документ.ПакетПродаж.Склад;
    |Менеджер = Документ.ПакетПродаж.Контрагент.Менеджер;
    //|Группировка Менеджер;
    |Группировка Контрагент;
    |Условие(Склад в ВыбСклад);
    |Условие(Менеджер в ВыбМенеджер);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Неактивные");
    СпрК = СоздатьОбъект("Справочник.Контрагенты");
    Таб.ВывестиСекцию("Заголовок");
    
    СпрК.ВыбратьЭлементы();
    Пока СпрК.ПолучитьЭлемент() = 1 Цикл
    Если ПустоеЗначение(Запрос.ПакетПродаж) = 1 Тогда
    Продолжить
    Иначе
    Если СпрК.ТекущийЭлемент()<> Запрос.Контрагент Тогда
    Сообщить(СпрК.ТекущийЭлемент());
    Таб.ВывестиСекцию("Контрагент");
    КонецЕсли; 
    КонецЕсли;
    КонецЦикла; 
    Таб.Показать("Неактивные", "");
    
    
    
    Отчет должен выводить Контрагентов которые не имеют документов, а выводит всех. Что я делаю не так?
  2. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Отчет полный в файле, Нужно чтобы если ВидОтчета =3
    Выодились Контрагенты не зашедшие в запрос и не имеющие документов Посмотреть вложение 4616

    Вложения:

    • 888.ert
      Размер файла:
      42,5 КБ
      Просмотров:
      50
  3. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    а где группировка по запросу? выгрузи его в ТЗ и делай через НайтиЗначение(). И вообще какой смысл в этом? Имхается мне, что какое-то не оч. правильное ты выбрал решение
  4. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    А как правильно, мне нужно в отчет выводить Контрагентов которые у нас давно ничего не брали?
  5. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Ну, и делай запрос в цикле по элементам справочника, если результат выполнения запроса по текущему контрагенту = 0 - тогда выводи..
    Или подумай над методом НайтиСсылки(<?>,); в цикле по справочнику, и в полученной тз ищи наличие твоего документа
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    НайтиСсылки(<?>,); - в корне не верно. Метод работает ОЧЕНЬ медленно т.к. ищет везде...
    Самое оптимальное - запрос к документам за период с группировкой по контрагентам. Потом результат выгружаем в ТЗ. Постое этого пробегаем по справочнику контрагентов и используем ТЗ.НайтиЗначение Если не найдено - контрагент ничего не брал......
  7. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Код:
     
    ИначеЕсли ВидОтчета = 3 Тогда
    
    СпрК = СоздатьОбъект("Справочник.Контрагенты");
    Док  = СоздатьОбъект("Документ.ПакетПродаж");
    Таб  = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("НеАктивные");
    СписЗН = СоздатьОбъект("СписокЗначений");
    Таб.ВывестиСекцию("Заголовок");
    
    Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
    
    
    Пока Док.ПолучитьДокумент() = 1 Цикл
    СписЗН.ДобавитьЗначение(Док.Контрагент);
    КонецЦикла;
    
    
    СпрК.ВыбратьЭлементы();
    
    Пока СпрК.ПолучитьЭлемент() =1 Цикл
    Если (СпрК.ЭтоГруппа() = 0) и (СпрК.ПометкаУдаления()=0) Тогда
    Если СписЗН.Принадлежит(СпрК.ТекущийЭлемент()) = 0 Тогда
    Таб.ВывестиСекцию("Контрагент")
    Иначе продолжить
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Таб.Показать();
    КонецЕсли;
    
    
    
    А так правильно? Вроде всё работает.


    И ещё такой вопрос почему у меня в таблицу значений ничего не добавляется делаю так
    Код:
    ТЗН.НоваяКолонка("Контрагент");
    //Выбираю доки и:
    Пока Док.ПолучитьДокумент() = 1 Цикл
    ТЗН.Контрагент=Док.Контрагент;
    КонецЦикла;
    
    
    Все после это цикла у меня колнока Контрагент остается пустой
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    По первому вопросу - правильно. Только удобнее ч/з запрос делать и нет проверки что документ помечен на удаление...

    По второму: А строки таблицы кто добавлять будет?
    Код:
    ТЗН.НоваяКолонка("Контрагент");
    Пока Док.ПолучитьДокумент() = 1 Цикл
    ТЗН.НоваяСтрока(); 
    ТЗН.Контрагент=Док.Контрагент;    
    КонецЦикла;
    
    
    

Поделиться этой страницей