7.7 Отчет по неактивным клиентам

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Proximo-90, 2 фев 2017.

  1. TopicStarter Overlay
    Proximo-90
    Offline

    Proximo-90

    Регистрация:
    2 фев 2017
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Доброго дня, нужна помощь. Необходимо создать отчет в 7.7 (самописная) по неактивным клиентам(которые не обслуживались в салоне более 13 месяцев). Как лучше это сделать?

    Я хотел, сформировать данные по клиентам из документов Заказ-наряд за весь период в Запрос , затем данные по клиентам за последние 13 месяцев сформировать в другой Запрос. Выгрузить Запросы в Таблицы Значений, затем сравнить ТабЗнач1 и ТабначЗ2 по значению Клиент, и вывести тех клиентов, которых нет в ТабЗнач2. Не получается, на этапе выгрузки запроса в Таблицу Значений.
  2. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    798
    Симпатии:
    89
    Баллы:
    54
    И что не получается? Экстрасенсы в отпуска по солнечные странам разъехались :) - больше конкретики: что не получается, чем помочь...? Мы как бы ваш код и конфигурацию не знаем..
    Пойти можно и другим путём - запросом из документов (за последний год при помощи distinct) получите контрагентов, из всех(справочник.контрагент) выберите не входящих в этот список...
    а другого признака нет(договор, соглашение, реквизит?))
  3. TopicStarter Overlay
    Proximo-90
    Offline

    Proximo-90

    Регистрация:
    2 фев 2017
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Как выгрузить запрос, в Таблицу Значений:

    Код:
    "//{{ЗАПРОС(КлиентыЗаВесьПериод)
        |Период с ВыбНачПериода по ВыбКонПериода;
        |Обрабатывать НеПомеченныеНаУдаление;
        |НарядЗаказ = Документ.НарядЗаказ.ТекущийДокумент;
        |ДатаДок = Документ.НарядЗаказ.ДатаДок;
        |Клиент = Документ.НарядЗаказ.Клиент;
        |Группировка НарядЗаказ упорядочить по НарядЗаказ.Клиент, НарядЗаказ.Автомобиль без групп;
        |"//}}ЗАПРОС
    пробую через
    Код:
    Запрос.Выгрузить(ТЗ1,1);
    не получается
  4. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    539
    Симпатии:
    83
    Баллы:
    54
    А так?
    Результат = Запрос.Выполнить();
    ТЗ1 = Результат.Выгрузить();

    PS Ой! Это для 8-ки. Совсем голова к вечеру не соображает. :)
    --- Объединение сообщений, 2 фев 2017 ---
    А таблица объявлена у Вас?
    Типа ТЗ1 = СоздатьОбъект("ТаблицаЗначений");

    И просто циклом по группировкам есть данные?
    Последнее редактирование: 2 фев 2017
  5. TopicStarter Overlay
    Proximo-90
    Offline

    Proximo-90

    Регистрация:
    2 фев 2017
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1

    Запрос проверил данные выводятся: [​IMG] (http://pixs.ru/showimage/TZ1Klienti_7914148_25013347.jpg)
    Мой код до следующего Запроса.

    Код:
    Процедура ПередДатойПосещения()
        Перем Запрос, ТекстЗапроса, ТЗ1;
        Перем Запрос1, ТекстЗапроса1, ТЗ2;
        //Создание объекта типа Запрос
        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса =
        "//{{ЗАПРОС(КлиентыЗаВесьПериод)
        |Период с ВыбНачПериода по ВыбКонПериода;
        |Обрабатывать НеПомеченныеНаУдаление;
        |НарядЗаказ = Документ.НарядЗаказ.ТекущийДокумент;
        |ДатаДок = Документ.НарядЗаказ.ДатаДок;
        |Клиент = Документ.НарядЗаказ.Клиент;
        |Группировка НарядЗаказ упорядочить по НарядЗаказ.Клиент, НарядЗаказ.Автомобиль без групп;
        |"//}}ЗАПРОС
        ;
        // Если ошибка в запросе, то выход из процедуры
       
        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
        КонецЕсли;   
       
        ТЗ1 = СоздатьОбъект("ТаблицаЗначений");
        Запрос.Выгрузить(ТЗ1,1);
    Ещё смотрю отладчиком чему равно ТЗ1 - пусто
    [​IMG]
    я ожидал увидеть, данные из запроса.
  6. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    798
    Симпатии:
    89
    Баллы:
    54
    в консоли выполни - есть ли результат...??? Есть сомнения по поводу наличия данных(у меня SQL база - со стандартными запросами не работал..)
    Запрос.Выгрузить(ТЗ1); Попробуй не указывать НачСтроку...
  7. TopicStarter Overlay
    Proximo-90
    Offline

    Proximo-90

    Регистрация:
    2 фев 2017
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    У меня файловая 7.7
    Сделал:
    Запрос.Выгрузить(ТЗ1);
    Вот, что в отладчике
    http://pixs.ru/showimage/TZ1Klienti_5947077_25013645.jpg
    Запрос данные выводит: http://pixs.ru/showimage/TZ1Klienti_7914148_25013347.jpg
  8. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    798
    Симпатии:
    89
    Баллы:
    54
    после выгрузки в отладчике пропишите Т31.КоличествоСтрок() что выдаст? если 0 то у вас запрос возвращает ноль строк...
    --- Объединение сообщений, 2 фев 2017 ---
    эх, тяжко мне понять стандартные запросы)))
    Не знаю как в стандартных запросах установить select distinct Клиент.ID - вытягиваете только клиентов и разных - проще будет и быстрее(если у всех есть ИНН или Уникальный код, то лучше используйте его во избежания так сказать...))
  9. TopicStarter Overlay
    Proximo-90
    Offline

    Proximo-90

    Регистрация:
    2 фев 2017
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    ТЗ1Кол-воСтрок.jpg
    Количество строк = 20307
    Ну там есть дубли. В общем я так понял, что
    ТЗ1 = СоздатьОбъект("ТаблицаЗначений");
    Запрос.Выгрузить(ТЗ1);
    - работает.
    Теперь мне бы понять, как сравнить две Таблицы Значений и вывести клиентов, которых нет в ТЗ2 (здесь клиенты за последние 13 месяцев).
  10. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    798
    Симпатии:
    89
    Баллы:
    54
    нужно сравнить с со всеми клиентами или кто платил?
    Если со всеми, то проще через создать объект("Справочник.Клиент" - или как он у вас там называется...)
    Если с теми кто хоть раз платил, то так же как и первый запрос - только либо стройти запрос на получение клиента либо выгружайте колонку номер Ч - где хранится клиент... Запрос.Выгрузить(Т31,,Ч);
    а дальше циклом удаляете строки.... - Извращение, но это 7.7...)))
  11. TopicStarter Overlay
    Proximo-90
    Offline

    Proximo-90

    Регистрация:
    2 фев 2017
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    У меня есть две Таблицы значений ТЗ1 и ТЗ2, в которые выгрузил данные с отчетов. В ТЗ1 - все клиенты, по которым были движения, в ТЗ2 - клиенты, по которым были движения за последние 13 месяцев.
    Не могу сообразить, как программно: взять строку из ТЗ1 проверить есть ли такая в ТЗ2, если да - то удалить строку.
  12. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    539
    Симпатии:
    83
    Баллы:
    54
    Используйте НайтиЗначение(<Знач>,<Строка>,<Колонка>)
    В цикле по первой таблице ищите такие же значения во второй и удаляйте ненужное.
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    22.612
    Симпатии:
    541
    Баллы:
    204
    Да там вообще не нужно ТЗ использовать...
    1) НачДата запроса д.б. пустой
    2) При группировке запроса по клиенту использовать ВСЕ
    3) флаг "без итогов" не должен стоять в конструкторе
    4) При выводе первую группировку (клиента) не выводим. А выводим по условию после внутреннего цикла. Анализируем во внутренним цикле по наряд-заказам. Кол-во месяцев задаем на форме. В качестве информации можно выдавать дату последнего обращения..

    ВСЕ!

    Второй вариант:
    1)Группировки Клиент ВСЕ и наряд-заказ.
    2)Используем функцию счетчик
    3)Начальная граница запроса задается обязательно.
    Все.. В зависимости от результата функции выводим в отчет клиента.
    Последнее редактирование: 3 фев 2017
  14. TopicStarter Overlay
    Proximo-90
    Offline

    Proximo-90

    Регистрация:
    2 фев 2017
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Подскажите, в НайтиЗначение <Знач> - что указывать?
  15. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    798
    Симпатии:
    89
    Баллы:
    54
    В конфигураторе выделите НайтиЗначение и нажмите Ctrl+F1 - ТаблицаЗначений... А там есть описание..
  16. TopicStarter Overlay
    Proximo-90
    Offline

    Proximo-90

    Регистрация:
    2 фев 2017
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Знач - Значение для поиска, я не могу сообразить, если у меня каждый раз новое значение, мне нужно указать, то значение, которое есть в первой и нужно найти во второй таблице.
    Вот мой код:
    Код:
    номстр = 0;
        ТЗ1.ВыбратьСтроки();
        Пока ТЗ1.ПолучитьСтроку()=1 Цикл
            ~начало:
            Если ТЗ2.НайтиЗначение(<Что здесь указать?> номстр, "Клиент") = 1 Тогда
                ТЗ1.УдалитьСтроку();
                    Если ТЗ1.НомерСтроки<>0 Тогда
                    Перейти ~начало;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
  17. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    798
    Симпатии:
    89
    Баллы:
    54
    Синтаксис:
    НайтиЗначение(<Знач>,<Строка>,<Колонка>)
    Назначение:
    Найти заданное значение в таблице значений. Возвращает число: 0 - значение не найдено; 1 - значение найдено
    Параметры:
    <Знач> - значение для поиска.
    <Строка> - идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке.
    <Колонка> - номер или идентификатор колонки, возвращает номер найденной колонки. Идентификатор переменной, куда возвращается номер найденной колонки. Если при вызове метода передать в этот параметр номер или идентификатор колонки, то поиск будет осуществляться только по указанной колонке.
    --- Объединение сообщений, 3 фев 2017 ---
    Пользуйтесь синтаксис-помощником ;)
  18. TopicStarter Overlay
    Proximo-90
    Offline

    Proximo-90

    Регистрация:
    2 фев 2017
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Подскажите, по какой причине может выводится пустые строки в результате, то есть куча пустых строк, но при это если проверить оператором ТЗ.ВыбратьСтроку(); То на экране вижу таблицу с заполненными Клиент и Наряд Заказ, и так для обеих ТЗ:
    Клиенты1.jpg

    Финальный результат, множество пустых строк:
    Клиенты2.jpg
    Думаю, что проблема в моей таблице, в которую я вывожу результаты:
    Клиенты3.jpg
    Подскажите, пожалуйста, что может быть?


    Код:
    Процедура Сформировать()
        Перем Запрос1, ТекстЗапроса, ТЗ1, Запрос2, ТЗ2, ДатаПосещения;
      
        ДатаПосещения  = ДобавитьМесяц(ТекущаяДата(),(-1)*(1*12+1));
        //Создание объекта типа Запрос
    
        Запрос1 = СоздатьОбъект("Запрос");
    
        ТекстЗапроса =
          
        "//{{ЗАПРОС(КлиентыЗаВесьПериод)
        |Период с ВыбНачПериода по ВыбКонПериода;
        |Обрабатывать НеПомеченныеНаУдаление;
        |НарядЗаказ = Документ.НарядЗаказ.ТекущийДокумент;
        |ДатаДок = Документ.НарядЗаказ.ДатаДок;
        |Клиент = Документ.НарядЗаказ.Клиент;
        |Группировка Клиент без групп;
        |Группировка НарядЗаказ без групп;
        |Условие(ДатаДок < ДатаПосещения);
        |"//}}ЗАПРОС
        ;
        // Если ошибка в запросе, то выход из процедуры
      
        Если Запрос1.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат;
        КонецЕсли;  
      
        ТЗ1 = СоздатьОбъект("ТаблицаЗначений");
        Запрос1.Выгрузить(ТЗ1);
      
      
        Запрос2 = СоздатьОбъект("Запрос");
        ТекстЗапроса =
        "//{{ЗАПРОС(ПослеДатыПосещения)
        |Период с ВыбНачПериода по ВыбКонПериода;
        |Обрабатывать НеПомеченныеНаУдаление;
        |НарядЗаказ = Документ.НарядЗаказ.ТекущийДокумент;
        |ДатаДок = Документ.НарядЗаказ.ДатаДок;
        |Клиент = Документ.НарядЗаказ.Клиент;
        |Группировка Клиент без групп;
        |Группировка НарядЗаказ без групп;
        |Условие(ДатаДок > ДатаПосещения);
        |"//}}ЗАПРОС
        ;
        // Если ошибка в запросе, то выход из процедуры
      
        Если Запрос2.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат;
        КонецЕсли;  
      
        Таб = СоздатьОбъект("Таблица");
        Таб.ИсходнаяТаблица("ПослеДатыПосещения");
      
        Таб.ВывестиСекцию("Заголовок");
        Состояние("Заполнение выходной таблицы...");
        Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
      
        ТЗ2 = СоздатьОбъект("ТаблицаЗначений");
        Запрос2.Выгрузить(ТЗ2);
      
      
        ТЗ2.ВыбратьСтроки();
        Пока ТЗ2.ПолучитьСтроку()=1 Цикл
            номстр = 0;
            Если ТЗ2.НайтиЗначение(ТЗ1.Клиент, номстр, "Клиент") = 1 Тогда
            Продолжить
        Иначе
            Клиент  = ТЗ1.Клиент;
            НарядЗаказ = ТЗ1.НарядЗаказ;
            Таб.ВывестиСекцию("НарядЗаказ");
            КонецЕсли;
        КонецЦикла;
      
          
      
      
        Таб.ТолькоПросмотр(1);
        Таб.Показать("ПослеДатыПосещения", "");
      
      
    КонецПроцедуры
    
  19. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    22.612
    Симпатии:
    541
    Баллы:
    204
    Эххххх... не ищете вы легких путей...
  20. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    798
    Симпатии:
    89
    Баллы:
    54
    ИсходнаяТаблица и ВывестиСекцию у вас есть в коде? Вы вывели результат?
    З.Ы. я бы послушал Бухгалтерский угодник он всё же более опытный в 7.7, тем более стандартной - у меня база на SQL с дополнениями и в стандартных запросах я не понимаю.. вот, если потребуется SQL запрос - милости прошу))
    З.Ы.Ы. Пол часа пытался найти(и глобальным поиском тоже), что это за функция такая Счётчик() :D только потом понял, что это из стандартного языка запросов 7.7..