| 
    
        
     
     | 
    
  | 
Календарь | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        Запрос=новый запрос;
  
        запрос.Текст="ВЫБРАТЬ | РегламентированныйПроизводственныйКалендарь.ВидДня, | ВЫБОР | КОГДА РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = ПеренесенныеРабочиеДни.РабочийДень | ТОГДА истина | ИНАЧЕ ложь | КОНЕЦ КАК Перенос |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПеренесенныеРабочиеДни КАК ПеренесенныеРабочиеДни | ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = ПеренесенныеРабочиеДни.РабочийДень | |ГДЕ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = &ДатаКалендаря |";  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |