Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Установка запрета продажи алкоголя.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Pashaboston
Конфа УТ для Украины (2.3.24.3).
Вот что написал сам:
ТекущееВремя = ТекущаяДата() - НачалоДня(ТекущаяДата());
    Время = Дата('00010101') + (ТекущаяДата() - НачалоДня(ТекущаяДата()));
    Дата1 = НачалоДня(ТекущаяДата() + 1*60*60*24);
    
    Если (Время >= (Константы.НачалоВремениЗапрета.Получить() + НачалоДня(ТекущаяДата()))) и (Время <= (Константы.КонецВремениЗапрета.Получить() + Дата1 )) Тогда
        
        Для каждого Строка Из Товары Цикл
            Если Строка.Номенклатура.ПодакцизныйТовар И Строка.Номенклатура.ГраппаАкциза <> Перечисления.ГруппаАкциза.Г   Тогда
                Предупреждение("В даний момент заборонено продавати алкогольні напої");        
                Возврат;
            КонецЕсли;
            
        КонецЦикла;
    КонецЕсли;

Это все написано в процедуре ЗакрытьЧек в форме РегистрациПродаж. Даты запрета берутся с констант. Хочу стросить можно ли как то попроще?

Тип констатант Дата, состав даты Время
sava1
Проще чего?

В константах лучше хранить время Нач и время Кон (число, время в секундах)
Для сравнения берем текущеевремя. Если оно между нач и кон - можно продавать.
Pashaboston
Как проще можна сравнить время. Суть в том что нужно сравнивать время одного дня (22:00) и время следуещего дня (08:00).
Вот что доработал:

    Время = Дата('00010101') + (ТекущаяДата() - НачалоДня(ТекущаяДата()));
    Дата1 = НачалоДня(ТекущаяДата() + 1*60*60*24);
    Дата2 = НачалоДня(ТекущаяДата());
    Если (Время >= ( Дата2 + (Константы.НачалоВремениЗапрета.Получить() - НачалоДня(Константы.НачалоВремениЗапрета.Получить())))) И (Время <= ( Дата1 + (Константы.КонецВремениЗапрета.Получить() - НачалоДня(Константы.НачалоВремениЗапрета.Получить())))) Тогда
        
        Для каждого Строка Из Товары Цикл
            Если Строка.Номенклатура.ПодакцизныйТовар И Строка.Номенклатура.ГраппаАкциза <> Перечисления.ГруппаАкциза.Г   Тогда
                Предупреждение("В даний момент заборонено продавати алкогольні напої");        
                Возврат;
            КонецЕсли;
            
        КонецЦикла;
    КонецЕсли;
sava1
Цитата(Pashaboston @ 28.10.15, 11:38) необходимо зарегистрироваться для просмотра ссылки
Суть в том что нужно сравнивать время одного дня (22:00) и время следуещего дня (08:00).

Для чего ? Если текущее время меньше или больше означенного интервала - продажа запрещена. При чем здесь дата?
Pashaboston
Цитата(sava1 @ 28.10.15, 12:27) необходимо зарегистрироваться для просмотра ссылки
В константах лучше хранить время Нач и время Кон (число, время в секундах)

Для пользователя проще чтобы он ставил время, а как мне время например "01.01.0001 22:00:00" перевести в число секунд?
sava1
Почему пользователь должен менять константы? Или у Вас время запрета меняется каждый день?
Pashaboston
Цитата(sava1 @ 28.10.15, 13:19) необходимо зарегистрироваться для просмотра ссылки
Почему пользователь должен менять константы? Или у Вас время запрета меняется каждый день?

У пользователя могут быть кривые руки), нужно прощитать все варианты.
sava1
Цитата(Pashaboston @ 28.10.15, 12:21) необходимо зарегистрироваться для просмотра ссылки
У пользователя могут быть кривые руки), нужно прощитать все варианты.

Какие варианты? Пользователь не должен менять константы. Раз установили и забыли. Или через обработку (как дата запрета)
Pashaboston
Цитата(sava1 @ 28.10.15, 13:27) необходимо зарегистрироваться для просмотра ссылки
Какие варианты? Пользователь не должен менять константы. Раз установили и забыли. Или через обработку (как дата запрета)

Через обработку.
sava1
на форме поля : время начала, время окончания. при записи преобразовали в секунды. В чем проблема?
Pashaboston
Все получилось,константы перевёл в тип число, код стал более понятным:
ТекущееВремя = ТекущаяДата() - НачалоДня(ТекущаяДата());                  
    Если (ТекущееВремя >= Константы.НачалоВремениЗапрета.Получить()) И (ТекущееВремя <= Константы.КонецВремениЗапрета.Получить()) Тогда
        
        Для каждого Строка Из Товары Цикл
            Если Строка.Номенклатура.ПодакцизныйТовар И Строка.Номенклатура.ГраппаАкциза <> Перечисления.ГруппаАкциза.Г   Тогда
                Предупреждение("В даний момент заборонено продавати алкогольні напої");        
                Возврат;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

Теперь как мне при открытии обработки преобразить число секунд в Время?
TipsyKID
НачалоДня = НачалоДня(ТекущаяДата());
ДатаВремяНачала = НачалоДня +  Константы.НачалоВремениЗапрета.Получить();
ДатаВремяОкончания = НачалоДня + Константы.КонецВремениЗапрета.Получить();
Pashaboston
Всем огромное спасибо тема закрыта!!! icon_beer17.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.