МОДУЛЬ ФОРМИ СПИСКУ ДОКУМЕНТА

Містить, крім названих у табл 714, процедури прочинене, ПріЗапісі і ПреміяДа

перем кЗПоУмолчанію / / Значення задається у процедурі прочинене

процедура Простежити () далі процедура Стовпці () далі процедура ПреміяК10 () далі процедура ПреміяДа (пЗнач) далі процедура Заповнити () далі

процедура ОбработкаПодбора (значен, конт) далі процедура УдалітьЗап (прапор) далі

процедура КнопкіВідімость (прапор) далі

/ / Формує список підрозділів сПодр і встановлює початкові значення

/ / Змінних діалогу Причому, якщо документ проведений, то початкові

/ / Значення беруться з ЖЗ процедура відкриття ()

перем ЖЗ, сСотр_2, дост

/ / Значення коефіцієнта к3 за замовчуванням можна оформити як константу 1С кЗПоУмолчанію = 10

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

/ / Формуємо, аналізуючи довідник Сотруднікі_2, список підрозділів сСотр_2ПорядокКодов ()

сСотр_2ВибратьЕлементи ()

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

якщо сСотр_2ЕтоГруппа () = 1 тоді сПодрДобавітьЗначеніе (сСотр_2ТекущійЕлемент (), сСотр_2Наіменованіе)

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

якщо Проведено () = 0 тоді

ЖЗ = СоздатьОбект (ЖурналРасчетовЗарплата_2)

/ / Початкові значення для періодів дії вводяться розрахунків датаНачКоеф = жзНачалоТекущегоПеріода ()

датаКонКоеф = датаНачКоеф +10 датаНачСум = датаКонКоеф + 1 датаКонСум = датаНачСум + 10 датаНач1234 = датаКонСум + 1

датаКон1234 = жзКонецТекущегоПеріода () ЖЗ = 0

хто = 2 / / Премія співробітникам обраного підрозділу коеф = 1 / / Можна нарахувати премію коефіцієнтом

сум = 0 п1234 = 0

текСтрока = 1 / / Позиціонуємо на цеху 01 в списку сПодр

інакше / / Документ проведено

якщо хто = 2 тоді / / Правильно позиціонуємо список значень сПодр

сПодрТекущаяСтрока (текСтрока) КонецЕсли

КонецЕсли

/ / Регулюємо доступність і видимість елементів діалогу Простежити ()

Стовпці ()

// дост – 1, якщо в табличній частині є записи дост = (КолічествоСтрок () = 0, 0, 1) формаУдалітьДоступность (дост) формаОчістітьДоступность (дост)

формаПанельІнструментов (0) / / Відключаємо панель інструментів

формаЗаголовок (Премії)

/ / Наступний метод забезпечує доступ до атрибуту Закладками ФормаИспользоватьЗакладки (1) ФормаЗакладкиДобавитьЗначение (1, Введення премій) ФормаЗакладкиДобавитьЗначение (2, Інтервали розрахунків )

/ / Тепер можна задати відображаються на закладці шари ФормаІспользоватьСлой (Основний, ВідПреміі, Кнопки)

КонецПроцедури / / прочинене

/ / Розподіляє шари діалогу форми по закладках процедура ПріВибореЗакладкі (номЗакл, значЗакл)

// номЗакл, значЗакл відповідно номер і значення закладки

/ / У нашому випадку значення цих параметрів збігаються якщо номЗакл = 1 тоді

ФормаІспользоватьСлой (Основний, ВідПреміі, Кнопки) КнопкіВідімость (1) / / Показуємо всі кнопки

інакше

ФормаІспользоватьСлой (ІнтервалиРасчетов, Кнопки) КнопкіВідімость (0) / / Приховуємо три верхні кнопки

КонецЕсли

КонецПроцедури / / ПріВибореЗакладкі

/ / Визначає видимість кнопок Заповнити, Видалити і Очистити (див рис 761) процедура КнопкіВідімость (прапор)

/ / Заповнити, видалити іочистити ідентифікатори однойменних кнопок ФормаЗаполнітьВідімость (прапор)

ФормаУдалітьВідімость (прапор) ФормаОчістітьВідімость (прапор)

КонецПроцедури / / КнопкіВідімость

/ / Управляє доступністю елемента діалогу сПодр

процедура Простежити ()

якщо хто = 1 тоді / / Премія відібраним співробітникам формаСПодрДоступность (0)

інакше / /хто = 2 формаСПодрДоступность (1)

КонецЕсли КонецПроцедури / / Простежити

/ / Визначає видимість стовпців Коеф, Сума і Премія 1234 табличній частині документа

/ / І доступністю елементів завдання дат на шарі ІнтервалиРасчетов

процедура Стовпці ()

формак3Відімость (коеф) / / Премія коефіцієнтом формаДатаНачКоэфДоступность (коеф) формаДатаКонКоэфДоступность (коеф)

формаСуммаВідімость (сум) / / Премія сумою форма ДатаНачСумДоступность (сум) формаДатаКонСумДоступность (сум) формаПремія1234Відімость (п1234) / / Премія 1234 форма ДатаНач1234Доступность (п1234) формаДатаКон1234Доступность (п1234)

якщо коеф = 1 тоді / / Премія коефіцієнтом

/ / Заносимо в порожні стовпці ПреміяКоеф рівний кЗПоУмолчанію коефіцієнт ПреміяК10 ()

КонецЕсли

якщо п1234 = 1 тоді / / Премія 1234

/ / Заносимо в порожні стовпці Премія 1234 значення Так перерахування ДаНет ПреміяДа (Перечісленіе ДаНетЗначеніеПоНомеру (1))

КонецЕсли КонецПроцедури / / Стовпці

процедура ОтобразітьСПодр () / / Формула елемента діалогу сПодр

текСтрока = сПодрТекущаяСтрока () сПодрПолучітьЗначеніе (текСтрока)

КонецПроцедури / / ОтобразітьСПодр

/ / Заносить у порожні клітинки стовпця завдання коефіцієнта к3

/ / РівнийкЗПоУмолчаніюкоефіцієнт процедура ПреміяК10 ()

якщо ВибратьСтрокі () = 1 тоді

поки ПолучітьСтроку () = 1 цикл

к3 = (к3 = 0, кЗПоУмолчанію, к3) конецЦікла / / Поки

КонецЕсли КонецПроцедури / / ПреміяК10

/ / Заносить в порожні стовпці Премія 1234 значення Так перерахування ДаНет процедура ПреміяДа (пЗнач)

якщо ВибратьСтрокі () = 1 тоді

поки ПолучітьСтроку () = 1 цикл

якщо ПустоеЗначеніе (Премія1234) = 1 тоді Премія 1234 = пЗнач

КонецЕсли

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

КонецПроцедури / / ПреміяДа

/ / Заповнює табличну частину документа Премія для одного (Хто =  1)

/ / Або групи співробітників процедура Заповнити ()

перем підр

/ / Видаляємо, якщо таблична частина заповнюється для підрозділу

/ / Або всього підприємства, її рядки, але тільки за згодою користувача якщо (хто> 1) і (КолічествоСтрок ()> 0) тоді

якщо Питання (Видалити наявні рядки”, Так + Ні) = Так тоді УдалітьСтрокі () / / Очищаємо табличну частину документа

інакше

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

КонецЕсли

якщо хто = 1 тоді

/ / Вказуємо явно імя основної форми списку для методу ОткритьПодбор

/ / Задаємо режим множинного вибору

/ / Додаємо в табличну частину в результаті кожного вибору у відкритій формі

/ / Дані одного співробітника Власне додавання здійснює

/ / Зумовлена ​​процедура модуля форми ОбработкаПодбора ОткритьПодбор (СправочнікСотруднікі_2, ФормаСпіска,, 1)

іначеЕслі хто = 2 тоді / / Працюємо з підрозділом сСотр_2 = СоздатьОбект (СправочнікСотруднікі_2)

/ / Заносимо в табличну частину дані про співробітників обраного підрозділу подр

підр = сПодрПолучітьЗначеніе (сПодрТекущаяСтрока ()) сСотр_2ИспользоватьРодителя (підр) сСотр_2ВибратьЕлементи ()

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

якщо сСотр_2ЕтоГруппа () = 0 тоді / / Тільки співробітники

/ / Використовуємо вже наявну процедуру ОбработкаПодбора,

/ / Виконує обробку одного співробітника ОбработкаПодбора (сСотр_2, “)

КонецЕсли

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

якщо КолічествоСтрок ()> 0 тоді формаУдалітьДоступность (1) формаОчістітьДоступность (1)

КонецЕсли КонецПроцедури / / Заповнити

процедура ОбработкаПодбора (значен, конт)

/ / Забороняємо, якщо додаємо по одному співробітнику, вибір того ж особи двічі якщо (хто = 1) і (ВибратьСтрокі () = 1) тоді

поки ПолучітьСтроку () = 1 цикл

якщо Співробітник = значенТекущійЕлемент () тоді Попередження (Співробітник вже вибраний”) повернення

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

КонецЕсли

НоваяСтрока () / / Новий рядок у табличній частині документа Співробітник = значенТекущійЕлемент ()

/ / Премія коефіцієнтом або 1234 якщо (коеф = 1) або (п1234 = 1) тоді

к3 = кЗПоУмолчанію / / Коефіцієнт за замовчуванням КонецЕсли

якщо п1234 = 1 тоді / / Премія 1234 або всі премії

/ / Заносимо в стовпець Премія 1234 значення Так перерахування ДаНет Премія 1234 = ПеречислениеДаНетЗначениеПоНомеру (1)

КонецЕсли

/ / Якщо є хоча б один запис, то є що видаляти якщо (хто = 1) і (КолічествоСтрок () = 1) тоді

формаУдалітьДоступность (1) формаОчістітьДоступность (1)

КонецЕсли

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

/ / Видаляє з відома користувача, якщо прапор =1, поточний запис табличній

/ / Частини документа, і, якщо прапор = 2, всі записи процедура УдалітьЗап (прапор)

перем пит

пит = Видалити + (Прапор = 1, одну запис, всі записи) + ?”; якщо Питання (пит, Так + Ні) = Так тоді

якщо прапор = 1 тоді УдалітьСтроку ()

інакше / /прапор = 2

УдалітьСтрокі () КонецЕсли

якщо КолічествоСтрок () = 0 тоді

формаУдалітьДоступность (0) формаОчістітьДоступность (0)

КонецЕсли КонецЕсли

КонецПроцедури / / УдалітьЗап

/ / Виконує перевірку дат процедура ПріЗапісі ()

перем ош ош = 0

якщо (коеф = 1) і (датаНачКоеф> датаКонКоеф) тоді ош = 1

КонецЕсли

якщо (сум = 1) і (датаНачСум> датаКонСум) тоді ош = 1

КонецЕсли

якщо (п1234 = 1) і (датаНач1234> датаКон1234) тоді ош = 1

КонецЕсли

якщо ош = 1 тоді

Попередження (Невірний період дії розрахунку”) СтатусВозврата (0) / / Забороняємо запис документа

КонецЕсли КонецПроцедури / / ПріЗапісі

792 МОДУЛЬ ДОКУМЕНТА

Містить зумовлену процедуру ОбработкаПроведенія Вона для кожного співробітника табличній частині заносить в ЖЗ або вибраний розрахунок, або всі розрахунки Причому розрахунки заносяться з обчисленими результатами

Документ можна провести, лише коли всі задані премії мають нульове значення В іншому випадку видається повідомлення розрахунки в ЖЗ не переносяться

функція ПроверітьНаНуль () далі функція НайтіЧаси (ЖЗ, нтп) далі функція НайтіХозОп (хозОп, ВР) далі

процедура ВводРасчВЖЗ (ЖЗ, хозОп, ВР, датаНач, датаКон, рез) далі

процедура ОбработкаПроведенія () перем ЖЗ, нтп

перем ВР [3], рассч [3], всегоЧасов [3], рез [3], датаНач [3], датаКон [3] перем а, б, ін

/ / Обєкт з різновидом типу СправочнікХозОпДляВР перем хозОп

датаНач [1] = датаНачКоеф датаКон [1] = датаКонКоеф датаНач [2] = датаНачСум датаКон [2] = датаКонСум датаНач [3] = датаНач1234 датаКон [3] = датаКон1234 якщо ПроверітьНаНуль () = 1 тоді

Попередження (Є розрахунки з нульовою премією”) повернення

КонецЕсли

/ / Для пошуку господарських операцій ВР

хозОп = СоздатьОбект (СправочнікХозОпДляВР) ЖЗ = СоздатьОбект (ЖурналРасчетовЗарплата_2) нтп = жзНачалоТекущегоПеріода ()

/ / ВР масив видів премій

ВР [1] = ВідРасчетаПреміяКоеф_2 ВР [2] = ВідРасчетаПреміяСум_2 ВР [3] = ВідРасчетаПремія1234_2

для ін = 1 по 3 цикл / / Ініціалізація допоміжних масивів

/ / Масив рассч використовується для завдання значення атрибута ЖЗ Розрахована рассч [ін] = 0

всегоЧасов [ін] = 0 рез [ін] = 0

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

ВибратьСтрокі () / / Відкриваємо вибірку рядків документа поки ПолучітьСтроку () = 1 цикл

/ / Встановлюємо реквізити для кожного введеного ВР

а = 1 б = 2 / / Параметри циклу Для, що вводить розрахунки в ЖЗ якщо коеф = 1 тоді / / Премія коефіцієнтом

/ / Знайдемо по ЖЗ число годин, відпрацьованих працівником всегоЧасов [1] = НайтіЧаси (ЖЗ, нтп)

рез [1] = всегоЧасов [1] * к3 / / Нарахована премія рассч [1] = 1 / / Запис розрахована

КонецЕсли

якщо сум = 1 тоді

//

Премія сумою

рез [2] = Сума

//

Нарахована премія

рассч [2] = 1

//

Запис розрахований

КонецЕсли

/ / Для введення премії 1234 (і 1234 = 1) все готово

якщо п1234 = 1 тоді

//

Премія 1234

а = 1 б = 3

//

Параметри циклу Для, що вводить розрахунки в ЖЗ

КонецЕсли

/ / Введення розрахунків

для ін = а по б цикл

якщо (ін <3) і (рассч [ін] = 0) тоді продовжити;

КонецЕсли

жзУстановітьРеквізіт (Розрахована, рассч [ін]) жзУстановітьРеквізіт (всегоЧасов, всегоЧасов [ін]) ВводРасчВЖЗ (ЖЗ, хозОп, ВР [ін], датаНач [ін], датаКон [ін], рез [ін])

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

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

/ / Обчислюємо результати введених розрахунків

/ / Вибірка записів ЖЗ по документу не дає вірного результату

/ / Тому використовуємо вибір записів поточного періоду по обєкту

/ / В даному документі нижченаведений розрахунок результату потрібен тільки

/ / Для ВР Премія 1234 Решта премії вже підраховані якщо п1234 = 1 тоді

ВибратьСтрокі () / / Відкриваємо вибірку рядків документа поки ПолучітьСтроку () = 1 цикл

жзВибратьПеріодПоОбекту (Співробітник, нтп)

поки жзПолучітьЗапісь () = 1 цикл

якщо (жзДокумент = ТекущійДокумент ()) і (жзВідРасч = ВР [3]) тоді жзРассчітать () / / Або жзВиполнітьРасчет

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

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

якщо Проведено () = 0 тоді / / Якщо Документ проводиться вперше

/ / Обмежуємо час показу вікна з попередженням трьома секундами Попередження (Документ проведений”, 3)

інакше

Попередження (Документ перепроведен”, 3) КонецЕсли

КонецПроцедури / / ОбработкаПроведенія

/ / Перевіряє на наявність розрахунків з нульовим результатом

/ / Якщо такі є, то записи не проводяться функція ПроверітьНаНуль ()

ВибратьСтрокі () / / Відкриваємо вибірку рядків документа

поки ПолучітьСтроку () = 1 цикл

/ / Негативних значень к3 і Сума бути не може так задані властивості

/ / Цих елементів діалогу Крім того, для елемента Сума задано

/ / Властивість Розділяти тріади

/ / Премія коефіцієнтом

якщо (коеф = 1) і (к3 = 0) тоді повернення 1

КонецЕсли

/ / Премія сумою

якщо (сум = 1) і (Сума = 0) тоді повернення 1

КонецЕсли

/ / Премія 1234

якщо (п1234 = 1) і (Премія 1234 = ПеречислениеДаНетЗначениеПоНомеру (2)) тогда повернення 1

КонецЕсли конецЦікла / / Поки повернення 0

КонецФункции / / ПоверітьНаНуль

/ / Шукає для премії коефіцієнтом по ЖЗ число годин, відпрацьованих працівником

/ / Це число занесено в ЖЗ разом з розрахунком, що має ВР Оклад_2 функція НайтіЧаси (ЖЗ, нтп)

жзВибратьПеріодПоОбекту (Співробітник, нтп) поки жзПолучітьЗапісь () = 1 цикл

якщо жзВідРасч = ВідРасчетаОклад_2 тоді повернення жзВсегоЧасов

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

повернення 0 / / Розрахунок з ВР, Оклад_2 для співробітника не введений КонецФункции / / НайтіЧаси

/ / Вводить нові або редагує наявні в ЖЗ розрахунки із заданим ВР процедура ВводРасчВЖЗ (ЖЗ, хозОп, ВР, датаНач, датаКон, різ)

ЖЗ, УстановітьРеквізіт (строкаДок, НомерСтрокі) жзУстановітьРеквізіт (хозОп, НайтіХозОп (хозОп, ВР)) жзВвестіРасчет (Співробітник, ВР, датаНач, датаКон, різ)

КонецПроцедури / / ВводРасчВЖЗ

/ / Повертає господарську операцію ВР, функція НайтіХозОп (хозОп, ВР)

/ / Шукаємо простим перебором в довіднику ХозОпДляВР вид розрахунку ВР хозОпВибратьЕлементи ()

прапор = 0

поки хозОпПолучітьЕлемент () = 1 цикл якщо хозОпВР = ВР тоді

прапор = 1 перервати

КонецЕсли конецЦікла / / Поки якщо прапор = 1 тоді

повернення хозОпхозОп інакше

повернення ПолучітьПустоеЗначеніе (хозОп) КонецЕсли

КонецФункции / / НайтіХозОп

Джерело: Бартеньев О В 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>

*

*