Имя: Пароль:
1C
1С v8
Тест по запросам 1С
0 igorkms
 
17.10.19
16:04
Сегодня ходил на тестирование при устройстве на работу и не смог решить вот такую задачу:

КоличествоМесяцев - нужно выдавать сотруднику через это количество месяцев спецодежду.
Есть только два параметра:
НачДата - 01.01.2016
КонДата - 01.01.2018

Текст изначального запроса:

ВЫБРАТЬ
        Спецодежда.Номенклатура,
    Спецодежда.КоличествоМесяцев
ИЗ
    РегистрСведений.Спецодежда КАК Спецодежда

Результат:

|------------|-----------------|
|Номенклатура|КоличествоМесяцев|
|------------|-----------------|
|Куртка      |                6|
|------------|-----------------|
|Сапоги      |                8|
|------------|-----------------|
|Тапочки     |               12|
|------------|-----------------|

Доработать запрос который бы выводил информацию в начале какого месяца нужно выдать спецодежду:
Так должен выглядеть результат:

|------------|-----------------|
|Номенклатура|   Дата выдачи   |
|------------|-----------------|
|Куртка      |       01.01.2016|
|------------|-----------------|
|Куртка      |       01.07.2016|
|------------|-----------------|
|Куртка      |       01.01.2017|
|------------|-----------------|
|Куртка      |       01.07.2017|
|------------|-----------------|
|Сапоги      |       01.01.2016|
|------------|-----------------|
|Сапоги      |       01.09.2016|
|------------|-----------------|
|Сапоги      |       01.05.2017|
|------------|-----------------|
|Тапочки     |       01.01.2016|
|------------|-----------------|
|Тапочки     |       01.01.2017|
|------------|-----------------|

Есть кто сможет решить?)
1 H A D G E H O G s
 
17.10.19
16:07
Выбрать КоличествоМесяцев для нужной номенклатуры и обработать на сервере 1С.
Делающих это запросом - слать в сад.
2 RomanYS
 
17.10.19
16:08
(0) Есть)
3 igorkms
 
17.10.19
16:17
(1) Можете пример запроса написать?
(2) Я и не сомневался)
4 igorkms
 
17.10.19
16:17
(1) Для общего развития
5 Жан Пердежон
 
17.10.19
16:20
(3)
1. в зарос передать таблицу с датами
2. самому её сгенерировать в запросе
6 RomanYS
 
17.10.19
16:22
(4) нужно сгенерить таблицу со счетчиком. А дальше соединение с условием на дату.
Само поле
ДобавитьКДате(&НачДата, Месяц, Таб.КоличествоМесяцев*ТаблицаСоСчетчиком.Индекс)
7 palsergeich
 
17.10.19
16:29
Документом выдачи спецодежды делать запись в РС вперёд, когда надо будет эту спецуху менять
Состав регистра - 3 измерения: сотрудник, дата, номенклатура. Дата - заполняется как дата документа выдачи + СПИ
Запрос тривиальный
Выбрать номенклатура из регистр.какой то где сотрудник=сотрудник и дата между началоМесяца и Конец месяца, но так как в задаче начало месяца, то задачу можно упростить записывая дату всегда на начало месяца и условие так же
8 palsergeich
 
17.10.19
16:31
(7) но это реальное использование в этой учебной задаче надо всего лишь:
От даты в регистре до даты запроса разбить на интервалы и все
9 Жан Пердежон
 
17.10.19
16:39
(7) (8) где ты тут регистр с датами увидел?
10 palsergeich
 
17.10.19
16:40
(9) Ща
11 palsergeich
 
17.10.19
16:55
ВЫБРАТЬ
    "Куртка" КАК Номенклатура,
    6 КАК СПИ,
    &ДатаНачала КАК ДатаНачала
ПОМЕСТИТЬ ТипоРегистр

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Сапоги",
    8,
    &ДатаНачала

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Тапочки",
    12,
    &ДатаНачала
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК Поле1
ПОМЕСТИТЬ Числа

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    9

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    100 * Числа.Поле1 + 10 * Числа1.Поле1 + Числа2.Поле1 КАК Сдвиг
ПОМЕСТИТЬ Итератор
ИЗ
    Числа КАК Числа,
    Числа КАК Числа1,
    Числа КАК Числа2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТипоРегистр.Номенклатура КАК Номенклатура,
    ДОБАВИТЬКДАТЕ(ТипоРегистр.ДатаНачала, МЕСЯЦ, Итератор.Сдвиг) КАК ДатаВыдачи
ИЗ
    ТипоРегистр КАК ТипоРегистр,
    Итератор КАК Итератор
ГДЕ
    (ВЫРАЗИТЬ(Итератор.Сдвиг / ТипоРегистр.СПИ КАК ЧИСЛО(15, 0))) = Итератор.Сдвиг / ТипоРегистр.СПИ
    И ДОБАВИТЬКДАТЕ(ТипоРегистр.ДатаНачала, МЕСЯЦ, Итератор.Сдвиг) <= &ДатаОкончания

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    ДатаВыдачи
10 минут ковыряясь в носу
12 palsergeich
 
17.10.19
16:57
https://pastebin.com/veWRmBdX
Вот более удобно
13 RomanYS
 
17.10.19
16:58
(11) условие лучше во внутреннее соединение и условие можно попроще переписать
Придирки)
14 Йохохо
 
17.10.19
16:59
(11) (15, 0) чтобы показать что фуражка сидит как влитая?)
15 palsergeich
 
17.10.19
17:01
(14) нужно кратно СПИ. В запросе нет функции остатка от деления.
Если результат деления равен округлению до целого то это и есть эмуляция функции %
16 RomanYS
 
17.10.19
17:09
(15)делить не нужно совсем. См (6)
17 palsergeich
 
17.10.19
17:10
(16) мое решение изящнее и решено чисто на запросе без кода 1с
18 RomanYS
 
17.10.19
17:12
(17) изящнее чем что? В (6) оно и описано. Только условия без деления
19 palsergeich
 
17.10.19
17:14
(18) ну ок, это одна из реализаций на скору руку, решение верное и валидное
20 igorkms
 
17.10.19
18:36
(18) (19) Две головы, мне расти и расти)
21 Ёпрст
 
17.10.19
18:54
(20) прочитай эту книжку, тоже голова отрастёт:
Microsoft SQL Server 2012. Основы T-SQL
by Ицик Бен-Ган
22 Ёпрст
 
17.10.19
18:59
ну и ежели интерес будет, тут поиграться
http://www.sql-ex.ru/?Lang=
23 xXeNoNx
 
17.10.19
21:06
Другой вопрос: а как относитесь к тестовому заданию, где решить нужно задачу-аналог как на экзамене спеца по платформе, с учетом того что этот серт у тебя уже присутствует?
24 palsergeich
 
17.10.19
21:55
(23) Яна полном серьезе говорю что у меня еще 6 предложений и на каждое тратить на тестовое по несколько часов я не готов. Или очно или пока.
25 xXeNoNx
 
17.10.19
22:49
(24) Аналогично, после некой фирмы, которая проводит лотереи, где мне дали тестовое аналог со спеца, я конечно потратил 2 часа, но не стал работать там, впредь сразу уточняю есть ли тестовое задание и в каком виде, если надо что-то писать, сразу лесом идут. Буквально на днях частичную удаленку так отмел, пришел, пообщались, вроде все норм, сказали дадим тебе реальную задачу, справишься, возьмем..., я не стал справляться
26 palsergeich
 
17.10.19
22:53
(25) мне в одном месте понравилось как было:
Заранее сказали все про все 2 часа.
И беседа с HR и беседа с руком и тестовое задание тут же, простенькое но нетривиальное и сразу оффер и на СБ документы отправили. 3 дня ожидания одобрения СБ и выход. ИМХО - эталон как надо, а не эти 100500 ступеней собеседований на пару месяцев длиной
27 xXeNoNx
 
17.10.19
23:03
(26) Да, согласен, все четко и без воды.., если рук. грамотный, то через полчаса общения уже складывается впечатление о кандидате, но если задание служит для того что бы скинуть офер от заявленного это капец. Еще контора была висит 2 вакансии на старшего и ведущего, приглашают на ведущего: звонят рассказывают о конторе, спрашивают знаете то, знаете это, отвечаю что с этим сталкивался, с этим не приходилось(что-то про какую-то типовую было) и отвечают ну так  как вы не достаточно знаете, можете претендовать на старшего, соответственно с меньшим окладом, причем это был уровень HR.
28 Скиурус
 
18.10.19
00:24
За (11) я бы пожизненно лишал доступа в конфигуратор и выдавал метлу.
А решать нужно так:

ВЫБРАТЬ
    "Куртка" КАК Номенклатура,
    6 КАК СПИ
ПОМЕСТИТЬ ТипоРегистр

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Сапоги",
    8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Тапочки",
    12
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НАЧАЛОПЕРИОДА(КалендарныеГрафики.ДатаГрафика, МЕСЯЦ) КАК Дата
ПОМЕСТИТЬ тДаты
ИЗ
    РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики
ГДЕ
    КалендарныеГрафики.ДатаГрафика МЕЖДУ &НачДата И &КонДата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТипоРегистр.Номенклатура,
    тДаты.Дата
ИЗ
    ТипоРегистр КАК ТипоРегистр
        ЛЕВОЕ СОЕДИНЕНИЕ тДаты КАК тДаты
        ПО (РАЗНОСТЬДАТ(тДаты.Дата, &НачДата, МЕСЯЦ) / ТипоРегистр.СПИ = (ВЫРАЗИТЬ(РАЗНОСТЬДАТ(тДаты.Дата, &НачДата, МЕСЯЦ) / ТипоРегистр.СПИ КАК ЧИСЛО(10, 0))))
29 DrZombi
 
гуру
18.10.19
06:31
(0) Ты туда не пошел, молодец... бред сивой кобылы :)
30 DrZombi
 
гуру
18.10.19
06:33
(28) Вы в условии (0) Видите Регистр "Календарные графики"? :)
31 DrZombi
 
гуру
18.10.19
06:33
+ В условии нет описания, что за конфигурация и есть ли еще какие либо таблицы :)
32 DrZombi
 
гуру
18.10.19
06:34
(1) А количество месяцев вы будете считать от какой даты...
От начала или с конца? :)
33 DrZombi
 
гуру
18.10.19
06:38
+(0) Задача решается тупым сдвигом от начала даты... задача тупая, как и тестировщик.
Давай разберем твой результат, коль тебе его озвучили:

1. Результат некорректен, почему надо, что бы была начальная дата?
2. Негде в постановке это не озвучено, тут либо постановщик дурак, либо ты должен был у него уточнять, что делать (проверка как ты работаешь с пользователями)
34 DrZombi
 
гуру
18.10.19
06:39
+ Единственное ще, зачем тут конечная дата?...
Просто любопытно, что бы поржать :)
35 Nikoss
 
18.10.19
07:03
(27) в чем разница старший/ведущий?
36 Скиурус
 
18.10.19
08:22
(30) Я в условии даже не вижу, что это платформа 1С. Но мы ж тут вроде все инженеры, и разумными умолчаниями должны уметь пользоваться.
37 DrZombi
 
гуру
18.10.19
09:02
(36) Точно... задача не о чем :)
38 DrZombi
 
гуру
18.10.19
09:03
+(36) По умолчанию, это только в школьных задачах, в жизни за по-умолчанию увольняют и лишают премии :)
39 Cyberhawk
 
18.10.19
09:06
(23) Если тестовое задание любое больше чем на полчаса, то сразу спрашиваю, оплачивается ли оно. А уж если оплачивается, то без разницы, задача со спеца там или что-то другое.
40 Cyberhawk
 
18.10.19
09:06
(25) "сказали дадим тебе реальную задачу, справишься, возьмем" // Безплатно что ли? ))
41 Cyberhawk
 
18.10.19
09:08
(35) В деньгах на руки, наверное. Ведущий больше старшего.
42 xXeNoNx
 
18.10.19
09:09
(35) у них в ЗП
43 mikecool
 
18.10.19
09:12
(15) " В запросе нет функции остатка от деления. "
а это:
15/4 - выразить(15/4 как число(15,0))
?
44 Скиурус
 
18.10.19
09:13
(38) Как раз наоборот. В школьных задачах мне поставят двойку, а в жизни уволят за говнокод из (11) и за незнание того, что в конфе есть регистр с датами.
45 xXeNoNx
 
18.10.19
09:15
(39)каждый для себя ставит планку, если они на собеседовании начинают мозг выносить, что будет после, проверять не хотелось. Кстати, думаю что после вопроса об оплате собеседования более получаса данные конторы сразу отсеятся
46 xXeNoNx
 
18.10.19
09:16
(40) не совсем, думаю это бы вошло в будущую ЗП
47 Cyberhawk
 
18.10.19
09:16
(45) "думаю что после вопроса об оплате собеседования более получаса данные конторы сразу отсеятся" // Так и отсеиваются)
Задачку из спеца за деньги еще ни разу не делал)
48 RomanYS
 
18.10.19
09:55
(44) Так его регистра нет - запустили, не работает. Это же тест)
49 dubraver
 
18.10.19
10:36
Решение на T-SQL:
declare @t1 table (product varchar(10), mCount int)
insert into @t1 select 'Куртка', 6 union  select 'Сапоги', 8 union select 'Тапочки', 12

declare @dateFrom date, @dateTo date
select  @dateFrom = '2016-01-01', @dateTo = '2018-01-01';

with cte_
as
(
    select @dateFrom as _date, mCount, product from @t1
    union all
    select DATEADD(month, mCount, _date),mCount, product
    from cte_
    where DATEADD(month, mCount, _date) < @dateTo
)
select product, _date  from cte_ order by product, _date;
50 Ёпрст
 
18.10.19
11:00
(49) ага, а теперь тоже самое, на 2000 sql )
51 spiller26
 
18.10.19
11:20
(28) Не во всех конфигурациях есть такой РС
Довольно часто встречаю задачи подобного типа, особенно идет задача "Остатки на  каждый день".
Самый распространённый пример "Курс валюты на каждый день".
52 Новиков
 
18.10.19
11:37
(51) остатки на каждый день хорошо обмусолил ильдарович на исе. Он там эталонное решение выкладывал.

(0) ТС, на какую зп такое садо-мазохизм? И решение по памяти надо писать при них онлайн?
53 igorkms
 
19.10.19
11:02
(29) Я тоже понял, после поставленной задачи, что это тупари если дают такие задания которые в жизни никогда и не понадобятся. Вообще контора простая, из задач основных был переход с УТ 10 на 11
(52) ЗП от 120, на решение давалось 2 часа, у них, плюс еще две задачи (попроще), вспомню напишу позже.