Уменьшение номера документа

  • Автор темы Guest
  • Дата начала
G

Guest

#1
1с Бухгалтерия 8

Номер документов имеет вид: А0510/00001
А префикс, 05 месяц, 10 год.. дальше номер.
Необходимо сделать чтоб номер имел не 5 цифр, а три, то есть:
А0510/001
Зачем? Требования начальства.

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

Что изменить необходимо или как это решить?
 

Darlock

Well-known member
04.01.2008
560
1
#2
Можно в конфигураторе укоротить поле "Номер". а в обработчике "ПриУстановкеНовогоНомера" написать как надо формировать новый номер. Или руками постоянно изменять номер. В первом и во втором случае надо помнить, что если есть у документа нумератор, то номера собьются у всех документов подчиненных регистратору.
 
G

Guest

#3
В конфигураторе укоротить поле номер, это длину?
А тогда не у всех ли документов изменится номер? думаю это повлияет на предыдущие документы...

Способ руками не подходит =(
 

Darlock

Well-known member
04.01.2008
560
1
#4
В конфигураторе укоротить поле номер, это длину?
А тогда не у всех ли документов изменится номер? думаю это повлияет на предыдущие документы...

Способ руками не подходит =(
Само собой повлияет, т.к. единый объект метаданных.другой путь - набить пробелов в начале (перед префиксом). Должно помочь. В противном случае, без вмешательства в длину номера не обойтись. потому как у вас радикальное изменение нумерации. Если увеличение - проблем нет (добавляются лидирующие нуль), а у вас уменьшение номера происходит.
 
H

Hryv

#5
1. Как формировался номер вида А0510/00001 для уже созданных документов? Программой или руками?
2. Вы хотите перенумеровать уже существующие докуметы? Или(и?) чтобы новые нумеровались по новому правилу?


Добавлено:
В противном случае, без вмешательства в длину номера не обойтись. потому как у вас радикальное изменение нумерации. Если увеличение - проблем нет (добавляются лидирующие нуль), а у вас уменьшение номера происходит.
а что в 1С 8 все так запущено? если длина номера 5, то нельзя создать док с номером 3, а только с номером 00003? или " 3"?
 
G

Guest

#6
1. Программно через подписку

2. Хочу чтоб новые нумеровались по новому правилу.
 
H

Hryv

#7
Я с 1С 8 плохо знаком, но аж самому стало интересно, что за проблема такая
Для 7.7 - это как будто на пустом месте проблема
Дома вечером полистаю книжку по 1С 8, утром отпишу что найду
 

Darlock

Well-known member
04.01.2008
560
1
#8
1. Программно через подписку

2. Хочу чтоб новые нумеровались по новому правилу.
Через подписку можно, если вы описали программно как сформировать номер, и этот программный код внесен не в модуль формы, а в глобальный обработчик в модуле объекта (ОбработкаЗаполнения, ПриЗаписи, ПослеЗаписи и т.п.)
 

Darlock

Well-known member
04.01.2008
560
1
#9
1. Как формировался номер вида А0510/00001 для уже созданных документов? Программой или руками?
2. Вы хотите перенумеровать уже существующие докуметы? Или(и?) чтобы новые нумеровались по новому правилу?


Добавлено:
а что в 1С 8 все так запущено? если длина номера 5, то нельзя создать док с номером 3, а только с номером 00003? или " 3"?
1. Без программного кода "Как формировался номер вида..."- гадание на кофейной гуще, могу только предположить следующий способ:

Если бы я разрабатывал нумерацию, я бы руки человека не пустил бы в номер ИМХО.

Код:
Префикс = "А" + Формат(ТекущаяДата(), "ДФ=MMyy");
Номер = Префикс + "/" + Номер;
2. Если уменьшать длину номера с "5" до "3" символов в конфигураторе, то все документы потеряют 2 символа (и старые и новые).
3. Если у вас программный способ формирования нумерации и нет нумератора у докмента, то можно рассмотреть следующий вариант:
Код:
Префикс = "А" + Формат(ТекущаяДата(), "ДФ=MMyy");
Номер = Префикс + "/" + Прав(Номер, 3);
Нумератор - некий объект метаданных, который отвечает за порядок следования и присвоения номеров документам при создании. Для нескольких документов может быть 1 общий нумератор:
например, в системе есть 2 документа "Реализация товаров" и "Реализация автомобилей". У них общий нумератор "Расход". Если вы руками/программно измените хоть один номер в документе (без разницы, реализация товаров или автомобилей), то при вводе следующего документа система сама проанализирует последовательность номеров нумератора и предложит новый номер отвечающий последним требованиям. (Длина, префикс, последняя цифра и т.п.).

Решение вашей проблемы, думаю, лежит именно в реализации механизма программной установки нового номера (обработчик "ПриУстановкеНовогоНомера" в модуле объекта документа), в котором вы опишите как формировать новый номер. При этом, надо помнить, что если номер стал короче (с 5 символов до 3), то новые документы будут идти по порядку номеров раньше (5>3). Если есть нумератор, то уменьшение длины номера повредить ему не должно. Обратная ситуация, если вы сделаете потом длину 6 символов, то последовательность присвоения номера нумератором будет уже не корректной для всей группы документов подчиненных нумератору.
 
G

Guest

#10
Кажется я уже запуталась...
В общем номер вида формировался в подписке в процедуре ПриУстановкиНовогоНомера добавила
ДобавитьПрефиксГодИМесяц(Источник, Префикс);

И далее в процедуре

Процедура ДобавитьПрефиксГодИМесяц(ДокументОбъект, Префикс) Экспорт
Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.СчетНаОплатуПокупателю")
ИЛИ ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.РеализацияТоваровУслуг")
ИЛИ ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.СчетФактураВыданный")
Тогда

Префикс = Префикс + Формат(ДокументОбъект.Дата, "ДФ=MMyy") + "/";

КонецЕсли;
КонецПроцедуры

То есть по сути вид номера даже не задавался, задавался формат префикса.
Кстати, почему то еще не срабатывает это на документ СчетФактураВыданный.. не реагирует на префикс..
 

Darlock

Well-known member
04.01.2008
560
1
#11
Кажется я уже запуталась...
В общем номер вида формировался в подписке в процедуре ПриУстановкиНовогоНомера добавила
ДобавитьПрефиксГодИМесяц(Источник, Префикс);

И далее в процедуре

Процедура ДобавитьПрефиксГодИМесяц(ДокументОбъект, Префикс) Экспорт
Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.СчетНаОплатуПокупателю")
ИЛИ ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.РеализацияТоваровУслуг")
ИЛИ ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.СчетФактураВыданный")
Тогда

Префикс = Префикс + Формат(ДокументОбъект.Дата, "ДФ=MMyy") + "/";

КонецЕсли;
КонецПроцедуры

То есть по сути вид номера даже не задавался, задавался формат префикса.
Кстати, почему то еще не срабатывает это на документ СчетФактураВыданный.. не реагирует на префикс..
Проверьте состав объектов метаданных подписанных на событие (в свойствах подписки на события). Скорее всего документ не подключен.

Вам надо дописать одну строку, чтоб было красиво и как вы хотите:
Код:
Номер = Прав(Номер, 3)
 
H
#12
Походу без меня уже выяснили
Надо или найти в коде место где номер генерится и там исправить
или добавить код, чтобы номер правильно генерился
примерно как Darlock предложил
3. Если у вас программный способ формирования нумерации и нет нумератора у докмента, то можно рассмотреть следующий вариант:
Префикс = "А" + Формат(ТекущаяДата(), "ДФ=MMyy");
Номер = Префикс + "/" + Прав(Номер, 3);
Длину номера менять не надо точно
 
G

Guest

#13
Проверьте состав объектов метаданных подписанных на событие (в свойствах подписки на события). Скорее всего документ не подключен.

Вам надо дописать одну строку, чтоб было красиво и как вы хотите:
Код:
Номер = Прав(Номер, 3)
Да... документ банально оказался не подключен... =)

про номер сейчас попробую.
 
G

Guest

#14
Почему то программа не реагирует на задание вот так номера..
Пробовала добавить такую строчку в процедуру ПриУстановкиНовогоНомера
 

Darlock

Well-known member
04.01.2008
560
1
#15
Почему то программа не реагирует на задание вот так номера..
Пробовала добавить такую строчку в процедуру ПриУстановкиНовогоНомера
"ПриУстановкеНовогоНомера" вызывается когда происходит обращение к методу "УстановитьНовыйНомер()".

Если вы программно создаете документ, то строку кода "Номер = Префикс + Прав(Номер, 3)" надо писать в обработчике "ПриУстановкеНовогоНомера". А если нет, то можно попробовать в обработчике "ОбработкаЗаполнения" (в модуле объекта). Потому как самый первый вызывается он, а потом, "ПередОткрытием", "ПриОткрытии" и т.п.
 
G

Guest

#16
Мучалась мучалась... пока вроде убедила начальство не резать номер.. =)

Всем спасибо! Узнала по крайней мере много интересного про нумерацию.