![]() |
![]() |
|
комментирование проведённых документов | ☑ | ||
---|---|---|---|---|
0
salikoff
10.07.11
✎
00:48
|
Здравствуйте, уважаемые господа!
Прошу ваших советов по следующей проблеме: нужно разрешить изменять реквизит объекта "комментарий" для проведённого документа. При этом я не хочу давать пользователям права на перепроведение. И даже не хочу давать право на редактирование документа, так как он, пользователь, может не только поле "комментарий", не влияющее на записи в регистрах, изменить, но и какие-нибудь другие важные данные. Если потом этот документ другой пользователь с правами перепроведёт (например, при восстановлении последовательностей), то записи в регистрах изменятся. Так вот, как бы сделать так, чтобы была возможность редактировать только один реквизит и сохранять после этого документ? |
|||
1
salikoff
10.07.11
✎
00:56
|
Каким способом можно узнать в обработчике записи документа, какие именно изменения пользователь внёс в процессе редактирования?
|
|||
2
a_alenkin
10.07.11
✎
00:59
|
регистр сведений
|
|||
3
Злопчинский
10.07.11
✎
01:58
|
в семерке было так: пока не записали
Комментарий содержит то что натоптал юзер, а ТекущийДокумент.Комментарий - то что в базе лежит... |
|||
4
salikoff
10.07.11
✎
02:22
|
(2) Извините, но суть вашего совета, заключённого в двух словах, мне совершенна не ясна
|
|||
5
H A D G E H O G s
10.07.11
✎
02:26
|
1) Изящный но гемморный - закрыть все кроме комментарий через RLS
2) Нубскый - проставить ТолькоПросмотр у всех полей формы, кроме Комментария 3) Оптимальный - в подписке "ПередЗаписью" сравнить записываемый и записанный объекты. |
|||
6
a_alenkin
10.07.11
✎
02:34
|
(5) ломать всю процедуру проведения? я бы всеже при открытии - кому надо давал право на проведение - кому нет - ставил поле и возможность писать в регистр - измерение - ссылка на док - ресурс - комментарий
|
|||
7
H A D G E H O G s
10.07.11
✎
02:38
|
(6) Фррр. Отдельный регистр под Комментарий?
Да вы еще больший изврашенец, чем я. |
|||
8
salikoff
10.07.11
✎
02:40
|
(5) мне третий способ нравится. Вот только вопрос - как сравнивать? Правильно ли я понимаю, что для того чтобы получить ЗАПИСАННЫЙ объект, я должен их выбирать запросом из базы данных, а чтобы получить ЗАПИСЫВАЕМЫЙ объект, я должен просто обращаться по именам к реквизитам формы?
Как это сделать покрасивее, ведь много данных придётся сравнивать - у документа табличные части и их все придётся перебирать. |
|||
9
Nesh
10.07.11
✎
02:41
|
регистр сведений + подписка на событие. (8) сравнивай объект и ссылку.
|
|||
10
Nesh
10.07.11
✎
02:42
|
(9) и то, рег.сведений лишний. просто подписки хватит
|
|||
11
Nesh
10.07.11
✎
02:42
|
(9) вернее данные объекта и ссылки
|
|||
12
a_alenkin
10.07.11
✎
02:45
|
(7) не хотелось бы дергать таблицу документа
|
|||
13
H A D G E H O G s
10.07.11
✎
02:45
|
*facepalm
p.s. В 8.2 достаточно сравнить ВерсияДанных - 12 символьное поле - хэш реквизитов (вроде как). Входит ли в него ТабЧасти - ХЗ |
|||
14
salikoff
10.07.11
✎
02:49
|
(13) да, вот именно с табличными полями самая сложность выходит. ВерсияДанных - это что, такое свойство документа?
|
|||
15
salikoff
10.07.11
✎
02:50
|
(5) кстати, второй, нубский способ, тоже мне нравится. Какие у него могут быть минусы?
|
|||
16
Nesh
10.07.11
✎
02:50
|
(14) это свойство как и класса ДокументОбъект так и ДокументСсылка
|
|||
17
Nesh
10.07.11
✎
02:51
|
(15) программное изменение документов
|
|||
18
salikoff
10.07.11
✎
02:52
|
Синтаксис помощник говорит:
ВерсияДанных (DataVersion) Описание: Тип: Строка. Содержит текущую версию данных объекта. И всё. Как с этим работать, неясно |
|||
19
Maniac
10.07.11
✎
02:52
|
(0) очень простая и элементарная задача!
Пишем внешнюю обработку табличных частей (чтобы кнопка появилась в доке). Обработка содержит поле комментарий. При нажатии кнопки в доке (можно обработку повесить куда угодно кнопкой). Открывается форма в которой поле комментарий (при открытии содержит то чт ов доке). Юзер там пишет чо хочет. при нажатии ОК. обработка в док ЗАПИСЫВАЕТ коммент. Элементарно. |
|||
20
a_alenkin
10.07.11
✎
02:53
|
как я понимаю - дело не в том, что кому то разрешить редактировать только комментарий а в том чтобы не менять движения и версию документа
|
|||
21
H A D G E H O G s
10.07.11
✎
02:53
|
Нет, отбой.
ВерсияДанных изменяется при каждой записи объекта. Не подходит. |
|||
22
Maniac
10.07.11
✎
02:54
|
В восьмерке если к проведенному доку выполнять обработкой какое то изменение и вызывать запись проведенного дока, то проихойдет именно запись без перепроведения.
|
|||
23
H A D G E H O G s
10.07.11
✎
02:54
|
(20) Движения - да.
Версию - нет. |
|||
24
a_alenkin
10.07.11
✎
02:54
|
(21) про что я и говорю
|
|||
25
a_alenkin
10.07.11
✎
02:55
|
от комментария движения менять?
|
|||
26
salikoff
10.07.11
✎
02:58
|
(19) То что, надо, спасибо. Таким образом можно быть уверенным, что пользователь ничего, кроме комментария не изменит, и в регистрах ничего не нарушится. А на версию документа наплевать.
|
|||
27
Maniac
10.07.11
✎
03:00
|
(3) емае. тыж великий знаток семерки. Ниже написано как оно уже триста лет существует (но видимо тут никто этого никогда не видел)
в (19) элементарное и простое решение. Причем решение не новшество. Во всех типовых семерки в журналах есть кнопка редактировать, которая позволяет менять множество реквизитов у документов, не влияющих на данные по регистрам (например коммент, дата отгрузки. дата вход дока, номер вход дока и т.п.). При нажатии открывается форма которая содержит поля. Юзер меняет чо хочет надимает ок и данные записываются в док не перепроводя его..... |
|||
28
Maniac
10.07.11
✎
03:03
|
(26) версия сработает (я так понял это про встроеннуб версибнность журнала регистрации, подсистему? так?) если события настроены на регистрацию записи доков (кажется так оно и есть). Так что отследить когда коммент был исправлен и кем труда не составляет.
Ну а там на твою фантазию чо хочешь можешь в обработке встроить. |
|||
29
a_alenkin
10.07.11
✎
03:06
|
зачем вам документы? - ведите все в справочниках - логика 1С проста - документ - объект который проводит какие то действия - если он проведен - то какой то факт случился и часто очень важно когда он случился - а вспомогательные данные я бы хранил в другом месте - а в регистре можно и историю комментариев хранить
|
|||
30
salikoff
10.07.11
✎
03:07
|
(28) возник вопрос - если пользователю запрещено редактирование документа, то сможет ли обработка, запущенная от его имени, записать документ?
|
|||
31
Nesh
10.07.11
✎
03:07
|
можно как то так
Процедура ПодпискаНаСобытие1ПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт МетаданныеСсылки = Источник.Ссылка.Метаданные(); МассивНепровяемыхПолей = Новый Массив; МассивНепровяемыхПолей.Добавить("Комментарий"); Для каждого Поле Из МетаданныеСсылки Цикл Если Поле <> Источник[Поле.Имя] И МассивНепровяемыхПолей.Найти(Поле.Имя) = Неопределено Тогда Отказ = Истина; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
32
salikoff
10.07.11
✎
03:08
|
(29) согласен. но речь идет о переделке уже готовой конфигурации минимальными усилиями
|
|||
33
Nesh
10.07.11
✎
03:11
|
(31) тока сделать для реквизитов и таб частей такое
|
|||
34
Maniac
10.07.11
✎
03:11
|
(29) иногда есть задачи которые не нужно усложнять до такой степени, если оно не требуется. Это плохой стиль.
(31) хреновое решение. очень хреновое. это получается что юзеру есть доступ на весь док, а ему нужен только коммент. Смысл давать юзеру менять что либо а потом чтобы программа слала его накуй. Это не этично. Вторной момент ты подумал что док может быть закрыт датой запрета? (19) это обходит. А если он закрыт то при открытии все заблокировано. соотв твое решение не решает этой задачи. |
|||
35
a_alenkin
10.07.11
✎
03:14
|
если б мне такой вопрос встал - возможно я бы приоткрытии ставил в зависимости от юзера доступность и момент записи контролировал
|
|||
36
Nesh
10.07.11
✎
03:17
|
(34) предложите решение, при котором можно изменять юзеру только определенный массив реквизитов, и при этом поддержать обновляемость конфигурации?
по Вашим словам мне прийдется в каждую форму перед открытием добавить свой код для управления доступностью полей формы. тоже не "этично"? |
|||
37
Maniac
10.07.11
✎
03:18
|
(36) хммм...видимо посты не читаем?
(19) и (27). Решению уже триста лет в обед. Еще в семерках все это давно решено было. |
|||
38
Maniac
10.07.11
✎
03:18
|
(36) да. не этично. ради такой примитивной задачи из мухи слона лепить.
|
|||
39
salikoff
10.07.11
✎
03:21
|
(38) позвольте мне повторить вопрос - если пользователю запрещено редактирование документа, то сможет ли обработка, запущенная от его имени, записать документ?
|
|||
40
a_alenkin
10.07.11
✎
03:22
|
мое мнение - мухи отдельно от котлет
|
|||
41
Maniac
10.07.11
✎
03:22
|
(39) обработка вызывает запись дока. соответственно на это действие распространяются установленные права и роли. Если запрещено - нет.
|
|||
42
Nesh
10.07.11
✎
03:25
|
2(37) - (19) вообще не решение. у меня юзер запустит другую обработку которая программно изменит другие поля документа???
- (27) не совсем обновляемо. |
|||
43
salikoff
10.07.11
✎
03:26
|
(41) выше вы писали, что если документ находится в закрытом периоде - то это не помеха. мы приходим к противоречию. в закрытом периоде невозможно редактирование и запись, не так ли?
|
|||
44
Maniac
10.07.11
✎
03:26
|
+(41) но эжто не относится к дате запрета редактирования. Т.к. процедура даты запрета редактирования программная и не влияет на роли. Она просто при открытии регулирует доступность формы. Что означает что любая обработка которая делает изменения документа программно изменит любые реквизиты у документов с датой меньшей даты запрета редактирования.
Т.е. если юзер открыл недоступный док, у него есть права записи дока и изменения существующего проведенного, то обработка все равно изменит указанные поля. |
|||
45
Maniac
10.07.11
✎
03:27
|
(43) - (44)
(42) вопрос доступа у юзеров каких либо обработок - это отдельный вопрос, к теме не относится. Да - если есть обработки которые могут открывать и чо угодно делать то дров можно каких угодно наломать |
|||
46
a_alenkin
10.07.11
✎
03:29
|
(45) ага - еще есть привилегированный режим
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |