Как программно изменить значение константы

Примеры кода, демонстрирующие работу с константами, в языке 1С 8.3, 8.2 вместе с тестовой базой.

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

2017-12-18T22:48:55+00:00<<< Документы Константы Перечисления РегистрыБухгалтерии
<<< РегистрыНакопления РегистрыСведений Справочники

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Полный синтаксис (нажмите, чтобы раскрыть)

Оглавление (нажмите, чтобы раскрыть)

&НаСервере
Процедура ВыполнитьКодНаСервере()
 
    /// Как получить и изменить значение константы в 1с 8.3, 8.2    
 
    // менеджер значений создаётся и используется неявно
 
    Сообщить(Константы.ЛучшийКлиент.Получить());
 
    Константы.ЛучшийКлиент.Установить(
        Справочники.Клиенты.НайтиПоНаименованию("Марина")
    );
 
    /// Работа с константой через менеджер значений в 1с 8.3, 8.2
 
    // создаём и используем менеджер значений константы напрямую
    ЛюбимаяЕда = Константы.ЛюбимаяЕда.СоздатьМенеджерЗначения();
 
    // читаем значение
    ЛюбимаяЕда.Прочитать();    
    Сообщить(ЛюбимаяЕда.Значение);
 
    // меняем значение
    ЛюбимаяЕда.Значение = Справочники.Еда.НайтиПоНаименованию(
        "Крыжовник");
 
    // записываем значение
    ЛюбимаяЕда.Записать();
 
    /// Работа с константами через набор в 1с 8.3, 8.2
 
    // подходит для работы сразу с группой констант
 
    НазванияКонстант = "ЛюбимаяЕда, ЛучшийКлиент";
    НаборКонстант = Константы.СоздатьНабор(НазванияКонстант);
 
    // читаем набор констант
    НаборКонстант.Прочитать();
    Сообщить(НаборКонстант.ЛюбимаяЕда);
    Сообщить(НаборКонстант.ЛучшийКлиент);
 
    // меняем значения констант
    НаборКонстант.ЛюбимаяЕда = Справочники.Еда.НайтиПоНаименованию(
        "Чипсы");
    НаборКонстант.ЛучшийКлиент = Справочники.Клиенты.НайтиПоНаименованию(
        "Пётр");
 
    // записываем набор
    НаборКонстант.Записать();
 
    /// Как получить значения всех констант в 1с 8.3, 8.2
 
    Для Каждого Константа Из Константы Цикл
        Сообщить(Строка(Константа) + " = " + Константа.Получить());
    КонецЦикла;
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Константы в языке 1С 8.3, 8.2 (в примерах)

<<< Документы Константы Перечисления РегистрыБухгалтерии
<<< РегистрыНакопления РегистрыСведений Справочники

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

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

Нажмите одну из кнопок, чтобы поделиться:

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

Создание константы в 1С

Создадим несколько констант 1С. Обратите внимание на ветку Константы в дереве метаданных конфигуратора 1С, это именно то место, где в 1С расположен список констант. Найдем эту ветку в дереве, выделим её, и вызовем правой кнопкой мышки контекстное меню, в котором нас интересует команда «Добавить».

Где в 1С константы

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

Константа 1С и палитра свойств

Создадим еще несколько констант с примитивными типами.

Дата начала работы организации (тип Дата).

Константа 1С и палитра свойств

Процент налога на прибыль (тип число)

Константа 1С и палитра свойств

Константы в командном интерфейсе 1С

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

Объект не включен ни в одну подсистему

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

В моей учебной конфигурации имеется подсистема НСИ, в эту
подсистему я и добавлю все новые константы

Сделать это можно двумя способами.

Первый. Открыть редактор нужной подсистемы, и на закладке Состав включить вхождение нужной
константы в подсистему.

 Включение константы в подсистему

Подробнее о создании и конфигурировании подсистем  в 1С

Второй. У константы вызвать контекстное меню, в котором
выполнить команду «Дополнительно».

Контекстное меню константы

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

Контекстное меню константы

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

Константы в пользовательском приложении 1С
Константы в пользовательском приложении 1С

Разберем, почему они там оказались.

Во-первых, если мы войдем в командный интерфейс подсистемы НСИ, в которую я добавил все константы, то найдем их в группе команд «Панель действий. Сервис», в эту группу платформа поместила команды на открытие констант автоматически, после того, как мы добавили константы в подсистему.

Константы в командном интерфейсе

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

Свойство константы использовать стандартные команды

Например, если мы снимем это свойство у константы «Процент налога на прибыль».

Свойство константы использовать стандартные команды

То команда на открытие этой константы исчезнет, как и из
командного интерфейса подсистемы.

Константы в командном интерфейсе

Так и из командного интерфейса пользовательского приложения.

Константы в командном интерфейсе

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

Форма ввода константы

Подробно о командном интерфейсе подсистемы 1С

Форма констант 1С

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

Создадим форму констант. Для этого нужно выделить ветку
метаданных Константы, вызвать
контекстное меню, и выполнить команду «Создать форму констант…» этого меню.

Создание формы констант

Откроется конструктор общих форм.

Конструктор общих форм для формы констант

Где советую  обратить
внимание на Тип Формы, и на свойство Использовать стандартные команды. Первое
указывает, что это форма константа, а при установке второго будут созданы
стандартные команды на открытие этой формы.

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

Выбор констант для общей формы

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

Форма констант 1С

Замечу, что форма добавилась в ветку Общие формы ветки Общие
дерева метаданных 1С.

Нам осталось включить общую форму констант в подсистему. Для
этого вызовем контекстное меню общей формы констант и выполним команду «Дополнительно»

Контекстное меню формы констант

В открывшемся окне включим форму констант в подсистему 1С.

Включение формы констант в подсистему

Также эту форму можно добавить в подсистему, напрямую во время редактирования подсистемы.

Включение формы констант в подсистему

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

Как в командном интерфейсе подсистемы в конфигураторе.

Форма констант в командном интерфейсе в конфигураторе

Так и в пользовательском режиме

Форма констант в командном интерфейсе пользовательского приложения

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

Открытая форма констант

Что делать, если форма уже создана, но позже добавили новую константу, например «ИНН Организации».

Новая константа 1С

Тогда следует добавить новую константу на форму. Для этого, нужно открыть форму на редактирование, развернуть в закладке Реквизиты дерево НаборКонстант, найти в этом дереве новую константу и перетащить её в элементы формы.

Добавление новой константы на форму констант

Как получить константу 1С

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

&НаСервереБезКонтекста
Процедура ПолучитьНаСервере()
    НазваниеОрганизации = Константы.НазваниеОрганизации.Получить();
    Сообщить(НазваниеОрганизации);
КонецПроцедуры

&НаКлиенте
Процедура Получить(Команда)
    ПолучитьНаСервере();
КонецПроцедур

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

Выбор констант менеджера констант

Константы.НазваниеОрганизации – это уже менеджер конкретной константы, у которого есть метод Получить(), при помощи которого можно получить значение константы.

Вы заметили, что с менеджером команды я работаю в серверном контексте (под директивой &НаСервереБезКонтекста, но можно использовать и директиву &НаСервере ). Это потому что менеджер констант имеете доступность Сервер, Толстый клиент и прочее «тяжелые» режимы. В тонком клиенте нельзя обратиться к менеджеру констант!

Установить значение константы

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

&НаСервереБезКонтекста
 Процедура УстановитьНаСервере()
     Константы.ПроцентНалогаНаПрибыль.Установить(25);
 КонецПроцедуры
 
 &НаКлиенте
 Процедура Установить(Команда)
     УстановитьНаСервере();
 КонецПроцедуры

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

Другие статьи по теме конфигурирования:

Документы в 1С 8.3

Справочники в 1С 8.3

Предопределенные элементы справочников 1С

Формы справочников в 1С 8.3

Журнал документов в 1С 8.3

Табличные части объектов 1С

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

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

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

1. Чтение значения константы

Мы можем прочитать значение константы с помощью метода Получить()

// чтение значения Константы
Название = Константы.НазваниеОрганизации.Получить();

Обратите внимание на слово Константы (а не Константа, как было в версии 7.7).

2. Запись нового значения константы

Для записи (установки) нового значения константы используется метод Установить()

// запись нового значения Константы
Константы.НазваниеОрганизации.Установить(«ООО Рога и копыта»);
 

3. Работу с набором констант

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

//создаем набор из трех констант

//обратите внимание, что мы лишь создаем набор констант и пока не знаем их значения

Набор = Константы.СоздатьНабор(«Руководитель,НазваниеОрганизации,АдресОрганизации»);

//теперь с помощью метода Прочитать() мы можем прочитать значения констант нашего набора

Набор.Прочитать(); //прочитать из базы сразу три константы

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

//устанавливаем значение констант в наборе (не в базе)
Набор.Руководитель = «Иванов И.И.»;
Набор.НазваниеОрганизации = «ООО Новые рога и копыта»;
Набор.АдресОрганизации = «Россия, г. Москва, Кремль»;
Набор.Записать();   //записываем в базу сразу значения трех констант

4. Сравнение со значением константы в запросах

Иногда нам может потребоваться в запросе сравнить данные со значением константы. В данном примере мы выбираем записи из справочника Напоминания, у которых значение реквизита Код равно значению нашей константы НашеЧисло. Более подробно язык запросов 1С мы рассмотрим в следующих материалах по встроенному языку 1С. 

«ВЫБРАТЬ
|   НашеЧ.Значение,
|   Напоминания.Код,
|ИЗ
|   Константа.НашеЧисло КАК НашеЧ,
|   Справочник.Напоминания КАК Напоминания
|ГДЕ
|   Напоминания.Код = НашеЧ.Значение»

Количество просмотров: 61871

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

Объект 1С "Константы"

Добавление константы выполняется с использованием контекстной команды «Добавить».

Рисунок «Палитра свойств объекта 1С «Константы»

Палитра свойств объекта 1С "Константы"

[свернуть]

Основные свойства объекта метаданных 1С «Константы»:

Тип

Тип — тип константы, может быть выбран из раскрывающегося списка, являться составным типом или определяемым типом. Ничем не ограничен, может редактироваться.

Тип константы 1С

[свернуть]

Модуль менеджера значения

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

  • <ПередЗаписью>
  • <ПриЗаписи>
  • <ОбработкаПроверкиЗаполнения>
  • <ОбработкаФормированияПоВерсииИсторииДанных>

[свернуть]

Режим упрaвления блокирoвкой данных

Режим управления блокировкой данных — управляемый или автоматический режим блокировок 1С:

  • Автоматический — при записи, скажем, любого элемента справочника, будут использоваться автоматические блокировки, устанавливаемые СУБД. Собственный менеджер блокировок 1С задействован не будет.
  • Управляемый — дополнительный режим работы, позволяющий использовать собственный менеджер транзакционных блокировок 1С:Предприятия, независимый от используемой СУБД.

ВАЖНО! Режим управления блокировкой данных конкретного объекта конфигурации зависит от значения свойства «Режим управления блокировкой данных» в палитре свойств Конфигурации:

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

Например, если установлен режим Автоматический, то при записи, скажем, любого элемента справочника, будут использоваться автоматические блокировки, устанавливаемые СУБД. Собственный менеджер блокировок задействован не будет.

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

Если для свойства конфигурации выбран режим Автоматический и управляемый, то для конкретного объекта конфигурации режим блокировки будет определяться значением свойства Режим управления блокировкой данных самого объекта конфигурации (см. выше).

Подробнее о режимах блокировки см. https://its.1c.ru/db/metod8dev#content:5839:hdoc

Режим управления блокировкой данных конфигурации 1С

[свернуть]

Использовать стандартные команды

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

[свернуть]

Основная форма

Основная форма — форма из списка общих форм, которая установлена как основная для редактирования значения константы.

Основные формы вызываются взамен автоматически генерируемых по умолчанию при соответствующем обращении к объекту.

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

Если объект конфигурации будет использоваться как-то иначе, чем предполагает стандартная форма, для для этого добавляются дополнительные формы.

Основные формы указываются в конфигураторе.

Пример для документа

Основные формы документов 1С

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

Рисунок

Обычная форма как основная

[свернуть]

Работа с константами в 1С

Обращение к константам на встроенном языке производится с использованием следующих типов метаданных (читай также Манипулирование объектами базы данных 1С и примеры):

КонстантыМенеджер

Тип предоставляет доступ к списку констант. КонстантыМенеджер позволяет, в частности:

  • получить тип КонстантаМенеджер для управления конкретной константой;
  • перебрать все константы с помощью конструкции Для каждого (For each);
  • создать тип КонстантыНабор для одновременного чтения и записи сразу нескольких констант.

КонстантыМенеджер позволяет затем обратиться к менеджеру конкретной константы по ее имени.

Существуют свойства глобального контекста Константы, Справочники, Документы,  и т.д., ссылающиеся на объекты типа КонстантыМенеджер, СправочникиМенеджер, ДокументМенеджер и т.д.. Они позволяют упростить написание программы.

Пример

Название = Константы.НазваниеОрганизации.Получить();

СправочникСотрудники = Справочники.Сотрудники;

ВсеДолжности = Справочники.Должности.Выбрать();

ДокументНакладная = Документы.РасходнаяНакладная;

[свернуть]

Использование <Для каждого> для переборки констант

Для Каждого Константа Из Константы Цикл

        Сообщить(Строка(Константа) + » = « + Константа.Получить());

    КонецЦикла;

[свернуть]

КонстантаМенеджер

Менеджер константы, который обеспечивает доступ к конкретной константе, и является своего рода «точкой доступа» к ней в объектной модели встроенного языка. Через него можно прочитать и установить значение константы с помощью методов Получить() и Установить().

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

КонстантыМенеджер = Константы;

//получаем объект для управления одной константой

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

//считываем значение константы из базы данных

Значение = КонстантаМенеджер.Получить();

//записываем новое значение константы в базу данных

КонстантаМенеджер.Установить(НовоеЗначение);

КонстантыНабор

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

Пример

//Создаем набор из двух констант (значений констант в наборе еще нет)

Набор = Константы.СоздатьНабор(«Руководитель,ИНН»);

//Читаем из базы сразу две константы

Набор.Прочитать();

//Меняем значения констант в наборе (но не в базе!)

Набор.Руководитель = «Иванов И.И.»;

Набор.ИНН = «1234567890»;

//Записываем в базу две константы

Набор.Записать();

[свернуть]

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

Понравилась статья? Поделить с друзьями:
  • Как программно изменить заголовок формы 1с
  • Как программно изменить голос
  • Как программно изменить вариант отчета скд
  • Как программно изменить ip адрес
  • Как проводится работа над ошибками после диктанта