Имя: Пароль:
1C
 
Как получить количество рабочих дней за период?
0 Dee
 
02.11.04
17:36
см. сабж
1 Витаэль
 
02.11.04
17:37
Дата1-Дата2
2 Walther
 
02.11.04
17:40
Смотря где - в ЗиК'е, например, есть спец. календарь, в котором проставляются рабочие дни и часы =)
3 Витаэль
 
02.11.04
17:40
Может кто знает более оптимальный вариант???
4 Dee
 
02.11.04
17:41
Это количество дней, включая выходные.
А как получить количество дней, исключая нерабочие (выходные и праздники)?
5 Walther
 
02.11.04
17:41
(1) Дата1-Дата2 - довольно оригинальный подход =)) Если бы все работали 7 гноября... ;)
6 wt
 
02.11.04
17:47
Календарь = ГрафикРаботы.ОсновныеЧасы;
РабочихДней = Календарь.Дней(НачалоПериода,КонецПериода);
РабочихЧасов = Календарь.Часов(НачалоПериода,КонецПериода);
7 Dee
 
02.11.04
17:52
ГрафикРаботы - это что?
у меня "Предприятие" v7.7 - говорит, переменная не определена.
8 Walther
 
02.11.04
17:52
Если не в ЗиК'е, то с праздниками не знаю как справиться. А насчет выходных - посмотри в синтаксис-помощнике - если мне не изменяет память, там есть какая-то функция, которая возвращает по дате день недели =)
9 wt
 
02.11.04
17:55
Ну например
ГрафикРаботы = Константа.ОсновнойГрафик
или создать объект календарь.
10 Walther
 
02.11.04
17:56
(7) Какая у тя конфигурация? Буха, ТиС или Зарплата? Или какое-нить отраслевое решение? Или еще чего?
11 Wd
 
02.11.04
18:03
НомерДняНедели(<?>)
Синтаксис:
НомерДняНедели(<Дата>)
Назначение:
Возвращает порядковый номер дня недели для заданной даты.
Параметры:
<Дата> - выражение со значением типа дата.
Замечание:
Порядковые номера дней недели: 1 - понедельник, 2 - вторник, ..., 7 - воскресенье.
12 Walther
 
02.11.04
18:37
(11) как здорово, когда под рукой есть синтаксис-помощник =))

(4) ИМХО без учета праздников это должно выглядеть примерно так:
ЧислоПолныхНедель = Цел((Дата2-Дата1)/7);
ЧислоРабочихДней = (Дата2-Дата1) - ЧислоПолныхНедель*2;

+ подумай, как учесть остаток от неполной недели (у мну уже голова не варит)
13 Витаэль
 
02.11.04
18:45
Берешь бумашный календарь - быстрее всего.
14 Аечка
 
03.11.04
08:21
Я для расчета рабочих дней ввела такую функцию. Только все это считается у меня в документе, поэтому еще введен дополнительные список праздников (в форме документа), который заполняется вручную.
//--------------------------------------------  
Функция РасчетРабочихДней()
   Рабочие=0;
   Кон=НачМесяца(ДатаДок);
   Пока Кон<=КонМесяца(ДатаДок) Цикл
    Если (НомерДняНедели(Кон)=6) или (НомерДняНедели(Кон)=7)Тогда //выходные дни не считаем
       Иначе
          ИсключитьПраздник=0;
          Если Праздники.КоличествоСтрок()<>0 Тогда //исключаем праздники
           Праздники.ВыбратьСтроки();
           Пока Праздники.ПолучитьСтроку()=1 Цикл
               Если Праздники.Праздник=Кон Тогда
                   ИсключитьПраздник=1;
               КонецЕсли;    
           КонецЦикла;    
       КонецЕсли;
       Если ИсключитьПраздник=0 Тогда
           Рабочие=Рабочие+1;
       КонецЕсли;    
   КонецЕсли;    
   Кон=Кон+1;
   КонецЦикла;
   Возврат Рабочие;
КонецФункции
//-----------------------------
15 Dee
 
03.11.04
10:09
Скорректируем вопрос :)
В 1С есть такая фича, как календарь бухгалтера (Сервис/Календарь бухгалтера).
Там есть "Производственный календарь на 2004 год", где все праздники и выходные уже указаны. Можно конечно, как Аечка, руками один раз прописать все праздники в какой-нибудь своей функции. Но зачем это делать, если все уже есть готовое?
Собственно, вопрос - как этим подключаемым календарем воспользоваться программно?
16 shura
 
03.11.04
10:12
В любой конф создаешь календарь, заполняешь его своим графиком работы, затем делаешь как в (6). Самое простое и оптимальное решение.
17 Dee
 
03.11.04
10:16
>>shura
А как создать календарь, извините за глупый вопрос :)  ?
Пробую К=СоздатьОбъект("Календарь") - ругаеться "Неудачная попытка создания объекта (Календарь)"
18 Шапокляк
 
03.11.04
10:48
В конфигураторе создаешь календарь. Называешь его, напримерЮ Пятидневка.
Как его использовать читаешь в синтакс-помощнике или, например, в модуле расчета "По окладу" типовой ЗиК.
19 bsg
 
03.11.04
11:20
(15) Реально Вы бредите. Завидую.
20 Rovan
 
гуру
03.11.04
11:35
(15) Это вам кто-то делал на заказ ? (В типовой таких нет)
21 bsg
 
03.11.04
11:42
Расчет - в канаву. В бухгалтерии календари и праздники нашлись.
22 Gorr
 
03.11.04
11:51
КоличествоРабочихДней = Календари.КалендарьБухгалтера.Дней(ДатаНачалаПериода,ДатаКонцаПериода);

где "КалендарьБухгалтера" имя календаря как оно задано в конфигураторе.
23 Dee
 
03.11.04
12:29
(22) Я создал в кофигураторе новый календарь - "К2004"
При попытке обращения:
КолРабДней=Календари.К2004.Дней(ДатаКонца,ДатаНачала);
Возникает ошибка:
"Поле агрегатного объекта не обнаружено (К2004)"
Как к нему всетаки обращаться?
24 Шапокляк
 
03.11.04
13:01
А компонента Расчет установлена?
25 Шапокляк
 
03.11.04
13:03
Дней = Календари.ПолучитьАтрибут("К2004").Дней(ДатаНачала, ДатаКонца);
26 Dee
 
03.11.04
13:15
(25)Пробовал - ругается "Неверное имя атрибута".
Для работы с Календарем компонента расчет обязательна?
27 Шапокляк
 
03.11.04
13:28
Календари - это специфические для расчетной компоненты метаданные. В принципе, если программа дала его создать, значит, есть расчетная компонента на машине. А программа ругается при запуске на той же машине? Если Неверное имя атрибута, значит, возможно К латинское, а обращаетесь к К2004 где русское К.
28 Dee
 
03.11.04
13:43
(27) Все делаю на одной машине. Имена все правильные.
Делаю след. образом:
1. в конфигураторе в разделе "Календари" создаю новый календарь с именем "К2004"
2. в отчете пытаюсь к этому календарю обратиться:
 К=СоздатьОбъект("Календарь.К2004");
 К=СоздатьОбъект("Календари.К2004");
 КРБ=Календарь.К2004.Дней(Д1,Д2);
 КРБ=Календари.К2004.Дней(Д1,Д2);
при любом способе обращения выдает ошибку.
29 Шапокляк
 
03.11.04
13:57
1. в конфигураторе в разделе "Календари" создаю новый календарь с именем "К2004"
2. в отчете пытаюсь к этому календарю обратиться:
Дней = Календари.ПолучитьАтрибут("К2004").Дней(ДатаНачала, ДатаКонца);
И что?
30 Dee
 
03.11.04
14:04
(29) "Неверное имя атрибута"
31 Gorr
 
03.11.04
14:08
1. журнал расчета хоть один в системе создан?
2. что выдает "сообщить(Метаданные.Календарь());" (без кавычек) ?
32 Шапокляк
 
03.11.04
14:14
У меня нормально работает. Еще раз проверьте, с какой буквы календарь в метаданных начинается, с русской или латинской. И обращайтесь в
Дней = Календари.ПолучитьАтрибут("К2004").Дней(ДатаНачала, ДатаКонца); с той же самой.
33 Dee
 
03.11.04
14:18
(31) Ни одного журнала расчета не создано.
сообщить(Метаданные.Календарь()); выдает 0
34 Gorr
 
03.11.04
14:40
(33) Возможно, для нормального функционирования части расчет необходимо создать хотябы один журнал расчета. Вовсе не обязательно его использовать.

PS функция Метаданные.Календать() возвращает количество созданных календарей в конфигураторе.
35 Dee
 
03.11.04
15:17
(34) Действительно, после создания пустого Журнала Расчетов Календарь заработал нормально.
Теперь следующий вопрос - есть файл PRCLND04.MXL с календарем на 2004 год.
Как его загрузить (использовать) для созданного в конфигураторе календаря?
Файл лежит в стандартной папке с календарями.
36 Gorr
 
03.11.04
15:24
Вообще, календари в системе "Автозаполняются", а не загружаются из файлов.
1.в режиме предприятия проставляешь в "праздниках" даты праздников.
2.все в том же режиме выбираешь календарь жмешь кнопку "автозаполнение" (галка учитывать праздники должна быть").

кстати, "стандартная папка" с календарями лежит у кого? и вообще что за файл такой?
37 Dee
 
03.11.04
15:36
(36) C:\1С\Base\ИмяБазы\ExtForms\Calendar\PRCLND04.MXL
я его получил через Сервис/Календарь Бухгалтера/
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший