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

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

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

/ / Встановлюємо значення реквізитів записи сСотр_2Наіменованіе = ПІБ

сСотр_23апісать ()

4 Крім перерахованих в табл 53 полів в Наказі про прийом, як, втім, і у всіх інших документах, присутні реквізити (атрибути) НомерДок і ДатаДок, що зберігають відповідно номер і дату документа Властивості цих реквізитів задаються системою і не можуть бути змінені користувачем Оскільки номер документа призначається автоматично, то заборонимо редагування реквізиту: НомерДок Дату нового документа будемо за замовчуванням встановлювати рівний робочої даті

Інші характеристики наказу визначимо відповідно до рис 533

Рис 533 Властивості документа Наказу про прийом на роботу

Відкриємо потім форму документа, вставимо в її діалог реквізити і наведемо діалог до виду, представленому на рис 534

Рис 534 Діалог форми Наказу про прийом на роботу

Зауваження   При додаванні документа в конфігурацію 1С створить в інформаційній базі для зберігання даних шапки документів ПріказОПріеме 2 файлу, можливо DH4216DBF і DH4216CDX Якби документ містив до того ж і табличну частину, то для зберігання даних з цієї частини 1С поповнив би інформаційну базу ще двома файлами DT4216DBF і DT4216CDX

5822&nbsp&nbsp&nbsp&nbsp&nbsp МОДУЛЬ ФОРМИ ДОКУМЕНТА

З кнопкою ОК діалогу документа повязані команди

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

Вони реалізують послідовність методів

Записати () / / Запис документа

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

Провести () формаЗакрить ()

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

Як і раніше частина перевірок будемо виробляти функцією КонтрольФІО, розробленої для форми елемента в розд 5342 Тільки на цей раз функція КонтрольФІО звязується через властивість Формула з полем ПІБ Додатково введемо перевірки, не дозволяють зберігати документ, якщо в діалозі форми документа (рис 534) є незаповнені поля

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

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

Формування коду виконаємо у процедурі СоздатьКод, яку звяжемо з полем Підрозділ, задавши для нього у вікні завдання властивостей поля на закладці Додатково формулу СоздатьКод () Тоді процедура СоздатьКод буде викликатися кожен раз при зміні підрозділу Якщо потрібного підрозділу в довіднику Сотруднікі_2 немає, то його доведеться ввести, застосувавши форму групи довідника (розд  5331)

Таким чином, модуль форми Наказу про прийом на роботу містить наступні процедури і функції:

функція КонтрольФІО (місце = 1) далі процедура УбратьПробели () далі процедура ВНРег () далі

процедура СоздатьКод () далі

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

якщо ((ПустоеЗначеніе (Підрозділ) = 1) або (ПустоеЗначеніе (ПІБ) = 1) або (ПустоеЗначеніе (Оклад) = 1) або (ПустоеЗначеніе (Освіта) = 1) тоді

Попередження (У документі є невизначені реквізити”) СтатусВозврата (0) / / Чи не записуємо дані

/ / Функція КонтрольФІО при такому виклику поверне 0, якщо в ПІБ є точки іначеЕслі КонтрольФІО (2) = 0 тоді

СтатусВозврата (0) КонецЕсли

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

/ / Докладний коментар до функції та її процедурам см в розд 5342 функція КонтрольФІО (місце = 1)

КонецЕсли

якщо Знайти (ПІБ, .”) <> 0 тоді Попередження (Точки в ПІБ неприпустимі”) повернення 0

інакше / / Точок в імені немає

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

КонецФункции / / КонтрольФІО

процедура УбратьПробели () перем ПІБ2, довжина, поз, к

/ / Видаляємо можливі ведучі та завершальні прогалини

/ / Вводимо ПІБ2, оскільки СокрЛП не змінює довжину ПІБ ПІБ2 = СокрЛП (ПІБ)

поз = Знайти (ПІБ2, “) / / Шукаємо два поспіль йдуть пробілу

/ / Цикл триває, поки в рядку є хоча б одна пара поспіль йдуть пробілів поки поз> 0 цикл

поки (поз <довжина) і (Сред (ПІБ2, поз + до, 1) = "") цикл к = к + 1;

конецЦікла / / Поки(Поз <довжина) ...

// Видаляємо зайві пробіли і замінюємо старе значення ПІБ на нове ПІБ2 = Лев (ПІБ2, поз) + Прав (ПІБ2, довжина поз до + 1)

поз = Знайти (ПІБ2, “) / / Шукаємо 2 поспіль йдуть пробілу конецЦікла / / Покипоз> 0

ПІБ = ПІБ2 / / Результат КонецПроцедури / / УбратьПробели

/ / Перетворює ПІБ так, що перші літери кожного

/ / Що становить ПІБ слова прописні, а інші рядкові процедура ВНРег ()

перем до, довжина

довжина = стрДліна (ПІБ) / / Довжина ПІБ якщо довжина = 0 тоді

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

ПІБ = Нрег (ПІБ) / / Перший крок алгоритму

ПІБ = Врег (Лев (ПІБ, 1)) + Прав (ПІБ, довжина 1)

/ / Позиція пробілу або нуль, якщо пробіл не знайдений к = Знайти (ПІБ, “)

поки до> 0 цикл

ПІБ = Лев (ПІБ, до 1) + % +

Врег (Сред (ПІБ, до + 1, 1)) + Прав (ПІБ, довжина до 1) до Знайти (ПІБ, “)

конецЦікла / / Поки до < довжина

// Замінюємо символи% точки на прогалини

ПІБ = СтрЗаменіть (ПІБ, %, “)

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

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

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

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

// Алгоритм:

/ / 1 Початок

/ / 2 Прочитати кодПодр код підрозділу та його рівень

/ / 3 Знайти максКод максимальне значення коду співробітника, що входить до підрозділу

/ / 4 Знайти двеЦіфр перші дві цифри коду співробітника за наступним правилом:

/ / Якщо рівень = 1, то

//          двеЦіфр = кодПодр * 10

/ / Інакше

//          двеЦіфр = кодПодр

//       кінець якщо

/ / 5 Знайти послЦіфр цифри максКод, наступні після його перших двох цифр

/ / 6 Наступні цифри нового коду: послЦіфр = послЦіфр + 1

/ / 7 Новий код: Код = Число (Рядок (двеЦіфр) + Рядок (послЦіфр))

/ / 8 Кінець

процедура СоздатьКод ()

перем сСотр_2, кодПодр, рівень, максКод, двеЦіфр, послЦіфр перем двеЦіфрУмнНаК, к

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

Підрозділ = ПолучитьПустоеЗначение(&quotСправочникСотрудники_2&quot) Попередження (Підрозділ не вибрано”)

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

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

/ / У довіднику Сотруднікі_2 можна в поле Підрозділ вибрати як співробітника,

/ / Так і підрозділ У першому випадку ми перейдемо від співробітника до підрозділу,

/ / Використавши атрибут Батько У другому, якщо підрозділ на наступному рівні

/ / Має співробітників, ми маємо вірний вибір, якщо ж це не так, вибір

/ / Підрозділу доведеться продовжити

/ / Якщо вибрано співробітник

якщо ПодразделеніеЕтоГруппа () = 0 тоді

/ / Знайдемо батьківську групу реквізит Підрозділ має тип Довідник сСотр_2НайтіЕлемент (Підрозділ)

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

/ / І встановлюємо на нього позицію довідника Підрозділ = сСотр_2Родітель сСотр_2НайтіЕлемент (Підрозділ)

/ / Перевіримо, що на наступному рівні підрозділу інакше

сСотр_2НайтіЕлемент (Підрозділ) сСотр_2ИспользоватьРодителя (сСотр_2ТекущійЕлемент ()) сСотр_2ВибратьЕлементи (1) / / Задаємо вибірку з урахуванням ієрархії

/ / Якщо на наступному рівні підрозділ, то це не годиться якщо сСотр_2ПолучітьЕлемент () = 1 тоді

якщо сСотр_2ЕтоГруппа () = 1 тоді

Підрозділ = ПолучитьПустоеЗначение(&quotСправочникСотрудники_2&quot) Попередження (Вибрані підрозділ не того рівня”)

повернення

інакше / / Повертаємося до вірного підрозділу сСотр_2НайтіЕлемент (Підрозділ)

КонецЕсли

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

/ / ССотр_2Код може мати символьний тип

кодПодр = (ТіпЗначенія (сСотр_2Код) = 2, Число (сСотр_2Код), сСотр_2Код) рівень = сСотр_2Уровень ()

двеЦіфр = (рівень = 1, кодПодр * 10, кодПодр)

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

/ / Здійсни це, перебираючи всі елементи підрозділи, що досягається

/ / В результаті вживання методу ІспользоватьРодітеля сСотр_2ИспользоватьРодителя (Підрозділ)

/ / Здійснимо перебір у порядку зростання кодів елементів сСотр_2ПорядокКодов ()

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

/ / МаксКод залишиться рівним нулю, якщо в групі немає елементів максКод = 0

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

/ / ССотр_2Код може мати символьний тип

максКод = (ТіпЗначенія (сСотр_2Код) = 2, Число (сСотр_2Код), сСотр_2Код) конецЦікла / / Поки

/ / Шукаємо наступні цифри максКоді потім наступні цифри коду

/ / Нового співробітника Будемо множити двеЦіфрна 10, поки не перевищимо максКод

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

*

*