ЗМІНА СТРУКТУРИ І ФОРМ ДОВІДНИКА – ЧАСТИНА 4

додамо в модуль двох наявних форм списку (розд 5332) код наступної зумовленою процедури:

процедура ПриНачалеРедактированияСтроки () якщо ПустоеЗначеніе (ПріказПріем) = 0 тоді

/ / Відкриваємо форму документа ОткритьФорму (ПріказПріем)

іначеЕслі РедактіроватьВДіалоге () = 0 тоді

/ / Відкриваємо форму елемента довідника для редагування поточного запису ОткритьФорму (ТекущійЕлемент (),, 0)

/ / Відмовляємося від можливості редагування в рядку форми списку довідника інакше

Попередження (Редагувати в рядку форми списку довідника можна”) КонецЕсли

СтатусВозврата (0)

КонецПроцедури / / ПриНачалеРедактированияСтроки

Щоб цим кодом скористатися, треба після виклику довідника Сотруднікі_2, використовуючи колонку Дії, прибрати прапор з пункту Редагувати в діалозі Тепер, зупинившись на записи і двічі вдаривши по ній мишею, ви потрапите в документ, з цим записом повязаний, або, якщо такого немає, у форму елемента або групи довідника Сотруднікі_2

Зауваження:

1 Виклик СтатусВозврата (0)

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

2 При відсутності документа, якщо скасовано режим редагування в діалозі, процедурою ПриНачалеРедактированияСтроки буде викликана функція

ОткритьФорму (ТекущійЕлемент ())

що відкриває форму елемента або групи При цьому може виникнути повідомлення

Однак ніяких перешкод для редагування у формі елемента або групи обраної записи не буде

583 ЖУРНАЛ КАДРОВИХ НАКАЗІВ

5831 ФОРМА СПИСКУ ЖУРНАЛУ КАДРОВИХ НАКАЗІВ

Журнал кадрових наказів з ідентифікатором ПріказиКадровие має наведений на рис 536 діалог форми списку, що відображає занесені в журнал доку\ менти

Рис 536 Форма списку журналу кадрових наказів

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

Відкриємо конфігурацію, доберемося до пункту Журнали документів, а потім до його підпункту ПріказиКадровие і вдаримо двічі мишею Зявився діалог (рис 537) дозволить нам здійснити намічену мета

Рис 537 Діалог завдання властивостей журналу кадрових наказів

Виберемо в поле Графи запис Співробітник і натиснемо кнопку Змінити Зявився діалог наведемо до виду, представленому на рис 538, і двічі вдаримо по елементу Сотрудник в поле Можливі значення, або натиснемо на Enter, або скористаємося кнопкою

Рис 538 Додавання значення ДокументПріказОПріеме Співробітник

У результаті в списку Вибрані значення зявиться елемент ДокументПриказОПриемеСотрудник Тепер, якщо зберегти зміни, при записі документа ПріказОПріеме в графі Співробітник діалогу форми списку журналу кадрових переміщень буде відображатися значення реквізиту Співробітник цього документа (рис 539)

Рис 539 Журнал кадрових наказів після введення трьох документів

Галочка в першому стовпці говорить про те, що документ проведений

Перший документ, якщо відкрити його для перегляду або редагування, містить дані, представлені на рис 540

Рис 540 Наказ номер 1

У довіднику Сотруднікі_2 (у формі списку) він породить наведену на рис 541 запис, яку можна відредагувати як у формі елемента, так і в документі (див розд 5824)

Рис 541 Проводка наказу номер 1

Зауваження:

1 При видаленні проведеного документа про прийом на роботу обнуляється внесене документом значення реквізиту Оклад у відповідній йому записи довідника Сотруднікі_2 При перепроведенні документа це значення відновлюється Автоматичне обнулення виконується, так як періодичний реквізит Оклад звязується з документом у процесі його проведення

2 За умовчанням в журналі документів відображаються документи, дати яких знаходяться в межах поточного місяця Щоб змінити часовий діапазон журналу, званий інтервалом журналу,слід скористатися або пунктом Ін

інтервал з колонки меню Дії, або іконкою панелі інструментів откри

того журналу Програмно інтервал журналу задається методом УстановітьІнтервал

3 У програмі журнал кадрових наказів можна відкрити в результаті наступного виклику:

ОткритьФорму (ЖурналПріказиКадровие)

5832&nbsp&nbsp&nbsp&nbsp&nbsp МОДУЛЬ ФОРМИ СПИСКУ ЖУРНАЛУ КАДРОВИХ НАКАЗІВ

Розмістимо в ньому зумовлену процедуру прочинене, в якій, по-перше, визначимо стандартний список дій для кнопки Дії діалогу форми і, по-друге, встановимо інтервал журналу, характеризується двома датами: початку інтервалу і кінця інтервалу

Список дій розмістимо у зміннійсДейст типу СпісокЗначеній, а з кнопкою Дії діалогу форми списку звяжемо на закладці Додатково в поле формула виклик процедури глобального модуляглДействія (ТекущійДокумент, сДейст)

Початок інтервалу покладемо рівним датою першого документа ПріказОПріеме, а кінець поточної дати Якщо документів ПріказОПріеме в журналі кадрових наказів немає, то дату початку інтервалу визначимо за першим наказом про зміну окладів Якщо немає і таких, то дату початку встановимо дорівнює поточній даті

перем сДейст / / Список дій по документу

/ / Формує список дій і встановлює інтервал журналу, що відображає

/ / Всі введені документи видів ПріказОПріеме і ІзмененіеОклада процедура відкриття ()

перем дНач / / Дата початку інтервалу журналу кадрових наказів перем прапор, док

/ / Визначаємо список дій для кнопки Дії

сДейстДобавітьЗначеніе (Структура підпорядкованості) сДейстДобавітьЗначеніе (Ввести на підставі) сДейстДобавітьЗначеніе (Руху документа)

прапор = 1 / / Равен одиниці, якщо вдалося створитидок

спроба

док = СоздатьОбект (ДокументПріказОПріеме)

виняток спроба

док = СоздатьОбект (ДокументІзмененіеОклада) виняток

прапор = 0 конецПопиткі

конецПопиткі

/ / Якщо створений або документ ПріказОПріеме, або документ ІзмененіеОклада якщо прапор = 1 тоді

/ / Знаходимо документ з найменшою датою За замовчуванням документи розташовуються

/ / У вибірці по зростанню їхніх дат докВибратьДокументи ()

якщо докПолучітьДокумент () = 1 тоді

дНач = докДатаДок інакше

дНач = ТекущаяДата () КонецЕсли

інакше / / шуканий документів немає дНач = ТекущаяДата ()

КонецЕсли

УстановітьІнтервал (дНач, ТекущаяДата ()) КонецПроцедури / / прочинене

/ / В основній програмі модуля всього один оператор сДейст = СоздатьОбект (СпісокЗначеній)

584 НАКАЗ ПРО ЗМІНУ ОКЛАДУ

5841 ПОРЯДОК РОБОТИ З ДОКУМЕНТОМ

Цей наказ цікавий тим, що має табличну частину, оскільки в загальному випадку зачіпає групу співробітників Тому діалог форми Наказу про зміну окладу може мати наступний вигляд:

Рис 542 Діалог форми документа Наказ про зміну окладу

Задані для документа ідентифікатори реквізитів (крім номера і дати документа), а також ідентифікатори самого документа і його журналу відображені на рис 543

Рис 543 Ідентифікатори документа, його реквізитів та журналу

Повний перелік реквізитів створюваного документа та імя самого документа перераховані в табл 54

Реквізити Наказу про зміну окладу

Таблиця 54

Реквізит

Тип / різновид типу

ДлінаТочность

ДатаДок (заданий за замовчуванням)

Дата

НомерДок (заданий за замовчуванням)

Числовий

50

ДатаНовОклада

Дата

Співробітник

СправочнікСотруднікі_2

ПрежнійОклад

Числовий

102

НовийОклад

Числовий

102

Зауваження   Для нового і колишнього окладів задані властивості Розділяти тріади і невідємними

Порядок роботи з документом такий:

1 Реквізит НомерДок зробимо, як і раніше, недоступним для редагування

2 Заборонимо редагування і графи ПрежнійОклад

3 При введенні нового документа наявні в ньому дати встановлюються за замовчуванням рівними робочої даті

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

5 Кнопки Очистити, Видалити та ОК доступні тільки при наявності в табличній частині хоча б одного рядка

6 Графи Співробітник і Порожній оклад табличній частині документа заповнюємо після вибору співробітника з довідника Сотруднікі_2 Для цього вживемо процедуру ВиборОдного, задавши на закладці Додаткові у вікні властивостей графи Співробітник формулу ВиборОдного (), і процедуру Підбір, повязану з однойменною кнопкою діалогу і дозволяє робити множинний вибір даних

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

документа ПриОкончанииРедактированияСтроки, якщо вибір виконується з табличній частині документа

8 Проведення документа не виконується, якщо чинний і новий оклади мають однакові значення

9 При редагуванні проведеного документа, коли видаляється запис з його табличній частині, в довіднику Сотруднікі_2 видаляється відповідна йому запис періодичного реквізиту Оклад Це досягається за рахунок того, що значення періодичного реквізиту Оклад в довіднику Сотруднікі_2 встановлюється з привязкою до документа

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

11 При видаленні документа видаляються всі виконані ним проводки

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

Отже, додамо в конфігурацію документ, вживаючи вже наявні навички, і наведемо його форму до виду, зображеному на рис 542

Щоб регулювати доступність кнопок Очистити, Видалити та ОК, дамо їм іден

тіфікатори, що збігаються з назвами кнопок (рис 544)

Рис 544 Завдання ідентифікатора кнопки Очистити

Додамо відповідний пункт у колонку Документи меню інтерфейсу Учень, встановивши для команди відкриття документа акселератор Alt +7 З кнопками діалогу і з графою Співробітник Наказу про зміну окладу через їх властивість Формула звяжемо перераховані в табл 55 процедури і команди

Таблиця 55

Процедури і команди, повязані в елементами діалогу документа

Кнопка

Процедура / команда

Співробітник

ВиборОдного ()

Підбір

Підбір ()

Очистити

ОчістітьТабл ()

Видалити

УдалітьСтрокуТабл ()

ОК

# Записати Провести Закрити

Закрити

# 3акрить

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

Містить такі процедури:

процедура ВводНового () / / Задає початкові значення дат при введенні ДатаДок = РабочаяДата () / / Нового документа

ДатаНовОклада = РабочаяДата ()

/ / При введенні нового документа таблична частина порожня, тому робимо кнопки

/ / Очистити, Видалити та ОК недоступними формаОчістітьДоступность (0) формаУдалітьДоступность (0) формаОКДоступность (0)

КонецПроцедури / / ВводНового

процедура відкриття () Очістіть0кноСообщеній () ПріЗапісіПерепроводіть (1)

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

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

/ / Відкриває підбір елемента з довідника Сотруднікі_2

/ / Після вибору заповнюються поля Співробітник і Порожній оклад

/ / Додавання рядка відбувається при натисканні на клавішу клавіатури Ins процедура ВиборОдного ()

перем сСотр_2, контПодбора

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

/ / Дата для періодичного реквізиту Оклад довідника Сотруднікі_2 сСотр_2ІспользоватьДату (РабочаяДата ())

/ / Співробітник і ПрежнійОклад реквізити табличної частини

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

ПрежнійОклад = сСотр_2Оклад КонецЕсли

/ / При додаванні хоча б одного рядка наступні кнопки робимо доступними

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

КонецЕсли

КонецПроцедури / / ВиборОдного

процедура ПриОкончанииРедактированияСтроки () перем старСтрока, співр

/ / Перевіряє введену запис на унікальність

/ / Якщо вона порушена, введена запис видаляється

старСтрока = НомерСтрокі / / Запамятовуємо номер введеного рядка співр = Співробітник / / І значення графи Співробітник ВибратьСтрокі ()

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

якщо (Співробітник = співр) і (НомерСтрокі про старСтрока) тоді Попередження (Співробітник вже вибраний”) УдалітьСтроку ()

КонецЕсли

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

КонецПроцедури / / ПриОкончанииРедактированияСтроки

/ / Повязана з кнопкою Підбір діалогу форми документа

/ / Відкриває множинний підбір з довідника Сотруднікі_2

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

/ / Заповнюючи в ній поля Співробітник і Порожній оклад

/ / Додавання рядка здійснюється зумовленою процедурою

/ / ОбработкаПодбора модуля форми

процедура Подбора ()

перем сСотр_2, контПодбора

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

/ / Дата для періодичного реквізиту Оклад довідника Сотруднікі_2 сСотр_2ІспользоватьДату (РабочаяДата ())

/ / Вказуємо явно імя основної форми списку для методу ОткритьПодбор ОткритьПодбор (СправочнікСотруднікі_2, ФормаСпіска, контПодбора) формаОчістітьДоступность (1)

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

КонецПроцедури / / Підбір

/ / Додає рядок у табличну частину документа, визначаючи в ній значення

/ / Полів Співробітник і Порожній оклад процедура ОбработкаПодбора (текЕл, конт)

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

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

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

КонецЕсли

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

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

ПрежнійОклад контОклад / /конт контекст форми списку довідника КонецПроцедури / / ОбработкаПодбора

/ / Видаляє всі рядки табличної частини Повязана з кнопкою Очистити діалогу форми наказу процедура ОчістітьТабл ()

якщо КолічествоСтрок () = 0 тоді Попередження (Ні рядків для видалення”) повернення

КонецЕсли

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

/ / Оскільки в наказі немає співробітників, наступні кнопки робимо недоступними формаОчістітьДоступность (0)

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

КонецЕсли

КонецПроцедури / / ОчістітьТабл

/ / Видаляє поточний рядок табличної частини документа

/ / Повязана з кнопкою Очистити діалогу форми наказу процедура УдалітьСтрокуТабл ()

якщо КолічествоСтрок () = 0 тоді Попередження (Ні рядків для видалення”) повернення

КонецЕсли

якщо Питання (Видалити поточний рядок”, Так + Ні) = Так тоді УдалітьСтроку ()

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

/ / Оскільки в наказі не залишилося співробітників,

/ / Наступні кнопки робимо недоступними формаОчістітьДоступность (0) формаУдалітьДоступность (0) формаОКДоступность (0)

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

КонецПроцедури / / УдалітьСтрокуТабл

/ / Зумовлена ​​процедура Здійснює контроль введених даних процедура ПріЗапісі ()

якщо (ПустоеЗначеніе (ДатаНовОклада) = 1) тоді Попередження (Визначте дату нового окладу”) СтатусВозврата (0) / / Чи не записуємо дані

/ / Переміщаємося на елемент діалогу ДатаНовОклада

Активізувати (ДатаНовОклада, 1) повернення

КонецЕсли

якщо КолічествоСтрок () = 0 тоді Попередження (Список співробітників порожній”)

СтатусВозврата (0) / / Забороняємо запис документа

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

/ / Перевіримо, чи для всіх співробітників заданий оклад

/ / І чи відрізняється він від колишнього окладу ВибратьСтрокі ()

поки ПолучітьСтроку ()> 0 цикл якщо НовийОклад = 0 тоді

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

КонецЕсли

якщо НовийОклад = ПрежнійОклад тоді

Попередження (Новий і колишній оклади співробітника + РазделітельСтрок + Співробітник + однакові”)

СтатусВозврата (0) / / Забороняємо запис документа повернення

КонецЕсли

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

5843&nbsp&nbsp&nbsp&nbsp&nbsp МОДУЛЬ ДОКУМЕНТА

Містить зумовлену процедуру ОбработкаПроведенія Проведення або перепроведення проведеного документа виконується кожен раз при його записи

Процедура ОбработкаУдаленияПроведения може бути опущена, оскільки при видаленні документа породжені ним нові оклади також будуть видалятися Це обумовлено тим, що вони встановлюються в довіднику Сотруднікі_2 з привязкою до док ументу

/ / Встановлює значення періодичного атрибута Оклад для всіх потрапили в наказ

/ / Співробітників, а також значення реквізиту довідника ПріказОклад

процедура ОбработкаПроведенія () перем сСотр_2

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

/ / Дата для періодичного реквізиту Оклад довідника Сотруднікі_2 сСотр_2ІспользоватьДату (РабочаяДата ())

ВибратьСтрокі ()

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

якщо сСотр_2НайтіЕлемент (Співробітник) = 0 тоді Попередження (Співробітник + Співробітник + РазделітельСтрок +

” в довіднику Сотруднікі_2 не найден ) продовжити

КонецЕсли

/ / Встановлюємо звязок документа з записом довідника Сотруднікі_2 сСотр_2ПріказОклад = ТекущійДокумент ()

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

/ / Записуємо періодичний реквізит Оклад з привязкою до документа УстановитьРеквизитСправочника (Співробітник, Оклад, НовийОклад, ДатаНовОклада)

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

/ / Обмежуємо час показу вікна з попередженням трьома секундами

/ / Див також зауваження 1 до процедур ОбработкаПроведенія

/ / І ОбработкаУдаленияПроведения в розд 5823

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

інакше

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

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

59 Про Т Б О Р І Ф І Л Ь Т Р А Ц І Я Д А Н Н И Х

З П Р А В О Ч Н І К А

Застосовується для виведення у формі списку довідника даних, що задовольняють деяким умовам

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

*

*