Цель лекции: дать общее представление о справочниках и перечислениях ; рассмотреть модуль приложения и начать знакомство читателя со встроенным языком системы.
3.1. Справочники
Справочники в 1С:Предприятии 8 используются для организации хранения информации об однотипных объектах. Например, справочник Клиенты будет хранить данные о клиентах, справочник Сотрудники - о сотрудниках организации, Контрагенты - о контрагентах, Номенклатура - о товаро-материальных ценностях, Подразделения - о подразделениях организации. Справочник можно сравнить с обычной бумажной картотекой. Каждая конфигурация обычно содержит множество справочников.
Обратите внимание на то, что в режиме конфигурирования мы создаем структуру справочника, определяем формы, которые позволяют работать с ним, устанавливаем его связи с другими объектами конфигурации. А в режиме 1С:Предприятие, то есть - в пользовательском режиме - происходит наполнение справочника информацией. Эта особенность характерна и для других подобных объектов. Их структуру и особенности задает программист, а ввод в систему новых элементов осуществляет пользователь. Стоит отметить, что в случае со справочниками мы все же можем создавать его элементы в режиме конфигурирования. Это - так называемые предопределенные элементы, на которые обычно опираются какие-то алгоритмы разрабатываемой конфигурации. Пользователь не может удалить такие элементы - иначе нарушилась бы логика работы системы.
Давайте создадим новый справочник и рассмотрим особенности работы с ним. Пусть это будет справочник ФизическиеЛица. Как следует из названия, он предназначен для хранения сведений о физических лицах. Мы планируем хранить в этом справочнике персональные сведения о физических лицах.
Для того чтобы создать справочник, перейдем в ветвь ).
(рис 3.1) Окно редактирования справочника, закладка ОсновныеОкно редактирования объекта конфигурации имеет множество закладок, которые позволяют последовательно настраивать свойства объекта, редактировать его структуру. Обратите внимание на кнопки Назад и Далее, которые расположены в нижней части окна. Они предназначены для прохождения по вкладкам и настройки его свойств в правильной последовательности. Вы можете либо пользоваться этими кнопками, либо выбирать закладки вручную. Рассмотрим вкладки окна редактирования объекта. Сейчас мы не будем стремиться рассмотреть их все - позже, работая над конфигурацией, мы сможем увидеть особенности их использования.
Основные. Здесь расположены уже знакомые вам свойства Имя, Синоним, Комментарий. Они имеют тот же смысл, что и у других объектов.
)
(рис 3.2) Окно редактирования справочника, закладка ДанныеДля начала на закладке Данные нужно настроить длину кода и наименования элемента справочника.
Длина кода. 9-значный код способен вместить такое количество элементов, которого гарантированно хватит не только для нашей учебной конфигурации, да и для большинства реально используемых конфигураций. На практике длина кода бывает как меньше, так и больше 9. Код используется для идентификации элементов справочника и код каждого элемента уникален. Система сама следит за уникальностью кодов.
Длина наименования. Это свойство справочника обычно хранит краткое наименование элемента. В нашем случае в справочнике планируется хранить сведения о физических лицах, вполне логично в качестве наименования использовать какую-то комбинацию фамилии, имени и отчества физического лица. Будем использовать сокращенную форму, например, "Иванов И.И.", однако, фамилии могут быть довольно длинными, поэтому увеличим длину наименования до 30 символов.
Обратите внимание на то, что в реквизиты любого справочника входят, как минимум, код и наименование. То есть, если мы на данном этапе работы запустим систему в режиме 1С:Предприятие и попытаемся поработать со справочником, то набор данных для каждого из его элементов будет ограничен кодом и наименованием. На практике могут применяться подобные справочники, например, что-то вроде справочника Должности. Поля Наименование вполне хватает для того, чтобы сохранить название должности, а код используется в служебных целях.
Продолжаем настройку закладки Данные. Здесь можно найти два очень важных поля: Реквизиты и Табличные части.
вы можете видеть реквизит с уже настроенными свойствами.
(рис 3.3) Добавляем в справочник новый реквизитПеред нами реквизит Фамилия. Очевидно, что такой реквизит должен хранить фамилию физического лица в виде строки, длину строки можно ограничить 30-ю символами.
Добавим в справочник следующие реквизиты (табл. 3.1):
Реквизиты справочника ФизическиеЛица
| Имя реквизита |
Тип |
Параметры типа |
| Фамилия |
Строка |
Длина: 30 |
| Имя |
Строка |
Длина: 30 |
| Отчество |
Строка |
Длина: 30 |
| ДатаРождения |
Дата |
Состав даты: Дата |
| Пол |
ПеречислениеСсылка.Пол |
- |
| Район |
СправочникСсылка.Районы |
- |
В конце таблицы есть пара строк, которые могут вызвать у вас затруднения. Типов данных "Перечисление.Ссылка.Пол" и "Справочник.Ссылка.Районы" в системе нет. Их нужно создать самостоятельно, создав соответствующие объекты. Прежде чем создавать эти объекты, давайте поговорим о данных, которые они будут хранить.
Для указания пола сотрудника мы не случайно выбрали объект Перечисление. Дело в том, что при выборе пола мы ограничены двумя вариантами - либо мужской, либо женский. Почему бы не предоставить пользователю возможность вводить информацию о поле в виде строки, не используя перечисление? Предположим, мы дадим пользователю текстовое поле, в которое предложим ввести пол. Разные пользователи (да и один и тот же пользователь в разное время) введут в это поле разные значения. Это могут быть "М" и "Ж" или "муж." и "жен." или "мужской" и "женский". Можно подобрать и другие варианты. Как видите, в итоге получится, что если мы захотим, например, получить сведения о количестве физических лиц мужского пола, зарегистрированных в нашей базе, нам придется "пробираться" сквозь разнообразные наименования, введенные пользователями при заполнении базы.
Такая ситуация весьма нежелательна и неудобна. Поэтому везде, где только можно, следует применять средства, стандартизирующие ввод данных. В случае с закрытым (или редко пополняемым, причем, пополняемым администратором в конфигураторе) списком вариантов следует пользоваться перечислениями.
Реквизит Район мы будем использовать для указания района города, в котором проживает физическое лицо. Этот реквизит администрация автоматизируемого салона красоты будет использовать для планирования выездной работы мастеров. Для хранения этой информации мы применим справочник. Почему бы нам не использовать перечисление? Дело в том, что набор районов города обычно далек от закрытого. Поэтому логично предоставить пользователям самостоятельно формировать список районов и самостоятельно контролировать правильность его заполнения. Почему бы, в таком случае, не сделать реквизит Район в виде обычной текстовой строки?
Дело, снова, в том, что пользователи могут назвать один и тот же район по-разному, в итоге, возникнут сложности с автоматической обработкой данных о районах. То есть, например, если нам нужно будет выполнить задачу "подобрать мастеров, которые могут обслужить клиента, проживающего в районе Х", при использовании справочника Районы мы указываем системе конкретный элемент справочника, соответствующего району проживания клиента, а система подбирает по этому району мастеров. Если же сделать ввод данных о районах произвольным, неразбериха в базе гарантирована.
В следующих лекциях мы будем использовать этот справочник для хранения сведений не только о физических лицах-клиентах, но и о мастерах, доработав его.
Создадим два новых объекта - перечисление Пол и справочник Районы.
На рис 3.4 вы можете видеть окно настройки свойств перечисления Пол. Мы находимся на его вкладке Данные. Здесь мы можем добавлять значения перечисления.
(рис 3.4) Создание перечисления ПолДобавим два значения для перечисления: "Мужской" и "Женский". Окно свойств значения перечисления поддерживает лишь ввод имени, синонима и комментария, других свойств у значения перечисления нет. Перечисление может иметь формы, которые используются для вывода информации, макеты, которые применяются для формирования печатных форм.
В предыдущей лекции мы создали несколько подсистем. Начиная с созданного только что объекта, мы не будем уточнять, к какой именно подсистеме он относится. Мы вернемся к этому вопросу и укажем распределение объектов конфигурации по подсистемам в той лекции, где будут рассматриваться механизмы, основанные на использовании подсистем.
На рис 3.5 вы можете видеть окно настройки свойств только что созданного справочника.
(рис 3.5) Создание справочника РайоныОн не имеет дополнительных реквизитов, и всё, что мы для него настроили - это установили длину наименования, равную 100 символам.
Кстати, обратите внимание на окно Свойство - его можно использовать вместе с окном редактирования объекта конфигурации для правки свойств справочника.
На рис 3.6 вы можете видеть вкладку Данные для справочника ФизическиеЛица. Обратите внимание на окно, в котором отображаются свойства реквизита справочника.
(рис 3.6) Настройка реквизитов справочника ФизическиеЛицаСейчас пришло время опробовать только что созданный справочник ФизическиеЛица на практике. Запускаем 1С:Предприятие с нашей конфигурацией.
Выполним команду меню ).
(рис 3.7) Выбор справочника Физические лица в режиме 1С:ПредприятиеОбратите внимание на то, что в окне ). Сделаем по строке с его наименованием двойной щелчок или, выделив, нажмем ОК, или, опять же, выделив, нажмем клавишу Enter на клавиатуре.
(рис 3.8) Окно Справочник Физические лица
В настоящий момент справочник пуст. Мы можем видеть лишь строку, которая содержит заголовки, соответствующие реквизитам справочника. Создадим новый элемент справочника, для этого воспользуемся кнопкой вы можете видеть форму редактирования элемента справочника.
(рис 3.9) Окно редактирования элемента справочникаКак видите, здесь представлены все реквизиты, которые мы задавали в режиме конфигурирования.
Код присваивается элементу справочника автоматически. В данном случае мы можем его редактировать, но делать этого не будем. Эту возможность, кстати, весьма разумно заблокировать (или разработать особую процедуру смены номера, которая исключает случайную смену номера и т.д.).
В полях Наименование, Фамилия, Имя, Отчество, содержится, в соответствии со свойствами реквизитов справочника, обычные строковые значения. Мы можем вводить их вручную с клавиатуры. Если, предположим, мы вводим сведения о некоем Иванове Иване Ивановиче, то понятно, что содержимое поля Наименование (а там, при таком предположении должно быть Иванов И.И.) вполне можно сформировать автоматически на основе данных, введенных в поля Фамилия, Имя, Отчество. Эту удобную возможность мы реализуем позже, это - одна из многочисленных доработок справочника Физические лица.
Когда мы заполняем поле ).
(рис 3.10) Ввод датыЗаполняя поле Пол, мы нажимаем кнопку с тремя точками (она тоже называется Выбрать ) и выбираем нужное значение из выпадающего списка. Заполняя поле Район, мы, нажав на кнопку Выбрать, видим окно справочника Районы. Прежде чем мы сможем указать район в справочнике Физические лица, мы должны внести его в справочник Районы.
Создаем новый элемент справочника ), пусть это будет район с наименованием "Ленинский".
(рис 3.11) Ввод элемента одного справочника для использования в другомКогда ввод информации в элемент справочника Районы завершен, нажмем кнопку ОК в форме элемента справочника. Этот элемент появится в окне Справочник Районы, после чего мы сможем выбрать его двойным щелчком для подстановки в поле Район редактируемого элемента справочника Физические лица.
В табл. 3.2 вы можете видеть состав данных созданного элемента справочника Физические лица.
Данные, введенные в элемент справочника Физические лица
| Реквизит |
Содержимое |
| Наименование |
Иванов И.И. |
| Фамилия |
Иванов |
| Имя |
Иван |
| Отчество |
Иванович |
| Дата рождения |
27.02.1984 |
| Пол |
Мужской |
| Район |
Ленинский |
Заполнив поля окна редактирования элемента справочника, нажмем кнопку ОК. Данные будут записаны в базу, элемент появится в окне Справочник Физические лица.
Что еще мы можем сделать с элементом справочника на данном этапе работы? Осмотримся в окне списка справочника, в частности, посмотрим на меню ).
(рис 3.12) Меню ДействияДействие большинства команд, которые перечислены в меню Действия вполне понятно из их названий. Однако некоторые из них нуждаются в пояснениях.
Команда Удалить непосредственно позволяет удалить текущий элемент справочника непосредственно. При непосредственном удалении элемента справочника возможно нарушение ссылочной целостности информационной базы.
Команда Установить пометку удаления лишь помечает объект на удаление, не производя его удаления из базы.
Создадим в справочнике .
(рис 3.13) Пометка на удаление двух элементов справочникаДля того, чтобы попытаться удалить помеченные объекты, следует выбрать пункт меню Операции > Удаление помеченных объектов.
В появившемся окне (рис 3.14) следует запустить проверку нажатием на кнопку Контроль.
(рис 3.14) Проверка возможности удаления помеченных объектовПосле проведения контроля станет известно, какие объекты можно удалить, а какие - нельзя (рис 3.15).
(рис 3.15) Результат проверкиСистема сообщает нам о том, какие из помеченных объектов можно удалить (они отмечены зеленой галочкой) а какие - нет (они отмечены красной галочкой). Здесь же, выделив мышью удаляемый объект, можно узнать, где на него есть ссылки. Нажав на кнопку Удалить мы удаляем те объекты, которые ни к чему не "привязаны".
Нельзя удалить те объекты, которые привязаны к другим объектам. В нашем случае элемент справочника Физические лица содержит ссылку на элемент справочника Районы. Физическому лицу Иванову И.И. сопоставлен район Ленинский. Теперь если мы захотим удалить район Ленинский, система не даст нам этого сделать до тех пор, пока этот район "привязан" к одному из физических лиц.
Если вызвать меню Действия для объекта, помеченного на удаление, в нем можно будет найти пункт Снять пометку удаления.
Кнопка ).
(рис 3.16) Настройка вывода содержимого справочника в документНа рис 3.17 вы можете видеть результат выгрузки справочника в табличный документ. Работа с табличным документом напоминает работу в Microsoft Excel.
(рис 3.17) Настройка вывода содержимого справочника и документаКстати, вы обратили внимание на то, что наши справочники оснащены формами, а мы, работая в конфигураторе, никаких форм не создавали? Если да - тогда вам будет интересно узнать о том, как управлять поведением форм объектов. К тому же, напомним, что мы, работая в справочнике Физические лица, решили, что в нем не помешает настроить автоматическое заполнение поля Наименования на основе полей Фамилия, Имя, Отчество. Всем этим займемся в следующей лекции, а теперь - вернемся к константам и поговорим о программировании.
3.2. Hello World!
Лучший способ научиться программировать на новом для вас языке - начинать писать программы на нем. Для того, чтобы получить максимум пользы от разбора тех строк кода, которые мы здесь приводим, постарайтесь не копировать их из документа в редактор кода. Программа при таком подходе будет работать, но вы недополучите очень важный и ценный опыт самостоятельного ввода текстов программ. Поверьте, время, затраченное на самостоятельный набор текстов, оправдает себя.
Сейчас мы рассмотрим приемы работы с константами из встроенного языка. Напишем нашу первую программу, классическую "Hello World!" в стиле 1С:Предприятие 8. Написание такой простой программы, однако, позволяет рассмотреть базовые операции по работе с новым языком программирования и подготовиться к более серьезным делам. Прежде чем начинать писать нашу первую программу, рассмотрим виды модулей, которые существуют в системе.
3.3. Виды модулей
Как вы уже знаете, программный код в разрабатываемой конфигурации хранится в модулях. Причем, в системе существует несколько видов модулей.
Модули форм. К настоящему моменту вы уже должны были обратить внимание на существование модулей форм. В предыдущей лекции мы создали общую форму констант и могли наблюдать ее пустой модуль в редакторе форм. Эти модули используются, в основном, для организации работы с формой. Например, если нам нужно реализовать возможность автоматического заполнения одних полей на основании данных, введенных в другие, то нам нужно работать именно с модулем формы. Модули включают в себя процедуры, функции, объявления переменных. Получить доступ к этим модулям можно в редакторе форм.
Модули набора записей. Они используются в регистрах.
Модули объектов. Эти модули соответствуют отдельным объектам системы и позволяют организовывать работу с объектом. Получить доступ к модулю объекта можно, например, щелкнув правой кнопкой мыши по значку объекта в дереве конфигурации и выбрав в появившемся контекстном меню пункт Открыть модуль объекта.
Общие модули. Эти модули создают в ветви Общие модули дерева конфигурации. Они используются в самых разных целях. В частности для того, чтобы сделать некоторые процедуры общими для различных объектов конфигурации. Например, в нескольких объектах нужно выполнить одинаковую проверку данных, введенных пользователем. Если для этого применяется один и тот же код - вполне логично вынести этот код в общий модуль.
модуль сеанса можно открыть, вызвав контекстное меню конфигурации (рис 3.18).
(рис 3.18) Контекстное меню конфигурацииМодуль сеанса. Используется для установки параметров сеанса.
Модуль внешнего соединения. Используется для работы в режиме внешнего соединения.
Модуль приложения. Хранит обработчики событий, которые происходят при начале и при окончании работы системы. Если мы хотим, чтобы некоторые действия выполнились автоматически при начале работы пользователя с информационной базой, нам можно воспользоваться именно этим модулем.
Программный код в модулях оформлен в виде процедур и функций.
3.4. Процедуры и функции
Процедуры и функции используются для логического структурирования программного кода. Процедура отличается от функции тем, что функция, будучи вызванной, возвращает в точку вызова некоторое значение. То есть можно сказать, что функцию вызывают для того, чтобы получить от нее некоторое значение, с которым потом можно работать в коде основной программы. Процедура же ориентирована на выполнение некоторых действий, а не на возврат значений.
Для объявления процедуры используется ключевое слово Процедура. Шаблон процедуры выглядит так:
Процедура ИмяПроцедуры(ИмяПараметра1, ИмяПараметра2, …)
//Тело процедуры, команды на встроенном языке
КонецПроцедуры
Для объявления функции используется ключевое слово Функция. Шаблон функции выглядит так:
Функция ИмяФункции(ИмяПараметра1, ИмяПараметра 2, …)
//Тело функции, команды на встроенном языке
Возврат(ВозвращаемоеЗначение);
КонецФункции
Обратите внимание на то, что команды в теле процедур и функций разделяются символом ";" - точка с запятой. Имя процедур и функций строится способом, похожим на способ построения имен объектов. Начинаться имя должно с буквы или с символа подчеркивания "_". В состав имени процедуры или функции могут входить буквы, цифры и символы подчеркивания.
3.5. Вывод приветствия при загрузке системы
Как вы помните, в предыдущей лекции мы создавали константу для того, чтобы вывести текст, хранящийся в ней, в качестве приветствия в начале работы пользователя с информационной базой. Код программы, которая будет выполнять это действие, мы будем хранить в модуле приложения. Откроем модуль приложения командой контекстного меню конфигурации ).
(рис 3.19) Модуль приложенияВ настоящий момент модуль пуст. Мы можем добавить в него процедуры-обработчики событий, предусмотренные для данного модуля. Для добавления таких процедур нужно либо воспользоваться командой ) содержит список предопределенных процедур-обработчиков событий.
(рис 3.20) Выбор имени процедурыЗдесь можно увидеть несколько имен процедур. В частности, нас интересует процедура ПриНачалеРаботыСистемы. Она выполняется при начале работы системы, в частности - при отображении главного окна программы. Здесь, в этой процедуре, мы можем программно открывать формы, выводить сообщения, выполнять другие необходимые действия.
Нас устраивает эта процедура, поэтому мы установим выделение на строке ).
(рис 3.21) Процедура добавлена в тело модуляТело процедуры содержит текст:
// Вставить содержимое обработчика
Этот текст представляет собой комментарий. Комбинация символов "//" означает комментарий.
Теперь нам нужно вставить в тело модуля программный код, который выведет сообщение при начале работы пользователя с системой. Первый вопрос, который нам нужно решить, заключается в том, чтобы определить, куда именно должно выводиться сообщение. Одно из решений этого вопроса заключается в использовании окна служебных сообщений. Для того, чтобы вывести в него какой-нибудь текст, используют команду Сообщить. Например, такая команда Сообщить ("Привет!"); выведет в окно служебных сообщений текст "Привет!".
Теперь нам нужно узнать, как вывести с помощью команды Сообщить содержимое нашей константы. Для того, чтобы выводить содержимое констант мы можем воспользоваться такой конструкцией:
Константы.ИмяКонстанты.Получить();
При выполнении этого кода в точке его вызова окажется содержимое константы. В нашем случае это - строка, содержащая текст приветствия. Напомним, что наша константа называется ТекстСообщения. В итоге, выходим на такой код, выводящий значение нашей константы:
Константы.ТекстСообщения.Получить();
Данный код берет выводимое значение из базы данных.
Вот как выглядит полный текст модуля, который выводит приветствие при начале работы системы:
Процедура ПриНачалеРаботыСистемы()
Сообщить(Константы.ТекстСообщения.Получить());
КонецПроцедуры
Тот же текст вы можете видеть на рис 3.22.
(рис 3.22) Код модуля, выводящий приветствие при начале работы системыОбратите внимание на то, что около заголовка процедуры можно видеть знак "-" - он указывает на то, что процедура в настоящий момент развернута и мы можем ее свернуть (сгруппировать) при желании. Свернутую процедуру вы можете видеть на рис 3.23.
(рис 3.23) Свернутый код модуляГруппировка нужна для удобства - если в модуле много процедур и функций и они не сгруппированы, с ними не очень удобно работать. А если они сгруппированы, разворачивать можно лишь те процедуры и функции, с которыми вы в данный момент работаете.
Теперь все готово для того, чтобы опробовать только что написанный код на практике. Обновим базу данных и откроем нашу конфигурацию в режиме 1С:Предприятие. Вот, что у нас получилось (рис 3.24).
(рис 3.24) Сообщение, взятое из константыТеперь если мы захотим изменить текст приветствия, которое видит пользователь, нам будет достаточно изменить значение константы. При следующем запуске нашей конфигурации в режиме 1С:Предприятие текст приветствия будет соответствовать текущему значению, хранящемуся в константе.
3.6. Выводы
В этой лекции мы познакомились со справочниками, перечислениями, начали рассматривать работу со встроенным языком системы. Далее мы продолжим работу над конфигурацией.
Цель лекции: дать общее представление о справочниках и перечислениях ; рассмотреть модуль приложения и начать знакомство читателя со встроенным языком системы.
3.1. Справочники
Справочники в 1С:Предприятии 8 используются для организации хранения информации об однотипных объектах. Например, справочник Клиенты будет хранить данные о клиентах, справочник Сотрудники - о сотрудниках организации, Контрагенты - о контрагентах, Номенклатура - о товаро-материальных ценностях, Подразделения - о подразделениях организации. Справочник можно сравнить с обычной бумажной картотекой. Каждая конфигурация обычно содержит множество справочников.
Обратите внимание на то, что в режиме конфигурирования мы создаем структуру справочника, определяем формы, которые позволяют работать с ним, устанавливаем его связи с другими объектами конфигурации. А в режиме 1С:Предприятие, то есть - в пользовательском режиме - происходит наполнение справочника информацией. Эта особенность характерна и для других подобных объектов. Их структуру и особенности задает программист, а ввод в систему новых элементов осуществляет пользователь. Стоит отметить, что в случае со справочниками мы все же можем создавать его элементы в режиме конфигурирования. Это - так называемые предопределенные элементы, на которые обычно опираются какие-то алгоритмы разрабатываемой конфигурации. Пользователь не может удалить такие элементы - иначе нарушилась бы логика работы системы.
Давайте создадим новый справочник и рассмотрим особенности работы с ним. Пусть это будет справочник ФизическиеЛица. Как следует из названия, он предназначен для хранения сведений о физических лицах. Мы планируем хранить в этом справочнике персональные сведения о физических лицах.
Для того чтобы создать справочник, перейдем в ветвь ).
(рис 3.1) Окно редактирования справочника, закладка ОсновныеОкно редактирования объекта конфигурации имеет множество закладок, которые позволяют последовательно настраивать свойства объекта, редактировать его структуру. Обратите внимание на кнопки Назад и Далее, которые расположены в нижней части окна. Они предназначены для прохождения по вкладкам и настройки его свойств в правильной последовательности. Вы можете либо пользоваться этими кнопками, либо выбирать закладки вручную. Рассмотрим вкладки окна редактирования объекта. Сейчас мы не будем стремиться рассмотреть их все - позже, работая над конфигурацией, мы сможем увидеть особенности их использования.
Основные. Здесь расположены уже знакомые вам свойства Имя, Синоним, Комментарий. Они имеют тот же смысл, что и у других объектов.
)
(рис 3.2) Окно редактирования справочника, закладка ДанныеДля начала на закладке Данные нужно настроить длину кода и наименования элемента справочника.
Длина кода. 9-значный код способен вместить такое количество элементов, которого гарантированно хватит не только для нашей учебной конфигурации, да и для большинства реально используемых конфигураций. На практике длина кода бывает как меньше, так и больше 9. Код используется для идентификации элементов справочника и код каждого элемента уникален. Система сама следит за уникальностью кодов.
Длина наименования. Это свойство справочника обычно хранит краткое наименование элемента. В нашем случае в справочнике планируется хранить сведения о физических лицах, вполне логично в качестве наименования использовать какую-то комбинацию фамилии, имени и отчества физического лица. Будем использовать сокращенную форму, например, "Иванов И.И.", однако, фамилии могут быть довольно длинными, поэтому увеличим длину наименования до 30 символов.
Обратите внимание на то, что в реквизиты любого справочника входят, как минимум, код и наименование. То есть, если мы на данном этапе работы запустим систему в режиме 1С:Предприятие и попытаемся поработать со справочником, то набор данных для каждого из его элементов будет ограничен кодом и наименованием. На практике могут применяться подобные справочники, например, что-то вроде справочника Должности. Поля Наименование вполне хватает для того, чтобы сохранить название должности, а код используется в служебных целях.
Продолжаем настройку закладки Данные. Здесь можно найти два очень важных поля: Реквизиты и Табличные части.
вы можете видеть реквизит с уже настроенными свойствами.
(рис 3.3) Добавляем в справочник новый реквизитПеред нами реквизит Фамилия. Очевидно, что такой реквизит должен хранить фамилию физического лица в виде строки, длину строки можно ограничить 30-ю символами.
Добавим в справочник следующие реквизиты (табл. 3.1):
Реквизиты справочника ФизическиеЛица
| Имя реквизита |
Тип |
Параметры типа |
| Фамилия |
Строка |
Длина: 30 |
| Имя |
Строка |
Длина: 30 |
| Отчество |
Строка |
Длина: 30 |
| ДатаРождения |
Дата |
Состав даты: Дата |
| Пол |
ПеречислениеСсылка.Пол |
- |
| Район |
СправочникСсылка.Районы |
- |
В конце таблицы есть пара строк, которые могут вызвать у вас затруднения. Типов данных "Перечисление.Ссылка.Пол" и "Справочник.Ссылка.Районы" в системе нет. Их нужно создать самостоятельно, создав соответствующие объекты. Прежде чем создавать эти объекты, давайте поговорим о данных, которые они будут хранить.
Для указания пола сотрудника мы не случайно выбрали объект Перечисление. Дело в том, что при выборе пола мы ограничены двумя вариантами - либо мужской, либо женский. Почему бы не предоставить пользователю возможность вводить информацию о поле в виде строки, не используя перечисление? Предположим, мы дадим пользователю текстовое поле, в которое предложим ввести пол. Разные пользователи (да и один и тот же пользователь в разное время) введут в это поле разные значения. Это могут быть "М" и "Ж" или "муж." и "жен." или "мужской" и "женский". Можно подобрать и другие варианты. Как видите, в итоге получится, что если мы захотим, например, получить сведения о количестве физических лиц мужского пола, зарегистрированных в нашей базе, нам придется "пробираться" сквозь разнообразные наименования, введенные пользователями при заполнении базы.
Такая ситуация весьма нежелательна и неудобна. Поэтому везде, где только можно, следует применять средства, стандартизирующие ввод данных. В случае с закрытым (или редко пополняемым, причем, пополняемым администратором в конфигураторе) списком вариантов следует пользоваться перечислениями.
Реквизит Район мы будем использовать для указания района города, в котором проживает физическое лицо. Этот реквизит администрация автоматизируемого салона красоты будет использовать для планирования выездной работы мастеров. Для хранения этой информации мы применим справочник. Почему бы нам не использовать перечисление? Дело в том, что набор районов города обычно далек от закрытого. Поэтому логично предоставить пользователям самостоятельно формировать список районов и самостоятельно контролировать правильность его заполнения. Почему бы, в таком случае, не сделать реквизит Район в виде обычной текстовой строки?
Дело, снова, в том, что пользователи могут назвать один и тот же район по-разному, в итоге, возникнут сложности с автоматической обработкой данных о районах. То есть, например, если нам нужно будет выполнить задачу "подобрать мастеров, которые могут обслужить клиента, проживающего в районе Х", при использовании справочника Районы мы указываем системе конкретный элемент справочника, соответствующего району проживания клиента, а система подбирает по этому району мастеров. Если же сделать ввод данных о районах произвольным, неразбериха в базе гарантирована.
В следующих лекциях мы будем использовать этот справочник для хранения сведений не только о физических лицах-клиентах, но и о мастерах, доработав его.
Создадим два новых объекта - перечисление Пол и справочник Районы.
На рис 3.4 вы можете видеть окно настройки свойств перечисления Пол. Мы находимся на его вкладке Данные. Здесь мы можем добавлять значения перечисления.
(рис 3.4) Создание перечисления ПолДобавим два значения для перечисления: "Мужской" и "Женский". Окно свойств значения перечисления поддерживает лишь ввод имени, синонима и комментария, других свойств у значения перечисления нет. Перечисление может иметь формы, которые используются для вывода информации, макеты, которые применяются для формирования печатных форм.
В предыдущей лекции мы создали несколько подсистем. Начиная с созданного только что объекта, мы не будем уточнять, к какой именно подсистеме он относится. Мы вернемся к этому вопросу и укажем распределение объектов конфигурации по подсистемам в той лекции, где будут рассматриваться механизмы, основанные на использовании подсистем.
На рис 3.5 вы можете видеть окно настройки свойств только что созданного справочника.
(рис 3.5) Создание справочника РайоныОн не имеет дополнительных реквизитов, и всё, что мы для него настроили - это установили длину наименования, равную 100 символам.
Кстати, обратите внимание на окно Свойство - его можно использовать вместе с окном редактирования объекта конфигурации для правки свойств справочника.
На рис 3.6 вы можете видеть вкладку Данные для справочника ФизическиеЛица. Обратите внимание на окно, в котором отображаются свойства реквизита справочника.
(рис 3.6) Настройка реквизитов справочника ФизическиеЛицаСейчас пришло время опробовать только что созданный справочник ФизическиеЛица на практике. Запускаем 1С:Предприятие с нашей конфигурацией.
Выполним команду меню ).
(рис 3.7) Выбор справочника Физические лица в режиме 1С:ПредприятиеОбратите внимание на то, что в окне ). Сделаем по строке с его наименованием двойной щелчок или, выделив, нажмем ОК, или, опять же, выделив, нажмем клавишу Enter на клавиатуре.
(рис 3.8) Окно Справочник Физические лицаВ настоящий момент справочник пуст. Мы можем видеть лишь строку, которая содержит заголовки, соответствующие реквизитам справочника. Создадим новый элемент справочника, для этого воспользуемся кнопкой вы можете видеть форму редактирования элемента справочника.
(рис 3.9) Окно редактирования элемента справочникаКак видите, здесь представлены все реквизиты, которые мы задавали в режиме конфигурирования.
Код присваивается элементу справочника автоматически. В данном случае мы можем его редактировать, но делать этого не будем. Эту возможность, кстати, весьма разумно заблокировать (или разработать особую процедуру смены номера, которая исключает случайную смену номера и т.д.).
В полях Наименование, Фамилия, Имя, Отчество, содержится, в соответствии со свойствами реквизитов справочника, обычные строковые значения. Мы можем вводить их вручную с клавиатуры. Если, предположим, мы вводим сведения о некоем Иванове Иване Ивановиче, то понятно, что содержимое поля Наименование (а там, при таком предположении должно быть Иванов И.И.) вполне можно сформировать автоматически на основе данных, введенных в поля Фамилия, Имя, Отчество. Эту удобную возможность мы реализуем позже, это - одна из многочисленных доработок справочника Физические лица.
Когда мы заполняем поле ).
(рис 3.10) Ввод датыЗаполняя поле Пол, мы нажимаем кнопку с тремя точками (она тоже называется Выбрать ) и выбираем нужное значение из выпадающего списка. Заполняя поле Район, мы, нажав на кнопку Выбрать, видим окно справочника Районы. Прежде чем мы сможем указать район в справочнике Физические лица, мы должны внести его в справочник Районы.
Создаем новый элемент справочника ), пусть это будет район с наименованием "Ленинский".
(рис 3.11) Ввод элемента одного справочника для использования в другомКогда ввод информации в элемент справочника Районы завершен, нажмем кнопку ОК в форме элемента справочника. Этот элемент появится в окне Справочник Районы, после чего мы сможем выбрать его двойным щелчком для подстановки в поле Район редактируемого элемента справочника Физические лица.
В табл. 3.2 вы можете видеть состав данных созданного элемента справочника Физические лица.
Данные, введенные в элемент справочника Физические лица
| Реквизит |
Содержимое |
| Наименование |
Иванов И.И. |
| Фамилия |
Иванов |
| Имя |
Иван |
| Отчество |
Иванович |
| Дата рождения |
27.02.1984 |
| Пол |
Мужской |
| Район |
Ленинский |
Заполнив поля окна редактирования элемента справочника, нажмем кнопку ОК. Данные будут записаны в базу, элемент появится в окне Справочник Физические лица.
Что еще мы можем сделать с элементом справочника на данном этапе работы? Осмотримся в окне списка справочника, в частности, посмотрим на меню ).
(рис 3.12) Меню ДействияДействие большинства команд, которые перечислены в меню Действия вполне понятно из их названий. Однако некоторые из них нуждаются в пояснениях.
Команда Удалить непосредственно позволяет удалить текущий элемент справочника непосредственно. При непосредственном удалении элемента справочника возможно нарушение ссылочной целостности информационной базы.
Команда Установить пометку удаления лишь помечает объект на удаление, не производя его удаления из базы.
Создадим в справочнике .
(рис 3.13) Пометка на удаление двух элементов справочникаДля того, чтобы попытаться удалить помеченные объекты, следует выбрать пункт меню Операции > Удаление помеченных объектов.
В появившемся окне (рис 3.14) следует запустить проверку нажатием на кнопку Контроль.
(рис 3.14) Проверка возможности удаления помеченных объектовПосле проведения контроля станет известно, какие объекты можно удалить, а какие - нельзя (рис 3.15).
(рис 3.15) Результат проверкиСистема сообщает нам о том, какие из помеченных объектов можно удалить (они отмечены зеленой галочкой) а какие - нет (они отмечены красной галочкой). Здесь же, выделив мышью удаляемый объект, можно узнать, где на него есть ссылки. Нажав на кнопку Удалить мы удаляем те объекты, которые ни к чему не "привязаны".
Нельзя удалить те объекты, которые привязаны к другим объектам. В нашем случае элемент справочника Физические лица содержит ссылку на элемент справочника Районы. Физическому лицу Иванову И.И. сопоставлен район Ленинский. Теперь если мы захотим удалить район Ленинский, система не даст нам этого сделать до тех пор, пока этот район "привязан" к одному из физических лиц.
Если вызвать меню Действия для объекта, помеченного на удаление, в нем можно будет найти пункт Снять пометку удаления.
Кнопка ).
(рис 3.16) Настройка вывода содержимого справочника в документНа рис 3.17 вы можете видеть результат выгрузки справочника в табличный документ. Работа с табличным документом напоминает работу в Microsoft Excel.
(рис 3.17) Настройка вывода содержимого справочника и документаКстати, вы обратили внимание на то, что наши справочники оснащены формами, а мы, работая в конфигураторе, никаких форм не создавали? Если да - тогда вам будет интересно узнать о том, как управлять поведением форм объектов. К тому же, напомним, что мы, работая в справочнике Физические лица, решили, что в нем не помешает настроить автоматическое заполнение поля Наименования на основе полей Фамилия, Имя, Отчество. Всем этим займемся в следующей лекции, а теперь - вернемся к константам и поговорим о программировании.
3.2. Hello World!
Лучший способ научиться программировать на новом для вас языке - начинать писать программы на нем. Для того, чтобы получить максимум пользы от разбора тех строк кода, которые мы здесь приводим, постарайтесь не копировать их из документа в редактор кода. Программа при таком подходе будет работать, но вы недополучите очень важный и ценный опыт самостоятельного ввода текстов программ. Поверьте, время, затраченное на самостоятельный набор текстов, оправдает себя.
Сейчас мы рассмотрим приемы работы с константами из встроенного языка. Напишем нашу первую программу, классическую "Hello World!" в стиле 1С:Предприятие 8. Написание такой простой программы, однако, позволяет рассмотреть базовые операции по работе с новым языком программирования и подготовиться к более серьезным делам. Прежде чем начинать писать нашу первую программу, рассмотрим виды модулей, которые существуют в системе.
3.3. Виды модулей
Как вы уже знаете, программный код в разрабатываемой конфигурации хранится в модулях. Причем, в системе существует несколько видов модулей.
Модули форм. К настоящему моменту вы уже должны были обратить внимание на существование модулей форм. В предыдущей лекции мы создали общую форму констант и могли наблюдать ее пустой модуль в редакторе форм. Эти модули используются, в основном, для организации работы с формой. Например, если нам нужно реализовать возможность автоматического заполнения одних полей на основании данных, введенных в другие, то нам нужно работать именно с модулем формы. Модули включают в себя процедуры, функции, объявления переменных. Получить доступ к этим модулям можно в редакторе форм.
Модули набора записей. Они используются в регистрах.
Модули объектов. Эти модули соответствуют отдельным объектам системы и позволяют организовывать работу с объектом. Получить доступ к модулю объекта можно, например, щелкнув правой кнопкой мыши по значку объекта в дереве конфигурации и выбрав в появившемся контекстном меню пункт Открыть модуль объекта.
Общие модули. Эти модули создают в ветви Общие модули дерева конфигурации. Они используются в самых разных целях. В частности для того, чтобы сделать некоторые процедуры общими для различных объектов конфигурации. Например, в нескольких объектах нужно выполнить одинаковую проверку данных, введенных пользователем. Если для этого применяется один и тот же код - вполне логично вынести этот код в общий модуль.
модуль сеанса можно открыть, вызвав контекстное меню конфигурации (рис 3.18).
(рис 3.18) Контекстное меню конфигурацииМодуль сеанса. Используется для установки параметров сеанса.
Модуль внешнего соединения. Используется для работы в режиме внешнего соединения.
Модуль приложения. Хранит обработчики событий, которые происходят при начале и при окончании работы системы. Если мы хотим, чтобы некоторые действия выполнились автоматически при начале работы пользователя с информационной базой, нам можно воспользоваться именно этим модулем.
Программный код в модулях оформлен в виде процедур и функций.
3.4. Процедуры и функции
Процедуры и функции используются для логического структурирования программного кода. Процедура отличается от функции тем, что функция, будучи вызванной, возвращает в точку вызова некоторое значение. То есть можно сказать, что функцию вызывают для того, чтобы получить от нее некоторое значение, с которым потом можно работать в коде основной программы. Процедура же ориентирована на выполнение некоторых действий, а не на возврат значений.
Для объявления процедуры используется ключевое слово Процедура. Шаблон процедуры выглядит так:
Процедура ИмяПроцедуры(ИмяПараметра1, ИмяПараметра2, …)
//Тело процедуры, команды на встроенном языке
КонецПроцедуры
Для объявления функции используется ключевое слово Функция. Шаблон функции выглядит так:
Функция ИмяФункции(ИмяПараметра1, ИмяПараметра 2, …)
//Тело функции, команды на встроенном языке
Возврат(ВозвращаемоеЗначение);
КонецФункции
Обратите внимание на то, что команды в теле процедур и функций разделяются символом ";" - точка с запятой. Имя процедур и функций строится способом, похожим на способ построения имен объектов. Начинаться имя должно с буквы или с символа подчеркивания "_". В состав имени процедуры или функции могут входить буквы, цифры и символы подчеркивания.
3.5. Вывод приветствия при загрузке системы
Как вы помните, в предыдущей лекции мы создавали константу для того, чтобы вывести текст, хранящийся в ней, в качестве приветствия в начале работы пользователя с информационной базой. Код программы, которая будет выполнять это действие, мы будем хранить в модуле приложения. Откроем модуль приложения командой контекстного меню конфигурации ).
(рис 3.19) Модуль приложенияВ настоящий момент модуль пуст. Мы можем добавить в него процедуры-обработчики событий, предусмотренные для данного модуля. Для добавления таких процедур нужно либо воспользоваться командой ) содержит список предопределенных процедур-обработчиков событий.
(рис 3.20) Выбор имени процедурыЗдесь можно увидеть несколько имен процедур. В частности, нас интересует процедура ПриНачалеРаботыСистемы. Она выполняется при начале работы системы, в частности - при отображении главного окна программы. Здесь, в этой процедуре, мы можем программно открывать формы, выводить сообщения, выполнять другие необходимые действия.
Нас устраивает эта процедура, поэтому мы установим выделение на строке ).
(рис 3.21) Процедура добавлена в тело модуляТело процедуры содержит текст:
// Вставить содержимое обработчика
Этот текст представляет собой комментарий. Комбинация символов "//" означает комментарий.
Теперь нам нужно вставить в тело модуля программный код, который выведет сообщение при начале работы пользователя с системой. Первый вопрос, который нам нужно решить, заключается в том, чтобы определить, куда именно должно выводиться сообщение. Одно из решений этого вопроса заключается в использовании окна служебных сообщений. Для того, чтобы вывести в него какой-нибудь текст, используют команду Сообщить. Например, такая команда Сообщить ("Привет!"); выведет в окно служебных сообщений текст "Привет!".
Теперь нам нужно узнать, как вывести с помощью команды Сообщить содержимое нашей константы. Для того, чтобы выводить содержимое констант мы можем воспользоваться такой конструкцией:
Константы.ИмяКонстанты.Получить();
При выполнении этого кода в точке его вызова окажется содержимое константы. В нашем случае это - строка, содержащая текст приветствия. Напомним, что наша константа называется ТекстСообщения. В итоге, выходим на такой код, выводящий значение нашей константы:
Константы.ТекстСообщения.Получить();
Данный код берет выводимое значение из базы данных.
Вот как выглядит полный текст модуля, который выводит приветствие при начале работы системы:
Процедура ПриНачалеРаботыСистемы()
Сообщить(Константы.ТекстСообщения.Получить());
КонецПроцедуры
Тот же текст вы можете видеть на рис 3.22.
(рис 3.22) Код модуля, выводящий приветствие при начале работы системыОбратите внимание на то, что около заголовка процедуры можно видеть знак "-" - он указывает на то, что процедура в настоящий момент развернута и мы можем ее свернуть (сгруппировать) при желании. Свернутую процедуру вы можете видеть на рис 3.23.
(рис 3.23) Свернутый код модуляГруппировка нужна для удобства - если в модуле много процедур и функций и они не сгруппированы, с ними не очень удобно работать. А если они сгруппированы, разворачивать можно лишь те процедуры и функции, с которыми вы в данный момент работаете.
Теперь все готово для того, чтобы опробовать только что написанный код на практике. Обновим базу данных и откроем нашу конфигурацию в режиме 1С:Предприятие. Вот, что у нас получилось (рис 3.24).
(рис 3.24) Сообщение, взятое из константыТеперь если мы захотим изменить текст приветствия, которое видит пользователь, нам будет достаточно изменить значение константы. При следующем запуске нашей конфигурации в режиме 1С:Предприятие текст приветствия будет соответствовать текущему значению, хранящемуся в константе.
3.6. Выводы
В этой лекции мы познакомились со справочниками, перечислениями, начали рассматривать работу со встроенным языком системы. Далее мы продолжим работу над конфигурацией.