|   |   | 
| 
 | Календарь | ☑ | ||
|---|---|---|---|---|
| 0
    
        TwoWorld 01.09.11✎ 17:52 | 
        Создал справочник "Календарь",2 реквизита ДатаНач и ДатаКон, написал функцию по поиску рабочего дня, но она не работает, в чем проблема? (он почему то по реквизиту всегда выдает пустую ссылку)
  Функция ПроверкаДатыВыходныхИПраздников(ДатаПроверки) ПромежДата =ДатаПроверки; ФлПервый = 0; Пока ЗначениеЗаполнено(ПромежДата) Цикл СтрокаНаинования =Справочники.Календарь; Строка = СтрокаНаинования.НайтиПоРеквизиту("ДатаНач",ПромежДата); Если Строка <> СтрокаНаинования.ПустаяСсылка() Тогда если ФлПервый = 0 Тогда ПромежДата = Дата(Строка.ДатаКон) + 24*60*60; ФлПервый = 1; Иначе Прервать; КонецЕсли; Иначе ПромежДата = Дата(ПромежДата) + 24*60*60; КонецЕсли; КонецЦикла; Возврат ПромежДата; КонецФункции | |||
| 1
    
        TwoWorld 01.09.11✎ 18:01 | 
        Вроде все правильно написано: только вот 
  Если Строка <> СтрокаНаинования.ПустаяСсылка() Тогда заменить на Если Строка = СтрокаНаинования.ПустаяСсылка() Тогда , но вс равно всегда пустаЯ ссылка выходит | |||
| 2
    
        Mort 01.09.11✎ 18:10 | 
        Используй запрос.     | |||
| 3
    
        Aleksei_Pro 01.09.11✎ 21:48 | 
        Не думаю что этот код сработает, хотя самому интересно ход решения твой...довести над до ума только     | |||
| 4
    
        Aleksei_Pro 01.09.11✎ 21:56 | 
        (2) какой запрос, зачем? только вот сам не пойму, почему (0) у автора не работает....     | |||
| 5
    
        Axel2009 02.09.11✎ 09:08 | 
        псц код, но думаю что в датанач не дата находится.     | |||
| 6
    
        Ненавижу 1С гуру 02.09.11✎ 09:10 | 
        а регистр сведений не лучше ли было юзать?     | |||
| 7
    
        catena 02.09.11✎ 09:12 | 
        А точно есть элемент с ДатаНач=ПромежДата?
  И время совпадает? | |||
| 8
    
        Wobland 02.09.11✎ 09:12 | 
        Пока ЗначениеЗаполнено(ПромежДата) Цикл
  в данном случае практически Пока Истина Цикл | |||
| 9
    
        TwoWorld 02.09.11✎ 13:32 | 
        А можно как то врея убрать из даты, но чтобы тип "Дата" остался?     | |||
| 10
    
        acsent 02.09.11✎ 13:34 | 
        СтрокаНаинования.
  Это на каком языке? | |||
| 11
    
        Wobland 02.09.11✎ 13:38 | 
        (9) Формат() спасёт?     | |||
| 12
    
        TwoWorld 02.09.11✎ 13:38 | 
        Все спасибо, взлетела программа!     | |||
| 13
    
        TwoWorld 02.09.11✎ 14:08 | 
        Вот код: он немного не так работает:
  ПромежДата =НачалоДня(ДатаПроверки); ФлПервый = 0; Пока ЗначениеЗаполнено(ПромежДата) Цикл Если ФлПервый СтрокаНаинования =Справочники.Календарь; Строка = СтрокаНаинования.НайтиПоРеквизиту("ДатаНач",ПромежДата); Если Строка = СтрокаНаинования.ПустаяСсылка() Тогда ПромежДата = НачалоДня(Дата(ПромежДата)) + 24*60*60; Иначе ПромежДата = НачалоДня(Дата(Строка.ДатаКон)) + 24*60*60; КонецЕсли; КонецЦикла; Возврат ПромежДата; Пример: ДатаНач Датакон 01,01,2011 02,01,2011 02,01,2011 03,01,2011 ДатаПроверки - 31,12,2011 и к этой дате нужно прибавить 1 рабочий день! Нужно чтобы получилось - 05,01,2011 Как исправить? | |||
| 14
    
        catena 02.09.11✎ 14:12 | 
        (13)Это по какой логике должно получиться 05/01? О_О     | |||
| 15
    
        TwoWorld 02.09.11✎ 14:15 | 
        04,01,11 ..     | |||
| 16
    
        catena 02.09.11✎ 14:16 | 
        (15)Ну, 04/01 по идее должно получиться...     | |||
| 17
    
        catena 02.09.11✎ 14:16 | 
        Только вот из цикла не выйдет...
  Пока ЗначениеЗаполнено(ПромежДата) Цикл | |||
| 18
    
        TwoWorld 02.09.11✎ 14:17 | 
        (17) вот и именно, как мне выйти из цикла правильно и когда?     | |||
| 19
    
        catena 02.09.11✎ 14:21 | 
        От задачи зависит... Задача не ясна...     | |||
| 20
    
        TwoWorld 02.09.11✎ 14:22 | 
        прибавить к дате 1 рабочий день!     | |||
| 21
    
        catena 02.09.11✎ 14:22 | 
        Чисто в продолжение бреда:
  ПромежДата =НачалоДня(ДатаПроверки); ФлПервый = 0; Пока ЗначениеЗаполнено(ПромежДата) Цикл СтрокаНаинования =Справочники.Календарь; Строка = СтрокаНаинования.НайтиПоРеквизиту("ДатаНач",ПромежДата); Если Строка = СтрокаНаинования.ПустаяСсылка() Тогда Если флПервый=1 Тогда Прервать; КонецЕсли; ПромежДата = НачалоДня(Дата(ПромежДата)) + 24*60*60; ФлПервый=ФлПервый+1; Иначе ПромежДата = НачалоДня(Дата(Строка.ДатаКон)) + 24*60*60; ФлПервый=0; КонецЕсли; КонецЦикла; Возврат ПромежДата; | |||
| 22
    
        TwoWorld 02.09.11✎ 14:50 | 
        В УТ 10,3 есть производственный календарь. Как можно на основании него проверить является ли некая дата "Выходным или праздником"?     | |||
| 23
    
        and2 02.09.11✎ 14:53 | 
        (22) ну там реквизит есть соответствующий.
  полко надо еще "перенесенные праздничные и выходные" почитать | |||
| 24
    
        and2 02.09.11✎ 14:54 | 
        ВидДня     | |||
| 25
    
        TwoWorld 02.09.11✎ 14:57 | 
        ВидДня - это что?     | |||
| 26
    
        Axel2009 02.09.11✎ 15:05 | 
        ВидДня - там указывается что это за дата.     | |||
| 27
    
        TwoWorld 02.09.11✎ 15:21 | 
        (26) а как обратиться или функция какая то есть?     | |||
| 28
    
        catena 02.09.11✎ 15:27 | 
        (27)Учи запросы, полезная вещь.     | |||
| 29
    
        and2 02.09.11✎ 15:33 | 
        Запрос=новый запрос;
  запрос.Текст="ВЫБРАТЬ | РегламентированныйПроизводственныйКалендарь.ВидДня, | ВЫБОР | КОГДА РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = ПеренесенныеРабочиеДни.РабочийДень | ТОГДА истина | ИНАЧЕ ложь | КОНЕЦ КАК Перенос |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПеренесенныеРабочиеДни КАК ПеренесенныеРабочиеДни | ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = ПеренесенныеРабочиеДни.РабочийДень | |ГДЕ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = &ДатаКалендаря |"; | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |