В процессе работы крупных предприятий часто возникает задача массового выставления первичных документов. Типичный пример: ежемесячная абонентская плата, услуги охраны, аренды или сопровождения программного обеспечения. Когда количество контрагентов превышает 500 человек, ручное создание документов Реализация товаров и услуг становится невозможным. Рассмотрим, как автоматизировать этот процесс в 1С:ERP, начиная от простых программных решений и заканчивая штатными инструментами системы.
Если задача стоит максимально просто — создать документы по списку с фиксированной суммой — наиболее эффективным решением будет написание внешней обработки. Разберем алгоритм, который позволит реализовать это «с закрытыми глазами», как советуют опытные разработчики.
Для начала проанализируем структуру данных. Нам не нужно «зашивать» список контрагентов в код. Гораздо правильнее использовать механизм Сегменты партнеров. Мы создаем сегмент (например, «Абоненты 10000 руб.»), а обработка будет считывать состав этого сегмента.
Рассмотрим пример кода, который может лечь в основу такой обработки:
// Пример упрощенного создания документа реализации
Процедура СоздатьДокументыНаСервере(ВыбранныйСегмент, СуммаУслуги, НоменклатураУслуги)
// Получаем список партнеров из сегмента
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПартнерыСегмента.Партнер КАК Партнер
|ИЗ
| РегистрСведений.ПартнерыСегмента КАК ПартнерыСегмента
|ГДЕ
| ПартнерыСегмента.Сегмент = &Сегмент";
Запрос.УстановитьПараметр("Сегмент", ВыбранныйСегмент);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НовыйДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Партнер = Выборка.Партнер;
// Важно: в ERP необходимо корректно заполнить Контрагента и Договор
НовыйДок.Контрагент = Выборка.Партнер.ОсновнойКонтрагент;
НовыйДок.Организация = Справочники.Организации.НайтиПоНаименованию("Наша Организация");
// Заполнение табличной части
НоваяСтрока = НовыйДок.Товары.Добавить();
НоваяСтрока.Номенклатура = НоменклатураУслуги;
НоваяСтрока.Количество = 1;
НоваяСтрока.Цена = СуммаУслуги;
НоваяСтрока.Сумма = СуммаУслуги;
// Автозаполнение обязательных реквизитов ERP (склад, ставка НДС и т.д.)
// Можно использовать типовые процедуры заполнения из менеджера документа
Попытка
НовыйДок.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Ошибка при создании документа для: " + Выборка.Партнер);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Разберем важный нюанс: при создании более 500 документов за один раз сеанс пользователя может «зависнуть». Чтобы этого избежать, проанализируем ситуацию с точки зрения производительности. Правильным подходом будет использование Фонового задания. Обработка лишь инициирует процесс, а сервер 1С в фоновом режиме постепенно создает и проводит документы.
В 1С:ERP существует мощный функционал, который часто игнорируют — Типовые соглашения с клиентами. Если мы заранее настроим систему, нам не придется писать ни строчки кода.
Рассмотрим, как это работает по шагам:
Типовое соглашение, в котором фиксируем вид цены, условия оплаты и перечень оказываемых услуг.В этом рабочем месте система сама подсветит всех контрагентов, по которым в данном месяце еще не была отражена выручка. Мы просто выделяем список из 500 строк кнопкой Ctrl+A и нажимаем Оформить. Система создаст пакет документов реализации автоматически.
Если список контрагентов или суммы ежемесячно меняются, и программировать обработку нет желания, выясним возможности штатной загрузки. В 1С:ERP почти в каждом документе и списке есть кнопка «Загрузить из файла».
Посмотрим на алгоритм действий:
Подготовим Excel-файл с колонками: ИНН, Номенклатура, Количество, Цена. Зайдем в список документов Реализация товаров и услуг и воспользуемся помощником загрузки. Система сама сопоставит ИНН с базой партнеров, найдет номенклатуру и создаст черновики документов. Вам останется только провести их массово через групповое изменение реквизитов или стандартный список.
Проанализируем самый простой совет с форума: копирование. Если состав клиентов не меняется, можно взять документы за прошлый месяц и скопировать их. Однако делать это вручную 500 раз — плохая идея.
Рассмотрим более изящный путь с использованием стандартной обработки «Групповое изменение реквизитов»:
Дата, Дата платежа и, если нужно, Период оказания услуг.Этот метод является «полумерой», но он работает быстрее, чем ручной ввод.
При реализации массового создания документов важно учитывать «аппетит», который приходит во время еды. Сегодня вам нужно создать 500 одинаковых документов, а завтра руководство попросит применить индивидуальные скидки, изменить даты или добавить разные услуги для разных групп.
Поэтому, выстраивая архитектуру решения, придерживайтесь следующих правил:
Попытка...Исключение).Подводя итог, можно сказать: для разовой задачи подойдет простая обработка копирования, но для системной работы в 1С:ERP лучше один раз настроить Типовые соглашения или создать расширение с механизмом биллинга, использующее Сегменты партнеров.