• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

Guest

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

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

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

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

Darlock

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

Guest

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

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

Darlock

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

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

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

Hryv

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


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

Guest

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

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

Hryv

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

Darlock

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

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

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

Darlock

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

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

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

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

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

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

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

Darlock

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

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

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

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

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

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

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

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

Hryv

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

Длину номера менять не надо точно
 
G

Guest

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

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

Да... документ банально оказался не подключен... =)

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

Guest

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

Darlock

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

"ПриУстановкеНовогоНомера" вызывается когда происходит обращение к методу "УстановитьНовыйНомер()".

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

Guest

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

Всем спасибо! Узнала по крайней мере много интересного про нумерацию.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!