Вход | Регистрация


1С:Предприятие ::

Метки: 

Реквизиты на УФ. Надо отследить их изменения

Я
   first_may
 
06.11.17 - 20:11
Добрый день.

Есть обработка на УФ и на ней, допустим три реквизита.
Подскажите пож, как можно узнать при закрытии формы, что пару реквизитов были изменены?

То есть надо сделать что то вроде истории изменения реквизитов.
 
  Рекламное место пустует
   МимохожийОднако
 
1 - 06.11.17 - 20:23
(0) Добавь периодический РС, заполняемый при закрытии обработки.
   Cyberhawk
 
2 - 06.11.17 - 20:52
При открытии формы запоминай значения реквизитов, при закрытии - сравнивай
   lodger
 
3 - 06.11.17 - 21:00
к (2)
делать это в событиях ПриЗагрузкеДанныхИзНастроек и ПриСохраненииДанныхВНастройках
или что-то в этом духе.
   first_may
 
4 - 07.11.17 - 09:55
Спасибо..

В обычных формах делалось вот так
Для каждого Реквизит из Метаданные().Реквизиты Цикл
 Если не Ссылка[Реквизит.Имя] = ЭтотОбъект[Реквизит.Имя] Тогда
  ИнфоСтрока = ИнфоСтрока + " * " + Реквизит.Синоним + " с """ + Ссылка[Реквизит.Имя] + """ на """ + ЭтотОбъект[Реквизит.Имя] + """" + Символы.ПС;
 КонецЕсли;    
КонецЦикла;

то есть сравнивались значения реквизитов в открытом объекте и сохраненном в базе.

На УФ что то похожее нельзя сделать?
   DrShad
 
5 - 07.11.17 - 10:00
(4) у обработки нет ссылки ни ан УФ ни в ОФ
   lodger
 
6 - 07.11.17 - 10:02
"обработка на УФ" же.
А внутре у ней неонка же.
   first_may
 
7 - 07.11.17 - 10:03
(5) да, понимаю.. значит этот вариант не пойдет..
   DrShad
 
8 - 07.11.17 - 10:05
(7) как бы ты это сделал на ОФ? так же и тут
   first_may
 
9 - 07.11.17 - 10:07
(8) я показал, как работало на обычных формах..

а на УФ ты говоришь, что нет ссылки..

вот я и задал вопрос тут..
   lodger
 
10 - 07.11.17 - 10:09
(9) так ты показал как это работало с Документом или Справочником. но спрашиваешь про Обработку.
чуешь разницу?
 
 
   МимохожийОднако
 
11 - 07.11.17 - 10:12
При открытии запоминай, что было. При закрытии сравнивай, что стало.
   first_may
 
12 - 07.11.17 - 10:14
(10) а-а-а.. точно.. вчера переработал :)..

да, в ОФ это справочник и в нем в модуле объекта все это написано..

просто делаем переход на новую конфу и тут УФ.. вот я и заменил на обработку..

то есть в ней только как написали в (3)?
   DrShad
 
13 - 07.11.17 - 10:15
*рукалицо*
тяжело же тебе будет
   Юрий Лазаренко
 
14 - 07.11.17 - 10:23
(12) В УФ тоже нормально сработает вариант из (4).
   DrShad
 
15 - 07.11.17 - 10:25
(14) не для обработки
   first_may
 
16 - 07.11.17 - 10:30
(14) как?

Еще раз, может не совсем правильно написал вопрос.

1 обработка при открытии получает некоторое значение данных
2 пользователь меняет поле Примечание, например пишет ААА
3 до этого в базе было БББ
4 при записи надо занести в регистр историй, что 
"пользователь сделал изменение в примечание с БББ на ААА"
   Юрий Лазаренко
 
17 - 07.11.17 - 10:32
(15) Я в курсе.
(16) &НаСервере в процедуре ПередзаписьюНаСервере, например.
   Юрий Лазаренко
 
18 - 07.11.17 - 10:37
(16) В процедуре ПриСозданииНаСервере создаем новую структуру. Перебираем циклом реквизиты обработки и запоминаем в структуре первоначальные значения реквизитов в формате "Ключ = Имя реквизита" и "Значение = Значение реквизита".  Структуру кладем во временное хранилище, адрес хранилища запоминаем в переменной.
В процедуре ПередЗакрытием достаем структуру из временного хранилища, заново проходим по всем реквизитам и сравниваем их значения со значениями в структуре.
   first_may
 
19 - 07.11.17 - 10:37
(18) вот вот..

"Перебираем циклом реквизиты обработки" - это не знаю как делать в УФ.
   DrShad
 
20 - 07.11.17 - 10:42
так же как в ОФ
   first_may
 
21 - 07.11.17 - 10:57
(20) так
Для каждого Реквизит из Метаданные().Реквизиты Цикл 
..

??
   Юрий Лазаренко
 
22 - 07.11.17 - 10:59
(21) Нет, так:

Для Каждого Реквизит Из ЭтаФорма.ПолучитьРеквизиты() Цикл
   Юрий Лазаренко
 
23 - 07.11.17 - 11:03
+(22) У тебя же на форме могут быть не только реквизиты, которые хранятся в метаданных, а и те, которые были созданы программно.
   DrShad
 
24 - 07.11.17 - 11:03
(21) если встроена в конфиг, то можно и так
   DrShad
 
25 - 07.11.17 - 11:04
(23) он еще не достиг дзена, когда может на УФ программно создавать реквизиты
   Юрий Лазаренко
 
26 - 07.11.17 - 11:05
(25) Через полгода достигнет, создаст, а алгоритом проверки останется старый и перестанет нормально работать. Пусть сразу делает как положено.
   first_may
 
27 - 07.11.17 - 11:07
(23) "которые были созданы программно." - такого не будет
"еще не достиг дзена" - точно :)

Спасибо всем ..
   Юрий Лазаренко
 
28 - 07.11.17 - 11:09
(27) ""которые были созданы программно." - такого не будет" - поверь мне, как разработчику типовых решений, в 1С может быть все )
   first_may
 
29 - 07.11.17 - 11:10
(28) но обработка же моя.. она внешняя.. я в нее сам поместил нужные реквизиты..
   Cyberhawk
 
30 - 07.11.17 - 12:15
Делать как советует (18) в ПриСозданииНаСервере не надо, т.к. значения реквизитов формы могут автоматически восстанавливаться, а происходит это уже после указанного обработчика
   first_may
 
31 - 07.11.17 - 12:16
(30) ПриОткрытии?
   Cyberhawk
 
32 - 07.11.17 - 12:17
(31) Если удобно делать это на клиенте, то да. Иначе в (3). И почитай справку в СП к тому обработчику.
   Юрий Лазаренко
 
33 - 09.11.17 - 13:17
Да, тут (30) прав. Могут восстанавливаться, поэтому заполнять структуру после чтения настроек.
 
  Рекламное место пустует
   Buster007
 
34 - 09.11.17 - 13:20
Скачиваешь БСП, встраиваешь в свою конфу и подключаешь объект к версионированию. Все работает, ничего придумывать не надо.
   catena
 
35 - 09.11.17 - 13:33
(34)Версионирование умеет версионировать обработки?
   Radkt
 
36 - 09.11.17 - 13:49
Как вариант сделать каждому реквизиту его копию чтобы сохранять при изменении старое значение, просто продумать чтобы много раз не заполнялись, при каждом изменении.
   first_may
 
37 - 09.11.17 - 19:22
Добрый  день..

Хотел бы спросить, при открытии у меня есть
ЭтотОбъект.Заказ типа ДанныеФормыСтруктура    ДанныеФормыСтруктура

Можно ли запомнить это значение до закрытия формы?
Можно ли перебрать ее?
   trooba
 
38 - 09.11.17 - 20:05
(37) Глобальный контекст.ЗначениеВСтрокуВнутр (Global context.ValueToStringInternal)
Глобальный контекст (Global context)
ЗначениеВСтрокуВнутр (ValueToStringInternal)
Синтаксис:

ЗначениеВСтрокуВнутр(<Значение>)
Параметры:

<Значение> (обязательный)

Тип: Произвольный.
Преобразуемое значение.
Возвращаемое значение:

Тип: Строка.
Системное представление значения в информационной базе.
Описание:

Получает системное строковое представление переданного значения.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Используется для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать для других целей не рекомендуется.
Пример:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
    | СоответствиеСчетовСрезПоследних.СчетХозрасчетный,
    | ...
    |ИЗ
    | РегистрСведений.СоответствиеСчетовБУиМСФО.СрезПоследних(&Период, ) КАК СоответствиеСчетовСрезПоследних";
Запрос.УстановитьПараметр("Период", Период);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Файл = Новый ЗаписьXML;
Файл.ОткрытьФайл(ИмяФайла);
Файл.ЗаписатьОбъявлениеXML();
Файл.ЗаписатьНачалоЭлемента("СоответствиеСчетов");
Пока Выборка.Следующий() Цикл
    Файл.ЗаписатьНачалоЭлемента("Запись");
        Файл.ЗаписатьНачалоЭлемента("СчетХозрасчетный");
            Файл.ЗаписатьТекст(XMLСтрока(Выборка.СчетХозрасчетный));
        Файл.ЗаписатьКонецЭлемента();
        // ...


        Файл.ЗаписатьНачалоЭлемента("ЗначениеТип");
            Файл.ЗаписатьТекст(ЗначениеВСтрокуВнутр(ТипЗнч(Выборка.Значение)));
        Файл.ЗаписатьКонецЭлемента();
        Файл.ЗаписатьНачалоЭлемента("Значение");
            Файл.ЗаписатьТекст(XMLСтрока(Выборка.Значение));
        Файл.ЗаписатьКонецЭлемента();
        // ...


    Файл.ЗаписатьКонецЭлемента();
КонецЦикла;
Файл.ЗаписатьКонецЭлемента();
 

См. также:

Глобальный контекст, метод ЗначениеИзСтрокиВнутр

--------------------------------------------------------------------------------

     Методическая информация
   first_may
 
39 - 09.11.17 - 20:20
(38) то есть
1 в моддуле формы объявляю
Перем Тест;

2 затем запоминаю
&НаСервере
Процедура ПриОткрытииНаСервере()
    Тест = ЗначениеВСтрокуВнутр(ЭтотОбъект.Заказ);

3 а потом считываю
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Рез = ЗначениеИзСтрокиВнутр(Тест);



так?
   trooba
 
40 - 09.11.17 - 20:54
(39) Например так
   first_may
 
41 - 09.11.17 - 20:59
(40) тогда вот тут
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Рез = ЗначениеИзСтрокиВнутр(Тест);

вижу, что Тест - неопределено :(
   first_may
 
42 - 09.11.17 - 21:29
Как можно сохранить ДанныеФормыСтруктура, полученные при открытии, до закрытия формы?
   h-sp
 
43 - 09.11.17 - 21:37
(41) сделай реквизит формы Тест. А не Перем
   rozer76
 
44 - 09.11.17 - 22:03
(41) нда, перем на сервере не доживает до след серверного вызова ты не знал?
   first_may
 
45 - 09.11.17 - 22:09
(44) писать на УФ только учусь
   first_may
 
46 - 09.11.17 - 22:09
(43) а тем этой переменной?
   first_may
 
47 - 09.11.17 - 22:09
а-а-а.. строка
   first_may
 
48 - 09.11.17 - 22:16
1 сделал Тест как реквизит формы
2 тогда тут
&НаСервере
Процедура ПриОткрытииНаСервере()
    Тест = ЗначениеВСтрокуВнутр(ЭтотОбъект.Заказ);

Тест принимает значение {"#",afe4a3fc-31ab-435f-b2ab-eba881452f56}


3 а далее на форме что то меняю и нажимаю записать и в 
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Рез = ЗначениеИзСтрокиВнутр(Тест);

Тест = {"#",afe4a3fc-31ab-435f-b2ab-eba881452f56}

Рез = Неопределенно

то есть получается не считывает?

все это хочу сделать, что бы потом данные ДанныеФормыСтруктура сравнить и понять что менялось
   Юрий Лазаренко
 
49 - 13.11.17 - 10:21
(48) А зачем переводить в строку внутр? Храни нужное значение в переменной прямо как ссылку, без конвертации.
 
  Рекламное место пустует
   first_may
 
50 - 14.11.17 - 00:20
Все спасибо, все получилось.

Один маленький вопрос - в типовых формах списка документов есть кнопка меню Все действия, а в ней Настройка списка.

Можно ли такой пункт включить в своей форме? Подскажите пож, как это сделать?
   first_may
 
51 - 14.11.17 - 12:06
Очень нужен совет, как настроить меню Все действия, а в ней Настройка списка. ??



Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует