Быстрое обновление базы 1С из XML-файлов конфигурации (EDT-GIT)

13.07.22

Разработка - DevOps и автоматизация разработки

Быстрое обновление конфигурации и базы данных 1С, вместо долгого обновления из EDT (1C:Enterprise Development Tools) при использовании хранилища GIT. Непосредственное обновлении базы на сервере баз данных (минуя сервер 1С) из XML-файлов конфигурации при помощи утилиты автономного сервера 1С - ibcmd.

Скачать исходный код

Наименование Файл Версия Размер
Быстрое обновление базы 1С из XML-файлов конфигурации (EDT-GIT): статья и Jenkins скрипты
.7z 469,70Kb
10
.7z 469,70Kb 10 Скачать

В данной статье речь пойдет об альтернативном быстром способе обновления конфигурации и базы данных 1С, вместо долгого обновления из EDT (1C:Enterprise Development Tools) при использовании хранилища GIT. При желании можно его использовать и в случае работы с конфигуратором. Данный способ заключается в непосредственном обновлении базы данных на сервере баз данных (минуя сервер 1С) из файлов конфигурации XML.

После внедрения новой среды разработки столкнулись с проблемой очень долгого обновления информационной базы из EDT по сравнению с Конфигуратором. Для общего понимания, связка систем разработки у нас такая: EDT - bitbucket – GIT. Итоговое решение можно разделить на три шага и для каждого их них используется свой инструмент. Но у вас может быть вместо bitbucket, например, GitLab, и тогда первый шаг можно решать другими инструментами. Из данной статьи вы можете почерпнуть для себя что-то полезное из каждого пункта и/или выбрать для себя что-то отдельное или все в совокупности. Итак, данные шаги и инструменты:

  • Клонирование (получение файлов) необходимой ветки из удаленного репозитария в локальный каталог для дальнейшей работы с ними: Jenkins (программная система предназначенная для обеспечения процесса непрерывной интеграции программного обеспечения - из Википедии)
  • Конвертация файлов формата EDT в формат XML- файлов конфигурации: ring (утилита EDT, устанавливается вместе с EDT)
  • Быстрое обновление базы данных из XML- файлов конфигурации непосредственно через СУБД MS SQL (минуя Конфигуратор и EDT): ibcmd (утилита автономного сервера 1С, устанавливается вместе с сервером 1С)

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

Настройка окружения / переменные

  • Рабочий каталог Jenkins: C:/jenkinsSlave/workspace/
  • Рабочий каталог задания и он же локальный каталог проекта EDT, загруженный из удаленного репозитария: C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT
  • Каталог проекта EDT основной конфигурации: C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU
  • Каталог проекта EDT расширения: C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU._скРасширение
  • Каталог XML файлов основной конфигурации: C:/1c/EDT/GIT_ORIGIN_MASTER/CF_XML
  • Каталог XML файлов расширения: C:/1c/EDT/GIT_ORIGIN_MASTER/CFE_XML
  • Версия EDT (ring): edt@2021.2.0:x86_64
  • Имя сервера MS SQL: SRV_SQL
  • Имя базы MS SQL: TST_TEY
  • Имя пользователя MS SQL: user_SQL
  • Пароль пользователя MS SQL: pass_SQL
  • Имя пользователя базы 1С: user_1C
  • Пароль пользователя базы 1С: pass_1C
  • Имя расширения конфигурации: _скРасширение
  • Каталог лога утилиты ibcmd: C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA

 

  1. Jenkins: Получение файлов необходимой ветки из удаленного репозитария в локальный каталог

 

Как установить и запустить Jenkins, можно найти на просторах интернета, информации по этому поводу довольно много. Самое главное это то, что данный инструмент абсолютно бесплатный. Здесь же я покажу непосредственно само задание, как оно настроено у нас. Создается задача (item) свободной конфигурации, назовем ее к примеру «MASTER_XML_FILES_FROM_GIT» и выделим соответствующим тип (задача со свободной конфигурацией).

 

 

Пишем небольшое описание и сразу ставим флаг «Удалять устаревшие сборки» для того, чтобы ограничить хранение истории выполнения данного задания до 5-ти:

 

 

Далее – Управление исходным кодом. В моем случае - bitbucket server, credentials – учетная запись в  bitbucket (надо завести отдельно), instanceBITBUCKET (единственный выбор), Project name – имя проекта в GIT, Repository name – имя репозитория  в GIT, Clone from – Primary Server (единственный выбор), Branch Specifier - */master (по умолчанию, если ветка другая, то аналогично ее путь в репозитории).

 

 

Триггеры сборки - ставим флаг «Опрашивать SCM об изменениях» и указываем расписание. Указанные настройки говорят о том, что каждый час с 6-ти утра до 23-х вечера (расписание можете указать свое, формат расписания можно посмотреть, нажав знак вопроса), задание будет опрашивать ветку master удаленного репозитария на изменение и, если она изменилась, – обновлять локальный каталог на машине (на котором крутится Jenkins).

 

 

На этом в принципе настройку первого пункта можно считать завершенной. Сохраняем и видим наше задание.

 

 

Как видно на скриншоте, кроме ветки master, настроены аналогичные задания на другие рабочие ветки (под каждого разработчика). Выгруженные файлы проекта из удаленного репозитария будут выгружены в рабочий каталог Jenkins в папку с именем наименования задания. В нашем случае это C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT

 

 

  1. EDT ring: Конвертация файлов формата EDT в формат XML файлов конфигурации

 

2.1 Сначала подготовим каталоги XML файлов конфигурации и расширения, куда будут выгружены файлы из локального проекта EDT -  удалим их полностью (можно вместо удаления каталогов очищать вместо rd использовать del, но это дольше), чтобы не было конфликтов и наложений при выгрузке. Далее ring снова создаст эти каталоги

   rd "C:/1c/EDT/GIT_ORIGIN_TEY/CF_XML" /S /Q

   rd "C:/1c/EDT/GIT_ORIGIN_TEY/CFE_XML" /S /Q 

 

  1. 2.2 Выгружаем конфигурацию проекта EDT в XML файлы конфигурации

 

>CALL ring edt@2021.2.0:x86_64 workspace export --project           C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU --configuration- files "C:/1c/EDT/GIT_ORIGIN_MASTER/CF_XML" --workspace-location C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU

 

  1. 2.3 Выгружаем расширение проекта EDT в XML файлы конфигурации

 

>CALL ring edt@2021.2.0:x86_64 workspace export --project C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU._скРасширение --configuration-files "C:/1c/EDT/GIT_ORIGIN_MASTER/CFE_XML" --workspace-location C:/jenkinsSlave/workspace/MASTER_XML_FILES_FROM_GIT/AVC_DU._скРасширение

 

Если настроить эти скрипты в Jenkins в pipeline, то выглядит как на рисунке ниже (информативно, структурировано и красиво). Текст задания данного скрипта в Jenkins выложен в приложенных файлах. Но вы можете использовать любой способ запуска и контроля данных команд.

 

 

  1. Ibcmd: Быстрое обновление базы данных из XML файлов конфигурации непосредственно через СУБД (MS SQL)

 

3.1. Импорт конфигурации

 

>ibcmd infobase config import --dbms=MSSQLServer --db-server=SRV_SQL --db-name=TST_TEY --db-user=user_SQL --db-pwd="pass_SQL" -u user_1C -P pass_1C C:/1c/EDT/GIT_ORIGIN_MASTER/CF_XML --data=C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA

 

3.2. Обновление конфигурации

 

>ibcmd infobase config apply --dbms=MSSQLServer --db-server=SRV_SQL --db-name=TST_TEY --db-user=user_SQL --db-pwd="pass_SQL" -u user_1C -P pass_1C --data=C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA --force

 

3.3. Импорт расширения

 

>ibcmd infobase config import --dbms=MSSQLServer --db-server=SRV_SQL --db-name=TST_TEY --db-user=user_SQL --db-pwd="pass_SQL" -u user_1C -P pass_1C C:/1c/EDT/GIT_ORIGIN_MASTER/CFE_XML --extension=_скРасширение --data=C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA

 

3.4. Обновление расширения

 

>ibcmd infobase config apply --dbms=MSSQLServer --db-server=SRV_SQL --db-name=TST_TEY --db-user=user_SQL --db-pwd="pass_SQL" -u user_1C -P pass_1C --extension=_скРасширеие --data=C:/jenkinsSlave/workspace/UNI_DB_UPDATE_IBCMD/DATA --force

 

В Jenkins данное задание выглядит так (текст задания данного скрипта в Jenkins выложен в приложенных файлах):

 

 

 

Результат, выводы и дополнения

Время на обновление базы данных сократилось примерно в 10 раз. Если раньше в EDT приходилось синхронизировать ветку, запускать обновление, ждать, подтверждать принятие изменений, опять ждать… И на все это уходило примерно около часа. То теперь это занимает 5-6 минут одной кнопкой, в том числе, включает в себя подтверждение принятия изменений. В расчет не беру первые два шага, т.к. они автоматически обновляют XML-файлы конфигурации ежечасно (можно и чаще настроить). Но даже если нужно обновить базу сразу после внесения изменений в GIT, то в нашем случае это добавляет 15 минут. В любом случае получается 20 минут против 60-ти (быстрее в 3 раза).

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

Утилита ibcmd содержит в себе проверки корректности XML-файлов. Что попало грузить не будет. Если находит в файлах ошибки, обязательно об этом скажет в логах - на это обязательно стоит обращать внимание перед обновлением рабочей базы. Например:

ibcmd быстрое обновление EDT GIT

См. также

Обновление для КА 1.1, ЗУП 2.5, БУХ 2.0: НДС, ЕФС-1, Расчет страховых взносов, Мобилизация, Статистика, Электронные трудовые книжки, 2-НДФЛ, Регламентированная отчетность, Кадровый учет, Прослеживаемость импортных товаров

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 1С Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

19900 руб.

01.04.2020    142322    670    352    

234

Онлайн-интенсив "DevOps для 1С". с 5 февраля по 19 марта 2024 г.

DevOps для 1С DevOps и автоматизация разработки Программист Стажер Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

9000 руб.

20.06.2023    16942    1    3    

251

Автотесты для типовых конфигураций ERP Управление предприятием 2 и Комплексная автоматизация 2 (для vanessa automation)

Тестирование QA DevOps и автоматизация разработки Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.16.115.

2220 руб.

04.07.2022    7276    32    1    

25

Системы контроля версий для 1С-разработчиков.

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Программист Стажер Платформа 1С v8.3 Платные (руб)

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9921    81    4    

114

Управление сборкой. Расширение для конфигурации СППР

DevOps и автоматизация разработки Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Подсистема «Управление сборкой GLI» предназначена для динамического формирования сборочных линий Gitlab и отслеживания процесса доработок систем на базе1С:Предприятия Позволяет упростить выпуск новых релизов системы, подготовить описание доработок системы. Интегрируется с GitLab API по событиям Push, Merge-request, Pipeline. Уведомляет пользователей о результатах сборки/тестирования сборочных конвейеров через СВ, либо при её недоступности или отсутствию по E-Mail. Поможет при отправке исправлений ошибок в общую базу тестирования, сформирует запросы на слияние в ветку версии только по протестированному и подтверждённому функционалу. Подсистема рассчитана исключительно на клиент - серверную архитектуру тестовых ИБ. Поддерживаемая версии СППР 2.0.4.15, платформа не ниже 8.3.17.1549, 2.0.7.3 / не ниже 8.3.21.1664, начиная с релиза 1.0.4.30 требуется платформа не ниже 8.3.23 рекомендуемый релиз 8.3.23.1997

7000 руб.

26.08.2022    11240    8    5    

32

Автотесты 1С для типовых конфигураций Бухгалтерия предприятия КОРП 3.0 и Бухгалтерия предприятия 3.0 (vanessa automation)

Тестирование QA DevOps и автоматизация разработки Программист Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.144.49.

1728 руб.

20.01.2022    6957    11    0    

10

Планы обмена VS История данных

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    8179    dsdred    44    

119
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. YA_443979581 15.07.22 15:28 Сейчас в теме
Какой размер CF такой конфигурации?
Почему нельзя воспользоваться vanessa-runner и сохранить конфигурацию в CF и загрузить CF на каждую базу?
2. Bitnikov 389 15.07.22 17:40 Сейчас в теме
(1) Размер cf 200 Мб. Выгруженные xml файлы этой конфигурации 1.2 Гб.
ibcmd будет быстрее, наверное даже гораздо быстрее, чем подготовка cf обновление через конфигуратор.
Если есть возможность проверить на время vanessa-runner с ibcmd и написать результат - было бы здорово.
Дмитрий74Чел; +1 Ответить
14. fatman78 17 28.07.22 20:42 Сейчас в теме
(2) Каким образом наличие дополнительного компонента MSSQLServer в связке с ibcmd ускоряет процесс конвертации? Чем использование файлового варианта ibcmd не устроило?

upd: Судя по всему в статье имеется ввиду обновление конфигурации баз 1С из файлов проекта EDT на тестовом сервере или ни дай бог на Проде в автоматическом режиме . Если нет, и это делается для обновления конфигураций локальных баз разработчиков, то я не совсем понимаю зачем это нужно пихать в jenkins и делать в автоматическом режиме. Напишите пож-та для каких типов баз это используется.
15. Bitnikov 389 04.08.22 11:01 Сейчас в теме
(14) У нас разработка ведется на серверных базах MS SQL. Суть указана в заголовке статьи - быстрое обновление базы 1С (из ветки GITа). Прирост скорости обновления ощутим. В основном, в целях тестирования доработок. Jenkins тут для удобства. Можно эти скрипты использовать в любой другой системе для автоматизации процесса разработки.
fatman78; +1 Ответить
3. Бэнни 207 16.07.22 07:17 Сейчас в теме
Можно было и покороче написать статью) без растекания мыслью. Ведь основная суть в 3.1, 3.2, 3.3, 3.4
check2; Dach; +2 1 Ответить
17. Дмитрий74Чел 235 18.08.22 11:39 Сейчас в теме
(3) нормальная статья, подробная. Человек старался.
Хотя конечно можно было скопировать эти пункты в начало под кат.
NotSure; Bitnikov; +2 Ответить
4. kamisov 210 17.07.22 12:04 Сейчас в теме
В 8.3.21 использование ibcmd превращается в тот ещё квест. Надо теперь указывать кучу параметров, есть проверка лицензии, просто так в базу уже не лезет.
8. Bitnikov 389 18.07.22 11:58 Сейчас в теме
(4) Работаем пока в 8.3.20, планируем скоро переходить на 8.3.21, проведем тестирование в части ibcmd. Куча параметров не проблема, главное чтобы обновлял так же быстро и без ошибок.
5. cdiamond 235 18.07.22 06:26 Сейчас в теме
с 8.3.21 еще хуже стало у меня: выгрузка в XML и CF ,из одной и той же базы расходятся на два десятка обьектоа конфигурации. Кто еще сталкивался?
6. alex_bob 246 18.07.22 09:33 Сейчас в теме
(5) А можно подробнее, что с чем расходится?
7. cdiamond 235 18.07.22 10:49 Сейчас в теме
(6) Работаю с большими типовыми снятыми с поддержки. Последовательность проверки простая, советую всем его проделать:
1) выгружаем в CF
2) выгружаем в XML
3) загружаем обратно из XML из 2 пункта, уже на этом пункте у меня предупреждения
4) сравниваем с CF из 1 пункта.
Должно быть пусто, но расхождение было всегда, а на новой 8.3.21 их количество начало зашкаливать. Разница может быть на любом объекте конфигурации - на роли, макете, документе, регистре.
Проверял на платформах Windows и Linux - поведение платформы одинаковое. Пока не было и нет внятного объяснения этому чуду, в продуктив технологию выгрузки/загрузки XML не внедряю, а те кто используют возможно сильно рискуют.
PolinkaKMS; Dach; teyana; EliasShy; +4 Ответить
9. Bitnikov 389 18.07.22 14:32 Сейчас в теме
(7) EDT только в таком формате и работает.
Проделал ради эксперимента эти шаги - различий между CF и XML выгрузки не обнаружено.
Писал выше: Размер cf 200 Мб. Выгруженные xml файлы этой конфигурации 1.2 Гб
10. cdiamond 235 18.07.22 16:17 Сейчас в теме
(9) у EDT под капотом все тот же конфигуратор, но в XML он вроде выгружает самостоятельно, в отличие от CF.
11. Dach 378 19.07.22 13:18 Сейчас в теме
(7) на 8.3.20 сталкивался, если выгрузить расширение в файлы и обратно загрузить - слетает часть обработчиков событий элементов форм. Сам код то на месте, в модуле формы, а вот связка кода с конкретным обработчиком действий элемента пропадает.

Ну и отличия при выгрузке-загрузке cf - тоже видел неоднократно.

А на релизе 8.3.19.какой-то у меня вообще после выгрузки в файлы и обратной загрузки конфа просто не загрузилась. Потом на багборде нашел ошибку, оказалось да, такой релиз.

Так что механизм тот еще
16. fatman78 17 04.08.22 15:19 Сейчас в теме
(7)Видел такое - там под капотом формат xml опять сменился - 2.14 стал на платформе 8.3.21. Если пойти еще дальше и сконвертировать XML в формат EDT используя ring 2022.1.0, то при обратной конвертации в xml и загрузке в конфигуратор, появляются битые ссылки (пропадает часть картинок из встроенных библиотек). О чем конфигуратор нам радостно сообщает в виде предупреждений во время загрузки.
12. user1817380 19.07.22 16:39 Сейчас в теме
Добрый день. Подскажите "чайнику", давно не обновляла 1с, что сначала обновлять Конфигурацию или Платформу?
13. user591389_aska_rabota 20.07.22 00:53 Сейчас в теме
Можно в принципе обновить только конфигурацию, обычно этого достаточно.
Платформа обновляется крайне редко, в исключительных случаях


В конфигураторе, в свойствах конфигурации можно посмотреть совместимость - это миним релиз платформы, с которым работает конфигурация(т.е. если в свойствах стоит 8.3.14 а у тебя платформа 8.3.20 то все норм)

Советую обновлять через Конфигурация-поддержка-обновить конфигурацию (меньше вероятность что-либо сломать)
18. 1cnik2 08.12.22 16:50 Сейчас в теме
Всем привет! Коллеги, кто-нибудь сравнивал производительность ibcmd config import и vrunner compile? Что быстрее?
19. PerlAmutor 129 07.01.23 18:23 Сейчас в теме
Сравнил производительность ibcmd по сравнению с Конфигуратором с использованием файлов выгрузки XML ERP 2.5.8. Результаты сильно порадовали.

Загрузка из XML файлов в файловую базу:

Через конфигуратор: 55 минут
Через ibcmd: 10 минут

Сохранение в .cf файл с помощью ibcmd из файловой базы данных: 1 минута (файл 2Гб)

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

// Создание YML файла для файловой базы данных:
ibcmd server config init --db-path="E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309" --db-name="ERP 2.5.8.295+2.5.8.309" "E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309.yml"


// Загрузка из XML с использованием ранее созданного файла настроек YML
ibcmd infobase config import -c "E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309.yml" "E:\git_conf_update_258_295_309\src"


// Выгрузка в .cf файл
ibcmd infobase config save -c "E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309.yml" "E:\1C\ФайловыеБазы\ERP_2_5_8_295_2_5_8_309.cf"


Стоит отметить особенности:
1. В случае загрузки из XML антивирус может потреблять больше чем сам ibcmd или конфигуратор и сильно тормозить процесс (рекомендуется на время отключить)
2. При загрузке XML файлов через Конфигуратор на последнем этапе также создается кэш конфигурации, что в последствии позволяет быстро открыть конфигуратор. Этого не происходит при использовании ibcmd, что в итоге может отнять дополнительное время. Поэтому 10 минут цифра не окончательная, т.к. вам придется подождать создания кэша при входе в конфигуратор. Но это происходит все равно гораздо быстрее, чем грузить XML файлы полностью через Конфигуратор.
amiralnar; worker1c; Bitnikov; +3 Ответить
Оставьте свое сообщение