EDT 1С: что это и как начать разработку

Дата: 14.10.2026 15:18:35
1C:EDT
Конфигуратор
Групповая разработка
Git
Программирование 1С
Комментарий:
0
Платформа:
8.3
Конфигурация:
Любая
Формы:
Любые

EDT 1С (1C:Enterprise Development Tools, 1C:EDT) — среда разработки 1С от фирмы «1С» на базе Eclipse. В отличие от конфигуратора она хранит конфигурацию не в информационной базе, а в файлах проекта: отсюда Git, проверки кода на лету, поиск ссылок и рефакторинг. Поддерживаются платформы 1С 8.3 (начиная с 8.3.8) и 8.5. Вопрос «переходить ли» обычно возникает, когда над конфигурацией работают несколько человек, захваты в хранилище мешают, а заказчик хочет ревью кода и сборку по коммиту.

Что такое EDT 1С и чем она отличается от конфигуратора

В конфигураторе источник правды — база. В EDT — проект на диске, а информационная база — место, куда среда выкладывает конфигурацию для запуска и отладки.

Конфигуратор1C:EDT
Где живёт конфигурацияВ информационной базе, для команды — в хранилищеВ файлах проекта (.mdo, .bsl, формы), обычно в Git
Командная работаЗахват и помещение объектовВетки, слияния, код-ревью
Ошибки в кодеПо команде проверки модуляПодсветка при наборе, вычисление типов, строгая типизация
НавигацияПоиск ссылок на объект, глобальный поискПереход к определению, поиск ссылок на методы и объекты, переименование с правкой обращений
Стандарты разработкиОтдельно, например через АПК («Автоматизированная проверка конфигураций»)Встроенные проверки и плагин стандартов
Вход в задачуОткрыли базу и правитеИмпорт и сборка проекта, на большой типовой — долго

Формат проекта не совпадает с XML-выгрузкой конфигуратора, где описание лежит в Catalogs/Номенклатура.xml, а модули — в подкаталогах Ext:

trade/                                  проект конфигурации
├── DT-INF/
│   └── PROJECT.PMF                     версия платформы проекта
└── src/
    ├── Configuration/
    │   ├── Configuration.mdo           свойства конфигурации
    │   └── ManagedApplicationModule.bsl
    ├── Catalogs/
    │   └── Номенклатура/
    │       ├── Номенклатура.mdo        описание справочника
    │       ├── ObjectModule.bsl
    │       ├── ManagerModule.bsl
    │       └── Forms/ФормаЭлемента/
    │           ├── Form.form           форма
    │           └── Module.bsl          модуль формы
    └── CommonModules/
        └── ОбщегоНазначения/
            ├── ОбщегоНазначения.mdo
            └── Module.bsl

Требования к железу: честно о памяти

Главный минус EDT — память: среда написана на Java и держит модель конфигурации в ОЗУ. Профили из системных требований на edt.1c.ru (ОС только 64-разрядная: Windows 10+, Ubuntu 18.04 LTS+, macOS 10.15+):

ПрофильОЗУВыделить EDTРассчитан на
Минимальныйот 4 ГБ—6 300 объектов, 2 700 форм, 5 800 модулей, 200 ролей
Рекомендуемыйот 8 ГБ6 ГБ8 200 объектов, 4 000 форм, 8 800 модулей, 300 ролей
Продвинутыйот 16 ГБот 10 ГБ12 500 объектов, 6 300 форм, 13 800 модулей, 1 200 ролей

Для рабочих областей советуют SSD. Свою конфигурацию сравнивают с таблицей по XML-выгрузке («Конфигурация → Выгрузить конфигурацию в файлы»); скрипт считает показатели и берёт первый профиль, в который она укладывается по всем четырём:

# edt-profile.ps1: оценка размера конфигурации для выбора профиля 1C:EDT.
# Методика со страницы системных требований edt.1c.ru: объекты - папки в каталогах
# верхнего уровня выгрузки (кроме Ext), формы - Form.xml, модули - *.bsl, роли - Roles.
# Сохраните файл в UTF-8 с BOM, иначе Windows PowerShell 5.1 исказит кириллицу.
param(
    [Parameter(Mandatory = $true)]
    [string]$DumpDir   # каталог XML-выгрузки конфигурации
)

if (-not (Test-Path -LiteralPath (Join-Path $DumpDir 'Configuration.xml'))) {
    throw "В каталоге $DumpDir нет Configuration.xml - это не выгрузка конфигурации"
}

$objects = 0
foreach ($typeDir in Get-ChildItem -LiteralPath $DumpDir -Directory) {
    if ($typeDir.Name -eq 'Ext') { continue }
    $objects += @(Get-ChildItem -LiteralPath $typeDir.FullName -Directory).Count
}
$forms   = @(Get-ChildItem -LiteralPath $DumpDir -Recurse -File -Filter 'Form.xml').Count
$modules = @(Get-ChildItem -LiteralPath $DumpDir -Recurse -File -Filter '*.bsl').Count
$roles   = 0
$rolesDir = Join-Path $DumpDir 'Roles'
if (Test-Path -LiteralPath $rolesDir) {
    $roles = @(Get-ChildItem -LiteralPath $rolesDir -File -Filter '*.xml').Count
}

# Пороги из таблицы профилей; перед использованием сверьте с актуальной страницей
$profiles = @(
    @{ Name = 'минимальный (ОЗУ от 4 ГБ)';                    Objects = 6300;  Forms = 2700; Modules = 5800;  Roles = 200 },
    @{ Name = 'рекомендуемый (ОЗУ от 8 ГБ, для EDT 6 ГБ)';    Objects = 8200;  Forms = 4000; Modules = 8800;  Roles = 300 },
    @{ Name = 'продвинутый (ОЗУ от 16 ГБ, для EDT от 10 ГБ)'; Objects = 12500; Forms = 6300; Modules = 13800; Roles = 1200 }
)

"Объектов: $objects; форм: $forms; модулей: $modules; ролей: $roles"
$fit = $profiles | Where-Object {
    $objects -le $_.Objects -and $forms -le $_.Forms -and
    $modules -le $_.Modules -and $roles -le $_.Roles
} | Select-Object -First 1
if ($fit) {
    "Профиль: $($fit.Name)"
} else {
    'Больше верхней строки таблицы: продвинутый профиль и память с запасом'
}

Для ориентира мы посчитали так выгрузки УТ 11.4 и КА 2.5. У УТ около 6,6 тыс. объектов, 3,4 тыс. форм, 8,5 тыс. модулей и 790 ролей — по ролям это уже продвинутый профиль. У КА 2.5 около 14,7 тыс. объектов, 9,8 тыс. форм, 22,7 тыс. модулей и 1,7 тыс. ролей — выше верхней строки таблицы, так что для КА и ERP 16 ГБ — нижняя граница, а не запас.

По умолчанию Java-машине EDT отдают не больше 4 ГБ: для больших конфигураций в 1cedt.ini (каталог установленной версии) строку -Xmx4096m меняют на -Xmx8g или больше, в CLI — ключ -vmargs -Xmx8g. Новая версия ставится в свой каталог, так что после обновления настройку повторяют. Первый импорт большой типовой и полная сборка проекта идут ощутимое время.

Установка через 1C:EDT Start

Дистрибутив — на edt.1c.ru, раздел «Скачать 1C:EDT». Ставится 1C:EDT Start — программа запуска и обновления: она скачивает нужные версии среды и запускает их. Основной дистрибутив небольшой, компоненты докачиваются из интернета; есть вариант для установки без интернета.

  • Java: с 1C:EDT 2025.1 ставится вместе со средой; для 2024.1–2024.2 нужна 64-разрядная JDK 17 (Axiom 17 Full JDK или Azul Zulu 17 JDK FX).
  • Платформа 1С:Предприятие ставится отдельно, той версии, под которую ведётся проект: через неё EDT работает с базами, запускает и отлаживает.
  • Команде лучше сидеть на одной версии EDT и обновляться вместе.

Проект и информационная база: импорт, обновление, запуск

Работа с EDT начинается с проекта. Его создают импортом из информационной базы (EDT получит конфигурацию через платформу) или из каталога XML-выгрузки: «Файл → Импорт», а базы удобнее подключать в панели «Информационные базы». Расширение — отдельный проект, привязанный к проекту конфигурации как к базовому; внешние отчёты и обработки — ещё один тип проекта.

Как работать в 1С EDT каждый день: правите проект и запускаете, а перед запуском среда обновляет конфигурацию связанной базы из проекта — сама или с вопросом, по настройке. Правки, внесённые в эту базу через конфигуратор, при обновлении перезапишутся. Отладка привычная (точки останова, вычисление выражений, стек), но идёт по HTTP: сервер клиент-серверной базы запускают с ключами -debug -http, см. отладку на сервере.

1cedtcli: проект из базы и сборка cf из командной строки

Для скриптов и CI есть 1C:EDT CLI — 1cedtcli.exe в каталоге компонента, например C:\Program Files\1C\1CE\components\1c-edt-<версия>-x86_64\. -data задаёт рабочую область, -command — команду и стоит последним. Без -command откроется интерактивный режим, с -file команды берутся из файла. Справка — 1cedtcli -h, коды возврата — help --status-codes.

Первый скрипт делает проект из рабочей базы: выгрузка в XML, импорт, проверка.

@echo off
chcp 65001 >nul
rem edt-from-ib.cmd: проект 1C:EDT из рабочей базы - выгрузка в XML, импорт, проверка.
rem Файл в UTF-8 без BOM. Логин и пароль базы - в переменных V8_USER и V8_PWD.
setlocal
set "V8=C:\Program Files\1cv8\8.3.27.<сборка>\bin\1cv8.exe"
set "EDTCLI=C:\Program Files\1C\1CE\components\1c-edt-<версия>-x86_64\1cedtcli.exe"
set "WORK=D:\edt"
set "XML=%WORK%\xml"
set "WS=%WORK%\workspace"
set "PROJECT=%WORK%\git\trade"
if not exist "%WORK%\git" mkdir "%WORK%\git"

rem 1. Выгрузка конфигурации в XML. Старый каталог удаляем, чтобы не остались файлы удалённых объектов.
rem    Для файловой базы вместо /S "srv01\trade" укажите /F "каталог базы"
if exist "%XML%" rd /s /q "%XML%"
"%V8%" DESIGNER /S "srv01\trade" /N "%V8_USER%" /P "%V8_PWD%" /DisableStartupDialogs ^
    /DumpConfigToFiles "%XML%" /Out "%WORK%\dump.log"
if errorlevel 1 (
    echo Выгрузка не удалась, смотрите %WORK%\dump.log
    exit /b 1
)

rem 2. Импорт XML в новый проект. Рабочая область не должна быть открыта в EDT
"%EDTCLI%" -data "%WS%" -vmargs -Xmx8g -command import --configuration-files "%XML%" --project "%PROJECT%"
if errorlevel 1 (
    echo Импорт не удался
    exit /b 1
)

rem 3. Проверка проекта. Если файл результата уже есть, validate завершится ошибкой
if exist "%WORK%\validate.tsv" del "%WORK%\validate.tsv"
"%EDTCLI%" -data "%WS%" -command validate --file "%WORK%\validate.tsv" --project-list "%PROJECT%"
echo Проверка завершена, код %errorlevel%, результат в %WORK%\validate.tsv
endlocal

Второй — обратный путь, когда заказчику нужен cf: экспорт проекта в XML, загрузка в пустую файловую базу, сохранение cf.

@echo off
chcp 65001 >nul
rem edt-to-cf.cmd: cf-файл из проекта 1C:EDT - экспорт в XML, загрузка в пустую базу, сохранение.
setlocal
set "V8=C:\Program Files\1cv8\8.3.27.<сборка>\bin\1cv8.exe"
set "EDTCLI=C:\Program Files\1C\1CE\components\1c-edt-<версия>-x86_64\1cedtcli.exe"
set "WORK=D:\edt"
set "WS=%WORK%\workspace"
set "PROJECT=%WORK%\git\trade"
set "OUT=%WORK%\export"
set "BUILDIB=%WORK%\build-ib"

rem 1. Экспорт проекта в XML-файлы конфигурации
if exist "%OUT%" rd /s /q "%OUT%"
"%EDTCLI%" -data "%WS%" -command export --project "%PROJECT%" --configuration-files "%OUT%"
if errorlevel 1 (
    echo Экспорт не удался
    exit /b 1
)

rem 2. Пустая файловая база для сборки - создаётся при первом запуске
if not exist "%BUILDIB%\1Cv8.1CD" (
    "%V8%" CREATEINFOBASE File="%BUILDIB%"; /DisableStartupDialogs /Out "%WORK%\create.log"
    if errorlevel 1 (
        echo Базу сборки создать не удалось, смотрите %WORK%\create.log
        exit /b 1
    )
)

rem 3. Загрузка XML в конфигурацию базы сборки и сохранение в cf
"%V8%" DESIGNER /F "%BUILDIB%" /DisableStartupDialogs /LoadConfigFromFiles "%OUT%" /Out "%WORK%\load.log"
if errorlevel 1 (
    echo Загрузка не удалась, смотрите %WORK%\load.log
    exit /b 1
)
"%V8%" DESIGNER /F "%BUILDIB%" /DisableStartupDialogs /DumpCfg "%WORK%\trade.cf" /Out "%WORK%\cf.log"
if errorlevel 1 (
    echo Сохранение cf не удалось, смотрите %WORK%\cf.log
    exit /b 1
)
echo Готово: %WORK%\trade.cf
endlocal

Проект из Git сначала подключают к рабочей области: import --project <путь>. Для расширения добавьте -Extension ИмяРасширения к /LoadConfigFromFiles и /DumpCfg (файл .cfe), а базу сборки создайте из cf типовой (/UseTemplate) — расширению нужны заимствованные объекты. Код возврата CLI сверяйте с выводом: в трекере EDT были жалобы на ноль при ошибке.

Что EDT даёт разработчику 1С в коде

Ошибки видны при наборе, без отдельной проверки модуля. Среда вычисляет типы по коду и документирующим комментариям, поэтому подсказка знает ключи структуры, которую вернула функция. Сверху — проверки: встроенные и из плагина стандартов v8-code-style (в справке — 1C:Code style V8; есть ли он в вашей сборке, видно в списке установленных компонентов). Из других плагинов — 1C:Language Tool для перевода конфигураций и сторонние EDT.Comfort и dt-project-checks; ставьте их под свою версию EDT. Git встроен в среду, а с хранилищем конфигурации его синхронизируют отдельными утилитами вроде GitSync.

Привычный для конфигуратора код EDT пометит проверкой query-in-loop — запрос в цикле:

// Было: запрос на каждую позицию. Конфигуратор промолчит, EDT пометит query-in-loop.
Функция АртикулыНоменклатуры(СписокНоменклатуры) Экспорт

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

	Возврат Результат;

КонецФункции

Тот же код в серверном общем модуле, переписанный под EDT: один запрос, описания по стандарту, строгая типизация.

//@strict-types

#Область ПрограммныйИнтерфейс

// Возвращает артикулы и единицы измерения номенклатуры одним запросом.
//
// Параметры:
//  СписокНоменклатуры - Массив из СправочникСсылка.Номенклатура - позиции, по которым нужны данные.
//
// Возвращаемое значение:
//  Соответствие из КлючИЗначение:
//   * Ключ - СправочникСсылка.Номенклатура
//   * Значение - см. НовыеДанныеНоменклатуры
//
Функция ДанныеНоменклатуры(СписокНоменклатуры) Экспорт

	Результат = Новый Соответствие;
	Если СписокНоменклатуры.Количество() = 0 Тогда
		Возврат Результат;
	КонецЕсли;

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Номенклатура.Ссылка КАК Ссылка,
	|	Номенклатура.Артикул КАК Артикул,
	|	Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	|	Номенклатура.Ссылка В (&СписокНоменклатуры)";
	Запрос.УстановитьПараметр("СписокНоменклатуры", СписокНоменклатуры);

	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Результат.Вставить(Выборка.Ссылка,
			НовыеДанныеНоменклатуры(Выборка.Артикул, Выборка.ЕдиницаИзмерения));
	КонецЦикла;

	Возврат Результат;

КонецФункции

// Заполняет колонку Артикул в таблице товаров по данным номенклатуры.
//
// Параметры:
//  Товары - ТаблицаЗначений:
//   * Номенклатура - СправочникСсылка.Номенклатура
//   * Артикул - Строка
//
Процедура ЗаполнитьАртикулы(Товары) Экспорт

	Данные = ДанныеНоменклатуры(Товары.ВыгрузитьКолонку("Номенклатура"));
	Для Каждого СтрокаТоваров Из Товары Цикл
		ДанныеПозиции = Данные.Получить(СтрокаТоваров.Номенклатура);
		Если ДанныеПозиции = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		// После "ДанныеПозиции." EDT подсказывает Артикул и ЕдиницаИзмерения
		СтрокаТоваров.Артикул = ДанныеПозиции.Артикул;
	КонецЦикла;

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// Конструктор данных одной позиции для функции ДанныеНоменклатуры.
//
// Параметры:
//  Артикул - Строка
//  ЕдиницаИзмерения - СправочникСсылка.УпаковкиЕдиницыИзмерения
//
// Возвращаемое значение:
//  Структура:
//   * Артикул - Строка
//   * ЕдиницаИзмерения - СправочникСсылка.УпаковкиЕдиницыИзмерения
//
Функция НовыеДанныеНоменклатуры(Артикул, ЕдиницаИзмерения)

	Данные = Новый Структура;
	Данные.Вставить("Артикул", Артикул);
	Данные.Вставить("ЕдиницаИзмерения", ЕдиницаИзмерения);
	Возврат Данные;

КонецФункции

#КонецОбласти

Разбор ключевых строк

  • //@strict-types в начале модуля включает строгую типизацию: EDT сообщает о несовпадении типов, например если в параметр типа Строка передали Число. Для объекта или проекта её включают из контекстного меню панели «Навигатор». Это проверка только в среде, платформа при выполнении типы не контролирует. Старый код сначала адаптируйте.
  • Массив из СправочникСсылка.Номенклатура — тип элементов: в цикле среда знает, что перебирает.
  • * Значение - см. НовыеДанныеНоменклатуры — ссылка на описание конструктора: после ДанныеПозиции. подсказка предлагает Артикул и ЕдиницаИзмерения. Формат описаний — как в БСП.
  • В (&СписокНоменклатуры) — один запрос на весь список, чего и добивается query-in-loop.
  • Области ПрограммныйИнтерфейс и СлужебныеПроцедурыИФункции — структура модуля по стандарту, её плагин тоже проверяет.

Если запрос в цикле оправдан (порционная обработка), предупреждение снимают комментарием на строке перед вызовом: // @skip-check query-in-loop - порционная обработка. Так сделано в БСП, и там видно, что проверка ловит и вызов в цикле метода с запросом внутри. Сам запрос удобно отладить в консоли запросов.

Когда команде переходить на EDT, а когда остаться в конфигураторе

Разработка 1С в EDT окупается, если:

  • над одной конфигурацией работают двое и больше, задачи упираются в захваты, нужно ревью кода;
  • конфигурация своя или сильно доработанная, а проверку и сборку cf/cfe нужно гонять по каждому коммиту;
  • много расширений и внешних обработок, и у каждой доработки должна быть история;
  • компьютеры тянут профиль под размер конфигурации.

Остаться в конфигураторе разумно, если:

  • вы один и делаете точечные доработки в базах разных клиентов, часто по RDP, где EDT не поставить;
  • основная работа — обновление типовой на релизы и мелкие правки;
  • машины не дотягивают до профиля, а конфигурация уровня КА или ERP;
  • команда живёт в хранилище, и сейчас нет времени перестраивать процесс.

Мягкий путь — начать с расширения или внешней обработки: отдельный проект в Git, типовая остаётся на поддержке в конфигураторе. Когда процесс приживётся, переносите основную конфигурацию.

Типичные ошибки

  • «java.lang.OutOfMemoryError: Java heap space» при импорте или сборке — Java не хватило памяти. Поднимите -Xmx в 1cedt.ini или через -vmargs; при нехватке физической памяти настройка не спасёт.
  • validate сразу завершается с ошибкой — остался файл результата от прошлого запуска. Удаляйте его заранее, как в скрипте.
  • 1cedtcli не запускается, пока та же рабочая область открыта в EDT. Заведите для скриптов отдельную.
  • Пропали правки из конфигуратора — их внесли прямо в связанную базу, а при обновлении из проекта конфигурация перезаписалась. Правьте проект, а уже сделанное в базе сначала перенесите в него.
  • Отладка не подключается к серверной базе — сервер 1С запущен без -debug -http.

Частые вопросы

Нужен ли конфигуратор, если работаю в EDT?

Платформа нужна обязательно — через неё EDT работает с базами. Конфигуратор остаётся для администрирования (выгрузка .dt, «Тестирование и исправление»), а типовую на новый релиз многие обновляют в нём и забирают результат в проект.

Можно ли открыть проект EDT в конфигураторе?

Напрямую нет, форматы разные. Экспортируйте проект в XML (из EDT или 1cedtcli export) и загрузите через «Конфигурация → Загрузить конфигурацию из файлов» или ключом /LoadConfigFromFiles.

Работает ли EDT с хранилищем конфигурации?

Нет, командная работа в EDT строится на Git, историю хранилища переносят в него отдельными утилитами. Как устроено само хранилище — в статье о хранилище конфигурации.

Можно ли вести в EDT только расширение?

Да, с этого удобно начинать: типовая — проект конфигурации, расширение — отдельный проект с ней в роли базового (в CLI — параметр --base-project-name у import). Типовую обновляют как раньше, а базовый проект освежают повторным импортом.

Когда проще заказать

Если нужно перевести доработки в EDT, настроить сборку cf/cfe из Git или сделать задачу в привычном для команды инструменте, разместите её на площадке. Оценка бесплатная, ответ в течение рабочего дня; другие направления — на странице услуг.

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.