Пора уже от теории переходить к практике. Мы начнем с создания ключевого справочника «Сотрудники». Этот справочник у нас «первичный», поэтому он будет «плоский», т.е. без иерархии групп. Однако уже на этом этапе возникает масса нестандартных моментов. Перечислим некоторые из них.
1. Центрирование и фиксация размеров форм
Все наши формы в 1С мы желаем видеть всегда отцентрированными на экране монитора и фиксированного размера. Пользователь конечно должен иметь возможность двигать эти формы и менять их размер, но при каждом новом открытии диалога все его размеры и позиции должны быть восстановлены. Нас совершенно не удовлетворяет идея фирмы «1С» сохранять текущие параметры окон в реестре Windows. Поэтому для борьбы с этим мы привлечем очень полезную внешнюю компоненту, о которой мы уже упоминали ранее, это FormEx.dll от АЛьФа. Другие компоненты мы будем подключать по мере необходимости.
2. Закрытие формы по Esc
Это просто вопрос удобства работы с формами, тем более что при использовании FormEx.dll это не составит никакого труда. Более того, эта компонента поддерживает расширенные возможности работы с клавиатурой, что очень и очень удобно, особенно на фоне ограниченных возможностей «1С77».
3. Сортировка и быстрый поиск
Здесь тоже не все гладко. Проблема вот в чем. Если тип реквизита справочника или поля таблицы имеет строковый тип данных, то он и сортируется как строки, зато удобно делать быстрый поиск по строке (без лидирующих пробелов,). Если же тип данных у нас число, то сортировка происходит нормально, как и должно быть для чисел, однако в быстром поиске нужно указывать лидирующие (не видимые) пробелы перед числом, что очень неудобно. Поэтому, если мы желаем чтобы числовое поле сортировалось как числовое, а в быстром поиске вело себя как строковое, иначе говоря, чтобы числа отображались без лидирующих пробелов, то, увы, 1С в этом нам не помощник. Поэтому в рамках «семерки» представляется такой «выход». Помимо, скажем, числового кода мы заводим еще аналогичное поле (реквизит) с тем же значением, но типом «строка». На форме списка отображаем только этот строковый код (без лидирующих пробелов), тогда быстрый поиск по нему будет без проблем, ну а сортировку по коду можно делать также без проблем, так как числовой код у нас тоже присутствует в таблице (справочнике). Эту практику мы будем применять практически во всех справочниках. Мы довольно часто будем решать свои проблемы за счет дополнительного объема таблиц справочников.
4. Эмуляция вкладок на формах диалогов
Как показывает опыт, использовать множество вкладок в сложных формах диалогов не очень эффективно, так как 1С прорисовывает все, хотя и отображает не все поля на всех вкладках. Да и иметь дело с ними в конфигураторе не очень удобно. Это «подтормаживает» работу с диалогами, поэтому эти вкладки мы просто не будем использовать. Только не надо утверждать, что мол, сейчас уже такие «шустрые» компьютеры, что этот «эффект» уже не заметен. Достаточно того, что работать с вкладками, на уровне конфигуратора, мало удовольствия.
Но как же тогда эмулировать наличие вкладок ибо переусложнять основную форму диалога тоже не выход? Мы решили для себя использовать «кнопочные формы», т.е. дополнительные формы, построенные на обработках и вызываемые с помощью кнопок на форме. Размер кнопки может быть такой же, как размер вкладки. Так что это кажется неплохим решением. Тем более что похожие формы можно вызывать в разных диалогах.
5. Эмуляция периодических реквизитов справочников
Механизм периодических реквизитов справочников в 1С нас также не устраивает, хотя эта идея не плохая. Очень многие реквизиты первичных справочников могут периодически изменяться во времени. Сейчас даже пол человека нельзя гарантировать неизменным, не говоря уже о фамилии или его табельном номере. Кажется что, не смотря на громоздкость, вполне можно использовать множество подчиненных справочников, по количеству периодических реквизитов, в которых будут всего два поля: значение реквизита и дата, до которой или с которой он действует. Текущее (последнее) значение реквизита должно дублироваться (в режиме «только чтение и просмотр») в соответствующем поле базового справочника. Именно это текущее значение должно копироваться в соответствующее поле некоторого документа, так чтобы изменение текущего периодического реквизита не затрагивало его используемое значение в проведенном документе. Вообще, похоже на то, что практически все существенные значения элемента справочника должны копироваться в документ, а не иметь ссылки на себя, чтобы изменения первичных полей не влияло на их используемые значения в проведенных документах. Для несущественных полей справочников можно сохранить ссылки на них в документах. Скажем, чисто формально можно считать, что в справочнике сотрудников единственным существенным реквизитом (полем) может быть только порядковый номер его записи (элемента). Все остальное, «несущественно» и теоретически может быть изменено: фамилия, имя, пол, идентификационный код и даже пол. Так что объект «Сотрудник» вполне может быть представлен в документах своей ссылкой (кодом элемента / записи в таблице). Можно даже ввести правило, что один и тот же сотрудник, заведенный дважды (с разными порядковыми номерами, причем это верно для любого элемента любого первичного справочника) означает, что мы имеем дело с разными людьми, со всеми вытекающими для документов последствиями. Так что заполнением этого справочника должно заниматься ответственное лицо, например, сотрудник отдела кадров. А для объекта «Ресурс», несущественным значением может быть его наименование, а существенным практически все остальные поля или реквизиты. Поэтому наименование ресурса должно отображаться в документах по ссылке, а все остальные поля по значению. Однако некоторые значения ресурса в справочниках, после проведения в документах не должны иметь возможность изменяться до тех пор, пока не будет полной отмены проведения. Например, это может быть даты поступления и ввода в эксплуатацию данного ресурса, его балансовая (первоначальная) стоимость и некоторые другие. Причем некоторые поля ресурса, например его суммарный остаток в учетной единице измерения, могут создаваться только документами и всегда должны иметь режим «только чтение и просмотр». Так же как и справочник «Сотрудники», справочники ресурсов также должно заполнять ответственное лицо, скажем бухгалтер соответствующего профиля под контролем администратора базы данных. Ибо небрежное оформление исходных данных (дублирование или искажение информации) весьма чревато для учета.
6. Создание собственной базы метаданных справочников
Это очень удобно, если мы собираемся (а мы собираемся) весьма интенсивно работать с базой метаданных нашей конфигурации. Например, когда начнем делать собственный универсальный генератор стандартных отчетов уровня пользователя. Эта база должна формироваться автоматически на уровне пользователя, после внесения очередных изменений в конфигурацию справочников и быть доступной только для чтения и просмотра. Располагаться она должна в нашей же конфигурации. Думаем, что иметь дело с этой базой будет удобней, чем с обычными метаданными.
Итак, мы сформулировали основные критерии создания нашего первого справочника. Остальные вопросы будем решать по ходу дела.
Создание справочника в «1С77» достаточно рутинная операция. Открываем конфигуратор, в конфигурации «Справочники» правкой кнопкой мыши выбираем «Новый справочник». Затем заполняем Идентификатор, Синоним и Комментарий словом «Сотрудники». Далее жмем «Готово» и сохраняем наш новый объект. Удобно закрыть форму конструктора справочника и вводить новые реквизиты (поля таблицы) с помощью правой кнопки мыши на данном справочнике дерева объектов 1С. Список предлагаемых реквизитов приведен в следующей таблице:
Естественно, этот перечень не может быть абсолютным, вы можете совершенно спокойно его редактировать, более того и для нас он не окончательный, в процессе проектирования конфигурации мы не раз будем изменять его. Сейчас следует сказать, что пока мы не можем вводить реквизиты вида «Перечисление» и «Справочник», так как еще не создали эти объекты. В этом случае, можно оставлять тип реквизита по умолчанию, предлагаемым конфигуратором – «Строка» длины 10 символов. В качестве Идентификатора и Синонима реквизита, мы пишем его имя из первой колонки, а Комментарий берем из последней колонки «Полное наименование». Также из таблицы подставляем заданную длину и точность реквизита.
Как видим, даже один этот справочник является достаточно сложным. Уже на данном этапе нам необходимо создать дополнительно два перечисления и более 10 ссылочных обслуживающих справочников, не говоря уже о нескольких десятках подчиненных справочниках периодических реквизитов. И это еще не все, будет множество других подчиненных справочников, например, «Расценки сотрудника» для начисления его заработной платы и т.п. Кому-то это может показаться очень громоздким и даже не оптимальным. Однако, по-моему, это плата за удобство работы ибо там где этого ничего нет, нет и комфорта работы с учетной программой. Единственное, что хотелось бы это автоматизировать процесс создания подчиненных справочников периодических реквизитов.
Заметим еще, что некоторые поля можно проиндексировать для быстрого поиска по реквизиту (по Ctrl-3). Это даст возможность дополнительной сортировки, к уже имеющейся: для Кода по Ctrl-1 и для Наименования по Ctrl-2, при работе с данным справочником в режиме «Предприятия». Вот предлагаемый перечень таких полей (помеченных примечанием 3 в таблице):
– ИдентКод;
– ДатаРожд;
– ТабНом;
– ДатаПриема;
– ДатаУвольн;
– ЗарплатнСчет.
Для этого надо в свойствах реквизита, на вкладке «Дополнительные» выбрать поле «Сортировка».
Мы будем пытаться отслеживать наиболее существенные различия в российском и украинском учетах. Так, например, идентификационный код на Украине имеет 10 символов, а ИНН в России – 12. У нас он поставлен перед датой рождения потому, что в Украине по идентификационному коду можно вычислить день рождения и пол человека. Для ИНН подобный алгоритм мне не известен, поэтому он вынесен в отдельную группу реквизитов.
После ввода реквизитов, получим соответствующее дерево реквизитов для справочника «Сотрудники» в конфигураторе (рис. 1).
Теперь можно конструировать формы списка и элемента для нашего справочника. Выведем на основной форме диалога следующие группы реквизитов (см. табл.):
– Уникальные данные;
– Основные данные.
Остальные реквизиты вынесем в кнопочные формы (рис. 2).
Заметим, что периодические реквизиты у нас представлены в кнопочных полях, по которым вызывается соответствующий подчиненный справочник, включающий значения данного реквизита и время начала их действия.