Автор Тема: Пересчёт данных  (Прочитано 4951 раз)

Nikxdrummer

  • Ученик
  • *
  • Сообщений: 37
  • Благодарностей 2
Пересчёт данных
« : Февраль 10, 2017, 05:57:17 am »
Когда создается пустое поле и в пункте "Копия из" пишется ссылка на другое поле, то копирование не происходит пока в копированном поле не произойдет изменение. Можно ли как то сделать чтобы все данные обновились?)

vladimir.runa

  • Главный модератор
  • Мастер
  • **
  • Сообщений: 341
  • Благодарностей 22
  • skype: vladimir.runa
Re: Пересчёт данных
« Ответ #1 : Февраль 10, 2017, 09:45:40 am »
Свойство "Копия из" позволяет получать данные из указанного поля (к примеру из поля А). Копирование производится только в момент изменения поля А: при задании/изменении/очистке.
Поле А может быть как внутренним полем объекта (к примеру 1), так и полем другого объекта (к примеру 2). Если в объекте 2 указанное поле А было изменено, то в случае автоматического обновления, при открытии текущего объекта, данные бы пересчитались. А это делать категорически нельзя.
Пример: для товара была установлена одна цена, которая зафиксирована в операции. Если открыть операцию на изменение, то цену автоматически менять нельзя. Только если товар будет перевыбран, то также изменится и цена, участвующая в расчётах.

Nikxdrummer

  • Ученик
  • *
  • Сообщений: 37
  • Благодарностей 2
Re: Пересчёт данных
« Ответ #2 : Февраль 10, 2017, 11:49:39 am »
Да, с этим всем я согласен полностью, но вот, например, у меня занесено 500 строк данных, в каждой есть составное поле "Площадь" из другого объекта, мне нужно сделать их копии, вот тут то и приходится изменять все 500 строк.)

Александр

  • Посвященный
  • **
  • Сообщений: 59
  • Благодарностей 6
Re: Пересчёт данных
« Ответ #3 : Февраль 10, 2017, 11:54:00 am »
Согласен с Владимиром. Сталкивался с подобной ситуацией и как же был приятно удивлен, что данные не изменяются, только в случае перевыбора... Иначе действительно изменялись бы данные "затирая" всю историю.
Все кажется в шоколаде, если не принюхиваться...

vladimir.runa

  • Главный модератор
  • Мастер
  • **
  • Сообщений: 341
  • Благодарностей 22
  • skype: vladimir.runa
Re: Пересчёт данных
« Ответ #4 : Февраль 10, 2017, 11:55:51 am »
Да, такую возможность конструктор пока не даёт.
Но если возникает необходимость такого уровня, то это значит, что человеку требуются нестандартные возможности, которые можно реализовать иным способом: через SQL запросы непосредственно в базе данных SQLite - это одна из причин, по которой она не закрыта от пользователя.

Nikxdrummer

  • Ученик
  • *
  • Сообщений: 37
  • Благодарностей 2
Re: Пересчёт данных
« Ответ #5 : Февраль 10, 2017, 12:04:25 pm »
К сожалению, это не мой уровень, поэтому буду дальше всё в ручную) Спасибо за ответ)

Vitoks

  • Ученик
  • *
  • Сообщений: 7
  • Благодарностей 0
Re: Пересчёт данных
« Ответ #6 : Март 10, 2017, 07:18:09 pm »
Да, такую возможность конструктор пока не даёт.
Но если возникает необходимость такого уровня, то это значит, что человеку требуются нестандартные возможности, которые можно реализовать иным способом: через SQL запросы непосредственно в базе данных SQLite - это одна из причин, по которой она не закрыта от пользователя.
Можно подробнее, как это сделать? Столкнулся с такой же проблемой. Пере открывать больше 1000 записей очень тяжело.

runa.natalia

  • Главный модератор
  • Подмастерье
  • **
  • Сообщений: 118
  • Благодарностей 9
  • vk.com/runabase
Re: Пересчёт данных
« Ответ #7 : Март 10, 2017, 08:43:17 pm »
Открыть файл Runaz_z.rdb в любом стороннем редакторе баз данных SQLite и выполнить запрос на изменение записей.
Информация о новых версиях и список изменений: http://vk.com/runabase

Динар

  • Посвященный
  • **
  • Сообщений: 58
  • Благодарностей 1
Re: Пересчёт данных
« Ответ #8 : Апрель 10, 2017, 02:47:33 pm »
Существует ошибка при пересчёте поля при наличии параметра Копия из.

Во вложении проект, который описал Владимир, но с небольшой модификацией: в Заявку добавлено поле "Коэффициент из заявки" - это коэффициент, на который увеличивается сумма из Товара, для конкретной заявки.

Если этот коэффициент !=0, то всё работает как описывал Владимир: при редактировании строки поле "Цена за ед." пересчитывается, только если изменился параметр "Коэффициент из заявки" (см. рис.1)

Но если этот коэффициент =0, то пересчёт происходит всегда!  Т.е. редактируем строку: устанавливаем "Цена за ед.", сохраняем, сразу же снова редактируем и поле "Цена за ед." пересчитывается, хотя по идее не должно.

Проект во вложении, можно посмотреть.

vladimir.runa

  • Главный модератор
  • Мастер
  • **
  • Сообщений: 341
  • Благодарностей 22
  • skype: vladimir.runa
Re: Пересчёт данных
« Ответ #9 : Апрель 10, 2017, 10:15:27 pm »
Ошибка связана с полем ссылки на родительский объект (~Заявка).
Если оно скрыто (по умолчанию), то данные из него берутся всегда. А если его включить в отображении (что не требуется), то тогда расчёт работает правильно и данные из него при изменении записи не берутся, и все введённые значения не меняются.
Спасибо за замечание - исправим.

Динар

  • Посвященный
  • **
  • Сообщений: 58
  • Благодарностей 1
Re: Пересчёт данных
« Ответ #10 : Апрель 11, 2017, 06:10:42 am »
Ещё обнаружил одну странность (возможно причина таже самая).
В том же проекте сделал поле ~Заявка видимым на вкладке. При редактировании строки (при создании новой такого не наблюдается) при этом перестало отображаться поле "Цена за ед. из товара" и перестало рассчитываться поле Сумма (см. рис1).

Динар

  • Посвященный
  • **
  • Сообщений: 58
  • Благодарностей 1
Re: Пересчёт данных
« Ответ #11 : Апрель 11, 2017, 07:01:55 am »
Ещё раз перепроверил поведение Руны.

Ранее я писал, что пересчёт значений при редактировании строки в "Составе заявки" зависит от поля из Заявки "Коэффициент для заявки" и зависит от значения 0.  Это утверждение ошибочно.

Значения при редактировании строки в "Составе заявки" НЕ пересчитываются если значение поля "Коэффициент для заявки" НЕ было изменено относительно значения по умолчанию в режиме конструктора (см. рис1).
Если при создании заявки поле "Коэффициент для заявки" было изменено, к примеру установлено коэффициент 1.2, то при редактировании строки в "Составе заявки" значения всегда пересчитываются.

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

vladimir.runa

  • Главный модератор
  • Мастер
  • **
  • Сообщений: 341
  • Благодарностей 22
  • skype: vladimir.runa
Re: Пересчёт данных
« Ответ #12 : Апрель 11, 2017, 05:09:07 pm »
1. Значение по умолчанию не влияет на существующие данные. Т.е. это значение служит только для установки начального значения при создании записи. После того, как запись была создана, роли эта установка уже не играет.
2. Расчётные поля получают данные из ссылочных полей на объекты (поле объекта) только в двух случаях: 1) при создании записи, 2) при изменении значения в поле ссылки на объект. Если запись открывается на изменение, то данные из поля ссылки уже не берутся. Если значения полей у ссылочного объекта изменились, то необходимо перевыбрать ссылку на запись - только в этом случае будут приняты новые значения из объекта.
Такой принцип заложен для того, чтобы в записи не менялись уже установленные значения лишь при открытии её на изменение.

Динар

  • Посвященный
  • **
  • Сообщений: 58
  • Благодарностей 1
Re: Пересчёт данных
« Ответ #13 : Апрель 12, 2017, 06:11:24 am »
Логика описана верно, именно такого поведения и ожидает пользователь.
Я же привёл пример не корректного поведения, когда:
1. вообще перестали пересчитываться поля, если сделать видимым поле ~Заказчик
2. при изменении строки, когда объекты участвующие в расчёте не менялись, поле всё равно пересчитывается.

vladimir.runa

  • Главный модератор
  • Мастер
  • **
  • Сообщений: 341
  • Благодарностей 22
  • skype: vladimir.runa
Re: Пересчёт данных
« Ответ #14 : Апрель 13, 2017, 05:43:10 pm »
Изучили пример, а потом механизм пересчёта данных. Обнаружились слабые места, исправлять которые по отдельности особого смысла нет - вариантов применения различных комбинаций может быть бесчисленное множество, поэтому решили переработать весь механизм полностью. Объём работ будет большой, поэтому с исправлением данной ошибки придётся подождать.

 

Яндекс.Метрика