Имя: Пароль:
1C
1С v8
Перебор дат в запросе
0 demkonst
 
19.11.13
18:02
Здравствуйте.
Есть &НачалоПериода и &КонецПериода.
Как запросом получить таблицу месяцев между этими двумя датами?
Например &НачалоПериода = Январь 2013, &КонецПериода = Апрель 2013. Таблица которую надо получить:
Январь 2013
Февраль 2013
Март 2013
Апрель 2013

Спасибо.
1 Wobland
 
19.11.13
18:03
какого типа у нас сегодня месяц?
2 demkonst
 
19.11.13
18:04
Тип дата.
3 Wobland
 
19.11.13
18:05
впрочем, собирай в цикле
4 demkonst
 
19.11.13
18:06
(3) нельзя в цикле :( давно бы сделал
5 Wobland
 
19.11.13
18:06
ну или можно взять календарь и сгруппировать по началу месяца
6 Kardash
 
19.11.13
18:07
Делаешь новое поле Например называешь "Месяц" с формулой НАЧАЛОПЕРИОДА(Период, Месяц), потом делаешь по нему группировку и при выводе оформляешь как дата только с месяцем и годом
7 Wobland
 
19.11.13
18:08
(4) аллах запрещает?
8 demkonst
 
19.11.13
18:09
(5)(6) Спасибо, попробую
(7) Задание учебное, на "развитие навыков написания запросов"
9 User_Agronom
 
19.11.13
18:13
Была подобная задача. Запрос демонически собирал.
10 Wobland
 
19.11.13
18:13
а вот я чот подвис на 35м..
В таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра).
//поле product.model - строка хрен знает какой длины
©http://sql-ex.ru

есть мысли у кого-то?
11 Kardash
 
19.11.13
18:15
(10) на ум приходят только регулярные выражения, но их нельзя в запросе использовать, вроде...
12 rphosts
 
19.11.13
18:16
(10) для условия Like задач с самый раз.
13 Wobland
 
19.11.13
18:16
(11) тут лайком вроде как надо. но ничего кроме
like [0-9]
or like [0-9][0-9]
...
на ум не приходит
14 Wobland
 
19.11.13
18:18
лайку можно задать произвольное число повторений? //ну типа звезды
15 rphosts
 
19.11.13
18:18
(14) дык вроде можно
16 Wobland
 
19.11.13
18:20
(15) не вижу
17 rphosts
 
19.11.13
18:23
(0) если тупо(в голову по другому ничего не пиходит) то можно так: в запросе 1 пакетного запроса отбираем некий набор чисел, в запросе 2 получаем из чисел: ДОБАВИТЬКДАТЕ(ДатаНачала, "Месяц", ЧислоИзЗапроса1) с условие что это поле <= ДатаОкончания
18 rphosts
 
19.11.13
18:23
(16) конкретизируй что нужно-то
19 Wobland
 
19.11.13
18:25
(18) как применить лайк для решения (10)? какую строку сравнения дать?
20 zakidonoff
 
19.11.13
18:26
(10)

where
    CHARINDEX(Product."model", '0') = 1
    OR CHARINDEX(Product."model", '1') = 1
    OR CHARINDEX(Product."model", '2') = 1
    OR CHARINDEX(Product."model", '3') = 1
    OR CHARINDEX(Product."model", '4') = 1
    OR CHARINDEX(Product."model", '5') = 1
    OR

и т.д.
21 Kardash
 
19.11.13
18:26
(19) Не Подобно(%[0-9]%) - не содержит цифр
И Не Подобно(% %) - не содержит пробели
И Не Подобно(%а-я%)

Результат - только с анг. символами букв
22 Wobland
 
19.11.13
18:27
select model, type
from product
where
model not like '%[^0-9]%'
or model not like '%[^a-z]%'

уже сам, всем спасибо
23 rphosts
 
19.11.13
18:31
согласно СП:
Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.

Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:

% (процент): последовательность, содержащая любое количество произвольных символов
_ (подчеркивание): один произвольный символ
[…] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок
В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
[^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки.

Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.

Например, шаблон “%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов:
буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в.



(22) угу, так красивее чем (21)
24 Wobland
 
19.11.13
18:32
(21) а не сработало

select model, type
from product
where
model not like '%[0-9]%'
or model not like '%[a-z]%'
25 Kardash
 
19.11.13
18:35
(24) может платформа старая с глюком?))) в документации пишет что должно сработать...))
26 Wobland
 
19.11.13
18:36
(24) "яя00яя" - истина в обоих лайках (плюс НЕ)
27 Kardash
 
19.11.13
18:45
ВЫБРАТЬ
    БиологическиеАктивы.Наименование
ИЗ
    Справочник.БиологическиеАктивы КАК БиологическиеАктивы
ГДЕ
    (НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[а-я]%"
                И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[А-Я]%"
                И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[А-Я]%"
                И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[0-9]%"
            ИЛИ НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[а-я]%"
                И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[А-Я]%"
                И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[A-Z]%"
                И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[a-z]%")
28 Kardash
 
19.11.13
18:45
Ой сверху одна строчка лишняя:
И НЕ БиологическиеАктивы.Наименование ПОДОБНО "%[А-Я]%"
29 Wobland
 
19.11.13
18:51
1С такая 1С..

выбрать
ссылка
из справочник.номенклатура
где
родитель=значение(справочник.номенклатура.пустаяссылка) //чтобы не было много
и
(наименование не подобно "%^[а-я]%"
или наименование не подобно "%^[0-9]%")
====
Ссылка
Пища
Прочее
_создано на сайте
яя00яя
00яя
яя00
00
яя
30 Wobland
 
19.11.13
18:52
надо на sqlе проверить
31 azernot
 
19.11.13
18:56
(0) Текст запроса не зависящий от состава конфигурации (ограничение - до ~2740 лет в периоде).

ВЫБРАТЬ
    1 КАК Разряд
ПОМЕСТИТЬ Цифры

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    9

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, Числа.Число) КАК ДатаДень
ПОМЕСТИТЬ Даты
ИЗ
    (ВЫБРАТЬ
        Единицы.Разряд + ЕСТЬNULL(Десятки.Разряд, 0) * 10 + ЕСТЬNULL(Сотни.Разряд, 0) * 100 + ЕСТЬNULL(Тысячи.Разряд, 0) * 1000 + ЕСТЬNULL(ДесяткиТысяч.Разряд, 0) * 10000 + ЕСТЬNULL(СотниТысяч.Разряд, 0) * 100000 КАК Число
    ИЗ
        Цифры КАК Единицы
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Сотни
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 100)
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Десятки
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 10)
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Тысячи
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 1000)
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК ДесяткиТысяч
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 10000)
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК СотниТысяч
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 100000)) КАК Числа
ГДЕ
    Числа.Число <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)

;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НАЧАЛОПЕРИОДА(Даты.ДатаДень, МЕСЯЦ) КАК Месяц
ИЗ
    Даты КАК Даты
32 Wobland
 
19.11.13
19:03
забавно

выбрать пз.стр
из
(выбрать "яя00яя" как стр
объединить
выбрать "яя"
объединить
выбрать "00") как пз
где
пз.стр не подобно "%^[0-9]%"
или пз.стр не подобно "%^[а-я]%"

говорит
00
яя
яя00яя

а на сайте такой ответ принят
33 Wobland
 
19.11.13
19:04
(32) а крыжик надо в скобки ;)
34 demkonst
 
19.11.13
19:12
(31) Спасибо! =) пока не работает, но я разберусь
35 romix
 
19.11.13
22:36
Можно создать регистр Календарь, в него заносить различные даты (например, за период отчета), и с ним уже все соединять.
36 romix
 
19.11.13
22:38
В конкретном примере - еще один регистр КалендарьМесяцы. :-)
37 wms
 
19.11.13
23:03
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период {ВЫБРАТЬ Период} ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd ПО (ИСТИНА) ГДЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
38 rphosts
 
20.11.13
03:15
(31) разве в запросе в операциях с датами параметр "Период" не нужно брать в кавычки?
39 rphosts
 
20.11.13
03:21
(32) или только цифры или только англ. буквы, может тогда так:
пз.стр подобно "%^[0-9]%"
или пз.стр подобно "%^[A-Za-z]%"
40 rphosts
 
20.11.13
03:22
+ (38) хотя нет, без кавычек
41 rphosts
 
20.11.13
03:48
(31) один шаг лишний. Проще сделать как тут: http://infostart.ru/public/158617/
заменив День на месяц и дописав условие ГДЕ до конца <= &КонецПериода
42 WildSery
 
20.11.13
09:52
(37) возьмите Календарь, не стирайте пальцы.
43 Sabbath
 
20.11.13
09:56
(27) БиологическиеАктивы - круто)
44 xantimans
 
20.11.13
10:07
(0)
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК ПериодРегистрации
ПОМЕСТИТЬ Периоды
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
45 azernot
 
20.11.13
10:37
(41) Согласен.
Я просто в одном примере и сразу описал как получить:
а) Ряд натуральных чисел
б) Перечень всех дат заданного периода
в) Перечень первых дней месяцев заданного периода.
46 wms
 
20.11.13
13:45
(42)Зачем? А если его нет создавать в пофигураторе? зачем если (37)работает. не мое. но отл. вещь, использую
47 wms
 
20.11.13
13:46
вставьте в консоль и проверьте :-)
48 WildSery
 
20.11.13
16:15
(46) Календарь - это незаменимая вещь, и да, его стоит создать.
Я рад за вас, что вы освоили такой метод. Но это примитив, и кроме того, вы заранее знаете, сколько разрядов потребуется? Да-да, можно с запасом, но ... зачем?
49 wms
 
20.11.13
17:20
(48)базовы конф не существует? внешние отчеты создавать например или  типовые все с поддержки снимать потому что "Календарь - это незаменимая вещь" ? смешно.
я не парюсь, работает и отлично. скопировал в шаблон и применяю.
горько что такую простую вещь 1с в запросе не предусмотрело штатно
50 WildSery
 
21.11.13
11:19
(49) Не вижу связи между календарём и необходимостью снимать что-то с поддержки. Что "внешние отчёты"? Выражайте мысль яснее, я ничего не понял.

Какую "простую вещь" не предусмотрели в 1с? Если речь о ряде натуральных чисел, то их "штатно" нет ни в одной известной мне системе.
51 wms
 
21.11.13
17:02
(50)тока увидел стаж 1 мес.
мож ты еще по 7.7 ?
52 WildSery
 
22.11.13
13:59
(51) 7.7, когда она появилась, я посмотрел и она не понравилась. Никогда не занимался. 1С заинтересовался повторно, только когда появился тонкий клиент.
Ты стажем на этом форуме собираешься меряться или таки ответишь на вопрос?
53 wms
 
22.11.13
17:21
(52)какой вопрос сформулируй правильно и на мой ответь про "базовых конфигураций не существует? "и как ты туда календарь добавишь?

ну и что под календарем ты имеешь ввиду, раз в 8-ке т.к. это понятие из 7.7 в 8-ке нет такого объекта, что вместо него используется? я то знаю, а ВЫ?
54 wms
 
22.11.13
17:23
смыл прост, навига менять конфигурацию, даже если она проф, хотя бывает и не профф, если можно штатно получить в запросе перебор дат за период ?
55 wms
 
22.11.13
17:26
я просто часто в прошлом сталкивался отчет вдруг перестает работать, пользователю срочно надо, лезу в код там период из добавленного предыдущим прогом регистра сведения берется а его не заполнили и никто не знает что надо заполнять ....
а если в штате нет прога?
56 WildSery
 
22.11.13
17:46
(53) Перечитайте (50), там три вопроса, первый скорее утверждение, потому без знака "?"
"базовых конфигураций не существует"? - существуют, я сам написал полторы.
"как ты туда календарь добавишь"? - я вставил методом копи-паста из типовой, убрал лишнее.
Если сейчас будешь доказывать, что регламентированный производственный календарь нельзя назвать календарём, или это не совсем календарь, я огорчусь.
(54) Потому что вставлять этот костылик в каждый запрос трудозатратно и неэффективно.
(55) Что тут можно сказать? Пользуйся типовым функционалом!
57 EvgeniuXP
 
22.11.13
23:00
(0) см. остатки на каждый день - поиском - там сказано и показано, как формировать таблицу из чисел и прибавлять к начале дате до конца даты и получишь месяц.
58 EvgeniuXP
 
22.11.13
23:01
(0) а еще оригинальнее поискать ответ, как в запросе из строки сделать число :)
59 grayshadow
 
23.11.13
01:15
просто любопытно, а что за типовая конфа без календаря?
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой