"Умная" кнопка "ОК" в документах (1С 7.7)

16.04.10

Разработка - Универсальные функции

Функция для кнопки "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 Тогда
ТекФорма.Закрыть();
КонецЕсли;

Результат=Проведен;
КонецЕсли;

Возврат Результат;
КонецФункции // глКнопкаОкВ_Документе
//----------------------------------------------------------------------

 

См. также

Универсальные функции Программист Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    1012    14    user706545_kseg1971    0    

4

Универсальные функции Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    2097    zhenyat    7    

6

Универсальные функции Программист Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    4765    Zoltan_Black    11    

2

Универсальные функции Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    13610    4    alsen    3    

5

Универсальные функции Программист Платформа 1С v7.7 Конфигурации 1cv7 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    10418    malovandrey    6    

19

Универсальные функции Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18788    2    HAMMER_59    6    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. salexdv 2348 17.09.09 14:52 Сейчас в теме
2. Tatitutu 3844 17.09.09 14:59 Сейчас в теме
я бы в функции все же предусмотрел ситуацию (если нет внешней компоненты)
- стандратная процедура нажатия - Документ должен записываться и проводится.

Просто представь ситуацию - сегодня кто-то поставит твою функцию (именно так как ты описываешь) и будет радоваться красоте. через какое то время уже другой кто-то (сделает выгрузку данных или перефирийную базу) и уедет в три туды - где про интернет и не слышали) вот он будет приятно удивлен. Что документ не может провестись - и будет вылетать с ошибкой ("Неудачная попытка создать Объект "Сервис") а если он про такой и не слышал....
Evg-Lylyk; +1 Ответить
3. venger 2123 17.09.09 15:07 Сейчас в теме
(2) > а если он про такой и не слышал....

Тогда ему лучше не лезть в производственную базу ручками:)
4. Tatitutu 3844 17.09.09 15:19 Сейчас в теме
(3) Для кого писал ?
ЕМУ -му !!! кому ??? я тебе привел ситуацию - один поправил , а его последователь .... быстрее поросячего визга набирает в интернет строке http://infostart.ru/ раздел помощь - "помогите у меня в ПУБе документы не проводятся ! И в желтой книге про это ничего нет , аааааааааааа шайтан !"
5. Evg-Lylyk 4764 17.09.09 15:23 Сейчас в теме
(3) я работал лет 5 с 7.7 последние годы в основном 8.х иногда на 7.7. чтот делаю. Не использовал ВК. Вообщем согласен с (2) универсально надо делать вы же профи ;) .
6. JohnyDeath 301 17.09.09 15:35 Сейчас в теме
Если я нажимаю кнопку "ОК" у документа, я хочу чтобы он ПЕРЕПРОВЕЛСЯ независимо от того менялся док. или нет. Если же я хочу просто закрыть документ, то нажимаю кнопку с именем "Закрыть" (или Esc).
Мне кажется, что всё это только навредит.
anbxp; albert; Трактор; +3 Ответить
15. venger 2123 17.09.09 16:20 Сейчас в теме
(6) Я видел как пользователи жмакают "Да" или "Нет" на предупреждениях не прочитав их:) И закрывают доки кнопкой "Ок":) А что, говорят они? Ведь док закрывается:)
18. JohnyDeath 301 17.09.09 17:10 Сейчас в теме
(15) они эти предупреждения уже наизусть знают.
А людей, которые закрывают доки кнопкой ОК не много (на моей практике).
В общем, я свое мнение сказал: "Пользы от такой методики мало, а последствия крайне неприятные"
7. Ish_2 1107 17.09.09 15:39 Сейчас в теме
Если в разработке используется ВК, автор должен предупреждать пользователей жирным шрифтом :
Но помни ! ВК - это зло.
Tatitutu; +1 Ответить
9. vip 17.09.09 15:50 Сейчас в теме
10. Ish_2 1107 17.09.09 16:06 Сейчас в теме
13. vip 17.09.09 16:14 Сейчас в теме
17. hogik 443 17.09.09 17:08 Сейчас в теме
(9)
Тов. Vip.
В данном случае ВК - зло! Т.к. эту задачу можно реализовать и без ВК. А заодно решить вопрос с "бухгалтеру придется объяснять" из (14) сообщения. И если уж вставлять в кнопку другой вызов функций то, думаю, можно вставить и вот это:
ПриЗаписи(1); хПровести(Контекст)
А в модуль формы добавить:
Процедура ПриЗаписи(Т=0)
Если Т=0 Тогда
Предупреждение("Жми ""ОК""...");
СтатусВозврата(0);
Возврат;
КонецЕсли;
...
КонецПроцедуры
Другое дело, если ставится задача: "не ковыряться в каждом документе". Тогда, наверно, и ВК может пригодиться.
19. vip 17.09.09 17:16 Сейчас в теме
(17) Конечно можно эту задачу решить и без ВК. Что я делаю уже много лет.

Я о том, что тов. Ish_2 своими неоднократными унылыми шутками про ВК смущает неокрепшие умы.
ВК - большое добро.
21. Ish_2 1107 17.09.09 17:50 Сейчас в теме
(19) Зло бывает разным. Даже неизбежным.

Лозунги "ВК- это зло !" и "ВК - это добро !" одинаково неверные.
Но первый лозунг более практичен для разработчика . Или :

Всё ли ты сделал, чтобы избежать ВК ?

Сам про ВК ничего не знаю , никогда не применял , но осуждаю !
И vengera , конечно, в этой теме .

Поэтому ещё раз :
Vip , помни ВК - это зло !
23. vip 17.09.09 18:08 Сейчас в теме
(21) Тогда так. "Хорошая ВК - это добро!".
Т.к. ВК бывают очень и очень разные.
24. Ish_2 1107 17.09.09 18:15 Сейчас в теме
(23) Давай так : "Хорошая ВК может стать необходимым ЗЛОМ !" ?
Тогда , считай , сторговались.
25. vip 17.09.09 18:18 Сейчас в теме
(24) Без ВК жизнь нелегка.
А с ВКом все кувырком.
28. venger 2123 17.09.09 22:34 Сейчас в теме
(7) > ВК - это зло.

Кстати, обоснуй;) Т.к. пока единственное, что приходит на ум (при условии, что ВК нормально написана) - это "зависимость" от разработчика ВК, в некотором смысле. Так в таком случае вся ИТ индустрия такое зло, что мама не горюй:-) А уж 1С вместе с армией 1С'негов и того более...;)
29. Ish_2 1107 17.09.09 22:50 Сейчас в теме
(28) Не понял . А чем я занимался в пред.постах в твоей теме ?

Лозунг : ВК - это зло !

1. иллюстирует прежде всего текущую тему - здесь можно было обойтись без ВК.
2. имеет общее практическое значение для разработчика .
8. Tatitutu 3844 17.09.09 15:49 Сейчас в теме
Сань допиши...
Функция глКнопкаОкВ_Документе(Конт, Режим=1) Экспорт
Попытка
...дейсвия "Умной кноки для умных челов"
Исключение
СходитьНаСайтКИзобретателюУмнойКнопкиОК();
КонецПопытки;
КонецФункции
и думаю популярности твоего сайта мягкотелые просто обзавидуются
16. venger 2123 17.09.09 16:45 Сейчас в теме
(8) Специально для тебя дописал:-)
22. Tatitutu 3844 17.09.09 17:55 Сейчас в теме
(16) Спасибо конечно, но я не о себе думал то, когда писал (и не со зла)

и дописал ты не так
Попытка
Сервис=СоздатьОбъект("Сервис");
Исключение
Сообщить("Ошибка! Отсутствует или не загружена внешняя компонента FormEx: http://www.dorex.ru","!");
Возврат 0;
КонецПопытки;
и чего ???
и что делать бедному КОМУ ТО из (2) - документ то не проведется :-)))
А там бухгалтерша орет, плачет, начальству жалуется....пипец полнейший ))))

Сань думай..... подсказываю из твоего же описания, засунь в исключение
"#Записать? Провести? Закрыть"
и все будут счастливы.
11. begemot 269 17.09.09 16:06 Сейчас в теме
А как быть если бухгалтер ручками восстанавливает последовательность???

Например, изменили цену в приходе. И теперь бух. как раз и должен открыть каждый документ реализации и без изменения провести.....

JohnyDeath: "Если я нажимаю кнопку "ОК" у документа, я хочу чтобы он ПЕРЕПРОВЕЛСЯ"...
12. venger 2123 17.09.09 16:11 Сейчас в теме
(11) Групповая обработка доков не катит? Или кнопка "Провести"?
14. begemot 269 17.09.09 16:16 Сейчас в теме
(12) В итоге, бухгалтеру придется объяснять, для того чтобы проведенный документ перепровести, нужно нажать именно "Провести". "ОК" в данном случае не сработает... Мне кажется это не логично...
20. hogik 443 17.09.09 17:39 Сейчас в теме
(0)
Мне эта идея (разработка) напоминает: "Надо ж как-то было изучать объект ...". Теперь изучаем FormEx. ;-)
26. CheBurator 3126 17.09.09 18:27 Сейчас в теме
обработка - в основном правильная. потому что неоднократно/постоянно наблюдаю ситуацию когда между ОК и Закрыть - выбирают ОК - И ЭТО ПОНЯТНО ПОЧЕМУ!!! ОК - понятно, что будет ОК!, А закрыть - а вдруг чего-то не ок будет???
27. vcv 89 17.09.09 21:18 Сейчас в теме
Изменять штатное, обычным пользователем 1С подразумеваемое, привычное поведение кнопки, ИМХО не айс.
Я для себя предпочел другое решение - документ открывается на чтение, хотите редактировать, жмите в документе специальную кнопку, он переоткрывается для редактирования. Правда у меня УРБД и подавляющее большинство документов в ЦБ, где такой режим "открывания" документов особенно актуален, "чужие" и трогать их кнопкой ОК без причины нельзя.
30. Ish_2 1107 17.09.09 22:55 Сейчас в теме
+ 29 На всякий случай :
зло - это не отрицание , а существенное свойство ВК. Вот и всё .
31. venger 2123 17.09.09 23:13 Сейчас в теме
(30) > зло - это не отрицание , а существенное свойство ВК

Совершенно не обоснованно наделение объекта свойством, которым он не обладает или обладание этим свойством не доказано, выдается за истину;) Весело;) Как говориться: под пиво пойдет..., после бутылки водки;)
33. Ish_2 1107 17.09.09 23:46 Сейчас в теме
(31) Умничаешь. Запутать хочешь...
32. anbxp 17.09.09 23:14 Сейчас в теме
А вот у меня кнопка ОК заблокирована у проведенных документов. Хоть с ВК, хоть без:)
34. Арчибальд 2708 18.09.09 08:23 Сейчас в теме
Пользователи у всех разные. И для многих контор (хотя и не для всех) эта штуковина будет благом.
35. w-divin 19.09.09 22:31 Сейчас в теме
почитал споры - не понял к чему... мне лично 80% того что на ИС лежит и нафиг не надо - но я ж не плююсь в авторов со словами "зачем такую лабуду писать". Если не надо тебе это - просто пройди мимо... Аффтару респект. полезная в некоторых случаях тема ))) мне пригодилась )))

Улыбнуло "ВК=зло" ))) минут 20 представлял себе что будет с моей торговой базой (16Гб на скуле без транз.лога) без 1С++ и прямых запросов ))) потом столько же смеялся )))))))))))
ded00786; +1 Ответить
36. ded00786 347 12.01.10 13:52 Сейчас в теме
Оставьте свое сообщение