[РЕШЕНО] Вывести в макете только что нужно !

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем xDee, 23 июл 2015.

  1. TopicStarter Overlay
    xDee
    Offline

    xDee

    Регистрация:
    16 авг 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Добрый день ! пишу отчет в Рознице 2.1 по дням рождения покупателей. В справочнике ФизическиеЛица есть реквизиты ДатаРождения , ДатаРожденияРебенка ... ДатаРожденияРебенка3 (в семье бывает по 3 ребенка), так вот не могу вывести все дни рождения за текущий месяц, чувствую что где то рядом , но что то никак. .

    В таком виде выводятся все ФизическиеЛица , но у детей выбираются только принадлежащие МесяцВыбора, если ставлю проверку на ДР мама тогда выводится не весь список , а только соответствующие всем условиям. А мне надо чтобы если даже ДР мама <> МесяцВыбора , а у ребенка равно, чтобы Фамилия все равно попадала в макет. Помогите пожалуйста

    Макет = Отчеты.ДниРождения.ПолучитьМакет("Макет");
    ОблШапка = Макет.ПолучитьОбласть("Шапка");
    ОблЭлемент = Макет.ПолучитьОбласть("Элемент");
    ОблШапка.Параметры.МесяцОтчета = Формат(ТекущаяДата(), "ДФ=MMMM");
    ТабДок.Очистить();
    ТабДок.Вывести(ОблШапка);

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК ФИО,
    | ФизическиеЛицаКонтактнаяИнформация.Ссылка.ДатаРождения КАК ДР,
    | ФизическиеЛицаКонтактнаяИнформация.Ссылка.ДатаРожденияРебенка КАК ДРР,
    | ФизическиеЛицаКонтактнаяИнформация.Ссылка.ДатаРожденияРебенка2 КАК ДРР2,
    | ФизическиеЛицаКонтактнаяИнформация.Ссылка.ДатаРожденияРебенка3 КАК ДРР3,
    | ФизическиеЛицаКонтактнаяИнформация.Представление КАК Телефон,
    | ДЕНЬ(ФизическиеЛицаКонтактнаяИнформация.Ссылка.ДатаРождения) КАК Поле1
    |ИЗ
    | Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
    |ГДЕ
    | ФизическиеЛицаКонтактнаяИнформация.Тип = &Тел
    |УПОРЯДОЧИТЬ ПО
    |Поле1";

    Запрос.УстановитьПараметр("Тел", Перечисления.ТипыКонтактнойИнформации.Телефон);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл
    ОблЭлемент.Параметры.Заполнить(Выборка);
    ДатаР = Формат(Выборка.ДР, "ДФ=M");
    ДатаРР = Формат(Выборка.ДРР, "ДФ=M");
    ДатаРР2 = Формат(Выборка.ДРР2, "ДФ=M");
    ДатаРР3 = Формат(Выборка.ДРР3, "ДФ=M");
    МесяцВыбора = Формат(Месяц(ТекущаяДата()), "ДФ=M");


    //******** фамилия ***
    ОблФИО = Макет.ПолучитьОбласть("Элемент|ФИО");
    //Если ДатаР = МесяцВыбора Тогда
    ТабДок.Вывести(ОблФИО);
    ОблФИО.Параметры.ФИО = Выборка.ФИО;
    ТабДок.Присоединить(ОблФИО);

    //******** ДР мама ***
    ОблДР = Макет.ПолучитьОбласть("Элемент|ДР");
    ОблДР.Параметры.ДатаР = Формат(Выборка.ДР, "ДЛФ =D");
    ТабДок.Присоединить(ОблДР);

    //******** ДР ребенок ***
    ОблДети = Макет.ПолучитьОбласть("Элемент|Дети");
    Если ДатаРР = МесяцВыбора Тогда
    ОблДети.Параметры.ДатаРР = Формат(Выборка.ДРР, "ДЛФ =D");
    ТабДок.Присоединить(ОблДети);
    ИначеЕсли ОблДети.Параметры.ДатаРР = Неопределено Тогда
    ОблДети.Параметры.ДатаРР= "";
    ТабДок.Присоединить(ОблДети);
    КонецЕсли;

    //******** ДР ребенок2 ***
    ОблДети2 = Макет.ПолучитьОбласть("Элемент|Дети2");
    Если ДатаРР2 = МесяцВыбора Тогда
    ОблДети2.Параметры.ДатаРР2 = Формат(Выборка.ДРР2, "ДЛФ =D");
    ТабДок.Присоединить(ОблДети2);
    ИначеЕсли ОблДети2.Параметры.ДатаРР2 = Неопределено Тогда
    ОблДети2.Параметры.ДатаРР2 = "";
    ТабДок.Присоединить(ОблДети2);
    КонецЕсли;

    //******** ДР ребенок3 ***
    ОблДети3 = Макет.ПолучитьОбласть("Элемент|Дети3");
    Если ДатаРР3 = МесяцВыбора Тогда
    ОблДети3.Параметры.ДатаРР3 = Формат(Выборка.ДРР3, "ДЛФ =D");
    ТабДок.Присоединить(ОблДети3);
    ИначеЕсли ОблДети3.Параметры.ДатаРР3 = Неопределено Тогда
    ОблДети3.Параметры.ДатаРР3 = "";
    ТабДок.Присоединить(ОблДети3);
    КонецЕсли;

    //******** Телефоны ***
    ОблТелефон = Макет.ПолучитьОбласть("Элемент|Телефон");
    ОблТелефон.Параметры.Телефон = Выборка.Телефон;
    ТабДок.Присоединить(ОблТелефон);
    //КонецЕсли;

    КонецЦикла;
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Код:
    .......
    //******** фамилия ***
    ОблФИО = Макет.ПолучитьОбласть("Элемент|ФИО");
    ОблФИО.Параметры.ФИО = Выборка.ФИО;
    ТабДок.Вывести(ОблФИО);
    
    //******** ДР мама ***
    .....
    
    Больше ничего криминального не заметил.....
  3. TopicStarter Overlay
    xDee
    Offline

    xDee

    Регистрация:
    16 авг 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Да в том то и дело что все работает, но Фамилия выводится всех, а я хочу добиться чтобы только у кого ДР в текущем месяце. Т.е. дети выбрались все правильно, но поставив проверку на маму это колонка День Рождения отваливаются мамы у которых ДР не июль, а у ребенка июль. Вот как то так.
    1.jpg
  4. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Трэш...

    Вот это что?
    ДатаРожденияРебенка
    ДатаРожденияРебенка2
    ДатаРожденияРебенка3

    Реквизиты справочника физические лица?
    Если в семье будет 4 ребенка еще реквизит добавите? Или родителей попросят выбрать из всех детей 3 самых любимых и назвать их дни рождения?


    Так это реквизиты?
  5. TopicStarter Overlay
    xDee
    Offline

    xDee

    Регистрация:
    16 авг 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Да вот такой трэш, но они ограничились на трех )))
    Да Реквизиты !
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    В любом случае ФИО должно выводится ВСЕГДА иначе не будет понятно, какая фамилия у ребенка.

    Выводить ФИО нужно только в том случае, если хоть одна из дат рождений(мамы или одного из детей) в Выборка заполнена.

    Код:
    Пока Выборка.Следующий() Цикл
    
    Если НЕ (ЗначениеЗаполнено(Выборка.ДР) ИЛИ ЗначениеЗаполнено(Выборка.ДРР) ИЛИ.....) Тогда
    продолжить;
    КонецЕсли;
    
    КонецЦикла;
    Еще можно в запросе наложить отбор по заполнености этих дат, а выборку выводить уже без условий.
  7. TopicStarter Overlay
    xDee
    Offline

    xDee

    Регистрация:
    16 авг 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Просто это магазин детской одежды и соответственно было добавлено два реквизита ДатаРожденияРебенка2 и ДатаРожденияРебенка3 чтобы были скидки многодетным мамам.
  8. TopicStarter Overlay
    xDee
    Offline

    xDee

    Регистрация:
    16 авг 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Так в Выборке заполнены даты то, наверно нужно проверять на соответствие именно месяца выбора как мне кажется
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Ага, на равенство месяца даты рождения и выбранного месяца.
  10. TopicStarter Overlay
    xDee
    Offline

    xDee

    Регистрация:
    16 авг 2010
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    nomad_irk спасибо за наводку про вывод ФИО при выполнении условия, теперь все правильно выводится, если кому интересно сделал вот так :

    Код:
    Пока Выборка.Следующий() Цикл
    
    ДатаР = Формат(Выборка.ДР, "ДФ=M");
    ДатаРР = Формат(Выборка.ДРР, "ДФ=M");
    ДатаРР2 = Формат(Выборка.ДРР2, "ДФ=M");
    ДатаРР3 = Формат(Выборка.ДРР3, "ДФ=M");
    МесяцВыбора = Формат(Месяц(ТекущаяДата()), "ДФ=M");
    Знач0=(ДатаР = МесяцВыбора);
    Знач1=(ДатаРР = МесяцВыбора);
    Знач2=(ДатаРР2 = МесяцВыбора);
    Знач3=(ДатаРР3 = МесяцВыбора);
    
    //******** фамилия ***
    ОблФИО = Макет.ПолучитьОбласть("Элемент|ФИО");
    Если (Знач0 = Истина) ИЛИ (Знач1 = Истина) ИЛИ (Знач2 = Истина) ИЛИ (Знач3 = Истина) Тогда
    ТабДок.Вывести(ОблФИО);
    ОблФИО.Параметры.ФИО = Выборка.ФИО;
    ТабДок.Присоединить(ОблФИО);
    Иначе
    Продолжить;
    КонецЕсли;
    
    //******** ДР мама *** 
    ОблДР = Макет.ПолучитьОбласть("Элемент|ДР");
    Если Знач0= Истина Тогда
    ОблДР.Параметры.ДатаР = Формат(Выборка.ДР, "ДЛФ =D");
    ТабДок.Присоединить(ОблДР);
    ИначеЕсли ОблДР.Параметры.ДатаР =Неопределено Тогда
    ОблДР.Параметры.ДатаР = "";
    ТабДок.Присоединить(ОблДР);
    КонецЕсли;
    
    //******** ДР ребенок ***
    ОблДети = Макет.ПолучитьОбласть("Элемент|Дети");
    Если Знач1= Истина Тогда
    ОблДети.Параметры.ДатаРР = Формат(Выборка.ДРР, "ДЛФ =D");
    ТабДок.Присоединить(ОблДети);
    ИначеЕсли ОблДети.Параметры.ДатаРР = Неопределено Тогда 
     ОблДети.Параметры.ДатаРР= "";
    ТабДок.Присоединить(ОблДети);
    КонецЕсли;
    
    //******** ДР ребенок2 ***
    ОблДети2 = Макет.ПолучитьОбласть("Элемент|Дети2");
    Если Знач2= Истина Тогда
    ОблДети2.Параметры.ДатаРР2 = Формат(Выборка.ДРР2, "ДЛФ =D");
    ТабДок.Присоединить(ОблДети2);
    ИначеЕсли ОблДети2.Параметры.ДатаРР2 = Неопределено Тогда
    ОблДети2.Параметры.ДатаРР2 = "";
    ТабДок.Присоединить(ОблДети2);
    КонецЕсли;   
    
    //******** ДР ребенок3 ***
    ОблДети3 = Макет.ПолучитьОбласть("Элемент|Дети3");
    Если Знач3= Истина Тогда 
    ОблДети3.Параметры.ДатаРР3 = Формат(Выборка.ДРР3, "ДЛФ =D");
    ТабДок.Присоединить(ОблДети3);
    ИначеЕсли ОблДети3.Параметры.ДатаРР3 = Неопределено Тогда
    ОблДети3.Параметры.ДатаРР3 = "";
    ТабДок.Присоединить(ОблДети3);
    КонецЕсли;
    
    //******** Телефоны ***
    ОблТелефон = Макет.ПолучитьОбласть("Элемент|Телефон");
    ОблТелефон.Параметры.Телефон = Выборка.Телефон;
    ТабДок.Присоединить(ОблТелефон);
      КонецЦикла;
    

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