Открытие документов «Только просмотр» с дополнительной кнопкой «Изменить»
С помощью минимального изменения конфигурации можно данный недостаток устранить.
Формы документа будут открываться по умолчанию «Только просмотр», а для редактирования документа, пользователю требуется нажать доп. кнопку в командной панели документа. (см. скрин)
С помощью минимального изменения конфигурации можно данный недостаток устранить.
Формы документа будут открываться по умолчанию «Только просмотр», а для редактирования документа, пользователю требуется нажать доп. кнопку в командной панели документа. (см. скрин)
Как реализовать этот функционал?
В конфигурациях от 1С (БП, УТ, ЗУП, УПП и т.д.), при открытие формы документа всегда вызывается какая либо процедура которая проверяет дату запрета редактирования данных.
в конфигурации Бухгалтерия предприятия, редакция 2.0 во всех формах документа ПриОткрытии вызывается:
// Установить доступность формы с учетом даты запрета редактирования
в конфигурации «Управление торговлей», редакция 10.3
Также в конфигурациях от 1С, во всех формах документов присутствует процедура ДействияФормыРедактироватьНомер(Кнопка)
Эту процедуру мы будем использовать для обработки действия по нажатию кнопки «Изменить».
Эти процедуры нам и нужны. Дальше, для примера, разберем, как это реализовать в конфигурации Бухгалтерия предприятия, редакция 2.0.
1. Создать новый общий модуль «лМодульДоработок» содержащий всего 1 процедуру:
Процедура ДобавитьКнопкуВКоманднуюПанельФормы(_Метаданные,_Форма) Экспорт
КП =_Форма.ЭлементыФормы.ДействияФормы; ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
Если КП.Кнопки.Найти(«РедактированиеДокумента») = Неопределено Тогда
2. Изменить стандартную процедуру УстановитьДоступностьФормыДляРедактирования общего модуля РаботаСДиалогами. Добавить в конец процедуры (после всех проверок даты редактирования) текст:
//Если после проверки даты запрета, форма доступна для редактирования, откроем ее на просмотр,
//но добавим кнопочку в панель для возможности редактирования
если НЕ ФормаДокумента.ТолькоПросмотр и ДокументОбъект.Проведен тогда
3. Процедура форм документов «ДействияФормыРедактироватьНомер» состоит из 1 строчки и вызывает процедуру «ИзменениеВозможностиРедактированияНомера» общего модуля «МеханизмНумерацииОбъектов»
МеханизмНумерацииОбъектов.ИзменениеВозможностиРедактированияНомера(ЭтотОбъект.Метаданные(), ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);
Изменить процедуру следующим образом:
Процедура ИзменениеВозможностиРедактированияНомера(МетаданныеОбъекта, ФормаОбъекта, ПодменюДействия, ПолеВводаНомера, ПолеВводаНомераДубль = Неопределено, ТекстВопроса = «») Экспорт
//Если при вызове процедуры форма документа не доступна для редактирования, то вызов процедуры произошел по нажатию кнопки «Изменить»
Если ФормаОбъекта.ТолькоПросмотр тогда
ФормаОбъекта.ТолькоПросмотр = ложь;
ФормаОбъекта.ЭлементыФормы.ДействияФормы.Кнопки.РедактированиеДокумента.Доступность = ложь;
ФормаОбъекта.Обновить();
иначе //иначе на самом деле хотят редактировать номер документа
Кнопка = ПодменюДействия.Кнопки.РедактироватьКодНомер;
Если НЕ Кнопка.Пометка Тогда
Если ПустаяСтрока(ТекстВопроса) Тогда
Если ВРЕГ(ПолеВводаНомера.Данные) = ВРЕГ(«Код») Тогда
ТекстВопроса = «Код присваивается автоматически при записи элемента, самостоятельное его редактирование может привести к нарушению в нумерации в системе. Вы действительно хотите установить код вручную?»
Иначе
ТекстВопроса = «Номер документу присваивается автоматически при записи, самостоятельное его редактирование может привести к нарушению в нумерации в системе. Вы действительно хотите установить номер вручную?»
КонецЕсли;
КонецЕсли;
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Кнопка.Пометка = Не Кнопка.Пометка;
ПолеВводаНомера.ТолькоПросмотр = НЕ Кнопка.Пометка;
ПолеВводаНомера.ПропускатьПриВводе = ПолеВводаНомера.ТолькоПросмотр;
ОбновитьПодсказкуКодНомерОбъекта(МетаданныеОбъекта, ПодменюДействия, ПолеВводаНомера);
Если ПолеВводаНомераДубль <> Неопределено Тогда
ПолеВводаНомераДубль.ТолькоПросмотр = ПолеВводаНомера.ТолькоПросмотр;
ПолеВводаНомераДубль.ПропускатьПриВводе = ПолеВводаНомераДубль.ТолькоПросмотр;
ОбновитьПодсказкуКодНомерОбъекта(МетаданныеОбъекта, ПодменюДействия, ПолеВводаНомераДубль);
КонецЕсли;
//конец проверки Если ФормаОбъекта.ТолькоПросмотр тогда
конецесли;
//конец изменений
Стандартный функционал сохраняется. Изменений минимум. Легко поддерживать (переносить) при обновление.
Функция ОткрытьФорму()
Открывает произвольную форму
Функция ОткрытьФорму() имеет несколько вариантов синтаксиса:
Вариант синтаксиса 1: По имени
Функция ОткрытьФорму() имеет следующий синтаксис:
А также альтернативный англоязычный синтаксис:
Параметры
Описание параметров процедуры ОткрытьФорму() :
Имя параметра | Тип | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Описание | ||||||||||||
ИмяФормы | Строка | |||||||||||
Имя формы, образованное как полный путь к объекту Форма в дереве метаданных (например, «Справочник.Номенклатура.Форма.ФормаОбъекта», «ОбщаяФорма.ФормаПредупреждения») или как полный путь к прикладному объекту, дополненный именем формы по умолчанию (например, «Справочник.Номенклатура.ФормаОбъекта»). Поддерживаются следующие формы по умолчанию: Применимо только для управляемой формы. | ||||||||||||
ОповещениеОЗакрытии (необязательный) | ОписаниеОповещения | |||||||||||
Содержит описание процедуры, расположенной в текущем или в общем модуле, которая будет вызвана при закрытии открываемой формы | ||||||||||||
РежимОткрытияОкна (необязательный) | РежимОткрытияОкнаФормы | |||||||||||
Указывает режим открытия окна управляемой формы. Используется только в управляемом приложении. Варианты значений: Возвращаемое значениеОписание варианта 1Вариант синтаксиса 2: По формеФункция ОткрытьФорму() имеет следующий синтаксис: А также альтернативный англоязычный синтаксис: ПараметрыОписание параметров процедуры ОткрытьФорму() :
Возвращаемое значениеОписание варианта 2Функция ОткрытьФорму() открывает форму, полученную ранее функциями ОткрытьФорму() или ПолучитьФорму() ДоступностьТонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение(клиент). Пример использованияПример кода с использованием процедуры ОткрытьФорму() : Открытие форм
Рекомендация обусловлена соображениями 2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации. Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ). 3. Не следует применять другие способы параметризации формы при открытии. Например, нужно избегать обращения к методам и свойствам формы после ее открытия. ФормаПутеводитель = Форма.ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме»); следует по той же причине использовать параметры формы: ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме», Новый Структура(«РежимОткрытия», «Приветствие»)); 4. Для получения результата работы формы, вместо непосредственного обращения к элементам и реквизитам формы ФормаВопроса = ПолучитьФорму(«ОбщаяФорма.ФормаВопроса»); следует использовать процедуры-обработчики оповещений, которые будут вызваны при завершении работы пользователя с формой: Оповещение = Новый ОписаниеОповещения(«БольшеНеПоказыватьНапоминаниеЗавершение», ЭтотОбъект); &НаКлиенте Если БольшеНеПоказыватьНапоминание = Неопределено Тогда Если БольшеНеПоказыватьНапоминание Тогда 5. Другие ограничения: &НаСервере Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда 6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню «Все функции» вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет: Как в 1с открыть форму программноВ статье будет рассказано о том, как в 1с открыть форму программно. Все описанное ниже, касается только управляемого приложения. Подробно рассмотрим метод глобального контекста ОткрытьФорму. Также можете ознакомиться с более простыми, но менее гибкими способами открыть форму по ссылке: Как в 1с открыть ссылку. Метод ОткрытьФорму по имениСамый гибкий и настраиваемый способ программного открытия формы в 1с 8. Рассмотрим подробно его параметры, а также разберем несколько примеров его использования. Следует заметить, что метод ОткрытьФорму является клиентским. Т.е его можно использовать либо в общих модулях с установленным флагом Клиент, либо в процедурах (функциях) форм с директивой &НаКлиенте. Рассмотрим параметры метода и приведем необходимые примеры. ИмяФормыСодержит полный путь к форме. Можно указать, как путь к форме по умолчанию, так и путь к произвольной форме объекта метаданных. Имя формы указывается в следующих двух форматах: Пример 1. Путь к форме выбора по умолчанию, справочника Номенклатура. Пример 2. Путь к форме СменаПочты справочника Пользователи, по ее имени. ПараметрыСодержит Структуру параметров, которые передаются в открываемую форму. Для каждого типа формы, существует набор стандартных параметров, которые не нужно дополнительно обрабатывать в самой форме. Также набор параметров может различаться и для объектов метаданных. Например, параметр Ключ, для форм объектов. В него можно передать ссылку на открываемый объект (если его не передать, будет открыта форма нового объекта). Также в структуру можно передавать произвольные параметры, которые можно обрабатывать программно, в открываемой форме. Например в обработчике события ПриСозданииНаСервере. Рассмотрим примеры открытия различных форм с использованием параметров. Пример 3. Открыть форму объекта справочника Пользователи, используя ссылку на объект. Пример 4. Открыть форму списка справочника Номенклатура с отбором по реквизиту ВидНоменклатуры и по списку родителей. Здесь Отбор — это стандартный параметр для форм, использующих в качестве основного реквизита Динамический список. Например, это формы списка и выбора. Он представляет из себя Структуру, в которую можно добавить значения элементов отбора. В Ключ — имя реквизита, в Значение — значение отбора. Данным способом можно отобрать значения, используя вид сравнения Равно или ВСписке. Для отбора ВСписке следует добавить в структуру Массив, ФиксированныйМассив, либо СписокЗначений. Следует заметить, что отбор ВИерархии установить данным способом не выйдет. ВладелецВ данный параметр передается элемент формы или форма клиентского приложения (управляемая форма) полностью. Используется для указания подчинения открываемой формы. Это может потребоваться для многих целей, например для: Пример 5. Реализовать программный выбор элемента Номенклатура, в поле ввода. В данном случае необходимо: Параметр ТекущаяСтрока, позволяет выделять ранее выбранный элемент в форме выбора. Стоит заменить, что в обычной ситуации такой метод выбора значений не применяется. Его применяют только тогда, когда нет возможности настроить форму выбора под условия задачи. УникальностьВ параметре можно задать ключ уникальности формы произвольного типа. При открытии формы, платформа будет анализировать, есть в текущем сеансе уже открытая форма, с таким же ключом уникальности. Если такая форма будет найдена, то она будет активизирована, а новая не откроется. Этот механизм работает только для одинаковых форм. Если вы будете открывать формы объекта разных документов с одинаковым ключом, то откроются обе. По умолчанию, платформа сама генерирует ключ уникальности. Поэтому помимо использования собственного ключа, в параметре Уникальность, можно регулировать использование стандартного. Если передать в него значение Ложь, то будет использован стандартный ключ, если значение Истина, то ключ не будет использоваться совсем. Т.е. будет создаваться новая форма, при каждом использовании метода ОткрытьФорму. Значением по умолчанию является Ложь, поэтому специально задавать его не требуется. Пример 6. Одновременно открыть две формы объекта справочника Пользователи, по одной и той же ссылке. В параметре можно указать окно, в котором будет открыта новая форма. Тип параметра ОкноКлиентскогоПриложения. Пример 7. Реализовать программный выбор элемента Номенклатура, в поле ввода. Реализовать выбор в окне формы, на которой расположено поле. В этом примере мы получаем окно текущей формы и используем его для открытия формы выбора справочника. НавигационнаяСсылкаПозволяет установить собственную навигационную ссылку для открываемой формы. Устанавливаемая навигационная ссылка должна иметь тип Строка. Значение по умолчанию: Неопределено, при использовании этого значения, навигационная ссылка задается автоматически. ОписаниеОповещенияОЗакрытииВ параметр передается описание процедуры, которая будет вызвана после закрытия открываемой формы. Тип параметра: ОписаниеОповещения. Пример 8. В 1с открыть форму программно. Использовать форму объекта справочника Пользователи. После ее закрытия сообщить, что карточка пользователя закрыта. Используемые в примере параметры описания оповещения: Описанная процедура обязательно должна иметь два параметра: Также описанная процедура должна быть экспортной. РежимОткрытияОкнаПозволяет указать режим открытия управляемой формы. По умолчанию Неопределено, вручную можно задать одно из значений системного перечисления РежимОткрытияОкнаФормы: Метод ОткрытьФорму по формеСуществует еще один вариант синтаксиса метода ОткрытьФорму. Используется, если вы уже получили форму, произвели с ней какие-то действия и теперь ее необходимо открыть. Пример 9. Получить форму списка справочника Номенклатура, а затем в 1с открыть форму программно. Программирование в 1С для всехОчень часто при 1С разработке возникает необходимость программным способом открыть форму какого-нибудь существующего объекта. Например, нужно открыть какой-нибудь документ, или какой-нибудь справочник. О простом открытии формы, и об открытии формы с передачей параметров, читайте в моей статье: Открыть форму имеющегося объекта с использованием параметра формы Ключ достаточно просто: создаем структуру, у которой будет связка КлючИЗначение с названием ключа «Ключ», а со значением – ссылкой на открываемый объект. И эту структуру в качестве параметра указываем в методе ОткрытьФорму. Открытие формы элемента справочника аналогично: Причем, заметьте, непосредственно не на форме справочника, и не на форме документа нет такого параметра как Ключ. Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения. Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С Промо-код на скидку в 15% — 48PVXHeYu Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси» Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов» можно оплатить вручную: Яндекс.Деньги — 410012882996301 Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей |