При программном создании бухгалтерских операций в платформе 1С 7.7 разработчики часто сталкиваются с вопросом: как правильно задать номер новой операции? Объект Операция имеет свои специфические особенности работы с нумерацией, отличные от привычных документов в 1С 8.x.
Разберем детально устройство нумератора операций в 1С 7.7, а также рассмотрим практические способы установки номера — как вручную, так и с помощью автоматической генерации.
В платформе 1С 7.7 объект Операция тесно связан с подчиненным документом. Сам по себе объект Операция не содержит отдельного метода для установки номера, а нумерация привязана к свойству Документ. Поэтому любые операции с номером выполняются через обращение к реквизитам подчиненного документа: Опер.Документ.НомерДок или Опер.Документ.УстановитьНовыйНомер().
Если номер операции должен передаваться из внешней системы или совпадать с номером первичного документа (например, при переносе данных из оперативного учета в бухгалтерскую конфигурацию), номер присваивается напрямую реквизиту НомерДок.
Рассмотрим пример кода, в котором переносится операция и задается конкретный номер и дата:
Опер = СоздатьОбъект("Операция");
Опер.Новая();
// 1. Сначала задаем дату операции
Опер.ДатаОперации = ДатаПлатежки;
// 2. Устанавливаем номер документа операции
Опер.Документ.НомерДок = НомерПлатежки;
// 3. Заполняем содержание и проводки
Опер.Содержание = "Оплата по банковским картам";
// 4. Сохраняем операцию
Опер.Записать();
Если необходимо, чтобы система сама сгенерировала следующий порядковый номер операции согласно правилам нумерации, используем метод УстановитьНовыйНомер() объекта Документ.
Проанализируем правильный порядок вызова команд:
Опер = СоздатьОбъект("Операция");
Опер.Новая();
// Важно сначала установить дату, чтобы номер сформировался в нужном периоде
Опер.ДатаОперации = НужнаяДата;
// Генерируем новый номер с учетом установленной даты
Опер.Документ.УстановитьНовыйНомер();
// Дополнительно можно установить время документа и операции
Опер.УстановитьВремя(23, 59, 59);
Опер.Документ.УстановитьВремя(23, 59, 59);
Опер.Содержание = "Архивирование остатков";
Опер.Записать();
При работе с нумерацией операций важно учитывать следующие особенности платформы 1С 7.7:
УстановитьНовыйНомер() необходимо строго после установки свойства ДатаОперации. Если вызвать автогенерацию номера до установки даты, платформа рассчитает номер по рабочей дате или пустой дате. Это может привести к сбоям нумерации и ошибкам неуникальности при последующей записи.УстановитьНовыйНомер() может принимать необязательный параметр — строку префикса (например, Опер.Документ.УстановитьНовыйНомер("БП-");). При ручном присвоении значения в НомерДок убедитесь, что длина строки не превышает ограничение, заданное в Конфигураторе для данного типа документа.Посмотрим, как обезопасить код от ошибок неуникальности при одновременной работе нескольких пользователей или массовой загрузке данных:
Опер = СоздатьОбъект("Операция");
Опер.Новая();
Опер.ДатаОперации = ТекущаяДата();
Опер.Документ.УстановитьНовыйНомер();
Записано = 0;
Пока Записано = 0 Цикл
Попытка
Опер.Записать();
Записано = 1;
Исключение
// В случае конфликта номеров перегенерируем номер
Опер.Документ.УстановитьНовыйНомер();
КонецПопытки;
КонецЦикла;
Данный подход гарантирует успешное сохранение операции с уникальным номером даже при высокой интенсивности проведения документов.