Календарь

Автор adi_den2013, 24 февраля 2014, 12:28

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

JohnSUN

Цитата: adi_den2013 от 25 февраля 2014, 14:17
Сложновато. Нужно подумать...
Поддерживаю! Нужно подумать...
Если таблицы исключений отличаются одним признаком "рабочий/выходной", то что мешает объединить их в одну? Как-то так:
Дата    День недели Рабочий Примечание
01.01.2014 3 TRUE Новый год
08.03.2014 6 TRUE Международный Женский день
09.03.2014 7 TRUE Международный Женский день (перенос из-за попадания на воскресенье)
08.05.2014 4 TRUE День Победы
09.05.2014 5 TRUE День Победы
11.05.2014 7 FALSE Перенос рабочего дня с 08/05

Цитата: adi_den2013 от 25 февраля 2014, 14:17
Не представляю реализацию такого варианта в форме для редактирования пользователем.
И здесь варианты могут быть самыми разными. Например, в большинстве конфигураций 1С - это тупо редактирование справочника Праздники, прямо в таком вот виде, как я сейчас нарисовал. Ну, вместо TRUE/FALSE, разумеется, чекбоксы с флажками, а так - таблица как таблица. А в некоторых "продвинутых" конфигурациях, которые постоянно работают с календарями, например, в "Кадры" - используют специальный элемент управления "Календарь": хочешь - месяц целиком, хочешь - три месяца, масштабируй и прокручивай в любую сторону, закрашивай мышкой целые диапазоны дат и всякое такое... В нашем распоряжении такой штуки, кажется, нет (а может быть и есть - не знаю). Как по мне - барство это... Разреши пользователю мышкой елозить, так он и на данные смотреть перестанет. И посыпятся жалобы "Я ничего не делала, а оно само..."
Цитата: adi_den2013 от 25 февраля 2014, 14:17Допустим кончился год и......?
... и нажимаешь кнопку под таблицей "Создать праздники на следующий год", по которой все записи текущего года добавятся еще раз, со сдвигом даты на год. Останется просмотреть эти... э-э-э... 14 официальных государственных праздников и поправить некоторые записи.
Цитата: adi_den2013 от 25 февраля 2014, 14:17Либо я напортачила с праздниками потому, что правительство решило лишить нас, например, 8-марта.
Щелкаешь на чекбокс напротив даты 08.03.2014, чтобы снять птичку "выходной", повторным вводом пароля подтверждаешь, что это не ты сошла с ума... и в "плоской таблице" дат бывший праздник становится днём неофициальной пьянки когда все будут работать
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Спасибо за пояснение :)

Сразу как-то появился свет в конце тоннеля. Попробую сейчас развернуть таблицу в предложенном тобой варианте и буду думать дальше.  :roll:
Яна (in real)

JohnSUN

Ты это всё "мутишь" в HSQLDB или сразу в PostgreSQL?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Сразу в PostgreSQL. Чего уж там "распыляться"
Яна (in real)

JohnSUN

И правильно! Сразу загугли образцы кода для построения таблиц "от сих до сих". Ну, чтобы плоскую таблицу из процедуры/функции получить
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Думаешь надо сразу :)? Добавить каши в голову  ^-^
Яна (in real)

JohnSUN

Сразу - загуглить, поставить закладку, а когда дойдет до разборок с датами - тогда да, добавить  ;D

Просто сейчас будешь многое делать руками и с разгону можешь забыть, что твою "проблему" уже не раз расковыряли в инете - попробуешь с наскоку своими руками поломать...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Хорошо. Уговорил :)
Яна (in real)

adi_den2013

Чего тут не хватает?
Макрос выполняется, но с ошибкой.

Sub upd_dd
   Dim oStatement As Object
   Dim oDBSource As Object
   Dim oConnection As Object
   Dim oDatabaseContext As Object

   Dim upd_dday   As String '

   upd_dday   = "UPDATE ""kalendar"" SET ""nday"" = TO_CHAR(""day"",'D')"
   
   oDatabaseContext = createUnoService( "com.sun.star.sdb.DatabaseContext" )
   oDBSource = oDatabaseContext.GetByName("raspisanie")
   oConnection = oDBSource.GetConnection("", "")  
   oStatement = oConnection.createStatement()
   oStatement.ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE
      oStatement.executeQuery(upd_dday)
      MsgBox "Дни недели сформированы",0,"АРМ 'РАСПИСАНИЕ'"
End Sub


[вложение удалено Администратором]
Яна (in real)

JohnSUN

Всё правильно, я тоже постоянно на этом месте спотыкаюсь - настолько привыкаешь работать с результатами разных SELECT'ов, что автоматически пишешь executeQuery вместо executeUpdate или просто execute
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

! 8-)  Точно.

Спасибо  :beer:
Яна (in real)

adi_den2013

#26
Фильтрация не отрабатывает вообще

Sub par_poisk(oEvent as Variant)                                     '
 Dim oForm, oForms,oForm2
 Dim oDrawPage as Object
 Dim box1
 Dim box2

 Dim oStatement As Object
 Dim oDBSource As Object
 Dim oConnection As Object
 Dim oDatabaseContext As Object
'
 oDatabaseContext = createUnoService( "com.sun.star.sdb.DatabaseContext" )
 oDBSource = oDatabaseContext.GetByName("raspisanie")
 oConnection = oDBSource.GetConnection("", "")  
 oStatement = oConnection.createStatement()
 oStatement.ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE  

 oForms  = ThisComponent.getDrawPage().getForms()
 oForm = oEvent.Source.getModel().getParent()
 box1 = oForm.getByName("txts")
 box2 = oForm.getByName("txtp")
 
 mes_s=box1.CurrentValue          ' числовое значение начала периода
 mes_p=box2.CurrentValue          ' числовое значение конца периода
 
 MsgBox "Фильтр по периоду с: "+ mes_s+" по: "+ mes_p

   oForm.Filter = "TO_CHAR(""day"",'MM') =" & mes_s
   oForm.reload()
End Sub


[вложение удалено Администратором]
Яна (in real)

adi_den2013

#27
 Всёёёёёёёёёё я увидела   ;)!

Сорри.


   oForm.Filter = "TO_CHAR(""day"",'MM') ='" & mes_s &"'"
Яна (in real)

JohnSUN

#28
Во-первых, зачем ты насилуешь железяку постоянным TO_CHAR()? Нам с тобой, конечно, легче видеть эти данные в текстовом виде, но компьютеру с числами в его родном, внутреннем представлении работать комфортнее.
Суть фильтра, я так понял, "...MONTH(""day"")>=" + mes_s + " AND MONTH(""day"")<=" + mes_p ?

А во-вторых, мало указать строку фильтрации. Нужно еще сказать форме, что эта строка должна обрабатываться:
oForm.ApplyFilter = True
(Нет ведь гарантий, что он не был сброшен раньше в FALSE)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

adi_den2013

Да, суть такая. Мне почему-то казалось, что от TO_CHAR больше пользы...

А oForm.reload() не достаточно?

Ну...да...я об этом думала. В смысле сброса фильтра.
Яна (in real)