КАЛЕНДАРІ І СВЯТА

Наше завдання вжити календарі 1С для обчислення загального числа робочих днів і годин Облік робочого часу здійснюється за табелем, який ми оформимо як самостійний документ 1С

751 Створення календаря

Нехай на нашому віртуальному підприємстві є службовці та робітники Створимо для цих категорій свої календарі Увійдемо в конфігурацію, відкриємо підміню Календар і розмістимо в ньому календарі Служащіе_2 і Рабочіе_2 (рис 731)

Рис 731 Нові календарі системи

Властивості календарів визначимо відповідно до рис 732

а б

Рис 732 Робочий тиждень: а календаря Служащіе_2 б календаря Рабочіе_2

Додамо в меню інтерфейсу Учень колонку Календарі й табель і визначимо в ній зазначені на рис 733 пункти

Рис 733 Нова колонка меню інтерфейсу Учень

З новими пунктами Календарі й Свята звяжемо наведені на рис 734 назва, обєкт і команди

а б

Рис 734 Властивості пунктів меню: а Календарі б Свята

Обєкт і команду для пункту Табель задамо дещо пізніше після створення документа Табель

Збережемо зміни конфігурації Завантажимо 1С: Підприємство Відкриємо перш таблицю для введення свят і внесемо в неї свята поточного року, проставивши в стовпці Значення нульову тривалість робочого дня (рис 735)

Рис 735 Два свята

Відкриємо далі послідовно календарі Служащіе_2 і Рабочіе_2 і виконаємо їх автоматичне заповнення з включеним прапорцем Враховувати свята (рис 736)

Рис 736 Календар Служащіе_2 в листопаді 2001 р

У полі Значення за поточною датою (рис 736) заповненого календаря відображається число годин, взяте з визначеного в конфігурації і зображеного на рис 732, а календаря Сотруднікі_2 Для святкових днів календар використовує дані наведеної на рис 735 таблиці

Зауваження  І календарі та свята зберігаються у файлі CLDBF інформаційної бази

752 ЗАСТОСУВАННЯ календар і празник

7521 Доступ до календаря І СВЯТ

Обєкти типу Календар присутні в конфігурації і доступні безпосередньо за іменами (ідентифікаторами), які можна використовувати з методами для календарів і читання їх атрибутів

ПрикладМетодом Часів обчислюється число робочих годин в листопаді 2001 р за календарем Служащіе_2

всегоЧасов = КалендаріСлужащіе_2Часов (01 112001 , КонМесяца (01 112001)) Повідомити (всегоЧасов) / / Надрукував 167

Той же результат метод надасть, будучи спожитим з обєктом типу Календар, повертаним функцією СоздатьОбект:

кален = СоздатьОбект (КалендарьСлужащіе_2)

всегоЧасов = каленЧасов (01 112001 , КонМесяца (01 112001)) Повідомити (всегоЧасов) / / Надрукував 167

Ще один варіант застосування методів календарів, наприклад методу Часів, це використання в складі префікса методу ПолучітьАтрібут:

всегоЧасов = Календарі ПолучітьАтрібут (Служащіе_2) Часів (01 112001 , КонМесяца (01 112001))

Повідомити (всегоЧасов) / / Надрукував 167

Змінні типу Свята відносяться до зовнішніх обєктів і створюються, як і інші зовнішні обєкти, наприклад таблиці значень, функцією СоздатьОбект Імя змінної використовується як префікса методів і атрибутів обєкта типу Свята

ПрикладДрукуються свята поточного року

процедура Виконати () перем празд, нг, кг, прапор ОчістітьОкноСообщеній ()

нг = НачГода (ТекущаяДата ()) / / Початок і кінець поточного року кг = КонГода (ТекущаяДата ())

праздн = СоздатьОбект (Свята)

/ / Переміщаємося на перший запис (дату) вибірки прапор = празднВибратьДати (нг, кг)

якщо прапор = 1 тоді

поки празднСледующаяДата () = 1 цикл Повідомити (” + празднДата + це свято)

/ / Або Повідомити (” + празднПолучітьАтрібут (Дата) + це свято) конецЦікла / / Поки

інакше

Повідомити (У поточному році немає свят”) КонецЕсли

КонецПроцедури / / Виконати

Результат (Відповідає рис 735): 071101 це свято

121201 це свято

7522&nbsp&nbsp&nbsp&nbsp&nbsp А трибуто календар і СВЯТ

Календарі мають наступні атрибути:

– <Ім'я календаря> має тип Календар і повертається методом ПолучітьАтрібут

– Дата має тип Дата, читається безпосередньо по імені або методом ПолучітьАтрібут

– Значення має числовий тип

ПрикладДрукуються неробочі дати поточного місяця (з нульовою тривалістю робочого дня) календаря Служащіе_2

процедура Виконати ()

перем кален, нм, км, нерДні ОчістітьОкноСообщеній ()

нм = НачМесяца (ТекущаяДата ()) / / Початок і кінець поточного місяця км = КонМесяца (ТекущаяДата ())

спроба

/ / Створюємо обєкт типу Календар Для цього у нас є 3 можливості кален = КалендаріПолучітьАтрібут (Служащіе_2)

/ / Або кален = КалендаріСлужащіе_2

/ / Або кален = СоздатьОбект (КалендарьСлужащіе_2) виняток

Попередження (Немає такого календаря”) повернення

конецПопиткі нерДні = “;

/ / Переміщаємося на перший запис (дату) вибірки каленВибратьДати (нм, км)

поки каленСледующаяДата () = 1 цикл

якщо каленЗначеніе = 0 тоді / / Якщо неробочий день нерДні = нерДні + Рядок (каленДата) + ; ;

/ / Або нерДні = нерДні + Рядок (каленПолучітьАтрібут (Дата)) + ;”;

КонецЕсли конецЦікла / / Поки

якщо СтрДліна (нерДні) = 0 тоді

Повідомити (В поточному місяці всі дні робітники) інакше

/ / Замінюємо в рядку нерДні останню крапку з комою на точку нерДні = Лев (нерДні, СтрДліна (нерДні) 2) + .”; Повідомити (Неробочі дні поточного місяця: + нерДні)

КонецЕсли

КонецПроцедури / / Виконати

Результат:

Неробочі дні поточного місяця: 021201 091201 121201 161201 231201 301201

Свята мають два атрибути:

• Дата має тип Дата

• Значення має числовий тип

Зауваження  Атрибути календарів і свят Дата і Значення читаються безпосередньо по імені або методом ПолучітьАтрібут змінюються методом УстановітьЗначеніе

7523&nbsp МЕТОДИ календар і СВЯТ

Зведені в табл 78, в якій спочатку йдуть загальні методи розглянутих обєктів, а далі їх специфічні методи

Методи календарів і свят

Таблиця 78

Метод

Опис

Загальні методи календарів і свят

знач= Кален | празднПолучіть Атрибут (Дата | Значення)

Повертає значення атрибута Дата або Значення

в поточному записі обєкта Можливо пряме звернення до атрибуту, наприклад

дт = КаленДата

годинник = празднЗначеніе

кален | празднУстановітьАтрібут (Дата | 3наченіе,знач)

Змінює значення атрибута Дата або Значення в поточному записі обєкта на величину знач

прапор =кален | празднВибратьДати

(ДатаНачала, датаКонца)

Відкриває вибірку записів обєкта, розташованих між датамидатаНачала ідатаКонца, переміщаючи його позицію на перший запис вибірки Поверне 1, якщо у вибірці є хоча б один елемент, або 0, якщо вибірка порожня

прапор =кален | празднСледующая Дата ()

Вибирає поточний запис і переміщує позицію вибірки на наступний запис Поверне 1, якщо запис обрана, або 0, якщо вся вибірка вичерпана

Методи календарів

кален= КалендаріПолучітьАтрібут

(Ідент)

Повертає обєкт типу Календарі з різновидом типу ідент, де ідентрядок, що містить ідентифікатор календаря, наприклад Служащіе_2. Виникне завершальна помилка, якщо ідентмістить неіснуючий ідентифікатор

ідент = КаленВід ()

Поверне рядок, що містить ідентифікатор кален даруючикаленЯкщо, наприклад, у довіднику сСотр_2 є реквізит Календар типу Календарі, то ідентифікатор календаря обраного співробітника поверне виклик

ідент = сСотр_2КалендарьВід ()

прапор = КаленВибран ()

Поверне 1, якщо календар обраний, або О-в іншому випадку Для довідника сСотр_2, в якому є реквізит Календар типу Календарі, для поточного запису ознака вибрано календар чи ні поверне виклик

прапор = ССотр_2КалендарьВибран ()

Метод

Опис

чіслоРабДней = Кален Днів

(ДатаНачала, датаКонца)

Поверне число днів з ненульовою величиною атрибута Значення в календарі кален,розташованих між датамидатаНачала ідатаКонцаВидасть повідомлення Невірні дати, якщодатаКонца < датаНачала

чіслоРабЧасов =каленЧасов

{ДатаНачала, датаКонца)

Поверне суму значень атрибута Значення календа рякалендля записів, розташованих між датами датаНачалаідатаКонцаВидасть повідомлення Невірні дати, якщодатаКонца < датаНачала

прапор = Кален Автозаповнення

(ДатаНачала, датаКонца)

Заповнює календар кален в заданому параметрами датаНачалаідатаКонцачасовому інтервалі, використовуючи певні в конфігурації для цього календаря дані про тривалість робочого тижня (розд 751) При заповненні враховуються занесені в базу даних свята (Розд 751, рис 735), якщо перед викликом методу вжито метод УчітиватьПразднікі (1) Поверне 1, якщо заповнення вироблено, або 0 при невдачі

праздСтар= КаленУчітиватьПразднікі (Святкую)

Задає, якщо числовий параметр Святкується =1, режим обліку занесені в базу даних свят (розд 751, рис 735) при виконанні методу Автозаполнение для календаря каленЯкщо Святкується= 0, то свята при автозаповнення календаря кален

не враховуються Якщо метод для календаря кален

не викликався, то при його автозаповненні свята враховуються Повертає поточну установку режиму обліку свят

дат = КаленПолучітьДату (ДатаНачала, чіслоРабДней)

Повертає дату, віддалену від дати, заданої параметром датаНачала, на число робочих днів, задане параметромчіслоРабДней День вважається робочим, якщо атрибут Значення відповідного запису календаря кален не дорівнює нулю Параметр чіслоРабДней не повинен бути менше нуля

Методи свят

празднНовий (датаПраздн,

чіслоРабЧасов)

Додає в базу даних (файл CLDBF) нове свято ПараметрдатаПразднзадає дату свята, а чіслоРабЧасовчисло робочих годин

в свято ПараметрчіслоРабЧасовнеотрицателен і менше 100

празднУдаліть (датаПраздн)

Видаляє з бази даних свято, що припадає

на дату датаПраздн Якщо записи про таке свято немає, то метод ніяких змін не виробляє

Зауваження Імена кален і праздн, вжиті в табл 78 перед назвами методів, можуть бути довільними

ПрикладУ поточному році свято 12 грудня переноситься на 14 грудня Оскільки перенесення зачіпає всі календарі, то для їх модифікації використовуємо обєкт Метадані та методи календарів Автозаполнение і УчітиватьПразднікі

процедура Виконати ()

перем празд, тгод, пСтар, Пнов, нм, км, всегоКален, ин, ідеї, кален ОчістітьОкноСообщеній ()

тгод = ДатаГод (ТекущаяДата ()) / / Поточний рік, наприклад 2001 пСтар = Дата (1212″ + Тгод) / / Дата старого свята

Пнов = Дата (1412″ + тгод) / / Дата нового свята праздн = СоздатьОбект (Свята)

/ / Перенесення свята

празднУдаліть (пСтар)

празднНовий (Пнов, 0) / / Число робочих годин дорівнює нулю нм = Дата (0112″ + Тгод) / / Початок і кінець грудня

км = КонМесяца (нм)

/ / Всього календарів в конфігурації (в метаданих) всегоКален = МетаданниеКалендарь ()

для ін = 1 по всегоКален цикл

/ / Атрибут чергового календаря

ідеї = МетаданниеКалендарь (ін) Ідентіфікагор

/ / Календар як обєкт

кален = КалендаріПолучітьАтрібут (іден)

/ / Враховуємо при автозаповнення свята каленУ чітиватьПразднікі (1) каленАвтозаполненіе (нм, км)

конецЦікла / / Для

Попередження (Готово”) КонецПроцедури / / Виконати

Зауваження   Функція ОткритьФорму непридатна для активізації форми списку обєкта Свята (див рис 735) і відображення календарів

7524&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp УДОСКОНАЛЕННЯ ДОВІДНИКА СОТРУДНІКІ_2

Якщо стоїть завдання автоматизувати облік робочого часу співробітника, то його слід повязати з відповідним календарем Такі календарі у нас вже є (див рис 732) Якщо ні відхилень, то робочий час співробітника повністю визначається його календарем В іншому випадку необхідно використовувати табель

Оскільки облік робочого часу завдання трудомістке, доповнимо довідник Сотруднікі_2 реквізитом Календар (рис 737,а),задавши йому властивості відповідно до рис 737, б

Рис 737 Новий реквізит Календар і його властивості: а-реквізит б властивості

Внесемо зміни і в діалог форми елемента, привівши його у відповідність з рис 738 (Про порядок виконання змін див розд 57)

Рис 738 Оновлений діалог форми елемента довідника Сотруднікі_2

Календар обовязковий для заповнення реквізит довідника, тому модуль форми елемента, його зумовлену процедуру ПріЗапісі (розд 5342), доповнимо наступній перевіркою:

якщо КалендарьВибран () = 0 тоді Попередження (3адайте Календар)

СтатусВозврата (0) / / Дані не заносяться форма не закривається

/ / Переміщаємося на елемент діалогу Календар Активізувати (Календар, 0)

повернення КонецЕсли

Форми списку (основну і для введення) довідника Сотруднікі_2 залишимо без змін

Прискоримо введення початкових значень нового реквізиту, запустивши в обробці Проба програму, призначає працівника з вищою і незакінченою вищою освітою календар Служащіе_2, а всім іншим Рабочіе_2

процедура Виконати () перем сСотр_2 ОчістітьОкноСообщеній ()

сСотр_2 = СоздатьОбьект (СправочнікСотруднікі_2) сСотр_2ВибратьЕлементи ()

поки сСотр_2ПолучітьЕлемент () = 1 цикл

якщо (сСотр_20бразованиеНаименование = Вище) або (сСотр_20бразованиеНаименование = Незакінчена вища) тоді

сСотр_2Календарь = КалендаріСлужащіе_2

інакше

сСотр_2 Календар = КалендаріРабочіе_2 КонецЕсли

/ / Не забуваємо зберегти зміни сСотр_23апісать ()

конецЦікла / / Поки Попередження (Готово”)

/ / Перегляд результату Для перегляду необхідно у відкритій формі списку

/ / Увійти в режим редагування елементу ОткритьФорму (СправочнікСотруднікі_2)

КонецПроцедури / / Виконати

Джерело: Бартеньев О В 1С: Підприємство: програмування для всіх Базові обєкти та розрахунки на одній дискеті М: Діалог-МІФІ, 2005 464 с

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*