Найти в Дзене

Обработки в 1С: Магия массовых преобразований

"Марковка! Обработка — это как кухонный комбайн. Ты загружаешь сырые данные, нажимаешь кнопку — и получаешь готовое блюдо!" Без обработки:
1000 накладных. Каждую проверяешь вручную, правишь ошибки. Месяц работы. С обработкой:
Загрузил 1000 накладных → запустил обработку → через 5 минут все проверены и исправлены. plaintext ЧТО ДЕЛАЕТ: Заполняет документы автоматически
ПРИМЕРЫ:
- "Заполнить цены по последней закупке"
- "Рассчитать скидки по объёму"
- "Установить ставки НДС"
КАК В ЖИЗНИ: Замороженные пельмени. Быстро, стандартно, без ручной лепки. plaintext ЧТО ДЕЛАЕТ: Выполняет одно действие с множеством объектов
ПРИМЕРЫ:
- "Провести все неоплаченные счета"
- "Удалить старые резервные копии"
- "Переоценить все товары на складе"
КАК В ЖИЗНИ: Конвейер по нарезке овощей. Кинул мешок картошки — получил нарезанную. plaintext ЧТО ДЕЛАЕТ: Делает всё что угодно (программируемая)
ПРИМЕРЫ:
- "Миграция данных из старой системы"
- "Сравнение двух баз данных"
- "Выгрузка в Excel с особыми прави
Оглавление

Шеф Петрович о конвейере кулинарных чудес

🎩 ЧТО ТАКОЕ ОБРАБОТКА В 1С?

"Марковка! Обработка — это как кухонный комбайн. Ты загружаешь сырые данные, нажимаешь кнопку — и получаешь готовое блюдо!"

Без обработки:
1000 накладных. Каждую проверяешь вручную, правишь ошибки. Месяц работы.

С обработкой:
Загрузил 1000 накладных → запустил обработку → через 5 минут все проверены и исправлены.

🛠️ 3 ВИДА ОБРАБОТОК (как кухонная техника)

1. ОБРАБОТКА ЗАПОЛНЕНИЯ — "ПОЛУФАБРИКАТЫ"

plaintext

ЧТО ДЕЛАЕТ: Заполняет документы автоматически

ПРИМЕРЫ:
- "Заполнить цены по последней закупке"
- "Рассчитать скидки по объёму"
- "Установить ставки НДС"

КАК В ЖИЗНИ: Замороженные пельмени. Быстро, стандартно, без ручной лепки.

2. ГРУППОВАЯ ОБРАБОТКА — "КОНВЕЙЕР"

plaintext

ЧТО ДЕЛАЕТ: Выполняет одно действие с множеством объектов

ПРИМЕРЫ:
- "Провести все неоплаченные счета"
- "Удалить старые резервные копии"
- "Переоценить все товары на складе"

КАК В ЖИЗНИ: Конвейер по нарезке овощей. Кинул мешок картошки — получил нарезанную.

3. УНИВЕРСАЛЬНАЯ ОБРАБОТКА — "МУЛЬТИВАРКА"

plaintext

ЧТО ДЕЛАЕТ: Делает всё что угодно (программируемая)

ПРИМЕРЫ:
- "Миграция данных из старой системы"
- "Сравнение двух баз данных"
- "Выгрузка в Excel с особыми правилами"

КАК В ЖИЗНИ: Мультиварка. И суп сварить, и торт испечь, и йогурт сделать.

🎯 5 САМЫХ ПОЛЕЗНЫХ ОБРАБОТОК ДЛЯ НАЧИНАЮЩИХ

ОБРАБОТКА 1: "Массовое изменение реквизитов"

plaintext

ПРОБЛЕМА: Нужно у 500 товаров сменить поставщика
РЕШЕНИЕ:
1. Создаём обработку с таблицей товаров
2. Добавляем поле "Новый поставщик"
3. Заполняем таблицу
4. Нажимаем "Выполнить"
5. Все 500 товаров обновлены за 10 секунд

КОД-ПРИМЕР:
Для Каждого Строка Из ТаблицаТоваров Цикл
Товар = Строка.Товар;
Товар.Поставщик = Строка.НовыйПоставщик;
Товар.Записать();
КонецЦикла;

ОБРАБОТКА 2: "Очистка тестовых данных"

plaintext

ПРОБЛЕМА: База забита тестовыми документами
РЕШЕНИЕ:
1. Обработка ищет документы с определителем "ТЕСТ"
2. Предлагает список для удаления
3. Удаляет всё за один клик

БЕЗОПАСНОСТЬ: Всегда спрашивает подтверждение!

ОБРАБОТКА 3: "Перенос остатков"

plaintext

ПРОБЛЕМА: Закрыли старый склад, открыли новый
РЕШЕНИЕ:
1. Обработка читает остатки со старого склада
2. Создаёт документы перемещения
3. Рассчитывает оптимальные партии
4. Проводит все документы автоматически

ОБРАБОТКА 4: "Сравнение цен"

plaintext

ПРОБЛЕМА: Цены у конкурентов дешевле
РЕШЕНИЕ:
1. Загружаем прайс-лист конкурента (Excel)
2. Обработка сравнивает с нашими ценами
3. Выделяет красным, где мы дороже
4. Предлагает новые цены
5. Применяет скидки автоматически

ОБРАБОТКА 5: "Резервное копирование настроек"

plaintext

ПРОБЛЕМА: При обновлении слетают настройки пользователей
РЕШЕНИЕ:
1. Обработка выгружает все настройки
2. Сохраняет в XML-файл
3. После обновления — загружает обратно
4. Пользователи даже не замечают изменений

⚠️ 7 ГЛАВНЫХ ОШИБОК ПРИ СОЗДАНИИ ОБРАБОТОК

Ошибка 1: "Нет прогресс-бара"

plaintext

НЕПРАВИЛЬНО: Обработка 10 минут "висит"
ПРАВИЛЬНО:
Обработка 1000 элементов из 10000 (10%)
Элементы в секунду: 150
Осталось времени: 1 минута

Код прогресс-бара:

bsl

ВсегоЭлементов = 10000;
Обработано = 0;
Для Каждого Элемент Из Коллекция Цикл
// Обработка...
Обработано = Обработано + 1;
Процент = Обработано / ВсегоЭлементов * 100;
ОбработкаПрерывания("Обработка...", Процент);
КонецЦикла;

Ошибка 2: "Нет проверки прав"

plaintext

ОПАСНО: Любой пользователь может запустить
БЕЗОПАСНО:
Если Не ПравДоступна("Администратор") Тогда
Сообщить("Нет прав!");
Возврат;
КонецЕсли;

Ошибка 3: "Обработка без отмены"

plaintext

ПРОБЛЕМА: Запустил — передумал — не остановить
РЕШЕНИЕ:
1. Кнопка "Отмена"
2. Проверка ОбработкаПрерывания() в цикле
3. Возможность паузы

Ошибка 4: "Нет лога выполнения"

plaintext

ПЛОХО: Обработка упала — непонятно на каком элементе
ХОРОШО:
Лог.Добавить("Начало обработки товара: " + Товар.Наименование);
Попытка
// Обработка
Исключение
Лог.Добавить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;

Ошибка 5: "Перезапись без предупреждения"

plaintext

ОПАСНО: Тихо меняет данные
БЕЗОПАСНО:
Сообщить("Будет изменено 150 записей. Продолжить?",
РежимДиалогаВопрос.ДаНет);
Если Результат = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;

Ошибка 6: "Нет отката при ошибке"

plaintext

ПЛОХО: Из 100 элементов обработалось 50, 51-й упал,
50 изменений остались
ХОРОШО:
НачатьТранзакцию();
Попытка
// Обработка всех элементов
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Сообщить("Отменено из-за ошибки");
КонецПопытки;

Ошибка 7: "Игнорирование производительности"

plaintext

МЕДЛЕННО (1000 запросов):
Для Каждого Товар Из Товары Цикл
Запрос = Новый Запрос("ВЫБРАТЬ Цена ИЗ ...");
// 1000 отдельных запросов!
КонецЦикла;

БЫСТРО (1 запрос):
Запрос = Новый Запрос("ВЫБРАТЬ ВСЕ Цены...");
Результат = Запрос.Выполнить();
// Один запрос, вся информация

🎓 ПРАКТИЧЕСКИЙ ПРИМЕР: "ОБРАБОТКА МАССОВОЙ ПЕРЕОЦЕНКИ"

Шаг 1: Дизайн формы

plaintext

ФОРМА ОБРАБОТКИ:
┌─────────────────────────────────┐
│ МАССОВАЯ ПЕРЕОЦЕНКА ТОВАРОВ │
├─────────────────────────────────┤
│ [x] Только выбранные группы │
│ [ ] Все товары │
│ │
│ Тип изменения: │
│ ● Наценка в % [10] % │
│ ○ Скидка в % [ ] % │
│ ○ Новая цена [ ] руб. │
│ │
│ [Выбрать группы товаров...] │
│ │
│ [ВЫПОЛНИТЬ] [ОТМЕНА] [ЛОГ] │
└─────────────────────────────────┘

Шаг 2: Код обработки

bsl

Процедура Выполнить()

// Проверка прав
Если Не ПравДоступна("ИзменениеЦен") Тогда
Сообщить("Нет прав на изменение цен!");
Возврат;
КонецЕсли;

// Подтверждение
Если Не Подтвердить("Изменить цены у " + ВсегоТоваров + " товаров?") Тогда
Возврат;
КонецЕсли;

// Транзакция для безопасности
НачатьТранзакцию();

Попытка
ВсегоТоваров = Товары.Количество();
Обработано = 0;

Для Каждого Товар Из Товары Цикл

// Прогресс-бар
Обработано = Обработано + 1;
ОбработкаПрерывания("Обработка...",
Обработано / ВсегоТоваров * 100);

// Проверка отмены
Если НужноПрервать() Тогда
Прервать();
КонецЕсли;

// Изменение цены
СтараяЦена = Товар.Цена;

Если ТипИзменения = "Наценка" Тогда
НоваяЦена = СтараяЦена * (1 + Процент / 100);
ИначеЕсли ТипИзменения = "Скидка" Тогда
НоваяЦена = СтараяЦена * (1 - Процент / 100);
КонецЕсли;

Товар.Цена = НоваяЦена;

// Логирование
Лог.Добавить(Товар.Наименование + ": " +
СтараяЦена + " → " + НоваяЦена);

// Запись
Товар.Записать();

КонецЦикла;

// Фиксация
ЗафиксироватьТранзакцию();
Сообщить("Готово! Обработано: " + Обработано + " товаров");

Исключение
// Откат при ошибке
ОтменитьТранзакцию();
Сообщить("Ошибка! Все изменения отменены: " +
ОписаниеОшибки());
КонецПопытки;

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

Шаг 3: Логирование

bsl

Процедура ПоказатьЛог()

// Создаём табличный документ
Документ = Новый ТабличныйДокумент;

// Заголовок
Документ.Область("A1").Текст = "Лог переоценки";
Документ.Область("A1").Шрифт = Новый Шрифт(, , Истина);

// Заголовки столбцов
Документ.Область("A3").Текст = "Товар";
Документ.Область("B3").Текст = "Старая цена";
Документ.Область("C3").Текст = "Новая цена";
Документ.Область("D3").Текст = "Изменение";

// Данные
Строка = 4;
Для Каждого Запись Из Лог Цикл
Документ.Область("A" + Строка).Текст = Запись.Товар;
Документ.Область("B" + Строка).Текст = Запись.СтараяЦена;
Документ.Область("C" + Строка).Текст = Запись.НоваяЦена;

Изменение = (Запись.НоваяЦена - Запись.СтараяЦена) /
Запись.СтараяЦена * 100;
Документ.Область("D" + Строка).Текст = Формат(Изменение,
"ЧДЦ=2; ЧРД=.,");

Строка = Строка + 1;
КонецЦикла;

// Показываем
Документ.Показать();

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

🚀 5 СОВЕТОВ ДЛЯ ПРОДВИНУТЫХ ОБРАБОТОК

Совет 1: "Пакетная обработка"

plaintext

ПРОБЛЕМА: 100 000 товаров не обработать за один раз
РЕШЕНИЕ: Разбить на пакеты по 1000
- Пакет 1: товары 1-1000
- Пакет 2: товары 1001-2000
- Можно останавливаться и продолжать
- Меньше нагрузка на память

Совет 2: "Многопоточность"

plaintext

ДЛЯ СЛОЖНЫХ ВЫЧИСЛЕНИЙ:
1. Разбиваем данные на части
2. Каждую часть обрабатываем в отдельном потоке
3. Собираем результаты
УСКОРЕНИЕ: В 4-8 раз на многоядерных процессорах

Совет 3: "Инкрементальная обработка"

plaintext

ВМЕСТО: Каждый раз обрабатывать всё
ЛУЧШЕ: Обрабатывать только изменения с прошлого раза
- Быстрее
- Меньше нагрузки
- Можно запускать чаще

Совет 4: "Обработка по расписанию"

plaintext

НАСТРАИВАЕМ:
- Каждый день в 2:00 ночи
- Каждый понедельник в 9:00
- Каждое 1-е число месяца
ПРЕИМУЩЕСТВА:
- В нерабочее время
- Автоматически
- Без участия пользователя

Совет 5: "Обработка как сервис"

plaintext

ПРЕВРАЩАЕМ обработку в:
1. REST API сервис
2. Веб-сервис
3. Фоновое задание
МОЖНО вызывать из:
- Других систем
- Мобильных приложений
- По HTTP запросам

🏁 ЗАКЛЮЧЕНИЕ ОТ ШЕФА:

"Марковка, запомни главное про обработки:

ОБРАБОТКА — ЭТО СИЛА УМНОЖЕНИЯ!

Одна минута твоего времени × обработка = часы сэкономленного времени пользователей.

Начни с малого:

  1. Неделя 1: Простая обработка заполнения
  2. Неделя 2: Групповая обработка с прогресс-баром
  3. Неделя 3: Универсальная обработка с настройками
  4. Неделя 4: Обработка с транзакциями и откатом

Всегда думай о:

  1. Безопасности — кто может запустить?
  2. Надёжности — что если упадёт?
  3. Производительности — сколько времени займёт?
  4. Удобстве — поймёт ли пользователь?

И никогда не делай обработку без:
✅ Прогресс-бара
✅ Подтверждения
✅ Логирования
✅ Отката при ошибке
✅ Проверки прав

Обработки — это как кухонные роботы:

  • Блендер (обработка заполнения) — для быстрых задач
  • Духовка (групповая обработка) — для больших объёмов
  • Мультиварка (универсальная обработка) — для всего

Удачи! И помни: лучшая обработка — та, которую пользователь даже не замечает, потому что всё работает само!" ⚙️🤖

📌 ШПАРГАЛКА ДЛЯ БЫСТРОГО СТАРТА:

plaintext

ШАБЛОН ПРОСТОЙ ОБРАБОТКИ:

1. Форма с параметрами
2. Кнопка "Выполнить"
3. Проверка прав
4. Подтверждение действия
5. НачатьТранзакцию()
6. Прогресс-бар в цикле
7. Логирование
8. ЗафиксироватьТранзакцию()
9. Сообщение о результате

ЧЕК-ЛИСТ ПЕРЕД ЗАПУСКОМ:

☑ Сделана резервная копия
☑ Проверено на тестовых данных
☑ Прогресс-бар работает
☑ Есть кнопка "Отмена"
☑ Логи пишутся
☑ Права проверяются
☑ Подтверждение запрашивается