Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 окт 2024, 01:51

Одинаковые ИНН

Автор rinaty17, 29 окт 2012, 10:39

0 Пользователей и 1 гость просматривают эту тему.

rinaty17

Добрый день уважаемые форумчане.
Я в семерке плохо шарю, но некоторые моменты знаю.
к вам такая просьба.
мне нужно сделать отчет который выводит список контрагентов у которых одинаковый ИНН или не заполненный ИНН.
Вот мои наброски
+ Code
//_____________________________________________________________________________

Функция ПоискКонтрагента(пПоиск)
    спрФиз = СоздатьОбъект("Справочник.ФизЛица");
    спрЮр = СоздатьОбъект("Справочник.ЮрЛица");
    спрСвои = СоздатьОбъект("Справочник.СвоиЮрЛица");
    Если спрФиз.НайтиПоНаименованию(пПоиск,0,1)=1 Тогда
        СпрЛица = спрФиз.ИНН;
        Возврат СпрЛица;
    ИначеЕсли спрЮр.НайтиПоНаименованию(пПоиск,0,1)=1 Тогда
        СпрЛица = спрЮр.ИНН;
        Возврат СпрЛица;
    ИначеЕсли спрСвои.НайтиПоНаименованию(пПоиск,0,1)=1 Тогда
        СпрЛица = спрСвои.ИНН;
        Возврат СпрЛица;
    Иначе
        Возврат 0;
    КонецЕсли;
КонецФункции //


//*******************************************

Процедура Сформировать()
    Таб=СоздатьОбъект("Таблица");
    Таб.ВывестиСекцию("Шапка");
    Таб.ТолькоПросмотр(1);
    Спр1 = СоздатьОбъект("Справочник.Контрагенты");
    Спр1.ВыбратьЭлементы();
    Пока Спр1.ПолучитьЭлемент() = 1 Цикл
        Если (Спр1.ЭтоГруппа() = 0) и (Спр1.ПометкаУдаления() = 0) Тогда
            Спр2 = СоздатьОбъект("Справочник.Контрагенты");
            Спр2.ВыбратьЭлементы();
            СпрЛица1 = ПоискКонтрагента(Спр1.ЮрФизЛицо);
            Если СпрЛица1 = "" Тогда
                Таб.ВывестиСекцию("Строка");
            Иначе
                Пока Спр2.ПолучитьЭлемент() = 1 Цикл
                   
                    Если (Спр2.ЭтоГруппа() = 0) и (Спр2.ПометкаУдаления() = 0) Тогда
                   
                        СпрЛица2 = ПоискКонтрагента(Спр2.ЮрФизЛицо);
                        Если СпрЛица1=СпрЛица2 Тогда
                            Таб.ВывестиСекцию("Строка");
                        КонецЕсли;
                   
           
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Таб.Показать();
КонецПроцедуры

как можно упрастить данный модуль? может как нибудь через запрос можно сделать? в 8ке я бы без проблем решил бы эту задачу...   

Herby

Цитата: rinaty17 от 29 окт 2012, 10:39в 8ке я бы без проблем решил бы эту задачу...

очень рады за вас...

можно например так:

Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Клиенты = Справочник.Клиенты.ТекущийЭлемент;
   |ИНН = Справочник.Клиенты.ИНН;
   |Функция Счётчик = Счётчик();
   |Группировка ИНН;
   |Группировка Клиенты без групп;
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
      Возврат;
   КонецЕсли;

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


Теги:
Рейтинг@Mail.ru

Поиск