|   |   | 
| 
 | 1С КА проблема с нумерацией | ☑ | ||
|---|---|---|---|---|
| 0
    
        dovenok 21.03.25✎ 10:14 | 
        Добрый день! Появилась задача - отдельная нумерация для определенного контрагента(добавлять к номеру букву "К" , и что бы нумерация была отдельная и не пересекалась со стандартным нумератором. Я сделал регистр для хранения номера нужного контрагента, для которого требуется отдельная нумерация. В итоге при создании документа продажи с другими контрагентами, на первый взгляд с нумерацией все впорядке (она вида ХХ00-000044), но после создания документа с определенным контрагентом(который с буквой К и отдельной нумерацией, вида ХХ00-0001К) , ВСЕ последующие документы по другим контрагентам, выглядят так ХХ00-К00001 , не понимаю в чем дело, так же не получается достать последний номер из стандартного нумератора (нумератор документа РеализацияТоваровУслуг) . Уже всю голову сломал, мб кто укажет на ошибку?
 Процедура ПриЗаписи(Отказ)
	Попытка
		Сообщить("Начало процедуры ПриЗаписи");
		// контрагент
		Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
			Сообщить("Контрагент не указан. Прекращение обработки.");
			Возврат;
		КонецЕсли;
		// фильтр по контрагенту
		КонтрагентКлев = Справочники.Контрагенты.НайтиПоНаименованию("ООО КЛЕВ");
		// првоерка
		Если КонтрагентКлев <> Неопределено И Контрагент = КонтрагентКлев Тогда
			Сообщить("Контрагент совпадает: ООО КЛЕВ");
			
			Запрос = Новый Запрос;
			Запрос.Текст = 
				"ВЫБРАТЬ
				|   ПоследнийНомер
				|ИЗ
				|   РегистрСведений.НумерацияКлев
				|ГДЕ
				|   Контрагент = &Контрагент
				|ORDER BY ПериодДата DESC";
			Запрос.УстановитьПараметр("Контрагент", Контрагент);
			Результат = Запрос.Выполнить();
			ТаблицаРезультатов = Результат.Выгрузить();
			
			Если ТаблицаРезультатов.Количество() > 0 Тогда
				ПоследнийНомер = ТаблицаРезультатов[0].ПоследнийНомер + 1; // Увеличиваем на 1
			Иначе
				ПоследнийНомер = 1; // Если нет записей, начинаем с 1
			КонецЕсли;
			Сообщить("Последний номер для ООО КЛЕВ: " + ПоследнийНомер);
			// добавить нули,не работает
			НомерДокумента = "НЛ00-" + Формат(ПоследнийНомер, "ЧЦ=5; ЧН=") + "К";
			Сообщить("Номер документа: " + НомерДокумента);
			
			ЭтотОбъект.Номер = НомерДокумента;
			// Запись в регистр
			НаборЗаписей = РегистрыСведений.НумерацияКлевер.СоздатьНаборЗаписей();
			Запись = НаборЗаписей.Добавить();
			Запись.ПериодДата = ТекущаяДата();
			Запись.Контрагент = Контрагент;
			Запись.ПоследнийНомер = ПоследнийНомер;
			НаборЗаписей.Записать();
			Сообщить("Номер сохранен в регистр сведений");
		Иначе
			// Для других контрагентов используем стандартную нумерацию
			Сообщить("Контрагент не ООО КЛЕВ. Используется стандартная нумерация.");
			// Получаем номер из стандартного нумератора
			НомерДокумента = Документы.РеализацияТоваровУслуг.ПолучитьНовыйНомер();
			Сообщить("Номер документа: " + НомерДокумента);
			//  номер 
			ЭтотОбъект.Номер = НомерДокумента; // Переопределяем номер документа
		КонецЕсли;
		// Вызовы дополнительных процедур
		ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
		РеализацияТоваровУслугЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
	Исключение
		// Обработка ошибки
		Сообщить("Ошибка: " + ОписаниеОшибки());
		Отказ = Истина;
	КонецПопытки;
	Сообщить("Конец процедуры ПриЗаписи");
КонецПроцедурыДобавил этот код в модуль документа РеализацияТоваровУслуг. Я так понимаю проблема в том,что я не могу получить последний номер из стандартного нумератора? НомерДокумента = Документы.РеализацияТоваровУслуг.ПолучитьНовыйНомер(); Сообщить("Номер документа: " + НомерДокумента); Я пока только изучающий азы,поэтому другого способа не нашел. | |||
| 1
    
        Климов Сергей 21.03.25✎ 09:04 | 
        Создав "хитрый" номер для одного контрагента вы вынуждаете платформу создавать новые номера и всех прочих документов, больше вашего "хитрого". ИМХО, если вы взялись ломать стандартную нумерацию, то вам придётся обрабатывать каждого контрагента, а не только "хитрого".     | |||
| 2
    
        Климов Сергей 21.03.25✎ 09:07 | 
        Возможно, проще будет создать новый реквизит в документе, НомерНаПечать. Для "простых" контрагентов копировать туда Номер, а для "хитрого" - присваивать по вашему алгоритму. И печатать НомерНаПечать. Не забыть при этом про ЭДО.     | |||
| 3
    
        Участковый 21.03.25✎ 09:13 | 
        Порушили всю идеологию 1С. Правильно пользоваться префиксами.
 для всех делаешь префикс ХХ00 Для этого ХХК0 | |||
| 4
    
        dovenok 21.03.25✎ 10:10 | 
        (3) Так префикс же ставится на организацию, а мне нужна какая-то пометка для контрагента и чтобы не учитывался в стандартной нумерации. У нас две фирмы, и когда мы продаем сами себе в другое ООО, нам нужно эти документы «отсеять» из общей массы.     | |||
| 5
    
        dovenok 21.03.25✎ 10:13 | 
        (3) или получается адаптировать мой     | |||
| 6
    
        dovenok 21.03.25✎ 10:16 | 
        (3) или получается адаптировать мой код, чтобы он менял префикс на ХХК0- , и записывал в отдельный регистр? , просто я так понял, он все равно будет сбивать стандартный нумератор     | |||
| 7
    
        shuhard 21.03.25✎ 10:15 | 
        (5)
 (6) не взлетит | |||
| 8
    
        mikecool 21.03.25✎ 10:16 | 
        задача такова, что не стоит ее делать     | |||
| 9
    
        Климов Сергей 21.03.25✎ 10:16 | 
        (4) 
 1) А условия Контрагент = Наша организация для отсева недостаточно? 2) Какие типы документов собираетесь нумеровать? Законодательство требует сплошной последовательной нумерации некоторых документов (кассовые ордера, счета-фактуры). | |||
| 10
    
        dovenok 21.03.25✎ 11:08 | 
        (9) Документы продажи, реализация и счет фактура. 
 Подчеркну,что отдельная нумерация нужна только для документов,когда мы продаем САМИ СЕБЕ , у нас допустим ООО КЛЕВ и ООО НЕЛ , вот когда из ООО КЕЛ продаем в ООО КЛЕВ , нужно чтобы документы выглядел что то вроде (НЛ00-000011К , или НЛ0К-000011) , а все другие документы продажи контрагентам выглядели как обычно НЛ00-000044,НЛ00-000045 и т.п. ) чтобы нумерация не сбивалась. Я сейчас поглубже покопал, мне кажется тут нужно всю логику нумерации ломать, ради буковки ? | |||
| 11
    
        Ivanich 21.03.25✎ 11:07 | 
        Наберите в поиске "интеркампани в 1с ка".
 Может вам это нужно, а не перенумерация | |||
| 12
    
        dovenok 21.03.25✎ 11:26 | 
        (11) К сожалению не подходит, сказали что под наше взаимодействие между нашими юр.лицами не подойдет . Я еще думал мб сделать проверку номера документов из реестраДокументов там брать последний НомерДокументаИБ , по логике получается нумерация ООО КЛЕВ у меня пишется в отдельный регистр НумерацияДокументов, а стандартный нумератор хранит номера документов в регистре РеестрДокументов.НомерДокументаИБ , есть ли шанс что это заработает?     | |||
| 13
    
        d4rkmesa 21.03.25✎ 11:28 | 
        (0) >>Я пока только изучающий азы,поэтому другого способа не нашел.
 Если вам дали такую задачу, то этот кто-то - идиот. | |||
| 14
    
        Serg_1960 21.03.25✎ 11:35 | 
        Имхо, можно использовать любые префиксы для нумерации... лишь бы  создаваемые номера были меньше номеров с "обычными" префиксами.     | |||
| 15
    
        dovenok 21.03.25✎ 11:39 | 
        (14) тут еще дело в чем, общался с поддержкой 1С , чем короче номер,тем он считается больше, и если я меняю для конкретного контрагента префикс(добавляю букву) , то последующие документы формируются тоже с коротким номером. Было НЛ00-000040 , потом был контрагент с НЛК0-0001 , в итоге следующий документ (остальные контрагенты) стали НЛ00-0002     | |||
| 16
    
        Serg_1960 21.03.25✎ 11:43 | 
        Имхо, не стоит пытаться добавить свой префикс/суффикс к существующей нумерации - зачем провоцировать конкуренцию? :) а можно задействовать иные префиксы чем те, которые уже используются для организаций.
 Например, для организаций уже используются "КЛ" ("Клев") и "НЛ" ("Нел") - тогда для документов "Клев"->"Нел" - префикс "КН", а для "Клев"<-"Нел" - "НК". | |||
| 17
    
        Мультук гуру 21.03.25✎ 11:42 | 
        (12) 
 >> а стандартный нумератор хранит номера документов >>в регистре РеестрДокументов.НомерДокументаИБ Нет. Вы думаете неправильно. Этот регистр вовсе не для этого >> отдельная нумерация нужна только для документов Если это чисто "хозяйственная перепродажа" то наверняка есть документ "Передача товаров между организациями" - используйте его. Главное. Не зная и не умея (уж простите) вы роете себе яму. Ах да. Каждый год нумерация начинается с 1 На этом аминь и удачи. | |||
| 18
    
        Волшебник 21.03.25✎ 11:42 | 
        Сделайте системный номер просто числовым без префикса, а на форму вынесите новый строковый реквизит НомерДок. 
 НомерДок формируйте при записи документа собственным алгоритмом. | |||
| 19
    
        dovenok 21.03.25✎ 11:52 | 
        (16) у нас две базы 1с КА , одна по одной организации КЛЕВ (там перепродаж самим себе нет) , другая база для НЕЛ , вот там перепродажа уже есть, то есть у нас в базе одно юр лицо настроено)     | |||
| 20
    
        dovenok 21.03.25✎ 11:52 | 
        (18) спасибо,попробую этот вариант, только после обновлений я так полагаю нужно будет ручками корректировать снова?     | |||
| 21
    
        d4rkmesa 21.03.25✎ 11:53 | 
        (15) "Астанавитесь"(с)
 Кстати, о какой версии КА речь? | |||
| 22
    
        dovenok 21.03.25✎ 11:56 | 
        (18) забыл уточнить, но по факту системный номер будет все равно генерироваться для всех контрагентов подряд, то есть в печатной форме отобразится другой по сути номер(от стандартного нумератора) , правильно же я понимаю?     | |||
| 23
    
        dovenok 21.03.25✎ 11:55 | 
        (21) 1С КА 2     | |||
| 24
    
        d4rkmesa 21.03.25✎ 14:10 | 
        (22) Это будет отдельный, весьма интересный вопрос.
 Для начала, почему бы не разобраться, как все работает в КА/ERP? Чтобы не ходить вокруг да около, есть ПрефиксацияОбъектовСобытия.УстановитьПрефикс (...). Можно добавить в расширение написать что-то вроде, только под вашу задачу без лишних условий: &Вместо("УстановитьПрефикс")
Процедура РасшПР_УстановитьПрефикс(Источник, Префикс, УстановитьПрефиксИнформационнойБазы, УстановитьПрефиксОрганизации)
	
	//++ ERP
	//Добавим формирование префикса с номером дня года в реализации (в ERP - перемещение между орг.-ми и другими документами реализации с единым нумератором)
	МетаданныеИсточника = Источник.Метаданные();
	
	Если Метаданные.Документы.Содержит(МетаданныеИсточника) И Источник.Дата >= Дата(2025, 1, 1) Тогда
		МетаданныеРеализаций = Метаданные.Документы.РеализацияТоваровУслуг;	
		// либо документ РеализацияТоваровУслуг, либо другой документ продажи с тем же нумератором
		ЭтоДокументРеализации = (МетаданныеИсточника = МетаданныеРеализаций Или МетаданныеИсточника.Нумератор <> Неопределено И МетаданныеИсточника.Нумератор = МетаданныеРеализаций.Нумератор);
		// для реализаций устанавливаем префикс
		Если ЭтоДокументРеализации И Не ЗначениеЗаполнено(Префикс) Тогда
			Префикс = Формат(ДеньГода(Источник.Дата), "ЧЦ=3; ЧДЦ=0; ЧВН=; ЧГ=0");	//номер года в виде строки от 001 до 365			
		КонецЕсли;
	КонецЕсли;
	//-- ERP
	
	ПродолжитьВызов(Источник, Префикс, УстановитьПрефиксИнформационнойБазы, УстановитьПрефиксОрганизации);
КонецПроцедуры | |||
| 25
    
        Волшебник 21.03.25✎ 11:56 | 
        (22) Переделайте печатную форму     | |||
| 26
    
        Serg_1960 21.03.25✎ 11:58 | 
        (15) Это азбука :)
 Механизм автонумерации выдает номера в разрезе пространств номеров и префиксов. Пространство номера в зависимости от типа объекта может содержать метаданные, владельца, период и др. В пределах пространства номеров номер выдается в разрезе префиксов. По каждому префиксу хранится максимальный выданный номер, на основании которого выдается следующий номер. Один и тот же максимальный номер может соответствовать нескольким префиксам. Источник: https://its.1c.ru/db/metod8dev/content/1550/hdoc | |||
| 27
    
        Мультук гуру 21.03.25✎ 14:10 | 
        (0) 
 Ах да. И о знаниях/умениях. --Папа, папа! еб@нёт ? --Обязательно, сынок! Опасный программный код// Запись в регистр НаборЗаписей = РегистрыСведений.НумерацияКлевер.СоздатьНаборЗаписей(); Запись = НаборЗаписей.Добавить(); Запись.ПериодДата = ТекущаяДата(); Запись.Контрагент = Контрагент; Запись.ПоследнийНомер = ПоследнийНомер; НаборЗаписей.Записать(); | |||
| 28
    
        d4rkmesa 21.03.25✎ 12:00 | 
        (24) Здесь вы можете ваш префикс отработать, а там где не надо - установить "0" в качестве такового, чтобы нумерация не путалась.     | |||
| 29
    
        Волшебник 21.03.25✎ 12:37 | 
        (27) Хороший код для очистки всего регистра     | |||
| 30
    
        dovenok 21.03.25✎ 14:11 | 
        Сделал по совету выше, добавил столбец с номером , сделаю возможность поиска по данному реквизиту что бы отсяить все доки с буквой К . Видимо самое безопасное и быстрое решение
 &НаКлиенте Процедура СписокДокументыПродажиОбновить(Команда) Для Каждого Строка Из ЭтотОбъект.ДанныеФормы.СписокДокументыПродажи Цикл Если Строка.Контрагент.Наименование = "ООО КЛЕВ" Тогда Строка.МойНомерК = Строка.НомерДокумента + "К"; Иначе Строка.МойНомерК = Строка.НомерДокумента; КонецЕсли; КонецЦикла; ЭтотОбъект.ОбновитьДанные(); КонецПроцедуры | |||
| 31
    
        d4rkmesa 21.03.25✎ 13:04 | 
        Клинический случай необучаемости.     | |||
| 32
    
        dovenok 21.03.25✎ 14:11 | 
        (31) &Вместо("УстановитьПрефикс")
 Процедура РасшПР_УстановитьПрефикс(Источник, Префикс, УстановитьПрефиксИнформационнойБазы, УстановитьПрефиксОрганизации) МетаданныеИсточника = Источник.Метаданные(); Если Метаданные.Документы.Содержит(МетаданныеИсточника) Тогда МетаданныеРеализаций = Метаданные.Документы.РеализацияТоваровУслуг; ЭтоДокументРеализации = (МетаданныеИсточника = МетаданныеРеализаций Или МетаданныеИсточника.Нумератор <> Неопределено И МетаданныеИсточника.Нумератор = МетаданныеРеализаций.Нумератор); Если ЭтоДокументРеализации Тогда Контрагент = Источник.Контрагент; Если Контрагент.Наименование = "ООО КЛЕВ" Тогда Префикс = "НК"; КонецЕсли; КонецЕсли; КонецЕсли; ПродолжитьВызов(Источник, Префикс, УстановитьПрефиксИнформационнойБазы, УстановитьПрефиксОрганизации); КонецПроцедуры типо этого? | |||
| 33
    
        d4rkmesa 21.03.25✎ 14:40 | 
        (32) Да, и проверить как будут работать номера там, где [пользовательский] префикс не нужен. 
 Скорее всего, понадобится установить префикс "0" таким номерам примерно там же через Иначе. И, далее еще будет отдельный вопрос по номерам счетов-фактур (и УПД, как следствие). Номера счетов-фактур (префиксы, точнее) по большей части отрабатывают через ДокументОбъект.СчетФактураВыданный.ПриУстановкеНовогоНомера(...), там тоже можно что-то дописать через расширение, но с учетом что длина номера 12, а не 11. зы: А потом еще будут вопросы по представлению номера для печатных форм и ЭДО, ну может и типовой вариант устроит в таком случае. | |||
| 34
    
        dovenok 21.03.25✎ 14:48 | 
        ну пока сделал так, но префикс так и не меняется 
 &Вместо("УстановитьПрефикс") Процедура РасшПР_УстановитьПрефикс(Источник, Префикс, УстановитьПрефиксИнформационнойБазы, УстановитьПрефиксОрганизации) Сообщить("Вызов УстановитьПрефикс для документа: " + Источник.Метаданные().Имя); Если Источник.Метаданные().ПолноеИмя = "Документ.РеализацияТоваровУслуг" Тогда Если Источник.Метаданные().Реквизиты.Найти("Контрагент") <> Неопределено Тогда Контрагент = Источник.Контрагент; Сообщить("Контрагент в документе: " + ?(Контрагент <> Неопределено, Контрагент.Наименование, "Не определен")); Если Контрагент <> Неопределено И Контрагент.Наименование = "ООО КЛЕВ" Тогда Префикс = "НК"; Сообщить("Изменен префикс на: " + Префикс); Иначе Сообщить("Оставлен стандартный префикс: " + Префикс); КонецЕсли; Иначе Сообщить("В документе нет реквизита 'Контрагент'"); КонецЕсли; Иначе Сообщить("Документ не является Реализацией товаров и услуг"); КонецЕсли; ПродолжитьВызов(Источник, Префикс, УстановитьПрефиксИнформационнойБазы, УстановитьПрефиксОрганизации); КонецПроцедуры | |||
| 35
    
        d4rkmesa 21.03.25✎ 14:56 | 
        (34) Это будет работать при установке нового номера, если очистить поле с номером или создать новый документ.
 Плюс вопрос работы расширения, отключить галочку "безопасный режим". Эту процедуру достаточно несложно отладить. | |||
| 36
    
        Злоп 21.03.25✎ 22:49 | 
        (9) насчет сплошной последовательной - единого мнения нет. Законодательство требует хронологической последовательности. А что это такое - каждый трактует как ему угодно.
 . Можно еще вспомнить отдельную нумерацию авансовых счф... | |||
| 37
    
        Злоп 21.03.25✎ 22:52 | 
        А по (0) можно сказать классическое
 Кг/ам . А вдруг если еще вывод на печать настроен без префиксов - в общем случае может случиться одинаковый номер в разных упд/счф. И будет жпс. | |||
| 38
    
        Волшебник модератор 21.03.25✎ 22:54 | 
        (37) Не ругайтесь     | |||
| 39
    
        craxx 22.03.25✎ 08:00 | 
        (0) Ни в коем случае нельзя добавлять буквы в конец кодов/номеров документов.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |