Опубликован: 06.12.2011 | Уровень: для всех | Доступ: платный
Лекция 3:

Константы, основы клиент-серверного программирования, общие реквизиты

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >

Теперь при запуске в режиме 1С:Предприятие ненужная команда отображаться не будет.

Выше мы создавали константу Текст сообщения, предполагая выводить заданный в ней текст в качестве сообщения для пользователей, входящих в систему. Реализуем эту функциональность. Для этого нам понадобится написать код в модуле управляемого приложения. Для того, чтобы открыть этот модуль, нужно воспользоваться командой Открыть модуль управляемого приложения корневого элемента конфигурации. Для этого модуля предусмотрено несколько стандартных обработчиков событий, которые можно найти в панели инструментов Модуль, рис. 2.13. Нас интересует обработчик ПриНачалеРаботыСистемы.

Выбор обработчика ПриНачалеРаботыСистемы

Рис. 2.13. Выбор обработчика ПриНачалеРаботыСистемы

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

Создадим новый общий модуль (в ветви Общие модули дерева конфигурации), назовем его СерверныеФункции. Проследим за тем, чтобы в его свойствах были установлены флаги Сервер и Вызов сервера, рис. 2.14.

Общий модуль СерверныеФункции, свойства

Рис. 2.14. Общий модуль СерверныеФункции, свойства

Откроем редактор кода для кода модуля (например, двойным щелчком по модулю в дереве конфигурации) и введем следующий код, рис. 2.15.:

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

Рис. 2.15. Общий модуль СерверныеФункции, код

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

Процедура ПриНачалеРаботыСистемы()
    //Выводим сообщение пользователю
    Сообщить(СерверныеФункции.ПолучитьКонстанту());
КонецПроцедуры

В результате при входе в систему мы получим сообщение следующего вида, рис. 2.16.

Вывод сообщения пользователю

Рис. 2.16. Вывод сообщения пользователю

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

Посмотрим на этот механизм в действии. Откроем окно редактирования формы констант (Общие формы > ФормаКонстант), перейдем на вкладку Модуль, на панели инструментов Модуль выберем стандартный обработчик события ПриОткрытии, отредактируем тело обработчика, чтобы оно приняло следующий вид, рис. 2.17.:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Сообщить("Вы открыли форму констант!");
КонецПроцедуры
Вывод сообщения пользователю из модуля формы констант

Рис. 2.17. Вывод сообщения пользователю из модуля формы констант

Благодаря этому коду при открытии формы констант будет появляться следующее сообщение, рис. 2.18.

Вывод сообщения в форму констант

Рис. 2.18. Вывод сообщения в форму констант
< Лекция 2 || Лекция 3: 12345 || Лекция 4 >
Лариса Дятчина
Лариса Дятчина

Код 

&НаКлиенте

Процедура ОсновноеКонтактноеЛицоПриИзменении(Элемент)

Если НЕ ПроверитьЗаполнениеРеквизита() Тогда

 Сообщить("Выбранное контактное лицо, "+Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента.");

КонецЕсли;

КонецПроцедуры

 

&НаСервере

Функция ПроверитьЗаполнениеРеквизита()

 Возврат (Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);  

КонецФункции

&НаСервере

Процедура УстановитьНомерПредставителя()

 

 Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения;

КонецПроцедуры

При проверке выдает ошибку:

{Справочник.Контрагенты.Форма.ФормаСписка.Форма(12,11)}: Переменная не определена (Объект)
 Возврат (<<?>>Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);   (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,2)}: Переменная не определена (Объект)
 <<?>>Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,32)}: Переменная не определена (Объект)
 Объект.ТелефонКонтактногоЛица=<<?>>Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(6,41)}: Переменная не определена (Объект)
 Сообщить("Выбранное контактное лицо, "+<<?>>Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента."); (Проверка: Тонкий клиент)

 

работаю на версии 1С:Предприятие 8.3 (8.3.10.2650)

максим матасов
максим матасов
Леонид Альбрехт
Леонид Альбрехт
Россия, Екатеринбург, 10, 2004
Оксана Максимова
Оксана Максимова
Россия, Екатеринбург, Уральский государственный университет им. А. М. Горького, 2013