В процессе командной разработки на платформе 1С:Предприятие часто возникает ситуация, когда каждому программисту требуется индивидуальная копия «боевой» базы для отладки и тестирования. Если конфигурация, например 1С:Управление торговлей (УТ), имеет значительный объем (100 ГБ и более), то создание нескольких копий быстро исчерпывает ресурсы дисковой подсистемы. Проанализируем, как эффективно организовать процесс разработки, не превращая серверную в склад жестких дисков, и выясним, какие инструменты действительно помогают в этой ситуации.
Первое, что мы должны осознать — это экономическая составляющая. Рассмотрим ситуацию с точки зрения руководителя или системного администратора. Стоимость рабочего времени квалифицированного разработчика 1С значительно превышает стоимость дискового пространства. Как отмечают опытные участники обсуждения, попытка сэкономить несколько тысяч рублей на покупке дополнительных SSD-накопителей может привести к простоям в разработке, цена которых исчисляется десятками и сотнями тысяч.
Оперативный простор для программиста — это залог качественного кода и отсутствия ошибок в промышленной базе. Если разработчик ограничен в создании тестовых сред, он начинает «тренироваться» на общих базах или вносить изменения с меньшим циклом тестирования, что неизбежно ведет к багам в «боевой» конфигурации.
Если объем баз действительно становится критическим, разберем методы сжатия данных. Большинство современных баз 1С работают под управлением Microsoft SQL Server, который предоставляет мощные механизмы компрессии.
Рассмотрим использование Page Compression (сжатие на уровне страниц). Это позволяет уменьшить физический размер базы на диске в 3–5 раз практически без потери производительности на чтение (а иногда и с её приростом за счет уменьшения операций ввода-вывода). Проанализируем, как это можно сделать с помощью SQL-скрипта для всех таблиц базы данных:
-- Пример скрипта для включения сжатия страниц для всех таблиц базы
DECLARE @TableName NVARCHAR(255);
DECLARE @SqlCommand NVARCHAR(MAX);
DECLARE TableCursor CURSOR FOR
SELECT name FROM sys.tables;
OPEN TableCursor;
FETCH NEXT FROM TableCursor INTO @TableName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SqlCommand = 'ALTER TABLE ' + QUOTENAME(@TableName) + ' REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE);';
EXEC sp_executesql @SqlCommand;
FETCH NEXT FROM TableCursor INTO @TableName;
END;
CLOSE TableCursor;
DEALLOCATE TableCursor;
Применение такого подхода к тестовым копиям позволит хранить базу в 100 ГБ, занимая при этом всего 20–30 ГБ на диске. Важно помнить, что для разработки и отладки небольшое замедление на запись, которое может дать сжатие, абсолютно не критично.
Зачастую программисту для решения 90% задач не нужны данные за все 10 лет работы компании. Посмотрим на ситуацию внимательнее: для отладки текущих багов в 1С:УТ достаточно актуальных остатков и документов за последние несколько месяцев.
Рассмотрим по шагам процесс подготовки «легкой» тестовой базы:
_InfoRgChngR) и присоединенные файлы. Их можно очистить без вреда для логики разработки.SHRINKDATABASE, чтобы вернуть освободившееся место операционной системе.Проанализируем пример кода 1С для быстрой очистки движений документов в тестовой базе, чтобы уменьшить её вес:
// Пример программной очистки движений для ускорения базы
Процедура ОчиститьДвиженияСтарыхДокументов(ДатаОграничения)
ДокументыДляОчистки = Документы.РеализацияТоваровУслуг.Выбрать(,, "Дата < '" + Формат(ДатаОграничения, "ДФ=yyyyMMdd") + "'");
Пока ДокументыДляОчистки.Следующий() Цикл
Набор = РегистрыНакопления.ВыручкаИСебестоимостьПродаж.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ДокументыДляОчистки.Ссылка);
Набор.Записать(); // Записываем пустой набор, удаляя старые записи
КонецЦикла;
КонецПроцедуры
Часто возникает вопрос: поможет ли переход на современные инструменты, такие как 1C:Enterprise Development Tools (EDT) и Git? Выясним разницу между кодированием и отладкой.
EDT и Git — это инструменты для работы с исходным кодом (метаданными). Они отлично решают проблему одновременной правки одних и тех же модулей разными программистами, позволяя сливать изменения (merge) и вести ветки (branches). Однако они никак не решают вопрос данных. Для запуска отладки вам всё равно потребуется база (информационная база), в которой этот код будет выполняться.
Тем не менее, использование EDT позволяет внедрить концепцию синтетических данных. Вместо того чтобы тянуть 100 ГБ реальных заказов, программист может написать скрипт (Unit-тест), который программно создает одного контрагента, одну номенклатуру и один документ. Это идеальный путь развития, к которому стоит стремиться в крупных проектах.
Для стабильной работы большой команды важно разделять понятия:
Такая структура позволяет разработчикам работать в «легких» условиях, а тяжелую 100-гигабайтную копию обновлять раз в неделю только для финальной проверки функционала. Это разумный компромисс между удобством и экономией ресурсов.
Подведем итог: Настороженность по поводу роста объемов оправдана, но она не должна блокировать работу программистов. Оптимальный путь — это сочетание покупки производительных дисков, использования SQL-сжатия и постепенного внедрения культуры работы с синтетическими данными или «срезами» баз. Помните, что время разработчика — самый дорогой ресурс в проекте автоматизации.