Расчет банковских (рабочих) дней (Оригинальный способ)

Публикация № 338386

Разработка - Практика программирования

Банковские (рабочие) дни

Как я рассчитал количество банковских дней в конфигурации, в которой, как мне казалось, нет производственного календаря - в конфигурации "Бухгалтерия предприятия 2.0". Метод применим для совершенно любой конфигурации: в том числе для ЗУП, в которой имеется соответствующий календарь. (Позже из комментариев выяснилось, что календарь-таки есть.)

Началось все с того, что понадобилось рассчитать просроченную задолженность покупателей с учетом отсрочки платежа в 10-ть банковских дней. Задача ставится на конфигурации "Бухгалтерия предприятия 2.0". Задачу расчета просрочек я решил в короткие сроки благодаря Инфостарту. Оставалось только учесть банковские дни просрочек, а не календарные.

Я решил так, что банковские дни - это по сути то же самое, что и рабочие дни при пятидневке в производственном календаре. Производственный календарь я взял из конфигурации ЗУП. На рисунке 1 показан взятый из пользовательского режима график работы и сохраненный в табличный документ mxl (рис.1).

рис.1 График работы 2014 г

рис. 1. График работы в 2015 г, пятидневка, конфигурация ЗУП

Вторым шагом я сохранил данный календарь в формате таблиц 1С - *.mxl. Удалил лишние строки и колонки. Скопировал получившийся календарь в макет обработки (рис.2).

рис.2 Макет календаря в обработке

рис.2. Макет календаря в обработке

В результате макет календаря стал выглядеть так: в строках заданы месяцы, в колонках - дни (рис.3).

рис.3. Календарь: месяцы - это строки, дни - это колонки

рис.3. "Подготовленный формат" календаря: месяцы - это строки, дни - это колонки

В модуле обработки я создал функции: первая возвращает количество банковских (рабочих) дней в заданном периоде, вторая - проверяет, является ли заданный день банковским, третья - прибавляет заданное количество банковских дней к заданной дате. 

Функция ПолучитьКолБанкДней(ДатаНачала, ДатаОкончания) Экспорт

   
ОчереднойДень = НачалоДня(ДатаНачала);
   
КолБанкДней = 0;
    Пока
ОчереднойДень<=НачалоДня(ДатаОкончания) Цикл

       
Макет = ПолучитьМакет("Год" + Формат(Год(ОчереднойДень), "ЧГ=0"));
       
стр = Месяц(ОчереднойДень);
       
кол = День(ОчереднойДень);
       
Текст = Макет.Область(стр, кол, стр, кол).Текст;
       
КолБанкДней = КолБанкДней + ?(Текст = "8", 1, 0);

       
ОчереднойДень = ОчереднойДень + 24*3600;
    КонецЦикла;

   
Сообщить(КолБанкДней);

    Возврат
КолБанкДней;

КонецФункции

Функция
ПрибавитьКолБанкДней(НачальнаяДата, КолБанкДней) Экспорт

   
КонечнаяДата = НачальнаяДата;
    Пока
КолБанкДней>0 Цикл
       
КонечнаяДата = КонечнаяДата + 24*3600;
        Если
ЭтоБанковскийДень(КонечнаяДата) = Истина Тогда
           
КолБанкДней = КолБанкДней - 1;
        КонецЕсли;
    КонецЦикла;

    Возврат
КонечнаяДата;

КонецФункции

Функция
ЭтоБанковскийДень(ОчереднойДень) Экспорт

   
Макет = ПолучитьМакет("Год" + Формат(Год(ОчереднойДень), "ЧГ=0"));
   
стр = Месяц(ОчереднойДень);
   
кол = День(ОчереднойДень);
   
Текст = Макет.Область(стр, кол, стр, кол).Текст;
    Возврат ?(
Текст = "8", Истина, Ложь);

КонецФункции

К статье прикреплена обработка "Производственный календарь.epf", содержащая календари банковских (рабочих) дней в макетах за 2010-2015 год и вышеуказанные функции для тестирования.

Всем всего доброго и успехов в работе!

Центр автоматизации, г. Казань


См. также:

Как эффективно использовать Инфостарт NEW!

Список реализаций + структура подчиненности + реестр документов SALE'1sm

Список заказов поставщикам + структура подчиненности SALE'1sm

Список заказов покупателей + структура подчиненности SALE'1sm

Договоры для 1с-ника ТОП-скачиваний

Сетка расписания (Планировщик) нестанДАрт

Два механизма, которые ускорили работу бухгалтеров в 1С нестанДАрт

Мини-CRM для УТ 10.3

Расчет банковских (рабочих) дней нестанДАрт

Шаблоны кода в режиме 1С:Предприятие SALE'1sm

Доработка конфигурации Конвертация Данных

Планирование платежей. Прогнозирование прибылей и убытков

Ввод показателей план-факта БП 3.0 Know-how

Инвентаризация личного опыта Для новичков 1С

Большие запросы: взгляд на проблему нестанДАрт

Технология создания коммерческих разработок Know-how

Андроид-решение для создания заказов в 1С Know-how + нестанДАрт

Отчет Остатки и цены

Печать ценников с одной и двумя ценами 55х40, 100х60, 140х200

Загрузка данных о розничных продажах из магазинов Intimissimi (Интимиссими) и Calzedonia (Кальцедония)

Доработки обмена "УТ 10.3 - интернет-магазина Shop-Script"

Скачать файлы

Наименование Файл Версия Размер
Обработка ПроизводственныйКалендарь

.epf 17,70Kb
06.03.18
3
.epf 17,70Kb 3 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. WhiteOwl 343 25.03.15 10:33 Сейчас в теме
2. vasyak319 139 25.03.15 10:41 Сейчас в теме
Жесткач. Хорошо, что современные машины делают по несколько миллиардов операций в секунду и их не убить даже такими алгоритмами.
3. Alien_job 176 25.03.15 11:02 Сейчас в теме
(2) vasyak319, да ладно - регламентные отчеты тоже свои настройки в макетах хранят. Хотя в циклах они их, конечно, не получают.
4. vasyak319 139 25.03.15 11:34 Сейчас в теме
(3) Alien_job,
Хотя в циклах они их, конечно, не получают

во-во. Кроме того, из тех настроек слова не выкинешь, там всё нужно, а тут целая простыня ради нескольких чисел, хотя всё, что необходимо для этого алгоритма, это список отклонений, т.е. субботы-воскресенья, которые считаются банковскими днями и остальные дни недели, которые такими не считаются, а таких отклонений в год десяток.
Плюс отдельная премия Дарвина за вычисление перебором дней (особенно клёво, когда начальная дата пустая - тогда это over 700 тыщ итераций), что, впрочем, вытекает из остальных косяков алгоритма.
корум; +1 Ответить
7. Rustig 1560 25.03.15 12:54 Сейчас в теме
(4) задача решается на файловой базе, период расчета неустойки три года: с начала 2013г по текущий день 2015 г включительно - летает "на ура!" - проблем с производительностью нет. по поводу мелких недочетов - тут каждый сам решает для себя - у меня дата начала не может быть пустой - изначально стоит проверка в другой процедуре. такие дела. за замечания спасибо: может быть другим пригодится.
8. Rustig 1560 25.03.15 13:21 Сейчас в теме
(4) ваше замечание заставило меня задуматься: почему же при таком алгоритме проблем с производительностью не возникает? Оказывается, это следует из специфики самой постановки задачи - расчета просрочек: условно говоря, просрочка считается от ДатыОтгрузки до ДатыСледующегоСобытия (или даты оплаты или даты следующей отгрузки). Таким образом для каждой реализации (отгрузки) возникшая пара "ДатаНачала"-"ДатаОкончания" является "коротким" периодом, то есть к примеру от 14.03.2014 до 23.03.2014 прошло 9 календарных дней - в этом периоде определяется 6 банковских дней. То есть по сути цикл в алгоритме состоит из 9 итераций - проверяем каждый день является ли он банковским. Еще раз спасибо за замечание!
10. vasyak319 139 25.03.15 14:26 Сейчас в теме
(8) просто у вас объём маленький, а современные машины сцуко быстрые, так что если алгоритм, который при нормальной реализации отработал бы за микросекунду, работает в тысячу раз медленнее, вы этого один чёрт не заметите. Но это всё равно плохо, потому что миллисекунда тут, миллисекунда там, а в итоге документы по полминуты проводятся.
И это не просто теория, мне постоянно приходится давать ускоряющего пинка кривым алгоритмам, которые на полупустых базах летали.
Кроме того, это сейчас ваша процедура используется исключительно для отсрочки 10 дней. Другая задача появится, где тоже нужны будут банковские дни, и вы её либо заново переписывать будете, либо она будет у вас тормозить.
9. Rustig 1560 25.03.15 13:50 Сейчас в теме
(4) для более сложных задач (многоитерационных алгоритмов) можно при открытии формы обработки формировать временную таблицу значений, вытаскивая сведения из макета, а потом использовать эту таблицу в запросах.
11. vasyak319 139 25.03.15 14:43 Сейчас в теме
(9) т.е. передавать весь массив данных серверу - пусть развлекается? Снова неоправданная жестокость. На самом деле, если у вас всё ограничено известным периодом (а у вас всё как минимум ограничено периодом, для которого у вас есть календари), то вычисление каждой отсрочки можно свести к разности двух элементов одного массива.
12. Rustig 1560 26.03.15 07:13 Сейчас в теме
(11) мне кажется не стоит сгущать тучи по поводу производительности, предлагаю решать проблемы по мере их поступления, а не прогнозировать плохую производительность в будущих задачах и предлагаю не смешивать с этой задачей проблему долгого проведения документов - совсем уж разные темы.
Тема этой статьи - заключается в том, в БП 2.0 надо было посчитать банковские дни. Я описал одну из возможных реализаций. На мой скромный взгляд, получилось оригинально. :)
13. vasyak319 139 26.03.15 11:31 Сейчас в теме
(12) кстати, вот мне это сразу показалось странным, но я вам поверил, что в БП 2.0 нет производственного календаря. Сейчас решил таки посмотреть - он там есть. Тогда зачем вообще это всё?
tano23; Alien_job; +2 Ответить
14. Rustig 1560 26.03.15 14:23 Сейчас в теме
(13) что за объект метаданных?
15. Rustig 1560 26.03.15 14:26 Сейчас в теме
(13), (14) есть такой - регистр сведений Регламентированный производственный календарь. Ну, отлично! что ж сказать? не знал, что такой есть.
5. AganinEvgeniy 2 25.03.15 11:56 Сейчас в теме
Идея и правда не плоха ... но согласен с Василием, легче выбирать 20 отклонений в год и плюсовать их к номеру дня недели или что-то подобное намудрить, чем перебором обходить 365 дней.
6. fzt 25.03.15 12:03 Сейчас в теме
А почему бы и нет. Идея довольно простая и конфа не снята с поддержки.
Как улучшить:
1) Формируем всю эту радость в екселе.
2) К xls файлам можно делать полноценные SQL запросы, через драйвер ODBC (в поставке любой винды).
Экономия кучи машинного времени.
16. b-dm 169 27.03.15 11:28 Сейчас в теме
А все равно публикация классная. Мне нпонравилось и решение и описание. Плюс.
17. DDos76 200 31.03.15 19:37 Сейчас в теме
Реально способ оригинальный. За способ поставил +!
Следующий этап - календарь будет храниться в экселе, сначала по OLE (Пардон COM) попробуем оттуда забирать.
К xls файлам можно делать полноценные SQL запросы, через драйвер ODBC (в поставке любой винды). - это не так интересно.
Если будет медленно - там и до PegExp рукой подать. Разбор файла .XLS средствами 1с так сказать.
С 1 Апреля!
dgolovanov; +1 Ответить
Оставьте свое сообщение

См. также

СКД: красивые надписи в заголовках колонок

Практика программирования Работа с интерфейсом v8 v8::СКД УПП1 Россия Абонемент ($m)

Необходимо немного исправить вывод надписей в заголовках колонок, сделать более читаемый вариант. Как это сделать?

2 стартмани

27.02.2020    9768    7    wowik    36    

Примерная схема проведения документов (Механизм проведения) в ERP 2.5.x.x

Практика программирования v8 ERP2 Абонемент ($m)

Некий шаблон "общей" картины связи процедур выполняемых типовым механизмом проведения в ERP 2.5.

1 стартмани

27.01.2020    5951    11    s14adow    7    

Расчет сложных итогов СКД

Практика программирования v8 v8::СКД 1cv8.cf Абонемент ($m)

Малоизвестный прием для расчета итогов в отчетах на СКД.

1 стартмани

05.08.2019    18740    15    masterkio    16    

Универсальный реестр документов с возможностью вывода данных из табличных частей Промо

Бухгалтерские Управленческие v8 1cv8.cf Абонемент ($m)

-Возможность выводить числовые данные из табличных частей документов, такие как "Количество", "Сумма", "СуммаНДС" и др. При этом такие реквизиты, как "Цена", "Коэффициент", "ПроцентСкидок" не выводятся, так как это не имеет смысла. -Возможность выбирать выводимые документы. -Возможность выбирать выводимые реквизиты (при этом, если выбрано несколько документов, то можно выводить только реквизиты, общие для всех выбранных документов). -Возможность накладывать отборы на выводимые реквизиты. -Возможность выбора реквизитов, по которым проводить упорядочивание.

1 стартмани

31.10.2013    46886    321    Kubik1984    47    

Как эффективно использовать Инфостарт

Личная эффективность Бесплатно (free)

Рекомендации, фишки, публикации Инфостарт

28.01.2019    11205    Rustig    66    

Отладка сложных отчетов на СКД

Практика программирования v8 v8::СКД 1cv8.cf Россия Абонемент ($m)

Расширение для отладки сложных отчетов на СКД (в т.ч. для собираемых программно "на лету") и быстрого перехода к отладке таких отчетов в консоли запросов и отчетов на СКД.

1 стартмани

28.12.2018    27698    93    maxx    58    

Счет на оплату с НДС 20%

Печатные формы документов Оптовая торговля Оптовая торговля v8 v8::ОУ БП2.0 УТ10 Абонемент ($m)

Счет на оплату с НДС 20% и уведомлением, что НДС изменится с 01.01.2019г.

1 стартмани

12.11.2018    11241    27    Rustig    13    

Проверка и корректировка данных по выплате зарплаты Промо

Закрытие периода Бухгалтерские Анализ учета Зарплата Зарплата v8 v8::СПР ЗКГУ3.0 ЗУП3.x Россия БУ Госбюджет Абонемент ($m)

Обработка показывает остатки и движения взаиморасчетов с сотрудниками. Также обработка может откорректировать сумму остатков. Конфигурации: "Зарплата и управление персоналом" , релиз не ниже 3.1.2.105 и "Зарплата и кадры государственного учреждения" , релиз не ниже 3.1.2.105.

2 стартмани

08.06.2018    26716    167    APTEM_SLV    14    

Ввод показателей план-факта через табличный документ

Обработка документов Финансовый учет и бюджетирование (FRP) Финансовый учет и бюджетирование (FRP) v8 v8::БУ v8::УФ БП3.0 УУ Абонемент ($m)

Представлена разработка, поясняющая, как вводить показатели план-факта через табличный документ, как их хранить.

2 стартмани

10.10.2018    8959    19    Rustig    10    

Группировка товаров при печати чеков ККМ

Печатные формы документов ККМ Кассовые операции Розничная торговля Кассовые операции Розничная торговля v8 КА1 УТ10 БУ Абонемент ($m)

Товары группируются по своей иерархии товаров. Длина чека ККМ сокращается в разы. Общая сумма чека ККМ и общее количество товаров не изменяется.

2 стартмани

07.09.2018    8216    0    Rustig    13    

Согласование цен по заказу

Бухгалтерский учет Ценообразование, анализ цен Практика программирования Ценообразование, анализ цен v8 v8::ОУ УТ10 УУ Бесплатно (free)

Согласование цен по заказу покупателя - менеджер указывает цену с признаком "На согласование". Руководитель визирует "Согласовано". Полный контроль над ценами в два клика. Отдел продаж - 20 менеджеров, 1 руководитель.

03.07.2018    9764    Rustig    21    

Распределение расходов пропорционально продажам Промо

Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Практика программирования Финансовый учет и бюджетирование (FRP) Учет доходов и расходов v8 v8::ОУ УТ10 УУ Бесплатно (free)

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    18209    Rustig    9    

Загрузка данных о розничных продажах из магазинов Intimissimi (Интимиссими) и Calzedonia (Кальцедония)

Розничная торговля Обработка документов Обработка справочников Загрузка и выгрузка в Excel Розничная торговля v8 v8::ОУ УТ10 Розничная и сетевая торговля (FMCG) УУ Абонемент ($m)

Представляю вашему вниманию внешнюю обработку для загрузки розничных продаж магазинов Intimissimi (Интимиссими) и Calzedonia (Кальцедония) в программу "1С: Управление торговлей" ред.10.3. Из учетной программы Intimissimi (Интимиссими) и Calzedonia (Кальцедония) под названием "Shoppy" выгружаются отчеты "Статистика продаж" за день - в формате эксель - далее эти отчеты загружаются в программу "1С:УТ 10.3" с помощью внешней обработки.

1 стартмани

26.02.2018    12157    0    Rustig    0    

Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула

Печатные формы документов Практика программирования Универсальные функции v8 1cv8.cf Абонемент ($m)

Расширяем функционал вывода нижнего / верхнего колонтитула. Стандартно 1С имеет достаточно ограничений по выводу и наполнению колонтитулов содержимым, взять хотя бы такие, как вывод только текста и отсутствие ограничения на номер конечной страницы. А при разработке кода сталкиваешься с тем, что свой блок с нижним колонтитулом нужно прижимать к низу страницы. Казалось бы быстро решаемый вопрос, но и в нем есть нюансы. Сейчас я расскажу о том, как решалась эта задача. UPD 15.02.2018. Добавлен вывод верхнего колонтитула; Вывод колонтитулов на первой и последней странице управляется параметрами; Научился считать страницы: Добавлено заполнение переменных аналогичных стандартным из колонтитулов; Задаются форматы даты и времени. Ограничения прежние: 1. Повторно сформировать табличный документ после смены параметров страницы интерактивно.; 2. Передавать данные для более плотной печати как можно более мелко нарезанными кусками.

1 стартмани

29.12.2017    40516    28    agent00mouse    0    

Изменение названия номенклатуры - замена подстроки в названии

Обработка справочников v8 v8::УФ КА1 БП2.0 УТ10 Абонемент ($m)

Разработаны для БП 3.0 и 2.0, подходит для УТ 11 и 10.3. Очередная задача по УТ 10.3 и БП 2.0 - разные пользователи создают номенклатуру - названия номенклатуры задваиваются: "труба утепленная L=1000" и "утепленная труба L=1000". Обработка находит вхождения определенной фразы в названиях номенклатуры - и заменяет эту фразу другой. Для читателей-разработчиков в конце статьи представлен бонус - как распознать помеченные на удаление элементы.

1 стартмани

13.12.2017    12549    16    Rustig    2    

Сетка расписания (Планировщик)

Рабочее место v8 УУ Абонемент ($m)

Представлена разработка "Сетка расписания (свой адаптивный планировщик)" - удобный просмотр сетки на неделю (месяц), удобное редактирование событий на день. Используется для организации сетки расписания врачей (приемов пациентов), служб доставки (машин и точек доставки), салонов красоты (мастер - клиент). Имеет широкое применение.

3 стартмани

21.08.2017    16939    8    Rustig    4    

Большие запросы: взгляд на проблему Промо

Практика программирования v8::Запросы 1cv8.cf Бесплатно (free)

Большой (кусочный) запрос подобен карточному домику: строится долго, а захочется поменять карту из середины строения – домик разрушится. На примере учета задолженностей контрагентов в разрезе полугодий (не типовой учет БП, и не ЗУПовский) я покажу, как я изменил механизм учета и превратил «большой» запрос в «маленький», а дальнейшее сопровождение программы в сказку 1С-ника.

26.07.2013    29468    Rustig    43    

Универсальная ведомость (отчет) по РАУЗ (управленческий и регламентированный учет)

Бухгалтерские Налоговые Управленческие v8 КА1 УПП1 БУ НУ УУ Абонемент ($m)

Универсальные отчеты, раскрывающие регистры РАУЗ (УчетЗатрат, УчетЗатратРегл) по всем доступным реквизитам, для конфигураций КА 1.1, УПП 1.3. По функциональности эквивалентны типовым отчетам "Ведомость по учету МПЗ", "Ведомость по учету затрат", но отличаются простыми и менее капризными настройками (по мнению автора), более удобной расшифровкой, решенной проблемой с расшифровкой по периодам.

2 стартмани

05.06.2017    33589    79    stvorl    0    

Отчет-календарь СКД

Практика программирования Управленческие Бухгалтерские Банковские операции Банковские операции v8 v8::БУ 1cv8.cf БУ Абонемент ($m)

Хотите повысить наглядность отчетов и выходных форм? Достаточно совместить их с календарем ) Это довольно легко реализовать при помощи СКД.

1 стартмани

01.06.2017    25652    56    kiberiq    13    

Внешняя Торг-12 со штрихкодом для БП 2.0

Печатные формы документов Оптовая торговля Оптовая торговля v8 v8::БУ БП2.0 Россия БУ Абонемент ($m)

Представлена внешняя печатная форма Торг-12 для БП 2.0 с выводом штрихкода. В качестве штрихкода задается номер заказа. В базе штрихкоды хранятся как дополнительные реквизиты. Предложенный способ (идея) использования штрихкодов распространяется на любую конфигурацию.

1 стартмани

05.11.2016    13486    6    Rustig    0    

Подборка иконок для подсистем 1С:8.2, 8.3 (740 шт.) PNG 48х48 Промо

Практика программирования Работа с интерфейсом v8 1cv8.cf Россия Абонемент ($m)

Подборка иконок для подсистем 1С: Предприятие 8.2, 8.3 (УП) в формате PNG 48*48 с сохранением прозрачности.

3 стартмани

19.12.2011    103847    192    Lesha1C    74    

Внешняя УПД для реализации (УТ 10.3.32 и 10.3.43.1) - две доработанные обработки: до и после 1 июля 2017 г + типовая внешняя УПД

Печатные формы документов Оптовая торговля Оптовая торговля v8 v8::ОУ УТ10 Россия БУ Абонемент ($m)

В печатной форме УПД вместо "Договора" (поле Основание) теперь подставляется "Заказ покупателя", даже если взаиморасчеты ведутся "по договору в целом". Представлены две внешние обработки УПД - разработанные соответственно до и после 1 июля 2017 г. Также представлена третья обработка - полностью типовая внешняя УПД, которая подходит как для УПД до 1 июля, так и после 1 июля 2017г. Внимание! Не подходит под изменения от 1 октября 2017г.

1 стартмани

15.12.2015    18883    117    Rustig    8    

Два механизма, которые ускорили работу бухгалтеров в 1С

Практика программирования v8 Бесплатно (free)

Речь пойдет о собственных идеях и их реализации. Доработки были проведены на конфигурации "1С: Бухгалтерия предприятия 8" в далеком 2010 году. Механизмы не привязаны к одной какой-либо типовой конфигурации - их можно реализовать в любой конфигурации. И даже не привязаны к платформе 1С - их можно реализовать на любой платформе. Возможно, эти идеи будут востребованы в самописных и отраслевых решениях 1С. Доработки достаточно просты, при этом ни в одной типовой конфигурации не реализованы.

13.06.2015    26019    Rustig    19    

Использование терминала сбора данных

Терминал сбора данных УУ Бесплатно (free)

Хотелось бы затронуть тему разработки программ 1С для терминалов сбора данных: нюансы разработки, нюансы и цели использования, цена вопроса. Речь пойдет о терминалах, с помощью которых можно подключаться к терминальному серверу, чтобы через терминальную сессию работать с программой 1С.

19.07.2014    71148    Rustig    120    

Справка о среднем заработке ЗУП 3.1 и 2.5 Промо

Справки Бухгалтерские Зарплата Зарплата v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Абонемент ($m)

Понравившаяся многим справка о среднем заработке теперь и для редакции 3!

1 стартмани

13.01.2012    75051    249    diso    49    

Простые решения

Практика программирования Розничная торговля Учет ТМЦ Розничная торговля Учет ТМЦ v8 v8::ОУ УТ10 УУ Абонемент ($m)

В статье хочется показать, что иногда для решения задач можно использовать «простые решения» - настолько простые, что самому не верится.

1 стартмани

04.07.2014    19565    1    Rustig    8