Устройство 1С:Предприятия 8.3: что происходит между кнопкой и базой
Содержание
Программа 1С работает как связка трёх частей: платформа (исполняемая среда 1cv8), конфигурация (прикладное решение — Бухгалтерия, ЗУП, УТ) и информационная база, где лежат данные. Пользователь нажимает «Провести», клиентское приложение передаёт команду платформе, та выполняет код конфигурации и пишет записи в базу внутри транзакции.
Частое заблуждение — считать 1С одной программой, которую «ставят на компьютер». На деле на компьютер ставится только платформа. Одна и та же платформа запускает десятки разных баз с разными конфигурациями. Поэтому, когда «тормозит 1С», искать причину приходится в одном из трёх слоёв, а иногда в сети или СУБД.
Из чего состоит 1С: платформа, конфигурация и база
Разделение на слои объясняет почти всё поведение программы — от обновлений до ошибок.
| Слой | Что это | Как обновляется |
|---|---|---|
| Платформа 8.3 | Исполняемые файлы: клиент, конфигуратор, сервер | Установкой новой версии платформы на компьютеры и сервер |
| Конфигурация | Метаданные (справочники, документы, регистры) и программный код | Через конфигуратор или из пользовательского режима файлами .cfu |
| Информационная база | Данные: проводки, документы, остатки, пользователи | Не обновляется, а изменяется при работе и при реструктуризации |
📌 Что важно знать про каждый слой:
- 🧩 Конфигурация хранится внутри базы. Отдельного «файла программы Бухгалтерия» на диске нет. Есть основная конфигурация и конфигурация базы данных — изменения из первой во вторую переносит команда «Обновить конфигурацию базы данных».
- 🗄️ Данные лежат в таблицах. Каждый справочник, документ, регистр превращается в одну или несколько таблиц СУБД. Табличная часть документа — отдельная таблица.
- ⚙️ Код конфигурации исполняет платформа. Часть кода работает на клиенте (формы, интерфейс), часть — на сервере (проведение, запросы). Это задаётся директивами
&НаКлиентеи&НаСерверев модулях. - 🔁 Версии зависят друг от друга. Каждый релиз конфигурации требует платформу с номером не ниже указанного в описании релиза.
Отсюда практическое правило: обновили конфигурацию, а база не открывается с сообщением о версии платформы — сначала поставьте нужную платформу, а не откатывайте обновление.
Файловый и клиент-серверный вариант работы программы 1С
Способ хранения базы определяет, как программа обрабатывает запросы.
Файловый вариант
База — один файл 1Cv8.1CD в папке на диске или в сетевой папке. Рядом лежит каталог 1Cv8Log с журналом регистрации. Каждый клиент сам читает и пишет этот файл через файловую систему, роль сервера выполняет встроенный в платформу файловый движок.
- ✅ Ставится за минуты, не нужна СУБД и лицензия сервера.
- ⚠️ Блокировки работают на уровне целых таблиц. Пока один пользователь проводит документ, другой ждёт, если трогает те же регистры.
- ⚠️ Сетевая папка чувствительна к сбоям связи — обрыв во время записи повреждает файл.
Клиент-серверный вариант
Данные лежат в СУБД — Microsoft SQL Server или PostgreSQL (поддерживаются и другие). Между клиентом и СУБД стоит кластер серверов 1С:
- Клиент подключается к агенту сервера
ragent— порт1540. - Агент передаёт его менеджеру кластера
rmngr— порт1541. - Менеджер направляет сеанс в рабочий процесс
rphost. Диапазон портов рабочих процессов задаётся в свойствах рабочего сервера, по умолчанию1560–1591. - Рабочий процесс выполняет серверный код и обращается к СУБД.
Блокировки в этом варианте работают на уровне записей. Десятки людей проводят документы одновременно, если не трогают одни и те же данные.
| Критерий | Файловый | Клиент-серверный |
|---|---|---|
| Где данные | Файл 1Cv8.1CD | База СУБД |
| Уровень блокировок | Таблица | Запись (при управляемых блокировках) |
| Регламентные задания | Выполняются, пока открыт хотя бы один клиентский сеанс | Выполняет кластер, круглосуточно |
| Резервная копия | Копия файла или выгрузка .dt | Средствами СУБД или выгрузка .dt |
| Кому подходит | Небольшая команда, одна организация | Многопользовательская работа, большие объёмы |
💡 Перейти с файлового варианта на серверный можно без потери данных: выгрузите базу в .dt в конфигураторе (Администрирование → Выгрузить информационную базу), создайте пустую базу на сервере и загрузите туда файл.
Режимы запуска и клиентские приложения 1С
В окне запуска две главные кнопки: 1С:Предприятие (работа с данными) и Конфигуратор (разработка и администрирование). Кроме них, база открывается разными клиентами.
| Клиент | Исполняемый файл | Где выполняется код | Когда используют |
|---|---|---|---|
| Тонкий клиент | 1cv8c.exe | Почти весь на сервере | Основной режим для управляемых форм |
| Толстый клиент | 1cv8.exe | Часть кода выполняется на клиенте | Старые обычные формы, конфигуратор |
| Веб-клиент | Браузер | На сервере через веб-сервер | Работа без установки платформы |
| Мобильный клиент | Приложение на телефоне | На сервере | Доступ к базе с телефона |
Окно выбора баз показывает 1cestart.exe. Он читает список баз из файла ibases.v8i и запускает нужную версию платформы.
Запуск из командной строки
Администраторы запускают 1С без окна выбора — для ярлыков, скриптов, пакетных обновлений.
:: Открыть файловую базу в режиме 1С:Предприятие
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Администратор" /P"пароль"
:: Открыть серверную базу в конфигураторе
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S"srv1c\buh" /N"Администратор" /P"пароль"
:: Запуск с очисткой клиентского кэша
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /ClearCache
Полезные параметры:
- 🔑
/F— путь к файловой базе,/S—сервер\имя_базыдля серверной. - 👤
/Nи/P— пользователь и пароль 1С. - 🧹
/ClearCache— очищает кэш метаданных на клиенте. Помогает после обновления, когда интерфейс ведёт себя странно. - 🛠️ В пакетном режиме конфигуратора:
/DumpIB— выгрузка в.dt,/UpdateDBCfg— обновление конфигурации базы данных.
Пароль в ярлыке или bat-файле лежит открытым текстом. Используйте такие файлы только на сервере с ограниченным доступом.
Как 1С проводит документы: транзакции и блокировки
Проведение документа — это транзакция. Платформа открывает её, конфигурация записывает документ и формирует движения по регистрам, затем транзакция фиксируется. Ошибка на любом шаге — и откатывается всё: документ не проведён, движений нет, полупроведённого состояния не бывает.
Два режима блокировок
В свойствах конфигурации есть параметр «Режим управления блокировкой данных»:
- 🔒 Автоматический — блокировки ставит СУБД. Блокируется больше данных, чем нужно, конфликтов больше.
- 🎯 Управляемый — блокировки ставит сама платформа по указаниям кода. Типовые конфигурации на 8.3 работают в этом режиме.
- 🔀 Автоматический и управляемый — смешанный, для переходного периода у доработанных конфигураций.
В управляемом режиме разработчик явно блокирует нужные записи перед чтением остатков:
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");
Элемент.Режим = РежимБлокировкиДанных.Исключительный;
Элемент.УстановитьЗначение("Склад", Склад);
Блокировка.Заблокировать();
Код блокирует остатки только одного склада. Второй пользователь проводит документ по другому складу и не ждёт.
Что видит пользователь при конфликте
Если запись занята, транзакция ждёт. Таймаут ожидания управляемой блокировки — 20 секунд. Не дождалась — пользователь получает сообщение вида Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки.
Вторая ситуация — взаимоблокировка: две транзакции держат по записи и ждут друг друга. Платформа обрывает одну из них, документ нужно провести повторно.
💡 Разовые конфликты при закрытии месяца — норма. Регулярные в обычный день говорят о долгих транзакциях: тяжёлая обработка, проведение пачки документов одной транзакцией, доработка без управляемых блокировок.
Регламентные и фоновые задания в 1С
Часть работы программа выполняет без участия пользователя.
- ⏰ Регламентные задания запускаются по расписанию: загрузка курсов валют, обмен с банком и ЭДО, обновление классификаторов, полнотекстовый индекс, пересчёт итогов.
- 🔄 Фоновые задания запускаются из кода по событию: долгий отчёт, массовое перепроведение, закрытие месяца . Пользователь продолжает работать, пока задание идёт в отдельном сеансе.
Где посмотреть и настроить в БП 3.0, ЗУП 3.1 и УТ 11: Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. Там видно расписание, время последнего запуска и текст ошибки, если задание упало.
Кто их выполняет
- Файловая база. Задания выполняет один из запущенных клиентских сеансов. Никто не открыл базу — курсы валют не загрузятся.
- Серверная база. Задания выполняет кластер. В свойствах базы в консоли кластера есть флажок «Блокировка регламентных заданий включена». Если он стоит, ни одно задание не запустится.
Флажок блокировки регламентных заданий обязательно ставят на копиях рабочей базы. Иначе тестовая копия начнёт обмениваться с банком, ЭДО или сайтом от имени рабочей организации.
Обратная проблема — флажок остался после переноса базы на новый сервер, и обмены молча перестали работать. Проверяйте его первым, если «задания не выполняются».
Как ускорить работу программы 1С: индексы, итоги, запросы
Производительность упирается в четыре места: оборудование, СУБД, настройки базы и код конфигурации.
Индексы
Индексы в 1С создаются не в СУБД вручную, а через метаданные: у реквизита справочника или документа есть свойство «Индексировать». Платформа сама создаёт индексы для ссылок, кодов, номеров и измерений регистров. Индексы, созданные вручную средствами СУБД, при реструктуризации пропадают.
На стороне СУБД нужен регулярный план обслуживания:
| СУБД | Что делать | Как часто |
|---|---|---|
| Microsoft SQL Server | Обновление статистики, перестроение или реорганизация индексов | Статистика — ежедневно ночью, индексы — еженедельно |
| PostgreSQL | VACUUM ANALYZE и контроль работы autovacuum | Ежедневно ночью |
| Файловая база | Тестирование и исправление со сжатием таблиц | Раз в месяц-квартал, с монопольным доступом |
Итоги регистров
Остатки по регистрам накопления и бухгалтерии платформа хранит в таблицах итогов — поэтому оборотно-сальдовая ведомость не пересчитывает все проводки с начала времён. Управляют итогами в режиме 1С:Предприятие: Главное меню → Функции для технического специалиста → Стандартные → Управление итогами. Там переносят период рассчитанных итогов на последний закрытый месяц и при подозрении на ошибки пересчитывают их.
Код и запросы
Если доработки писали свои программисты, проверьте типовые узкие места:
- 🐢 Запросы в цикле — один запрос на каждую строку документа вместо одного на весь документ.
- 🐢 Отбор виртуальной таблицы остатков в секции
ГДЕвместо параметров виртуальной таблицы. - 🐢 Обращение «через точку» к реквизитам ссылок в цикле — каждое обращение читает базу.
- 🐢 Проведение сотни документов одной транзакцией.
Найти медленный код помогает замер производительности в конфигураторе: Отладка → Замер производительности. Он показывает строки кода, на которых ушло больше всего времени.
💡 Простые меры без программиста: держать клиентский кэш чистым (/ClearCache), не хранить файловую базу
в сетевой папке на слабом NAS, отключить антивирусную проверку каталога базы и папки srvinfo сервера 1С.
Диагностика ошибок: журнал регистрации и технологический журнал
У 1С два журнала с разными задачами.
Журнал регистрации
Записывает действия пользователей и ошибки: кто вошёл, что изменил, какой документ не провёлся. Открыть:
- в конфигураторе:
Администрирование → Журнал регистрации; - в режиме 1С:Предприятие:
Главное меню → Функции для технического специалиста → Стандартные → Журнал регистрации.
Ставьте отбор по уровню «Ошибка», пользователю и интервалу — без отбора журнал за год открывается долго. Физически журнал лежит в каталоге 1Cv8Log: у файловой базы рядом с 1Cv8.1CD, у серверной — в каталоге базы внутри srvinfo\reg_1541.
Технологический журнал
Пишет, что делает сама платформа: исключения, запросы к СУБД, ожидания блокировок, взаимоблокировки. Включается файлом logcfg.xml в каталоге conf платформы, например C:\Program Files\1cv8\conf\. Перезапуск службы не нужен — платформа подхватывает файл сама.
Пример: собирать исключения и события блокировок.
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\1C_TechLog" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="TTIMEOUT"/>
</event>
<event>
<eq property="name" value="TDEADLOCK"/>
</event>
<property name="all"/>
</log>
</config>
Параметр history — сколько часов хранить логи. События TTIMEOUT показывают таймауты блокировок, TDEADLOCK — взаимоблокировки, с указанием, какие сеансы и какие данные конфликтовали.
Технологический журнал без отборов за час набирает гигабайты. Включайте его на время расследования, на диск с запасом места, и удаляйте logcfg.xml после.
Если для разбора нужно завершить сеанс или перезапустить рабочий процесс в консоли кластера — у пользователей этих сеансов пропадут несохранённые данные, а процесс обслуживает сразу много людей. Предупредите их или делайте это вне рабочего времени.