Как Организовать Нумерацию Документов

Дайнеко

Well-known member
19.11.2009
951
0
#1
Задача возникает, если организовать в одной базе учет нескольких фирм. Как тогда нумеровать документы для каждой фирмы раздельно.
Можно в номере писать префикс. Но:
- хочется работать с нормальным номером. Взял да и набрал номер накладной или договора.
- есть доки с цифровым номером.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#2
Может быть, отключить контроль уникальности, и в подписке ПриУстановкеНовогоНомера считать код запросом?
 

Дайнеко

Well-known member
19.11.2009
951
0
#3
"считать код запросом" - это значит запросом найти последний номер?
Если так, то по сути организовать замену встроенной нумерации. С теми же задачами периода и контроля уникальности. Сложновато.

Я вот смотрю типовая позиционируется как для учета холдинга. А вот как там с нумерацией? Кто знает?
 

unknown181538

НеГуру
28.12.2008
1 417
0
#4
"считать код запросом" - это значит запросом найти последний номер?
Если так, то по сути организовать замену встроенной нумерации. С теми же задачами периода и контроля уникальности. Сложновато.
А в чем сложность? Правда, на больших объемах, имхо, тормоза могут быть.
Я вот смотрю типовая позиционируется как для учета холдинга. А вот как там с нумерацией? Кто знает?
Вы про какую конфигурацию? Во всех, которые я видел, префиксы.
- хочется работать с нормальным номером. Взял да и набрал номер накладной или договора.
В управляемом приложении, при наборе номера в списке, открывается поиск, который позволяет...
- есть доки с цифровым номером.
Сделать, чтобы не было. Зачем они?
Видел цифровые номера только в очень старых типовых типа ТиС 8.7, или что-то в этом роде.
 

puh14

Well-known member
11.07.2008
1 412
0
#5
К сожалению замена автоматического механизма нумерации. Пришлось мне такое сделать.
на самом деле - очень просто: сносим контроль уникальности, берем подписку на события ПриУстановкеНовогоНомераДокумента, шаманим процедурку (вот например моя, там была трабла с любовью манагеров добавлять всякие "/" или "\" в нумерацию, доставшаяся по наследству):
Код:
Процедура ПриУстановкеНовогоНомераДокументаПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс) Экспорт
//	ОбщегоНазначения.ДобавитьПрефиксОрганизации(Источник, Префикс); //15,08,11 Пушкарев
Если (Источник.Метаданные().Имя = "РеализацияТоваровУслуг") Или
(Источник.Метаданные().Имя = "ЗаказПокупателя") или
(Источник.Метаданные().Имя = "СчетФактураВыданный") Тогда //15,08,11 Пушкарев;
СтандартнаяОбработка = Ложь;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 30
|	Документ.Номер КАК Номер
|ИЗ
|	Документ.РеализацияТоваровУслуг КАК Документ
|
|УПОРЯДОЧИТЬ ПО
|	Документ.Дата УБЫВ";
ТЗ = Запрос.Выполнить().Выгрузить();
Спс = Новый СписокЗначений;
Для ааа = 0 по ТЗ.Количество()-1 Цикл
Попытка
Если ЕстьНеЦифры(СокрЛП(Тз[ааа].Номер)) Тогда
Тз.Удалить(ааа);
ааа = ааа -1;
Иначе
Спс.Добавить(Число(СокрЛП(Тз[ааа].Номер)));
КонецЕсли;
Исключение
Прервать;
КонецПопытки;
КонецЦикла;
Спс.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
Номер = Спс[0].Значение +1;
Источник.Номер = одДополнитьСтроку(СтрЗаменить(СокрЛП(Номер),Символ(160),""),6);// пока поставили 6 символов
КонецЕсли;

ОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);
КонецПроцедуры
и вуоля! ( кстати - посмотрел и понял, что на смену года я не заложился, ну это то вообще не сложно. А номер у меня таки уникальный, так чот вторая часть вопроса мне ненужна).

Кстати - интересно как будет себя вести функции найтиПоНомеру() - их таки придется всех переписывать.

всвязи с этим - второй вариант. В базе вся нумерация хранится таки с преффиксами,тогда поиск по номеру остается нормальным.А вот при выводе документов на печать, отображении в формах усё подменяется.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#6
Может быть, было бы изящнее использовать ПОДОБНО, и упорядочивание по номеру. Ну и "ПЕРВЫЕ 1".
 

puh14

Well-known member
11.07.2008
1 412
0
#7
подобно очень медленно пашет. Все эти лайки с текстом вообще отвратно работают (по скорости). Посему сделал так . А почему 30 первых, так надо чтобы хоть один номер был чисто цифровым.
А поле дата по жизни индексированно, по нему упорядочивание идет быстро. Можно как вариант еще переделывать индексы скриптом на скуле - чтоб совсем быстрее было.

апдейт - если уж использовать ПОДОБНО так на результатах первого запроса, помещенных в временную таблицу, это действительно будет быстрее.
 

Дайнеко

Well-known member
19.11.2009
951
0
#8
А puh14-то разошелся. Видно что достал из архива процедуру времен молодости, так и прослезился, вспомнил сколько сил положил. :gigi:

К делу, господа. Результата он добился такого - он меня напугал. Чтобы сделать ручную нумерацию нужно учесть:
- запрос сделать с учетом Фирмы. Т.е. последний номер для данной фирмы.
- сброс нумерации в новом периоде. Для одних доков это год, для других квартал, месяц
- длину номера не навязывать программно, а желательно подстраиваться под пользователя.
- а все-же номера разных фирм могут пересечься. При выключенном контроле сойдет - в базу запишет. А при обменах?

Хочу рассмотреть такое направление мысли: сделать номер с префиксом. Он мне не нравится неудобством корректировки. А если номер показать на форме разложенным на 2 поля ввода: префикс и собственно номер. Префикс назначается прогой в зависимости от "Фирма". А номер предлагается процедурой вроде вышеизложенного "шэдэфра". Перед записью сформировать полный номер сложением. При этом системный контроль оставить - пусть не пропускает. Удобно тем, что легко номер изменить и в тоже время не лезут руки пачкать префикс.

Кто не понял - переспросите.
 

puh14

Well-known member
11.07.2008
1 412
0
#9
А puh14-то разошелся. Видно что достал из архива процедуру времен молодости, так и прослезился, вспомнил сколько сил положил.
Чорт, молодость два месяца назад кончилась! ;-)

- запрос сделать с учетом Фирмы. Т.е. последний номер для данной фирмы.
не проблема - добавить проверку на заполненность фирмы, пока не заполнено - фиг номер махнешь. Как заполнено - в условие в запрос.

- сброс нумерации в новом периоде. Для одних доков это год, для других квартал, месяц
добавить в запрос условие на период с датами начала/конца. период брать из метаданных.

- длину номера не навязывать программно, а желательно подстраиваться под пользователя.
Ну так у меня условие такое было - так как старую нумерацию гробить было нельзя и бухам хотелось "красоты", пришлось дополнять нуликами.

- а все-же номера разных фирм могут пересечься. При выключенном контроле сойдет - в базу запишет. А при обменах?
Ну если в обмен пойдут документы только от одной фирмы - тогда нормально ,а иначе будет ошибками сыпать.


Хочу рассмотреть такое направление мысли: сделать номер с префиксом. Он мне не нравится неудобством корректировки. А если номер показать на форме разложенным на 2 поля ввода: префикс и собственно номер. Префикс назначается прогой в зависимости от "Фирма". А номер предлагается процедурой вроде вышеизложенного "шэдэфра". Перед записью сформировать полный номер сложением. При этом системный контроль оставить - пусть не пропускает. Удобно тем, что легко номер изменить и в тоже время не лезут руки пачкать префикс.
Удобно - только все печатки переделывать придется, а то в документе номер из цифр, а на печатке какие-то буковки вылезають. А при условии что в большинстве печаток номер получается запросом и потом идет заполнение параметров секции шапка передачей в него первой строки выборки ... а СтрЗаменить в запросах не пашут ;-(. Хоть новый реквизит типа НомердляПечати добавляй.