Ускорение расчета себестоимости УПП 1.3 в несколько раз

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

Учет и отчетность - Закрытие периода - Закрытие периода

УПП 1.3 закрытие месяца расчет себестоимости ускорение оптимизация

Как определить причину медленного расчёта себестоимости в УПП 1.3, один из вариантов поиска проблем производительности с помощью инструментов 1С и ускорения расчёта средствами встроенного языка

Всем доброго времени суток! 

На днях столкнулся с задачей: долго рассчитывается себестоимость по организации за декабрь 2020 года (~40 минут), при этом в ноябре и всех прошлых месяцах она рассчитывалась ~10 минут.

Что имеем: платформа 8.3.16.1359, УПП 1.3 (1.3.152.3), PostgreSQL (тестировалось и на MS SQL), производственная организация, партионный учет, многопередельное производство. 

Если вы столкнулись с такой же или похожей проблемой, то эта статья может натолкнуть на решение и сэкономить вам время.

Первым делом, следует выполнить пересчет итогов регистров - правда в контексте этой задачи, у меня ничего не изменилось.

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

возвращаемся в предприятие - запускаем проведение расчета себестоимости - ждем окончания.

После того, как расчет себестоимости завершен, возвращаемся в конфигуратор и останавливаем замер производительности:

на экране появится результат замера, подробно расшифровывать не будем, кому интересно можно почитать подробнее об этом инструменте https://its.1c.ru/db/metod8dev/content/1553/hdoc .

Итак, мой результат:

В глаза сразу бросается первая строка, мы видим, что данная строка кода выполняется 32 раза, 2 268,979787 секунд (~38 минут) и занимает 85,61% всего времени выполнения проведения расчета себестоимости.

Познакомимся ближе с этой строкой, дважды щелкаем на строку в замере производительности, попадем в модуль - в место выполнения этого кода, эта строка находится в общем модуле ПроцедурыРасчетаСебестоимостиВыпуска.

Ставим точку останова на данной строке кода:

Снова возвращаемся в предприятие и еще раз проводим расчет себестоимости, пока выполнение кода не остановится на нашей точке:

Выделяем ЗапросПоЗатратамНаВыпуск нажимаем Shift + F9:

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

Кстати параметров очень много, да еще и массивы, очень удобно использовать подсистему инструменты разработчика, чем я и воспользуюсь, подробнее здесь //infostart.ru/public/15126/ .

У меня уже встроена эта подсистема и чтобы получить запрос из отладки со всеми параметрами в пользовательском режиме, мне достаточно нажать SHIFT + F9 и написать Отладить() , указав в качестве параметра свой запрос, далее нажать вычислить:

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

Запрос возвращает 285 строк, за 195 секунд. Я решил проанализировать прошлые месяцы, меняя параметры периода в запросе и увидел, что действительно в прошлых месяцах количество строк было примерно в 3.5 раза меньше, (вспоминаем постановку задачи, выполнялось за 10 минут, стало за 40) действительно, пропорционально увеличению записей в регистре, увеличилось и время расчета себестоимости, к слову, записи увеличились обоснованно, из-за включения серий. 

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

Это не устраивает. 

Возвращаемся к нашему запросу и анализируем его:

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

Вспоминаем методику:

Фирма 1С не рекомендует использовать вложенные запросы без особой потребности и предлагает заменять их временными таблицами или соединениями таблиц, замечая при этом, что результат такого изменения может быть другим. Такая рекомендация объясняется тем, что при использовании вложенных запросов оптимизатор СУБД не всегда может правильно определить размер выборки вложенного запроса и построить оптимальный план обращений к физическим таблицам базы данных, что сильно (иногда в десятки раз) может замедлить выполнение запроса.

А здесь, еще подробнее https://its.1c.ru/db/v8std/content/655/hdoc@51ff9ba0 .

Прислушаемся к совету, модернизируем запрос, заменив все вложенные запросы на временные таблицы, проиндексировав их по полях соединений(ниже будет итоговый текст запроса):

выполняем запрос в консоли:

 

видим, что скорость выполнения увеличилась со 195 секунд до 0.5 секунд!!! то, что надо, теперь внедрим его в конфигурацию и попробуем выполнить расчет себестоимости с замером производительности, для этого в общем модуле ПроцедурыРасчетаСебестоимостиВыпуска, находим функцию СформироватьТекстЗапросаПоЗатратамНаВыпуск(), и заменяем ее, на наш запрос с временными индексированными таблицами, типовой запрос опциональный - с использованием в тексте комментариев, которые потом в зависимости от параметров учета, заменяются на строки кода, наш запрос ничем не хуже и также будет опционален.

 
Итоговый листинг функции

проводим расчет себестоимости, смотрим результаты замера:

видим, что наш запрос теперь на 4 строке по времени выполнения всех процедур расчета себестоимости,

так же выполняется 32 раза, но теперь за 26 секунд вместо 2 268,979787! и занимает всего 6.43% от общего расчета себестоимости, вместо 85,61%

Время выполнения этой строки увеличилось в 87 раз!

В заключении, еще хочется обратить ваше внимание на эти статьи по ускорению расчета себестоимости, возможно в вашем случае они будут более подходящими:

//infostart.ru/1c/articles/255469/

//infostart.ru/public/176644/

надеюсь, статья оказалась полезной, всем спасибо!

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. VAAngelov 167 02.02.21 07:14 Сейчас в теме
Пригодится. Спасибо большое.
RPGrigorev; +1 Ответить
2. kare 21 02.02.21 09:27 Сейчас в теме
Спасибо, приятно смотреть на такой подход.
Алексей_mir2mb; VAAngelov; RPGrigorev; +3 Ответить
3. ILM 238 02.02.21 09:50 Сейчас в теме
У меня уже два года как переписаны все запросы при расчете себестоимости на ВТ, при включенном партионном учетё. Раньше на наших объемах считалось 8-12 часов, теперь меньше чем 45 минут. Индексировать нужно большие таблицы, иначе затраты на создание индекса могут быть больше чем на выборку данных. Но это в MS SQL.
RPGrigorev; +1 Ответить
4. RPGrigorev 588 02.02.21 09:55 Сейчас в теме
(3)Полностью согласен, индексы - не панацея, увеличение производительности запроса за счет индексов, иногда даже исключение, чем правило, необходимо изначально всё прикинуть, объемы выборок, СУБД, выполнить тестовые замеры
6. ILM 238 03.02.21 07:10 Сейчас в теме
(4) Да, необходима отладка каждого запроса и анализ возвращаемых данных. Ряд строк, которые потом пропускает алгоритм расчета себестоимости может отсекать в запросе, а некоторые запросы нужно усложнять, чтобы не делать снова поиск в постобработке результата.
RPGrigorev; +1 Ответить
5. RPGrigorev 588 02.02.21 09:56 Сейчас в теме
(3)однако, прирост скорости на SQL у Вас хороший, спасибо за комментарий
7. vano-ekt 848 04.02.21 11:54 Сейчас в теме
УПП еще сырая....
году так на десятом использования сервиса "Продление поддержки конфигурации УПП" может пофиксят
Terve!R; Leon75; Алексей_mir2mb; RPGrigorev; +4 Ответить
8. RPGrigorev 588 04.02.21 12:14 Сейчас в теме
(7)Все силы на ERP пущены)
Terve!R; Алексей_mir2mb; VAAngelov; +3 Ответить
9. PerlAmutor 124 06.02.21 08:30 Сейчас в теме
(8) К такой "махине" как ERP не были готовы даже разработчики платформы 1С. Платформа и по сей день к ней не готова. Объемы метаданных настолько огромны, что многие вещи происходят со скрипом. За 5 лет доработок и использования часто натыкался на стенку в вопросе "оптимизации", т.к. узкое место было не в запросах, а в ограничениях платформы. То не все ядра используются, то количество циклов кода зашкаливает за 100000 итераций, то количество рекурсивных вызовов, то объем контекстных данных форм, то количество ролей приходящееся на одного пользователя. Сам то пользователь может и 50% возможностей конфигурации не использует, но приходится "тянуть" и "перебирать" все зависимое и сопутствующее, что может быть пригодиться когда нибудь, когда включат функциональную опцию.
Terve!R; ILM; Алексей_mir2mb; RPGrigorev; +4 Ответить
10. mpeg1989 126 06.02.21 18:00 Сейчас в теме
Фирма 1С не рекомендует использовать СОЕДИНЕНИЕ с вложенными запросами, ибо оптимизатор не может определить статистику и скатывается во вложенные циклы. Если в обоих таблицах много данных, то это выполняется долго. Использование временных таблиц там, где нет никакого соединения, приводит к излишней нагрузке на tempdb.
Terve!R; RPGrigorev; +2 Ответить
11. RPGrigorev 588 06.02.21 18:03 Сейчас в теме
(10)Согласен, если соединений нет, то это уже другая дискуссия
12. Lukich66 82 07.02.21 20:14 Сейчас в теме
Вот уже 10лет как перешли на РАУЗ и не испытываем "партионных" трудностей, а так да, до 10г всю ночь вычислялось...
RPGrigorev; +1 Ответить
13. Cyberhawk 126 11.02.21 09:20 Сейчас в теме
Не хватает замера без индексирования временных таблиц
14. RPGrigorev 588 11.02.21 09:38 Сейчас в теме
(13)добрый день, в начале статьи, первый замер (скрин) - без индексирования
15. Cyberhawk 126 11.02.21 09:57 Сейчас в теме
(14) Не нашел в статье указанного "скрина"
16. RPGrigorev 588 11.02.21 10:10 Сейчас в теме
(15)далее идут скрины и объяснение, что в этом месте (наиболее затратном по времени) в запросе используются соединения с вложенными запросами, т.е. без индексирования
Прикрепленные файлы:
17. Cyberhawk 126 11.02.21 10:12 Сейчас в теме
(16)
соединение с вложенными запросами, т.е. без индексирования
Соединение с вложенными запросами = без временных таблиц, а не "без индексирования". А мой вопрос как раз про "без индексирования".
18. RPGrigorev 588 11.02.21 10:14 Сейчас в теме
(17)понял о чем вы, добавлю в статью
Cyberhawk; +1 Ответить
Оставьте свое сообщение

См. также

Подсистема "Инструменты разработчика" v5.80 Промо

Инструментарий разработчика v8 1cv8.cf Бесплатно (free)

Интегрированный набор инструментов разработчика: - консоль кода - консоль запросов - консоль построителя отчетов - консоль компоновки данных - консоль заданий - конструктор запроса - справочник алгоритмов - исследователь объектов - интерфейсная панель - настройка журнала регистрации - анализ журнала регистрации - настройка техножурнала - анализ техножурнала - подбор и обработка объектов - редактор объекта БД - редактор констант - редактор параметров сеанса - редактор изменений по плану обмена - редактор пользователей - редактор предопределенных - редактор хранилищ настроек - динамический список - поиск дублей и замена ссылок - контекстная подсказка - синтакс-помощник - поиск битых ссылок - поиск ссылок на объект - структура хранения БД - удаление объектов с контролем ссылок - и прочее

23.09.2007    565874    34532    tormozit    2783    

Схема закрытия месяца в УПП 1.3

Закрытие периода v8 УПП1 Россия БУ Налог на прибыль НДС Бесплатно (free)

Закрытие месяца в типовой конфигурации Управление производственным предприятием 1.3.

18.02.2021    1089    ksnik    4    

Реальный кейс по внедрению CodeReview

Рефакторинг и качество кода v8 1cv8.cf Бесплатно (free)

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

20.01.2021    1192    Alexsandr_Retunskiy    3    

Ускоряем расчет себестоимости УПП Промо

Производительность и оптимизация (HighLoad) Закрытие периода Закрытие периода v8 УПП1 Россия БУ УУ Абонемент ($m)

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

1 стартмани

05.03.2013    36653    81    Антон Ширяев    46    

Бухгалтерия сельскохозяйственного предприятия. Учет в животноводстве

Закрытие периода Производство готовой продукции (работ, услуг) v8 1cv8.cf Сельское хозяйство и рыболовство Россия БУ Бесплатно (free)

Делюсь опытом работы в конфигурации "1С: Предприятие 8. Бухгалтерия сельскохозяйственного предприятия" от фирмы ООО "Агрософт", сделанной на базе БП 3.0. В статье подробно рассмотрен порядок закрытия 20.01.2 счета (Животноводство). Может быть полезна и для тех, кому интересен принцип расчета себестоимости при закрытии 20 счета безотносительно животноводства, так как в обычной Бухгалтерии 3.0 он похож.

01.12.2020    7165    niko11s    7    

Операторы перехода в программном коде: использовать или нет?

Рефакторинг и качество кода v8 1cv8.cf Бесплатно (free)

Рассмотрим ситуации использования операторов перехода Перейти (GoTo), Возврат (Return), Прервать (Break), Продолжить (Continue). Как вы считаете - это дурной тон, нормальная практика или зависит от ситуации?

16.11.2020    2157    ivanov660    22    

Чистый кот (Clean cat)

Рефакторинг и качество кода v8 1cv8.cf Бесплатно (free)

От автора легендарного бестселлера "Совершенный кот".

04.11.2020    1637    vasilev2015    25    

Доработайте это "немедленно", или как уменьшить доработки конфигурации

Рефакторинг и качество кода v8 Россия Бесплатно (free)

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

25.09.2020    3807    Богатырев Артур    20    

Метод борьбы с большим количеством комментариев в коде

Практика программирования Рефакторинг и качество кода v8 1cv8.cf Бесплатно (free)

Решил поделиться нашим способом борьбы с сильно закомментированным кодом.

08.09.2020    1346    tambu    9    

Как поставить качество кода на поток и при этом не разориться? Какие шаги стоит сделать уже завтра, чтобы повысить планку качества?

Рефакторинг и качество кода v8 Бесплатно (free)

Наличие в 1С-решениях некачественного кода мешает их поддержке и эффективному развитию. Как добиться соблюдения стандартов разработки при написании кода и внедрить бюджетный Code Review с помощью инструментария на основе АПК (Автоматизированной проверки конфигураций) на конференции Infostart Event 2019 Inception рассказал технический руководитель компании Бизнес Лоджик Иван Козлов.

22.06.2020    3506    kozlov.alians    1    

Молчание "best practices": тестовые и эталонные данные, структура и связность, падения и новая функциональность, и другие неудобные вопросы к сценарному тестированию

Рефакторинг и качество кода Сценарное тестирование v8 Бесплатно (free)

Непонимание некоторых базовых вопросов мешает программистам начать применять инструменты тестирования в процессе разработки для 1С. Как разобраться в терминологии и интегрировать процесс тестирования в разработку 1С-решений на конференции Infostart Event 2019 Inception рассказал руководитель отдела разработки компании C.T.Consultants Решитко Дмитрий.

29.05.2020    4618    grumagargler    14    

Нестандартное закрытие месяца в Бухгалтерии 3.0

Закрытие периода v8 v8::БУ БП3.0 Россия БУ Бесплатно (free)

Хотел бы рассказать вам об интересном опыте решения задачи по доработке штатного закрытия месяца (по 20,23,25,26 счету) в Бухгалтерии 3.0 и Корп.

14.05.2020    3044    user1114962    6    

Рефакторинг в редакторе модулей

Рефакторинг и качество кода v8 1cv8.cf Бесплатно (free)

Для тех, кто не пользуется Ctrl+Alt+R. “Контролируемый процесс улучшения кода без написания новой функциональности”, “Равносильное преобразование алгоритмов” и т.п в данной статье НЕ рассматриваются. Тема статьи: замечательные команды из подменю Рефакторинг контекстного меню редактора модулей в конфигураторе. В статье описано, как команды из подменю Рефакторинг помогают при написании кода

10.03.2020    4303    pparshin    5    

Качество кода: Поведенческие паттерны проектирования

Рефакторинг и качество кода v8 Бесплатно (free)

Поговорим про применение паттернов проектирования в разработке на 1С.

03.03.2020    7935    ivanov660    0    

Боремся с запросами в циклах. Мой опыт рефакторинга запросов

Рефакторинг и качество кода v8::Запросы 1cv8.cf Бесплатно (free)

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

02.03.2020    7731    aximo    55    

"Секреты" закрытия месяца в 1С:ERP

Закрытие периода v8 ERP2 Россия БУ НУ Бесплатно (free)

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

22.01.2020    45276    1СERP    63    

Расчет себестоимости по средней: не так все просто, как кажется на первый взгляд

Закрытие периода Учетная политика Управление торговлей Бухгалтерия v8::БУ v8::ОУ БП2.0 УТ10 БП3.0 УТ11 Россия БУ УУ Бесплатно (free)

Статья предназначена для специалистов по внедрению 1С и бухгалтеров, у которых возникают следующие вопросы: Бухгалтерия 3.0,2.0 закрытие месяца операция Корректировка стоимости номенклатуры Управление торговлей 11.4 и 10.3, разные величины себестоимости при одинаковых списаниях по средней. И что нужно сделать, чтобы эти цифры были равны.

29.12.2019    14341    aurumm    4    

Стабильность превыше всего

Рефакторинг и качество кода v8 Бесплатно (free)

Странная заметка о поддержании стабильности в условиях интенсивного изменения конфигурации.

07.11.2019    9868    YPermitin    40    

Оценка скорости кода. Сложность алгоритма

Практика программирования Рефакторинг и качество кода v8 1cv8.cf Бесплатно (free)

Эта тема одной из первых всплывает на собеседовании программистов языков вроде Java и C, но она почти неизвестна в "мире 1С". Поговорим о вычислительной сложности алгоритмов.

07.10.2019    5806    m-rv    12    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    18145    Stepa86    34    

По следам код-ревью

Рефакторинг и качество кода v8 Бесплатно (free)

Приведу примеры с картинками и небольшим пояснением по вопросам, связанным с код-ревью (обзором кода).

09.07.2019    13395    ivanov660    110    

Что такое рефакторинг и в чем его цели

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

Что такое рефакторинг, и в каких случаях им стоит заниматься? Евгений Шумилов дает ответы на эти вопросы, а также рассказывает о признаках хорошего и плохого кода. Кроме того, в статье приведены основные проблемы рефакторинга и способы их решения.

30.10.2018    12337    eu_genij    34    

Своя операция в закрытии месяца? Легко!

Закрытие периода Закрытие периода Закрытие периода v8 ERP2 1С:Франчайзи, автоматизация бизнеса Россия БУ Бесплатно (free)

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

04.09.2018    14257    Shmell    4    

Закрытие месяца (Управление торговлей 11) - решение проблемы ненулевой себестоимости при отсутствии товара

Закрытие периода Оптовая торговля Оптовая торговля v8::ОУ УТ11 Россия УУ Бесплатно (free)

Часто при запуске процедуры "Закрытие месяца" выскакивает ошибка следующего содержания: "По номенклатуре ... обнаружен некорректный остаток в регистре "Себестоимость товаров"" и обработка прекращается на пункте "Расчет себестоимости". Данная статья посвящена методам борьбы с указанной ошибкой.

12.12.2016    33790    Mortiferus    17    

Разгон РАУЗ в 1С УПП 1.3 (платформа 8.2)

Закрытие периода Производство готовой продукции (работ, услуг) Производство готовой продукции (работ, услуг) v8 УПП1 Россия БУ НУ Бесплатно (free)

В статье рассматривается вопрос повышения быстродействия расчета себестоимости в конфигурации 1С УПП 1.3 при включенном режиме РАУЗ и наличии большого количества материальных затрат. Глубокого погружения в теорию тут ждать не стоит, для этого есть другие хорошо написанные книги и статьи. Тут будет рассмотрен метод "по быстрому".

07.10.2014    29682    DNSokol    56    

Автоматическое перепроведение документов в Бухгалтерии 3.0

Закрытие периода Закрытие периода Закрытие периода v8 БП2.0 БУ Бесплатно (free)

Регламентное задание позволяет запускать перепроведение документов по расписанию. Разрабатывалось в Бухгалтерии КОРП 3.0.32.7

06.09.2014    23055    kholkin    7    

МиниКейс "Закрытие месяца в УПП без остановки работы системы (Партионный учёт)"

Распределенная БД (УРИБ, УРБД) Закрытие периода Закрытие периода Закрытие периода v8 1cv8.cf БУ Бесплатно (free)

Предлагается схема закрытия месяца на предприятии с круглосуточной работой в 1С. Используются обработки, которые доступны на infostart.ru.

24.02.2013    24492    axxell    7    

Бухгалтерам редактирующим "Закрытие месяца" в Бухгалтерии 2.0 посвящается...

Закрытие периода Закрытие периода Управленческий учет (прочее) Бухгалтерский учет Закрытие периода v8 БП2.0 БУ Бесплатно (free)

С переводом Бухгалтерии с редакции 1.6 на 2.0 появился один интересный но мало описанный момент работы бухгалтера, ведущего бухгалтерский и налоговый учет на производстве. Этот момент также характерен для бухгалтеров перенесших привычки ведения учета из "семерки" в "восьмерку". Момент этот - РУЧНАЯ КОРРЕКТИРОВКА движений "Регламентных операций" закрытия месяца. Итогом этих действий бывает ошибка при закрытии 20-х и 90-х счетов: "Нарушена последовательность регламентных операций. Ожидается изменение результатов выполнения операции "Закрытие счетов 20, 23, 25, 26" за Сентябрь 2011 г. Необходимо выполнить повторно эту операцию (меню "Операции" - "Закрытие месяца")."

18.12.2011    34058    wjickey    27    

Демонстрация расчета себестоимости в 1С:Комплексная автоматизация 8

Закрытие периода Закрытие периода Закрытие периода v8 КА1 Бесплатно (free)

Скринкаст с демонстрацией действий по расчету себестоимости готовой продукции/услуг в 1С:Комплексная автоматизация 8

23.04.2010    36226    ИТ-Терминал    15    

Мастер-класс от Poppy (практикум по рефакторингу)

Практика программирования Рефакторинг и качество кода v8 1cv8.cf Россия Бесплатно (free)

Попался на глаза код неопытного программиста. Не смогла пройти мимо, захотелось выполнить рефактроинг. Вот что из этого получилось.

04.11.2008    18820    poppy    33