|
Ошибки нумерации документов. | ☑ | ||
---|---|---|---|---|
0
Падаван в среде 1с
10.12.13
✎
11:09
|
Доброе утро. Проблема такого плана.
В УТ 10.3 добавили префиксы (если в документах Авансовый отчет, ПсотуплениеТУ,реализация, ПКО и РКО стоит флаг БУ - то префкса нет, если стоит флаг БУ не стоит, но стоит флаг УУ, то есть префикс АФ). Создали дополнительную подписку на событие: Перед записью - в источнике указали все перечисленные выше документы. Процедуры выглядит следующим образом: Если НЕ Источник.ПометкаУдаления Тогда Если Источник.ОтражатьВБухгалтерскомУчете Тогда Префикс = СокрЛП(ЗСГлобальныеМетоды.ЗСПолучитьЗначениеПеременной("ЗС_ПрефиксБухУчета")); ПрефиксПр = Префикс; Попытка Проверка = Число(Префикс); Исключение КонецПопытки; Если (ТипЗнч(Источник) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер") ИЛИ ТипЗнч(Источник) = Тип("ДокументОбъект.РасходныйКассовыйОрдер"))И Проверка=0 Тогда Префикс = ""; ПрефиксПр = Префикс + Источник.Касса.Префикс+"0"; КонецЕсли Иначе Префикс = СокрЛП(ЗСГлобальныеМетоды.ЗСПолучитьЗначениеПеременной("ЗС_ПрефиксУпрУчета")); Если (ТипЗнч(Источник) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер") ИЛИ ТипЗнч(Источник) = Тип("ДокументОбъект.РасходныйКассовыйОрдер")) Тогда ПрефиксПр = ""+Префикс + Источник.Касса.Префикс; КонецЕсли КонецЕсли; Иначе Префикс = "_"; ПрефиксПр = Префикс; КонецЕсли; ТекущийПрефикс = Лев(Источник.Номер,СтрДлина(ПрефиксПр)); Если ТекущийПрефикс = ПрефиксПр Тогда Возврат; КонецЕсли; РИБ = ПараметрыСеанса.ИспользованиеРИБ; ПрефиксУзла = ПараметрыСеанса.ПрефиксУзлаРаспределеннойИнформационнойБазы; ПараметрыСеанса.ИспользованиеРИБ = Истина; ПараметрыСеанса.ПрефиксУзлаРаспределеннойИнформационнойБазы = СокрЛП(Префикс) + ПрефиксУзла; Источник.УстановитьНовыйНомер(); ПараметрыСеанса.ИспользованиеРИБ = РИБ; ПараметрыСеанса.ПрефиксУзлаРаспределеннойИнформационнойБазы = ПрефиксУзла; Поясню его.Сначала проверяется не помечен ли на удаление документ, если помечен, то префикс будет "_", иначе проверяется наличие флагов БУ и УУ и получается префикс. В документах ПКО и РКО есть еще префиксы касс! поэтому пришлось добавить дополнительную проверку на эти документы. Проверка на префикс БУ (преобразование в число) сделана для того,чтобы проверить не пустой ли префикс(если префикс не указывать,оставить пустое поле, то непонятно откуда берется значение(ставится префикс, которого нет в базе, или когда-то был)). Далее идет проверка(если префикс не изменился, то номер не меняем, иначе формируем новый номер, чтобы не получать ошибки типа : Номер не уникален). Присвоение префикса через префикс РИБ(подсмотрел это код на этом форуме) реализовано для того,чтобы не потерять наш префикс, дело в том, что функция УстановитьНовыйНомер очищает префикс(ей пофик что мы там передали, она все равно очистит его или установит из перфикса организации). В общем код работает. Но проблема возникла на документе ПКО. Ставлю флаг УУ - основная касса - документ запсиался, номер сформировался верно (префикс УУ = АФ, префикс кассы = АФ, итого у документа префикс АФАФ). Ставлю флаг БУ - основная касса - документ записался, но вот номер неверно софрмировался префикс стал АФУУ (АФ - префикс кассы - ВЕРНО, у БУ префикс 00(в коде выше видно,что он в пустую строку переводится дя ПКО и РКО) - ВЕРНО, а вот откуда берется префикс УУ - вопрос). Поисками нашел, что подобный префикс стоит у другой кассы - но если выбрать ее, то номер формируется отлично (будет просто префикс УУ). В отладчике смотел формирование номера - после процедуры: ПриУстановкеНовогоНомераДокументаПриУстановкеНовогоНомера префикс верный, а вот как покидаем процедуру и возвращаемся, то номер уже содержит другой префикс - собственно вопрос - что происходит после процедуры ПриУстановкеНовогоНомераДокументаПриУстановкеНовогоНомера ? Подскажите пожалуйста (т.к. УстановитьНовыйНомер - функция платформы, то есть предположение, что код найти нельзя, но хочется понять,откуда берется "лишний" префикс) Надеюсь мозг не взорвал:) |
|||
1
х86
10.12.13
✎
11:14
|
(0)вот реально проще отладчиком пройтись чем писать километры сабжа
|
|||
2
НЕА123
10.12.13
✎
11:17
|
(0)
много букв. длина сформированных префиксов разная? |
|||
3
Падаван в среде 1с
10.12.13
✎
11:25
|
Не длина, сами префиксы. Если кратко - то непонятно откуда берется лишний префикс.
Т.е. в процедуру УстановитьНовыйНомер уходит префикс АФ, а возвращается АФУУ (УУ берется непонятно откуда) |
|||
4
acsent
10.12.13
✎
11:28
|
(3) последний номер был с уу
|
|||
5
Падаван в среде 1с
10.12.13
✎
11:38
|
Нет. В списке на данный момент (после групповой перенумерации) с УУ вообще ничего нет.
УУ есть у документов, у которых снят флаг БУ (еще раз обращу внимание, что это разная нумерация, с БУ и без БУ). В итоге последний документ у которого есть флаг БУ имеет номер: АФ000000039, этот после записи получает номер: АФУУ0000084 (т.е. как-будто продолжается чужая номерация, та, где нет флага БУ) |
|||
6
Падаван в среде 1с
10.12.13
✎
11:39
|
(5) , УУ - это в данном контексте префикс (управленческий учет я подразумеваю фразой: без БУ)
|
|||
7
Maxus43
10.12.13
✎
11:45
|
>>Создали дополнительную подписку на событие: Перед записью
Всё не читал, ошибка в этом. Префикс должен устанавливаться при созданиии документа, постоянно меняющиеся номера документов это адский бардак. Имхо |
|||
8
Maxus43
10.12.13
✎
11:48
|
ну и Источник.УстановитьНовыйНомер(Префикс);
|
|||
9
Падаван в среде 1с
10.12.13
✎
11:56
|
(7) странно, я думал что любой номер именно перед записью формируется.
(8) надо было прочитать) Не использовал из-за того,что эта конструкция игнорирует префикс(дальше он очистится) |
|||
10
acsent
10.12.13
✎
11:57
|
(5) все таки есть с уу?
Делай тогда префикс АФ0 |
|||
11
acsent
10.12.13
✎
11:58
|
У тебя один префикс есть часть другого префикса. А так нельзя
|
|||
12
Maxus43
10.12.13
✎
12:01
|
(9) >>странно, я думал что любой номер именно перед записью формируется.
Он формируется при специальном событии ПриУстановкеНовогоНомера, и типовая подписка по установке оного так и называется |
|||
13
Maxus43
10.12.13
✎
12:04
|
>>Не использовал из-за того,что эта конструкция игнорирует префикс(дальше он очистится)
именно в типовой подписке он и чистится скорей всего, она срабатывает после Источник.УстановитьНовыйНомер() |
|||
14
Падаван в среде 1с
10.12.13
✎
12:08
|
(10) Эту мысль я почему-то до конца не довел. Т.е. в коде у меня есть такая строчка:
ПрефиксПр = Префикс + Источник.Касса.Префикс+"0"; Но использовал я ее только для проверки, в установке нового префикса я использовал префикс без "0". (12) Да, я в модуле документа создавал эту процедуру и там устанавливал префикс - все равно игнорировалось. Чистится во время выполнения Источник.УстановитьНовыйНомер() Я писал,что попадает после этого в процедуру ПриУстановкеНовогоНомераДокументаПриУстановкеНовогоНомера и вот после нее уже получаю новый префикс (после нее по кнопке F11 никуда не попадаю, а сразу возвращаюсь с уже сформированным номером) |
|||
15
НЕА123
10.12.13
✎
13:42
|
может оно?
Режим автонумерации объектов Определяет, переиспользовать или нет автоматически полученные номера (кодов) объектов, если они не записаны в базу данных. Если выбрано значение Освобождать автоматически - номер вне транзакции освобождается автоматически. При откате транзакции номера освобождаются автоматически вне зависимости от режима автонумерации объектов. Не освобождать автоматически - номер не освобождается автоматически. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |