Условное оформление в управляемых формах

0. 400 04.04.13 15:03 Сейчас в теме
Для условного оформления в списках и формах
в обычном приложении использовалось событие ПриПолученииДанных() или ПриВыводеСтроки(),
где через "ячейку" в зависимости от данных строки устанавливали нужное свойство.
С приходом нового режима работы платформы возможности условного оформления расширились.
В данной статье разберем основные аспекты.

Перейти к публикации

Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. KonstB 177 05.04.13 23:24 Сейчас в теме
Выводы:

- Простое условное оформление пользователь может настроить и сам, если его научить :). Это будет сложно конечно, но возможно.


Спасибо, КЭП! )
2. son_v 2 04.07.13 10:29 Сейчас в теме
Доброе время суток. А у меня вопрос к автору. Добавляю условное оформление в Настройку списка в конфигураторе (пример 2 пункта 1 статьи) дополнительно к типовым настройкам (формы списка документа Заказы покупателей и спр. Договоры контрагентов, Управление торговлей ред.11 платформа 8.2.17.169), а в режиме предприятия настройки не обновляются. Куда смотреть, что делать, к кому бежать? чистка кэша не помогает, да и не вариант.
3. AllexSoft 04.07.13 10:33 Сейчас в теме
(2) son_v, есть справочник настройки пользователей как то так, его можно открыть в режиме предприятия через справочник Пользователи.. ну и очистить настройки форм там надо
4. son_v 2 04.07.13 10:42 Сейчас в теме
(3) СПАСИБО!!!!!!!! Сами бы еще годами думали ))
5. Znef 24.09.13 14:08 Сейчас в теме
Спасибо, помогло. Только почему то работает только для Формы, а для таблицы или дерева нет.
Прикрепленные файлы:
6. psa247 4 24.11.13 10:42 Сейчас в теме
(5) Znef, скорее всего, у Вас более свежая платформа. У меня тоже такого нет
7. AllexSoft 24.11.13 14:19 Сейчас в теме
Условное оформление бывает только для формы! Оно включает и условное оформление всех элементов связанных с этой формой, в том числе и таблиц, дерева. Хотя для динамических списков оно может быть отдельно в динамическом списке, с ними сложнее.
(6) psa247, от платформы не зависит, зависит от конфигурации.
rendalina; +1 Ответить
8. psa247 4 24.11.13 14:26 Сейчас в теме
(7) AllexSoft, да, так и есть, спасибо за ответ. Уже кое-чего примитивное настроил на уровне конфы.
для управления оформлением программно в динамическом списке вот так сделал:



&НаСервере
Процедура НастроитьУсловноеФорматирование()
Для Каждого СтрокаДанных Из Объект.СписокКлиентов Цикл
// Условное оформление - Номер первой строки
СтрокаДанных.ВерсияППОтображение = ПолучитьНомерВерсииПП(СтрокаДанных.НоваяВерсия);

НовыйЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
//НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ""Стр.НомерСтроки;
НовыйЭлементУсловногоОформления.Представление = "СозданоПрограммно";
НовыйЭлементУсловногоОформления.Использование = Истина;

ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокКлиентов.НоваяВерсия");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных(Справочники.ВерсияПП.ПустаяСсылка());
КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
НастроитьУсловноеФорматирование();
КонецПроцедуры

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
НастроитьУсловноеФорматирование();
КонецПроцедуры
9. AllexSoft 24.11.13 14:33 Сейчас в теме
(8) psa247, зачем?) чем не подошло условное оформление самого динамического списка ? если оно не обновляется нужно добавить какой нибудь реквизитик (колонку в дин список) сохранить, открыть и проверить условное оформление, потом удалить эту ненужную колонку
PCcomCat; +1 Ответить
10. psa247 4 24.11.13 14:38 Сейчас в теме
(9) AllexSoft, нее, я часа три убил на то, что в толстом клиенте делается 3 минуты
24. PCcomCat 31.05.17 21:31 Сейчас в теме
Вот это трюк в (9) с добавлением реквизита в динамический список! И работает же!
11. AllexSoft 24.11.13 14:43 Сейчас в теме
(10) psa247, в УФ немного приловчится и в принципе многое проще чем в обычных формах. Ну правда дин. список очень очень сырой, как минимум из того что мне уже неоднократно было нужно это:
1. невозможность вывести итоговую сумму в подвал дин. списка.
2. нельзя использовать пакеты запросов в произвольном запросе дин. списка.
12. psa247 4 24.11.13 14:52 Сейчас в теме
1С - Недоступно, но всерьез ? ))
13. AllexSoft 24.11.13 14:55 Сейчас в теме
14. Tapochki-tmn 43 18.02.15 08:21 Сейчас в теме
Спасибо, очень помогло.

От себя добавлю, если вдруг кому пригодится:

Надо было в таблице на форме сравнить две колонки.
В одной колонке значения типа Справочник.ЦеновыеГруппы.
Во второй колонке значения типа Строка.
Сравнивать надо было наименование справочника первой колонки и строку из второй колонки.
Через УсловноеОформление формы посмотрел - нельзя обратиться к свойствам поля, нету их.
Создал в реквизитах у этой таблицы еще одно поле ЦеновыеГруппыНаименование, элемент в форме не создавал.
Программно задал условие:

ИмяПоляОформления = "ЗагружаемыеДанныеЦеновыеГруппы";
	ПутьКПолюОтбора = "ЗагружаемыеДанные.ЦеновыеГруппыНаименование";
	ПутьКПолюСравнения = "ЗагружаемыеДанные.ЦеновыеГруппыПоставщика";
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементыФормы[ИмяПоляОформления].Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКПолюОтбора);
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКПолюСравнения);
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.НавахоБелый);
Показать

Не пинайте, если через Ж...
Полдня искал как сделать нормально...
agent00mouse; Lapitskiy; freeek; frkbvfnjh; +4 Ответить
15. HboTfd12 24.02.15 15:25 Сейчас в теме
(14) Да Вы батенька некрофил! :)
agent00mouse; mikki_1C; +2 3 Ответить
35. agent00mouse 214 24.04.20 15:42 Сейчас в теме
(14)
Отличный код. Великолепное шаманство. Нужно было сравнить в документе Колонки Количество и КоеоходимоеКоличество. Через стандартное оформление не взлетело.
Хорошо, что так можно напилить.
16. chmv 24.06.15 15:14 Сейчас в теме
17. jaroslav.h 06.01.16 22:48 Сейчас в теме
&НаСервере 
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ЭлементОтобора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтобора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Абонимент");
    ЭлементОтобора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтобора.ПравоеЗначение = Перечисления.Абонимент.Premium;
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ЗеленаяЛужайка);
    ЭлементОтобора.Использование = Истина;
    
    ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
    ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Абонимент");
    ПолеОформления.Использование = Истина;
    
КонецПроцедуры
Показать

скажите, мне нужно ЦветФона изменить, такой Параметр есть но если указываю ЦветФона то никакого результата, а вот когда указываю ЦветТекста то работает
18. Igor Igorevich 21.01.16 10:43 Сейчас в теме
Спасибо за статью. Ранее настраивал условное оформление на форме через свойство "Условное оформление" и не работало. И как всегда списал на глюк 1с.
Но после прочтения статьи решил все перепроверить - и нашел ошибку в условии. Исправил и все заработало.
1с - на высоте. А если у кого не работает, то будьте внимательны и ищите свои ошибки.
Designer1C; +1 Ответить
19. dklp 35 22.04.16 16:15 Сейчас в теме
подскажите, а можно ли в принципе применять условное оформление из внешней обработки к форме владельца.
параметр ВладелецФормы на сервере выдает ошибку, а на клиенте условное оформление недоступно.

заполняю из внешней обработки ТЧ документа, нужно для текста ячеек в одной колонке установить свойство: ГоризонтальноеПоложение - Право.
может, у кого-нибудь есть идеи как это сделать?
типовую Конфигурацию менять нельзя.
21. stranger_1 01.11.16 19:44 Сейчас в теме
(19) dklp, А если засунуть форму в расширение и в расширении сделать как нужно?
20. Nickon 22.08.16 21:02 Сейчас в теме
Понимал, что что-то такое есть на УФ. Даже процедуру написал. Но благодаря статье решилось все за 5 минут!
22. klaos 9 21.12.16 09:20 Сейчас в теме
1С:Предприятие 8.3 (8.3.9.1818), Розница, редакция 2.2 (2.2.4.33) , не могу найти Условное оформление.Есть ли оно там вообще?
23. Debugg3R 16.02.17 11:15 Сейчас в теме
На форме есть дерево значений. У дерева значений один из реквизитов - таблица значений. И вот для этой таблицы значений, которая для каждого элемента своя, не работает условное оформление.
Либо я не понимаю как его настроить
В отборе стоит "
ДеревоНаФорме.ТаблицаЭлемента.ИмяРеквизита = ЗначениеРеквизита
".
В оформлении стоит "
ИмяЭлементаФормыРеквизитаТаблицыЭлемента
"

Грубо говоря, есть дерево задач, у каждой задачи список исполнителей в виде таблицы и нужно определённых исполнителей подсветить.
25. OksDallas 22 01.03.18 04:11 Сейчас в теме
Условное оформление на форме. Как в оформляемые поля полностью занести строку табличной части не перечисляя реквизиты табличной части?
26. t.v.s. 101 01.03.18 05:54 Сейчас в теме
(25) Добавить имя табличной части как оно есть на форме
27. OksDallas 22 02.03.18 04:18 Сейчас в теме
(26)Пробовала - не получилось.
28. t.v.s. 101 02.03.18 06:44 Сейчас в теме
29. OksDallas 22 02.03.18 08:26 Сейчас в теме
30. Serge_ASB 20.04.18 07:00 Сейчас в теме
А если мне нужно оформить цвет фона в табличной части формы в одной колонке в зависимости от значения (значение - элемент справочника) , тогда как?
pbahushevich; +1 Ответить
31. Ivanov_OM 37 16.05.18 18:06 Сейчас в теме
32. Sergey_1C_ttt 20.09.18 14:06 Сейчас в теме
Спасибо! Очень помогло быстро сделать.
33. sinto 25.02.19 14:52 Сейчас в теме
Добрый день. Интересует такая тема. В поле ТЧ на форме добавил сумму. Вычисляется она банальненько, как "строка.Цена*Строка.Количество". Так как в УФ нет таких обработчиков, как "ПриПолученииДанных" или "ПриВыводеСтроки" необходимо проделать следующее:

1. собственно вычислить эту сумму для каждой строки для разных случаев, будь то изменение номенклатуры или цены или количества. Опять же изменение может быть отовсюду, как из строки ТЧ непосредственно, так и из внешних обработок заполнения. Поэтому - возможно ли вычислить сумму через настройку условного оформления, в идеале - непрограммно. Т.е. условно устанавливать текст ячейки равным сумме=цена*количество
2. Показать такую сумму в подвале

ут 11.4.6.188

буду благодарен за вразумительный ответ
34. PLAstic 269 12.04.19 12:03 Сейчас в теме
Возможно, пропустил, но есть один нюанс при программном добавлении условного оформления.
Реквизиты в условии УО указываются по пути через "Объект.ххх...", а в оформляемых полях УО - по имени элемента формы.

Подробно описано здесь: https://its.1c.ru/db/pubv8devui/content/239/hdoc/_top/%D1%83%D1%81%D0%BB%D0­%BE%D0%B2%D0%BD%D0%BE%D0%B5%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0­%BB%D0%B5%D0%BD%D0%B8%D0%B5.%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B.%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C
36. fixin 4029 24.04.20 20:33 Сейчас в теме
Поделюсь своим случаем сложного - добавляю реквизит в табличную часть Товары и настраиваю условное оформление.

&НаСервере
Процедура _РасчитатьКоличествоПоСериям() Экспорт
    //Осипов 2020-04-24
    
    НастройкиФормыУжеПроизведены = ложь;
    ИдентификаторПользовательскойНастройки = "_ОКПоСериям";
    Для Каждого ЭлементОформления ИЗ УсловноеОформление.Элементы Цикл
        Если ЭлементОформления.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда
            НастройкиФормыУжеПроизведены = истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    //При первом вызове добавляем реквизиты и форму
    Если НЕ НастройкиФормыУжеПроизведены Тогда
        
        //Добавляем реквизит в ТЧ
        НовыеКолонки = Новый Массив;
        РеквизитФормы =  Новый РеквизитФормы("ОКПоСериям", Новый ОписаниеТипов("Булево"), "Объект.Товары");
        НовыеКолонки.Добавить(РеквизитФормы);
        ИзменитьРеквизиты(НовыеКолонки);
    
        //Добавляем условное оформление, отсюда:   https://infostart.ru/public/181336/
        ЭлементОформления = УсловноеОформление.Элементы.Добавить();
        ЭлементОформления.Использование = истина;
        ЭлементОформления.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки;
        ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Новый ПолеКомпоновкиДанных("Объект.Товары.ОКПоСериям")); // имя поля
        //ЭлементОтбора.ЛевоеЗначение = ложь; // имя поля
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; // либо задаем свой
        ЭлементОтбора.ПравоеЗначение = ложь;
        ЭлементОтбора.Использование = Истина;
        
        //Оформление
        Элемент = ЭлементОформления.Оформление.Элементы[0]; //цвет фона
        Элемент.Значение = WebЦвета.ТусклоРозовый;
        Элемент.Использование = Истина; //Временно не используем
        Элемент = ЭлементОформления.Оформление.Элементы[1]; //цвет текста
        Элемент.Значение = WebЦвета.Красный;
        Элемент.Использование = Истина;
        
        // Создаем поля оформления
        ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
        ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыНоменклатура");
        ПолеОформления.Использование = Истина;
        
    КонецЕсли;
    
    //Проверяем на корректность соответствия количества товаров и серий
    ТТовары = Объект.Товары.Выгрузить(, "Номенклатура, Количество, НомерСтроки");
    ТСерии = Объект.Серии.Выгрузить(, "Номенклатура, Количество");
    З = Новый Запрос(
    "ВЫБРАТЬ
    |    Т.Номенклатура КАК Номенклатура,
    |    Т.Количество КАК Количество,
    |    Т.НомерСтроки КАК НомерСтроки
    |ПОМЕСТИТЬ ТТовары
    |ИЗ
    |    &ТТовары КАК Т
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    Т.Номенклатура КАК Номенклатура,
    |    Т.Количество КАК Количество
    |ПОМЕСТИТЬ ТСерии
    |ИЗ
    |    &ТСерии КАК Т
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    ТСерии.Номенклатура КАК Номенклатура,
    |    СУММА(ТСерии.Количество) КАК Количество
    |ПОМЕСТИТЬ ТСерииИтоги
    |ИЗ
    |    ТСерии КАК ТСерии
    |
    |СГРУППИРОВАТЬ ПО
    |    ТСерии.Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    ТТовары.Номенклатура КАК Номенклатура,
    |    СУММА(ТТовары.Количество) КАК Количество
    |ПОМЕСТИТЬ ТТоварыИтоги
    |ИЗ
    |    ТТовары КАК ТТовары
    |
    |СГРУППИРОВАТЬ ПО
    |    ТТовары.Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    ТТовары.НомерСтроки КАК НомерСтроки,
    |    ВЫБОР
    |        КОГДА ТТоварыИТоги.Количество = ТСерииИтоги.Количество
    |            ТОГДА ИСТИНА
    |        ИНАЧЕ ЛОЖЬ
    |    КОНЕЦ КАК ОК
    |ИЗ
    |    ТТовары КАК ТТовары
    |        ЛЕВОЕ СОЕДИНЕНИЕ ТТоварыИтоги КАК ТТоварыИТоги
    |        ПО (ТТоварыИТоги.Номенклатура = ТТовары.Номенклатура)
    |        ЛЕВОЕ СОЕДИНЕНИЕ ТСерииИтоги КАК ТСерииИтоги
    |        ПО (ТСерииИтоги.Номенклатура = ТТовары.Номенклатура)");
    З.УстановитьПараметр("ТТовары", ТТовары);
    З.УстановитьПараметр("ТСерии", ТСерии);
    Выборка = З.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Объект.Товары[Выборка.НомерСтроки - 1].ОКПоСериям = Выборка.ОК;
    КонецЦикла;
    
КонецПроцедуры
Показать
user591389_aska_rabota; +1 Ответить
37. TyurinArt 25.10.20 12:18 Сейчас в теме
Добавим поля оформления, если ничего не добавлять, то система применит оформления ко всей строке:


Пытался делать как в статье не работало, нашёл ответ в ИТС:

Книга "Разработка интерфейса" В.А. Ажеронок, часть 3, глава 3.1.5
"Напоследок хочется сделать еще одно небольшое замечание. В отличие от динамических списков, в условном оформлении формы обязательно нужно указывать оформляемые поля. Если хочется выделить всю строку табличной части, нужно указать все поля, которые в ней содержатся."

Отредактируйте статью.
38. enter_123 27 27.10.20 16:31 Сейчас в теме
(37) На практике проверено, работает.
39. TyurinArt 27.10.20 17:03 Сейчас в теме
(38)Если работает в ТЧ, то просьба привести пример работающего кода. Если это ДС, то всё верно - работает.
40. SlavaKron 27.10.20 17:15 Сейчас в теме
(39) Позволю себе ответить на вашу просьбу.
ЭлементУО = УсловноеОформление.Элементы.Добавить();
	
ОтборУО = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборУО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТабличнаяЧасть1.Реквизит1");
ОтборУО.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборУО.ПравоеЗначение = "1";
	
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТабличнаяЧасть1");
	
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
Показать
Прикрепленные файлы:
ВнешняяОбработка1.epf
Andreich88; TyurinArt; +2 Ответить
41. TyurinArt 27.10.20 17:49 Сейчас в теме
Я до этого просто перечислял все поля строки, а надо было указать ТЧ.

(40)
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТабличнаяЧасть1");


+1
42. Andreich88 27.01.21 00:07 Сейчас в теме
(40) Всем привет.
Я так понимаю это работает только для табличной части? Пробую перенести на таблицу значений нет результата. Как можно тоже проделать с таблицей значений?
43. SlavaKron 27.01.21 08:17 Сейчас в теме
(42) С таблицей значений все работает точно так же как с табличной частью. Приведите свой код, который не работает.
44. Andreich88 27.01.21 11:49 Сейчас в теме
Делаю так
ЭлементУО = УсловноеОформление.Элементы.Добавить();
    
	ОтборУО = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборУО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.цифры.Значение");
	ОтборУО.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборУО.ПравоеЗначение = "0";
	//ОтборУО.ЛевоеЗначение = Ложь;
	ОтборУО.Использование = Истина;
	
	ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("цифры");
	    
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
Показать
45. lobster 400 27.01.21 15:39 Сейчас в теме
тут некорректно поле задано
ОтборУО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.цифры.Значение");


вот так надо

ОтборУО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("<ИмяТаблицы>.<ИмяРеквизита>");
46. Andreich88 27.01.21 18:46 Сейчас в теме
Правильно? Тоже не работает.


ОтборУО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("цифры.Значение");
47. lobster 400 28.01.21 09:53 Сейчас в теме
Вот пример с таблицей значений как с реквизитом формы.
Прикрепленные файлы:
ПримерУО.epf
48. Andreich88 30.01.21 15:13 Сейчас в теме
(47) Спасибо большое. Все заработало. Буду разбираться в чем был затык.
Оставьте свое сообщение
Вопросы с вознаграждением