СТВОРЕННЯ ДОВІДНИКА 1С

511 ЕТАП 1 ДОДАВАННЯ ДОВІДНИКА У конфігурації

Сконструюємо тепер, слідуючи нашим навчальним цілям, представлений в розд 51 довідник Сотруднікі_2 Увійдемо в конфігурацію, розкриємо на закладці Метадані пункт Довідники і, натиснувши на праву кнопку миші, виберемо в меню пункт Новий довідник У вікні Конструктор довідника у полі Ідентифікатор внесемо текст Сотруднікі_2 і проследуем далі Припустимо вікно, де пропонується створити новий вид субконто, і завершимо перший етап створення довідника, вказавши на необхідність додавання команди виклик довідника в меню інтерфейсу Учень (рис 54)

Рис 54 Завершуємо перший етап створення довідника Сотруднікі_2

512 ЕТАП 2 ФОРМУВАННЯ РЕКВІЗИТІВ ДОВІДНИКА В конфігураторі в списку довідників зявиться імя обєкта Сотруднікі_2, вдаривши по якому двічі мишею ми перейдемо до другого етапу створення справоч-

ника формуванню його реквізитів (рис 55)

Рис 55 Завдання реквізитів довідника Сотруднікі_2

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

Задамо поки один додатковий періодичний реквізит Оклад, вибравши кнопку Новий і визначивши його властивості відповідно до рис 53

Зауваження   Головну таблицю створеного довідника Сотруднікі_2 система розмістить в DBF-файлі, можливо з імям SC4194DBF

Другий етап завершено На третьому етапі створимо форми для перегляду і редагування елементів і груп довідника Сотруднікі_2

513 ЕТАП 3 СТВОРЕННЯ діалогах

ДЛЯ РЕДАГУВАННЯ ЕЛЕМЕНТІВ ТА ГРУП

5131 ФОРМИ ЕЛЕМЕНТУ І ГРУПИ

За замовчуванням для перегляду, введення і редагування даних довідника використовується форма списку (рис 51, 52), яка містить усі реквізити довідника Безперечно, переглядати дані в такий формі зручно Однак редагування або додавання даних краще здійснювати за допомогою спеціальних форм для елементів-

тов і груп довідника Щоб забезпечити виклик цих форм, передбачимо в вікні рис 55 редагування довідника як за допомогою форм для елементів і груп, так і у формі списку (рис 56)

Рис 56 Завдання способів редагування довідника Сотруднікі_2

Зауваження  За замовчуванням після вибору для властивості Редагувати пункту Обома способами редагування та додавання елементів і груп здійснюється в діалозі, тобто через їх форми У формі списку буде доступний тільки перегляд довідника Для отримання можливості редагування в списку слід після запуску форми списку виконати ланцюжок Дії V Редагувати в діалозі або вжити, наприклад в зумовленою процедурі прочинене, при виклику форми списку довідника її метод РедактіроватьВДіалоге, встановивши в його перший параметр нуль Водночас додамо, що для надійного контролю даних краще використовувати єдине джерело їх надходження діалог елемента (групи) і відмовитися від більш простого на перший погляд способу їх редагування в списку форми

Щоб створити Форми елементів і груп, натиснемо, залишаючись в діалозі рис 55, кнопку Форма елемента і скористаємося вікном (рис 57) для розміщення реквізитів довідника в діалозі форми елемента

Рис 57 Помічник розміщення реквізитів довідника в діалозі форми елемента

Наведемо діалог до виду, представленому на рис 58, зробивши додатково полі Код недоступним для редагування (це виконується на закладці Загальні вікна властивостей елемента Код)

Рис 58 Діалог форми редагування елемента довідника Сотруднікі_2

Відмова від редагування поля Код обумовлений тим, що код співробітника генерується автоматично, тому придумувати і вводити код немає необхідності Досить обмежитися його переглядом

Зауваження    Якщо для атрибута Код встановити символьний тип, то, використовуючи вбудовану процедуру ПрефіксАвтонумераціі, або методи ПрефіксКода (для довідника), або ПрефіксНомера (для документа), можна задати префікс, який буде використовуватися при автоматичному призначення коду Процедура ПрефіксАвтонумераціі має наступний синтаксис:

ПрефіксАвтонумераціі (різновид, префікс)

де параметррізновидце символьне вираз, що задає різновид типу довідника або документа, наприклад СправочникСотрудники або ДокументІзмененіеОклада. Якщо потрібно застосувати префікс до всіх довідників (документам), то для завдання значення параметрарізновидвикористовується рядок Довідник * (Документ *) Параметрпрефікстакож має символьний тип і задає, як це випливає з його назви, префікс

Приклад:

// Встановимо префікс номера для документа БольнічнийЛіст ПрефіксАвтонумераціі (ДокументБольнічнийЛіст, БЛ-)

Другий спосіб зробити атрибут Код доступним тільки для перегляду це замінити редагує поле на елемент діалогу Текст (рис 59)

Рис 59 Діалог, в якому Код виводиться з використанням елемента діалогу Текст

Заміна виконана таким чином По-перше, віддаляється поле з ідентифікатором Код По-друге, вставляється елемент діалогу Текст з порожніми даними на закладці Загальні, але з певною на закладці Додатково формулою Код (рис 510)

Рис 510 Завдання формули для елемента діалогу Текст

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

ЗауваженняУ будь-який момент в діалог можна додати відсутній в ньому реквізит довідника, вибравши на панелі інструментів Елементи діалогу іконку

Введення і редагування груп будемо виконувати за допомогою окремого, представленого на рис 511 діалогу, в якому також заборонимо редагування поля Код

Рис 511 Діалог форми редагування групи довідника Сотруднікі_2

Цей діалог створюється після натискання кнопки Форма групи наведеного на рис 55 вікна При цьому прапор Одна форма для елемента і групи, розташований у цьому вікні, повинен бути відключений

5132&nbsp&nbsp&nbsp&nbsp ФОРМИ СПИСКУ

Форми списку змінюються після вибору на рис 55 однойменної кнопки Форм може бути кілька Одну можна використовувати як основну, що відкривається за замовчуванням з меню по команді СправочникСотрудники_2Открыть, другий для використання методом ОткритьПодбор Так і вчинимо При цьому в першу форму списку ми вставимо дерево груп (див рис 51), а в другу немає (рис 512)

Рис 512 Форма списку довідника Сотруднікі_2 без дерева груп

Крім того, в першій формі ми збережемо заборону на вибір груп при виклику методу Вибрати (ця заборона в методі Вибрати заданий за замовчуванням), а в другій, застосувавши в зумовленою процедурі Прочинене метод ВиборГруппи (1), ця заборона знімемо (Опис методів довідника див розд 5122)

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

Створюючи другу форму, ми після вибору Форми списку Редагувати повинні натиснути копку Новий і дати формі імя, наприклад ФормаДляВибора Потім, вибираючи імена форм і застосовуючи кнопки Основна і Для вибору, розділити форми за призначенням (рис 513)

Рис 513 Поділ форм списків за призначенням

Поки що ФормаДляВибора не створена Щоб усунути цей недолік, виберемо на рис 513 кнопку Змінити і у вікні (рис 514) відразу натиснемо ОК

Рис 514 Помічник створення форми списку

Тепер після запуску програми з розд 54 відображається в результаті застосування методу

ОткритьПодбор (СправочнікСотруднікі_2,, контПодбора)

форма матиме наведену на рис 512 структуру

Той же список відкриється і при наступному виклику: ОткритьПодбор (СправочнікСотруднікі_2, ФормаДляВибора, контПодбора)

Втім, якщо метод ОткритьПодбор викликати так:

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

то їм буде використана основна, що використовує дерево груп форма списку довідника Сотруднікі_2

514&nbsp&nbsp ЕТА П 4 Написання Е МОДУЛІ Й ​​ФОР М

5141&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp ВИМОГИ ДО ПРОЦЕДУРАМИ МОДУЛІВ ФОРМ ДОВІДНИКА

У модулях форм елемента і групи корисно написати процедури, що здійснюють перевірку даних, що вводяться і, по можливості, що усувають наявні в них помилки Наприклад, в модулі форми елемента повязана через поле Формула з реквізитом Найменування функція або процедура може перетворювати вводяться ПІБ таким чином, що перші літери ПІБ будуть прописними, а наступні малими Це дозволить нам, зокрема, вводити ПІБ на одному регістрі, оскільки після введення

Кузьміна Раїса Миколаївна

функція перетворює ПІБ в належний вигляд: Кузьміна Раїса Миколаївна

Щоб виключити скорочення в ПІБ, можна здійснити перевірку на наявність в ПІБ точки і при її виявленні забороняти запис введених даних Тоді не буде можливості ввести ПІБ наступним чином:

Кузьміна Р Н

Додатково функція може видаляти надлишкові прогалини між складовими ПІБ компонентами

Функція, повязана з реквізитом Найменування у формі для групи, повинна перешкоджати створенню однойменних груп у межах одного батька Тоді в межах групи 01 Цех ця функція заборонить створення двох однакових підрозділів

Напишемо для прикладу в модулі форми елемента довідника Сотруднікі_2 функцію КонтрольФІО, звязавши її, як і планувалося, з елементом діалогу Найменування (це виконується на закладці Додаткові у вікні завдання властивостей елемента) У модулі форми групи розмістимо функцію Унікальність, також повязану з елементом діалогу Найменування, але вже у формі групи

Виклики цих функцій необхідно розмістити і в процедурі, повязаної з кнопкою ОК За замовчуванням формула для цієї кнопки така:

# 3апісать 3акрить

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

Щоб випередити запис елемента довідника викликом функції КонтрольФІО

(Унікальність), використовуємо в обох формах зумовлену процедуру ПріЗапісі, розмістивши в ній виклик функції КонтрольФІО (Унікальність) Це потрібно, оскільки функція КонтрольФІО (Унікальність) викликається:

1) завжди, коли обрано реквізит діалогу Найменування, значення реквізиту змінено і натиснута клавіша Enter

2) тільки одного разу, коли покидается реквізит діалогу Найменування внаслідок натискання на будь-яку (крім Enter) меняющую положення курсору клавішу, наприклад на табуляцію, або в результаті застосування миші Якщо потім знову вибрати поле Найменування, а слідом переміститися з нього, не вдаючись до Enter, на інший елемент діалогу, повязана функція (Формула) викликана не буде

А це означає, що якщо не викликати КонтрольФІО (Унікальність) при натисканні на ОК, то ми можемо здійснити запис невірного значення реквізиту Найменування: з точками в разі форми елемента або дублюючого імя існуючого підрозділу в разі форми групи

Другий спосіб уникнути помилкових записів це зробити кнопку ОК недоступною при невірних значеннях найменування, вживши метод

формаОКІденДоступность (0) / / Окід ідентифікатор копки ОК

Але він гірше, оскільки в процесі редагування запису користувач може забути, з якої причини кнопка ОК стала недоступною

Третій, мабуть, найбільш вдалий варіант це накласти заборону на переміщення

ня з поля діалогу, що містить помилкові дані Але він в 1С неможливий (метод модуля форми Активізувати, який можна було б використовувати для реалізації запропонованого заборони, не можна вживати в формулах елементів діалогів, крім кнопок)

Також в зумовленою процедурі ПріЗапісі розмістимо перевірки, не дозволяють зберігати порожні значення реквізитів Заборона на запис помилкових даних накладемо, вживши у процедурі ПріЗапісі функцію

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

Виконувана після натискання кнопки Закрити у формах елемента і групи команда пропонує, якщо були зміни даних, наведений на рис 515 діалог

Рис 515 Діалог після натискання на кнопку Закрити (за наявності змін у даних)

Однак нам вдасться уникнути введення неправильних даних, якщо натиснути Так, оскільки в цьому випадку спрацює зумовлена ​​процедура ПріЗапісі, що виконує пошук помилок

Зауваження  Команду # 3акрить, виконувану при натисканні на кнопку Закрити, можна замінити викликом методу ФормаЗакрить (0) Рівний нулю аргумент методу забезпечить закриття форми без представленого на рис 515 питання Однак це питання все одно буде зявлятися при спробі закрити форму елемента або групи із зміненими даними, натискаючи на Esc, або використовуючи хрестик, або застосовуючи Ctrl + F4

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

5142&nbsp&nbsp&nbsp&nbsp&nbsp ПРОЦЕДУРИ МОДУЛЯ ФОРМИ ЕЛЕМЕНТУ

Перевіряють і коректують ПІБ за викладеними в попередньому розділі правилам

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

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

формаЗаголовок (Співробітник підприємства) КонецПроцедури / / прочинене

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

/ / Перевіряє, чи всі дані введені і викликає функцію КонтрольФІО

/ / І, якщо немає помилок, здійснюється запис елемента довідника Сотруднікі_2 процедура ПріЗапісі ()

якщо (ПустоеЗначеніе (Найменування) = 1) або (ПустоеЗначеніе (Оклад) = 1) або (ПустоеЗначеніе (Освіта) = 1) тоді

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

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

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

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

функція КонтрольФІО (місце = 1)

/ / Параметр місце дорівнює 1, якщо виклик здійснюється з форми, тобто

/ / Формула має вигляд КонтрольФІО () або КонтрольФІО (1),

/ / І дорівнює 2, якщо КонтрольФІО викликається з процедури ПріЗапісі

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

/ / Процедури УбратьПробели і ВНРег, коригувальні при необхідності

/ / Найменування, оскільки всі необхідні зміни Назви функцією

/ / КонтрольФІО вже здійснені (див вище порядок виклику КонтрольФІО в діалозі) якщо місце = 1 тоді / / Виклик здійснюється з діалогу

УбратьПробели () / / Видаляє надлишкові пропуски між словами

/ / Процедура ВНРег перетворює ПІБ так, що перші літери кожного

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

КонецЕсли

якщо Знайти (Найменування, .”) про 0 тоді

Попередження (Точки в ПІБ неприпустимі”) повернення 0

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

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

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

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

/ / Видаляємо можливі ведучі та завершальні прогалини Найменування = СокрЛП (Найменування)

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

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

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

довжина = стрДліна (Найменування)

//

Довжина ПІБ

к = 1 / /

Число зайвих пробілів

поки (поз <довжина) і (Сред (Найменування, поз + до, 1) = "") цикл

к = к + 1

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

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

конецЦікла / / Поки поз> Про КонецПроцедури / / УбратьПробели

Зауваження   У процедурі УбратьПробели можна було б позбутися можливих точок в ПІБ, додавши в її початок код

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

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

проте тоді виявиться можливим запис ФИ О в вигляді Кузьміна Р Н

/ / Процедура ВНРег перетворює ПІБ так, що перші літери кожного

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

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

/ / Обробимо кожне слово ПІБ вбудованими функціями Врег і Нрег

/ / Тепер, коли слова розділені одним пропуском і врешті ПІБ немає прогалин,

/ / Виділення слів тривіально

// Алгоритм:

/ / 1 Перетворюємо всі символи найменування в нижній регістр

/ / 2 Знаходимо перший символ кожного слова і перетворюємо його у верхній регістр

/ / Щоб мати можливість вживати функцію Знайти для пошуку

/ / Чергового пробілу (після нього слід перша літера слова), будемо

/ / Замінювати знайдений пробіл на символ% (таких символів у ПІБ бути не повинно),

/ / А після виконання всіх перетворень замінимо символи% на прогалини довжина = стрДліна (Найменування) / / Довжина ПІБ

якщо довжина = 0 тоді

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

Найменування = Нрег (Найменування) / / Перший крок алгоритму

/ / Підготовка до виконання другого кроку алгоритму

/ / Перша буква ПІБ прописна

Найменування = Врег (Лев (Найменування, 1)) + Прав (Найменування, дліна1)

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

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

/ / Найден прогалину Формуємо заново Найменування, в якому,

/ / Знайдений пробіл замінений на%, а перша буква чергового слова

/ / Перетворена в прописну

Найменування = Лев (Найменування, до 1) + % +

Врег (Сред (Найменування, до + 1, 1)) + Прав (Найменування, довжина до 1) к = Знайти (Найменування, “)

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

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

Найменування = СтрЗаменіть (Найменування, %, “)

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

Зауваження  При записи зміненого окладу, який є періодичним реквізитом довідника Сотруднікі_2, метод Записати повинен викликати наведений на рис 516 діалог, що дозволяє або прийняти зміна окладу, або ні

Рис 516 Зміна періодичного реквізиту Оклад

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

СохранениеПериодическихРеквизитов (до, Оклад) в якому до це число, рівне 2, 3, 4 або 5

5143&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp ПРОЦЕДУРИ МОДУЛЯ ФОРМИ ГРУПИ

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

1 Виконати пошук групи з найменуванням (функція НайтіПоНаіменованію)

2 Якщо група знайдена, то заборонити введення запису (порушена унікальність)

Однак такий алгоритм безпосередньо реалізувати не можна, оскільки він припускає зміну позиції довідника, що при роботі з формою групи (елемента) неприпустимо Спроба зміни позиції довідника, скажімо, в результаті виклику НайтіПоНаіменованію викличе помилку, супроводжувану повідомленням: Обєкт не може бути перепозиціонувати”

Щоб це обмеження обійти, слід створити обєкт сСотр_2 = СоздатьОбект (СправочнікСотруднікі_2)

з яким і вжити метод НайтіПоНаіменованію:

/ / Другий параметр методу 0, отже, виконуємо пошук у всьому довіднику прапор = сСотр_2НайтиПоНаименованию (Найменування, 0)

де Найменування імя вводиться або редагованої групи

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

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

формаЗаголовок (Підрозділ підприємства) КонецПроцедури / / прочинене

функція Унікальність () далі

/ / Викликає функцію Унікальність, і якщо вона повертає 1,

/ / То здійснюється запис групи довідника Сотруднікі_2 процедура ПріЗапісі ()

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

СтатусВозврата (0) / / Чи не записуємо дані

/ / Якщо порушена унікальність імен підрозділів іначеЕслі Унікальність () = 0 тоді

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

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

функція Унікальність () перем сСотр_2, прапор

/ / Виконуємо пошук групи з її імені

/ / Варіант 1

/ / Група не знайдено, запис дозволена

/ / Варіант 2

/ / Група знайдена і її код дорівнює коду редагованої групи (при введенні нової групи

/ / Це неможливо, оскільки коди всіх записів унікальні), запис дозволена

/ / Варіант 3

/ / Група знайдена і її код відмінний від коду редагованої

/ / Або нової групи, запис заборонена

сСотр_2 = СоздатьОбект (СправочнікСотруднікі_2) прапор = сСотр_2НайтиПоНаименованию (Найменування, 0)

якщо прапор = 0 тоді / / Варіант 1 повернення 1

іначеЕслі (прапор = 1) і (сСотр_2код = Код) тоді / / Варіант 2

повернення 1

іначеЕслі (прапор = 1) і (сСотр_2код <> Код) тоді / / Варіант 3

Попередження (Неунікальний імя підрозділи”) повернення 0

КонецЕсли

/ / Те ж можна записати компактніше:

/ / Якщо (прапор = 1) і (сСотр_2код <> Код) тоді / / Варіант 3

/ / Попередження (Неунікальний імя підрозділи”)

/ / Повернення 0

/ / КонецЕсли

/ / Повернення 1 / / Варіанти 1 і 2 КонецФункции / / Унікальність

Зауваження  Такий простий спосіб контролю унікальності назви підрозділу підприємства обраний тому, що в довіднику Сотруднікі_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>

*

*