Версия для печати темы (https://pro1c.org.ua/index.php?s=f0165b9f77d4a1adf4b25d0830010cd2&showtopic=25986)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Установка запрета продажи алкоголя.

Автор: Pashaboston 28.10.15, 10:38

Конфа УТ для Украины (2.3.24.3).
Вот что написал сам:

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

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

Тип констатант Дата, состав даты Время

Автор: sava1 28.10.15, 11:27

Проще чего?

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

Автор: Pashaboston 28.10.15, 11:38

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

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

Автор: sava1 28.10.15, 11:41

Цитата(Pashaboston @ 28.10.15, 11:38) *
Суть в том что нужно сравнивать время одного дня (22:00) и время следуещего дня (08:00).

Для чего ? Если текущее время меньше или больше означенного интервала - продажа запрещена. При чем здесь дата?

Автор: Pashaboston 28.10.15, 12:08

Цитата(sava1 @ 28.10.15, 12:27) *
В константах лучше хранить время Нач и время Кон (число, время в секундах)

Для пользователя проще чтобы он ставил время, а как мне время например "01.01.0001 22:00:00" перевести в число секунд?

Автор: sava1 28.10.15, 12:19

Почему пользователь должен менять константы? Или у Вас время запрета меняется каждый день?

Автор: Pashaboston 28.10.15, 12:21

Цитата(sava1 @ 28.10.15, 13:19) *
Почему пользователь должен менять константы? Или у Вас время запрета меняется каждый день?

У пользователя могут быть кривые руки), нужно прощитать все варианты.

Автор: sava1 28.10.15, 12:27

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

Какие варианты? Пользователь не должен менять константы. Раз установили и забыли. Или через обработку (как дата запрета)

Автор: Pashaboston 28.10.15, 12:28

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

Через обработку.

Автор: sava1 28.10.15, 12:32

на форме поля : время начала, время окончания. при записи преобразовали в секунды. В чем проблема?

Автор: Pashaboston 28.10.15, 12:52

Все получилось,константы перевёл в тип число, код стал более понятным:

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

Теперь как мне при открытии обработки преобразить число секунд в Время?

Автор: TipsyKID 28.10.15, 13:16

НачалоДня = НачалоДня(ТекущаяДата());
ДатаВремяНачала = НачалоДня +  Константы.НачалоВремениЗапрета.Получить();
ДатаВремяОкончания = НачалоДня + Константы.КонецВремениЗапрета.Получить();

Автор: Pashaboston 28.10.15, 13:26

Всем огромное спасибо тема закрыта!!! icon_beer17.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua