1с предыдущее значение реквизита при изменении

Предыдущее значение реквизита

Я
   Малый Тихон

16.11.15 — 14:46

Добрый вечер. Столкнулся с такой задачей-у объекта есть несколько реквизитов с типом Число. задача стоит чтобы значения не повторялись. Пытаюсь реализовать в обработчике события ПриИзменении-обхожу реквизиты и если попадается такое же ззначение тогда значение изменяемого ставлю в 0. Пользователя не устраивает-говорит что может не обратить внимание какое число стояло раньше и просто затереть его. Как можно сохранить предыдущее значение реквизита? Пробовал с помощью обработчика событий НачалоВыбора помесить значение куда нибудь во временное хранилище, и присваивать не 0 а ПолучитьИзВременного хранилища() и все такое-не работает. Никто не подскажет как обойти?

  

Партнерская программа EFSOL Oblako

   Горогуля

1 — 16.11.15 — 14:48

матери пользователя и ничего не трогай

   VikingKosmo

2 — 16.11.15 — 14:49

Ты б еще куда подальше, чем ВременноеХранище сунул. Реквизит формы в котором хранить твое предыдущее значение, не предлагать?

   Малый Тихон

3 — 16.11.15 — 14:49

не вариант-самому уже интересно

   Анютик

4 — 16.11.15 — 14:49

да можно обойти, вопрос — что за задачу так реализовывают? ну сохранили прежние значения реквизитов, дальше-то что?

   aleks_default

5 — 16.11.15 — 14:51

создай реквизит формы в который сохраняй предыдущее значение при открытии формы и изменяй в обработчике ПриИзменении

   Малый Тихон

6 — 16.11.15 — 14:51

(2)-нет, не работает, пробовал уже =Элементы[ИмяРеквизита]

   Малый Тихон

7 — 16.11.15 — 14:51

(4) загрузка с табличного документа-пользователи хотят менять номера столбцов

   VikingKosmo

8 — 16.11.15 — 14:51

(6) иди учи матчасть и разницу между Элементам и Реквизитами формы

   Горогуля

9 — 16.11.15 — 14:51

(6) Элементы — это такие элементы управления, чтобы ты знал

   2083

10 — 16.11.15 — 14:52

(6) ну ты смотришь в элемент, связанный с объектом, а тебе говорят про элемент формы не связанный с объектом.

   Малый Тихон

11 — 16.11.15 — 14:52

(9) по нормальному можешь сказать?

   Горогуля

12 — 16.11.15 — 14:53

(11) иди учи матчасть и разницу между Элементам и Реквизитами формы

   Горогуля

13 — 16.11.15 — 14:53

+(12) они даже издалека не напоминают друг друга

   VikingKosmo

14 — 16.11.15 — 14:54

(13) врешь ты все, у них Имя может быть одинаковое ;)

   DmitriyDI

15 — 16.11.15 — 14:57

можно создавать текстовый файл записывать в него значение и потом его читать от туда.

А так у объекта через ссылку должно ведь быть старые значения реквизитов.

   Анютик

16 — 16.11.15 — 14:57

(7) и на каждую колонку свой реквизит на форме?) я бы в тч вывела и управляла просто номерами строк той ТЧ. Никаких дублей, ничего пользователю запоминать не надо…выбрал порядок , как в файле и загрузил. Не?

   Малый Тихон

17 — 16.11.15 — 14:58

(16)не хотят они ТЧ, у меня это первоначальный вариант был. ладно закрываем тему

   letni88

18 — 16.11.15 — 14:59

Обработка выбора для элемента, если значение совпадает, стандартная обработка = ложь, пусть пользователь пытается снова.

   2083

19 — 16.11.15 — 15:00

(17) колонки строки… только я один не понял чего он вообще изобразить пытается?

  

Анютик

20 — 16.11.15 — 15:03

(17) УФ? просто переменные СтароеЗначение создай по реквизитам, при открытии формы считывай их, при изменении модифицируй СтароеЗначение. Потом анализируй их и текущие

Получение старого значения реквизита в момент записи объекта или OLD

Реляционные системы управления базами данных, такие как InterBase или FireBird, в своих триггерах поддерживают контекстные переменный NEW и OLD. Контекстная переменная NEW содержит новые значения записи, а вот переменная OLD содержит старые значения записи, следовательно, при обновлении записи (допустим BEFORE UPDATE) разработчик имеет доступ к записи до её обновления и после.

Стоит заметить что переменные OLD и NEW доступны не во всех типах триггера. Платформа 1С так же позволяет разработчику иметь доступ к старым значениям реквизита (до обновления) и одновременно к новым значениям реквизита (после обновления), но при одном условии, разработчик должен использовать события перед записью!

Допустим, у нас имеется справочник Договоры, у которого имеется реквизит ДатаПодписания. Что бы сравнить старое и новое значение реквизита, воспользуемся событием модуля объекта ПередЗаписью. Далее два варианта развития события.

1. Выполнить явный запрос


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Договоры.ДатаПодписания КАК ДатаПодписанияСтароеЗначение
|ИЗ
| Справочник.Договоры КАК Договоры
|ГДЕ
| Договоры.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ЭтотОбъект.ДатаПодписания = ВыборкаДетальныеЗаписи.ДатаПодписанияСтароеЗначение Тогда
// Вставить обработку
КонецЕсли;
КонецЦикла;

2. Выполнить неявный запрос


ДатаПодписанияСтароеЗначение = ЭтотОбъект.Ссылка.ДатаПодписания; // <-- неявный запрос
Если ЭтотОбъект.ДатаПодписания = ДатаПодписанияСтароеЗначение Тогда
// Вставить обработку
КонецЕсли;

Через переменную ЭтотОбъект доступно новое значение реквизита, а вот что бы получить старое значение реквизита, необходимо его прочитать из базы данных, поэтому мы используем событие ПередЗаписью.

RobitI2

0 / 0 / 0

Регистрация: 30.12.2022

Сообщений: 20

1

Как получить старое значение реквизита в событии ПриИзменении?

22.01.2023, 13:41. Показов 488. Ответов 16

Метки нет (Все метки)


Есть какой-нибудь способ получить старое значение реквизита при его изменении, для таких ситуации, где мне надо найти разницу между новым значением и старым значением
Примерный код:

1C
1
2
3
4
5
6
7
Процедура КоличествоПриИзменении();
если СтароеЗначение > НовоеЗначение тогда
 сообщить("Старое значение больше нового");
Иначе
 сообщить("Новое значение больше старого");
КонецЕсли;
КонецПроцедуры;



0



1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,160

Записей в блоге: 1

22.01.2023, 15:11

2

ты же изменяешь н а форме. а в базе данных ещё старое хранится. вот оттуда и возьми



0



1506 / 949 / 364

Регистрация: 31.05.2012

Сообщений: 3,340

22.01.2023, 15:16

3

можно запоминать в переменной исходное значение, при выходе из события приизменении обновлять ту переменную новым значением. можно исходное значение вытаскивать, например запросом, из объекта, если он уже существует разумеется



0



0 / 0 / 0

Регистрация: 30.12.2022

Сообщений: 20

22.01.2023, 16:50

 [ТС]

4

Цитата
Сообщение от Аватар
Посмотреть сообщение

можно запоминать в переменной исходное значение, при выходе из события приизменении обновлять ту переменную новым значением. можно исходное значение вытаскивать, например запросом, из объекта, если он уже существует разумеется

А как это реализовать, я не имею представления



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

22.01.2023, 19:48

5

Цитата
Сообщение от Аватар
Посмотреть сообщение

при выходе из события приизменении обновлять ту переменную новым значением.

Не получится. В событии ПРиИзменении уже новое значение. Само событие начинает срабатывать, когда значение уже новое. Поэтому способ абсолютно правильный, но запись в переменную надо делать в событии ПриАктивизацииСтроки

Цитата
Сообщение от RobitI2
Посмотреть сообщение

А как это реализовать, я не имею представления

Объявляешь переменную в начале модуля. В ПриАктивизацииСтроки записываешь данные реквизита в эту переменную и используешь ее когда надо. Одно серьезное ограничение. Значение в переменной объявленной наКлиенте доступно в процессе всего сеанса работы с формой (пока данная форма открыта), но, понятно, использовать ее на сервере можно только передав как параметр функции или процедуры. Переменная объявленная и записанная на сервере хранит значение ТОЛЬКО на период вызова конкретного серверного вызова, при переходе на клиент значение обнуляется даже если форма не была закрыта



0



1506 / 949 / 364

Регистрация: 31.05.2012

Сообщений: 3,340

22.01.2023, 21:26

6

Цитата
Сообщение от polax
Посмотреть сообщение

но запись в переменную надо делать в событии ПриАктивизацииСтроки

это для таблицы, а есть не табличные поля. при активизациистроки запомнил 10, вошел в поле и изменил на 20, потом в другое этой же строки и вернулся опять в то поле и изменил на 25, но старое так и осталось 10, хотя оно уже 20 стало. а при выходе из приизменении я бы старое обновил на 20



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

22.01.2023, 21:45

7

Цитата
Сообщение от Аватар
Посмотреть сообщение

а при выходе из приизменении я бы старое обновил на 20

Да. Но ТС как раз интересует не новое 20 в сравнении с еще более новым 25, а именно старое 10 и установленное 20. И вот 10 ты ни в жисть не поймаешь событием ПриИзменении



0



1506 / 949 / 364

Регистрация: 31.05.2012

Сообщений: 3,340

22.01.2023, 21:49

8

Цитата
Сообщение от polax
Посмотреть сообщение

Да. Но ТС как раз интересует не новое 20

а потом я передернул зачем то на другую строку и вдруг приспичило вернуться на старую и изменить то поле, опа — старое значение стало 20, а интересует ведь 10 )) фигня это событие для таких целей



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

22.01.2023, 21:56

9

Читаем:

Цитата
Сообщение от RobitI2
Посмотреть сообщение

Есть какой-нибудь способ получить старое значение реквизита при его изменении, для таких ситуации, где мне надо найти разницу между новым значением и старым значением

Встаем на строку, записали старое значение(10), меняем на 20 (именно для этого и встали на строку, согласно условия). Получили сообщение «Новое значение больше старого» ЧТД
Теперь расскажи КАК собираешься получить старое значение 10 в ПриИзменении и выполнить условие задачи



0



1506 / 949 / 364

Регистрация: 31.05.2012

Сообщений: 3,340

22.01.2023, 22:05

10

писал же — запомнил исходное значение 10 где-то в СтароеЗначение, в том же приоткрытии. изменил на 20 — в приизменении отработал с 10 и 20 и в СтароеЗначение записал 20, при следующем приизменении забыл про исходное 10 и работаю уже с 20. если же мне всегда нужно то 10 и пофиг что юзер 100 раз поменял это поле в открытой форме, то один раз запомнил и нафиг мне то ПриАктивизацииСтроки. а то что юзер может 100 раз поменять поле, дергая при этом разные строки, таблицы и закладки помнить как бы нужно ))



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

22.01.2023, 22:10

11

Цитата
Сообщение от Аватар
Посмотреть сообщение

запомнил исходное значение 10 где-то в СтароеЗначение, в том же приоткрытии

Смеешься? в накладной 1000 и более строк и я ГДЕ-ТО запомнил КАЖДУЮ строку где-то? А то и каждую колонку? Интересно ГДЕ?

Цитата
Сообщение от Аватар
Посмотреть сообщение

можно запоминать в переменной исходное значение

Это сколько переменных предполагаешь?



0



1506 / 949 / 364

Регистрация: 31.05.2012

Сообщений: 3,340

22.01.2023, 22:20

12

ну 1000 строк в табличной части мне не встречалось и если такие документы есть и ввод там ручками то очень плохо. во всех колонках помнить старое значение не приходилось и зачем? обычно такие вещи с количеством и одной колонкой. так что запомнить в массивчик одну колонку не проблемно. не удобно конечно, но корректнее использования ПриАктивизацииСтроки, которое не правильно будет со старым работать при передергивании строк и многократном возврате в одно и то же поле



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

22.01.2023, 22:22

13

Продолжаем разбор. Даже если где-то записал (еще раз слабо представляю КАК записать значения сотни строк, но пусть)

Цитата
Сообщение от Аватар
Посмотреть сообщение

и в СтароеЗначение записал 20, при следующем приизменении забыл про исходное 10 и работаю уже с 20.

Опять повторюсь. Имеем старое 10. Встали на строку и записали в переменную 10. Поменяли на 20 и получили решение задачи. Делаем дальше в форме что угодно. При следующем ПриИзменении без всякой записи, так же встали на эту строку и уже записали 20 (текущее значение),так же забыли про исходное 10 и работаем уже с 20. И никаких приоткрытии и где-то.



0



1506 / 949 / 364

Регистрация: 31.05.2012

Сообщений: 3,340

22.01.2023, 22:28

14

Цитата
Сообщение от polax
Посмотреть сообщение

При следующем ПриИзменении без всякой записи, так же встали на эту строку и уже записали 20 (текущее значение),так же забыли про исходное 10 и работаем уже с 20.

правильно. а если стали на соседнее поле этой же строки, а потом вернулись в наше любимое поле и поменяли на 35, то старое все равно 10 и ни каких 20, а мы что-то уже сделали с той разницей. но если на другую строку и потом вернулись — старое 20. разное поведение, а оно нам надо?



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,396

22.01.2023, 22:35

15

Не надо. НО. Условие задачи. Нам надо именно ПриИзменении принять решение, т.е. ДО любого перехода в соседнюю ячейку. Например нельзя увеличивать позицию заказа более чем на 5 единиц. Стояло 10, изменили на 20, получили тут же сообщение что это не то и вернули старое значение в поле — 10. Именно так это работает (сам применял неоднократно и ни разу не подводило. Ситуации были сложнее, но смысл именно в этом — в момент ПриИзменении принять решение правильно изменили или нет и если нет, вернуть исходное значение) Именно так по-моему и ставил вопрос ТС



0



Модератор

Эксперт 1С

3708 / 2905 / 572

Регистрация: 10.03.2011

Сообщений: 11,442

Записей в блоге: 1

25.01.2023, 11:52

16

Цитата
Сообщение от Аватар
Посмотреть сообщение

запомнил исходное значение 10 где-то в СтароеЗначение, в том же приоткрытии

я бы так сделал, более универсально

Добавлено через 1 минуту
Ну а так все от задачи зависит…



0



71 / 61 / 17

Регистрация: 12.11.2015

Сообщений: 593

27.02.2023, 10:37

17

Может объект.Реквизит — это новое, а объект.Ссылка.Реквизит — это старое. Пока объект не записан, в Ссылка значение не меняется



0



29 авг. 2018 г.

Получить предыдущее значения реквизита

Перем ПредыдущееЗначениеОрганизации; // значение реквизита «Организация» до записи объекта в базу

Процедура ПередЗаписью(Отказ)
ПредыдущееЗначениеОрганизации
= ...; // с помощью запроса выясняем значение до записи объекта в базу
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
Если ПредыдущееЗначениеРеквизита <> Организация Тогда
// отрабатываем изменение значения реквизита при записи
...
КонецЕсли;

КонецПроцедуры

Комментариев нет:

Отправить комментарий

Популярный пост

  • Установил сервер 1С, установил СУБД и потом решил переименовать сервер (компьютер), который находиться обычной рабочей группе, без какого-…

  • Сегодня столкнулся с ситуацией, когда нужно было выбрать Безопасный режим загрузки операционной системы ,  посредством USB -клавиатуры. И …

  • Например, есть на управляемой форме программно добавленные реквизиты и соответственно элементы формы (колонки). Программным методотом нужно…

  • А конкретно: «Вы выполнили вход в учетную запись локального администратора. Что бы управлять серверами с коллекциями, вам необходимо…

  • Название заметки лишь описывает сообщение о ошибке, а ниже находиться перечень нюансов, которые затрагивают как выше ошибку, так и некотор…

Архив блога:


  • ► 


    2022

    (7)


    • ► 


      10/09 — 10/16

      (1)


    • ► 


      03/20 — 03/27

      (1)


    • ► 


      03/13 — 03/20

      (5)


  • ► 


    2021

    (8)


    • ► 


      02/07 — 02/14

      (7)


    • ► 


      01/03 — 01/10

      (1)


  • ► 


    2020

    (3)


    • ► 


      03/01 — 03/08

      (3)


  • ► 


    2019

    (22)


    • ► 


      09/22 — 09/29

      (1)


    • ► 


      09/01 — 09/08

      (2)


    • ► 


      07/07 — 07/14

      (10)


    • ► 


      03/10 — 03/17

      (1)


    • ► 


      03/03 — 03/10

      (1)


    • ► 


      01/06 — 01/13

      (7)


  • ▼ 


    2018

    (35)


    • ► 


      12/30 — 01/06

      (1)


    • ► 


      11/18 — 11/25

      (10)


    • ▼ 


      08/26 — 09/02

      (10)

      • Получить предыдущее значения реквизита
      • Перебрать получить значения реквизитов формы
      • Найти и удалить Windows (универсальные) приложения
      • Открыть форму выбора с отбором 1С
      • Установить курсор на строке таблицы значений 1С
      • Перенести файл с клиента на сервер
      • Объединить ячейки на листе Excel из 1С
      • Добавить гиперссылку на лист Excel из 1С
      • Добаить изображение с гиперссылкой 1С
      • Скачать сайт

    • ► 


      06/10 — 06/17

      (4)


    • ► 


      05/06 — 05/13

      (1)


    • ► 


      04/15 — 04/22

      (1)


    • ► 


      01/28 — 02/04

      (1)


    • ► 


      01/14 — 01/21

      (7)


  • ► 


    2017

    (36)


    • ► 


      09/17 — 09/24

      (1)


    • ► 


      08/06 — 08/13

      (6)


    • ► 


      07/23 — 07/30

      (1)


    • ► 


      07/16 — 07/23

      (2)


    • ► 


      07/09 — 07/16

      (4)


    • ► 


      07/02 — 07/09

      (2)


    • ► 


      06/11 — 06/18

      (8)


    • ► 


      05/21 — 05/28

      (1)


    • ► 


      05/14 — 05/21

      (1)


    • ► 


      04/16 — 04/23

      (4)


    • ► 


      03/26 — 04/02

      (1)


    • ► 


      03/12 — 03/19

      (4)


    • ► 


      01/08 — 01/15

      (1)


  • ► 


    2016

    (76)


    • ► 


      12/11 — 12/18

      (1)


    • ► 


      12/04 — 12/11

      (10)


    • ► 


      11/27 — 12/04

      (2)


    • ► 


      11/20 — 11/27

      (4)


    • ► 


      11/06 — 11/13

      (1)


    • ► 


      10/23 — 10/30

      (7)


    • ► 


      10/16 — 10/23

      (3)


    • ► 


      10/09 — 10/16

      (1)


    • ► 


      09/25 — 10/02

      (4)


    • ► 


      09/18 — 09/25

      (5)


    • ► 


      09/11 — 09/18

      (3)


    • ► 


      09/04 — 09/11

      (18)


    • ► 


      08/21 — 08/28

      (1)


    • ► 


      07/24 — 07/31

      (1)


    • ► 


      06/26 — 07/03

      (1)


    • ► 


      06/19 — 06/26

      (1)


    • ► 


      06/12 — 06/19

      (2)


    • ► 


      05/22 — 05/29

      (1)


    • ► 


      05/08 — 05/15

      (1)


    • ► 


      03/06 — 03/13

      (1)


    • ► 


      02/14 — 02/21

      (5)


    • ► 


      02/07 — 02/14

      (3)


  • ► 


    2015

    (36)


    • ► 


      12/27 — 01/03

      (1)


    • ► 


      12/20 — 12/27

      (4)


    • ► 


      12/13 — 12/20

      (1)


    • ► 


      12/06 — 12/13

      (1)


    • ► 


      10/25 — 11/01

      (4)


    • ► 


      10/18 — 10/25

      (4)


    • ► 


      10/11 — 10/18

      (1)


    • ► 


      09/13 — 09/20

      (1)


    • ► 


      09/06 — 09/13

      (1)


    • ► 


      08/30 — 09/06

      (1)


    • ► 


      08/23 — 08/30

      (2)


    • ► 


      07/19 — 07/26

      (2)


    • ► 


      06/14 — 06/21

      (1)


    • ► 


      05/31 — 06/07

      (1)


    • ► 


      05/24 — 05/31

      (3)


    • ► 


      05/17 — 05/24

      (2)


    • ► 


      05/10 — 05/17

      (2)


    • ► 


      04/19 — 04/26

      (2)


    • ► 


      01/25 — 02/01

      (1)


    • ► 


      01/04 — 01/11

      (1)


  • ► 


    2014

    (73)


    • ► 


      12/28 — 01/04

      (1)


    • ► 


      12/21 — 12/28

      (2)


    • ► 


      12/14 — 12/21

      (1)


    • ► 


      12/07 — 12/14

      (5)


    • ► 


      11/30 — 12/07

      (3)


    • ► 


      11/23 — 11/30

      (5)


    • ► 


      11/09 — 11/16

      (2)


    • ► 


      11/02 — 11/09

      (1)


    • ► 


      09/28 — 10/05

      (2)


    • ► 


      09/21 — 09/28

      (2)


    • ► 


      09/14 — 09/21

      (1)


    • ► 


      09/07 — 09/14

      (1)


    • ► 


      08/24 — 08/31

      (2)


    • ► 


      08/17 — 08/24

      (2)


    • ► 


      07/06 — 07/13

      (2)


    • ► 


      06/29 — 07/06

      (2)


    • ► 


      06/22 — 06/29

      (2)


    • ► 


      06/15 — 06/22

      (4)


    • ► 


      05/11 — 05/18

      (1)


    • ► 


      04/27 — 05/04

      (1)


    • ► 


      04/20 — 04/27

      (1)


    • ► 


      04/06 — 04/13

      (3)


    • ► 


      03/30 — 04/06

      (3)


    • ► 


      03/23 — 03/30

      (5)


    • ► 


      03/09 — 03/16

      (1)


    • ► 


      03/02 — 03/09

      (1)


    • ► 


      02/23 — 03/02

      (1)


    • ► 


      02/16 — 02/23

      (1)


    • ► 


      02/09 — 02/16

      (3)


    • ► 


      02/02 — 02/09

      (3)


    • ► 


      01/26 — 02/02

      (2)


    • ► 


      01/19 — 01/26

      (2)


    • ► 


      01/05 — 01/12

      (5)


  • ► 


    2013

    (69)


    • ► 


      12/08 — 12/15

      (1)


    • ► 


      12/01 — 12/08

      (3)


    • ► 


      11/03 — 11/10

      (2)


    • ► 


      10/27 — 11/03

      (1)


    • ► 


      10/20 — 10/27

      (1)


    • ► 


      10/13 — 10/20

      (1)


    • ► 


      09/29 — 10/06

      (1)


    • ► 


      09/22 — 09/29

      (3)


    • ► 


      09/08 — 09/15

      (4)


    • ► 


      09/01 — 09/08

      (2)


    • ► 


      08/25 — 09/01

      (5)


    • ► 


      08/11 — 08/18

      (3)


    • ► 


      07/28 — 08/04

      (1)


    • ► 


      07/14 — 07/21

      (2)


    • ► 


      06/09 — 06/16

      (1)


    • ► 


      05/26 — 06/02

      (1)


    • ► 


      05/05 — 05/12

      (1)


    • ► 


      04/14 — 04/21

      (4)


    • ► 


      04/07 — 04/14

      (2)


    • ► 


      03/24 — 03/31

      (3)


    • ► 


      03/10 — 03/17

      (1)


    • ► 


      03/03 — 03/10

      (2)


    • ► 


      02/24 — 03/03

      (9)


    • ► 


      02/17 — 02/24

      (6)


    • ► 


      02/10 — 02/17

      (3)


    • ► 


      02/03 — 02/10

      (3)


    • ► 


      01/27 — 02/03

      (1)


    • ► 


      01/20 — 01/27

      (1)


    • ► 


      01/06 — 01/13

      (1)


  • ► 


    2012

    (85)


    • ► 


      12/30 — 01/06

      (2)


    • ► 


      12/23 — 12/30

      (2)


    • ► 


      12/16 — 12/23

      (2)


    • ► 


      12/09 — 12/16

      (1)


    • ► 


      12/02 — 12/09

      (1)


    • ► 


      11/25 — 12/02

      (3)


    • ► 


      11/11 — 11/18

      (1)


    • ► 


      11/04 — 11/11

      (1)


    • ► 


      10/21 — 10/28

      (2)


    • ► 


      10/14 — 10/21

      (1)


    • ► 


      10/07 — 10/14

      (3)


    • ► 


      09/30 — 10/07

      (1)


    • ► 


      09/23 — 09/30

      (2)


    • ► 


      09/16 — 09/23

      (2)


    • ► 


      09/09 — 09/16

      (1)


    • ► 


      09/02 — 09/09

      (4)


    • ► 


      08/26 — 09/02

      (5)


    • ► 


      08/19 — 08/26

      (1)


    • ► 


      08/12 — 08/19

      (1)


    • ► 


      08/05 — 08/12

      (1)


    • ► 


      07/29 — 08/05

      (1)


    • ► 


      07/22 — 07/29

      (1)


    • ► 


      06/24 — 07/01

      (1)


    • ► 


      06/17 — 06/24

      (1)


    • ► 


      06/10 — 06/17

      (2)


    • ► 


      06/03 — 06/10

      (1)


    • ► 


      05/20 — 05/27

      (1)


    • ► 


      05/13 — 05/20

      (3)


    • ► 


      05/06 — 05/13

      (4)


    • ► 


      04/29 — 05/06

      (5)


    • ► 


      04/22 — 04/29

      (4)


    • ► 


      04/08 — 04/15

      (2)


    • ► 


      03/25 — 04/01

      (5)


    • ► 


      03/04 — 03/11

      (1)


    • ► 


      02/26 — 03/04

      (7)


    • ► 


      02/05 — 02/12

      (3)


    • ► 


      01/29 — 02/05

      (1)


    • ► 


      01/22 — 01/29

      (2)


    • ► 


      01/15 — 01/22

      (3)


  • ► 


    2011

    (137)


    • ► 


      12/18 — 12/25

      (2)


    • ► 


      12/11 — 12/18

      (3)


    • ► 


      12/04 — 12/11

      (2)


    • ► 


      11/20 — 11/27

      (3)


    • ► 


      11/13 — 11/20

      (2)


    • ► 


      11/06 — 11/13

      (3)


    • ► 


      10/30 — 11/06

      (4)


    • ► 


      10/23 — 10/30

      (7)


    • ► 


      10/16 — 10/23

      (4)


    • ► 


      10/09 — 10/16

      (10)


    • ► 


      10/02 — 10/09

      (3)


    • ► 


      09/25 — 10/02

      (4)


    • ► 


      09/18 — 09/25

      (4)


    • ► 


      09/04 — 09/11

      (6)


    • ► 


      08/21 — 08/28

      (4)


    • ► 


      08/07 — 08/14

      (4)


    • ► 


      07/31 — 08/07

      (2)


    • ► 


      07/24 — 07/31

      (3)


    • ► 


      07/10 — 07/17

      (2)


    • ► 


      07/03 — 07/10

      (2)


    • ► 


      06/26 — 07/03

      (4)


    • ► 


      06/19 — 06/26

      (2)


    • ► 


      06/12 — 06/19

      (2)


    • ► 


      06/05 — 06/12

      (1)


    • ► 


      05/29 — 06/05

      (1)


    • ► 


      05/22 — 05/29

      (2)


    • ► 


      05/15 — 05/22

      (5)


    • ► 


      05/01 — 05/08

      (3)


    • ► 


      04/24 — 05/01

      (1)


    • ► 


      04/17 — 04/24

      (4)


    • ► 


      04/10 — 04/17

      (1)


    • ► 


      04/03 — 04/10

      (3)


    • ► 


      03/27 — 04/03

      (2)


    • ► 


      03/20 — 03/27

      (1)


    • ► 


      03/13 — 03/20

      (1)


    • ► 


      03/06 — 03/13

      (4)


    • ► 


      02/27 — 03/06

      (1)


    • ► 


      02/20 — 02/27

      (2)


    • ► 


      02/13 — 02/20

      (5)


    • ► 


      01/23 — 01/30

      (7)


    • ► 


      01/16 — 01/23

      (2)


    • ► 


      01/09 — 01/16

      (5)


    • ► 


      01/02 — 01/09

      (4)


  • ► 


    2010

    (14)


    • ► 


      12/26 — 01/02

      (4)


    • ► 


      12/19 — 12/26

      (10)

Пожалуйста, не забывайте при копировании текста указывать адрес оригинала… Технологии Blogger.

Количество просмотров за прошлую неделю

возможно ли как-то впоймать на форме значение старого Количества до изменения

Автор medoed, 25 янв 2012, 12:22

0 Пользователей и 1 гость просматривают эту тему.

Здравствуйте!
А подскажите мне, пожалуйста, возможно ли как-то впоймать на форме значение старого Количества до изменения.
вот, что надо мне сделать:

ЭлементыФормы.Товары.ТекущиеДанные.Себестоимость=
ЭлементыФормы.Товары.ТекущиеДанные.Себестоимость/СтароеКоличество*ЭлементыФормы.Товары.ТекущиеДанные.Количество;

Т.е. сначало Количество(реквизит тч «ТОвары») было заполнено обработкой, и это значение нужно как-то запомнить в переменной СтароеКоличество, чтобы потом его использовать при изменении.
Есть такая возможность?


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


Цитата: has от 25 янв 2012, 15:02
Либо можно перед началом редактирования присваивать значение переменной

Это в процедуре ПередНачаломИзменения?
я вроде пытаюсь это сделать. но у меня не получается присвоить значение почему-то. можете код набросать примерный, как присвоить значение? пожалуйста)


Все уже работает. спасибо)


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • возможно ли как-то впоймать на форме значение старого Количества до изменения

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

при изменении поля табличной части документа мне надо знать старое и новое его значение. чтобы хранить историю изменений. новое — нам известно, можем получить в обработке события «приизменении». а вот старое откуда узнать? спасибо.

Я перед началом изменения сохраняю старое значение в переменную формы, а ПриИзменении проверяю. Хотя может есть способ и лучше …

а в какой обработке сохраняешь? при каком событии? у меня тоже такая мысль была…. но это как-то противно…

старое это какое? есть Ссылка — там хранится значение которое записано в базу данных есть старое значение элемента — то которое до изменения элемента управления

потом при изменении если старое <> новое тогда …. старое = Новое

Если ссылочное поле то в НачалоВыбора

блин — как то я делал — ничего сложного нет — но вот как не помню — сейчас поищу

Рома, спасибо… точно… в ссылка — хранится старое… а вот если я уже меняла и не записала… оно где-нибудь хранится интересно? как его отловить?

у меня просто числовое…. извините, надо было уточнить конечно.

не непомню где и как делал — давно было

еще раз что бы не плодить стандартных обработчиков в приОткрытии записываешь в переменные модуля все что тебе надо в приизменении — меняешь если надо

у меня проблема — могут потом несколько раз изменить, и по-хорошему надо все это сохранять… с чего на чего изменили…

+ а много переменных держать — не хочется мне… может как-то по-другому можно сделать, народ?

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

Ну только если значений мало. Иногда все таки лучше через обработчик …

через какой ? ааа.. в начале выбора — пишешь в ОДНУ переменную значение начала выбора (имя переменной не зависит от элемента) а в при изменении — читаешь эту переменную ? тоже вариан

ну в принципе я вроде придумала как хранить историю изменений… буду в табличном поле хранить, в самом документе… с именами полей и датами изменений. ну и значения и причины изменений. чтобы сразу глянул и все понял…

да нету у меня никакого начала выбора… поле — ЧИСЛОВОЕ….

можно в ПриАктивизацииЯчейки (или Строки — не помню)

так история изменения документа зачем хранить промежуточные изменения? ониже не записаны были? имхо, достаточно сравнить с сылкой

задача такая — надо хранить….

а какой смысл я открываю прием на работу десять раз меняю должность у сотрудника закрываю без сохранения, или с сохранением, но должность я вернул старую — нафига мне история

очень интересно — зачем такое может потребоваться, может у себя сделая

ну при приеме на работу такое не требуется… а это мне надо при проведении регламентного документа. скажем его подготовили, потом что-то исправили на каком-то основании…. потом провели…. интересно будет проанализировать зачем и когда что-либо изменяли в нем.

Сам сегодня столкнулся с такой проблемой. Для табличной части решилось очень просто. Почти как в , но с помощью события ТЧ «ПередНачаломИзменения», которое возникает всегда при попытке редактировать что либо в таблице. Приблизительно так:

Лена, только РС. Перед записью сравниваешь содержимое объекта и ссылки.

ага, ищите в КЗ по слову «парциальное изменение».

Лошарик, мне надо регистрировать ВСЕ изменения… вот в чем загвоздка…

Тэги:

Комментарии доступны только авторизированным пользователям

 

   Напомню Вам,
что в прошлом выпуске речь шла о периодических
константах. Как оказалось — одним из
интереснейших моментов была фраза «Примечание:
на самом деле тут я не прав: есть в 1С, один баг,
когда возникает 2  значения на 1 дату.
» 
Пришло много заявок с просьбой рассказать об
этом. Обещаю Вам, что в ближайшем выпуске, я это
сделаю. Но сегодня речь пойдет о периодических
реквизитах справочников. 

    Необходимость
периодических реквизитов никто не отрицает.
Классическим примером может служить справочник
«Валюты», где существует два периодических
реквизита — «Курс» и «Кратность». Но
рекордсменами, на мой взгляд, все -таки является
справочники «Основные средства» и
«Сотрудники». 

    Включение опции
«Периодический» у реквизита справочника,
позволяет указать для реквизита справочника
хранение истории изменений его значения. Такой
реквизит в системе 1С:Предприятие называется периодическим.
Этот реквизит  обладает следующим
свойством: в отличие от «обычных» (не
периодических) реквизитов, система
1С:Предприятие хранит значения такого реквизита
по датам их изменения. При обращении к
значению такого реквизита на некоторую дату
выдается его значение на эту дату, либо, если
таковое отсутствует, — на ближайшую предыдущую
дату, на которую устанавливалось значение
реквизита. 

    Важно помнить, что
разные периодические реквизиты одного и того же
элемента справочника не связаны между собой. Это
означает, что изменять их значения можно не
зависимо друг от друга. Если Вы изменяете
«курс» в справочнике «Валюты», то Вас
никто не заставляет изменять значение реквизита
«кратность». 

    Периодическим может
быть реквизит любого типа кроме текстового
неограниченной длины. Периодически реквизиты
имеют ограничение: для них не может быть
установлен отбор и сортировка. 

Изменение значения
периодических реквизитов.
В отличии от
констант, периодические реквизиты справочников
могут быть изменены тремя способами: вручную,
программно и документом. 

Ручное изменение.
При просмотре списка справочника (или элемента
справочника) Вы всегда видите значение
периодических реквизитов на рабочую дату.  По
этому для ручного изменения значения реквизитов
лучше пользоваться клавишей F5 (или меню
«Действия» ->»История значения»). При
этом Вам потребуется выбрать реквизит, который
Вы хотите изменить. После этого открывается окно
истории в котором две колонки: «Дата» и
«Значение».  Здесь Вы сможете изменить
любое значение и любую дату, добавить строки или
удалить строки. Этот способ является встроенным
в систему и не зависит от компоненты и
конфигурации.
В некоторых конфигурациях существует программно
реализованная возможность работы с
периодическими реквизитами. Чаще всего эта
возможность «прячется» под кнопкой
«История».  При нажатии на эту кнопку
открывается окно, в котором Вы получаете много
дополнительных возможностей. Но большая часть из
них сводится к удалению значений/дат и чистку
истории. По крайней мере, в 4.26 конфигурации
бухгалтерии я не смог изменить значения
реквизита через кнопку «История».

Программное изменение.
Как и при изменении значений периодических
констант, при работе с периодическими значениями
справочников требуется всегда указывать дату на
которую Вы хотите получить или установить
значение.  Используются следующие методы.

Получить(ДатаЗн) — этот
метод позволяет получить значение на указанную
дату. Наиболее просто объяснит его работу на
небольшом примере:
Процедура Сформировать()
   
спр=СоздатьОбъект(«Справочник.Валюты»);
    спр.ВыбратьЭлементы(); //перебираем
элементы
    Пока спр.ПолучитьЭлемент()=1 цикл
        курсВалюты=спр.курс.Получить(‘01.01.2002’);
//получаем значение курса на 1 января 2002 года
       
КратностьВалюты=спр.кратность.Получить(‘01.01.2002’);
//получаем  кратность на 1 янв. 2002 г.
       
Сообщить(спр.Наименование);
        Сообщить(курсВалюты);
       
Сообщить(КратностьВалюты);
    конецЦикла;
конецПроцедуры

Комментарий к примеру:
«Курс» и «Кратность» — это реквизиты
справочника «Валюты». Процедура перебирает
элементы справочника и сообщает наименование
валюты, курс и кратность на 1 января 2002 года.
Обращаю Ваше внимание на использование метода Получить:
метод применяется к реквизиту.

Установить(датаУстановки,
.Значение)
— метод позволяет устанавливать
значение периодического реквизита на любую
дату.  Предыдущий пример легко изменить, чтобы
процедура устанавливала значение курса и
кратности для всех валют в какое-то одно
значение: 
Процедура Сформировать()
   
спр=СоздатьОбъект(«Справочник.Валюты»);
    спр.ВыбратьЭлементы(); //перебираем
элементы
    Пока спр.ПолучитьЭлемент()=1 цикл
        // устанавливаем значение
курса на 1 января 2002 года равным единице
        спр.курс.Установить(‘01.01.2002’,
1); 
        //устанавливаем 
кратность на 1 янв. 2002 г. равной 2.
        спр.кратность.Установить(‘01.01.2002’,
2); 
      конецЦикла;
конецПроцедуры

Обратите внимание: в этом
способе, при  записи истории не нужно
использовать метод Записать(). Вообще, обращение
к периодическим реквизитам — трудоемкая операция
для 1С.  И  чем больше Вы получаете значений
периодических реквизитов для одного объекта, тем
дольше все это работает. В том случае, если
приходится обрабатывать много реквизитов на
одну дату у одного объекта, я рекомендую
использовать метод  ИспользоватьДату()

ИспользоватьДату(Дата,
УстСразу)
— метод позволяет задать дату для
работы со всеми периодическими реквизитами
сразу для всего справочника, созданного с
помощью СоздатьОбъект(). После его применения,
обращение к периодическими реквизитам
происходит так же как к обычным реквизитам. 
Важно!!! После метода ИспользоватьДату() нельзя
использовать методы Установить() и Получить(). 
Особого внимания заслуживает  флаг УстСразу.
Если УстСразу=0, тогда метод начинает работать со
следующей выборки элементов. Если устСразу=1,
тогда метод начинает работать уже в текущей
выборке

//*******************************************
Процедура Сформировать()
   
спр=СоздатьОбъект(«Справочник.Валюты»);
    спр.ИспользоватьДату(‘01.01.2002’);
    спр.ВыбратьЭлементы(); //перебираем
элементы
    Пока спр.ПолучитьЭлемент()=1 цикл 
        спр.курс=121; // обращаемся к
курсу как к простому реквизиту
        спр.кратность=233; 
        спр.записать(); //теперь
обязательно надо записать изменения!!!
    конецЦикла;
КонецПроцедуры

Получение значений
периодических реквизитов после метода
ИспользоватьДату() — выполняется аналогичным
образом:

Процедура Сформировать()
   
спр=СоздатьОбъект(«Справочник.Валюты»);
    спр.ИспользоватьДату(‘01.01.2002’, 1);
    спр.ВыбратьЭлементы(); //перебираем
элементы
    Пока спр.ПолучитьЭлемент()=1 цикл
        курсВалюты=спр.курс; 
       
КратностьВалюты=спр.кратность; 
       
Сообщить(спр.Наименование);
        Сообщить(курсВалюты);
       
Сообщить(КратностьВалюты);
    конецЦикла;
конецПроцедуры

Изменение периодических
реквизитов справочника документами.
Периодические реквизиты могут быть изменены
не только вручную и программно из обработки, но и
при проведении документа. Я это считаю отдельным
способом, так как методика работы в этом случае
несколько отличается от обычной ситуации. Все
дело в том, что при проведении документа,
значение реквизита устанавливается в нужное
значение, а при распроведении документа —
восстанавливается предыдущее значение. 
Восстановление происходит автоматически. Нет
необходимости в использовании процедуры отмены
обработки проведения.  Обращаю Ваше внимание
на то, что такая манипуляция возможна только с
периодическими реквизитами. Для обычных
реквизитов это не работает. Для установки
значений используется метод УстановитьРеквизитСправочника().
Этот метод можно применять только в модуле
документа. Синтаксис метода:
 УстановитьРеквизитСправочника(Элем,Рекв,Зн,ДатаУст,ИмяТ,Длина,Точность);
где Элем — элемент справочника, для которого
меняется значение периодического реквизита
Рекв — имя изменяемого реквизита (как оно задано в
конфигураторе)
Зн — устанавливаемое значение
ИмяТ, Длина, Точность — используются для
реквизитов неопределенного типа. В остальных
случаях — их применение не обязательно.
Пример применения этого метода Вы может найти в
типовой бухгалтерии (у меня 4.2) в документах:
«Приказ о приеме на работу», «Приказ о
кадровых изменениях», «Ввод в эксплуатацию
ОС», «Перемещение ОС», «Принятие к учету
НМА» и других документах.

    Наблюдение: на
собственном опыте знаю, что бухгалтеры делают
миллион ошибок, когда сталкиваются с
периодическими реквизитами. Им очень трудно
объяснить, что изменять значения надо через
кнопку F5, что значение в расчетах может
использоваться не то, которое они видят в
справочнике, а какое-то другое, которое было
«тогда». Универсального рецепта для борьбы с
этим не знаю. В своей практике стараюсь
заставлять бухгалтера менять периодическое
значение только через документ. В этом случае
резко уменьшается количество записи ошибок
«не на ту» дату. Из-за периодических
элементов очень страдает, на мой взгляд,
программа Зарплата и кадры. 

Задание для самостоятельной
работы:

1. Создайте документ,
предназначенный для изменения курсов валют в
справочнике Валюты.

2. В справочнике «Основные
средства»  есть надпись «Значения
периодических реквизитов указаны на дату…».
Рядом кнопка для изменения даты. Как изменение
даты влияет на отображаемые значения реквизитов.

На сегодня все. В следующем
выпуске: объект «Периодический»

Понравилась статья? Поделить с друзьями:
  • 1с проверить существование реквизита в запросе
  • 1с проверить существование реквизитов на форме
  • Diablo 3 что делать после прохождения компании
  • 1с проверка заполнения обязательных реквизитов
  • Dpd как расшифровывается транспортная компания