Добрый день! Появилась задача - отдельная нумерация для определенного контрагента(добавлять к номеру букву "К" , и что бы нумерация была отдельная и не пересекалась со стандартным нумератором. Я сделал регистр для хранения номера нужного контрагента, для которого требуется отдельная нумерация. В итоге при создании документа продажи с другими контрагентами, на первый взгляд с нумерацией все впорядке (она вида ХХ00-000044), но после создания документа с определенным контрагентом(который с буквой К и отдельной нумерацией, вида ХХ00-0001К) , ВСЕ последующие документы по другим контрагентам, выглядят так ХХ00-К00001 , не понимаю в чем дело, так же не получается достать последний номер из стандартного нумератора (нумератор документа РеализацияТоваровУслуг) . Уже всю голову сломал, мб кто укажет на ошибку?
Так же прикрепляю скрины регистра , который создал. Добавил этот код в модуль документа РеализацияТоваровУслуг. Я так понимаю проблема в том,что я не могу получить последний номер из стандартного нумератора?
НомерДокумента = Документы.РеализацияТоваровУслуг.ПолучитьНовыйНомер();
Сообщить("Номер документа: " + НомерДокумента);
. Я пока только изучающий азы,поэтому другого способа не нашел.
Процедура ПриЗаписи(Отказ)
Попытка
Сообщить("Начало процедуры ПриЗаписи");
// контрагент
Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
Сообщить("Контрагент не указан. Прекращение обработки.");
Возврат;
КонецЕсли;
// фильтр по контрагенту
КонтрагентКлев = Справочники.Контрагенты.НайтиПоНаименованию("ООО КЛЕВ");
// првоерка
Если КонтрагентКлев <> Неопределено И Контрагент = КонтрагентКлев Тогда
Сообщить("Контрагент совпадает: ООО КЛЕВ");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоследнийНомер
|ИЗ
| РегистрСведений.НумерацияКлев
|ГДЕ
| Контрагент = &Контрагент
|ORDER BY ПериодДата DESC";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Результат = Запрос.Выполнить();
ТаблицаРезультатов = Результат.Выгрузить();
Если ТаблицаРезультатов.Количество() > 0 Тогда
ПоследнийНомер = ТаблицаРезультатов[0].ПоследнийНомер + 1; // Увеличиваем на 1
Иначе
ПоследнийНомер = 1; // Если нет записей, начинаем с 1
КонецЕсли;
Сообщить("Последний номер для ООО КЛЕВ: " + ПоследнийНомер);
// добавить нули,не работает
НомерДокумента = "НЛ00-" + Формат(ПоследнийНомер, "ЧЦ=5; ЧН=") + "К";
Сообщить("Номер документа: " + НомерДокумента);
ЭтотОбъект.Номер = НомерДокумента;
// Запись в регистр
НаборЗаписей = РегистрыСведений.НумерацияКлевер.СоздатьНаборЗаписей();
Запись = НаборЗаписей.Добавить();
Запись.ПериодДата = ТекущаяДата();
Запись.Контрагент = Контрагент;
Запись.ПоследнийНомер = ПоследнийНомер;
НаборЗаписей.Записать();
Сообщить("Номер сохранен в регистр сведений");
Иначе
// Для других контрагентов используем стандартную нумерацию
Сообщить("Контрагент не ООО КЛЕВ. Используется стандартная нумерация.");
// Получаем номер из стандартного нумератора
НомерДокумента = Документы.РеализацияТоваровУслуг.ПолучитьНовыйНомер();
Сообщить("Номер документа: " + НомерДокумента);
// номер
ЭтотОбъект.Номер = НомерДокумента; // Переопределяем номер документа
КонецЕсли;
// Вызовы дополнительных процедур
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
РеализацияТоваровУслугЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
Исключение
// Обработка ошибки
Сообщить("Ошибка: " + ОписаниеОшибки());
Отказ = Истина;
КонецПопытки;
Сообщить("Конец процедуры ПриЗаписи");
КонецПроцедуры
ПоказатьТак же прикрепляю скрины регистра , который создал. Добавил этот код в модуль документа РеализацияТоваровУслуг. Я так понимаю проблема в том,что я не могу получить последний номер из стандартного нумератора?
НомерДокумента = Документы.РеализацияТоваровУслуг.ПолучитьНовыйНомер();
Сообщить("Номер документа: " + НомерДокумента);
. Я пока только изучающий азы,поэтому другого способа не нашел.
Прикрепленные файлы:

По теме из базы знаний
- Проблема нумерации документов при слиянии баз
- Многофункциональная выгрузка из 1С:КА 1 и 2 и ERP в 1С:БП 3.0 (соответствия товаров, контрагентов, складов, статей ДДС)+Свёртка по НДС
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Восстановление нумерации счетов-фактур из данных регламентированных отчетов в конфигурации 1С: Комплексная автоматизация 2
- Модуль "Ответственное хранение" в 1С:УТ 11.5, КА 2.5, ERP 2.5 для фулфилмента FBS / FBO
Найденные решения
в общем сделал просто доп поле в списке документов продажи, туда подтягивается номер и добавляется К , сделаю фильтр поиска по данному полю, что бы можно было отсеять документы по данному контрагенту
&НаКлиенте
Процедура СписокДокументыПродажиОбновить(Команда)
Для Каждого Строка Из ЭтотОбъект.ДанныеФормы.СписокДокументыПродажи Цикл
Если Строка.Контрагент.Наименование = "ООО КЛЕВ" Тогда
Строка.МойНомерК = Строка.НомерДокумента + "К";
Иначе
Строка.МойНомерК = Строка.НомерДокумента;
КонецЕсли;
КонецЦикла;
ЭтотОбъект.ОбновитьДанные();
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) ошибка не в коде, а в методологии.
вы делаете "костыль" и не думаете о том как на ваш "костыль" среагирует существующая система...
а она среагирует... она будет находить ваш костыльный номер и увеличивать номер на 1.
PS. код точно рабочий?
в одном месте РегистрСведений.НумерацияКлев
во втором РегистрыСведений.НумерацияКлевер.
в третьем НумерацияКонтрагентов
PPS. имха лучше залезть в логику стандартной нумерации - хорошо ее изучить - и "подружить" ее с нужной вам нумерацией.
вы делаете "костыль" и не думаете о том как на ваш "костыль" среагирует существующая система...
а она среагирует... она будет находить ваш костыльный номер и увеличивать номер на 1.
PS. код точно рабочий?
в одном месте РегистрСведений.НумерацияКлев
во втором РегистрыСведений.НумерацияКлевер.
в третьем НумерацияКонтрагентов
PPS. имха лучше залезть в логику стандартной нумерации - хорошо ее изучить - и "подружить" ее с нужной вам нумерацией.
(5)
Просто нужно здесь и сейчас , смотрел вариант с расширением конфигурации , (думал добавить второй нумератор к РеализацииТоваровУслуг) , но не вышло
РегистрыСведений.НумерацияКлевер
- это я случайно тут при вставке кода отредактировал... код работает если не будет строки НомерДокумента = Документы.РеализацияТоваровУслуг.ПолучитьНовыйНомер();
Просто нужно здесь и сейчас , смотрел вариант с расширением конфигурации , (думал добавить второй нумератор к РеализацииТоваровУслуг) , но не вышло
(6)
Молодец!
думал добавить второй нумератор к РеализацииТоваровУслуг
Молодец!
Сижу, работаю, никого не трогаю. Прибегает секретарша, подсовывает мне
шоколадку и говорит:
- Можно к компьютеру две мышки подцепить?
Я отвечаю:
- Ну, в принципе можно, а зачем?
Она отвечает:
- Понимаете, я, когда пасьянс раскладываю, у меня колода заканчивается,
а нужная карта под верхней лежит. Вот я и хотела одной мышкой карту
приподнять, а другой достать ту, что под ней...
шоколадку и говорит:
- Можно к компьютеру две мышки подцепить?
Я отвечаю:
- Ну, в принципе можно, а зачем?
Она отвечает:
- Понимаете, я, когда пасьянс раскладываю, у меня колода заканчивается,
а нужная карта под верхней лежит. Вот я и хотела одной мышкой карту
приподнять, а другой достать ту, что под ней...
Надо и стандартную нумерацию переделывать
Но вообще лучше показать это все заказчику и сказать, что "такое маленькое изменение" - эта ваша одна крошечная буква - поломает вам всю вашу базу навсегда и вы будете до скончания веков все номера ставить вручную, будете ошибаться, делать одинаковые номера, получать штрафы из налоговой, бухгалтеры будут убегать от вас, вам придется поднять им зп втрое, чтобы они хотя бы пару месяцев согласились у вас работать и т.д. и т.п. загни что-нибудь минут на двадцать.
Любят они чуть-чуть подправить номер, самую капельку. Вот неймется...
Но вообще лучше показать это все заказчику и сказать, что "такое маленькое изменение" - эта ваша одна крошечная буква - поломает вам всю вашу базу навсегда и вы будете до скончания веков все номера ставить вручную, будете ошибаться, делать одинаковые номера, получать штрафы из налоговой, бухгалтеры будут убегать от вас, вам придется поднять им зп втрое, чтобы они хотя бы пару месяцев согласились у вас работать и т.д. и т.п. загни что-нибудь минут на двадцать.
Любят они чуть-чуть подправить номер, самую капельку. Вот неймется...
Есть модуль префиксации.
общий модуль ПрефиксацияОбъектовСобытия
функция УстановитьПрефикс
попробуйте там поколдовать. но с вероятность 99% получится каша
общий модуль ПрефиксацияОбъектовСобытия
функция УстановитьПрефикс
ШаблонПрефикса = "[ОР][ИБ]-[Префикс]";
ШаблонПрефикса = СтрЗаменить(ШаблонПрефикса, "[ОР]", ПрефиксОрганизации);
ШаблонПрефикса = СтрЗаменить(ШаблонПрефикса, "[ИБ]", ПрефиксИнформационнойБазы);
ШаблонПрефикса = СтрЗаменить(ШаблонПрефикса, "[Префикс]", Префикс);
попробуйте там поколдовать. но с вероятность 99% получится каша
в общем сделал просто доп поле в списке документов продажи, туда подтягивается номер и добавляется К , сделаю фильтр поиска по данному полю, что бы можно было отсеять документы по данному контрагенту
&НаКлиенте
Процедура СписокДокументыПродажиОбновить(Команда)
Для Каждого Строка Из ЭтотОбъект.ДанныеФормы.СписокДокументыПродажи Цикл
Если Строка.Контрагент.Наименование = "ООО КЛЕВ" Тогда
Строка.МойНомерК = Строка.НомерДокумента + "К";
Иначе
Строка.МойНомерК = Строка.НомерДокумента;
КонецЕсли;
КонецЦикла;
ЭтотОбъект.ОбновитьДанные();
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот