![]() |
![]() |
|
Как получить количество рабочих дней за период? | ☑ | ||
---|---|---|---|---|
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
я его получил через Сервис/Календарь Бухгалтера/ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |