gifts2017

Редактирование комментариев в закрытом периоде

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

Часто уже после закрытия периода пользователям требуется написать комментарий в документе закрытого периода. В тексте описано, как можно это сделать с минимальными изменениями

в процедуре ПередОткрытием добавляем новые строки

ЭлементыФормы.Комментарий.Данные="";
ЭтаФорма.УстановитьДействие("ПередЗакрытием", Новый Действие("ПримерПередЗакрытием"));

добавляем новую процедуру ПримерПередЗакрытием

процедура ПримерПередЗакрытием(Отказ, СтандартнаяОбработка)
если ЭлементыФормы.Комментарий.Значение<>Комментарий тогда
Об=Ссылка.ПолучитьОбъект();
Об.ОбменДанными.Загрузка=Истина;
Об.Комментарий=ЭлементыФормы.Комментарий.Значение;
Об.Записать();
конецесли;
конецпроцедуры


в конце процедуры ПриОткрытии добавляем строки

если НЕ ТолькоПросмотр тогда
ЭлементыФормы.Комментарий.Данные="Комментарий";
иначе
ЭлементыФормы.Комментарий.Значение=Комментарий;
конецесли;
примечание: следует иметь в виду, что при настроенном обмене между базами, измененный таким образом комментарий не будет выгружен из за установленного флага ОбменДанными.Загрузка=Истина, за уточнение спасибо kosmo0

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий Бухалов (Re:аниматор) 13.11.14 18:19
Нужно руководствоваться правилами (период закрыт, всё, ни каких изменений), а не хотениями тормозных пользователей. ИМХО.

P.S. пусть себе в блокнот пишут комментарии :-)
shootnik; aximo; Aleks_Antonuk; necropunk; PowerBoy; shalimski; Alissa_Maty; +7 4 Ответить
2. Евгения Карук (ekaruk) 13.11.14 19:53
Бредовое решение.
При каждом открытии сбрасывать комментарий.
При этом пользователю выдастся сообщение, что редактирование запрещено, но документ перезапишется.
3. Денис Буянкин (bds22) 13.11.14 20:10
(2) ekaruk,
Вы просто не поняли, как работает этот код)))
Затирается перед открытием не комментарий, а источник данных для поля ввода, благодаря чему поле комментария становится доступным для редактирования.
Перед закрытием программа проверяет, изменился ли комментарий.
Никакого сообщения о том, что редактирование запрещено, не будет.
если что-то непонятно, спрашивайте
4. Евгения Карук (ekaruk) 13.11.14 21:21
(3) bds22, В Вашем решении комментарий сохранится независимо от того, хочет ли этого пользователь.
Даже если он нажал "закрыть".
А еще, насколько я помню, в типовых факт закрытия периода проверяется перед сохранением документа, т.е. изначально документ будет открыт в режиме корректировки и код вообще не сработает.
Да и вообще нельзя без необходимости перезаписывать документ в закрытом периоде.
Даже в режиме обмена данными. Хотя бы потому, что не все механизмы, вызываемые при сохранении, могут этот режим обрабатывать.
В общем решение плохое.
5. Алексей 1 (AlX0id) 13.11.14 23:34
Короче, прилепите свойство - и не парьтесь. Его хоть уредактироваться можно..
6. Денис Буянкин (bds22) 14.11.14 05:01
(4) ekaruk,
В Вашем решении комментарий сохранится независимо от того, хочет ли этого пользователь.
Даже если он нажал "закрыть".

именно так, только кнопка "закрыть" доступна. если для ваших пользователей важно, чтобы не только кнопка Закрыть была доступна, но и ОК, это не проблема сделать
насколько я помню, в типовых факт закрытия периода проверяется перед сохранением документа, т.е. изначально документ будет открыт в режиме корректировки и код вообще не сработает

ошибаетесь - откроется для чтения. да и как код не сработает, если он работает в программе?)))
В общем решение плохое.

в нашем случае это единственный выход, пользователи довольны
7. Денис Буянкин (bds22) 14.11.14 05:07
(5) AlX0id, со свойствами хорошая идея, но в любом случае свойство придется выводить в журнал документов, в ПриПолученииДанных.
кроме комментариев данное решение у нас используется также в документе "Акт сверки"для установки пометки "Сверка согласована". т.е. в документе сверка будет не согласована, в свойствах - согласована, что вызовет путаницу
8. Канат Джумадылов (Fox-trot) 14.11.14 06:35
(7) bds22, правильнее было б создать отдельный регистр сведений для ваших комментариев и хоть баллады пишите.
а так судя по коду вы еще там не все грабли пропахали. я гарантирую это
9. Денис Буянкин (bds22) 14.11.14 06:46
(8) Fox-trot, в данном случае это плохое предложение, даже свойства лучше - это может сделать любой пользователь без программиста. давайте не будем бросаться словами на ветер, сказали А, говорите Б (это я про грабли)
10. Александр Анисков (vandalsvq) 14.11.14 16:07
(9) bds22, не бывает "единственно верного решения", как и нет "серебрянной пули" (да простит меня Алексей). Данный вариант мне лично тоже не очень нравится, ни как он сделан, ни зачем он сделан. Конкретно не нравится перезапись документа при изменении одного лишь реквизита. Хотя другого выбора нет, но надо бы гарантировать что в модуле объекта и во всех подписках ОбменДанными.Загрузка контролируется и не произойдет изменений.
Кмк, даже отдельная кнопка для редактирования комментария была бы более оправдана. В форму списка ее (в панель и контекстное меню) и в документ. По нажатию открываешь поле ввода строки, а там уже записываешь или что надо то и делаешь. И храни хоть в свойстве, хоть в реквизите, хоть в регистре.

Прости, но "минус". Это даже хуже перенумераторов.
11. Денис Буянкин (bds22) 14.11.14 17:37
(10) vandalsvq,
не бывает "единственно верного решения"

я не говорил, наоборот, мне все доказывают, что это единственно неверный результат
Данный вариант мне лично тоже не очень нравится, ни как он сделан, ни зачем он сделан. Конкретно не нравится перезапись документа при изменении одного лишь реквизита

у меня был выбор или перезаписывать документ, или все время операторам будут открывать период
Хотя другого выбора нет, но надо бы гарантировать что в модуле объекта и во всех подписках ОбменДанными.Загрузка контролируется и не произойдет изменений.

в стандартной конфигурации эти проверки везде есть
По нажатию открываешь поле ввода строки, а там уже записываешь или что надо то и делаешь.

это лишнее действие, чем оно лучше? из журнала редактировать тоже комментарий в документе не совсем удобно
Прости, но "минус". Это даже хуже перенумераторов.

да нет проблем. но мне особенно понравился первый вариант твоего комментария (до исправления), я рад, что ты сам разобрался
12. Денис Буянкин (bds22) 14.11.14 17:47
ну и последнее, что я хочу сказать по теме и почему я это разместил
я считал, что нашел интересный способ сделать возможность редактирования поля в документе, который открыт только для чтения и сообществу это будет интересно увидеть. добавить кнопку, которую пользователь должен найти в документе, а не просто в привычном месте ввести комментарий - это тривиально, и если бы я сделал именно так, я бы даже не стал здесь об этом писать.
это решение (с возможностью редактирования реквизита документа) может быть использовано для других целей аккуратного вмешательства в конфигурацию
спасибо за внимание
ketr; sHkZ; tigory; vandalsvq; PiccaHut001; +5 Ответить 1
13. John Smith (PiccaHut001) 14.11.14 18:49
(10) vandalsvq,
Конкретно не нравится перезапись документа при изменении одного лишь реквизита.
- по другому в 1С нельзя, странная претензия. bds22, спасибо, интересное решение, в похожей ситуации я лепил модальную форму, которая вызывалась из меню действия и нереально коряво работала. Знал бы об этом способе, сэкономил бы себе 3 часа времени.
14. Александр Анисков (vandalsvq) 14.11.14 19:35
(11) bds22, первый вариант был покруче, согласен, знатно я там "ляпнул". Стыдно, конечно. С другой стороны вспомнил я быстрее, чем мне пустили пулю в лоб :)

Давай по-порядку:
Про единственный вариант вот - сообщение (6)
в нашем случае это единственный выход

Если ты что другое имел в виду, скажи.

в стандартной конфигурации эти проверки везде есть

Пусть будет по-твоему. Со стандартными работаю, но утверждать бы не стал. Каждому свое.

это лишнее действие, чем оно лучше? из журнала редактировать тоже комментарий в документе не совсем удобно

Давай считать.
Твой вариант:
Открыли журнал документов и нашли документ -> Открыли документ -> Активизировали поле комментарий -> Изменили значение поля -> Нажали "ОК"
Мой вариант:
Открыли журнал документов и нашли документ -> Открыли документ -> Нажали "Редактировать комментарий" -> Изменили значение поля -> Нажали "Записать"
При этом действие №2 не нужно если кнопка доступна и в списке документов. Не прав?

(13) PiccaHut001, я же написал "хотя другого выбора нет". Но здесь я маленько слукавил. Другой выход есть, но надо пересматривать методику работы с реквизитом. Например выносить его за пределы документа, а пользователю отображать в документе считывая из другого места. Варианты всегда есть.

Кстати немного хорошего в сторону автора - на самом деле прикольное решение с обнулением источника данных в элементе формы с целью открытия для изменений. Это действительно забавно придумано.
15. Александр Анисков (vandalsvq) 14.11.14 19:41
(0) bds22, кстати, если бы статья была о том как в обычной форме с установленным признаком "ТолькоПросмотр" = Истина сделать доступным реквизит без обхода по элементам, то тут безоговорочный плюс. Но, была выбрана другая подача материала. Может стоит изменить статью? Получается что вместо того чтобы увидеть смекалку автора в одном моменте, все обращают внимание на проблематику и предложенный код (оформление которого вообще за гранью добра и зла) и отсюда негодование.
Что думаешь автор? Может на самом деле сосредоточить мнение сообщества на другом, а "обвязку" либо убрать в тень, либо вообще убрать.
Кстати свой минус я отзову. Пояснение автора в сообщении (12), предложило другую трактовку статьи.
16. Денис Буянкин (bds22) 14.11.14 20:06
(15) vandalsvq, на самом деле если бы я просто написал, что таким образом можно сделать поле доступным для редактирования, пользы от этого 0. справедливо бы на это последовал вопрос, "ну, редактируется, а зачем?)))"
про единственный выход я написал не в тексте статьи, а в комментарии в ответ на такую фразу "При этом пользователю выдастся сообщение, что редактирование запрещено, но документ перезапишется". единственный способ записать - это установить ОбменДанными.Загрузка в Истину и после этого записать
17. Алексей 1 (AlX0id) 17.11.14 12:30
(12) bds22, аккуратным вмешательство было бы, если бы вы прикрутили дополнительную внешнюю печатную форму "Изменить комментарий", которая бы содержала ваш код. Точнее сказать, это вообще не было бы вмешательством в конфигурацию.
18. Владимир (ARL) 19.11.14 10:19
Плюс за "ЭлементыФормы.Комментарий.Данные="";". Как то не задумывался об этом, теперь возьму на вооружение.
P.S. Статьи всегда рассматриваю с точки зрения новых идей, а не буквальных реализаций.
mtv:); droplet; +2 Ответить
19. Трактор Трактор (Трактор) 19.11.14 12:48
Автор напомнил, что я тоже эту задачу когда-то решал.
Порылся у себя в закромах и написал статью на тему этой публикации http://infostart.ru/public/313753/
20. Иван Иванов (kosmo0) 19.11.14 14:30
Об.ОбменДанными.Загрузка=Истина;
и в базах данных использующих планы обмена получаете ситуацию, в которой измененные комментарии не уходят по обмену (в стандартном случае). В качестве примечания рекомендовал бы поместить в статью.
21. Денис Буянкин (bds22) 19.11.14 15:09
(19) Трактор, у Вас совсем другое, в закрытом периоде поменять комментарий реквизит в вашем примере нельзя. Система нагружается меньше, это плюс. Обычно пользователь нажимает ОК, редко "Записать". Если же нажимает ОК, надо как-то определить, что же надо в данном случае - записать или провести, и при этом пользователь не должен быть введен в заблуждение. Уверен, что Вы это как-то учитываете, это интересный момент, напишите, как Вы это сделали
22. Трактор Трактор (Трактор) 19.11.14 16:31
Обычно пользователь нажимает ОК

(21) bds22, именно поэтому я решил, что я умнее пользователя и принял решение перепроводить только в случае, если изменены реквизиты влияющие на перепроведение или не изменены вообще. А если пользователь поменял что-то незначительное, то пусть так записывается. Эта логика описывается в процедуре ПередЗаписью. Я не настаиваю на абсолютной верности своего решения. Но пока неприятностей не было.

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

в закрытом периоде поменять комментарий реквизит в вашем примере нельзя

Отчего ж нельзя? Можно также как у тебя написать ПередЗаписью ОбменДанными.Загрузка = Истина;

Если СписокИзменённыхРеквизитовВызывающихПерепроведение = "" И Проведен И СписокИзменённыхРеквизитов.Количество() > 0 Тогда
РежимЗаписи = РежимЗаписиДокумента.Запись;
ОбменДанными.Загрузка = Истина;
ИначеЕсли НЕ РедактированиеЗаднимЧислом и Дата < НачалоДня(ТекущаяДата()) И Не РольДоступна("ПравоАдминистрирования") Тогда
Сообщить("Недостаточно прав для проведения реализации " + Номер + " " + Строка(Дата) +
" задним числом. Изменены реквизиты: " + СписокИзменённыхРеквизитовВызывающихПерепроведение);
Отказ = Истина;
КонецЕсли;
23. Ю М (mtv:)) 20.11.14 08:43
Хочу обратить Ваше внимание, что на Инфостарте есть еще одна публикация о редактировании реквизитов в закрытом периоде - "Есть ли жизнь в закрытом периоде? Или способ заставить работать "Обработку заполнения табличных частей" в закрытом периоде".
В этой публикации рассматриваются два способа:
1. С минимальными изменениями кофигурации (добавляется всего ОДНА строка!);
2. Без внесения изменений в конфигурацию.
24. andrey dyak (dyak84) 23.12.14 10:09
Конечно комментарий дело нужное, но вызывают вопросы два момента первый, а после внесения комментария нужно перепроводить всю цепочку документов. Второй вопрос а будет ли работать эта схема в типовой УТ 10,3. Зарание спасибо за ответ.
25. andrey dyak (dyak84) 23.12.14 10:10
26. Дмитрий Павлик (DimaP) 23.12.14 11:43
(20) kosmo0, как это не уходят? Уходят, да ещё и изменённые в другой базе будут.
27. Денис Буянкин (bds22) 23.12.14 12:50
(24) dyak84, если вопрос ко мне - будет работать в типовой. документ записывается но не перепроводится, цепочка не должна измениться
28. Игорь Иванов (ketr) 28.07.15 18:31
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа