Имя: Пароль:
1C
1С v8
Количество рабочих дней, календарных , между двумя датами в запросе
,
0 СвинТуз
 
04.03.15
17:51
Обычная задача.
Есть дата отгрузки. Есть число дней отсрочки. Рабочих.
Как в запросе определить дату начала просрочки?
1 СвинТуз
 
04.03.15
17:51
праздники можно игнорировать
2 tixis
 
04.03.15
17:52
регалментированныйпроизводственныйкалендарь есть в конфе?
3 yavasya
 
04.03.15
17:52
регламентированный производствееный календарь
4 СвинТуз
 
04.03.15
17:53
нет
5 yavasya
 
04.03.15
17:53
или свой календарь напиши
6 vicof
 
04.03.15
17:53
Производственный календарь берем и отбираем рабочие и предпраздничные даты. Потом складываем. Соединяем с таблицей дат отгрузок. ПРофит.
7 tixis
 
04.03.15
17:54
что за конфа?
8 PR
 
04.03.15
17:55
(0) Красиво никак.
Потому что рабочих дней может быть пару дней в году, то есть непонятно, за какой период брать производственный календарь.
Если некрасиво, то брать с запасом, например, дней в два раз больше + 30, чем по календарю.
9 Злопчинский
 
04.03.15
17:56
Извините за нескромный вопрос ламера... если в запросе надо определить дату начала просрочки - то нафига это делать в запросе? если это тупо никак не связано с выборкой и фильтрацией данных...
10 Злопчинский
 
04.03.15
17:57
(8) а с учетом того что острочки могут быть такие что отсрочка уже есть, а произв.календарь еще постановлением правительства не утвержден
11 СвинТуз
 
04.03.15
17:58
(5)
вот думаю ) как раз
с календарем можно и праздники учитывать

(9)
хочу ...

(8)
нужно тупо выкинуть 6-ки и 7-ки
если отсрочка делится на 7 без остатка на самом деле все прозаично.
хуже если от деления есть остаток
12 vicof
 
04.03.15
17:59
(11) Ничо не прозаично. А если семерка - рабочий день, выпавший на вс?
13 СвинТуз
 
04.03.15
18:00
(5)
на самом деле таким путем получить дату начала просрочки тоже не легко ...
14 PR
 
04.03.15
18:01
(11) Если только 6 и 7, то проще, но логика на самом деле та же
15 СвинТуз
 
04.03.15
18:01
(12)
да уже работает
16 and2
 
04.03.15
18:01
ВЫБРАТЬ ПЕРВЫЕ 22
    ДанныеПроизводственногоКалендаря.Дата
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
    ДанныеПроизводственногоКалендаря.Дата >= &ДатаН
    И ДанныеПроизводственногоКалендаря.ВидДня = &ВидДня
17 PR
 
04.03.15
18:01
+(14) Только брать тогда не производственный календарь, а определять дни недели в интервале от и до.
18 PR
 
04.03.15
18:02
(16) А если отсрочка 30 дней?
А если реализация 29 декабря?
19 СвинТуз
 
04.03.15
18:03
(16) не думаю что это то
вам нужно дату подвинуть
например на 14 дней
20 СвинТуз
 
04.03.15
18:04
получить то число рабочих между двумя датами просто
а вот подвинуть будет сложнее
21 and2
 
04.03.15
18:04
(18) вот если отсрочка 1.5 года - то возможна проблема.
организационная
22 and2
 
04.03.15
18:06
(20) тогда, как нормальные пацаны, пиши дату отсрочки в БД
23 PR
 
04.03.15
18:07
(22) Кстати, да, это вернее всего, если не страдать фигней
24 kumena
 
04.03.15
18:35
>> Обычная задача.

напоминает задачу на спеца по бухучету.


>> Красиво никак.

ошибаешься рома, есть красивый способ.
сдвиг легко делается в запросе, надо только голову приложить.
25 kumena
 
04.03.15
18:37
+24 решается через производственный календарь
26 kumena
 
04.03.15
18:45
(23) программист, умеющий писать такой запрос на какую зарплату тянет по твоему?
27 Biker
 
04.03.15
18:51
В ут 11 сделано так, раб дни пронумерованы,
прибавляешь к номеру даты отгрузки кол-во дней отсрочки и  ищешь по полученному номеру дату.
28 kumena
 
04.03.15
18:58
(27) браво!
29 kumena
 
04.03.15
19:01
до такой идеи я сам дошел, когда была необходимость, УТ я не занимаюсь совсем.
30 kumena
 
04.03.15
19:03
(27) но ты зря написал, испортил интригу )))
31 СвинТуз
 
04.03.15
19:12
(27)
не совсем понял )
а если год сменяется?
спс подумаю )
32 СвинТуз
 
04.03.15
19:14
нумерация видимо в календаре?
33 PR
 
04.03.15
19:20
(26) Что делать с датой 29 декабря и отсрочкой 40 жней?
34 PR
 
04.03.15
19:20
+(33) дней
35 Biker
 
04.03.15
19:20
(32) ну да, рег свед там по каждому году календарь
(31) если год меняется делай проверку суммы на макс номер  раб дней.
36 Biker
 
04.03.15
19:21
(34) и тебе испортил интригу
37 PR
 
04.03.15
19:22
(35) В запросе делай проверку?
А если отсрочка 3000 дней? А если 300000 дней? А если производственный календарь не заполнен?
Что-то красоты не очень наблюдается.
38 СвинТуз
 
04.03.15
19:22
(35)
проще начать календарь , например, с 2010
и считать сплошняком
для торговли так можно сделать
39 PR
 
04.03.15
19:22
(38) Красивее с 0 года тогда уж
40 PR
 
04.03.15
19:23
(27) А номер даты отгрузки как определяется?
В два захода что ли делается получается?
41 СвинТуз
 
04.03.15
19:24
(37)
а если прогнать до 2100 то можно не париться с заполнением
самописка
(40)
два видимо
но это проще чем выбором работать
42 Biker
 
04.03.15
19:26
все делал через вложеный запрос к регистру
ничего вернет , значит календарь не заполнен, о чем и сообщается юзеру.
43 СвинТуз
 
04.03.15
19:26
долго не будет
к тому времени когда дойдет в запросе до просрочки
таблица сильно в размерах ужмется
44 Biker
 
04.03.15
19:26
(41) это производственный календарь , у нас выходные правительство любит двигать.
45 СвинТуз
 
04.03.15
19:27
а вообще прикольно
качаю торговлю 11
загляну
46 СвинТуз
 
04.03.15
19:27
(44)
это лучше чем ничего )))
47 СвинТуз
 
04.03.15
19:28
сейчас вообще отбрасывают только 6-ки и 7-ки
причем это делается в цикле

а если в СКД нужно будет загнать? )
нужно наращивать систему
спс за идею
48 Biker
 
04.03.15
19:30
(46)(47) это как-то крива ,
грузи календарь отсюда хотя-бы http://xmlcalendar.ru/
В скд загоняй - разрешаю.
49 PR
 
04.03.15
19:34
(47) 6 и 7 можно в запросе посчитать через день недели.
50 СвинТуз
 
04.03.15
19:35
(49)
я и посчитал
только когда сдвижка не кратная 7 как мозги прогреваться стали
51 ssh2006
 
04.03.15
19:37
(27) Пример запроса по нумерации рабочих дней производственного календаря, интервал три года.

ВЫБРАТЬ
    Календарь.ДатаКалендаря КАК ДатаКалендаря,
    КОЛИЧЕСТВО(Календарь1.ДатаКалендаря) КАК НомерРабДня,
    ВЫБОР
        КОГДА Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
                ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ЭтоРабочийДень
ПОМЕСТИТЬ Календарь
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь1
        ПО (Календарь1.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
                ИЛИ Календарь1.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
            И (Календарь1.ДатаКалендаря >= НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&ТекущаяДата, ГОД, -1), ГОД))
            И (Календарь1.ДатаКалендаря <= Календарь.ДатаКалендаря)
ГДЕ
    Календарь.ДатаКалендаря МЕЖДУ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&ТекущаяДата, ГОД, -1), ГОД) И КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ТекущаяДата, ГОД, 1), ГОД)

СГРУППИРОВАТЬ ПО
    Календарь.ДатаКалендаря,
    ВЫБОР
        КОГДА Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
                ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ

ИНДЕКСИРОВАТЬ ПО
    ДатаКалендаря,
    НомерРабДня
;
52 СвинТуз
 
04.03.15
19:37
(49)
не правильно это так прогу напрягать
53 PR
 
04.03.15
19:38
(50) Если день недели даты отгрузки + остаток от деления отсрочки на 7 <= 5, то прибавляем остаток от деления отсрочки на 7, иначе остаток от деления отсрочки на 7 + 2
54 СвинТуз
 
04.03.15
19:47
(53)
ну смотри
сначала нужно проверить куда стартовая попала так?
потом добавить целое от деления *2
потом сдвинуть
тоже не очень красиво

то что получалось в три приема меня и тормознуло
55 СвинТуз
 
04.03.15
19:49
хотя можно первый опустить ? )
56 PR
 
04.03.15
20:07
(54) Еще раз.
Берем Цел(отсрочка / 7) * 5, прибавляем (53).
Всё.
57 kumena
 
04.03.15
20:23
>> А если отсрочка 3000 дней? А если 300000 дней? А если производственный календарь не заполнен?

облажался что можно сделать так признайся.
8 или 82 года это не нормальные отсрочки?
58 kumena
 
04.03.15
20:24
>> Берем Цел(отсрочка / 7) * 5, прибавляем (53).

бывают еще праздники, и переносы выходных, так это что лажа.
59 kumena
 
04.03.15
20:28
+57 для сроков более года прописывают конкретные даты, т.к. количество рабочих дней там не предсказуемо, ввиду изменения производственного календаря. а до года способ через календарь самое то.
60 PR
 
04.03.15
20:31
(57) Еще раз. Я говорю про то, что красоты не получается.
61 PR
 
04.03.15
20:32
(58) Что значит лажа? Это вариант исключительно для случая с исключением 6 и 7.
62 PR
 
04.03.15
20:32
(59) Отсрочка 40 дней и дата 28 декабря, будут прописывать конкретную дату?
63 tixis
 
04.03.15
21:21
(60) красиво получается, пример решение задачи на спеца по бух