Имя: Пароль:
1C
 
Отследить изменения в регистре
0 Мисти
 
27.05.16
18:08
Как ловчее? Это старая УТ, сильно переделанная.
Надо знать, кто именно и что менял в одном важном регистре, эту информацию нужно хранить за пару месяцев.
1 Мисти
 
27.05.16
18:08
Я себе представляю - при записи регистра записывать текстовую строку во внешний файл со всеми полями регистра+Пользователь и время.
2 rs_trade
 
27.05.16
18:10
(1) Зачем во внешний файл? Что бы дольше запись в регистр была?
3 Мисти
 
27.05.16
18:12
Чтобы база не росла.
А куда? В еще один регистр?
4 BormanMic
 
27.05.16
18:13
создай простенькую sql базу с 1 таблицей и пиши туда
5 Мисти
 
27.05.16
18:15
А это что, быстрее, чем в текстовый файл?
6 BormanMic
 
27.05.16
18:15
(4) или регистр сделай. Файл неудобно анализировать будет
7 Pistol
 
27.05.16
18:16
(2) Чтобы было легче исправлять записи об изменениях, конечно. А то вдруг кто-то особо важного поймают? А тут хоп - и нет файла. И ничего не было.
8 rs_trade
 
27.05.16
18:16
(10) за пару месяцев логов на гигабайты набежит?
9 BormanMic
 
27.05.16
18:16
журнал регистрации 1сный в файле. быстро работает? Правда зависит от количество записей за эти 2 месяца
10 Pistol
 
27.05.16
18:17
(4) Вот ты сейчас предсказываешь как будет называться следующая тема от ТС
11 Лефмихалыч
 
27.05.16
18:18
(0) регистр сведений или накопления?
12 Мисти
 
27.05.16
18:18
(10) Не-а, сделаю еще один регистр.
13 Мисти
 
27.05.16
18:19
Сведений!
14 Pistol
 
27.05.16
18:19
(11) Расчетов же
15 Лефмихалыч
 
27.05.16
18:19
(13) независимый?
16 Мисти
 
27.05.16
21:27
Я твердо решила при записи в регистр добавлять строчку в дополнительный регистр.
В модуле набора записей есть процедура
Процедура ПередЗаписью(Отказ, Замещение)
    Если РольДоступна("ПроверятьПоОтветственному") Тогда
        Если ЭтотОбъект.Отбор.ЗаказПокупателя.Значение.Ответственный <> ПараметрыСеанса.ТекущийПользователь Тогда
            Режим = РежимДиалогаВопрос.ОК;
            Ответ = Вопрос("Вы не можете редактировать чужие отгрузки!", Режим, 0);
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;

Вот туда и вставлю!
Значения отбора (измерения) я вижу, а как мне увидеть реквизиты в этот момент?
17 Мисти
 
27.05.16
21:33
Какая конкретно колонка изменилась, я же не узнаю?
Это в документе "при открытии" можно зафиксировать важные реквизиты, а при записи сравнить, а с регистром ведь так не получится?
18 Лефмихалыч
 
27.05.16
21:54
(17) для того, чтобы узнать, что изменилось, надо сравнить с тем, что базе записано. То есть, надо запросом получить набор, соответствующий отбору в ПередЗаписью и сравнить (как сравнивать две таблицы - сама думай).

Но с регистрами есть одна жопа большая - при измении существующего набора они записываются два раза: первая запись удаляет старый набор (запись пустого набора), вторая запись записывает новый.

И это разрушает ко всем херам твою мечту
19 Мисти
 
27.05.16
22:04
Короче, мне пока важно узнать, что же там в ресурсах? Измерения я вижу "Перед записью".
Наверное, просто все колонки и перепишу в свой регистр. Мой будет отличаться в первую очередь тем, что там ничего не будет замещаться. (кстати, как этого добиться?)
20 mehfk
 
27.05.16
22:12
(16) За такое расстреливать надо.
21 Pistol
 
27.05.16
22:17
(20) Вот такое оно, порно с участием Мисти, которое в соседней теме про доступ к счету обсуждают, да.
22 Лефмихалыч
 
27.05.16
22:24
(20) кстати - да.
в платформу встроена политика разрешения, то есть запрещено все, что не разрешено явно, и, если разрешено хоть в одной роли пользователя, то оно разрешено.
Решение же (16), во-первых, противоречит политике прав платформы и когда-нибудь возникнет ситуация, при которой без права администратора какую-нибудь операцию будет сделать невозможно и потребуется "быстро править". А, во-вторых, у автора складывается парадоксальная, но достаточно типичная в своем идиотизме ситуация, при которой с расширением состава ролей фактические права сужаются.
23 Мисти
 
27.05.16
23:06
Лефмихалыч, ага, это не я писала, так что можете расстреливать. Да, там везде такая политика, что ролями права ограничиваются. Они уже лет 10 работают и не жалуются.
24 Мисти
 
27.05.16
23:16
Уважаемые, так как при записи увидеть все ресурсы моей записи?
25 RomanYS
 
27.05.16
23:20
(24) Текущий набор?

Для каждого Запись из ЭтотОбъект Цикл
ЗначениеРесурса = Запись.ТвойРесурс;...
26 Мисти
 
27.05.16
23:29
Отлично-прекрасно, спасибо!
Ну и последний вопрос - как организовать регистр, чтоб он мне не сообщал, что "запись с такими полями уже существует"?
27 RomanYS
 
27.05.16
23:54
(26) сделать периодичным, или добавить измерение типа "номерВерсии"
28 youalex
 
28.05.16
00:48
(16) Луше не туда. Лучше собственную подписку сделать и собственный модуль. Просто чтобы, как это, не смешивать контексты функционала
29 youalex
 
28.05.16
00:57
(6) можно писать в буферный текст через ЗаписьТекста, а с другой стороны скуль будет этот файл подгружать раз в сутки к примеру.
30 Мимохожий Однако
 
28.05.16
06:39
(0)Паранойя какая-то. Если регистр так важен, то привяжи его к документу, в котором фиксируй автора без возможности изменения после записи.
31 Mikeware
 
28.05.16
09:15
(30) это не паранойя. Но, безусловно, тоже болезнь. Ну, или механические повреждения мозга...
32 ДенисЧ
 
28.05.16
09:18
(31) масянизм?
33 MrStomak
 
28.05.16
09:55
(16)1. Подобный копрокод не скомпилируется на сервере. Фоновые задания, обмены затрагивающие регистр будут внезапно завершаться.
2. При записи любого документа, кроме заказа покупателя, в этот регистр "вопрос" будет возникать всегда
3. Не предусмотрен выход из алгоритма по свойству обменданными.загрузка

Вообще какой-то трэш, у меня болят глаза!!!
34 MrStomak
 
28.05.16
09:58
(33) пункт 2 снимается, думал там регистратор
35 youalex
 
28.05.16
14:23
(33) Вопрос() - в транзакции - однозначно на помойку. Вместе с авторами.   Автор сего - не ТС как я понял.
36 Мисти
 
31.05.16
22:44
Вернемся к записи изменений.
    НаборЗаписей = РегистрыСведений.Кос_ИзменениеПХВ.СоздатьНаборЗаписей();
    Для каждого запись из ЭтотОбъект Цикл
        ТекЗапись = НаборЗаписей.Добавить();
        ЗаполнитьЗначенияСвойств(ТекЗапись,Запись);
        ТекЗапись.Пользователь = ПараметрыСеанса.ТекущийПользователь;
        ТекЗапись.ДатаЗаписи = ТекущаяДата();
        ТекЗапись.Период =  ТекущаяДата();
    КонецЦикла;
    НаборЗаписей.Записать();

И у меня прекрасненько одна запись затирает другую.
Как быть?
Мне пришла в голову мысль завести константу типа нумератора и завести под него поле в регистре.
37 RomanYS
 
31.05.16
22:58
(36) у тебя уже есть период, мысль у тебя неверная.

Или пиши записи менеджером записи или устанавливай отбор на набор записей. Запись набора без установленного отбора затирает весь регистр.
38 Serg_1960
 
31.05.16
22:59
Систему версионирования ещё никто не предлагал? Чур я первый :)

В типовых есть она для документов, но никто не мешает её принципы использовать для хранения версий наборов записей.
39 RomanYS
 
31.05.16
23:04
(38) паковать структуры в хранилище - это конечно универсально, но не всегда удобно.
40 Serg_1960
 
31.05.16
23:10
(36) Засунь свой нумератор версий в измерение дополнительного регистра. Константа, в принципе, не нужна. Достаточно запрос на макс номер версий этого набора перед сохранением очередной версии.
41 Dmitry77
 
31.05.16
23:11
У регистра вроде есть событие при записи или при изменении. Сейчас не посмотрю в 1с. Как только это событие возникает набор было и стало закидывать в новый регистр... В подписке на это событие.
42 Мисти
 
31.05.16
23:14
RomanYS, я с регистрами работаю очень редко и обычно "краду" кусочки. Отбор по всем полям? Или по измерениям?
Как это написать-то? (ну или поищу в конфигураторе кусочек похожий)
43 Serg_1960
 
31.05.16
23:16
(39) Зато можно использовать алгоритмы версионирования типовой конфигурации с минимальными изменениями.
А насчет хранилища согласен. Не удобно. Особенно если очередное обновление изменяет структуру регистра Маловероятно, но не исключено.
44 RomanYS
 
31.05.16
23:19
(42) СоздатьМенеджерЗаписи
45 RomanYS
 
31.05.16
23:26
(36) в данном случае похоже есть простое решение, т.к. записи за счет периода заведомо (точнее очень маловероятно) повторяться не будут, то можно просто писать твой набор без замещения. Достаточно вставить правильный параметр в

НаборЗаписей.Записать();
46 mistеr
 
31.05.16
23:39
(0) >Надо знать, кто именно и что менял в одном важном регистре

Для этого предназначен ЖР.
47 Мисти
 
31.05.16
23:42
RomanYS, спасибо, вроде, всё получилось!
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс