7.7 Отчет на поиск одинаковых значений реквизитов

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

  1. TopicStarter Overlay
    Sonya
    Offline

    Sonya Опытный в 1С

    Регистрация:
    16 окт 2008
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Помогите пожалуйста нужно в отчете найти одинаковое наименование сотрудника и вывести его повторение другим цветом, вот так должен выглядить запрос:

    За месяц Сотрудники Вид услуги Дата докумета Номер документа
    Январь Лукоянова Анфисия Михайловна Электроэнергия 19.03.08 577
    Январь Лутошкина Людмила Александровна Электроэнергия 30.04.08 828
    Январь Лутошкина Людмила Александровна Электроэнергия 30.04.08 830
    Январь Махмутова Ризида Мударисовна Электроэнергия 18.03.08 538
    Январь Худякова Татьяна Александровна Электроэнергия 18.03.08 455
    Январь Царегородцева Галина Леонидовна Электроэнергия 19.03.08 627
    Январь Цветкова Елена Валентиновна Электроэнергия 18.02.08 204
    Январь Цветкова Елена Валентиновна Электроэнергия 19.03.08 607

    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;  
    Перем НомСтр; 
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать1)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ДатаДок = Документ.Льгота.ДатаДок;
    |НомерДок = Документ.Льгота.НомерДок;
    |Сотрудники = Документ.Льгота.Сотрудники.Наименование;
    |ВидУслуги = Документ.Льгота.ВидУслуги;
    |Ммесяцы = Документ.Льгота.Ммесяцы;
    |Группировка Ммесяцы;
    |Группировка Сотрудники все;
    |Группировка ВидУслуги;
    |Группировка ДатаДок;
    |Группировка НомерДок;
    |Условие(Ммесяцы в ВыбМмесяцы);
    |Условие(ВидУслуги в ВыбВидУслуги);
    |"//}}ЗАПРОС;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать1");
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    Пока Запрос.Группировка(2) = 1 Цикл
    Пока Запрос.Группировка(3) = 1 Цикл
    Пока Запрос.Группировка(4) = 1 Цикл
    Пока Запрос.Группировка(5) = 1 Цикл  
    
    //Для ц=1 По КоличествоСтрок() Цикл // не ясно как вообще пробежаться по строкам найти 
    //такое же наименование
    //НомСтр=""; 
    //Если НайтиЗначение(ПолучитьЗначение(ц,2),НомСтр,2)=1 Тогда 
    //Таб.ВывестиСекцию("НомерДок");         
    //Иначе    Таб.ВывестиСекцию("НомерДок1"); 
    //  КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать1", "");
    КонецПроцедуры
    
    
    Заранее спасибо, очень жду ответа.
  2. TopicStarter Overlay
    Sonya
    Offline

    Sonya Опытный в 1С

    Регистрация:
    16 окт 2008
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Вот пока что получается у меня, только ругается
    Для ц=1 По Таб.КоличествоСтрок() Цикл
    {Отчет.ЛьготаПоМесяцам4.Форма.Модуль(52)}: Поле агрегатного объекта не обнаружено (КоличествоСтрок)
    Что не так делаю? Я в этом плохо понимаю, но как то можно же сделать очень неудобно смотреть большой список и искать одинаковые наименования, очень глаза устают. Помогите пожалуйста.

    Код:
    Пока Запрос.Группировка(5) = 1 Цикл  
    Для ц=1 По Таб.КоличествоСтрок() Цикл 
    НомСтр="";
    Если 	Таб.НайтиЗначение(Таб.ПолучитьЗначение(ц,2),НомСтр,2)=0 Тогда
    Таб.ВывестиСекцию("НомерДок");
    Сообщить(НомСтр); 
    Иначе
    Таб.ВывестиСекцию("НомерДок1");
    КонецЕсли; 
    Таб.ВывестиСекцию("НомерДок");
    КонецЦикла;
    КонецЦикла;
    
  3. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    При выводе каждой строки, заноси наименования в список значений.

    Т.е. перед выводом смотришь наличие в списке, если нету, тогда выводишь обычным цветом и заносишь в список.
    Если в списке есть, тогда выводишь красным.
  4. TopicStarter Overlay
    Sonya
    Offline

    Sonya Опытный в 1С

    Регистрация:
    16 окт 2008
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Эта часть понятна.
  5. Мастер_миража
    Offline

    Мастер_миража Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    наверное Вардер имел ввиду:
    создать список значений до обхода группировок
    а при обходе вместо цикла Для...По
    проверять наличие имени в списке, воводить нужного цвета, и заносить в список при отсутствии имени в списке
  6. TopicStarter Overlay
    Sonya
    Offline

    Sonya Опытный в 1С

    Регистрация:
    16 окт 2008
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Список=СоздатьОбъект("СписокЗначений");
    Список.ДобавитьЗначение(Запрос.Сотрудники,"Сотрудники");
    Пока Запрос.Группировка(1) = 1 Цикл
    Пока Запрос.Группировка(2) = 1 Цикл
    Пока Запрос.Группировка(3) = 1 Цикл
    Пока Запрос.Группировка(4) = 1 Цикл
    Пока Запрос.Группировка(5) = 1 Цикл
    Если Список.НайтиЗначение(Запрос.Сотрудники)=0 Тогда
    Таб.ВывестиСекцию("НомерДок1");
    Иначе
    Таб.ВывестиСекцию("НомерДок");
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;

    Вот как я переделала и не работает:( Что не так? Мне нужен этот отчет очень
  7. Мастер_миража
    Offline

    Мастер_миража Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    кажется я тоже недоступно объяснил=)



    Список=СоздатьОбъект("СписокЗначений");
    группировки....

    Если Список.НайтиЗначение(Запрос.Сотрудники)=1 Тогда
    Таб.ВывестиСекцию("НомерДок1");
    Иначе
    Таб.ВывестиСекцию("НомерДок");
    Список значений.Добавить(Запрос.сутрудник);
    КонецЕсли;
  8. TopicStarter Overlay
    Sonya
    Offline

    Sonya Опытный в 1С

    Регистрация:
    16 окт 2008
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Список=СоздатьОбъект("СписокЗначений");
    //Список.ДобавитьЗначение(Запрос.Сотрудники,"Сотрудники");
    Пока Запрос.Группировка(1) = 1 Цикл
    Пока Запрос.Группировка(2) = 1 Цикл
    Пока Запрос.Группировка(3) = 1 Цикл
    Пока Запрос.Группировка(4) = 1 Цикл
    Пока Запрос.Группировка(5) = 1 Цикл
    Если Список.НайтиЗначение(Запрос.Сотрудники)=1 Тогда
    Таб.ВывестиСекцию("НомерДок1");
    Иначе
    Таб.ВывестиСекцию("НомерДок");
    Список.ДобавитьЗначение(Запрос.Сотрудники);
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;

    Не работает, выводит все так же как было и не выделяет красным.
  9. Мастер_миража
    Offline

    Мастер_миража Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    ааа
    я ошибся)
    Если НайтиЗначение >0 тогда


    )))
  10. TopicStarter Overlay
    Sonya
    Offline

    Sonya Опытный в 1С

    Регистрация:
    16 окт 2008
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Все работает!!! Тему можно закрывать.
  11. vip6374
    Offline

    vip6374

    Регистрация:
    20 май 2006
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Совершенно непонятна эта возня со списком значений и строками. Ведь сотрудники уже отсортированы. Достаточно перед циклом 2 запомнить Сотрудника в переменной Сотрудник1, а затем проверить Запрос.Сотрудники=Сотрудник1 При совпадении выводить красную, иначе ординарную, потом запомнить Сотрудника в переменной Сотрудник1. Тогда получим совпадение в пределах месяца.
  12. Мастер_миража
    Offline

    Мастер_миража Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    согласен... переменная лучше списка...
    тем более если разбивка идет по месяцам, то в списке однаджы выведенное красным имя во всех последующих месяцах также будет красным, ето будет глюком)))
Похожие темы
  1. videomause
    Ответов:
    4
    Просмотров:
    1.391
Загрузка...

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