cro-logo      
Добро пожаловать, Гость. Пожалуйста, выберите Вход или Регистрация

 
 
  ГлавнаяСправкаПоискВходРегистрация  
 
Переключение на Главную Страницу Страниц: 1
Послать Тему Печать
Несколько вопросов по формам ввода (Прочитано 3 910 раз)
Пытливый
Профи
****
Вне Форума



Сообщений: 382
Мурманск
Несколько вопросов по формам ввода
25.09.2017 :: 12:20:43
 
1. Почему форма ввода будучи управляющей формой не появляется в списке по F5 ?
2. Какой аналог в Lua функции SubAge()
3. Как обновлять форму при длительном процессе?
У меня есть такой код:
function button1_Click( control, event )
local BD = CroApp.GetBank()
local TestTimer = Me:CreateTimer()
local TimerTicks = 0
TestTimer.Interval = 1000
TestTimer.Tick = function(TestTimer)
                         TimerTicks = TimerTicks + 1
                  Me.StatusBar.Panels(2).Text = TimerTicks
                  end
TestTimer:Start()

Me.ProgressBar.Max = #ATest + 1
Me.ProgressBar.Value = 1
Me.StatusBar.Panels(1).Text = "Проверка банка..."
 
for i=1, #ATest do 
  Me.StatusBar.Panels(1).Text = ATest[i][1]
  local RS, errStr = BD:StringRequest(ATest[i][2])
  if RS.Count > 0 then
     Me.TestTable:SetCellText(1, i-1, RS.Count)          
  end      
  Me.ProgressBar.Value = Me.ProgressBar.Value + 1 
end   
Me.StatusBar.Panels(1).Text = "Проверка закончена"
end
Я предполагал, что таймер запустится как отдельный процесс, паралельный событию, я его стартую до цикла, а он у меня запускается после обработки события. Ужас
Что я делаю не так?
Наверх
 
 
IP записан
 
Freelancer
Разработчик
Вне Форума


Per aspera ad Astra

Сообщений: 233
Re: Несколько вопросов по формам ввода
Ответ #1 - 25.09.2017 :: 15:32:36
 
Какая версия Кроноса?
Наверх
 
 
IP записан
 
Пытливый
Профи
****
Вне Форума



Сообщений: 382
Мурманск
Re: Несколько вопросов по формам ввода
Ответ #2 - 25.09.2017 :: 15:54:39
 
Версия 6.6.167
С первым вопросом разобрался - надо теперь устанавливать права на форму.
Остальное пока под вопросом. Возможно вместо TestTimer:Start() надо использовать TestTimer:Now() - буду пробовать (хотя в чем разница этих двух методов пока не уловил)
Появилось еще пара вопросов по новому компоненту в форме Таблица. С грехом пополам, на примерах понял основы работы с этим компонентом, но пока не понял следующее:
4. Можно ли и как выставить свойства текста в ячейке? (положение, шрифт)
5. Как обработать двойной клик на конкретной строке/ячейке?
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 886
Санкт-Петербург
Re: Несколько вопросов по формам ввода
Ответ #3 - 25.09.2017 :: 22:28:41
 
2. В CroLua есть объект DateTimeSpan - представляет положительный или отрицательный интервал времени. Кроме того объекты DateTime можно непсредственно суммировать или вычитать, получая
DateTimeSpan.
3. Про таймеры почитайте тут и по ссылкам внутри.
TestTimer:Start() используется для запуска созданного объекта Timer. Метода Now для таймера не видел. Есть свойство для функции CreateTimer (timerFunc, interval, startMode). startMode может принимать значение Timer.start - если необходимо запустить таймер и Timer.now для немедленного запуска таймера. По моим наблюдениям при Timer.start работа таймера начинается с паузы равной интервалу, а Timer.now с запуска timerFunc без паузы.

4-5. Наверное придется ждать официального релиза с описаниями класса TableControl.
Наверх
 
 
IP записан
 
Пытливый
Профи
****
Вне Форума



Сообщений: 382
Мурманск
Re: Несколько вопросов по формам ввода
Ответ #4 - 26.09.2017 :: 00:11:26
 
Я видел этот класс DateTimeSpan, но как я понял он ориентирован на операции с сутками, а мне нужно годы использовать, а там уже простым умножением дней не получишь нужной даты. Вот как мне с помощью этого класса посчитать в годах разницу между текущей датой и скажем 01.01.2000 ?
Я могу конечно сделать свой велосипед с разбором двух дат и сравнением по частям, но хотелось бы понять как это делать правильно Улыбка
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 886
Санкт-Петербург
Re: Несколько вопросов по формам ввода
Ответ #5 - 26.09.2017 :: 13:53:36
 
SubAge имеет некоторые особенности. Месяц в ней всегда принимается равным 30 дням, соответственно год - 360 дней. Разделив полученное значение DateTimeSpan.Days на 360 и взяв целую часть числа получите аналог SubAge для подсчета годов и т.д.
Наверх
 
 
IP записан
 
Пытливый
Профи
****
Вне Форума



Сообщений: 382
Мурманск
Re: Несколько вопросов по формам ввода
Ответ #6 - 26.09.2017 :: 16:24:27
 
Что-то не выходит каменный цветок.
local EDate=DateTime.Now
local BDate=DateTime("01.01.2000")
local Res=EDate-BDate
local Year=Res.Day/360
и вот тут я получаю ошибку. Что не так?
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 886
Санкт-Петербург
Re: Несколько вопросов по формам ввода
Ответ #7 - 26.09.2017 :: 18:06:38
 
Не так одна буква.
Код:
local Year=Res.Days/360 

Наверх
 
 
IP записан
 
Пытливый
Профи
****
Вне Форума



Сообщений: 382
Мурманск
Re: Несколько вопросов по формам ввода
Ответ #8 - 26.09.2017 :: 20:31:24
 
Ага, спс. Невнимательность вызывает затыки.
Вот такой код дает ожидаемые 17 лет с хвостиком:
local Res=(DateTime.Now-DateTime("26.09.2000")).Days/360
А вот такой возвращает пустоту.
local Res=(DateTime.Now-DateTime("26.09.2000")).Year
Почему?
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 886
Санкт-Петербург
Re: Несколько вопросов по формам ввода
Ответ #9 - 26.09.2017 :: 23:33:17
 
1. Он вызывает не пустоту, а nil.
2. В рекламе с песенкой про молоко и производные от него (в различных регионах может и не идти) есть слова "Почему, почему, почему?". Так вот - есть молоко со своими свойствами. Если из молока со своими свойствами, например жирностью, вычесть молоко, то останется субпродукт под названием сыворотка, у которого свои свойства, а свойства "жирность" нет. Так и здесь. Получая объект DateTimeSpan в результате операции (DateTime - DateTime) Вы получаете объект со своими свойствами, например Days. Поэтому выражение local Res=(DateTime.Now-DateTime("26.09.2000")).Days будет приводить к нужному результату.
К результату может привести выражение local Res=(DateTime.Now.Year-DateTime("26.09.2000").Year), но он будет неточный из-за игнорирования сравнения месяцев.
Нужный вариант может дать выражение:
Код:
date=DateTime("26.10.2000")
date_2=date; date_2.Year=DateTime.Now.Year
if date_2 <=DateTime.Now then Res=(DateTime.Now.Year-DateTime("26.09.2000").Year) else Res=(DateTime.Now.Year-DateTime("26.09.2000").Year)-1 end 


Наверх
 
 
IP записан
 
Пытливый
Профи
****
Вне Форума



Сообщений: 382
Мурманск
Re: Несколько вопросов по формам ввода
Ответ #10 - 27.09.2017 :: 21:48:10
 
Спасибо за подсказки. Почти все получилось, как задумано. Сейчас последний наверное затык - не сортируется рекордсет. Ошибок не возникает, но и сортировки не наблюдается.
Вот так я это пытаюсь сделать:
Код:
function кнопка1_Click( control )
 local RS = CroApp.GetBank():StringRequest("ОТ ЛИ01 1 РВ ПЕТРОВ ИЛИ 1 РВ ИВАНОВ")
 if RS.Count > 0 then   
    RS:Sort({field=1})
	CroApp.GetBank():GetBase("ЛИ"):OpenReview(RS)
 end
end 

Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 2 886
Санкт-Петербург
Re: Несколько вопросов по формам ввода
Ответ #11 - 27.09.2017 :: 22:58:11
 
RecordSet предназначен для использования в пользовательских формах, где он нормально сортируется. Вы его передаете в окно стандартного ввода/коррекции, которое не является пользовательским и содержит свои механизмы сортировки.
Если отсортированный RecordSet передать в форму ввода (Me.RecordSet=RS), то получите ожидаемый результат.
Наверх
 
 
IP записан
 
Пытливый
Профи
****
Вне Форума



Сообщений: 382
Мурманск
Re: Несколько вопросов по формам ввода
Ответ #12 - 27.09.2017 :: 23:48:21
 
Жаль, хотя как же тогда запрос по образцу передает в то-же окно ввода/коррекции уже отсортированный набор? Возможно есть какой-то иной механизм задать из кода сортировку для этого окна?
Наверх
 
 
IP записан
 
ChRain
Пользователь
**
Вне Форума


Я люблю этот Форум!

Сообщений: 30
Re: Несколько вопросов по формам ввода
Ответ #13 - 21.07.2021 :: 01:19:16
 
Zuluss писал(а) 27.09.2017 :: 22:58:11:
RecordSet предназначен для использования в пользовательских формах, где он нормально сортируется. Вы его передаете в окно стандартного ввода/коррекции, которое не является пользовательским и содержит свои механизмы сортировки.
Если отсортированный RecordSet передать в форму ввода (Me.RecordSet=RS), то получите ожидаемый результат.

Если отсортированные результаты RecordSet передать например в выходную форму (через SaveReport) то сортировка тоже не работает.
Наверх
 
 
IP записан
 
ChRain
Пользователь
**
Вне Форума


Я люблю этот Форум!

Сообщений: 30
Re: Несколько вопросов по формам ввода
Ответ #14 - 21.07.2021 :: 02:54:24
 
Дополню: метод Sort всеже сортирует RecordSet (видно в отладчике), только вот к сожалению SaveReport и OpenView игнорирует последовательность системных номеров в RecordSet и выводит их по нарастающему системному номеру. Пробовал вручную создавать уже отсортированный RecordSet (так на моменте его пополнения записи выстраиваются по порядку системных номеров). Короче замкнутый круг. Кто решил проблему выдачи через OpenView и SaveReport отсортированных записей прошу отписаться...
Наверх
 
 
IP записан
 
Переключение на Главную Страницу Страниц: 1
Послать Тему Печать