Перейти к содержимому

Как добавить новые элементы в справочник

  • автор:

Как добавить новые элементы в справочник

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Полный синтаксис (нажмите, чтобы раскрыть)

Справочники

Описание:

Для работы с постоянной и условно постоянной информацией с некоторым множеством значений в системе используются объекты типа «Справочник». Обычно справочниками являются списки материалов, товаров, организаций, валют, сотрудников и др.

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

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

Оглавление (нажмите, чтобы раскрыть)

  • Как обойти все элементы справочника
  • Как обойти все группы справочника
  • Как обойти группы вместе с элементами справочника (иерархически)
  • Как отобрать элементы справочника по родителю (перечислим все элементы группы)
  • Как отобрать элементы справочника по владельцу (перечислим все договоры контрагента)
  • Как отобрать элементы справочника по коду, наименованию, и другим реквизитам
  • Как создать новый элемент справочника
  • Как создать новую группу справочника
  • Как перенести элемент справочника в другую группу
  • Как внести изменения в элемент справочника по ссылке
  • Как получить и проверить пустую ссылку типа справочник
  • Как узнать принадлежность элемента справочника группе с учетом уровней иерархии
  • Как скопировать существующий элемент справочника
  • Как выяснить уровень вложенности элемента справочника
  • Как заблокировать элемент справочника перед изменениями
  • Как заполнить новый элемент справочника на основании
  • Как пометить на удаление элемент справочника
  • Как открыть форму существующего элемента справочника по ссылке
  • Как открыть форму существующей группы справочника по ссылке
  • Как открыть форму выбора элемента справочника и отследить её закрытие
  • Как открыть форму выбора группы справочника и отследить её закрытие
  • Как открыть форму списка справочника и установить отбор по реквизиту
  • Как открыть форму списка справочника с нужным отображением
  • Как открыть форму только что созданного, но ещё не записанного элемента справочника
  • Скачать и выполнить эти примеры на компьютере
/// Как обойти все элементы справочника в 1с 8.3, 8.2 &НаСервере Процедура КакОбойтиЭлементыСправочникаНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Вкусы КАК Вкусы |ГДЕ | ЭтоГруппа = ЛОЖЬ |УПОРЯДОЧИТЬ ПО | Наименование"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаВкусов = РезультатЗапроса.Выбрать(); Пока ВыборкаВкусов.Следующий() Цикл Сообщить(ВыборкаВкусов.Наименование); КонецЦикла; КонецПроцедуры

Результат обхода элементов справочника

Результат обхода элементов справочника 1с 8

/// Как обойти все группы справочника в 1с 8.3, 8.2 &НаСервере Процедура КакОбойтиГруппыСправочникаНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Вкусы КАК Вкусы |ГДЕ | ЭтоГруппа = ИСТИНА |УПОРЯДОЧИТЬ ПО | Наименование"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаВкусов = РезультатЗапроса.Выбрать(); Пока ВыборкаВкусов.Следующий() Цикл Сообщить(ВыборкаВкусов.Наименование); КонецЦикла; КонецПроцедуры

Результат обхода групп справочника

Результат обхода групп справочника 1с 8

/// Как обойти группы вместе с элементами /// справочника (иерархически) в 1с 8.3, 8.2 &НаСервере Процедура КакОбойтиГруппыИЭлементыСправочникаНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Вкусы КАК Вкусы |УПОРЯДОЧИТЬ ПО | Наименование Иерархия"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаВкусов = РезультатЗапроса.Выбрать(); Пока ВыборкаВкусов.Следующий() Цикл Отступ = ""; Для Шаг = 0 По ВыборкаВкусов.Уровень() Цикл Отступ = Отступ + " "; КонецЦикла; Сообщить(Отступ + ВыборкаВкусов.Наименование); КонецЦикла; КонецПроцедуры

Результат обхода групп и элементов (иерархически) справочника

Результат обхода групп и элементов (иерархически) справочника 1с 8

/// Как отобрать элементы справочника по родителю в 1с 8.3, 8.2 /// (перечислим все элементы группы) &НаСервере Процедура КакОтобратьЭлементыСправочникаПоРодителюНаСервере() // для тестов найдём группу "Любимые" по её имени СсылкаНаРодителя = Справочники.Вкусы.НайтиПоНаименованию("Любимые"); // перечислим только те элементы справочника, что // входят в группу "Любимые" Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Вкусы КАК Вкусы |ГДЕ | Вкусы.Родитель = &Родитель"; Запрос.УстановитьПараметр("Родитель", СсылкаНаРодителя); РезультатЗапроса = Запрос.Выполнить(); ВыборкаВкусов = РезультатЗапроса.Выбрать(); Пока ВыборкаВкусов.Следующий() Цикл Сообщить(ВыборкаВкусов.Наименование); КонецЦикла; КонецПроцедуры

Результат отбора элементов по родителю (группе) справочника

Результат отбора элементов справочника по родителю (группе)

/// Как отобрать элементы справочника по владельцу в 1с 8.3, 8.2 /// (перечислим все договоры контрагента) &НаСервере Процедура КакОтобратьЭлементыСправочникаПоВладельцуНаСервере() // для тестов найдём клиента по коду 1 (это Андрей, у него 2 договора) СсылкаНаКлиента = Справочники.Клиенты.НайтиПоКоду("000000001"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Договоры КАК Договоры |ГДЕ | Договоры.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", СсылкаНаКлиента); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДоговоров = РезультатЗапроса.Выбрать(); Пока ВыборкаДоговоров.Следующий() Цикл Сообщить(ВыборкаДоговоров.Наименование); КонецЦикла; КонецПроцедуры

Результат отбора элементов справочника по владельцу

Результат отбора элементов справочника 1с 8 по владельцу

/// Как отобрать элементы справочника по коду, наименованию, /// и другим реквизитам в 1с 8.3, 8.2 &НаСервере Процедура КакОтобратьЭлементыСправочникаПоРеквизитамНаСервере() // сделаем отбор элементов справочника Клиенты // у которых реквизит Пол = Мужской и ЛюбимыйЦвет = Красный // вместо этих реквизитов для отбора можно использовать // Код, Наименование или любой другой реквизит справочника Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование, | Пол, | ЛюбимыйЦвет |ИЗ | Справочник.Клиенты КАК Клиенты |ГДЕ | Клиенты.ЭтоГруппа = ЛОЖЬ И | Клиенты.Пол = &Пол И | Клиенты.ЛюбимыйЦвет = &Цвет"; Запрос.УстановитьПараметр("Пол", Перечисления.Пол.Мужской); Запрос.УстановитьПараметр( "Цвет", Справочники.Цвета.НайтиПоНаименованию("Красный") ); РезультатЗапроса = Запрос.Выполнить(); ВыборкаКлиентов = РезультатЗапроса.Выбрать(); Пока ВыборкаКлиентов.Следующий() Цикл Сообщить( ВыборкаКлиентов.Наименование + " " + ВыборкаКлиентов.Пол + " " + ВыборкаКлиентов.ЛюбимыйЦвет ); КонецЦикла; КонецПроцедуры

Результат отбора элементов справочника по реквизитам

Результат отбора элементов справочника 1с 8 по реквизитам

&НаСервере Процедура СозданиеИИзменениеЭлементовИГруппСправочникаНаСервере() /// Как создать новый элемент справочника в 1с 8.3, 8.2 // создадим новый элемент справочника Города // с именем Владивосток Владивосток = Справочники.Города.СоздатьЭлемент(); Владивосток.Наименование = "Владивосток"; Владивосток.Записать(); /// Как создать новую группу справочника в 1с 8.3, 8.2 // создадим новую группу справочника Города ГородаУМоря = Справочники.Города.СоздатьГруппу(); ГородаУМоря.Наименование = "Города у моря"; ГородаУМоря.Записать(); /// Как перенести элемент справочника в другую группу в 1с 8.3, 8.2 // перенесём созданный Владивосток в группу "Города у моря" Владивосток.Родитель = ГородаУМоря.Ссылка; Владивосток.Записать(); /// Как внести изменения в элемент справочника по ссылке /// в 1с 8.3, 8.2 // найдём город Калькутта КалькуттаСсылка = Справочники.Города.НайтиПоНаименованию("Калькутта"); Если Не КалькуттаСсылка.Пустая() Тогда // изменим и запишем численность жителей в городе Калькутта = КалькуттаСсылка.ПолучитьОбъект(); Калькутта.Численность = 1000000; Калькутта.Записать(); КонецЕсли; /// Как получить и проверить пустую ссылку типа справочник в 1с 8.3, 8.2 ПустаяСсылка = Справочники.Города.ПустаяСсылка(); Если ПустаяСсылка.Пустая() Тогда Сообщить("Ссылка действительно пустая."); КонецЕсли; /// Как узнать принадлежность элемента справочника группе /// с учетом уровней иерархии в 1с 8.3, 8.2 ПермьСсылка = Справочники.Города.НайтиПоНаименованию("Пермь"); РоссияСсылка = Справочники.Города.НайтиПоНаименованию("Россия"); // проверим принадлежит ли город Пермь группе Россия Если ПермьСсылка.ПринадлежитЭлементу(РоссияСсылка) Тогда Сообщить("Элемент Пермь находится в группе Россия."); КонецЕсли; /// Как скопировать существующий элемент справочника в 1с 8.3, 8.2 // скопируем элемент Пермь КопияПерми = ПермьСсылка.Скопировать(); КопияПерми.Наименование = КопияПерми.Наименование + " КОПИЯ"; КопияПерми.УстановитьНовыйКод(); КопияПерми.Записать(); /// Как выяснить уровень вложенности элемента справочника /// в 1с 8.3, 8.2 Сообщить(КопияПерми.Уровень()); // 1 /// Как заблокировать элемент справочника перед изменениями /// в 1с 8.3, 8.2 // выполним блокировку элемента справочника // от изменения другими режимами или пользователями Пермь = ПермьСсылка.ПолучитьОбъект(); Если Не Пермь.Заблокирован() Тогда Пермь.Заблокировать(); // тут идёт какой-то долгий алгоритм // в результате которого мы меняем // заблокированный элемент Пермь.Численность = 5000; Пермь.Записать(); // и только потом освобождаем его // для других режимов и пользователей Пермь.Разблокировать(); КонецЕсли; /// Как заполнить новый элемент справочника на основании /// в 1с 8.3, 8.2 // в модуле справочника Города я определил процедуру // ОбработкаЗаполнения, которая обрабатывает ситуации // когда мы заполняем один элемент на основании // данных другого (см. в базе для скачивания) Хабаровск = Справочники.Города.СоздатьЭлемент(); Хабаровск.Заполнить( Справочники.Города.НайтиПоНаименованию("Рио-де-Жанейро") ); Хабаровск.Наименование = "Хабаровск"; Хабаровск.Записать(); /// Как пометить на удаление элемент справочника в 1с 8.3, 8.2 // пометим на удаление только что созданный Хабаровск Хабаровск.УстановитьПометкуУдаления( Истина, // пометка удаления Ложь // включая подчиненные (если речь о группе справочника) ); // метод Записать вызывать не нужно КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьКлиентаПоИмени(Имя) Возврат Справочники.Клиенты.НайтиПоНаименованию(Имя); КонецФункции /// Как открыть форму существующего элемента справочника /// по ссылке в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСуществующегоЭлементаСправочника(Команда) СсылкаНаЭлемент = ПолучитьКлиентаПоИмени("Андрей"); ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент); ОткрытьФорму( "Справочник.Клиенты.ФормаОбъекта", // имя формы ПараметрыФормы // параметры для формы ); КонецПроцедуры /// Как открыть форму существующей группы справочника /// по ссылке в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСуществующейГруппыСправочника(Команда) СсылкаНаГруппу = ПолучитьКлиентаПоИмени("Vip"); ПараметрыФормы = Новый Структура("Ключ", СсылкаНаГруппу); ОткрытьФорму( "Справочник.Клиенты.ФормаГруппы", // имя формы ПараметрыФормы // параметры для формы ); КонецПроцедуры /// Как открыть форму выбора элемента справочника и /// отследить её закрытие в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуВыбораЭлементаСправочника(Команда) ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораЭлемента", ЭтотОбъект); ОткрытьФорму( "Справочник.Клиенты.ФормаВыбора". ОповещениеОЗакрытии ); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораЭлемента(Результат, Параметры) Экспорт Если Результат <> Неопределено Тогда Сообщить("Был выбран элемент " + Результат); КонецЕсли; КонецПроцедуры /// Как открыть форму выбора группы справочника и /// отследить её закрытие в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуВыбораГруппыСправочника(Команда) ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораГруппы", ЭтотОбъект); ОткрытьФорму( "Справочник.Клиенты.ФормаВыбораГруппы". ОповещениеОЗакрытии ); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораГруппы(Результат, Параметры) Экспорт Если Результат <> Неопределено Тогда Сообщить("Была выбрана группа " + Результат); КонецЕсли; КонецПроцедуры /// Как открыть форму списка справочника и /// установить отбор по реквизиту в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормаСпискаСправочникаСОтбором(Команда) // откроем список клиентов, оставив // только мужчин ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Пол", ПолучитьПеречислениеМужской()); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора); ОткрытьФорму( "Справочник.Клиенты.ФормаСписка", ПараметрыФормы ); КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьПеречислениеМужской() Возврат Перечисления.Пол.Мужской; КонецФункции /// Как открыть форму списка справочника с нужным отображением /// в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСпискаСправочникаСНужнымОтображением(Команда) // откроем список клиентов с отображением "Список" ФормаСписка = ПолучитьФорму("Справочник.Клиенты.ФормаСписка"); ФормаСписка.Открыть(); ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список; КонецПроцедуры /// Как открыть форму только что созданного, но ещё /// не записанного элемента справочника в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуНовогоНеЗаписанногоСправочника(Команда) // получаем форму нового справочника ФормаНовогоСправочника = ПолучитьФорму( "Справочник.Еда.ФормаОбъекта". Истина); // делаем копию её данных (так как напрямую их менять // нельзя) КопияДанныхФормы = ФормаНовогоСправочника.Объект; // заполняем эти данные на сервере ЗаполнитьДанныеФормыНаСервере(КопияДанныхФормы); // копируем заполненные данные в исходную форму КопироватьДанныеФормы(КопияДанныхФормы, ФормаНовогоСправочника.Объект); // показываем форму нового заполненного // элемента справочника пользователю ФормаНовогоСправочника.Открыть(); КонецПроцедуры &НаСервере Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы) // преобразуем данные формы в документ Еда = ДанныеФормыВЗначение(ДанныеФормы, Тип("СправочникОбъект.Еда")); Еда.Наименование = "Груша"; Еда.Калорийность = 500; // преобразуем документа обратно в данные формы ЗначениеВДанныеФормы(Еда, ДанныеФормы); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере

Справочники в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

создать новые элементы реквизита справочника при его создании копированием

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

По теме из базы знаний

  • Rocket Launcher 7.7. Свертка базы 1С 7.7. Перенос справочников и документов 7.7
  • Конвертация данных из 1С 8.3 в 7.7 (версия КД 2.1). Перенос данных из 8.3 в 7.7. Создание в современной 1С 8.3 XML в формате КД2. Инструкции и примеры переноса данных из любой современной 1С 8.3 в устаревшую конфигурацию 1С 7.7, через Конвертацию данных 2
  • Перенос номенклатуры в характеристики и редактирование дополнительных реквизитов номенклатуры и характеристик в УТ 11, КА 2, ERP 2
  • Создание стартовой базы
  • Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Найденные решения
7. dhurricane 15.07.19 11:08 Сейчас в теме

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

1. Копирование ресурсных спецификаций в ERP. Справочник очень емкий, поэтому не используется стандартная команда копирования элементов справочника. После нажатия на переопределенную команду копирования создается новый элемент, полностью копируется и записывается. К наименованию добавляется строка «(копия)». В завершении форма нового элемента открывается. Если пользователь передумает, ему придется помечать на удаление вновь созданный копированием элемент справочника.

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

Программирование 1С 8.х для начинающих

  • Вы здесь:
  • Главная
  • Статьи
  • Конфигурация
  • Справочник 1с
  • Как создать элемент справочника

Поделитесь в соцсетях

Конфигурация

Как создать элемент справочника

Подробности Категория: Справочник 1с

    • Как программно создать новый элемент справочника и записать его.

    Как создать элемент справочника.

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

    Чтобы создать новый элемент справочника используется следующая конструкция:

     
    НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйЭлемент.Наименование = "Телевизор Рекорд";
    // в типовом решении код можно не устанавливать, тогда программа запишет новый номер сама
    НовыйЭлемент.Код = "000023564";
    ГруппаТелевизоры = Справочники.Номенклатура.НайтиПоКоду("000000085");
    //если нужно записать элемент в корень справочника, то тогда Родитель не заполняется
    НовыйЭлемент.Родитель = ГруппаТелевизоры;
    НовыйЭлемент.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
    // далее заполняются все необходимые реквизиты
    НовыйЭлемент.Записать();

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

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

    Создание и запись нового элемента справочника

    Распечатать

    Распечатать

    COM-подключение к базе 7.7 из .NET, .NET Core 1
    Инсталяция: dotnet add package sabatex.V1C77 или добавить через NUGET пакет sabatex.V1C77. Добавить пространство имен: using sabatex.V1C77; пример использованя: —C# static void Main(string args) < // создаем строку соединенZIP-архив Чтение 0
    Для того чтобы прочитать файлы из ZIP-архива необходимо выполнить несколько простых действий: — Открыть необходимый архив — Распаковать файлы Создание объекта ЧтениеZIPФайла можно осуществить двумя путями — создать инициализированный объект или Автоматическая установка ширины колонки табличного документа. 0
    Процедура, которая » примерно» делает автоширину колонок (навроде, как если бы выделить все колонки и дважды щелкнуть мышкой по границе заголовка колонки). Привожу текст, работает неахти, но лучше чем ничего: Процедура РасчетШириныКолонок(Табличный Был ли изменен элемент справочника? 0
    // Модифицированность() — Определяет, был ли изменен объект после считывания из базы данных. // НО Метод не позволяет определить, был ли изменен объект другими пользователями. Если Модифицированность() тогда Сообщить(» Этот элемент справочник Быстрый отбор в справочнике по первой букве 0
    В статье описан способ быстрой организации отбора в списке справочника по первой букве наименования. Механизм легко дотачивается под собственные нужды. https://helpf.pro/uploads/img/_1-T4ZDj6uNPX.png // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ НаКлиенте Посмотреть все результаты поиска похожих

    Еще в этой же категории

    Как для Выбора Элемента Справочника Открыть Форму Выбора с нужной Открытой Группой? 9
    Порядок действий такой: 1. В поле ввода » Номенклатура» добавь событие ПриНачалеВыбора. 2. Установи в них СтандартнаяОбработка = Ложь; 3. Получи форму выбора нужного справочника 4. Установи отбор по родителю 5. Открой форму для выбора Теп Перебрать, выбрать элементы справочника 8
    Выборка = Справочники.Сотрудники.Выбрать(); //или Выборка = Справочники.Сотрудники.ВыбратьИерархически(); Пока выборка.Следующий() = 1 Цикл . //действия с очередным элементом . Сообщить(» Сотрудник » + выборка.Наименование); КонецЦикла; / Перебрать, выбрать элементы подчиненного справочника 8
    Перебор элементов справочника принадлежащих элементу другого справочника, т.е когда один справочник подчинен другому справочнику. // Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Вы Как программно открыть и выбрать элемент справочника, выбор элемента справочника? 8
    Просто открыть: // Получить форму выбора справочника как подчиненную форме документа ФормаСписка = Справочники.Номенклатура.ПолучитьФормуСписка( , ЭтаФорма); // Открыть полученную форму ФормаСписка.Открыть(); Открыть для выбора элемента: Ф Как сделать подбор элементов справочника в табличную часть документа? 8
    Нужно на форме документа сделать кнопочку Подбор для справочника сотрудники и чтобы выбранные элементы добавлялись в табличное поле документа? В данной статье я приведу пример подбора элемента справочника в Список значений и в Табличную часть! Со Посмотреть все в категории Справочники

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *