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

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

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

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

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

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

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


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

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

См. также

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если СписокИзменённыхРеквизитовВызывающихПерепроведение = "" И Проведен И СписокИзменённыхРеквизитов.Количество() > 0 Тогда
РежимЗаписи = РежимЗаписиДокумента.Запись;
ОбменДанными.Загрузка = Истина;
ИначеЕсли НЕ РедактированиеЗаднимЧислом и Дата < НачалоДня(ТекущаяДата()) И Не РольДоступна("ПравоАдминистрирования") Тогда
Сообщить("Недостаточно прав для проведения реализации " + Номер + " " + Строка(Дата) +
" задним числом. Изменены реквизиты: " + СписокИзменённыхРеквизитовВызывающихПерепроведение);
Отказ = Истина;
КонецЕсли;
23. Юрий Матвеев (mtv:)) 962 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) 56 23.12.14 11:43 Сейчас в теме
(20) kosmo0, как это не уходят? Уходят, да ещё и изменённые в другой базе будут.
27. Денис Буянкин (bds22) 16 23.12.14 12:50 Сейчас в теме
(24) dyak84, если вопрос ко мне - будет работать в типовой. документ записывается но не перепроводится, цепочка не должна измениться
28. Игорь Иванов (ketr) 82 28.07.15 18:31 Сейчас в теме