1С КА проблема нумерацией

1. dove1 21.03.25 08:02 Сейчас в теме
Добрый день! Появилась задача - отдельная нумерация для определенного контрагента(добавлять к номеру букву "К" , и что бы нумерация была отдельная и не пересекалась со стандартным нумератором. Я сделал регистр для хранения номера нужного контрагента, для которого требуется отдельная нумерация. В итоге при создании документа продажи с другими контрагентами, на первый взгляд с нумерацией все впорядке (она вида ХХ00-000044), но после создания документа с определенным контрагентом(который с буквой К и отдельной нумерацией, вида ХХ00-0001К) , ВСЕ последующие документы по другим контрагентам, выглядят так ХХ00-К00001 , не понимаю в чем дело, так же не получается достать последний номер из стандартного нумератора (нумератор документа РеализацияТоваровУслуг) . Уже всю голову сломал, мб кто укажет на ошибку?

Процедура ПриЗаписи(Отказ)
    Попытка
        Сообщить("Начало процедуры ПриЗаписи");

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

        // фильтр по контрагенту
        КонтрагентКлев = Справочники.Контрагенты.НайтиПоНаименованию("ООО КЛЕВ");

        // првоерка
        Если КонтрагентКлев <> Неопределено И Контрагент = КонтрагентКлев Тогда
            Сообщить("Контрагент совпадает: ООО КЛЕВ");

            
            Запрос = Новый Запрос;
            Запрос.Текст = 
                "ВЫБРАТЬ
                |   ПоследнийНомер
                |ИЗ
                |   РегистрСведений.НумерацияКлев
                |ГДЕ
                |   Контрагент = &Контрагент
                |ORDER BY ПериодДата DESC";

            Запрос.УстановитьПараметр("Контрагент", Контрагент);
            Результат = Запрос.Выполнить();
            ТаблицаРезультатов = Результат.Выгрузить();

            
            Если ТаблицаРезультатов.Количество() > 0 Тогда
                ПоследнийНомер = ТаблицаРезультатов[0].ПоследнийНомер + 1; // Увеличиваем на 1
            Иначе
                ПоследнийНомер = 1; // Если нет записей, начинаем с 1
            КонецЕсли;

            Сообщить("Последний номер для ООО КЛЕВ: " + ПоследнийНомер);

            // добавить нули,не работает
            НомерДокумента = "НЛ00-" + Формат(ПоследнийНомер, "ЧЦ=5; ЧН=") + "К";
            Сообщить("Номер документа: " + НомерДокумента);

            
            ЭтотОбъект.Номер = НомерДокумента;

            // Запись в регистр
            НаборЗаписей = РегистрыСведений.НумерацияКлевер.СоздатьНаборЗаписей();
            Запись = НаборЗаписей.Добавить();
            Запись.ПериодДата = ТекущаяДата();
            Запись.Контрагент = Контрагент;
            Запись.ПоследнийНомер = ПоследнийНомер;
            НаборЗаписей.Записать();

            Сообщить("Номер сохранен в регистр сведений");
        Иначе
            // Для других контрагентов используем стандартную нумерацию
            Сообщить("Контрагент не ООО КЛЕВ. Используется стандартная нумерация.");

            // Получаем номер из стандартного нумератора
            НомерДокумента = Документы.РеализацияТоваровУслуг.ПолучитьНовыйНомер();
            Сообщить("Номер документа: " + НомерДокумента);

            //  номер 
            ЭтотОбъект.Номер = НомерДокумента; // Переопределяем номер документа
        КонецЕсли;

        // Вызовы дополнительных процедур
        ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
        РеализацияТоваровУслугЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);

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

    Сообщить("Конец процедуры ПриЗаписи");
КонецПроцедуры

Показать



Так же прикрепляю скрины регистра , который создал. Добавил этот код в модуль документа РеализацияТоваровУслуг. Я так понимаю проблема в том,что я не могу получить последний номер из стандартного нумератора?

НомерДокумента = Документы.РеализацияТоваровУслуг.ПолучитьНовыйНомер();
Сообщить("Номер документа: " + НомерДокумента);

. Я пока только изучающий азы,поэтому другого способа не нашел.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
15. dove1 21.03.25 12:58 Сейчас в теме
в общем сделал просто доп поле в списке документов продажи, туда подтягивается номер и добавляется К , сделаю фильтр поиска по данному полю, что бы можно было отсеять документы по данному контрагенту

&НаКлиенте
Процедура СписокДокументыПродажиОбновить(Команда)
    
    Для Каждого Строка Из ЭтотОбъект.ДанныеФормы.СписокДокументыПродажи Цикл  
        Если Строка.Контрагент.Наименование = "ООО КЛЕВ" Тогда  
            Строка.МойНомерК = Строка.НомерДокумента + "К";  
        Иначе  
            Строка.МойНомерК = Строка.НомерДокумента;  
        КонецЕсли;  
    КонецЦикла;  

    ЭтотОбъект.ОбновитьДанные();
    
    
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2107191 21.03.25 08:35 Сейчас в теме
(1)
не понимаю в чем дело
В том, что типовым механизмам нумерации (как платформенным, так и БСП) насрать на твой самопальный регистр.
3. dove1 21.03.25 08:47 Сейчас в теме
4. glek 119 21.03.25 08:48 Сейчас в теме
(1) А если будет номер 1 и номер 1К это прокатит?
5. Anton_new01 21.03.25 09:01 Сейчас в теме
(1) ошибка не в коде, а в методологии.
вы делаете "костыль" и не думаете о том как на ваш "костыль" среагирует существующая система...
а она среагирует... она будет находить ваш костыльный номер и увеличивать номер на 1.

PS. код точно рабочий?
в одном месте РегистрСведений.НумерацияКлев
во втором РегистрыСведений.НумерацияКлевер.
в третьем НумерацияКонтрагентов

PPS. имха лучше залезть в логику стандартной нумерации - хорошо ее изучить - и "подружить" ее с нужной вам нумерацией.
6. dove1 21.03.25 10:00 Сейчас в теме
(5)
РегистрыСведений.НумерацияКлевер
- это я случайно тут при вставке кода отредактировал... код работает если не будет строки
НомерДокумента = Документы.РеализацияТоваровУслуг.ПолучитьНовыйНомер();


Просто нужно здесь и сейчас , смотрел вариант с расширением конфигурации , (думал добавить второй нумератор к РеализацииТоваровУслуг) , но не вышло
7. user2107191 21.03.25 10:13 Сейчас в теме
(6)
думал добавить второй нумератор к РеализацииТоваровУслуг

Молодец!
Сижу, работаю, никого не трогаю. Прибегает секретарша, подсовывает мне
шоколадку и говорит:
- Можно к компьютеру две мышки подцепить?
Я отвечаю:
- Ну, в принципе можно, а зачем?
Она отвечает:
- Понимаете, я, когда пасьянс раскладываю, у меня колода заканчивается,
а нужная карта под верхней лежит. Вот я и хотела одной мышкой карту
приподнять, а другой достать ту, что под ней...
8. starjevschik 21.03.25 10:20 Сейчас в теме
Надо и стандартную нумерацию переделывать
Но вообще лучше показать это все заказчику и сказать, что "такое маленькое изменение" - эта ваша одна крошечная буква - поломает вам всю вашу базу навсегда и вы будете до скончания веков все номера ставить вручную, будете ошибаться, делать одинаковые номера, получать штрафы из налоговой, бухгалтеры будут убегать от вас, вам придется поднять им зп втрое, чтобы они хотя бы пару месяцев согласились у вас работать и т.д. и т.п. загни что-нибудь минут на двадцать.
Любят они чуть-чуть подправить номер, самую капельку. Вот неймется...
9. dove1 21.03.25 10:53 Сейчас в теме
(8) Попробую, но утверждают что без этого никак. Что иначе будет как раз беда с налоговой)
10. user2107191 21.03.25 11:19 Сейчас в теме
(9) ЧАВО???? Это ТВОЯ нумерация, и твоя организация её должна вести САМОСТОЯТЕЛЬНО.
Вот и пусть ведет по общим правилам, не противоречащим налоговой.
А не по правилам твоих контрагентов.
11. muskul 21.03.25 11:20 Сейчас в теме
Есть модуль префиксации.
общий модуль ПрефиксацияОбъектовСобытия
функция УстановитьПрефикс
    ШаблонПрефикса = "[ОР][ИБ]-[Префикс]";
    ШаблонПрефикса = СтрЗаменить(ШаблонПрефикса, "[ОР]", ПрефиксОрганизации);
    ШаблонПрефикса = СтрЗаменить(ШаблонПрефикса, "[ИБ]", ПрефиксИнформационнойБазы);
    ШаблонПрефикса = СтрЗаменить(ШаблонПрефикса, "[Префикс]", Префикс);


попробуйте там поколдовать. но с вероятность 99% получится каша
12. user2107191 21.03.25 11:22 Сейчас в теме
(11) У него проблема в том, что он хочет букву иметь в конце номера. То есть постфикс, а не префикс.
А нумератор и БСП не работает с постфиксами.
13. dove1 21.03.25 11:37 Сейчас в теме
(12) нет ,устроит и ХХ0К-0000ХХ , главное куда то вкрячить букву К , и что бы не повлияло на нумерацию остальных документов
14. user2107191 21.03.25 11:56 Сейчас в теме
15. dove1 21.03.25 12:58 Сейчас в теме
в общем сделал просто доп поле в списке документов продажи, туда подтягивается номер и добавляется К , сделаю фильтр поиска по данному полю, что бы можно было отсеять документы по данному контрагенту

&НаКлиенте
Процедура СписокДокументыПродажиОбновить(Команда)
    
    Для Каждого Строка Из ЭтотОбъект.ДанныеФормы.СписокДокументыПродажи Цикл  
        Если Строка.Контрагент.Наименование = "ООО КЛЕВ" Тогда  
            Строка.МойНомерК = Строка.НомерДокумента + "К";  
        Иначе  
            Строка.МойНомерК = Строка.НомерДокумента;  
        КонецЕсли;  
    КонецЦикла;  

    ЭтотОбъект.ОбновитьДанные();
    
    
КонецПроцедуры
Показать
16. muskul 24.03.25 02:19 Сейчас в теме
(15) Говорят что можно сделать фильтр по контрагенту и сегменту клиентов, но это не точно)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот