gifts2017

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

Опубликовал Александр Венгер (venger) в раздел Программирование - Практика программирования

Функция для кнопки "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. Alxd (salexdv) 17.09.09 14:52
2. Юрий Тимофеев (Tatitutu) 17.09.09 14:59
я бы в функции все же предусмотрел ситуацию (если нет внешней компоненты)
- стандратная процедура нажатия - Документ должен записываться и проводится.

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

Тогда ему лучше не лезть в производственную базу ручками:)
4. Юрий Тимофеев (Tatitutu) 17.09.09 15:19
(3) Для кого писал ?
ЕМУ -му !!! кому ??? я тебе привел ситуацию - один поправил , а его последователь .... быстрее поросячего визга набирает в интернет строке http://infostart.ru/ раздел помощь - "помогите у меня в ПУБе документы не проводятся ! И в желтой книге про это ничего нет , аааааааааааа шайтан !"
5. Евгений Люлюк (Evg-Lylyk) 17.09.09 15:23
(3) я работал лет 5 с 7.7 последние годы в основном 8.х иногда на 7.7. чтот делаю. Не использовал ВК. Вообщем согласен с (2) универсально надо делать вы же профи ;) .
6. Евгений Мартыненков (JohnyDeath) 17.09.09 15:35
Если я нажимаю кнопку "ОК" у документа, я хочу чтобы он ПЕРЕПРОВЕЛСЯ независимо от того менялся док. или нет. Если же я хочу просто закрыть документ, то нажимаю кнопку с именем "Закрыть" (или Esc).
Мне кажется, что всё это только навредит.
anbxp; albert; Трактор; +3 Ответить 1
7. Игорь Исхаков (Ish_2) 17.09.09 15:39
Если в разработке используется ВК, автор должен предупреждать пользователей жирным шрифтом :
Но помни ! ВК - это зло.
8. Юрий Тимофеев (Tatitutu) 17.09.09 15:49
Сань допиши...
Функция глКнопкаОкВ_Документе(Конт, Режим=1) Экспорт
Попытка
...дейсвия "Умной кноки для умных челов"
Исключение
СходитьНаСайтКИзобретателюУмнойКнопкиОК();
КонецПопытки;
КонецФункции
и думаю популярности твоего сайта мягкотелые просто обзавидуются
9. vip (vip) 17.09.09 15:50
10. Игорь Исхаков (Ish_2) 17.09.09 16:06
11. Алексей (begemot) 17.09.09 16:06
А как быть если бухгалтер ручками восстанавливает последовательность???

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

JohnyDeath: "Если я нажимаю кнопку "ОК" у документа, я хочу чтобы он ПЕРЕПРОВЕЛСЯ"...
12. Александр Венгер (venger) 17.09.09 16:11
(11) Групповая обработка доков не катит? Или кнопка "Провести"?
13. vip (vip) 17.09.09 16:14
14. Алексей (begemot) 17.09.09 16:16
(12) В итоге, бухгалтеру придется объяснять, для того чтобы проведенный документ перепровести, нужно нажать именно "Провести". "ОК" в данном случае не сработает... Мне кажется это не логично...
15. Александр Венгер (venger) 17.09.09 16:20
(6) Я видел как пользователи жмакают "Да" или "Нет" на предупреждениях не прочитав их:) И закрывают доки кнопкой "Ок":) А что, говорят они? Ведь док закрывается:)
16. Александр Венгер (venger) 17.09.09 16:45
(8) Специально для тебя дописал:-)
17. Владимир (hogik) 17.09.09 17:08
(9)
Тов. Vip.
В данном случае ВК - зло! Т.к. эту задачу можно реализовать и без ВК. А заодно решить вопрос с "бухгалтеру придется объяснять" из (14) сообщения. И если уж вставлять в кнопку другой вызов функций то, думаю, можно вставить и вот это:
ПриЗаписи(1); хПровести(Контекст)
А в модуль формы добавить:
Процедура ПриЗаписи(Т=0)
Если Т=0 Тогда
Предупреждение("Жми ""ОК""...");
СтатусВозврата(0);
Возврат;
КонецЕсли;
...
КонецПроцедуры
Другое дело, если ставится задача: "не ковыряться в каждом документе". Тогда, наверно, и ВК может пригодиться.
18. Евгений Мартыненков (JohnyDeath) 17.09.09 17:10
(15) они эти предупреждения уже наизусть знают.
А людей, которые закрывают доки кнопкой ОК не много (на моей практике).
В общем, я свое мнение сказал: "Пользы от такой методики мало, а последствия крайне неприятные"
19. vip (vip) 17.09.09 17:16
(17) Конечно можно эту задачу решить и без ВК. Что я делаю уже много лет.

Я о том, что тов. Ish_2 своими неоднократными унылыми шутками про ВК смущает неокрепшие умы.
ВК - большое добро.
20. Владимир (hogik) 17.09.09 17:39
(0)
Мне эта идея (разработка) напоминает: "Надо ж как-то было изучать объект ...". Теперь изучаем FormEx. ;-)
21. Игорь Исхаков (Ish_2) 17.09.09 17:50
(19) Зло бывает разным. Даже неизбежным.

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

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

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

Поэтому ещё раз :
Vip , помни ВК - это зло !
22. Юрий Тимофеев (Tatitutu) 17.09.09 17:55
(16) Спасибо конечно, но я не о себе думал то, когда писал (и не со зла)

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

Сань думай..... подсказываю из твоего же описания, засунь в исключение
"#Записать? Провести? Закрыть"
и все будут счастливы.
23. vip (vip) 17.09.09 18:08
(21) Тогда так. "Хорошая ВК - это добро!".
Т.к. ВК бывают очень и очень разные.
24. Игорь Исхаков (Ish_2) 17.09.09 18:15
(23) Давай так : "Хорошая ВК может стать необходимым ЗЛОМ !" ?
Тогда , считай , сторговались.
25. vip (vip) 17.09.09 18:18
(24) Без ВК жизнь нелегка.
А с ВКом все кувырком.
26. Сергей (Che) Коцюра (CheBurator) 17.09.09 18:27
обработка - в основном правильная. потому что неоднократно/постоянно наблюдаю ситуацию когда между ОК и Закрыть - выбирают ОК - И ЭТО ПОНЯТНО ПОЧЕМУ!!! ОК - понятно, что будет ОК!, А закрыть - а вдруг чего-то не ок будет???
27. Владислав Чинючин (vcv) 17.09.09 21:18
Изменять штатное, обычным пользователем 1С подразумеваемое, привычное поведение кнопки, ИМХО не айс.
Я для себя предпочел другое решение - документ открывается на чтение, хотите редактировать, жмите в документе специальную кнопку, он переоткрывается для редактирования. Правда у меня УРБД и подавляющее большинство документов в ЦБ, где такой режим "открывания" документов особенно актуален, "чужие" и трогать их кнопкой ОК без причины нельзя.
28. Александр Венгер (venger) 17.09.09 22:34
(7) > ВК - это зло.

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

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

1. иллюстирует прежде всего текущую тему - здесь можно было обойтись без ВК.
2. имеет общее практическое значение для разработчика .
30. Игорь Исхаков (Ish_2) 17.09.09 22:55
+ 29 На всякий случай :
зло - это не отрицание , а существенное свойство ВК. Вот и всё .
31. Александр Венгер (venger) 17.09.09 23:13
(30) > зло - это не отрицание , а существенное свойство ВК

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

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