Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Год в "черном" запросе

v7: Год в "черном" запросе
Я
   lals
 
21.10.18 - 11:35
Возможно ли получить год из даты в черном запросе чтобы установить группировку "Год" и или условие.
Варианты выгружать в ТЗ. не предлагать. хочется по другому.
просто  нет или да, если да то пожста подскажите как
 
 
   exwill
 
1 - 21.10.18 - 12:19
(0) В "черном" запросе возможно практически все.  Читай описание языка SQL.
   Случайный прохожий
 
2 - 21.10.18 - 12:44
В семерке нет функции "НачалоПериода"?
   exwill
 
3 - 21.10.18 - 12:47
(2) Он хочет черный запрос.
   Duke1C
 
4 - 21.10.18 - 16:10
Группировка <?> Упорядочить по ;
Синтаксис:
Группировка <ИмяГруппировки>|<ПредопредГруппировка> [Упорядочить по <КонкретизацГруппировки>, ...][Без Упорядочивания][Без Групп][Все [ВошедшиеВЗапрос]];
Англоязычный синоним:
Group <ИмяГруппировки>|<ПредопредГруппировка> [Order By КонкретизацГруппировки, ...][Without Groups][All [IncludedInQuery]];
Назначение:
Установить порядок выборки информации.
Параметры:
<ИмяГруппировки> - имя внутренней переменной, задающей группировку; 
<ПредопредГруппировка> - ключевое слово одной из встроенных группировок;
<КонкретизацГруппировки> - конкретизация переменной <ИмяГруппировки>, задающая порядок групп.
Ключевые слова:
Упорядочить по - параметры, следующие за данным ключевым словом, определяют упорядочивание строк в группировке.
Без Упорядочивания - необязательное добавочное ключевое слово, которое преследует цель уменьшения времени формирования запроса, при условии, что ни упорядочивание, ни значения упорядочивания при использовании данного запроса не нужны.
Без Групп -  группы справочника не выводятся в запрос (для группировки по справочнику);
Все - в запрос выводятся все значения, и нулевые тоже (используется для группировок по справочникам и временных группировок).
ВошедшиеВЗапрос - уточняет предыдущее ключевое слово 'Все'. Использование данного слова подразумевает, что в каждую строку запроса будут включены значения данных (в том числе нулевые), для которых есть ненулевое значение хотя бы в одной строке запроса.
Замечание:
Предопределенные группировки:
  Документ (Document) - позволяет детализацию до документа;
  СтрокаДокумента (DocumentLine) - позволяет детализацию до строки документа;
  ПериодЖурнала (JournalPeriod) - группировка по времени ввода записи журнала расчетов или по времени ее действия.
Группировки по дате:
  День (Day);
  Неделя (Week);
  Месяц (Month);
  Квартал (Quarter);
  Год (Year).
Подробнее см. в документации, глава ''Язык Генерации Запросов''
   Duke1C
 
5 - 21.10.18 - 16:11
+4 или Год нужно извлекать не из даты документа?
   lals
 
6 - 21.10.18 - 16:54
(5) Нет  год надо извлечь из реквизита справочника.
Суть  вопроса надо перебрать справочник определить год рождения и сделать группировку по году (месяцу) рождения
 вот гдето так  если бы не ругалось на ошибку
    "//{{ЗАПРОС(Сформировать)

    |Родитель = Справочник.Сотрудники.Родитель;
    |Должность = Справочник.Сотрудники.Должность;
    |Подразделение = Справочник.Сотрудники.Подразделение;
    |ТекущийЭлемент = Справочник.Сотрудники.ТекущийЭлемент;
    |Пол = Справочник.Сотрудники.Пол;
    |ГодРожд = ДатаГод(Справочник.Сотрудники.ДатаРожд);
    |МесяцРожд = ДатаМесяц(Справочник.Сотрудники.ДатаРожд);
    |Функция Счётчик = Счётчик();
    |Условие(Родитель = ВыбРодитель);
    |"//}}ЗАПРОС

    ;
   lals
 
7 - 21.10.18 - 16:55
Как бы в функцию впихнуть
   2S
 
8 - 21.10.18 - 16:57
Опиши свою функцию, какие проблемы?
   lals
 
9 - 21.10.18 - 17:50
Запрос по справочнику  чтобы  отсортировать (отбирать) сотрудников по годам рождения, по месяцам рождения и прочие ее хотелки хотелось бы сделать запросом, но не получается  в запросе получить датаГод от даты рождения сострдника.
   2S
 
10 - 21.10.18 - 21:28
(9) еще как получается
пиши свою функцию, главное чтобы число возвращала, если не ошибаюсь
 
 Рекламное место пустует
   lals
 
11 - 22.10.18 - 06:50
(10) Пишу -
|ДатаРождения= Справочник.Сотрудники.ДатаРожд;
|Функция ГодРождения = ДатаГод(ДатаРождения);
Вылетает с ошибкой
Запрос[8] : Неожиданное выражение 'ДатаГод'
   lals
 
12 - 22.10.18 - 07:08
+(11) И вообще СП пишет Что список функций предопределен. Знать добавить туда ничего нельзя.
   Sserj
 
13 - 22.10.18 - 07:09
(11)

Функция МояФункцияДатаГод(ДатаРождения)
  Возврат ДатаГод(ДатаРождения);
КонецФункции

...

|ДатаРождения= Справочник.Сотрудники.ДатаРожд;
|Функция ГодРождения = МояФункцияДатаГод(ДатаРождения);

...
   Sserj
 
14 - 22.10.18 - 07:10
+(13)

Точнее в запросе

|ДатаГод = МояФункцияДатаГод(Справочник.Сотрудники.ДатаРожд);
   АгентБезопаснойНацио
 
15 - 22.10.18 - 07:16
может, подключить 1с++ и не парить мозг?
   lals
 
16 - 22.10.18 - 07:23
(16) 1 не хотелось бы
     2 впервые столкнулся хотелось бы разобраться в механизме
(13,14) спасибо ща буду пробовать
   lals
 
17 - 22.10.18 - 07:39
(13) Увы не хочет брать внешнюю функцию, верней ругается что не нашел
 Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{D:\1CSOFT\EXTFORMS\КАДРОВЫЕВЫБОРКИ.ERT(27)}: ГодРождения =  <<?>> МояФункцияГод(Справочник.Сотрудники.ДатаРожд);
Запрос[8] : Неверно заданный путь 'МояФункцияГод'
   АгентБезопаснойНацио
 
18 - 22.10.18 - 08:10
(16) Штатный черный запрос семерки - ужасен. Хотя есть люди, творящие чудеса и на нем. Но "получение скиллов в черном запросе на клюшках" - имхо, неактуально уже. есть более удобные инструменты, хотя и не одобренные свыше...
   ptiz
 
19 - 22.10.18 - 08:48
(17) Она определена выше запроса?
   lals
 
20 - 22.10.18 - 08:57
(17) да
 сразу была после затем перенес выше результат тот же
 щас вот попробовал 
|Функция ГодРождения = Сумма(МояФункцияГод(ДатаРождения));
ругаться не ругается но в функцию не заходит я там сообщить вставил
   ptiz
 
21 - 22.10.18 - 09:11
Проверил, вот так прекрасно заходит:

    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |ОбрабатыватьДокументы все;
    |Сотрудники = Справочник.Сотрудники.ТекущийЭлемент;
    |ДатаРождения = Справочник.Сотрудники.ДатаРождения;
    |Функция СотрудникиАвансСумма = Сумма(Сотрудники.Аванс);
    |Функция ДатаРожденияСумма = Сумма(МояДатаГод(ДатаРождения));
    |Группировка Сотрудники;
    |"//}}ЗАПРОС
   lals
 
22 - 22.10.18 - 09:21
блин тупой я и у меня заходит я "сообщить", поставил после оператора Возврат
   lals
 
23 - 22.10.18 - 09:21
Все пошло как надо  спасибо всем откликнувшимся
   lals
 
24 - 22.10.18 - 12:20
Все в порядке да не очень  когда дело дошло до того чтобы сделать группировку, то оказалось что группировку можно сделать только по тем переменным которые прямо указаны в запросе а то что получено функцией как бы не признается переменной для группировки
ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |Родитель = Справочник.Сотрудники.Родитель;
    |Должность = Справочник.Сотрудники.Должность;
    |Подразделение = Справочник.Сотрудники.Подразделение;
    |Сотрудник = Справочник.Сотрудники.ТекущийЭлемент;
    |Пол = Справочник.Сотрудники.Пол;
    |ДатаРождения= Справочник.Сотрудники.ДатаРожд;
    |Функция ГодРождения = Сумма(МояФункцияГод(ДатаРождения));
    |Функция МесяцРождения = Сумма(МояФункцияМесяц(ДатаРождения));
    |Функция Счётчик = Счётчик();
    |Условие(Родитель = ВыбРодитель);
    |"//}}ЗАПРОС

    ;
    // Если ошибка в запросе, то выход из процедуры

    Если ПризнакПола = 2 Тогда
        ТекстЗапроса = ТекстЗапроса + "
        |Условие(Пол = Перечисление.Пол.Женский);";
    КонецЕсли;
    Если  ПризнакПола = 3 Тогда    
        ТекстЗапроса = ТекстЗапроса + "
        |Условие(Пол = Перечисление.Пол.Мужской);";
    КонецЕсли;
    Если КритерийВыборки = 1 Тогда
        Если Выбрать.Выбран() = 1 Тогда
            ТекстЗапроса = ТекстЗапроса + "
            |Условие(ГодРождения = ВыбЧисло;";
        КонецЕсли;
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка ГодРождения;";///здесь ругается что нет такой переменной

        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Сотрудник Без  Групп;";
    ИначеЕсли КритерийВыборки = 2 Тогда
        Если Выбрать.Выбран() = 1 Тогда
            ТекстЗапроса = ТекстЗапроса + "
            |Условие(МесяцРождения = ВыбЧисло;";
        КонецЕсли;
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка МесяцРождения;";  /// и тут ругается

        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Сотрудник Без  Групп;";
    ИначеЕсли КритерийВыборки = 3 Тогда
        Если Выбрать.Выбран() = 1 Тогда
            ТекстЗапроса = ТекстЗапроса + "
            |Условие(Подразделение = Выбрать);";  // тут не ругается 

        КонецЕсли;
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Подразделение;";
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Сотрудник Без  Групп;";
    ИначеЕсли КритерийВыборки = 4 Тогда
        Если Выбрать.Выбран() = 1 Тогда
            ТекстЗапроса = ТекстЗапроса + "
            |Условие(Должность = Выбрать);"; тут не ругается тоже
        КонецЕсли;
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Должность;";
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Сотрудник Без  Групп;";
    КонецЕсли;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
   lals
 
25 - 22.10.18 - 12:22
+(24) может есть способ сделать группировку???
   1Сергей
 
26 - 22.10.18 - 12:23
(25) почитай хелп про группировки в запросе
   lals
 
27 - 22.10.18 - 12:37
А разве переменная полученая из функции не является внутренней переменной запроса?
   Ёпрст
 
28 - 22.10.18 - 12:37
(27) нет
   Ёпрст
 
29 - 22.10.18 - 12:38
делфй примитив select from group by ... делов то
   Ёпрст
 
30 - 22.10.18 - 12:38
ну или тупо группировка датаРожд и пост обработка
   lals
 
31 - 22.10.18 - 12:39
блин.....
придется выгружать в ТЗ а так не хотелось,
(28) Вариантов обхода нет?
   Ёпрст
 
32 - 22.10.18 - 12:43
(31) в чорном, врят ли
   lals
 
33 - 22.10.18 - 12:52
(32)Спасибо
 
 


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует