Атрибуты в 1с это
Первое что меня поразило при знакомстве с 1С – это отсутствие ООП. Никаких классов, наследований, закрытых методов. А ведь любой код должен быть логически структурирован. А классы - это то, что позволят это сделать с наименьшими нервами.
Потом, поработав с 1С, понял, что объекты конечно есть. Одни предопределенные (вроде «Документы», «Регистр сведений»), а другие зависят от фантазии программиста («Обработки»). Конечно, нет полиморфизма, нет наследования, но объектную модель построить можно.
Только есть другая проблема: большинство 1С-программистов все пишут в «процедурном стиле». Язык сам по себе толкает создать общий модуль. Потом поместить в этот модуль кучу процедур для обработки данных и поддерживать все это «спагетти» из вызова процедур.
Похожая проблема наблюдается в Delphi. Там тоже программист может ничего не знать про ООП и писать приложения. Никакого разделения на классы, весь код зачастую помещается в модуль формы. Но плюс Delphi в том, что с опытом все приходит, т.к. в книжках объектная модель пропагандируется.
Рассмотрим 1С в объектно-ориентированном подходе. Предопределенные объекты (Документ, Регистр. ) содержат код 3-х типов:
- «Модуль объекта» - Код отвечает за конкретный экземпляр объекта, а вернее обработку данных этого объекта.
- «Модуль формы» - Код отвечает за обработку действий пользователя.
- «Модуль менеджера» - Код отвечает за операции над определенным типом объекта, без привязки к конкретному экземпляру. В обычных языках это зовется «статические методы»
Все процедуры и функции в этих модулях можно воспринимать как методы класса. Область видимости процедур или функций регламентируется ключевым словом «Экспорт» (здравствуй инкапсуляция). Правда, реквизиты нельзя сделать закрытыми, но это обходится созданием глобальных переменных в самом модуле.
А существование «модуля формы» - это вообще фишка 1С, которой можно гордиться. Этот модуль позволяет отделить код отвечающий за обработку действий пользователя и код который обрабатывает данные (Ни дать ни взять MVC).
Только проблема в том, что большинство разработчиков в модуль формы «суют» код, отвечающий за общую логику работы с данными. Сам грешен. По-моему, разработчикам платформы 1С не мешает в «модуль формы» добавить быстрый вызов «модуля объекта» (например через контекстное меню).
Теперь про объекты, созданные самим программистом. На infostart встречал различные статьи о эмуляции объектно-ориентированной модели. Но согласитесь, манипуляция со структурами для хранения данных – занятие муторное и неинтуитивное. Я считаю, что лучшее решение, это воспринимать «обработки» как описание собственных классов.
Наглядный пример. В «Списке значений» мне не нравится диалог, вызываемый методом «ОтметитьЭлементы». Не хватает кнопок, которые выделяли (или снимали выделение) со всех пунктов. И вот обработка СписокЗначенийРас как раз и дает такой диалог. Добавляем обработку в конфигуратор, а потом вызываем:
СписокЗначенийРас = Обработки . СписокЗначенийРас . Создать ();
СписокЗначенийРас . Добавить ( "Пример1" );
СписокЗначенийРас . Добавить ( "Пример2" );
Если СписокЗначенийРас . ОтметитьЭлементы () тогда
СписокЗначенийРас . Данные . ОтметитьЭлементы (); // а это стандартный диалог
КонецЕсли;
К сожалению, наследования в 1С нет. Поэтому методы и свойства которые есть у СпискаЗначений надо либо дублировать в обработке или обращаться к реквизиту который хранит оригинальный список значений (в моем случае это СписокЗначенийРас.Данные)
Теперь переходим в конфигуратор. Находим обработку СписокЗначенийРас и, вызвав на нем контекстное меню, переходим в «модуль менеджера». Добавляем следующую функцию.
// Устанавливает или снимает (интерактивно) пометки у элементов списка значений.
// Заголовок - Заголовок окна диалога
// РабочиеДанные - список значений
Функция ОтметитьЭлементы ( Заголовок =Неопределено, РабочиеДанные ) Экспорт
Результат = Ложь;
ФормаОЭ = ПолучитьФорму ( "ФормаОтметитьЭлементы" );
ФормаОЭ . ПрочитатьДанные ( РабочиеДанные );
ФормаОЭ . ЧитатьДанныеПриОткрытие = Ложь;
Если Заголовок <> Неопределено тогда
ФормаОЭ . Заголовок = Заголовок ;
КонецЕсли;
РезультатФормы = ФормаОЭ . ОткрытьМодально ();
Результат = ( РезультатФормы = КодВозвратаДиалога . ОК );
Возврат Результат ;
КонецФункции
Теперь мы можем вызвать диалог еще проще.
сзДанные = Новый СписокЗначений ;
сзДанные . Добавить ( "Пример_1" );
сзДанные . Добавить ( "Пример_2" );
Обработки . СписокЗначенийРас . ОтметитьЭлементы ( "Заголовок" , сзДанные );
Чем не статический класс?
В подходе использования обработок как классов есть несколько недостатков.
- Нет наследования. Хочется возможности указывать родителем хотя бы простейшие типы (СписокЗначений, ТаблицаЗначений, Дата, Строка…)
- Класс-обработка показывается в общем списке обработок. Хотелось бы отдельный тип объектов.
На этом пока все. Надеюсь, заметка позволила вам разглядеть в 1С зачатки ООП :)
Форум
Конфигуратор
Все начинается с запуска Конфигуратора. Программы для 1С:Предприятие называются "конфигурациями" и создаются они в специальном режиме для разработчика "Конфигуратор". Обычные пользователи работают в режиме "Предприятие".
Объекты, свойства и методы
Самое главное понятие 1С -- это "объект". Объект -- это элемент реального мира. Объектом может быть все что угодно: компьютер, облако, кошка. Но нас интересуют только те объекты, которые имеются в офисной деятельности предприятия: документы, отчеты, справочники. Программа для 1С представляется как совокупность объектов, взаимосвязанных между собой, т.е. конфигурация объектов. Например, документ "Приказ о приеме на работу", справочник "Сотрудники", отчет "Сотрудники, принятые за период".
У объектов имеются некоторые атрибуты (свойства, реквизиты). Например, сотрудник имеет фамилию, имя, отчество, оклад, табельный номер. Приказ о приеме имеет номер и дату. Набор свойств объекта задается разработчиком.
Также объекты имеют определенные методы (процедуры и функции). Например, вы можете выбрать всех сотрудников с помощью метода справочника ВыбратьЭлементы(), или можно сохранить документ методом Записать().
Встроенный язык
Поведение объектов конфигурации задается на встроенном языке. Программист может писать на встроенном языке 1С свои собственные модули, состоящие из процедур и функций. Встроенный язык позволяет работать со справочниками, документами и другими объектами 1С. Можно, например, с помощью методов объектов выбрать все элементы справочника Сотрудники для вывода в отчет, или создать и сохранить любой документ.
Модули, процедуры и функции
Вся конфигурация, как вы уже наверное заметили, состоит из модулей. Это могут быть модули документов или модули отчетов или другие модули. Модули состоят из процедур и функций. Процедура -- это небольшая программа для выполнения определенной задачи. Функция отличается от процедуры, только тем, что имеет результат. Говорят, "функция возвращает результат". Например, модуль "Приказа о приеме на работу" может иметь следующие процедуры ПроверитьПравильность( ) и НапечататьПриказ( ).
Глобальный модуль
В системе 1С есть так называемый Глобальный модуль.Он относится к конфигурации в целом. Глобальный модуль нужен для того, что писать процедуры и функции, доступные в любом месте программы (в любом другом модуле). Для этого необходимо просто указать ключевое слово Экспорт. Также можно создать глобальные переменные, которыми можно будет пользоваться в любом месте программы. Но чем меньше будет таких глобальных переменных, тем лучше, так как модули получаются более независимыми друг от друга, что снижает количество ошибок в программе и облегчает отладку.
Все начинается с запуска Конфигуратора. Программы для 1С:Предприятие называются "конфигурациями" и создаются они в специальном режиме для разработчика "Конфигуратор". Обычные пользователи работают в режиме "Предприятие".
Объекты, атрибуты и методы
Самое главное понятие 1С -- это "объект". Объект -- это элемент реального мира. Объектом может быть все что угодно: компьютер, облако, кошка. Но нас интересуют только те объекты, которые имеются в офисной деятельности предприятия: документы, отчеты, справочники. то есть информационные объекты . Программа для 1С представляется как совокупность информационных объектов, взаимосвязанных между собой, т.е. конфигурация объектов. Например, документ "Приказ о приеме на работу", справочник "Сотрудники", отчет "Сотрудники, принятые за период".
У объектов имеются некоторые атрибуты (свойства, реквизиты). Например, сотрудник имеет фамилию, имя, отчество, оклад, табельный номер. Приказ о приеме имеет номер и дату. Набор свойств объекта задается разработчиком.
Также объекты имеют определенные методы (процедуры и функции). Например, вы можете выбрать всех сотрудников с помощью метода справочника ВыбратьЭлементы(), или можно сохранить документ методом Записать().
Встроенный язык
Поведение объектов конфигурации задается на встроенном языке. Программист может писать на встроенном языке 1С свои собственные модули, состоящие из процедур и функций. Встроенный язык позволяет работать со справочниками, документами и другими объектами 1С. Можно, например, с помощью методов объектов выбрать все элементы справочника Сотрудники для вывода в отчет, или создать и сохранить любой документ.
Модули, процедуры и функции
Вся конфигурация, как вы уже наверное заметили, состоит из модулей. Это могут быть модули документов или модули отчетов или другие модули. Модули состоят из процедур и функций. Процедура -- это небольшая программа для выполнения определенной задачи. Функция отличается от процедуры, только тем, что имеет результат. Говорят, "функция возвращает результат". Например, модуль "Приказа о приеме на работу" может иметь следующие процедуры ПроверитьПравильность( ) и НапечататьПриказ( ).
Глобальный модуль
В системе 1С есть так называемый Глобальный модуль.Он относится к конфигурации в целом. Глобальный модуль нужен для того, что писать процедуры и функции, доступные в любом месте программы (в любом другом модуле). Для этого необходимо просто указать ключевое слово Экспорт. Также можно создать глобальные переменные, которыми можно будет пользоваться в любом месте программы. Но чем меньше будет таких глобальных переменных, тем лучше, так как модули получаются более независимыми друг от друга, что снижает количество ошибок в программе и облегчает отладку.
Постоянный объект закреплённых в конфигурации метаданных, сформированный списком, называется перечислением в 1С. Перечисления не подлежат корректировке в процессе всей работы конфигурации.
Примерами общеизвестных перечислений, остающихся неизменными, являются: пол (мужской, женский), число (единственное, множественное), месяцы года и т.д. Эта информация не меняется.
Отличия перечисления от формата справочника
- Программа легче воспринимает объект перечисления в 1С, чем справочники;
- Разработка перечислений менее трудоёмка, чем организация справочников;
- Работать с перечислениями проще, чем формировать справочники;
- Производительность работы системы в целом выше, когда база данных создана перечислениями в 1С.
Программа 1С легче воспринимает информацию, сгруппированную в формате перечислений, поэтому производительность работы повышается, если метаданные конфигурации имеют формат перечислений в 1С. К данным в перечислениях возможно обращение напрямую с использованием программного кода, присвоенного конкретному объекту перечислений.
Стандартные реквизиты Перечисления в 1С
Собственные формы Перечисления в 1С
К собственным формам перечисления в 1С относятся списки и выбор. Каждому перечислению могут быть присвоены свои формы и правила формирования списка перечислений и выбора перечисления в 1С.
Особые параметры Перечислений
Перечисления в 1С – это объект, который позволяет пользователю задавать списки заранее предопределенных объектов. Работа с перечислениями ведётся путём выбора из ранее закрепленного значения. К примеру, перечисления в 1С помогают разделить справочник Контрагентов на два блока: физические лица и организации. Контрагенты – это база данных в виде справочника, а виды контрагентов – это база данных в виде перечисления в 1С. Пользователю не всегда понятно, зачем использовать перечисления, почему не воспользоваться функционалом справочника. Дело в том, что структура справочника сложнее для продуктивной работы 1С, программистам пользоваться информацией в виде двух справочников не просто неудобно, такая форма ведения записи неэффективна в работе. Невозможно будет определить нужные значения в выбранном тексте программы. Можно было бы использовать код в виде предопределённой константы, но дело в том, что коды справочников пользователь может менять. Поэтому, чтобы надёжно и достоверно разделить справочник Контрагентов на два постоянных и неизменных блока, нужен функционал перечислений.
Особенности перечислений в 1С заключаются в:
- Не подлежат изменениям и не могут быть скорректированы пользователями;
- Помогают искать нужный объект в тексте программы.
Чтобы создать Перечисления в 1С нужно:
- Войти в Конфигурацию программы.
- Добавить Перечисление в 1С на ветке «Перечисления» в Конфигураторе.
- Внести новые значения Перечисления.
- Сохранить выполненные изменения.
После сохранения объекта в Конфигураторе пользователь может выбирать только из указанных параметров перечисления.
Специализированные объекты в составе древа метаданных, в задачи которых входит хранение информации справочной направленности, получили название справочников в 1С. Примерами справочников являются: Контрагенты, Банки, Расчётные счета, Договоры, Номенклатура, Сотрудники и т.д. Справочники формируются пользователями 1С. Обычно в дальнейшем справочники в 1С редко изменяются. Они используются на всех этапах работы в программе, как часть аналитики. Справочники 1С – это основа рабочей базы данных предприятия.
Преимуществом программного решения 1С является тот факт, что пользователь может вести практически неограниченное число справочников. Внутри справочника располагаются группы однородных элементов: основные средства, материалы, сотрудники, организации и т.п. Шаблон каждого справочника в 1С закладывается в Конфигураторе. Список элементов справочника наполняется пользователями, исходя из уже заложенных в Конфигураторе структуры, экранного и печатного представления.
Справочники в 1С: атрибуты и типы данных
Обязательными реквизитами справочника являются его Код и уникальное Наименование. Причём код может содержать как цифры, так и буквенные обозначения. Дополнительно код проверяется на уникальность функционалом системы. Есть возможность автоматического присвоения кода справочника. Вся остальная информация в справочнике в 1С заносится с учётом задач, которые должен выполнять каждый элемент данного справочника. Удобно, когда к справочнику есть список его реквизитов. Например, для справочника «Основные средства» кодом может быть Инвентарный номер, а Наименованием – название основного средства. Дополнительными реквизитами справочника «Основные средства» могут быть: тип основного средства, срок полезного использования, номер паспорта, страна-производитель и т.п.
Типы данных реквизитов в справочниках 1С делятся на базовые и сложные. К базовым типам данных относятся, к примеру: число, дата, строка. Сложными типами данных являются: Адреса, Должности, Вид документа и т.п. Таким образом, сформирована и настроена связь между справочниками, т.е. информация одного справочника «Должности» может быть использована для заполнения реквизитов в других элементах справочников.
Подчинённые Справочники в 1С и иерархия
Многоуровневые справочники в 1С содержат не только элементы, но и группы внутри справочника. Группы – это и есть уровни в справочниках. К примеру, элементами справочника «Контрагенты» являются Поставщики, Покупатели. Внутри каждого элемента справочники содержат информацию более низкого уровня. В элементе «Поставщики» справочника «Контрагенты» могут быть предусмотрены группы: Постоянные, Разовые. Главное, один и тот же элемент справочника «Контрагенты» не должен быть забит в программу дважды. К примеру, если ваш постоянный Покупатель разово выступает в роли Продавца, забивать его повторно в Группу «Продавцы» не нужно. Иначе вы никогда не получите развёрнутую информацию по данному контрагенту в рамках одного отчёта.
Справочники 1С: отличия от констант, документов и перечислений:
- Константа хранит значение, справочник 1С хранит целый список однородных элементов;
- Документы отражают текущие факты деятельности, справочники 1С группируют информацию нормативно-справочного характера;
- Перечисления в 1С создают список значений, справочники 1С содержат множество значений, которые может вводить пользователь в системе.
Функционал 1С создаёт возможности искать элемент справочника по наименованию, делать отбор по коду, менять данные в справочниках и удалять его объекты.
Читайте также: