Меню
Бесплатно
Главная  /  Прошивка  /  1с как установить конфигурацию cf. Установка конфигурации из CF-файла

1с как установить конфигурацию cf. Установка конфигурации из CF-файла

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

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

В следующем окне выбрать пункт Создание новой информационной базы .

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

В следующем окне указываем наименование базы.

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

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

Выполните команду меню Конфигурация > Открыть конфигурацию . Окно программы изменится - в его левой части будет открыто дерево конфигурации . Оно нас пока не интересует. Теперь можно выполнить команду Конфигурация > Загрузить конфигурацию из файла . Эта команда позволяет полностью заместить существующую (в нашем случае пустую)конфигурацию конфигурацией , сохраненной в CF-файле. В появившемся окне, вам нужно указать путь к файлу, в котором хранится конфигурация , которую вы хотите загрузить.

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

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

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

Выгрузка загрузка конфигурационного файла

Для работы с файлами cf потребуется запуск информационной базы в режиме 1С Конфигуратор. Конфигурационный файл выгружается с расширением (*.cf). Как правило, фалы выгружаются не большого размера. Важной особенности файлов cf является, то что они НЕ СОДЕРЖАТ ДАННЫХ . При загрузке конфигурации, текущая конфигурация будет полностью заменена на загружаемую. Для того чтобы выгрузить файл, необходимо в главном меню перейти: Конфигурация->Сохранить конфигурацию в файл . Для того чтобы загрузить конфигурацию нужно перейти: Конфигурация->Загрузить конфигурацию из файла .

Внутренняя структура файла конфигурации (*.cf) не является секретом. Добрые люди давно разобрали его и создали немало интересных утилит, позволяющих работать с этим форматом. На Инфостарте найдется добрый десяток (если не больше) интересных публикаций, так или иначе читающих содержимое *.cf файлов, так что тема эта совсем не новая.

Однако, хорошей, добротной документации на этот формат, к сожалению, совсем немного. На написание данной статьи меня надоумила глубокоуважаемого , который подробно, во всех деталях описал структуру формата файловой ИБ 1С:Предприятия (*.1CD).

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

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

Предыстория

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

  • , автор
  • http://www.richmedia.us/post/2011/01/18/cf-file-format-1c-8-compatible.aspx , если не ошибаюсь, автор -
  • , автор

Терминология

Перейдем непосредственно к теме нашего обсуждения.

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

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

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

Смотрим внутрь

Логической единицей хранения данных внутри контейнера является документ . Документ, это осмысленный законченный набор данных, который можно прочитать и каким-то образом интерпретировать. Я специально не пользуюсь термином «файл », поскольку, это название я приберегу для другой сущности, о которой чуть позже.

Итак, в общих чертах, файл CF (EPF/ERF) представляет собой контейнер , в котором хранятся документы .

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

Структура контейнера

Контейнер включает в себя следующие части (по порядку):

  1. Заголовок контейнера
    1. Адрес первого пустого блока, в который можно добавлять данные
    2. Размер блока по умолчанию
    3. Количество файлов в контейнере
  2. Документ оглавления контейнера
  3. Собственно данные, которые перечислены в оглавлении

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

Структура блока

Блок состоит из заголовка и тела. В заголовке указывается общий размер всего документа, размер текущего блока и адрес (позиция в файле) следующего блока. Сразу за заголовком идет тело блока - собственно, те данные, которые нам нужны. Тело блока имеет ровно ту длину (в байтах), которая указана в заголовке.

Внутри контейнера тут и там встречается волшебная константа, обозначающая некую «пустоту» - это число 0x7fffffff.

Когда мы собираем документ из блоков, то смотрим в заголовке на адрес следующего блока. Если он равен 0x7fffffff, то «следующего» блока нет, этот - последний.

Константа 0x7fffffff - это значение INT_MAX, т.е. максимальное значение 4-байтового целого числа со знаком.

Логические «файлы»

Я упоминал, что термин «файл » я приберегу до лучших времен. Эти времена настали:)

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

Файлотличается от «документа» тем, что у него есть имя, и по этому имени к нему можно обращаться. Если мы будем разбирать содержимое конфигурации и строить дерево метаданных, то найдем внутри файлов очень много упоминаний других файлов. Процедура чтения конфигурации оперирует именами файлов и ссылается на них по имени.

Если подвести итоги, то можно сказать следующее: в контейнере лежат разные документы , но некоторые из них имеют имя. Такие документы называются «файлы » и они носят не служебный, а непосредственно прикладной характер. Именно файлы хранят информацию о метаданных конфигурации.

Компоненты файла

Каждый файл состоит из двух документов :

  1. Документ атрибутов, который содержит имя файла и даты создания/изменения
  2. Документ содержимого, который содержит собственно тело файла

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

  1. Адрес (смещение в файле) документа атрибутов
  2. Адрес (смещение в файле) документа содержимого
  3. Число 0x7fffffff (маркер конца записи).

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

Запись оглавления представляет собой 2 значащих числа INT32. Первое число - это адрес документа атрибутов файла. По этому адресу мы попадем на начало 1-го блока документа атрибутов. Из документа атрибутов мы можем узнать имя файла. Второе число - адрес документа содержимого файла. По этому адресу мы попадем на начало 1-го блока документа содержимого, откуда будем читать непосредственно данные файла.

Особенности сжатия данных.

Контейнер может содержать самые разные файлы. Как правило, это текстовые файлы в кодировке UTF-8. Однако среди файлов контейнера могут встречаться другие файлы-контейнеры. Проще всего провести аналогию с файловой системой. Контейнер - это директория, а файлы внутри контейнера - это ее содержимое. Директория может содержать другие директории.

Корневой каталог этой «файловой системы» - это сам файл *.CF. Внутри него могут быть другие файлы-контейнеры, по сути - вложенные директории, которые считываются ровно по тому же самому алгоритму и имеют ровно ту же самую структуру.

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

Цепочка свободных блоков

В результате удаления каких-либо данных из контейнера в нем могут образовываться пустые места. Эти свободные места связываются в цепочку и образуют этакий «документ», данные которого отсутствуют. Иными словами, свободные блоки связаны друг с другом по тому же принципу, по которому связаны друг с другом блоки документов. Адрес первого свободного блока указывается в самом начале заголовка контейнера. Если адрес свободного блока равен INT_MAX, то это значит, что в середине контейнера нет свободных (пустых) блоков.

Краткий итог по теоретической части

  1. Файл CF(EPF/ERF) записан в формате «контейнера»
  2. Контейнер начинается с заголовка
  3. Все содержимое контейнера, за исключением заголовка, записано в виде «документов»
  4. Документ может быть разбит на блоки
  5. Документ начинается с заголовка блока, по которому можно узнать, как прочитать весь документ целиком
  6. Сразу за заголовком контейнера идет документ оглавления
  7. Оглавление, это набор записей, которые указывают на «файлы » внутри контейнера
  8. Каждый файл состоит из двух документов - документа атрибутов, где указано имя этого файла и документа содержимого, где, собственно, расположены данные файла.
  9. Каждая запись оглавления содержит 2 адреса. Первый - адрес документа атрибутов файла, второй - адрес документа содержимого.
  10. Контейнер может содержать вложенные контейнеры (как бы, вложенные папки)
  11. Файлы внутри корневого контейнера сжаты по алгоритму Deflate, файлы внутри вложенных контейнеров записаны без сжатия.

Давайте уже пощупаем байты

Итак, настало время рассмотреть, как конкретно устроены все упомянутые выше сущности.

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

Чтение документа по блокам

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

Итак, заголовок блока представляет собой строку длиной 31 байт. Строка эта имеет следующий вид:

[Размер всего документа][Пробел][Размер текущего блока][Пробел][Адрес следующего блока][Пробел] , где:

  • CRLF - стандартный перевод строки Windows, пара символов \r\n (0x0D,0x0A)
  • Размер всего документа - общая длина документа в байтах. Записана в виде строкового представления hex-числа. Длина - 8 байт.
  • Пробел - пробел. Символ 0x20
  • Размер текущего блока - длина тела блока в байтах. Записана также в виде строкового представления числа INT32 в hex-формате. Если документ состоит из единственного блока, то размер всего документа либо меньше, либо совпадает с размером текущего блока (что логично)
  • Адрес следующего блока - адрес по которому расположен очередной блок документа. Если адрес следующего блока равен INT_MAX, то это значит, что следующего блока нет. Адрес следующего блока также записан в виде строкового представления числа.

Сразу за заголовком блока идет тело блока, которое имеет длину, указанную в поле «Размер текущего блока».

Рассмотрим рисунок: длина всего документа составляет 0x54 байта, красной рамкой выделены эти 0x54 байта. Это данные документа. Длина блока составляет 0x200 байт, т.е. больше чем длина самого документа. По этой причине остальные данные блока составляют "нули" неиспользуемого пространства. Значащие байты - это те, которые отмечены красной рамкой.

Если длина документа больше длины блока, то нужно прочитать следующий блок. Если в поле «Адрес следующего блока» записано значение, отличное от 0x7fffffff, то необходимо считать текущий блок, затем перейти по этому адресу и считать другой блок. Если в этом блоке также будет задан адрес следующего блока, то надо перейти и туда. Таким образом, формируется «цепочка» блоков, из которых состоит документ.

Чтение необходимо продолжать до тех пор, пока в поле «Адрес следующего блока» не встретится значение 0x7fffffff или пока не будет считано количество байт, указанное в поле «Размер всего документа».

Поле «Размер всего документа» имеет смысл только для первого блока. Во всех последующих блоках документа оно имеет значение 0x00000000.

Формат заголовка контейнера

Заголовок контейнера имеет длину 16 байт и состоит из следующих полей:

Поле

Пояснение

Адрес первого свободного блока

INT32 (4 байта)

Смещение, по которому начинается цепочка свободных блоков

Размер блока по умолчанию

INT32 (4 байта)

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

Поле неизвестного назначения (см. комментарии к статье) Часто совпадает с количеством файлов в контейнере

INT32 (4 байта)

Число, отражающее некоторую величину, как правило, совпадающую с количеством файлов в контейнере, однако, коллеги в комментариях считают, что это не совсем так. На алгоритм интерпретации контейнера данное число никак не влияет, его можно игнорировать.

Зарезервированное поле

INT32 (4 байта)

Всегда равно 0 (всегда ли?)

Формат записи документа оглавления

Формат документа атрибутов файла

Документ атрибутов описывает имя файла и даты его создания/изменения.

Поле

Пояснение

Время создания файла

UINT64 (8 байт)

Время создания файла, выраженное в количестве 100-микросекундных интервалов, прошедших с начала нашей эры (01.01.0001 00:00:00)

Время изменения файла

UINT64 (8 байт)

Аналогично

Зарезервированное поле

INT32 (4 байта)

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

Имя файла

Строка в формате UTF-16

Занимает все оставшееся тело документа (за вычетом 2-х дат и резервного поля)

Принцип чтения контейнера

  1. Собрать из блоков документ оглавления и прочитать его
  2. Обойти все записи в документе оглавления и прочитать документы атрибутов (имена) файлов контейнера
  3. Сопоставить каждому полученному имени адрес документа содержимого
  4. На выходе получается соответствие «Имя файла» -> «Адрес содержимого»

Чтение файлов

  1. По имени файла получить из оглавления адрес документа содержимого
  2. Собрать из блоков документ содержимого
  3. Если это корневой контейнер, то распаковать документ содержимого (он сжат)
  4. Готово. Полученный результат является данными искомого файла.

Обновление от 25.02.2014

В заключение

Данная статья не является истиной в последней инстанции, вероятно, в ней есть даже ошибки. Тем не менее, если данная тема Вам интересна, то я надеюсь, что эта статья поможет вам в реализации ваших проектов. Удачи!

В этой статье я научу Вас создавать cf файл конфигурации 1С. Что это за файл, и для каких целей он нужен? Ответим на первый вопрос: в данный файл сохраняется конфигурация 1С. Для каких целей чаще всего его используют? Для того, чтобы загрузить сохраненную конфигурацию в пустую базу. Но есть еще одно, назовем его так, «нестандартное применение».

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

А в этой статье мы научимся создавать сf файл. Для этого необходимо войти в .

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

Для того чтобы создать файл cf, Вам необходимо открыть конфигурацию, если она закрыта. Очень часто она может быть закрыта. Чтобы её открыть, нажмем кнопку – открыть конфигурацию.

Конфигурация открылась, слева Вы можете увидеть список метаданных.

Если же Вы зашли в конфигуратор и увидели слева список метаданных, то это значит, что конфигурация уже открыта, и Вам ее открывать не надо. Обычно, когда она открыта, активна кнопка «Закрыть конфигурацию»

Если данная кнопка активна, но списка метаданных нет, то значит, что она просто не отображается.

Идем в меню конфигурация, в котором выбираем пункт «Сохранить конфигурацию в файл»

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

Все файл сохранился.

Теперь с его помощью Вы сможете обновлять аналогичные конфигурации.

Посмотреть на процесс создания cf-файла «в живую» можно на видео ниже:


Как обновлять конфигурацию 1С при помощи cf-файла читайте мою следующую статью:

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: и «Основы разработки в 1С: Такси»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника;

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы.

Ниже будет подробно описан процесс установки типовой конфигурации в системе «1С:Предприятие» 8.3 (в версиях 8.2 и 8.1 действия аналогичны) в ОС семейства Windows, на примере решения «Бухгалтерия предприятия, редакция 3.0 ». Т. к. установка типовой конфигурации происходит из шаблонов конфигурации, будет последовательно описан алгоритм установки шаблона, а затем создание новой базы данных из установленного шаблона.

1. Установка шаблона

Итак, как уже говорилось раннее, информационные баз создаются из шаблонов. Шаблон представляет собой совокупность файлов поставки, файла манифеста и сопутствующих файлов, из которых производится создание информационной базы. Все шаблоны должны быть установлены на компьютер пользователя в какой-либо каталог (таких каталогов может быть несколько). Для добавлении нового шаблона необходима специальная программа установки конфигурации (дистрибутив). Взять программу установки, как правило, можно на диске ИТС или на сайте поддержки пользователей системы «1С:Предприятие».

Откроем каталог с программой установки типовой конфигурации и запустим файл setup.exe .

Запустится программа установки конфигурации. Нажимаем «Далее » на начальном окне программы.

Теперь выбираем каталог, где будет храниться шаблон. По умолчанию программа предлагает нам каталог %APPDATA%\1C\1Cv8\tmplts . Данный каталог доступен только текущему пользователю Windows. Если необходимо, чтобы шаблон конфигурации был доступен всем пользователем данного компьютера, следует изменить путь установки шаблона на директорию, к которой другие пользователи операционной системы. Выбрав необходимый каталог, жмем «Далее ».

Дожидаемся окончания установки и нажимаем «Готово », для завершения работы мастера.

Шаблоны конфигураций находятся в подкаталогах определенной структуры — каждый поставщик конфигураций выбирает подкаталог, основываясь на наименовании своей организации (например, фирма «1С» помещает свои решения в каталог «1С»), затем идет конфигурации, а внутри данных подкаталогов производится разделение по каталогам, соответствующим версиям выпускаемых конфигураций. Таким образом, полный путь к шаблону конфигурации в нашем случае будет следующим: C:\1C_BASE\tmplts\1c\Accounting\3_0_28_3\ , где:

  • C:\1C_BASE\tmplts\ — общий каталог хранения шаблонов
  • …\1c\ — каталог с именем поставщика решений
  • …\Accounting\ —каталог с псевдонимом конфигурации
  • …\3_0_28_3\ — каталог с версией текущей конфигурации

Конечный каталог, содержит несколько служебных файлов, среди которых:


2. Создание новой базы данных из шаблона

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

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

В следующем окне увидим список установленных в указанном раннее каталоге шаблонов. В соответствии с фалом манифеста, для установленного шаблона возможно 2 варианта создания информационной базы — новой (чистой) базы данных, и базы с демо-данными для демонстрации возможностей конфигурации. (Если планируется создать информационную базу для последующей загрузки в нее данных из файла выгрузки (*.dt) или для разработки новой конфигурации, то нужно выбрать пункт «Создание информационной базы без конфигурации.. .».) Выбираем необходимый нам вариант и нажимаем «Далее ».

Вводим имя базы данных (как она будет отображаться в списке) и выбираем тип расположения информационной базы — файловый (на компьютере пользователя или в локальной сети) или клиент-серверный (на сервере ). В данном примере выберем файловый вариант работы (подробно про добавление базы данных на сервер 1С:Предприятие я писал ), установив соответствующий переключатель и жмем «Далее ».

Указываем путь расположения файлов базы данных и снова нажимаем «Далее ».

На последней странице указываем параметры запуска для добавляемой базы. Из файла манифеста проставляется версия запускаемого клиента «1С:Предприятие». Если версия конфигурации отличается от версии 1С (например, конфигурация для версии 8.2, а требуется запускать из под клиента версии 8.3) следует изменить этот параметр, либо установить также и «1С:Предприятие» нужной версии. Определившись с параметрами нажимаем «Готово » для завершения работы мастера, после чего запуститься процесс создания новой базы (по сути загрузка данных из файла 1Cv8new.dt или 1Cv8.dt ), который может занять некоторое время.

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

Помогла ли Вам данная статья?