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

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

...

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

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

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

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

    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |ОбрабатыватьДокументы все;
    |Сотрудники = Справочник.Сотрудники.ТекущийЭлемент;
    |ДатаРождения = Справочник.Сотрудники.ДатаРождения;
    |Функция СотрудникиАвансСумма = Сумма(Сотрудники.Аванс);
    |Функция ДатаРожденияСумма = Сумма(МояДатаГод(ДатаРождения));
    |Группировка Сотрудники;
    |"//}}ЗАПРОС
22 lals
 
22.10.18
09:21
блин тупой я и у меня заходит я "сообщить", поставил после оператора Возврат
23 lals
 
22.10.18
09:21
Все пошло как надо  спасибо всем откликнувшимся
24 lals
 
22.10.18
12:20
Все в порядке да не очень  когда дело дошло до того чтобы сделать группировку, то оказалось что группировку можно сделать только по тем переменным которые прямо указаны в запросе а то что получено функцией как бы не признается переменной для группировки
ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Родитель = Справочник.Сотрудники.Родитель;
    |Должность = Справочник.Сотрудники.Должность;
    |Подразделение = Справочник.Сотрудники.Подразделение;
    |Сотрудник = Справочник.Сотрудники.ТекущийЭлемент;
    |Пол = Справочник.Сотрудники.Пол;
    |ДатаРождения= Справочник.Сотрудники.ДатаРожд;
    |Функция ГодРождения = Сумма(МояФункцияГод(ДатаРождения));
    |Функция МесяцРождения = Сумма(МояФункцияМесяц(ДатаРождения));
    |Функция Счётчик = Счётчик();
    |Условие(Родитель = ВыбРодитель);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если ПризнакПола = 2 Тогда
        ТекстЗапроса = ТекстЗапроса + "
        |Условие(Пол = Перечисление.Пол.Женский);";
    КонецЕсли;
    Если  ПризнакПола = 3 Тогда    
        ТекстЗапроса = ТекстЗапроса + "
        |Условие(Пол = Перечисление.Пол.Мужской);";
    КонецЕсли;
    Если КритерийВыборки = 1 Тогда
        Если Выбрать.Выбран() = 1 Тогда
            ТекстЗапроса = ТекстЗапроса + "
            |Условие(ГодРождения = ВыбЧисло;";
        КонецЕсли;
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка ГодРождения;"; ///здесь ругается что нет такой переменной
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Сотрудник Без  Групп;";
    ИначеЕсли КритерийВыборки = 2 Тогда
        Если Выбрать.Выбран() = 1 Тогда
            ТекстЗапроса = ТекстЗапроса + "
            |Условие(МесяцРождения = ВыбЧисло;";
        КонецЕсли;
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка МесяцРождения;";  /// и тут ругается
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Сотрудник Без  Групп;";
    ИначеЕсли КритерийВыборки = 3 Тогда
        Если Выбрать.Выбран() = 1 Тогда
            ТекстЗапроса = ТекстЗапроса + "
            |Условие(Подразделение = Выбрать);";  // тут не ругается
        КонецЕсли;
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Подразделение;";
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Сотрудник Без  Групп;";
    ИначеЕсли КритерийВыборки = 4 Тогда
        Если Выбрать.Выбран() = 1 Тогда
            ТекстЗапроса = ТекстЗапроса + "
            |Условие(Должность = Выбрать);"; тут не ругается тоже
        КонецЕсли;
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Должность;";
        ТекстЗапроса = ТекстЗапроса + "
        |Группировка Сотрудник Без  Групп;";
    КонецЕсли;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
25 lals
 
22.10.18
12:22
+(24) может есть способ сделать группировку???
26 1Сергей
 
22.10.18
12:23
(25) почитай хелп про группировки в запросе
27 lals
 
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
ну или тупо группировка датаРожд и пост обработка
31 lals
 
22.10.18
12:39
блин.....
придется выгружать в ТЗ а так не хотелось,
(28) Вариантов обхода нет?
32 Ёпрст
 
22.10.18
12:43
(31) в чорном, врят ли
33 lals
 
22.10.18
12:52
(32)Спасибо
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший