Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Класс "ДатаВремя" (число прочтений - 3539 )
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Класс "ДатаВремя"
28. Декабря 2009 :: 14:36
Печать  
Класс ДатаВремя
Построен на Microsoft Windows Common Controls-2 6.0 (SP4), файл эктивэкс C:\WINDOWS\system32\MSCOMCT2.OCX
Идея взята с http://www.1cpp.ru/forum/YaBB.pl?num=1204718805, автор - Kapet, за что ему огромное спасибо!!!

Подключается добавлением в defcls.prm  следующих строк ....
Код
Выбрать все
		//#if ! _class_ДатаВремя
		class ДатаВремя = ДатаВремя.ert : АктивИкс
		{
		//#define _class_ДатаВремя
			Число Инициализация(Знач ГлобальныйКонтекст КонтФормы, Знач Строка ИмяАтрибута = "", Знач Строка ИмяЗаменяемогоАтрибута = "");
		};
		//#endif 


Реализована недостающая в 1Сv7.7 возможность работы с типом данных "ДатаВремя" как визуально (на форме)  так и в Запросах. В форме может заменять собой стандартные реквизиты типа 'Дата'. Например для замены ДатаДок в любом документе нужно добавить следующее
Код
Выбрать все
      Перем ДатаВремя;
      
      Процедура ПослеОткрытия()
	  ДатаВремя = СоздатьОбъект("ДатаВремя");
          ДатаВремя.Инициализация(Контекст);
      КонецПроцедуры
 


И ВСЕ!!!! Единственное НО! У уже записанных докуемнтов время изменить нельзя! (может быть позже как-то доделаю .... извращенным способом Улыбка)  Для работы в отчетах нужно чуть больше телодвижений. К примеру у вас есть реквизиты ВыбНачДата и ВыбКонДата
           
Код
Выбрать все
Перем ВыбНачПериода, ВыбКонПериода;

		Процедура ПослеОткрытия()
			ВыбНачПериода = СоздатьОбъект("ДатаВремя");
			ВыбНачПериода.Инициализация(Контекст, "ЭУВыбНачПериода", "ВыбНачДата");
			ВыбКонПериода = СоздатьОбъект("ДатаВремя");
			ВыбКонПериода.Инициализация(Контекст, "ЭУВыбКонПериода", "ВыбКонДата");
			ВыбКонПериода.Время = "23:59:59";
		КонецПроцедуры

		// Далее в самой процедуре запроса....
		ВыбНачПоз = ВыбНачПериода.Позиция; ВыбКонПоз = ВыбКонПериода.Позиция;
		ТекстЗапроса="
		|Период с ВыбНачПоз по ВыбКонПоз;
 


Т.е. нужно указать какой реквизит и на какой реквизит меняем. В документе это все делается по умолчанию.

Теперь можно работать с типом данных ДатаВремя почти что без проблем (если не считать изменение времени записанного документа)

Если нужен еще какой функционал, к примеру сложение, вычитание, сравнение и т.п. - говорите, доделаю .....
  

DateTime_v1_0.rar ( 14 KB | Загрузки )
Наверх
ICQ  
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ДатаВремя"
Ответ #1 - 29. Декабря 2009 :: 16:33
Печать  
А можно время - отключать? Мне выбор даты нравится, удобнее стандартного, но для отчетов, например, время - не обязательно.
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Класс "ДатаВремя"
Ответ #2 - 30. Декабря 2009 :: 07:01
Печать  
classic писал(а) 29. Декабря 2009 :: 16:33:
А можно время - отключать? Мне выбор даты нравится, удобнее стандартного

Можно конечно. Изменить в метод Иинициализация() строку  ДатаВремя.Объект.CustomFormat на такую к примеру:
Код
Выбрать все
	ДатаВремя.Объект.CustomFormat = "dd MMMM yyyy - dddd";
 


и будет отображаться "01 Декабрь 2009 - среда" Но это уже для особых гурманов (извращенцев)  Смех Для твоего случая достаточно
Код
Выбрать все
	ДатаВремя.Объект.CustomFormat = "dd.MM.yy" + ?(годЧетыреЗнака = 1, "yy", "");
 


и будет тебе счастье. Ну еще ширину реквизита для полного счастья подкорректировать вот здесь
Код
Выбрать все
АтрДатаВремя.УстановитьКоординаты(лЛево, лВерх, Макс(лШирина, ?(годЧетыреЗнака = 1, 125, 112)), лВысота-2); 


Не знаю как его заставить автоматически ширину считать в зависимости от шаблона - шрифт-то не моноширинный. Пока получается только методом тыка ....  Печаль
classic писал(а) 29. Декабря 2009 :: 16:33:
но для отчетов, например, время - не обязательно.

Ну это как сказать..... Я к примеру весь этот паровоз не для красоты городить начал, а из-за необходимости работы склада по сменам с 9:00 до 9:00. Во всем холдинге решили эту проблему организационным путем - переводом даты в 9:00 на сутки вперед. Типа "программисты сказали что в 1с7.7 это в принципе невозможно!". Ну а я, как дурак, решил доказать что "в принципе невозможного"  не существует Смех
  
Наверх
ICQ  
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ДатаВремя"
Ответ #3 - 30. Декабря 2009 :: 09:13
Печать  
Спасибо.
Года три-четыре назад была у меня подобная проблемя - нужно было строить отчеты с 8 до 20 и с 20 до 8. Я тогда отдельные поля для ввода часов делал.
Твое решение, конечно, красивше. Жаль, что клиентов тех уже нет (у меня) - продал бы украшениеУлыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать