Как программно отличить "Записать" и "Записать и закрыть"?

1. Fe9_min 50 28.07.22 10:21 Сейчас в теме
День добрый!
Как на форме программно отличить нажатие кнопки "Записать" от "Записать и закрыть" например, в процедурах ПриЗаписи, ПередЗаписью или ещё раньше?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. lmnlmn 69 28.07.22 10:40 Сейчас в теме
(1) На сколько я знаю, стандартные команды не перехватить. Любопытно узнать вашу задачу где подобное прогнозирование потребовалось.
13. Aleksandr_prof 192 17.10.23 12:45 Сейчас в теме
(1) У вас нашлось решение? Тоже ищу
2. laperuz 46 28.07.22 10:27 Сейчас в теме
Убрать стандартные кнопки и сделать свои.
3. soft_wind 28.07.22 10:28 Сейчас в теме
(1) а самый главный вопрос:
А зачем это все определять?
6. Fe9_min 50 28.07.22 11:40 Сейчас в теме
7. ZergKRSK 129 28.07.22 11:44 Сейчас в теме
5. soft_wind 28.07.22 10:55 Сейчас в теме
(1) в общем, на форме при нажатии на эти кнопки срабатывают несколько событий
часть совпадает, часть - нет,
определите нужное для себя событие и используйте.
8. yaroslav.artem 28.07.22 11:52 Сейчас в теме
Не так давно сталкивался с подобной задачей. В итоге только свои кнопки рисовать вместо стандартных с записью доп параметров.
Создаешь переменную вверху модуля формы, что нибудь типо
перем мЭтоЗаписьИЗакрытие;
При нажатии своей кнопки мЭтоЗаписьИЗакрытие = Истина или Ложь, ну и соответсвенно ПередЗаписью смотришь в значение это переменной, пишешь условия.
9. Drivingblind 228 01.08.22 06:59 Сейчас в теме
В типовых конфигурациях УТ/КА/ЕРП видел следующий подход: переопределяются платформенные кнопки "Записать", "Провести", "Провести и закрыть". Прикрепляю скриншоты формы документа "Заказ клиента"
Прикрепленные файлы:
10. MaCCapAkIII 21.03.23 11:51 Сейчас в теме
Приветствую. Работаю с асинхронным диалогом с пользователем в модуле формы документа. Диалог вызывается из процедуры ПередЗаписью и в зависимости от выбора ответа пользователя документ либо записывается (записывается и закрывается форма), либо записи не происходит и форма остается видимой. Так вот платформенная команда Записать и закрыть в этом случае работать перестает, причину понять не могу, происходит только запись документа. Выходит, что если я вмешиваюсь в стандартное поведение процедуры ПередЗаписью (отказ = Истина для работы с асинхронным диалогом), а потом повторно вызываю Запись() - происходит именно запись без закрытия. Поэтому есть вопрос - как определить, что пользователь нажал именно Записать и закрыть, а не просто Закрыть?
11. Sashares 34 21.03.23 13:45 Сейчас в теме
(10)Никак, ничего не изменилось.
Добавить свою кнопку вместо стандартной.
12. Aleksandr_prof 192 17.10.23 12:45 Сейчас в теме
(10) Вы нашли решение? Тоже ищу
14. MaCCapAkIII 17.10.23 17:45 Сейчас в теме
(12) Сделал как советовал 11, переопределил штатную команду своей и использовал переменную для хранения булева значения закрывать форму или нет.
15. kostaen 03.11.23 17:36 Сейчас в теме
1. При создании формы на севере переопределил команду у уже имеющейся кнопки "Записать и закрыть":

// Создаю свою команду
ИмяКомандыЗаписатьИЗакрыть = "ЗаписатьИЗакрыть";
КомандаЗаписатьИЗакрыть = ЭтаФорма.Команды.Добавить(ИмяКомандыЗаписатьИЗакрыть);

// Описываю действие, которое будет вызываться при выполнении команды
КомандаЗаписатьИЗакрыть.Действие = "Подключаемый_" + ИмяКомандыЗаписатьИЗакрыть;

// Присваиваю команду уже имеющейся кнопке
КоманднаяПанель.ПодчиненныеЭлементы.ФормаЗаписатьИЗакрыть.ИмяКоманды = ИмяКомандыЗаписатьИЗакрыть;

// Устанавливаю заголовок кнопке, (по умолчанию присваивается имя команды без пробелов). Не буду здесь описывать, (у меня отдельной функцией делается вставка пробелов перед заглавными буквами).
Показать


2. В процедуре, которую описал в действии команды добавил:

// Свойство в параметрах записи
ЭтаФорма.Записать(Новый Структура("ЗакрыватьПослеЗаписи"));


3. В процедуре "ПередЗаписью":

// Проверяю наличие свойства в структуре, его отсутствие указывает на то, что можно сделать асинхронный вызов
Если Не ПараметрыЗаписи.Свойство("ПродолжениеЗаписи") Тогда
		
// Пробрасываю параметр о том, что форма должна быть закрыта
		ДополнительныеПараметры = Новый Структура;
		ДополнительныеПараметры.Вставить("ЗакрыватьПослеЗаписи",ПараметрыЗаписи.Свойство("ЗакрыватьПослеЗаписи"));
		
// Отказываю в записи, хочу вызвать запись после ответа пользователя
		Отказ = Истина;

//Описываю вопрос и оповещение к нему	
		ОписаниеОповещенияПередЗаписью = Новый ОписаниеОповещения("ПередЗаписьюПродолжение",ЭтаФорма,ДополнительныеПараметры);
		
                ТекстВопроса = НСтр("ru = 'Какой-то вопрос?'");
		ПоказатьВопрос(ОписаниеОповещенияПередЗаписью,ТекстВопроса,РежимДиалогаВопрос.ДаНет);
		
	КонецЕсли;
Показать


4. Процедура "ПередЗаписьюПродолжение" (описана в оповещении к вопросу)

// Ничего не делаю, если пользователь закрыл окно вопроса       
        Если Ответ = Неопределено Тогда
		Возврат;
	КонецЕсли;
// Тут пишем, что хотим делать
....
....
....
// Вызываем запись повторно, но уже с параметрами
        ПараметрыЗаписи = Новый Структура;
// Наличие этого параметра позволит больше не задавать вопрос перед записью
	ПараметрыЗаписи.Вставить("ПродолжениеЗаписи");	

// Пробрасываем параметр о том что форма будет закрыта.
	Если ДополнительныеПараметры.ЗакрыватьПослеЗаписи Тогда
		ПараметрыЗаписи.Вставить("ЗакрыватьПослеЗаписи");
	КонецЕсли;
	ЭтаФорма.Записать(ПараметрыЗаписи);
Показать


5. В процедуре "ПослеЗаписи"

Если ПараметрыЗаписи.Свойство("ЗакрыватьПослеЗаписи") Тогда
	ЭтаФорма.Закрыть();
КонецЕсли;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот