Код &НаКлиенте Процедура ОсновноеКонтактноеЛицоПриИзменении(Элемент) Если НЕ ПроверитьЗаполнениеРеквизита() Тогда Сообщить("Выбранное контактное лицо, "+Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента."); КонецЕсли; КонецПроцедуры
&НаСервере Функция ПроверитьЗаполнениеРеквизита() Возврат (Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает); КонецФункции &НаСервере Процедура УстановитьНомерПредставителя()
Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; КонецПроцедуры При проверке выдает ошибку: {Справочник.Контрагенты.Форма.ФормаСписка.Форма(12,11)}: Переменная не определена (Объект)
работаю на версии 1С:Предприятие 8.3 (8.3.10.2650) |
Константы, основы клиент-серверного программирования, общие реквизиты
Теперь при запуске в режиме 1С:Предприятие ненужная команда отображаться не будет.
Выше мы создавали константу Текст сообщения, предполагая выводить заданный в ней текст в качестве сообщения для пользователей, входящих в систему. Реализуем эту функциональность. Для этого нам понадобится написать код в модуле управляемого приложения. Для того, чтобы открыть этот модуль, нужно воспользоваться командой Открыть модуль управляемого приложения корневого элемента конфигурации. Для этого модуля предусмотрено несколько стандартных обработчиков событий, которые можно найти в панели инструментов Модуль, рис. 2.13. Нас интересует обработчик ПриНачалеРаботыСистемы.
В модуле появится пустое тело обработчика, в которое нам нужно ввести команду для вывода сообщения пользователям. Если попытаться обратиться к константе напрямую из модуля управляемого приложения – мы столкнемся с ошибкой. Дело в том, что исполнение модуля управляемого приложения происходит на клиенте, в контексте которого нет доступа к константам. Поэтому нам понадобится код, который выполняется на сервере и возвращает значение константы. В данном примере мы можем возложить на серверную часть примера и вывод сообщения (функция Сообщить, которой можно здесь воспользоваться, работает и на клиенте, и на сервере). Но гораздо полезнее, в плане перспектив повторного использования кода серверной процедуры, "вытащить" серверные данные в метод, который выполняется на клиенте.
Создадим новый общий модуль (в ветви Общие модули дерева конфигурации), назовем его СерверныеФункции. Проследим за тем, чтобы в его свойствах были установлены флаги Сервер и Вызов сервера, рис. 2.14.
Откроем редактор кода для кода модуля (например, двойным щелчком по модулю в дереве конфигурации) и введем следующий код, рис. 2.15.:
//Экспортная функция для вызова из других модулей Функция ПолучитьКонстанту() Экспорт //Возвращаем полученное значение константы Возврат(Константы.ТекстСообщения.Получить()); КонецФункции
Теперь нам нужно вызвать эту функцию в подходящем месте кода обработчика события ПриНачалеРаботыСистемы в модуле управляемого приложения. Например, это можно сделать так:
Процедура ПриНачалеРаботыСистемы() //Выводим сообщение пользователю Сообщить(СерверныеФункции.ПолучитьКонстанту()); КонецПроцедуры
В результате при входе в систему мы получим сообщение следующего вида, рис. 2.16.
Обратите внимание на то, что сообщение выводится в область Сообщения основного рабочего окна. Если сообщение вызвано из модуля какого-либо отдельного окна, например, из модуля формы констант, которая создана ранее, то, по умолчанию, сообщение будет выведено в этом окне.
Посмотрим на этот механизм в действии. Откроем окно редактирования формы констант (Общие формы > ФормаКонстант), перейдем на вкладку Модуль, на панели инструментов Модуль выберем стандартный обработчик события ПриОткрытии, отредактируем тело обработчика, чтобы оно приняло следующий вид, рис. 2.17.:
&НаКлиенте Процедура ПриОткрытии(Отказ) Сообщить("Вы открыли форму констант!"); КонецПроцедуры
Благодаря этому коду при открытии формы констант будет появляться следующее сообщение, рис. 2.18.