powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / хранение информации о часах работы
24 сообщений из 24, страница 1 из 1
хранение информации о часах работы
    #35140197
z-index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
задали задачку - как лучше хранить информацию о часах работы магазинов? в одной таблице - 14 колонок - время открытия и закрытия? или как-то по-другому? график работы может различаться каждый день, необходимо реализовывать любые выборки чтобы знать работает магазин в любой час любого дня недели
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35140217
ssew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
14 колонок - время открытия и закрытия
что мешает сделать без всяких хитростей, прямо так, как фактически представлены данные, м?
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35140477
z-index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
периодом в каждой колонке? а как тогда делать выборки?
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35140499
Фотография Taffy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z-indexпериодом в каждой колонке? а как тогда делать выборки?
Вам предложили отказаться от 14 колонок
достаточно 4х - магазин, день недели, время начала, время окончания.
Выборки - самое милое дело
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35140565
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z-indexзадали задачку - как лучше хранить информацию о часах работы магазинов?

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

в простейшем случае

WeekDayID - номер дня недели - он-же АйДи записи о режиме работы в этот день (>0 and <8)
OpenAt - время открытия (после 00:00 определенного дня)
ClloseAt - время закрытия (до 00:00 того-же самого дня)
можно указывать продолжительность - вместо времени закрытия

+ таблица эксепшенов - переносов есл требуются
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35141275
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
proposed amendmentWeekDayID - номер дня недели - он-же АйДи записи о режиме работы в этот день (>0 and <8)
Расскажете, как в таком случае описать типовой график "с 10 до 14 и с 15 до 21"?
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35141388
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z-indexкак лучше хранить информацию о часах работы магазинов?
Примерно так (набрано на ходу, так что не поручусь за отсутствие мелких недостатков):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
SQL> create table Schedule (
   2     schedule_id integer not null primary key, -- пк
   3     shop_id integer not null references Shop (shop_id), -- магазин
   4     is_on char( 1 ), -- флаг открыт/закрыт
   5     exact_date date, -- если указано, запись относится к конкретной дате
   6     day_of_week integer, -- если указано, запись относится к конкретному дню недели
   7     time_from number not null,
   8     time_to number not null);

Table created

SQL> -- магазин работает с 9 до 19 каждый день
SQL> insert into Schedule values (
   2      1 ,  1 , 'Y', null, null,  9 / 24 ,  19 / 24 );

 1  row inserted

SQL> -- кроме воскресенья
SQL> insert into Schedule values (
   2      2 ,  1 , 'N', null,  7 ,  0 ,  1 );

 1  row inserted

SQL> -- перерыв на обед с 13:30 до 14:15
SQL> insert into Schedule values (
   2      3 ,  1 , 'N', null, null,  13 . 5 / 24 ,  14 . 25 / 24 );

 1  row inserted

SQL> -- в Новый Год с 6 до 23:45
SQL> insert into Schedule values (
   2      4 ,  1 , 'Y', to_date ('31.12.2008', 'dd.mm.yyyy'), null,  6 / 24 ,  23 . 75 / 24 );

 1  row inserted

SQL> create or replace function Is_Shop_On (v_shop_id integer, v_date date) return char is
   2     cursor crAnswer (p_date date, p_time number, p_day_of_week integer) is
   3       select is_on
   4       from Schedule
   5       where shop_id = v_shop_id
   6       and p_date = coalesce (exact_date, p_date)
   7       and p_day_of_week = coalesce (day_of_week, p_day_of_week)
   8       and p_time between time_from and time_to
   9       order by exact_date asc nulls last, day_of_week asc nulls last, time_to - time_from;
  10   begin
  11     for cr in crAnswer (trunc (v_date), v_date - trunc (v_date), to_char (v_date, 'D')) loop
  12       return cr.is_on;
  13     end loop;
  14     return 'N';
  15   end;
  16   /

Function created

SQL> column test_date format a20
SQL> column is_on format a5

SQL> with
   2     dates as (select sysdate test_date from dual union all
   3               select trunc (sysdate)+ 222 / 1440  from dual union all
   4               select sysdate+ 20 / 1440  from dual union all
   5               select to_date ('31.12.2008 07:45', 'dd.mm.yyyy hh24:mi') from dual)
   6   select
   7     d.test_date,
   8     Is_Shop_On ( 1 , d.test_date) is_on
   9   from
  10     dates d;

TEST_DATE            IS_ON
-------------------- -----
 19 . 02 . 2008   13 : 28 : 01   Y
 19 . 02 . 2008   3 : 42 : 00    N
 19 . 02 . 2008   13 : 48 : 01   N
 31 . 12 . 2008   7 : 45 : 00    Y
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35141394
z-index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer, да ваше предложение ближе к истине, спасибо! возьму его за основу
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35141592
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расписание, позволяет по определённым правилам создавать график работы. Но график работы можно создать не подчиняясь какому либо расписанию. Т.е. часы работы магазинов можно задать просто в таблице

(магазин, начало_периода, режим_работы).

Где режим_работы определяет, в каком режиме работает (или не работает) магазин вплоть до его ликвидации, начало_периода - дата и время перехода на определённый режим работы.

Такую таблицу удобно заполнять с помощью расписания, а потом по мере надобности корректировать вручную. Для выборок из этой таблицы не нужны хранимые процедуры.
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35141663
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю, 8.00-19.00 означает, что в 8.00 магазин уже открыт, а в 19.00 - уже закрыт. Вопрос: как представить круглосуточно работающий магазин?

Второй вопрос - вещи типа "Второй вторник месяца - санитарный час с 8 до 9" - видимо, тоже нужно учитывать? Ну, и третий - "31 декабря наш магазин работает до 23.00" ?
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35141711
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabРасписание, позволяет по определённым правилам создавать график работы. Но график работы можно создать не подчиняясь какому либо расписанию.
Можно, но мне кажется, в этой задаче не имеет смысла. Я затрудняюсь представить себе задачу, для которой подобная материализация будет иметь смысл, отличный от сжирания кучи места на диске.

mcureenabДля выборок из этой таблицы не нужны хранимые процедуры.
Для выборок из нарисованной тоже не нужны. Я оформил функцию для того, чтобы топикстартеру было легче понять логику. Если предположить, что это расписание будет использоваться в прорве запросов и писать несколько строк в каждом лениво - я бы, наверное, оформил вьюху (тот самый график работы, о котором Вы говорите выше, но не материализованный).

Cane Cat Fisher
Я так понял, что Вы спрашиваете непосредственно автора, пропустив нижележащую беседу.
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35142829
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer mcureenabРасписание, позволяет по определённым правилам создавать график работы. Но график работы можно создать не подчиняясь какому либо расписанию.
Можно, но мне кажется, в этой задаче не имеет смысла. Я затрудняюсь представить себе задачу, для которой подобная материализация будет иметь смысл, отличный от сжирания кучи места на диске.

Это как дополнение, чтобы решение выглядело целостным, тем более, что следом уже появились вопросы, как внести в расписание исключения.

softwarer mcureenabДля выборок из этой таблицы не нужны хранимые процедуры.
Для выборок из нарисованной тоже не нужны. Я оформил функцию для того, чтобы топикстартеру было легче понять логику. Если предположить, что это расписание будет использоваться в прорве запросов и писать несколько строк в каждом лениво - я бы, наверное, оформил вьюху (тот самый график работы, о котором Вы говорите выше, но не материализованный).

ИМХО, с вьюхой как бы не очень складывается, или я просто пытаюсь решать слишком сложную задачу. Проблема в том, что функция возвращает режим работы магазина на момент времени, однако построить график работы магазина на месяц с помощью view ИМХО, не так просто, и даже чтобы реализовать функцию в виде представления придётся как то передавать в него дату (дело не хитрое, но всё же). В общем график работы магазина, это не совсем расписание работы.
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35143288
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предпочитаю иметь таблицу с плановым графиком работы на каждую дату, автоматически заполняемую на основе нескольких алгоритмов или вручную корректируемую.
Заполнять ее , к примеру, на год.
Разложив все по конечным датам, в итоге, проблем меньше получается чем возни с периодами (которые как правило приходится потом все равно раскладывать).
...Вводить таблицу исключений по-моему здесь лишнее (это ведь не график работы сотрудника, где нужно сопоставлять план с фактом).
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35143309
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabпостроить график работы магазина на месяц с помощью view ИМХО...

Мне кажется самое типовое решение - это иметь вспомогательную таблицу дат на 20 лет
и таблицу графика работы. В таблицу графика работы заносятся записи относящиеся только к дням когда магазин работает.
Итоговый график работы за период получается путем объединения вспомогательной таблицы дат и таблицы графика работы.

Здесь кусочек для графика работы сотрудника, но суть не меняется:
Код: plaintext
1.
2.
3.
4.
5.
  SELECT 
             t.dt                                           as StaffTimeSheetSourceDT
            ,ISNULL(t1.StaffTimeSheetSourceHoursCount,  0 )   as StaffTimeSheetSourceHoursCount
    FROM DateList t
    LEFT OUTER JOIN StaffTimeSheetSource t1 ON (t.dt = t1.StaffTimeSheetSourceDT AND t1.StaffTimeSheetSourceStaffID = @StaffTimeSheetSourceStaffID)
    WHERE t.dt between @dt1 and @dt2
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35143310
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Cane Cat Fisher
Я так понял, что Вы спрашиваете непосредственно автора, пропустив нижележащую беседу.

Второй и третий вопросы, действительно, относятся скорее к постановке задачи. А вот по круглосуточно работающему магазину хотелось бы поговорить с Вами. Я не могу понять, удастся ли его адекватно представить в рамках предложенной таблицы Schedule и функции Is_Shop_On?
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35143425
Фотография BULK INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherЯ не могу понять, удастся ли его адекватно представить в рамках предложенной таблицы

а почему бы нет?
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35144071
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BULK INSERT Cane Cat FisherЯ не могу понять, удастся ли его адекватно представить в рамках предложенной таблицы

а почему бы нет?

Ну так предложите, и обсудим. Суть моих сомнений в том, что, во-первых, в function Is_Shop_On, в строке

8 and p_time between time_from and time_to

between нужно заменить на оператор, исключающий равенство с time_to, потому что between охотно пропустит нас в магазин "8.00-19.00" ровно в 19.00, что неверно (см. мое первое письмо, где я предположил, что "8.00-19.00" означает "в 8.00 уже работаем, в 19.00 уже закрыты").

А во-вторых, круглосуточную работу не удастся представить напрашивающися диапазоном "0.00-23.59.59", потому что время - величина непрерывная, и всегда останется возможность вломиться в такой магазин в 23.59.59.99 и получить несправедливый отлуп. Я, конечно, понимаю, что на практике этим можно пренебречь, но хочется поговорить о математической правильности представления диапазонов.
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35144105
Фотография GUESТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisherно хочется поговорить о математической правильности представления диапазонов.

а следовало бы поговорить о правомерности применения алгоритма, предложенного для решиня одной задачи, к решению других, отличных задач.

для магазина работающего круглосуточно часы работы можно задать константой - "круглосуточно"
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35144253
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabЭто как дополнение, чтобы решение выглядело целостным, тем более, что следом уже появились вопросы, как внести в расписание исключения.
Появившиеся следом вопросы вызваны явным "не читал", поскольку в примере, который я привел, исключение прописано и проверено в тестовой выборке.

mcureenabИМХО, с вьюхой как бы не очень складывается, или я просто пытаюсь решать слишком сложную задачу. Проблема в том, что функция возвращает режим работы магазина на момент времени, однако построить график работы магазина на месяц с помощью view ИМХО, не так просто,
Может и "не так", но вполне реально. Взять выборку дат за месяц, размножить по ней периодические записи (которые на любой день или на день недели), для каждого дня собрать список времен - и для получившихся интервалов рассчитать признак открыт-закрыт, соблюдая приоритетность записей, покрывающих этот интервал. Конечно громоздко, но не более того; что касается времени работы, то при реальных запросах (ограниченных, скажем, одним магазином и одной неделей) это будут копеечные манипуляции в памяти, быстро. Задачи, для которой нужно все расписание, я себе особо не представляю.... разве что какая-нибудь страшенная аналитика, типа "как часто БД фиксирует транзакции в нерабочее время по всем магазинам города за год".
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35144395
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherА вот по круглосуточно работающему магазину хотелось бы поговорить с Вами. Я не могу понять, удастся ли его адекватно представить в рамках предложенной таблицы Schedule и функции Is_Shop_On?
В тестовых данных, которые идут вместе с примером, приведена круглосуточная запись. Я не представляю, о чем еще можно говорить.

Cane Cat FisherСуть моих сомнений в том, что, во-первых, в function Is_Shop_On, в строке

8 and p_time between time_from and time_to

between нужно заменить на оператор, исключающий равенство с time_to
Можно, но практического смысла это не имеет. Вы пытаетесь механически перенести подход, правильный в случае "дней" на "секунды"; в нашем случае практической разницы никакой. Я написал between потому, что это лучше иллюстрирует идею подхода.

Cane Cat FisherА во-вторых, круглосуточную работу не удастся представить напрашивающися диапазоном "0.00-23.59.59"
Ну если напрашивать всякую хрень, то представить не удастся, а если почитать вышенаписанное, то вопросов не останется.

Cane Cat Fisherпотому что время - величина непрерывная, и всегда останется возможность вломиться в такой магазин в 23.59.59.99
Время - величина непрерывная, а вот показания таймера компьютера - очень даже дискретная. Поэтому даже если выбрать такое идиотское представление как 23:59:59, тем не менее можно написать "точную верхнюю границу диапазона" так, что следующее возможное значение - уже 0:00 следующего дня. Философствовать на тему "что будет, если человек вломится ну почти точно в полночь" конечно можно, но начинать их следует с претензий к микросхеме Intel 8253 и ее потомкам, не умеющим измерять время с точностью свыше одной микросекунды.
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35145751
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
mcureenabИМХО, с вьюхой как бы не очень складывается, или я просто пытаюсь решать слишком сложную задачу. Проблема в том, что функция возвращает режим работы магазина на момент времени, однако построить график работы магазина на месяц с помощью view ИМХО, не так просто,
Может и "не так", но вполне реально. Взять выборку дат за месяц, размножить по ней периодические записи (которые на любой день или на день недели), для каждого дня собрать список времен - и для получившихся интервалов рассчитать признак открыт-закрыт, соблюдая приоритетность записей, покрывающих этот интервал. Конечно громоздко, но не более того; что касается времени работы, то при реальных запросах (ограниченных, скажем, одним магазином и одной неделей) это будут копеечные манипуляции в памяти, быстро. Задачи, для которой нужно все расписание, я себе особо не представляю.... разве что какая-нибудь страшенная аналитика, типа "как часто БД фиксирует транзакции в нерабочее время по всем магазинам города за год".

Для магазина скорее всего и прокатит, а в общем случае "выборка дат за месяц", ограничивает нас возможностью создавать расписания с периодом меньше суток.
Есть ещё задача, "До какого часа вы работаете или когда вы открываетесь в следующую субботу?" Тоже требует некоторого объёма кода для своего решения.
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #35145775
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabДля магазина скорее всего и прокатит
Я отвечаю именно на вопрос автора. Вполне допускаю, что есть задачи составления расписания для других реальных объектов, в которых такой подход был бы крайне неудачным.

mcureenab, а в общем случае "выборка дат за месяц", ограничивает нас возможностью создавать расписания с периодом меньше суток.
Не понял этой фразы, а та трактовка, которую я назвал бы наиболее вероятной, явно противоречит обсуждавшемуся ранее. Можно расшифровать?

mcureenabЕсть ещё задача, "До какого часа вы работаете или когда вы открываетесь в следующую субботу?" Тоже требует некоторого объёма кода для своего решения.
Никакого дополнительного кода (по сравнению с решением через предрассчитанный график) не требует.

Код: plaintext
1.
2.
select min (time_from), max (time_to)
from My_Schedule_View
where shop_id = :shop_id and schedule_date = :next_saturday
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
хранение информации о часах работы
    #39169341
Mickey.ur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer, извините, я не слишком разбираюсь в синтаксисе SQL, не могли бы Вы более подробно объяснить как оформит данное решение без хранимой процедуры?
...
Рейтинг: 0 / 0
хранение информации о часах работы
    #39169439
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mickey.ur, лучше сосредоточиться и разобраться в синтаксисе SQL. Без этого просто не получится говорить на одном языке. А оформить... взять запрос из хранимой процедуры и доработать для использования согласно требованиям конкретного места. Например, сейчас на коленке я тот же пример сделал без процедуры так (но скорее всего, это не лучший вариант):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
SQL> create table Schedule (
  2    schedule_id integer not null primary key, -- пк
  3    shop_id integer not null references Shop (shop_id), -- магазин
  4    is_on char(1), -- флаг открыт/закрыт
  5    exact_date date, -- если указано, запись относится к конкретной дате
  6    day_of_week integer, -- если указано, запись относится к конкретному дню недели
  7    time_from number not null,
  8    time_to number not null);
 
Table created

SQL> -- магазин работает с 9 до 19 каждый день
SQL> insert into Schedule values (
  2    1, 1, 'Y', null, null, 9/24, 19/24);
 
1 row inserted

SQL> -- кроме воскресенья
SQL> insert into Schedule values (
  2    2, 1, 'N', null, 7, 0, 1);
 
1 row inserted

SQL> -- перерыв на обед с 13:30 до 14:15
SQL> insert into Schedule values (
  2    3, 1, 'N', null, null, 13.5/24, 14.25/24);
 
1 row inserted

SQL> -- в Новый Год с 6 до 23:45
SQL> insert into Schedule values (
  2    4, 1, 'Y', to_date ('31.12.2008', 'dd.mm.yyyy'), null, 6/24, 23.75/24);
 
1 row inserted
 
SQL> column test_date format a20
SQL> column is_on format a5

SQL> with dates as
  2   (select sysdate test_date
  3      from dual
  4    union all
  5    select sysdate + 2
  6      from dual
  7    union all
  8    select trunc(sysdate) + 222 / 1440
  9      from dual
 10    union all
 11    select sysdate + 20 / 1440
 12      from dual
 13    union all
 14    select to_date('31.12.2008 07:45', 'dd.mm.yyyy hh24:mi') from dual),
 15  dd as
 16   (select test_date test_datetime,
 17           test_date - trunc(test_date) test_time,
 18           trunc(test_date) test_date,
 19           to_number(to_char(test_date, 'D')) day_of_week
 20      from dates)
 21  select test_datetime test_date, is_on
 22    from (select d.test_datetime,
 23                 coalesce(s.is_on, 'N') is_on,
 24                 row_number() over(partition by d.test_datetime order by s.exact_date asc nulls last, s.day_of_week asc nulls last, s.time_to - s.time_from) rn#
 25            from dd d, Schedule s
 26           where s.shop_id(+) = 1
 27             and d.test_date = coalesce(s.exact_date(+), d.test_date)
 28             and d.day_of_week = coalesce(s.day_of_week(+), d.day_of_week)
 29             and d.test_time between s.time_from(+) and s.time_to(+)
 30           order by d.test_datetime)
 31   where rn# = 1;
 
TEST_DATE            IS_ON
-------------------- -----
31.12.2008 7:45:00   Y
12.02.2016 3:42:00   N
12.02.2016 12:16:34  Y
12.02.2016 12:36:34  Y
14.02.2016 12:16:34  N
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / хранение информации о часах работы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]