# Область ОбработчикиСобытийФормы
&НаСервере
Процедура НумДог_ПередЗаписьюНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ПустаяСтрока(ТекущийОбъект.Номер) Тогда
НовыйНомер = ПолучитьНовыйНомер(ТекущийОбъект.Организация);
ТекущийОбъект.Номер = НовыйНомер;
ТекущийОбъект.Дата = ТекущаяДатаСеанса();
ТекущийОбъект.НаименованиеДляПечати = СтрШаблон("Договор поставки № %1 от %2",НовыйНомер, Формат(ТекущийОбъект.Дата,"ДФ=dd.MM.yyyy"));
КонецЕсли;
КонецПроцедуры
# КонецОбласти
# Область СлужебныеПроцедурыИФункции
// <Описание функции>
//
// Параметры:
// Организация - СправочникСсылка.Организации - <описание параметра>
// <продолжение описания параметра>
//
// Возвращаемое значение:
// Строка - <описание возвращаемого значения>
//
&НаСервереБезКонтекста
Функция ПолучитьНовыйНомер(Организация)
ПрефиксОрганизации = Организация.Префикс;
// определяем нужный нам префикс договора
// "Д" добавляем чтобы понятно было что это договор, а то все номера одинаковые
// Год добавляем чтобы номера были уникальные и чтобы нумирация начиналась каждый год заново
ПрефиксДоговора = ПрефиксОрганизации + "Д" + Прав(Строка(Формат(Год(ТекущаяДата()),"ДФ=dd.MM.yy")),2);
// Получаем последний номер договора
// Договоры будут с начала года нумироваться заново. Поэтому отфильровываем номера только по текущему году
Дата = Год(ТекущаяДата());
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
ДоговорыКонтрагентов.Номер КАК ПоследнийНомерДоговора,
ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 1, 5) КАК ПрефиксДоговора,
ПОДСТРОКА(ДоговорыКонтрагентов.Номер, 7, 5) КАК ПорядковыйНомерСтрокой
ПОМЕСТИТЬ ПолучаемНомераИРазбиваемНаСоставляющие
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Дата > &Дата
И ДоговорыКонтрагентов.Организация = &Организация
И ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ
И ДоговорыКонтрагентов.Номер <> """"
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
ПолучаемНомераИРазбиваемНаСоставляющие.ПорядковыйНомерСтрокой КАК ПорядковыйНомерСтрокой,
ПолучаемНомераИРазбиваемНаСоставляющие.ПрефиксДоговора КАК ПрефиксДоговора,
ПолучаемНомераИРазбиваемНаСоставляющие.ПоследнийНомерДоговора КАК ПоследнийНомерДоговора
ИЗ
ПолучаемНомераИРазбиваемНаСоставляющие КАК ПолучаемНомераИРазбиваемНаСоставляющие
ГДЕ
ПолучаемНомераИРазбиваемНаСоставляющие.ПрефиксДоговора = &ПрефиксДоговора
УПОРЯДОЧИТЬ ПО
ПорядковыйНомерСтрокой УБЫВ";
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ПрефиксДоговора", ПрефиксДоговора);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
НовыйНомерДоговораБезПрефикса = 1 ;
Иначе
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НомерБезПрефиксаСтрокой = ВыборкаДетальныеЗаписи.ПорядковыйНомерСтрокой;
НомерБезПрефиксаЧислом = Число(НомерБезПрефиксаСтрокой);
НовыйНомерДоговораБезПрефикса = НомерБезПрефиксаЧислом + 1;
КонецЦикла;
КонецЕсли;
НовыйНомерДоговораБезПрефиксаСтрокой = Строка(НовыйНомерДоговораБезПрефикса);
ДлинаНовогоНомера = СтрДлина(НовыйНомерДоговораБезПрефиксаСтрокой);
НадоДобавитьНулейПередНомером = 5 - ДлинаНовогоНомера;
Для н = 1 По НадоДобавитьНулейПередНомером Цикл
НовыйНомерДоговораБезПрефиксаСтрокой = "0" + НовыйНомерДоговораБезПрефиксаСтрокой;
КонецЦикла;
// Собираем новый номер договора
НовыйНомерДоговора = ПрефиксДоговора + "-" + НовыйНомерДоговораБезПрефиксаСтрокой ;
Возврат НовыйНомерДоговора
КонецФункции // ПолучитьНовыйНомер()
# КонецОбласти
[Нажмите и перетащите, чтобы переместить]