Частенько бывает, что нужно оповестить или обратить внимание пользователя на оповещение звуком, вот несколько решений:
Стандартный вариант:
Синтаксис: Сигнал()
Описание: Воспроизводит звуковой сигнал. Устройство, воспроизводящее звук, а также характер звукового сигнала зависят от программно-аппаратного состава компьютера и звуковых установок ОС.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
В 1С предполагается, что СообщениеПользователю выводятся для того, чтобы сообщить пользователю об ошибках.
А для информирования о выполняемом действии рекомендуется использовать метод встроенного языка ПоказатьОповещениеПользователя().
СообщениеПользователю выводит сообщение пользователю (после окончания обработки) или сохраняет его в очередь, если сообщение невозможно вывести прямо сейчас.
Пример вывода сообщения на клиенте:
При обработке на сервере:
Необходимо зарегистрировать в системе соответствие объекта и имени реквизита формы. Для этого в глобальном контексте реализована функция УстановитьСоответствиеОбъектаИРеквизитаФормы(). Сделать это можно следующим образом:
В данном фрагменте выполняется преобразование объекта из данных формы в реальный объект и устанавливается его соответствие с реквизитом формы по имени "Объект".
Если в дальнейшем требуется создать сообщение, можно сделать это следующим образом:
В этом фрагменте создается новый объект СообщениеПользователю, в котором запоминается Текст сообщения и указывается Поле объекта, ошибка в данных которого вызвала необходимость вывода сообщения. Информация о том, как объект расположен в форме берется из предварительно запомненной пары "Объект/ИмяРеквизитаФормы". В дальнейшем сообщение будет выведено в окно сообщений формы и привязано к соответствующему элементу управления.
Примеры заполнения свойства Поле объекта СообщениеПользователю
ТипШаблонПример
Реквизит
ИмяРеквизита
Контрагент
Табличная часть
ИмяТабличнойЧасти
Скидки
Реквизит табличной части
ИмяТабличнойЧасти[ИндексСтроки].ИмяРеквизита
Номенклатура[10].Количество
Реквизит набора записей
[ИндексСтроки].ИмяРеквизита
[10].Курс
Еще примеры:
ПоказатьОповещениеПользователя - оповещение возникает в правом нижнем углу приложения и сообщает о совершенном действии. В течение нескольких секунд оно постепенно гаснет и пропадает. При этом, если навести на оповещение курсор мышки, оно не гаснет, и есть возможность внимательно его прочитать:
Как в 1С производится запуск фоновых заданий, каким образом можно получить список заданий при помощи метода "ПолучитьФоновыеЗадания()?
В одном проекте понадобилось запускать выполнение выгрузки на сайт с сервера.
Пользователь на своем клиенте открывает обработку, устанавливает параметры и нажимает выгрузить.
Выгрузка идет не с компьютера клиента, а создается фоновое задание на сервере!
На клиенте в модуле Кнопки Выгрузить:
ПараметрыФоновогоЗадания - это переменные функции, они задаются по порядку как определены в вызываемой функции.
На сервере в общем модуле МодульРегламентныхЗаданий:
Как Получить фоновые задания?
Напишем в процедуре обработки нажания следующий код:
Текст процедуры на сервере:
В окно сообщений выведутся наименования выполняющихся и выполненных в 1С фоновых заданий с наименованием "Тестовое задание", так как мы сделали отбор именно по этому наименованию.
Все чаще и чаще встречаются обмены, используя технологию Web-Сервисов. Это удобно, т.к для хостовой базы данных достаточно установить расширение Web-Сервиса и обработчик данных, а для клинтского решения подключиться к Web-Сервису. Технология является мультиплатформенной и на данный момент ее использование весьма актуально.
Примерами таких веб-сервисов можно назвать:
http://www.cbr.ru/scripts/Root.asp?Prtid=DWS веб-сервис Центробанка, для получения ежедневных данных.
http://api.yandex.ru/speller/doc/dg/concepts/api-overview.xml веб-сервис Яндекса проверки правописания.
https://www.flightstats.com/developers/bin/view/Web+Services/WSDL ряд веб сервисов авиастатистики, для мониторинга полетов, сведений о погоде, и.т.п.
WSDL (Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML. (спецификация http://www.w3.org/TR/wsdl).
SOAP (Simple Object Access Protocol — простой протокол доступа к объектам) — протокол обмена структурированными сообщениями в распределенной вычислительной среде. SOAP используется для обмена произвольными сообщениями в формате XML и удалённого вызова процедур (RPC). (спецификация http://www.w3.org/TR/soap/).
XDTO (XML Data Transfer Objects) — механизм объектного моделирования данных, описываемых с помощью схемы XML (подробнее http://v8.1c.ru/overview/xdto.htm).
Большинство примитивных типов сериализованных объектов разработана компание W3 и их описание находится в пространстве имен «http://www.w3.org/2001/XMLSchema».
 
и так: Задание 1: Установка платформы 1С: Предприятие, установка компоненты IIS сервера, связь Web-Расширения 1С с сервером IIS.
При установке платформы 1С: Предприятие необходимо установить Web-Расширение.
Рис. 1. Выбранные компоненты в момент установки 1С
В меню «Панель управленияВсе элементы панели управленияПрограммы и компоненты» Необходимо выполнить установку дополнительных компонентов Windows «Включение или отключение компонентов Windows» где указать все компоненты IIS (за исключением FTP, для текущей работы он не требуется). После установки рекомендуется перезапустить операционную систему.
Рис. 2. Выбранные компоненты в момент установки IIS
В меню «Панель управленияВсе элементы панели управленияАдминистрирование» запустить консоль «Диспетчер служб IIS», где открыть элемент «Пулы приложений» открыть пул «DefaultAppPool» в контекстном меню выбрать «Дополнительные параметры…» где элемент «Разрешены 32-рязрядные приложения» надо установить «True». Это необходимо для работы Web-Расширения 1С, т.к. оно является 32-битным прилодением.
В той же консоли «Диспетчер служб IIS», выбрать элемент «Default Web Site», выбрать действие «Проверка подлинности» где необходимо включить варианты: «Анонимная проверка подлинности», «Обычная проверка подлинности», «Проверка подлинности Windows».
Теперь возможна публикация Web-Сервисов 1С на сервере IIS. Но для того, чтобы было возможно выполнить эту публикацию, необходимо запустить Конфигуратор 1С: Предприятия от имени пользователя «Администратор».
Задание 2: Создание простой конфигурации 1С.
Считаем, что в базе данных есть информация информации обо всех заказах, содержащая количество и тип номенклатуры, который был заказан, в одном заказе может быть список, содержащий номенклатуру и количество, заказ так же имеет свой номер и дату его создания. Информацию обо всех заказах надо передать через Web-Сервис.
Для описания этого необходимо создать объекты базы данных:
Рис. 3. Структура данных в созданной конфигурации 1С
Справочник «Номенклатура», без дополнительных реквизитов. В реквизитах «по умолчанию» содержится информацию о наименовании и коде номенклатуры.
Документ «Заказ покупателя», который будет содержать табличную часть «Товары», каждая строка которой будет иметь информацию о номенклатуры (элемент типа «СправочникСсылка.Номенклатура») и количестве (элемент «Количество» типа «Число» беззнаковое с 15 знаками до запятой и 3 после).
Далее можно запустить 1С в режиме предприятия и создать несколько документов, заполненных созданными нами же номенклатурами и соответствующим количеством.
Задание 3: Создание и публикация Веб-Сервиса 1С.
В группировке «Общие» конфигурации создать новый элемент типа «XDTO-пакеты», первоначально для передачи номенклатуры. Его можно назвать, например «NomenclatureXDTO». URL пространство имен, в соответствии со спецификацией WSDL необходимо назначить в виде URL адреса спецификации данного пакета, например
«company.com/1C/Nomenclature». В этом пакете необходимо создать тип объекта, например «Nomenclature», в котором есть реквизиты «Code» и «Name», с соответствующим типом «string (http://www.w3.org/2001/XMLSchema)».
Теперь надо создать второй XDTO пакет, который будет содержать информацию о заказах покупателей, его можно назвать «ClientOrderXDTO» в пространсте имен «company.com/1C/ClientOrder». В первую очередь необходимо подключить директиву импорта «company.com/1C/Nomenclature», для того, чтобы можно было использовать созданный нами пакет сериализации номенклатуры. Это необходимо для передачи номенклатуры, содержащейся в табличной части документа «Заказы покупателей».
Теперь надо создать тип объекта «ClientOrderRow», содержащий одну строку табличной части. Этот тип будет состоять из совокупности реквизитов «Nomenclature» и «Count», соответственно для номенклатуры необходимо указать тип объекта «Nomenclature (http://company.com/1C/Nomenclature)», а для количества, «double (http://www.w3.org/2001/XMLSchema)».
Тип объекта, содержащий сам заказ можно назвать «ClientOrder» должен содержать номер заказа, дату создания и массив элементов из табличной части заказа. «Number» типа строка, «Date» типа «dateTime (http://www.w3.org/2001/XMLSchema)» и «Products» типа «ClientOrderRow (http://company.com/1C/ClientOrder)», при этом необходимо указать, что минимальное количество «0», а максимальное количество «-1», это говорит о том, что этот объект будет массивом.
Но, поскольку необходимо возвращить список заказов, то необходимо создать тип объекта, содержащий этот массив, потому надо создать еще один элемент, называемый «ArrayOfClientOrders», у которого будет всего один реквизит, называемый «ClientOrder» типа «ClientOrder (http://company.com/1C/ClientOrder)».
Рис 4. Структуры XDTO пакетов в 1С
На этом создание описания передаваемых значений можно считать оконченным. Необходимо описать сам веб сервис и его методы.
В группировке «Общие» конфигурации надо создать объект, Web-Сервиса. Его можно назвать «Service». Во вкладке «Прочее» надо указать пространство имен, которому принадлежит веб-сервис, например «company.com/1C», а так же список XDTO пакетов, содержащий только что созданные пакеты «company.com/1C/Nomenclature, company.com/1C/ClientOrder». Во вкладке «Операции» создать метод «GetClientOrders», который будет возвращать значения «ArrayOfClientOrders (http://company.com/1C/ClientOrder )», при этом установить возможность возвращать пустые значения и нажать на поле с лупой, называемое «Имя метода», тем самым в модуле веб-сервиса будет создана функция, который будет вызвана при обращении к данному методу веб-сервиса.
Для того, чтобы корректно описать функцию, получающую из базы данных и возвращающую список заказов покупателей, необходимо знать внутренний язык 1С, потому код этой функции находится в приложении 1. В пояснении нуждается то, что «ФабрикаXDTO», это некоторый менеджер, который выполняет сериализацию объектов, и этот сериализованный объект необходимо возвратить. При этом происходит выборка всех заказов, содержащихся в базе данных, сериализация полей номера, даты, и строк табличной части, при этом номенклатура, нуждается в дополнительной сериализации, и уже упакованный объект вставляется в общую структуру. Собирается массив упакованных объектов, сериализуется в пакет массива. И отправляется клиенту, как результат вызванной функции.
Для публикации веб-сервиса в меню конфигуратора 1С выбрать «АдминистрированиеПубликация на веб-сервере…», после чего указать название публикации веб-сервиса, например «Company», имя сервиса, например «Service» и адрес «service.1cws», а так же указать путь для публикации, например «C:\inetpub\www\root\Company».
После этого WSDL структура Web-Сервиса будет доступна по адресу «localhost/Company/ws/service.1cws?wsdl»
Задание 4: Создание клиента на C# платформы .NET 4.0.
В Visual Studio создать новое консольное приложение C#.
Далее вызвать контекстное меню над элементом проекта «Reference», и выполнить действие «Add service reference…», в открывшемся меню нажать на кнопку «Advanced…», откроется окно, где необходимо нажать на кнопку «Add Web Reference…».
Откроется меню, в которое необходимо вставить ссылку на WSDL описание веб-сервиса.
Рис. 5. Подключение веб-сервиса к проекту на C#
Для созданного в 1С веб-сервиса эта ссылка будет иметь вид «localhost/Company/ws/service.1cws?wsdl», после корректного получения описания веб-сервиса надо указать название пространства имен .NET, из под которого будет доступно обращение к веб-сервису, например «CompanyService», затем нажать на кнопку «Add Reference…», Visual Studio автоматически сгенерирует классы по этому описанию. В проекте достаточно будет вызывать методы сгенерированного класса, при этом сериализация и вызов будут выполнять платформой .NET.
Далее необходимо написать программу, которая будет обращаться к веб сервису, и выводить пользователю полученные данные. Для этого необходимо знать язык C#, код программы представлен в приложении 2. Из этого кода надо пояснить, то, что создание объекта «Service», есть не что иное, как создание менеджера обращения к сервису. От этого имени будут вызывать методы веб-сервиса.
«_1CWebServiceClientConsole» — это общее пространство имени проекта, оно выбирается при создании. Пространство имени веб-сервиса, полученное из WSDL структуры полностью включено в пространство имени проекта, что позволяет вызывать удаленные методы «как свои».
Построение такой архитектуры является прозрачной для программистов, но при этом необходимо понимать в какие моменты и что проходит сериализацию для последующей передачи. Подобная архитектура клиент-серверных приложений на данный момент самая популярная.
Приложение 1: код функции GetClientOrders на языке 1С
Приложение 2: код программы на C# осуществляющий обращение к веб-сервису
Оповещение пользователей в 1с в управляемом приложении могут быть вызваны как самой платформой, например, при записи документа, так и разработчиком, если он применит метод глобального контекста ПоказатьОповещениеПользователя().
Оповещения появляются в отдельном не модальном окне, по умолчанию привязанному к панели задач операционной системы, и затухают через несколько секунд после появления.
Если вывести несколько оповещений подряд, то пользователь сможет увидеть только последнее.
Последние несколько оповещений можно увидеть на панели истории.
При программном формировании оповещений важно помнить, что метод ПоказатьОповещениеПользователя()доступен только в контексте клиентской части, то есть при работе тонкого, толстого клиента или веб-клиента.
В качестве параметров метода ПоказатьОповещениеПользователя() передается строка с текстом оповещения, навигационная ссылка, текст с пояснением и картинка.
Навигационная ссылка будет представлена в области пояснения как гиперссылка, а в том случае если текст с пояснением не задан, то именно представление навигационной ссылки будет отображено в области пояснения. Получить навигационную ссылку можно для любого объекта базы с помощью глобального метода ПолучитьНавигационнуюСсылку().
Проиллюстрируем вывод оповещения при открытии документа, редактирование которого запрещено.
В приведенном примере производится проверка даты запрета редактирования, установленной в константе, и в том случае если открывается документ, попадающий в период запрета, пользователю выводится оповещение. В оповещении установлена навигационная ссылка на открываемый документ, однако в окне оповещения ссылка будет установлена к тексту «Разрешен только просмотр документа».
еще пример:
Для Толстого клиента kojinandrej предложил следующий механизм:
1. В модуле обычного приложения в процеду ПриНачалеРаботыСистемы добавляем текст
2. Создаем ОбщийМодуль под названием "опМодуль" в модуле вставляем текст
4. Добавляем в конфигурацию необходимые Обработки и формы - пользуемся.
Принцип Работы:
При запуске 1с справой стороны в трее открыто оповещение пользователей. Открываем обработку Оповестить, пишим текст сообщения и отметив получателей отправляем сообщение.
Когда сообщение приходит получателю, то форма оповещени появляется с правой стороны. Что бы сообщение считалось прочитаным, его необходимо открыть двойным щелчком правой клавиши мыши и оно откроется в новом окне как показао на третем изображении. В дальнейшем эти сообщения можно будет просматривать во вкладке "Просмотреные"
В отчете должна быть настроена и указана основная схема компоновки данных
Когда идет конвертирование в ТЗ, то ищется в первом столбце пустая строка, как только она найдена - конвертация считается завершенной.
Поэтому для сложных отчетов - выводите первым столбцом Системное поле № п/п.
Параметры:
<ИмяПроцедуры> (обязательный) Тип: Строка. Имя процедуры, подключаемой в качестве обработчика ожидания.
<Интервал> (обязательный) Тип: Число. Интервал времени в секундах с точностью до 1/10 секунды, через который будет осуществляться вызов процедуры (положительное число).Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина.
<Однократно> (необязательный) Тип: Булево. Признак однократного выполнения обработчика ожидания.
Истина - указанный обработчик ожидания будет выполнен один раз. Значение по умолчанию: Ложь
Описание: Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени.
Примечание:
Вызов обработчика ожидания продолжается пока форма не будет закрыта или пока не будет вызван метод формы ОтключитьОбработчикОжидания.
Подключает вызов указанной процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля через определенный интервал времени. Вызов будет осуществляться только в "состоянии покоя", то есть в тот момент, когда программа не выполняет никаких действий. Вызов обработчика ожидания продолжается, пока система не завершит работу или пока не будет вызван метод глобального контекста ОтключитьОбработчикОжидания.
Для Формы
Параметры:
<ИмяПроцедуры> (обязательный) Тип: Строка. Имя процедуры, подключаемой в качестве обработчика ожидания.
<Интервал> (обязательный) Тип: Число. Интервал времени в секундах с точностью до 1/10 секунды, через который будет осуществляться вызов процедуры (положительное число). Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина.
<Однократно> (необязательный) Тип: Булево. Признак однократного выполнения обработчика ожидания. 0Истина - указанный обработчик ожидания будет выполнен один раз. Значение по умолчанию: Ложь
Описание:
Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени.
Доступность:
Толстый клиент. Примечание:
Вызов обработчика ожидания продолжается пока форма не будет закрыта или пока не будет вызван метод формы ОтключитьОбработчикОжидания.
Пример:
Обработка ожидания в системе 1С:Предприятие, как следует из документации, предназначена для периодического выполнения процедуры глобального модуля с заданным интервалом времени. Код для запуска будет выглядеть следующим образом:
Где "ОбновитьСчетчик_" - имя процедуры глобального модуля, которая будет запускаться с периодичностью в 1 сек. (второй параметр, равный 1)
Но! Проблема в том, что запустить обработку ожидания можно только 1 раз. Повторный запуск приведет к отмене предыдущего. Другими словами, если Вы хотите сделать, к примеру, обработку-таймер для отсчета затраченного времени, то запустить можно только один таймер, т.к. запуск второго таймера приведет к остановке первого. А что делать если Вам надо запустить 2, 3 или больше таких таймеров одновременно? Или Вам надо еще при этом периодически сканировать состояние документов?
Выход есть! Обработку ожидания надо запустить в контексте формы, чтобы отделить этот поток от глобального контекста. И тогда станет возможным периодический запуск процедуры локального модуля, т.е. процедуры, расположенной в модуле формы Вашей обработки.
Код для запуска будет выглядеть следующим образом:
Где "ОбновитьСчетчик_" - имя процедуры локального модуля формы обработки, которая будет запускаться с периодичностью в 1 сек. (второй параметр, равный 1)
Таким образом, в каждой обработке можно запустить свою обработку ожидания, которая будет работать до тех пор, пока открыта форма.
В формах можно использовать ,
где ИмяПроцедуры - имя процедуры, которая запускается через ВремяЗапуска секунд
В самой процедуре нужно вставить для прекращения обработки ожидания (естественно, после выполнения нужных условий).
Источник lessons1c
:
Программисту, имеющего немного опыта на платформе 1С 8.2, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта, а-а-а-а-аааа!!.....
Именно такое сложное чувство непонимания было поначалу и у меня. В процессе обучения и реального опыта была создана эта шпаргалка, целью которой было "разложить всё по полочкам", чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи объектов.
Для чего нам вообще нужны эти обработчики?
Очень часто программисту требуется переопределить стандартное поведение системы во время записи объектов, а именно: отменить запись, в случае каких-то условий; запросить дополнительную информацию у пользователя; дозаполнить реквизиты; что-то ещё записать в базу данных на основании этой записи; что-то изменить на форме после записи и т.д. и т.п. Каждый программист рано или поздно сталкивается с подобными задачами, потому знать назначение и последовательность запуска этих событий программисту, работающему на платформе 1С 8.2, необходимо.
В модуле формы или в модуле объекта?
Сначала надо определиться нужны ли нам данные формы? Будет ли запись записываться программным способом или только интерактивно? Будем ли вести диалог с пользователем?
Дело в том, что часть событий выполняется на уровне модуля формы и это значит, что они выполняются только при интерактивной записи, а также в этих событиях мы можем обращаться к данным формы, вести диалог с пользователем.
Другая часть событий выполняется на уровне модуля объекта, как при интерактивной, так и при программной записи.
Потому можно сразу определиться с обработчиком модуля формы или модуля объекта будем работать.
Модуль формы: на клиенте или на сервере?
Далее, если выбран модуль формы, то надо определиться какой обработчик потребуется: исполняемый на клиенте, или исполняемый на сервере. Если потребуется диалог с пользователем, то на клиенте, в противном случае на сервере. Их можно отличить по имени директивы компиляции или по имени обработчика (когда на сервере, это пишется в имени, например ПередЗаписьюНаСервере()).
Как выбрать конкретный обработчик?
Выбор зависит от поставленной задачи. Что конкретно можно делать в каждом обработчике опишу ниже, а пока пример.
Пример выбора обработчиков событий записи объекта:
Бывают задачи, когда потребуется использовать несколько обработчиков для решения одной задачи. Например, надо запросить информацию у пользователя во время записи: «Будем создавать новый документ на основании этой записи?» и, если пользователь ответит утвердительно, то надо создать новый документ с ссылкой на записываемый объект. Причем запись нового документа надо выполнять в транзакции, т.к. если текущая запись по каким то причинам будет отменена, то и уже созданный и записанный документ не должен остаться в базе данных.
Для решения этой задачи потребуется использовать обработчики события модуля формы по двум причинам:
1) Диалог с пользователем возможен только на клиенте, а клиентеские обработчики есть только в модуле формы. Для диалога будем использовать клиентскую процедуру модуля формы ПередЗаписью(), и сохраним ответ пользователя в параметре этой процедуры «ПараметрыЗаписи».
2) А в процедуре ПриЗаписиНаСервере() модуля формы примем этот параметр и в зависимости от него будем создавать документ или нет. Почему именно эта процедура? Ссылка будет получена только после записи, но поскольку нам нужно записывать в транзакции, то нужно использовать процедуры ДО завершения транзакции, но уже имеющие ссылку на записываемый объект. ПередЗаписью() не подходит , так как ещё нет ссылки, а ПослеЗаписи() не подходит, так как транзакция уже завершена. Остаётся ПриЗаписи(), но перед нами встаёт выбор: модуля формы или модуля объекта? Поскольку обработчик события ПриЗаписи() модуля объекта не содержит параметр, содержащий ответ пользователя, а событие ПриЗаписиНаСервере() модуля формы содержит, то ответ очевиден-используем это событие ПриЗаписиНаСервере() модуля формы потому что:
1) Это событие выполняется в транзакции 2) Содержит параметр «ПараметрыЗаписи», в котором уже содержится ответ пользователя, который передался из процедуры ПередЗаписью() 3) Ссылка уже создана и можно создавать новый документ, используя эту ссылку.
Ну и теперь последовательность запуска событий (в том порядке, в каком они перечислены) и небольшие подробности :
Во многих обработчиках есть параметр «Отказ». Там, где этот параметр присутствует означает, что в этом обработчике ещё можно отказаться от записи, присвоив параметру «Отказ» значение Истина, и тогда запись произведена не будет. 1) Модуль формы ПередЗаписью(Отказ, ПараметрыЗаписи)
Выполняется на клиенте!
Этот обработчик следует использовать, если необходимо организовать диалог с пользователем перед тем, как записать объект. Запросить дополнительную информацию, предупредить о чём-либо, дать возможность отказаться и т.п.
Второй параметр этого обработчика «ПараметрыЗаписи» имеет тип «Структура». У документов эти параметры заполняются системой предопределенными параметрами РежимЗаписи, РежимПроведения. Можно добавить свои.
Эти параметры передаются между событиями формы ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, где их можно благополучно использовать. Например, при записи регистра сведений, надо сделать запись в другой регистр сведений старое значение ресурса. Можно передать старое значение в эти самые параметры и уже в ПриЗаписиНаСервере сделать запись в другой регистр. 2) Модуль формы ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
3) Модуль объекта ОбработкаПроверкиЗаполнения (Отказ, ПроверяемыеРеквизиты)
Эти два обработчика проверки заполнения реализуются через параметр «ПроверяемыеРеквизиты» типа Массив, содержащий реквизиты, которые надо проверять (т.е. которым установлено свойство проверки заполнения «Выдавать ошибку»)
И если из этого массива убрать реквизит, то проверяться он не будет, если добавить, то будет выполняться проверка заполнения.
Таким образом, можно сказать, что эти два обработчика событий предназначены :
Для включения в проверку заполнения тех реквизитов, у которых в свойствах «ПроверкаЗаполнения» указано «Не проверять». Для этого надо добавить этот реквизит в массив параметр «ПроверяемыеРеквизиты»
Для того, чтобы исключить из автоматической проверки реквизиты, у которых установлено свойство проверки заполнения «Выдавать ошибку» в зависимости от каких-то условий. Для этого надо удалить этот реквизит из массива параметра «ПроверяемыеРеквизиты»
Имеется несколько особенностей, которые необходимо учитывать:
Если у формы из которой записывается объект в свойствах не установлено «ПроверятьЗаполнениеАвтоматически», то тогда эти обработчики проверки заполнения не вызываются и проверки не происходят!
Вызываются только при интерактивной записи! При программной записи не вызываются. Для проверки нужно использовать метод объекта ПроверитьЗаполнение(), который инициирует запуск этих событий.
Для документов, имеющих возможность проведения , эти события проверки заполнения вызываются только при проведении!
Оба эти события выполняются на сервере, отличие в том, что ОбработкаПроверкиЗаполненияНаСервере() это событие модуля формы и, следовательно, есть доступ к данным формы. А ОбработкаПроверкиЗаполнения() - событие модуля объекта. 4) Модуль формы ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки. Есть доступ к данным формы. Есть параметр ТекущийОбъект.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Т.е. экземпляр класса объект создан, и можно обратиться к его свойствам и методам, но в базу данных ещё не записан. Начало транзакции 5) Модуль объекта ПередЗаписью(Отказ)
В этом обработчике можно дозаполнять реквизиты объекта или провести дополнительные проверки.
Для документов в параметры данного обработчика добавляются ещё два параметра:РежимЗаписи, РежимПроведения. Запись 6) Модуль объекта ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
Возникает в момент, когда выполняется установка номера нового документа, задачи или бизнес-процесса.
Или ПриУстановкеНовогоКода(СтандартнаяОбработка,Префикс)
Возникает в момент, когда выполняется установка нового кода элемента справочника, узла плана обмена или кода плана видов характеристик.
Эти событии вызываются для объектов у которых указано свойство «Автонумерация» и только для новых объектов.
Если установить параметру СтандартнаяОбработка значение Ложь, то новый номер генерироваться не будет и можно программно задать код объекта в данном обработчике. 7) Модуль объекта ПриЗаписи(Отказ)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи.
Ссылка уже есть и можно записать в базу данных дополнительные данные на основании текущего объекта, используя эту ссылку.
Например, при записи создавать другой документ, содержащий реквизит ссылку на записываемый. 8) Модуль формы ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Вызывается после записи объекта в базу данных, но до окончания транзакции записи. Есть доступ к данным формы. Есть последний шанс отказаться от записи.
Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (СправочникОбъект,ДокументОбъект и т.д). Можно обратиться к его свойствам и методам. Завершение транзакции 9) Модуль формы ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Выполняется на сервере.
Можно использовать для того, чтобы визуально что-то отобразить на форме. 10) Модуль формы ПослеЗаписи(ПараметрыЗаписи)
Выполняется на клиенте!
Можно использовать для того, чтобы визуально что-то отобразить на форме или выдать предупреждение пользователю.
Бывают случаи, когда на данном компьютере пользователя в рабочей базе была старая конфигурация, хотя на любом другом ПК и на сервере она обновилась. Так же может возникать ошибка потока данных. В этих и некоторых других случаях поможет очистка кеша.
В связи с тем, что 1С может быть установлена на различных операционных системах, папка, где хранится кэш, может быть различной. Для Win XP:
%userprofile%\Local Settings\Application Data\1C\1Cv82
%userprofile%\Application Data\1C\1Cv82
Для Win 7:
%userprofile%\AppData\Roaming\1C\1Cv82
%userprofile%\AppData\Local\1C\1Cv82
Серверные оси Windows 2008
C:\Users\<username>\AppData\Local\1C
C:\Users\<username>\AppData\Roaming\1C
А самый простой способ найти папки – это использовать поиск по системе(win + F) по ключевым словам «1сv81» и/или «1cv82». Нужные нам папки находятся в каталоге пользователя.
Напимер: C:\Documents and Settings\%userprofile%\Local Settings\Application Data\1C\1Cv81
C:\Documents and Settings\%userprofile% \Local Settings\Application Data\1C\1Cv82
C:\Documents and Settings\%userprofile% \Application Data\1C\1Cv81\
C:\Documents and Settings\%userprofile% \Application Data\1C\1Cv82\
Важно:
1) Кэш хранится в двух папках. Чаще всего эти папки называются «LocalSettings» и «ApplicationData». Обе папки находятся в каталоге пользователя.
2) Формат кэш-файлов выглядит вот так: «0df525c2-1c3e-44be-b852-c7059f17c5aa» или «0f2c4d8f-cc84-4033-8744-1acfa6204474». Удалять необходимо только те папки, у которых такой же формат в названии.
3.) Не удаляйте файл ibases.v8i — он содержит список баз Можно ли изменить путь кэша метаданных?
Можно. С помощью групповых политик (gpedit.msc) можно переопределить путь профиля пользователя целиком (не только кэш метаданных). ВАРИАНТЫ АВТОМАТИЗАЦИИ:
1. Доп. ключик командной строки /ClearCache — очистка кэша клиент-серверных вызовов (используется для тонкого и толстого клиентов в режиме 1С:Предприятия).
2. bat / cmd файл:
и текст батника с проверкой на ХР или 7:
3. Процедуру ОчиститьКэшИПерезапуститьПрограмму() создаем в глобальном модуле и вызываем ее когда нужно почистить кэш 1С
Для 1с поле ввода с типом строка можно применить маску ввода. В 1с маска задает формат представления данных и ограничивает вводимой информации. Это очень удобно бывает во многих жизненных задачках, например ввод телефона, ввод специального кода или представления номера. В 1с маску можно задать как интерактивно «в режиме конфигуратора», так и программно.
Для 1с поле ввода маска доступны следующие форматы ограничители. Ввод только числовых данных:
* 9 – вводятся только цифры
* # – вводятся цифры и знаки «+» «-» и пробел
* h ввод шестеричных цифр
Ввод цифр и букв:
* @ – ввод символов алфавита, и при этом они будут преобразованы в верхний регистр
* N – разрешен ввод алфавитных символов но уже можно контролировать регистр.
* U – вводи символов алфавита с преобразованием в верхней регистр. Отличие между U и @ не смог найти.
* ! – любой введенный символ автоматический преобразуется к верхнему регистру
* X – разрешен ввод только латиницы
Для запрет ввода символа «^» в 1с поле ввода, необходимо прописать этот символ в маску
В маске могут присутствовать специальные символы «.» , «(», «)», «-» и «,» и некоторые другие, они позволяют форматировать строку.
Например, нам нужно указать, что номер вводится с указанием кода города. То нужно прописать 1с маску ввода «9 (999) 999 99 99» или «9 (999) 999-99-99». Все зависит от требуемого формата представления строки. Или допустим нам нужно ввести формат дополнительного номера накладной типа «код подразделение.месяц.год», тогда маска будет «UUUU.99.9999» или «UUUU/99/9999»
Стоит помнить что, задавая маску – мы обязаны задать её полностью такой длины, какой длины вводится строка. Либо если существуют несколько форматов строки, короткий и длинный – то можно задать две и более масок, через запятую.
Например, вводим сотовый телефон клиента, либо городской (без указания кода города), тогда 1c маска будет 9 (999) 999-99-99;999-99-99 Из справки 1С:
ПолеВвода (TextBox) - Маска (Mask)
Использование: Чтение и запись.
Описание:
Тип: Строка. Содержит посимвольную строку маски интерактивного ввода текста в поле.
В строке маски допустимо использование следующих специальных символов:
! - любой введенный символ преобразуется в верхний регистр;
9 - допустимо ввести произвольный символ цифры;
# - допустимо ввести произвольный символ цифры или - (знак минус) или + (знак плюс) или пробел;
N - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры);
U - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный символ преобразуется в верхний регистр;
X (латинского алфавита) - допустимо ввести произвольный символ;
^ - не допустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка;
h - допустим ввод символов обозначения шестнадцатеричных цифр;
@ – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел.
При помещении значения из поля ввода с маской в текстовый реквизит, связанный с этим полем ввода, происходит следующее преобразование: на тех позициях, где в маске стоит символ "@", а в строке пробел – пробел удаляется. Если в маске из специальных символов используются только символы "@", то все символы текста, соответствующие символам маски, не являющимся специальными символами, удаляются после по-следнего непустого блока из символов "@". Например, при маске "@@.@@.@@." текст "41. 2. ." преобразуется в "41.2".
Для того, чтобы использовать в маске один из специальных символов, нужно использовать перед ним символ "\".
Допускается указание нескольких масок в одном параметре. Маски разделяются символом ";". В этом случае использоваться будет та маска, к которой подходит введенный текст.
Недоступно на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Пожалуй, начнем сразу с практического примера.
В справочник Контрагенты нам необходимо заносить информацию о поставщиках, покупателях, банках, налоговых органах, различных фондах и пр. Для каждого вида контрагента нас интересует разная информация.
Создадим функцию, возвращающую список «важных» реквизитов в зависимости от вида контрагента:
Где же ее правильнее разместить?
Напрашивается вариант - в процедуре Модуля объекта «ПередЗаписью()». Тем самым мы на этапе записи будем контролировать правильность заполнения нужных нам реквизитов. С точки зрения создания, изменения элемента справочника, нас все устраивает. Но если нам необходимо, чтобы некоторые менеджеры заносились контрагентов в ИБ без контроля, а спустя какое-то время мы будем выполнять проверку на корректность заполнения данных в справочнике. Тогда нужно будет написать обработку. И в этой обработке, перебирая элементы, проверять заполнение реквизитов. Т.о. эту функцию придется разместить в коде обработки. А это получается дублирование кода, со всеми вытекающими проблемами. Можно получать объект каждого элемента, обращаться к функции, расположенной в его Модуле объекта. Но это будет дополнительные обращения к БД, тогда как в обработке нам достаточно только ссылок.
Можно выйти из этой ситуации создав Общий модуль «РаботаСКонтрагентами» и разместить в нем функцию возвращающую список реквизитов для проверки. В этом случае будем обращаться так «РаботаСКонтрагентами.ПолучитьСписокВажныхРеквизитов(ВидКонтрагента)».
Но! На платформе 8.2 как раз для решения подобной задачи и был создан Модуль менежера. Там и разместим нашу функцию. А обращаться мы будем: «Справочники.Контрагенты.ПолучитьСписокВажныхРеквизитов(ВидКонтрагента)».
Т.о. на ряду с предопределенными методами, мы можем самостоятельно разработать свои процедуры и обращаться к ним как методам Менеджера объекта, через точку. У нас отпадает необходимость создавать «тематические» внешние модули такие как «Работа с Контрагентами», «Процедуры Номенклатуры»...
Обратимся теперь к теории, чтобы «разложить все по полочкам».
Руководство разработчика дает нам следующее описание: «Модуль менеджера существует у всех прикладных объектов и предназначен для управления этим объектом как объектом конфигурации. Модуль менеджера позволяет расширить функциональность менеджеров за счет введения процедур и функций на встроенном языке. Фактически это позволяет описать методы для объекта конфигурации, которые относятся не к конкретному экземпляру объекта базы данных, а к самому объекту конфигурации». Именно это мы и разобрали в нашем практическом примере.
Отобразим иерархию классов прикладных объектов на примере Справочников:
Т.е. мы видим, что появление «Модуля менеджера объекта» логично расширяет свойства класса СправочникМенеджер, так же как экспортные процедуры «Модуля объекта» расширяют методы класса СправочникОбъект. Нужно ли было создавать «Модуль прикладного объекта Справочники (Документы, Перечисления)». Наверное нет. Достаточно трудно придумать какие-либо задачи для единой обработки всех видов справочников.
Кроме возможности расширения методов класса, в модуле менеджера существует предопределенная процедура События . Она возникает на сервере перед стандартным формированием списка при вводе по строке, автоподборе текста и быстром выборе, а также при выполнении метода «ПолучитьДанныеВыбора()».
Так же хочу обратить внимание. При использовании конструктора печати прикладного объекта, платформа расположит процедуру формирования табличного документа непосредственно в Модуле менеджера. И это логично. Теперь, чтобы получить табличный документ элемента справочника нет необходимости получать объект. Достаточно кода: .
В 8-ых версиях используйте: ИспользуемоеИмяФайла (UsedFileName)
Использование:
Только чтение.
Описание:
Тип: Строка. Содержит полное имя файла внешней обработки.
Недоступно на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Для 7-рки РасположениеФайла(<?>,);
FilePath(<?>,);
Синтаксис:
Назначение:
Определить, где располагается данный внешний отчет.
Параметры:
<Путь> - идентификатор переменной, куда метод возвращает путь к файлу, где располагается данный внешний отчет.
<Имя> - идентификатор переменной, куда метод возвращает имя файла, где располагается данный внешний отчет.
Замечание:
Данный метод следует использовать только в модуле формы внешнего отчета.
Возвращаемое значение:
Тип: Булево. Истина - ввод данных в форму возможен (форма активна); Ложь - форма не активна.
Описание:
Определяет, возможен ли ввод данных в форму. Может быть использован для того, чтобы определить, активизирована ли текущая форма.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.