d9e5a92d

Бартеньев О. В. - 1С Предприятие программирование для всех


Рассматриваются элементы встроенного языка.программирования 1С:Предприятие и методы написания программ на этом языке. Также на примере компонента Расчеты демонстрируется технология построения заказных, использующих модели 1С оптимальных систем. В качестве критериев оптимизации выступают быстродействие, надежность программ, уровень защищенности данных и др. Дополнительно приводятся справочные сведения об использованных в пособии объектах 1С и их методах. Включенные в пособие примеры программ и компоненты предложенной облегченной версии системы размещены на дискете, которую можно приобрести в издательстве. Этот же материал находится в Интернете на сервере издательства (.

Предназначено для всех лиц, желающих освоить или усовершенствовать технику разработки программ на основе моделей 1С:Предприятие, а также для руководящих работников, имеющих потребность расширить свои знания относительно характера и способов построения систем автоматизации деятельности административно-хозяйственных подразделений организаций различного профиля.

Учебно-справочное издание Бартеньев Олег Васильевич

1С:Предприятие: программирование для всех

Базовые объекты и расчеты на одной дискете

ПРЕДИСЛОВИЕ



Широкое распространение системы 1 С: Предприятие (далее вместо длинного названия "Система 1С:Предприятие" будем, где это возможно, употреблять более короткие названия 1С и система) вызывает к жизни разнообразную литературу, освещающую различные стороны программы. Имеющаяся на прилавках магазинов литература содержит преимущественно сведения для пользователей системы - работников бухгалтерии, отделов снабжения, сбыта и иных административно-хозяйственных подразделений предприятия.

Однако для функционирования системы одних пользователей недостаточно: с системой должен постоянно работать ее сопровождающий специалист, имеющий обширный круг обязанностей как по администрированию программы, так и по ее усовершенствованию.

Возможно, вы хотите приобрести такие навыки - тогда эта книга для вас. Возможно, вы озабочены поиском такого специалиста, тогда в этой книге есть ответ на вопрос, какими профессиональными навыками должен обладать подбираемый вами работник. Если же вы реализуете средствами 1С некоторый проект, вам тоже полезна эта книга, поскольку всегда не будет лишним сопоставить различные подходы и постараться выбрать в результате наилучший.

В книге решаются, по сути, три задачи. Первая - оснастить лиц, желающих научиться писать программы в 1С, необходимыми приемами и сведениями. Вторая - рассмотреть оптимизационный подход к построению или модификации системы и, реализуя его, решать первую задачу. И третья - снабдить ответственных лиц информацией об объеме и характере проблем, которые приходится улаживать при настройке системы и ее сопровождении.

Характер изложения таков, что после описания базовых понятий раскрываются этапы реализации облегченной системы расчета зарплаты на основе моделей 1С (другие задачи, например бухгалтерии, строятся на аналогичных моделях). Далее обсуждаются вопросы эффективности системы и комплекс мер по ее повышению. Попутно излагаются справочные сведения о встроенном языке программирования системы 1С:Предприятие 7.7.

На вопрос, зачем взамен поставляемых фирмой средств разрабатывать альтернативы, ответ известен. Практически на любом предприятии при внедрении системы стоят задачи ее адаптации и оптимизации, собственно для решения которых и приспособлен встроенный язык программирования 1С.

Как правило, предприятие, внедряющее систему, по причине недостаточной подготовки персонала возлагает решение этих задач на сторонних лиц и организации -так называемые франчайзи* (партнеры) 1С. Иногда это экономически обременительно (час работы представителя партнера оценивается в 20-30 у. е.). Поэтому зачастую шаги

Франчайз, или франшиза, - это право на создание коммерческого предприятия и на торговлю продукцией старшего партнера. Франчайзи, или франшизы, - это лицо или организация, покупающие франчайз (франшизу).

по настройке программы являются половинчатыми и система не выходит на соответствующий ее возможностям уровень функционирования.

Согласитесь, что во многих случаях выгоднее иметь в штате специалиста (или двух), сопровождающего систему, знающего ее особенности и понимающего задачи ее развития, чем полагаться на структуры массового обслуживания. С выходом этой книги подготовка таких специалистов упростится, а их число увеличится. По существу, при надлежащем прилежании им может стать любой имеющий склонность к программированию сотрудник предприятия, привлекаемый руководством к внедрению и сопровождению системы.

Включенные в пособие примеры программ и компоненты предложенной облегченной версии системы размещены на дискете, которую можно приобрести в издательстве. Этот же материал находится в Интернете на сервере издательства . Эта дискета позволит вам посмотреть в работе представленные в пособии объекты, отдельные обработки, а также реализованную облегченную версию конфигурации системы. Это станет возможным (если вам доступна программа 1С:Предприятие версии 7.7) сразу после выполнения изложенных в прил. 2 инструкций.

1. НАЧАЛЬНЫЕ СВЕДЕНИЯ

1.1. ВВЕДЕНИЕ

Система 1С:Предприятие, версии 7.7 эксплуатируется на большом числе российских предприятий. Комплексная поставка включает следующие компоненты: Бухгалтерия, Торговля, Склад, Заработная плата, Кадры, Услуги и Производство. Субъекты хозяйственной деятельности (предприятия, фирмы и др.) нередко используют часть возможностей системы, например подсистему Бухгалтерия, или Торговля и Склад, или Зарплата и Кадры. Такие подсистемы в 1С называются конфигурациями.

Приспособление системы к потребностям предприятия осуществляется средствами встроенного языка программирования, первые шаги по освоению которого делаются в этой главе.

Встроенный язык программирования 1С оперирует большим числом сложных объектов (около 30), предлагая для них исчерпывающий набор методов и предопределенных процедур. По существу, освоение языка и состоит в изучении этих объектов и приобретении навыков их употребления в алгоритмах и реализующих их программах. Однако подойти к этой цели мы сможем, лишь пройдя необходимые этапы освоения языка.

На первом этапе мы научимся запускать тривиальные программы. На втором. -вкладывать в эти программы некоторый смысл. На третьем - оснащать их базовыми конструкциями языка, с пониманием строить числовые, символьные, логические выражения и выражения с датами, употребляя в них имеющиеся в языке операции и встроенные функции. И так далее.

И тогда любой имеющий тягу к программированию пользователь познает язык системы, что пойдет на благо как ему самому, так и организации, в которой он служит.

Для освоения материала читателю не требуется иметь специальных навыков программирования, а достаточно обладать знаниями в пределах школьного курса информатики или первого курса высшего учебного заведения. Это обусловлено тем, что изложение предмета носит, как правило, неформальный характер, строится по принципу от простого к сложному и иллюстрируется большим числом примеров.

1.2. ИНТЕРФЕЙС УЧЕНИК

Создадим для учебных целей простой, не обремененный избыточными кнопками и пунктами меню пользовательский интерфейс, дав ему имя Ученик. Запустим для этого систему в режиме Конфигуратор и выберем некоторую информационную базу, например Расчет зарплаты и кадровый учет (рис. 1.1), или любую иную.

Запуск 1C: Предприятия

Отмена

& 1 С:Предлриягис

^конфигурация Іная комФигурацГ

Пометить

Отладчик

ф Монитор

Добавить

комплексная конфигурация [демо) Конфигурация 'Т оргоеля+Склад" КонФи-урация "Т ортов ля» Склад" Демо ПроизеооствотУслуги+Бухгалгерия . Произесиство+УслчгитБчхгалгерия [демс

Удалить

Помощь

D:\1Cv77\Test\

Рис. 1.1. Запуск системы

Откроем после запуска системы ее конфигурацию, выбрав пункты меню Конфигурация - Открыть конфигурацию (рис. 1.2).

Начальные сведения
Рис. 1.2. Открываем конфигурацию системы
В отобразившемся окне выберем закладку Интерфейсы. Ударим по правой кнопке мыши и в появившемся меню выберем пункт Новый интерфейс (рис. 1.3).

Начальные сведения
Рис. 1.3. Ввод нового интерфейса
В окне Свойства пользовательского интерфейса в поле Название введем слово Ученик и отключим меню Операции (рис. 1.4).

Начальные сведения
Рис. 1.4. Задание основных свойств интерфейса
Нажав на кнопку ОК, получим окно, содержащее интерфейс Ученик (рис. 1.5).

ej Конфигурация *

Настройка

П олный

^Метаданные 1 ? Интерфейсы Права I

Рис. 1.5. Закладка с интерфейсом Ученик

Добавим теперь в меню интерфейса Ученик колонку Проба. Разместим для этого на элементе Ученик курсор, нажмем правую кнопку мыши или дважды ударим по ее левой кнопке и выберем в появившемся списке возможностей пункт Редактировать меню. В появившемся окне разместим курсор на элементе Ученик, задействуем правую кнопку мыши и в раскрывшемся списке выберем пункт Свойства (рис. 1.6, а). В окне задания свойств в поле Название введем имя Проба (рис. 1.6, б) и нажмем на кнопку ОК.

Начальные сведения
Рис. 1.6. Изменение имени колонки меню: а - вызов окна ввода свойств колонки меню; б - общие свойства колонки
Вставим далее в колонку Проба меню интерфейса Ученик пункт Пуск. Ударим для этого мышью по крестику, расположенному перед элементом Проба, разместим курсор на пункте <новый...> и вновь приведем в действие правую кнопку мыши. В появившемся списке выберем пункт Свойства (рис. 1.7, а) и в поля окна задания свойств введем указанные на рис. 1.7, б значения.

I воиства элемента меню

Удалить is; конструктор..

Проба

uUl* I

Акселератор

Параметры

< новая колонка . >

Івст...

I Комета

аэеани?

шт

)k Вырезать

Овьжт.

Отчеты

Щ ^помнить

|0т

Открытье ИММИЙ

era

;алип

I Открывает учебную обребегг

I. ос сказка

[ ЁОЙС П I

а б

Рис. 1.7. Добавление пункта Пуск:

а - вызов окна ввода свойств элемента меню; б - общие свойства элемента

Замечание. Для задания объекта Отчет достаточно разместить курсор на поле Объект и нажать на клавиатуре на русскую букву О (строчную или прописную).

На следующем шаге выберем закладку Акселератор, нажмем на кнопку Выбрать акселератор и задействуем сочетание клавиш, например Alt+1, которое затем будем использовать для вызова связанного с пунктом меню Пуск файла.

После нажатия на кнопку ОК просмотрим созданное меню, нажав на правую кнопки мыши и выбрав пункт Тест. Результат тестирования приведем на рис. 1.8.

Начальные сведения
Рис. 1.8. Просмотр меню интерфейса Ученик
Замечание. На самом деле в соответствии с рис. 1.4 колонка Операции при использовании интерфейса Ученик в 1С:Предприятии будет отсутствовать.

Имя файла, который будет связан с пунктом меню Пуск, зададим несколько позже.

1.3. ПОЛЬЗОВАТЕЛЬ ПО ИМЕНИ УЧЕНИК

Чтобы создать такого пользователя, выберем пункты меню Администрирование -Пользователь и в появившемся окне (рис. 1.9), нажав на правую клавишу мыши, выберем пункт Новый и зададим в окне свойств атрибуты (рис. 1.10, а) И роль (рис. 1.10, б) пользователя.

- Атрибуты]] Роль I Имя;

Полное имя Еебочий каталог

Атрибуты Роль I Права. [ПолныеПрава

Интерфейс; [Ученик

Г” Отключить контроль прав

Начальные сведения


[Учёнйі

[Николаев Н А [DAI Cv77\T esf

3]

31

I #'» Пользователи
J а т t fil (? Н: !й
Имя 1 Полное 1 Роль (Праве. Интерфейс!
1 fa Адкмшс’-ратзр Адмпкютратор ПолныеПрава, Полный
Рис. 1.9. Список пользователей
а б

Рис. 1.10. Характеристики пользователя Ученик: а - атрибуты; б - роль Замечания:

1. В поле Рабочий каталог рис. 1.10, а установлен путь к папке, содержащей информационную базу данных системы.

2. Вопросы задания прав доступа пользователей рассматриваются в разд. 8,5. Пока что установим пользователю Ученик полные права (рис. 1.10, б).

При необходимости для пользователя Ученик в окне, изображенном на рис. 1.9, можно установить пароль, который придется вводить при входе в систему. Для задания или смены пароля воспользуйтесь иконкой с изображением замка -it или нажмите

на правую кнопку мыши и выверите пункт изменить пароль. Введенные данные, разумеется, надо сохранить.

Теперь при входе в систему нам нужно будет выбирать пользователя с именем Ученик и вводить пароль, если он задан (рис. 1.11).

Начальные сведения
Рис. 1.11. Вход в систему

Добавим, что при желании на закладке Права интерфейса Ученик (см. рис. 1.5) можно в набор прав включить новый элемент, например права Ученика, и задать соответствующие права, отличающиеся от установленных нами, а затем установить эти права нашему пользователю на закладке Роль, приведенной на рис. 1.10, б.

1.4. ОБРАБОТКА ПО ИМЕНИ ПРОБА

1.4.1. ДИАЛОГ ОБРАБОТКИ

Обработкой называется программа, запускаемая в результате ее вызова из некоторой экранной формы.

Под формой в общем случае понимается совокупность следующих компонентов:

• диалога формы;

• модуля формы;

• таблиц формы (по умолчанию в форме задана одна таблица);

• описания формы.

Доступ к компонентам формы осуществляется в результате выбора соответствующей закладки в окне создания и редактирования формы (рис. 1.12).

Начальные сведения
Рис. 1.12. Закладки окна создания и редактирования формы
Для наших учебных целей мы создадим внешнюю обработку, назвав ее Проба, и будем размещать в ней наши программы. Доступ к обработке обеспечим из пункте .меню Пуск (рис. 1.8). Также обработка может быть вызвана в результате набора сочетания клавиш Alt+1, если для пункта меню Пуск задан такой акселератор (механизм задания акселератора описан выше).

Создание обработки выполним в конфигураторе, выбрав пункт меню Новый отчет колонки Конструкторы (специального конструктора обработок в 1С не предусмотрено). Затем активизируем кнопку Внешний отчет и зададим имя файла обработки, использовав расширение ERT (рис. 1.13).

Начальные сведения
Рис. 1.13. Задание внешней обработки
Заметим, что внешние отчеты и обработки система предлагает сохранить в папке ExtForms (внешние формы).

Нажмем, не производя иных действий, дважды на кнопку Далее и в конце на кнопку Готово. В появившемся окне Внешний отчет (обработка) - npoбa.ert, оставаясь на закладке Диалог, во-первых, полностью раскроем окно, во-вторых, захватив мышью нижний правый угол диалога, уменьшим его размеры и, в-третьих, перенесем кнопки Сформировать и Закрыть в центр преобразованного диалога (рис. 1.14, а).

Начальные сведения


Начальные сведения


а б

Рис. 1.14. Диалог обработки Проба:

а - заданные по умолчанию кнопки; б - кнопки диалога после их редактирования

Для выполнения последних действий следует нажать левую кнопку мыши и заключить при помощи мыши, не отпуская кнопку, названные элементы диалога в прямоугольную область. Затем отпустить нажатую кнопку мыши, переместить мышь в некоторую точку выделенной области и вновь, задействовав левую кнопку мыши, переместить теперь уже выделенную область в требуемое место.

Произведем теперь действия, которые, в общем-то, не нужны для запуска обработки, но полезны для приобретения навыков по редактирования диалогов.

Присвоим левой кнопке диалога имя Пуск, установив на ней мышь, ударив вслед по ее правой кнопке, выбрав в появившемся меню пункт Свойства и введя в поле Заголовок текст Пуск (рис. 1.15, а).

Общие I Дополжтельно | Команда | Картинка | Огнсани 0вшив [Допо*ыгвльно| Каната | Карттіа | Описате | Заголовок; |Пусж Уденгифкжаггор: Г

Формула |Вьполнить()

Г Пропускать три вводе

Г Сделать нецоступтан П Сделать ввеищаими

Г Затреплъ р'ДЭ'гпі'.ееч.і?

а б

Рис. 1.15. Задание свойств элемента диалога: а - общих; б - дополнительных

Откроем затем закладку Дополнительно и в поле Формула взамен текста Сформировать ) разместим текст Выполнить( ) (рис. 1.15, б). Это изменение означает, что после нажатия на кнопку Пуск будет запускаться процедура обработки под именем Выполнить (если таковая определена в модуле обработки). На закладке Описание введем текст Запуск учебной программы. Чтобы использовать этот текст в качестве подсказки, проставим флажок Использовать описание (рис. 1.16) и сохраним, нажав наОК, изменения.

Общие I Допо/амтельно | Команда | Картажа Огмсамне

Начальные сведения
Подсказке- f" ^слользомтъ описание) Р7

Рис. 1.16. Описание и подсказ.л элемента диалога
, расположенную на панели

Приведем диалог к виду, представленному т. рис. 1.14. б, употребив для центрирования по горизонтали кнопок Пуск и Закрыть иконку *Ф*, инструментов Редактор диалога (рис. 1.17).

іі: :ііт7іі!Ф4-’1ні|мх®1в'!|''з «

Рис. 1.17. Панель инструментов Редактор диалога

Для просмотра диалога можно нажать Ctrl+R или выбрать иконку 'Э на вышепри веденной панели инструментов.

Замечания:

1. Перечень имеющихся в системе панелей инструментов выводится в окне рис. 1.18, а, отображаемом после выбора пункта меню Панели инструментов в колонке Сервис.

Пам<м имстр^ноктое I МшиФжация 1 Доі»л«ге<ы«>ів Панели инструментов Модификация 1 Дополнительные
Панели инструментов Р Показ подсказок Р Плоские КИОЖН Категории Киогки —-
? Стандартная

Редактор таб/чі у Т «кетовый редактор
Стандартная

Редактор твбг?щ

Т екстоеый редактор
? Я ГШ Ф + ИIHIfflв
у Редактор диалогов у Элементы диалога у Конфигурация уАдг*+«4стрированис Э леменгы диалога

Конфигурация

Администримвание
S в
Комстр^сгоры
а б

Рис. 1.18. Панели инструментов: а - выбор отображаемых панелей; б - настройка панелей

2. Рассматривая компоненты системы, мы не будем без необходимости подробно останавливаться на всех их возможностях. Так, в случае панели инструментов Редактор диалога мы обратили внимание на две его иконки: Ф и та. ных иконок этой панели легко понять, испытав их воздействие на выделенные элементы диалога и их группы или обратившись к закладке Модификация окна управления панелями инструментов (рис. 1.18,6).

Не забудем связать файл Пробам с пунктом меню Пуск колонки Проба из меню интерфейса Ученик. Для этого откроем конфигурацию, выберем закладку Интерфейсы, в ней перейдем на интерфейс Ученик, вызовем редактор меню, дойдем до элемента Пуск и дважды ударим по нему мышью. Выберем в появившемся окне закладку Параметры и определим в ней полное имя файла, связанного с пунктом меню Пуск (рис. 1.19). Заметим, что имя файла можно задать, указав в нем путь относительно каталога с базами данных.

Общие Параметры | Акселератор |
Введите имя файла:
1D :\1 Cv77 VTest \Е xtFotmsUl роба ert ?
Р Открывать Форму модально
Рис. 1.19. Ввод имени файла
Сохраним измененную конфигурацию. При этом система 1C: Предприятие должна быть закрыта.

1.4.2. ПЕРВАЯ ПРОГРАММА

Перейдем на закладку Модуль (см. рис. 1.12). На этой закладке располагаются программы, выполняющие обработку.

В нашей первой программе мы объявим одну числовую переменную, присвоим ей некоторое значение и выведем его в окно сообщений.

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

на панели инструментов Текстовый редактор). Для запуска обработки потребуется вызвать 1С:Предприятие, нажав, например, на иконку или клавишу F11.

Итак, перейдя на закладку Модуль, мы обнаружим там следующую заготовку:

процедура Сформировать( ) конецПроцедуры

Поскольку в диалоге на закладке Дополнительно текст Сформировать( ) был заменен на текст Выполнить( ), то те же изменения произведем и в имеющейся заготовке, затем добавим код, выполняющий ранее намеченные действия. Все пояснения будем размещать в создаваемом коде в виде комментария, который располагается после символов //.

процедура Выполнить( ) // Выполнить - имя процедуры

перем а; // Объявляем локальную переменную с именем а

а = 5.1; // = - знак оператора присваивания

Сообщить(а); // Выводим значение переменной а в окно сообщений

конецПроцедуры // Выполнить (комментарий с именем законченной процедуры)

Замечание. Запись

а= 5.1;

является оператором присваивания. В результате его выполнения переменная а получит значение 5.1. В общем случае оператор присваивания имеет следующий вид:

имяПеременной = выражение; // Завершаем оператор присваивания точкой с запятой

Также операторами в приведенной процедуре являются неисполняемый оператор объявления переменной а:

перем а; // Объявляем локальную переменную с именем а

и исполняемый оператор вызова встроенной процедуры:

Сообщить(а); // Выводим значение переменной а в окно сообщений

Операторы, если они не являются составными элементами конструкции, например конструкции "если - то - иначе", завершаются точкой с запятой.

Выполним проверку синтаксиса программы и, убедившись в ее корректности, сох-храним обработку, нажав Ctrl+S или воспользовавшись пунктом меню Сохранить колонки Файл.

Откроем описанным выше способом 1С:Предприятие и в появившемся меню найдем колонку Проба и ее пункт Пуск или воспользуемся для вызова обработки Проба сочетанием клавиш Alt +1. Нажмем на кнопку Пуск и просмотрим окно сообщени В нем выведено число 5.1.

Закроем обработку Ученик.

Замечание. Имена переменных, процедур и функций в программах 1С могут с держать буквы русского и английского алфавитов (строчные и прописные), символ подчеркивания и символы цифр, например _новоеИмя_23. Имя не может начинать с цифры и содержать пробелы.

1.4.3. ОБСУЖДЕНИЕ ПЕРВОЙ ПРОГРАММЫ

Программа состоит из одной пользовательской процедуры, имеющей имя Выполнить и размещенной в модуле формы обработки. Напомним, что процедура - это выполняющий некоторые действия программный компонент, который обменивается данными с другими компонентами через свои параметры. Также в процедурах 1С могут использоваться переменные модуля, диалога и глобальные объекты данных. (В нашем случае, правда, процедура параметров не имеет и работает только с одной локальной переменной а.)

В процедуре Выполнить использована встроенная процедура Сообщить. Она выводит значение своего аргумента в окно сообщений системы. Заметим, что более информативен следующий вывод значения переменной а:

Сообщить("а =" + а);

Процедура Сообщить сработает следующим образом. Прежде числовое представление переменной а будет преобразовано в символьное (число 5.1 будет преобразовано в строку ”5.1”). Затем строка "а = " объединится со строкой "5.1" и в окне сообщений отобразится текст

а = 5.1

Отметим общие для всех программ моменты:

1. При написании программы регистр букв не имеет значения. Так, имя процедуры не изменится, если его написать прописными буквами; имена А и а задают одну и ту же переменную.

2. После каждого оператора необходимо проставлять точку с запятой.

3. В процедурах и функциях 1С можно не объявлять явно оператором Перем скалярные переменные (не массивы), а вводить переменные и определять их тип по мере необходимости. То есть оператор

перем а;

в приведенной процедуре Выполнить может быть опущен; числовая переменная а будет введена в результате выполнения оператора присваивания

а = 5.1;

4. Поскольку программы пишутся в конфигураторе, а запускаются в 1С:Предприятии, то для ускорения процесса их отладки следует держать открытыми как конфигуратор, так и 1С:Предприятие; если в 1С:Предприятии открыта старая версия программы (в нашем случае обработки), то после внесения и сохранения исправлений (это выполняется в конфигураторе) старую версию нужно закрыть и загрузить затем обновленный файл. В нашем случае для этого достаточно набрать Alt+1. (О мероприятиях по ускорению отладки см. также разд. 1.11.)

Замечание. Созданная обработка Проба находится в файле Проба.ert, и если файл по какой-либо причине закрыт, то для его загрузки в конфигураторе следует выполнить стандартные действия по открытию файла, например выбрать из списка недавно открытых файлов, имеющегося в колонке Файл меню конфигуратора.

1.4.4. МОДУЛЬ ОБРАБОТКИ ПРОБА

Процедура Выполнить принадлежит модулю обработки. Модуль обработки в общем случае может содержать следующие компоненты:

• объявления переменных модуля, которые доступны в любом его программном компоненте;

• процедуры, в том числе и предопределенные, и функции, созданные пользователем;

• операторы основной программы модуля, следующие за его процедурами и функциями; основная программа выполняется один раз при загрузке модуля.

Запишем в качестве примера в модуле обработки код, содержащий объявление переменной модуля а, пользовательскую процедуру Выполнить и основную программу из одного оператора.

// Объявляем переменную модуля обработки

// Она может быть использована в любой процедуре (функции) модуля // и его основной программе перем а;









Сообщить("Сумма а и б равна " + (а + конецПроцедуры // Выполнить

Выполнить - имя процедуры Локальная переменная процедуры Выполнить Выводим значение переменной а в окно сообщений Определяем значение локальной переменной б б));

// Основная программа модуля состоит из одного оператора

а = 5.1; // Определяем значение переменной модуля

После загрузки и запуска обработки в 1С: Предприятие в окне сообщений выведутся две следующие строки: а=5.1

Сумма а и б равна 9.3

Замечания:

1. Нельзя изменить использованный порядок следования компонентов модуля То есть ошибочен, например, код

Объявляем переменную модуля

//

перем а;

// Основная программа модуля; такое ее расположение в модуле ошибочно а = 5.1; // Определяем значение переменной модуля







Сообщить("Сумма а и б равна " конецПроцедуры // Выполнить

Связана с кнопкой Пуск обработки Проба Локальная переменная процедуры Выполнить Выводим значение переменной а в окно сообщений Определяем значение локальной переменной б + (а + б));

2. Если употребить вызов

Сообщшъ("Сумма а и б равна " + а + б); // а + б без круглых скобок

то в окне сообщений появится текст

а=5.1

Сумма а и б равна 5.14.2

То есть без круглых скобок в символьное представление преобразовываются по отдельности переменные а и б, а не их сумма.

3. Если убрать объявление переменной модуля а, то переменная а основной программы станет локальной (область ее действия будет распространяться только на основную программу) и, следовательно, недоступной в процедуре Выполнить, написанная программа окажется неработоспособной.

Процедура Выполнить вызывается при нажатии кнопки Пуск диалога обработки Проба (см. рис. 1.14, б). В общем случае процедура модуля может быть вызвана как из диалога, так и из иного программного компонента модуля, в том числе и из его основной программы. Например, после загрузки обработки, в модуле которой содержится код

процедура Выполнить( ) // Связана с кнопкой Пуск обработки Проба

б = 4.2; // Определяем значение локальной переменной б

Сообщить("б = " + б); конецПроцедуры // Выполнить

// Основная программа модуля

ОчиститьОкноСообщений( ); // Очищаем окно сообщений

а = 5.1; // Определяем значение локальной переменной а

Сообщить("а = " + а);

// Процедура Выполнить будет вызвана из основной программы при загрузке обработки Проба Выполнить(); // Конец основной программы

сразу будет исполнен код основной программы и, следовательно, процедуры Выполнить, в результате чего в окне сообщений появится текст

а = 5.1 б = 4.2

Последующие нажатия на кнопку Пуск также будут приводить к вызову процедуры Выполнить и, следовательно, добавлять в окно сообщений строку

б = 4.2

Код основной программы модуля для исполнения более недоступен.

Заметим, что допускаются рекурсивные вызовы процедур, то есть вызовы, в которых процедура вызывает сама себя.

Приведем теперь пример пользовательской функции модуля. Напомним, что функция - это программный компонент, возвращающий значение и вызываемый из выражения, которое это значение использует. Например, в операторе

у = 2 * Лог(3.4); // Лог - встроенная функция

использована встроенная функция Лог, имеющая в качестве входного параметра положительное число и возвращающая в качестве результата числовое значение, равное натуральному логарифму параметра. Функция вызывается из выражения 2 * Лог(3.4). Разместим в модуле нашей обработки следующий код:

функция ВычислитьУ(х) // х - формальный параметр функции ВычислитьУ

у = 2 * Лог(х); // Лог - встроенная функция

// Вернем в выражение, из которого вызывается функция ВычислитьУ, значение у возврат у;

конецФункции // ВычислитьУ

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

б = ВычислитьУ(3.0); // Функция ВычислитьУ вернет 21п(3)

ОчиститьОкноСообщений(); // Очищаем окно сообщений Сообщить("б = " + б); конецПроцедуры // Выполнить

После исполнения набранного кода (для этого измененную обработку надо открыл в 1С:Предприятии и нажать на кнопку Пуск) в окне сообщений появится строка

б = 2.1972245773362

Замечание. Нельзя в теле функции объявлять ее формальные параметры. Так, ошибочен код

функция ВычислитьУ (х) // х- формальный параметр функции ВычислитьУ перем х; // Это объявление недопустимо

Функция ВычислитьУ должна быть размещена в модуле до процедуры Выполнить, из которой функция вызывается. Если вы хотите записать код функции ВычислитьУ после процедуры Выполнить, то в Начале модуля надо привести предварителъ нов описание функции ВычислитьУ, завершив его словом Далее, например:

функция ВычислитьУ(х) далее // Предварительное описание функции ВычислитьУ
процедура Выполнить() // Код процедуры Выполнить
конецПроцедуры // Выполнить
функция ВычислитьУ (х)

конецФункции // ВычислитьУ

Замечания:
// Код функции ВычислитьУ
1. В общем случае предварительное описание определенных в модуле процедур и функций можно размещать как в начале модуля после объявления его переменных, так и между его любыми программными компонентами.

1.5. ПЕРЕМЕННЫЕ ДИАЛОГА

Переменные модуля и локальные переменные его программных компонентов объявлялись и определялись, то есть получали значения, в самом модуле. Переменные модуля доступны во всех его программных компонентах, локальные - только в том компоненте, где они были объявлены явно или неявно, появившись в левой части оператора присваивания. Кроме таких переменных, в модуле можно оперировать и переменными диалога, которые объявляются в диалоге как идентификаторы его элементов. Область действия переменных диалога распространяется на все программные компоненты модуля, то есть они имеют такой же статус, как и переменные модуля.

Замечание. У переменных диалога есть другие названия - реквизиты формы и идентификаторы элементов диалога.

Рассмотрим пример использования переменных диалога. Приведем диалог, отображенный на рис. 1.14, б, к виду, представленному на рис. 1.20, добавив в него два элемента - текст и числовое поле для ввода и редактирования данных.

Начальные сведения
Рис. 1.20. Диалог с числовым полем
Текст добавляется после выбора мышью иконки Г панели инструментов Элементы диалога (рис. 1.21) и позиционирования курсора на диалоговом окне в точке начала размещения текста.

Начальные сведения
Рис. 1.21. Панель инструментов Элементы диалога
После позиционирования курсора появится окно задания свойств текста, в котором его общие свойства определим в соответствии с рис. 1.22.

Начальные сведения
Рис. 1.22. Общие свойства текста
Поле ввода и редактирования данных попадет в диалог после выбора иконки панели инструментов Элементы диалога. Общие свойства поля и его тип зададим в соответствии с рис. 1.23.

т^ I Дополнительно | Описание |

I-

jyo'/OПО>С

Идентификатор: |дЧ

Обшие ! Ttfl || Допогмиге/ъно | Описание |

[<<Число>>

Г Сделать нваостугьым Г Сделать иееиоимым Г Запретить редактирование Р Сохранить при сохранен* настрой*

Ік#і

Д/*иа

Холостъ:

[б ^ Г Разделять триады

І2 ~Н Г Неотрицательный

Рис. 1.23. Свойства поля ввода и редактирования данных: а - общие свойства; б - тип поля

После вставки элементов отрегулируем их размеры и положение (для этого предварительно элемент выделяется одним ударом мыши, а затем вновь мышью модифицируются его геометрические характеристики). Для выравнивания новых элементе по левой границе предварительно выполним их выделение, а затем используем икот

і(«

!¦>* панели инструментов Редактор диалога (рис. 1.17).

С полем ввода и редактирования данных мы связали его идентификатор, которы как мы уже говорили, интерпретируется в программных компонентах модуля как переменная.

Сохраним обработку и продолжим ее редактирование. Напишем в модуле обработки код, меняющий значения переменной дЧ, добавим код процедуры ПриОткрытии и проследим поведение диалога после выполнения этой процедуры, а затем после неоднократного нажатия на кнопку Пуск.

перем а; // Переменная модуля

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

// Встроенное процедура Предупреждение выводит текст,

// переданный процедуре в качестве параметра, в окно с кнопкой ОК Предупреждение("3начение числового поля будет увеличено в 2 раза."); дЧ = дЧ * а; // Результат после загрузки и двух нажатий

конецПроцедуры // на кнопку Пуск см. на рис. 1.24

процедура ПриОткрытии()

ОчиститьОкноСообщений(); // а = 2.0; //

дЧ = 5.23; //

конецПроцедуры // ПриОткрытии

Очищаем окно сообщений

Начальное значение переменной модуля а

Начальное значение переменной диалога дЧ

Начальные сведения
Рис. 1.24. Поле дЧ диалога обработки Проба: а - после открытия диалога; б - после двукратного нажатия на кнопку Пуск
Замечание. Имеющаяся в коде процедура ПриОткрытии является предопределенной и выполняется, как это следует из ее названия, в момент открытия диалога. При необходимости процедуру можно вызвать и из иного программного компонента модуля, например из процедуры Выполнить. Для этого, однако, потребуется либо добавить перед процедурой Выполнить оператор предварительного описания

процедура ПриОткрытииО далее

либо разместить процедуру ПриОткрытии перед процедурой Выполнить. С диалогом обработки связаны и другие предопределенные процедуры, например ПриЗакрытии или ПриВыбореЗакладки.

Переменная диалога дЧ станет недоступной во всех программных компонентах модуля, если в модуле обработки объявить переменную модуля дЧ:

перем дЧ; // Объявляем переменную модуля

Если же такое объявление сделать в каком-нибудь программном компоненте модуля, например в процедуре Выполнить, то переменная диалога дЧ станет недоступной в этом программном компоненте. В таких случаях говорят: "Локальная переменная закрывает глобальную переменную". Таким же образом можно закрыть в процедуре или функции модуля его любую переменную. Каких-либо предупреждений о закрытии переменных компилятором не выдается.

Избежать непредвиденных закрытий переменных будет легче, если придумывать имена переменным, опираясь на некоторую систему, например начинать переменные диалога с буквы д или использовать так называемую венгерскую нотацию. В соответствии с ней имя объекта снабжается префиксом из строчных букв, указывающих его тип. Последующая часть имени раскрывает его смысл. Причем каждая часть имени, отражающая отдельный смысловой компонент, начинается с прописной буквы. Например, имя переменной сНазваниеПодразделения говорит нам не только о том, что в ней хранится, но и о том, что тип переменной является символьным.

1.6. ГЛОБАЛЬНЫЕ ИМЕНА

Имена объектов (переменных, процедур и функций), определенных в модуле обработки, доступны только в самом модуле (в модуле, например, другой обработки эти имена недоступны). Причем области действия переменных модуля и локальных переменных его программных компонентов различны, а область действия имени процедуры (функции) модуля - это программные компоненты, расположенные в модуле вслед за рассматриваемой процедурой (функцией). Чтобы распространить область действия имени процедуры (функции) на весь модуль или его часть, нужно в соответствующем месте дать предварительное описание этой процедуры (функции).

В то же время в системе существуют по-настоящему глобальные имена - это:

• имена встроенных процедур, функций, атрибутов и методов. Так, функция Текущее-

Время вернет символьное представление времени, которое показывают часы вашего

компьютера. Например:

Сообщить(ТекущееВремя()); // Вернет, например, 17:14:37

• имена системных констант, например имя РазделительСтрок;

• имена объектов, определенных в глобальном модуле системы и снабженных атрибутом Экспорт, например:

// Глобальная переменная глобального модуля;

// объявлена до начала кода процедур и функций глобального модуля Перем Вычеты Экспорт;

Функция глНомерРелиза() Экспорт // Функция глобального модуля возврат "7.70.028";

КонецФункции // глНомерРелиза

• имена метаданных, то есть имена объектов, входящих в. конфигурацию системы, например имена справочников или видов расчетов и их групп.

Замечания:

1. Чтобы просмотреть глобальный модуль, прежде, находясь в конфигураторе, следует открыть конфигурацию (Конфигурация - Открыть конфигурацию), а затем в появившейся в меню колонке Действия выбрать пункт Глобальный модуль.

2. Метаданные - это определенные в конфигурации системы данные со сложной структурой, позволяющие управлять другими, более низкого уровня данными. Например, тип Справочник.Сотрудники имеет более 20 компонентов, такие, как Идентификатор, Синоним и др., причем некоторые из компонентов типа также обладают сложной структурой. С объектами, тип которых описан в метаданных, связаны методы - процедуры и функции, позволяющие выполнять некоторые действия с объектами или его компонентами. Например:

// Создаем переменную типа Справочник.Сотрудники сСотр = СоздатьОбъект("Справочник.Сотрудники");

// Перемещаемся на элемент справочника, в котором значение реквизита // Наименование начинается с буквы А. Для позиционирования // используем метод НайтиПоНаименованию сСотр.НайтиПоНаименованию("А", 0);

// Выводим значение реквизита Наименование найденного элемента справочника // Возможный результат: Абасова Татьяна Анатольевна Сообщить(сСотр.Наименование);

Пример использования имени, определенного в глобальном модуле. Вывести в окне сообщений регистрационный номер системы.

Напишем в модуле обработки Проба простой код (взамен существующего):

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

Сообщить(глНомерРелиза( )); // Выведет сообщение, например 7.70.028

конецПроцедуры // Выполнить

сохраним изменения, загрузим обработку в 1С: Предприятие (Alt+1) и нажмем на кнопку Пуск.

Работу с метаданными продолжим в следующем разделе, рассматривая объект Константы.

1.7. КОНСТАНТЫ

1.7.1. ДОСТУП К КОНСТАНТАМ

Определяемые в конфигурации 1С константы хранят неизменяемые при расчетах и формировании документов данные, например размер минимальной заработной платы (в процессе эксплуатации системы значения подобных констант, разумеется, могут редактироваться). Значения констант располагаются в файле 1SCONST.DBF. Для внешнего представления данных с каждой записью файла связываются атрибуты и идентификатор (имя) некоторой константы, значения которых записаны в файле 1CV7.MD, хранящем конфигурацию системы. При отображении констант предусмотренным в 1С способом (команда Константы.Открыть; может быть выполнена только в главном меню системы) используются ее атрибуты Синоним и Комментарий, а также значения поля Value файла 1SCONST.DBF.

Замечание. Файл 1 SCONST.DBF содержит не только константы системы, но и другие данные, например значения периодических атрибутов справочников.

Чтобы иметь возможность просматривать и редактировать константы, добавим, находясь в конфигураторе, в меню интерфейса Ученик колонку Справочники, а в этой колонке создадим пункт Константы, имеющий приведенные на рис. 1.25 общие свойства.

Начальные сведения
Рис. 1.25. Общие свойства пункта меню Константы Загрузим далее 1С:Предприятие и откроем список констант (рис. 1.26).
Начальные сведения
Рис. 1.26. Фрагмент списка констант
Для изменения значения кэнстанты необходимо дважды ударить мышью по соответствующему полю последнего столбца, ввести данные и нажать на Enter либо на иконку ^ в левом верхнем углу окна со списком констант (рис. 1.26).

Замечание. Имена первых двух столбцов списка констант не соответствуют именам атрибутов, значения которых в этих столбцах отображаются. Так, в столбце Код представляется синоним константы, а в столбце Наименование - ее комментарий. Для согласования имен столбцов в приведенном на рис. 1.26 списке и имен атрибутов необходимо изменить встроенную в 1С процедуру открытия списка констант, вызываемую командой Константы. Открыть.

Отображаемые после открытия атрибуты Синоним и Комментарий для редактирования в этом списке закрыты, но могут быть изменены в конфигураторе. Там же можно добавить новую или удалить существующую константу. Последовательность, например, добавления константы такова: находясь в конфигураторе, откройте конфигурацию, оставаясь на закладке Метаданные (рис. 1.27), откройте список констант, ударив мышью по пункту Константы, или просто выделите пункт Константы, нажмите на правую кнопку мыши и выберите пункт Новая Константа.

Начальные сведения
Рис. 1.27. Закладка Метаданные
В появившемся окне (рис. 1.28) определите значения всех полей, понимая, что значение, занесенное в поле Идентификатор, используется для доступа к константе в программах. Поэтому имя идентификатора образуется по тем же правилам, что и имя переменной.

Начальные сведения
Рис. 1.28. Общие свойства константы Название организации
Замечание. В конфигурации системы объекта Справочники.Константы нет. Доступ к полю Значение (см. рис. 1.26) обеспечивается либо за счет использования идентификатора константы (для непериодических констант), либо в результате применения разработанных для констант методов.

1.7.2. НЕПЕРИОДИЧЕСКИЕ И ПЕРИОДИЧЕСКИЕ КОНСТАНТЫ

Константы разделяются на непериодические и периодические. К последним относятся константы, старые значения которых нужно сохранять при вводе изменений. Примером может послужить константа ЕдиновременнаяВыплатаНаРебенка, содержащая значение единовременного пособия при рождении ребенка. Это пособие может меняться, возможно даже увеличиваться, в течение, скажем, года несколько раз. Однако на эту константу могут быть ссылки в документах или в отчетах, например в отчете о выплатах упомянутого пособия за год. Поэтому, выполняя изменение размера пособия, необходимо сохранять значения константы и период их действия. Это выполняется в 1С, если компонент константы Периодический имеет значение 1.

Константа ЕдиновременнаяВыплатаНаРебенка является периодической. Поэтому если изменяется ее значение, то в файле 1 SCONST.DBF в отношении этой константы появится новая запись и сохранятся существующие. Это иллюстрирует табл. 1.1.

Таблица 1.1

Фрагмент файла 1SCONST.DBF с записями о константе ЕдиновременнаяВыплатаНаРебенка
Date Id Value
15.04.00 EV 1000
01.01.01 EV 1500
25.08.01 EV 2500
В приведенном фрагменте отображается состояние константы ЕдиновременнаяВыплатаНаРебенка на 3 разные даты. (О том, что записи относятся к одной и той же константе, говорят совпадающие значения поля Id.)

Значения, которые ранее имела периодическая константа, можно просмотреть, нажав на иконку с названием История, расположенную в окне со списком констант (см. рис. 1.26).

С периодическими константами употребляются методы Получить и Установить, соответственно возвращающие и устанавливающие значение константы на заданную дату. Применив для взятой в качестве примера константы вызовы

Сообщить(Константа.ЕциновременнаяВыппатаНаРебенкаПолучшъ('21.05.00')); Сообщить(Константа. ЕдиновременнаяВыплатаНаРебенка. Получить('21.07.01')); Сообщить(Константа. ЕдиновременнаяВыплатаНаРебенка. Получить('21.09.01'));

получим следующие сообщения:

1000

1500

3500

Также с периодическими константами применяются методы объекта Периодический, рассматриваемые в гл. 6. В частности, л разд. 6.1 приводится код вывода значений определенных в конфигурации непериодических констант.

Замечания:

1. В списке констант, наблюдаемом в конфигурации, рядом с именем периодической константы стоит иконка ^, а непериодической - иконка -I

2. Хотя в 1С и есть тип Константа (по крайней мере об этом говорится в документации), объектов с таким типом нет. Так, если написать процедуру

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

Сообщить(ТипЗначенияСтр(Констата.НазваниеОрганизации)); Сообщить(ТипЗначенияСтр(Констата)); конецПроцедуры // Выполнить

то после ее запуска получим сообщения

Строка

НеизвестныйОбъект

1.7.3. ПРИМЕРЫ РАБОТЫ С НЕПЕРИОДИЧЕСКИМИ КОНСТАНТАМИ

Значение непериодической константы можно получать и изменять, обращаясь к ней по имени Константа.ИдентификаторКонстанты или употребляя методы Полу-читьАтрибут и УстановитьАтрибут.

Пример 1. Вывести название организации.

процедура Выполнить() // Связана с кнопкой Пуск

Сообщить(Константа.НазваниеОрганизации); // Напечатает, например, АО ТрансМаш // То же сообщение выведет вызов

Сообщить(Константа.ПолучитъАтрибут(''НазваниеОрганизации'')); конецПроцедуры // Выполнить

Пример 2. Создать код, изменяющий значение непериодической константы Назва-ниеОрганизации с прежнего на АО Простор, а затем восстанавливающий старое название.

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

перем новоеНазвание, староеНазвание, ответ; новоеНазвание = "АО Простор"; староеНазвание = Константа. НазваниеОрганизации;

ОчиститьОкноСообщенийО;

Сообщить("Прежнее название организации:" + староеНазвание);

ответ = Вопрос("Изменить название организации на " + новоеНазвание +"?", "Да+Нет"); если ответ = "Да" тогда // Нажата кнопка Да

Константа.НазваниеОрганизации = новоеНазвание;

Сообщить("Название организации после изменения: " +

Константа. НазваниеОрганизации);

// Восстановим старое название константы Предупреждение(”Название организации будет восстановлено.”); Константа.НазваниеОрганизации = староеНазвание; иначе // Выбрана кнопка Нет

Предупреждение("Название организации осталось без изменений."); конецЕсли;

конецПроцедуры // Выполнить Замечания:

1 • Вместо присваивания

Константа.НазваниеОрганизации = новоеНазвание; можно использовать метод

Константа.УстановитьАтрибут("НазваниеОрганизации", новоеНазвание);

2- Встроенная функция Вопрос выведет при исполнении программы окно с кнопкам! Да и Нет (рис. 1.29).

Начальные сведения
Рис. 1.29. Окно, порождаемое встроенной функцией Вопрос
Имена кнопок определяются вторым параметром функции, заданным в виде строки "Да+Нет". Функция Вопрос вернет строку со значением, совпадающим с именем нажатой кнопки.

3. В случае громоздких операторов или выражений их следует размещать на нескольких строчках. Символы переноса при этом не употребляются. Например:

Сообщить("Название организации после изменения:" +

Константа. НазваниеОрганизации);

4. Пример показывает, что нужно крайне аккуратно работать со справочниками вообще и с константами в частности. Достаточно несколько строк небрежного кода, чтобы исказить данные и сделать в результате неработоспособной всю систему.

В нашем примере мы избежали негативных последствий, добавив код, восстанавливающий прежнее значение измененной константы.

Пример 3. Выводится список непериодических констант, имеющих синоним, в окно сообщений.

Просмотр списка констант можно организовать, написав программу, выводящую, например, в окно сообщений идентификатор, синоним константы и ее значение. Разместим этот код, как всегда, в процедуре Выполнить модуля обработки Проба:

// Процедура вывода списка непериодических, определенных в конфигурации констант процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

перем всего Констант; // Число констант в конфигурации

перем идеи, син, значен;

ОчистшъОкноСообщенийО; // Очищаем окно сообщений

всегоКонстант = Метаданные.КонстантаО; для ин = 1 по всегоКонстант цикл

если Метацанные.Константа(ин).Периодический = 1 тогда

продолжить; // Значения периодических констант не выводятся

конецЕсли;

син = Метаданные.Константа(ии). Синоним;

// Выводим сообщения о константах, для которых задан синоним если ПустоеЗначение(син) = 0 тогда

идеи = Метаданные.Константа(ин).Идентификатор; значен = Константа.ПолучитьАтрибут(иден);

Сообщить(иден + " - " + син + " - " + значен); конецЕсли; конецЦикла; // для • конецПроцедуры // Выполнить

Замечание. Встроенная функция ПустоеЗначение(параметр) вернет нуль, если параметр определен (имеет значение), и единицу - в противном случае.

Эта программа - пример работы с метаданными, в котором использован метод Ме-таданные.Константа, возвращающий при работе с константами следующие величины:

• если не задан параметр, число констант в конфигурации;

• константу, расположенную в конфигурации под номером ин, если параметром метода является целочисленная переменная ин, например Метаданные.Константа(ин);

константу, имеющую идентификатор идеи, если параметром метода является символьная переменная идеи, содержащая значение идентификатора, например:

перем идеи, конст;

идеи = 'ТлБухгалтер'';

конст = Метаданные.Константа(иден);

Сообщить(конст); // Вернет значение синонима, например Главный бухгалтер

Вызывая этот метод, можно получить следующие сведения о константе:

• идентификатор, например АдресГНИ;

• синоним, например Адрес ГНИ;

• комментарий, например Адрес ГНИ;

• тип, например Строка;

• вид, например ДаНет, если тип константы - Перечисление;

• длина, например 240;

• точность, например 0;

• неотрицательный, например 0;

• разделятьТриады, например 0;

• периодический, например 0;

• областьРаспространения, например ВсеИнформационныеБазы.

Пример. Процедура

Сообщшъ(Метаданные.Константа(1).Длина); // Вернет, например, 240 выведет в окне сообщений данные о длине первой константы.

1.7.4. МЕТОДЫ КОНСТАНТ

Здесь и далее мы не будем, дублируя документацию и материал, имеющийся в справке, приводить подробные сведения о методах, применяемых с объектами 1С, поскольку наша цель - приобщение к методам программирования на языке 1С - достигается в результате решения разнообразных практических задач и анализа используемых при составлении программ приемов. В то же время полезно дать читателю как можно более полную информацию о возможностях системы. Понимая это, мы будем приводить необходимые справочные данные. Первую порцию таких данных разместим в табл. 1.2-1.4.

Таблица 1.2

Методы констант
Метод Вид Описание
Метод непериодических и периодических констант
НазначитьТип Процедура Назначает тип значению константы, для которого в конфигураторе задан неопределенный тип
Методы непериодических констант
УстановитьАтрибут Процедура Устанавливает значение константы по имени ее идентификатора
ПолучитьАтрибут Функция Возвращает значение константы по имени ее идентификатора
Метод Вид Описание
Методы периодических констант
Получить Функция Возвращает значение периодической константы на заданную дату
Установить Процедура Устанавливает значение периодической константы
Таблица 1.3
Синтаксис вызова метода

Непериодические и периодические константы

Константа.НазначитьТип(идентификатор, тип, [длина, точность]);

Непериодические константы

Константа.УстановитьАтрибут(идентификатор, значение);

значение = Констата.ПолучтьАтрнбут(идентификатор);

Периодические константы

значение = Константа.ИдентификаторКонстанты.Получить(дата);

Константа .ИдентификаторКонстанты.Установть(дата, значение);

Замечания:

1. Здесь и далее при описании синтаксиса необязательные параметры процедур, функций и методов заключаются в квадратные скобки.

2. Наличие в имени метода текста (ИдентифшаторКонстанты), записанного курсивом, означает, что в программах этот текст должен быть заменен на соответствующее значение. Например:

// Меняем значение периодической константы с идентификатором Кассир Константа.Кассир.Установить(ТекущаяДатаО, "Ремизова Нина Дмитриевна");

3. Параметрами методов являются выражения, тип и смысл которых описан в табл. 1.4.

Таблица 1.4

Описание параметров методов
Параметр Смысл Тип
дата Дата, на которую устанавливается или возвращается значение периодической константы Дата
длина Размер поля, отводимого для представления константы, имеющей тип Число или Строка Число
значение Значение константы Строка, число или дата
идентификатор Символьное представление идентификатора константы, например "НазваниеОрганизации" Строка
тип Символьное представление типа, используемого при определении значения константы, например "Число", "Строка", "Дата", "Справочник.Сотрудники"
точность Число знаков после десятичной точки в представлении числовой константы
1.8. ОТОБРАЖЕНИЕ СПИСКА КОНСТАНТ В ДИАЛОГОВОМ ОКНЕ

Просмотр констант в списке, появляющемся в окне сообщений после запуска приведенной в разд. 1.7.3 процедуры, весьма затруднителен. Более высокое качество отображения перечня констант (и других представляемых в виде таблицы объектов) обеспечивает элемент диалога Таблица значений. Продемонстрируем способ его употребления на примере вывода информации о константах системы. Как и ранее, будем выводить данные только о непериодических константах, отображая их идентификаторы, синонимы и значения.

Изменения обработки Проба выполним в следующем порядке. Первоначально увеличим размер диалогового окна, переместим кнопки Пуски Закрыть, добавим в него текст

Список непериодических констант, вставим, используя иконку ІН находящуюся на панели инструментов Элементы диалога (см. рис. 1.21), элемент Таблица значений, дав ему в качестве идентификатора имя тЗнач (для подобных элементов с 1С предусмотрен тип ТаблицаЗначений), и изменим его размеры, ориентируясь на рис. 1.30.

Начальные сведения


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

процедура СоздатьТаблЗнач() далее // Предварительное описание процедур процедура ЗаполнитьТаблЗнач() далее

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

ОчиститьОкноСообщений();

Сообщить("Переменная тЗнач имеет тип ТаблицаЗначений."); конецПроцедуры // Выполнить

процедура ПриОткрытии() // Процедура выполняется перед открытием формы

// Создаем в таблице тЗнач три столбца

СоздатьТаблЗнач(); // Вызов ранее описанной процедуры

// Заполняем таблицу тЗнач данными о непериодических константах ЗаполнитьТаблЗнач(); // Эта процедура также описана ранее

конецПроцедуры // Выполнить

// Процедура создает незаполненную таблицу значений процедура СоздатьТаблЗнач()

// Задаем при вызовах метода НоваяКолонка следующие параметры:

// идентификатор столбца;

// тип данных, заносимых в столбец;

// далее пропускаем два параметра - длину и точность представления данных;

// заголовок столбца

//Помним, что область действия переменной диалога тЗнач - все // программные компоненты модуля; тип переменной тЗнач - ТаблицаЗначений тЗнач.НоваяКолонка("иден", "Строка",,, "Идентификатор"); тЗнач.НоваяКолонка("син", "Строка",,, "Синоним"); тЗнач.НоваяКолонка("значен", "Строка",,, "Значение"); конецПроцедуры // СоздатьТаблЗнач

// Процедура заполняет таблицу значений данными о непериодических константах процедура ЗаполнитьТаблЗнач() перем ин, син, идеи, значен; для ин = 1 по Метаданные.Константа() цикл

если Метаданные.Константа(ин).Периодический = 1 тогда

продолжить; // Значения периодических констант не выводятся

конецЕсли;

син = Метаданные.Константа(ин). Синоним;

// Выводим сообщения о константах, для которых задан синоним если ПустоеЗначение(син) = 0 тогда

идеи = Метаданные.Константа(ин).Идентификатор; значен = Константа. ПолучитьАтрибут(иден);

// Используем для добавления новой строки в таблицу тЗнач метод НоваяСтрока тЗнач.НоваяСтрока(); // Добавляем новую строку в таблицу значений тЗнач.иден = идеи; // При занесении данных в ячейку столбца тЗнач.син = син; // пользуемся его идентификатором тЗнач.значен = сокрЛ(значен); конецЕсли; конецЦикла; // для

конецПроцедуры // ЗаполнитьТаблЗнач Замечания:

1. Переменная тЗнач имеет тип ТаблицаЗначений, если (что справедливо для нашего случая) она определена в диалоге как идентификатор одноименного элемента диалога или если она создана в программе в результате выполнения оператора

тЗнач = СоздатьОбьект('ТаблицаЗначений)";

2. Встроенная функция СокрЛ(строка) возвращает значение параметра строка без ведущих пробелов. Например:

стр = СокрЛ(" Сводка "); // Вернет строку "Сводка "

Сохраним данные, загрузим обработку в 1С:Предприятие и получим, даже не нажимая на кнопку Пуск, приведенный на рис. 1.31 результат.

Начальные сведения


1.9. ФОРМИРОВАНИЕ ОТЧЕТА СО СПИСКОМ

КОНСТАНТ

При необходимости список констант можно распечатать. Для этого, однако, его предварительно нужно представить либо в виде табличного отчета, либо в виде текстового документа, расположив информацию в отчете (документе) в удобном для прочтения виде.

Расширим обработку Проба, которую мы до сих пор использовали для отладки и запуска учебных программ, до внешнего отчета 1С, использовав в ней вывод данных в таблицу, созданную на закладке Таблица (рис. 1.32).

Начальные сведения
Рис. 1.32. Начальный вид закладки Таблица
Первоначально, если не пользоваться помощником создания отчета, в таблице нет заполненных ячеек.

Если поставить курсор на имя закладки Таблица и нажать на правую кнопку мыши, то раскроется список действий, которые можно предпринять (рис. 1.33).

Начальные сведения
Рис. 1.33. Меню операций для таблицы
Из списка видно, что форма может в общем случае содержать более одной таблицы. Воспользуемся пунктом Задать имя таблицы и присвоим ей имя Константы, которое затем и будем использовать в программе.

Поставим задачу получить отчет со списком констант в виде табл. 1.5.

Таблица 1.5

Список непериодических констант, 02.10.01
Идентификатор Синоним Значение
АдресГНИ Адрес ГНИ Некоторый адрес
АдресОрганизации Адрес Организации Некоторый адрес
Архиватор Нет
ОграничиватьПосмотрСписка Ограничивать просмотр списка Нет
Всего непериодических констант: 94
Для ее решения потребуется в отчете Проба на закладке Константы (новое имя закладки Таблица) сформировать макет отчета по образцу, приведенному на рис. 1.34, а затем написать программу вывода данных в таблицу Константы.

Т| І Г 3 I 4
Заголовок 1

2
<Список непериодических констант, [ТекущаяДата( )]>
3 Идентификатор Синоним Значение
4
(оКоистант 5 |<иден> |<син> |<значен>
S
|Всего 7 «Всего непериодических констант |числоКонст|>
С-ІДиапм' у _] Мсодл» у Огысатие у А) Константы /
Рис. 1.34. Образец для отчета Список непериодических констант

Проделаем эту работу в следующем порядке. Перейдем на закладку Константы, выделим ячейки 2, 3 и 4 первой строки и выполним их объединение, нажав на иконку

і-а-»

панели инструментов Редактор таблиц (рис. 1.35) или выбрав пункт Объединить Колонки Таблицы меню конфигуратора.

Начальные сведения
Рис. 1.35. Панель инструментов Редактор таблиц Занесем в объединенные ячейки шаблон следующего вида: Список непериодических констант, [ТекущаяДата()], введя его на закладке Текст в окне Свойства ячейки, которое появляется после позиционирования курсора на ячейке, удара по правой клавише мыши и выбора пункта Свойства (рис. 1.36). (В квадратных скобках содержится выражение, вычисляемое при использовании шаблона. В нашем случае выражение - это встроенная функция, возвращающая установленную в вашем компьютере текущую дату.)
IСвойства ячейки КЗІ
! "Текст }| Положение | Шрифт | Рамке | Узор | хЫ
Ьп |Шаблон Контроль]Авто _»]
JСписок непериодических констант. [ТекушаяДата{)]
d ок
Расшифровал |~ Отмена
Р Защита Обновитъ |
Рис. 1.36. Задание свойства Текст ячейки таблицы Константы

Используя закладки Положение и Шрифт, расположим текст по центру ячеек 2-4, сделаем его полужирным и увеличим его размер до 12.

Проведя аналогичные действия, сформируем в ячейках 2, 3 и 4 строки 3 заголовки будущей таблицы со списком констант, а затем увеличим, оперируя мышью, ширину каждого столбца с заголовками. При этом на закладке Текст окна Свойства ячейки в поле Тип установим значение не Шаблон, а Текст. Высоту шрифта и его толщину можно изменить сразу для всех заголовков, выделив их и вызвав затем окно Свойства ячейки. Кроме изменения параметров шрифта, зададим, перейдя на закладку Рамка, разделяющие ячейки вертикальные и горизонтальные линии. _

Просмотрим промежуточный вариант макета отчета, выбрав на стандартной панели инструментов конфигуратора иконку или пункт Просмотр колонки системного меню Файл.

Замечание. Чтобы изменить размер столбца таблицы, нужно захватить мышью, нажав на ее левую кнопку, разделяющую номера столбцов линию и переместить ее в нужном направлении.

В строке 5 формируемого макета отчета в ячейку второго столбца (эта ячейка имеет номер R5C2) занесем текст иден, задав для него в поле Тип значение Выражение (рис. 1.37).

' Текст і| Положетме | Шри<рг | Рамса | Узор |

Тип I Выражение J*] Контроль jАето |

ицен

jJ

Рис. 1.37. Свойства ячейки R5C2

В нашем случае выражение иден - это имя переменной в программе, которой в процессе чтения информации об очередной константе присваивается значение ее идентификатора.

Далее аналогичным образом зададим в ячейках 3 и 4 строки 5 выражения син и значен, являющиеся в нашем случае именами переменных, получающими соответственно синоним и значение константы. Затем, выделив три ячейки с выражениями, на закладке Рамка зададим разделяющие их вертикальные линии.

Замечание. Можно организовать перенос длинных имен, не умещающихся в заданных для них ячейках таблицы. Для этого в поле Контроль (рис. 1.37) следует установить значение Переносить.

В строке 7 после объединения столбцов 3 и 4 зададим шаблон Всего непериодических констант: [числоКонст], в котором выражение числоКонст - это переменная, получающая в процессе вычислений значение, равное количеству непериодических констант.

Перейдем к формированию секций. Объединим в секцию первые 3 строки таблил цы. Для этого выполним их выделение, проведя мышью, у которой нажата левая кнопка, по номерам строк 1-3, выберем иконку С. (см. рис. 1.35) и присвоим идентификатору секции значение Заголовок. Аналогичным образом создадим секции оКонстанте и Всего.

Макет отчета готов. Направим в него данные и отобразим результат, использовав в отчете Проба следующий снабженный обширным комментарием код:

// Процедура формирования отчета, содержащего список непериодических констант процедура Выполнить() // Связана с кнопкой Пуск обработки (отчета) Проба

перем ин, числоКонст, син, иден, значен; перем табл;

ОчиститьОкноСообщений(); табл = СоздатьОбъект("Таблица");

// Свяжем переменную табл с таблицей Константы, содержащей макет отчета табл.ИсходнаяТаблица("Константы");

// При выводе применяем заданные по умолчанию параметры таблицы;

// для их изменения следует обратиться к методу Опции

// Выводим, используя шаблон Список непериодических констант, [ТекущаяДата()],

// секцию Заголовок табл.ВывестиСекцию(''Заголовок'');

числоКонст = 0; // Число непериодических констант

для ин = 1 по Метаданные.Константа() цикл

если Метацанные.Константа(ин).Периодический = 1 тогда

продолжить; // Значения периодических констант не выводятся

конецЕсли;

числоКонст = числоКонст + 1; // Еще одна константа

// Определяем значения переменных идеи, син и значен

// Эти значения будут использованы при выводе секции оКонстанте

идеи = Метаданные.Константа(ин).Идентификатор;

син = Метаданные.Константа(ин). Синоним;

значен = сокрЛ(Константа.ПолучитьАтрибут(иден));

// Вывод очередной строки в отчет табл.ВывестиСекцию(''оКонстанте''); конецЦикла; // для

табл.ВывестиСекцию("Всего"); // Вывод данных о числе непериодических констант

// Запрещаем редактирование результирующей таблицы

табл.ТолькоПросмотр(1);

// Задаем в методе Показать заголовок окна с результирующей таблицей табл.Показать("Отчет о константах"); конецПроцедуры // Выполнить.

Результат приведен в табл. 1.5.



Содержание раздела