Имя: Пароль:
1C
1С v8
Реквизиты на УФ. Надо отследить их изменения
,
0 first_may
 
06.11.17
20:11
Добрый день.

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

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

В обычных формах делалось вот так

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

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

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

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

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

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

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

то есть в ней только как написали в (3)?
13 DrShad
 
07.11.17
10:15
*рукалицо*
тяжело же тебе будет
14 Юрий Лазаренко
 
07.11.17
10:23
(12) В УФ тоже нормально сработает вариант из (4).
15 DrShad
 
07.11.17
10:25
(14) не для обработки
16 first_may
 
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) В процедуре ПриСозданииНаСервере создаем новую структуру. Перебираем циклом реквизиты обработки и запоминаем в структуре первоначальные значения реквизитов в формате "Ключ = Имя реквизита" и "Значение = Значение реквизита".  Структуру кладем во временное хранилище, адрес хранилища запоминаем в переменной.
В процедуре ПередЗакрытием достаем структуру из временного хранилища, заново проходим по всем реквизитам и сравниваем их значения со значениями в структуре.
19 first_may
 
07.11.17
10:37
(18) вот вот..

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

Для каждого Реквизит из Метаданные().Реквизиты Цикл
..

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


См. также:

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

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

     Методическая информация
39 first_may
 
09.11.17
20:20
(38) то есть

1 в моддуле формы объявляю
Перем Тест;

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

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



так?
40 trooba
 
09.11.17
20:54
(39) Например так
41 first_may
 
09.11.17
20:59
(40) тогда вот тут

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

вижу, что Тест - неопределено :(
42 first_may
 
09.11.17
21:29
Как можно сохранить ДанныеФормыСтруктура, полученные при открытии, до закрытия формы?
43 h-sp
 
09.11.17
21:37
(41) сделай реквизит формы Тест. А не Перем
44 rozer76
 
09.11.17
22:03
(41) нда, перем на сервере не доживает до след серверного вызова ты не знал?
45 first_may
 
09.11.17
22:09
(44) писать на УФ только учусь
46 first_may
 
09.11.17
22:09
(43) а тем этой переменной?
47 first_may
 
09.11.17
22:09
а-а-а.. строка
48 first_may
 
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) А зачем переводить в строку внутр? Храни нужное значение в переменной прямо как ссылку, без конвертации.
50 first_may
 
14.11.17
00:20
Все спасибо, все получилось.

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

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