«Умная» кнопка «ОК» в документах (1С 7.7)
Функция для кнопки "OК" в форме документа, вместо стандартного в формуле кнопки: "#Записать? Провести? Закрыть". Делает кнопку более "умной". Например, если документ уже проведен и его открыли, посмотрели и ничего в нем не меняли, то просто закрывает форму документа, при нажатии на кнопку "ОК", без перепроводки дока. И т.п. и т.д.
- Описание
- Подробнее
Описание
Используется внешняя компонента FormEx: http://www.dorex.ru
Она должна быть уже загружена, например, в глобальном модуле в процедуре «ПриНачалеРаботыСистемы»:
//----------------------------------------------------------------------
ЗагрузитьВнешнююКомпоненту("formex.dll");
//----------------------------------------------------------------------
Эту функцию можно добавить в глобальный модуль и вызывать ее в формуле кнопок "ОК" в формах документов, вместо стандартного "#Записать? Провести? Закрыть":
//----------------------------------------------------------------------
// Функция для кнопки Ok в форме документа. Делает кнопку более "умной".
// Например, если документ уже проведен и его открыли, посмотрели и ничего
// в нем не меняли, то просто закрывает форму документа, без перепроводки.
// И соответственно не нарушается последовательность проведенных документов
// без необходимости.
// Параметры:
// Конт - Контекст формы документа
// Режим - Выдавать ли вопрос о проведении дока, 0 - нет, 1- да, по умолч. - 1.
// Возвращает: 1 - при успешном завершении и (если потребовалось) проведении
// документа, 0 - в случае неудачи выполнения функции или неудачи проведения
// документа.
Функция глКнопкаОкВ_Документе(Конт, Режим=1) Экспорт
Перем Результат, Проведен;
Перем ТекДок, ТекФорма;
Перем Сервис;
Результат=0; Проведен=0;
Попытка
Сервис=СоздатьОбъект("Сервис");
Исключение
Сообщить("Ошибка! Отсутствует или не загружена внешняя компонента FormEx: http://www.dorex.ru","!");
Возврат 0;
КонецПопытки;
Попытка
ТекДок=Конт.ТекущийДокумент();
ТекДок.Выбран();
ТекФорма=Конт.Форма;
Исключение
Сообщить("Не удалось получить документ или форму документа.");
Результат=0;
Возврат Результат;
КонецПопытки;
Если ТекДок.Выбран()>0 Тогда
Если Конт.Модифицированность()>0 Тогда
Если ТекДок.Проведен()=0 Тогда
Сервис.ВыполнитьПроцедуру(Конт, "ПриЗаписи");
Конт.Записать();
Если Режим>0 Тогда
Если Вопрос("Провести документ?",1)=1 Тогда
Проведен=Конт.Провести();
Иначе
Проведен=1;
КонецЕсли;
Иначе
Проведен=Конт.Провести();
КонецЕсли;
Если Проведен>0 Тогда
ТекФорма.Закрыть();
КонецЕсли;
Результат=Проведен;
Иначе
Сервис.ВыполнитьПроцедуру(Конт, "ПриЗаписи");
Проведен=Конт.Провести();
Если Проведен>0 Тогда
ТекФорма.Закрыть();
КонецЕсли;
Результат=Проведен;
КонецЕсли;
Иначе
Если ТекДок.Проведен()=0 Тогда
Сервис.ВыполнитьПроцедуру(Конт, "ПриЗаписи");
Конт.Записать();
Если Режим>0 Тогда
Если Вопрос("Провести документ?",1)=1 Тогда
Проведен=Конт.Провести();
Иначе
Проведен=1;
КонецЕсли;
Иначе
Проведен=Конт.Провести();
КонецЕсли;
Если Проведен>0 Тогда
ТекФорма.Закрыть();
КонецЕсли;
Результат=Проведен;
Иначе
ТекФорма.Закрыть();
Результат=1;
КонецЕсли;
КонецЕсли;
Иначе
Попытка
Сервис.ВыполнитьПроцедуру(Конт, "ПриЗаписи");
Конт.Записать();
Исключение
Сообщить("Не удалось записать новый документ.");
Результат=0;
Возврат Результат;
КонецПопытки;
Если Режим>0 Тогда
Если Вопрос("Провести документ?",1)=1 Тогда
Проведен=Конт.Провести();
Иначе
Проведен=1;
КонецЕсли;
Иначе
Проведен=Конт.Провести();
КонецЕсли;
Если Проведен>0 Тогда
ТекФорма.Закрыть();
КонецЕсли;
Результат=Проведен;
КонецЕсли;
Возврат Результат;
КонецФункции // глКнопкаОкВ_Документе
//----------------------------------------------------------------------