Имя: Пароль:
1C
1С v8
Обрезание номера при формировании ПФ
,
0 Валидатор
 
19.02.14
11:19
Конфа 8.2 КА. Документ ПКО, у него есть печатная форма - приходный кассовый ордер. Для этого документа мне нужно было дописать процедуру избавления от нулей, чтобы писался префикс, и потом сразу цифра, номер документа - К1000000001, а в Итоге должно на ПФ быть К11. Это получилось сделать, но при формировании этой ПФ, теперь номер самого документа режется до последней цифры, то есть не К11 а просто 1 остается, как так? вот код процедуры обрезания нулей:

НомерДокументаБезНулей    = ПолучитьНомерДляПечатиПКО(Шапка);
ПрефиксКассы = Касса.ттПодразделение.ттПрефиксКассовыхДокументов;
ОбластьМакета.Параметры.НомерДокумента = ПрефиксКассы  +""+ НомерДокументаБезНулей;



и процедура получения номера:
Функция ПолучитьНомерДляПечатиПКО(Документ, МассивПрефиксов = Неопределено) Экспорт

    Если Документ = Неопределено Тогда
        Возврат 0;
    КонецЕсли;

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

            Организация = Документ.Организация;
            
        Иначе

            МетаданныеДокумента = Документ.Метаданные();

            Если МетаданныеДокумента.Реквизиты.Найти("Организация") <> Неопределено Тогда

                Организация = Документ.Организация;

            КонецЕсли;

        КонецЕсли;
        
        МассивПрефиксовДляОбхода = Новый Массив;
        ПрефиксОрганизации = ЭтотОбъект.Организация.Префикс;
        ПрефиксКасс = ЭтотОбъект.Касса.ттПодразделение.ттПрефиксКассовыхДокументов;
        ПрефиксДокумента = ПрефиксОрганизации + ПрефиксКасс;
        МассивПрефиксовДляОбхода.Добавить(ПрефиксДокумента);
        
    Иначе
        
        МассивПрефиксовДляОбхода = МассивПрефиксов;
        
    КонецЕсли;
    
    Для Каждого ТекущийПрефикс ИЗ МассивПрефиксовДляОбхода Цикл
        
        Если Найти(Номер, ТекущийПрефикс)=1 Тогда
            Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
        КонецЕсли;
        КонецЦикла;
                
        // так же, может остаться "минус" впереди
        Если Лев(Номер, 1) = "-" Тогда
            Номер = Сред(Номер, 2);
        КонецЕсли;
        
        // удаление ведущих нулей
        Пока Лев(Номер, 1)="0" Цикл
            Номер = Сред(Номер, 2);
        КонецЦикла;

    Возврат Номер;

КонецФункции // ПолучитьНомерДляПечатиПКО()
1 Godofsin
 
19.02.14
11:24
СтрЗаменить() тебя спасет ))))
2 Godofsin
 
19.02.14
11:25
НомерДокаБезНулей = СтрЗаменить(НомерДока,"0",""); =)
3 Chikko
 
19.02.14
11:25
СтрЗаменить() в таких случаях не помогает.
Вот тут проблема имхо:
Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
Получишь К10 и обрежешь 0, вот и результат.
4 Godofsin
 
19.02.14
11:31
(3) Чо это не помогает?
5 Godofsin
 
19.02.14
11:34
А ну да в принципе, не помогает )))
6 Шапокляк
 
19.02.14
11:38
(0) Ну так префикс-то кто впереди будет приляпывать?
7 Валидатор
 
19.02.14
11:43
(6) так а каким образом из за измений в процедура печати меняется номер документа?
8 Валидатор
 
19.02.14
11:45
(6) то есть опять добавлять новый номер перед закрытием формы? или как?
9 Шапокляк
 
19.02.14
11:47
Плин! Был у тебя в (0) номер К1000001. Ты перебрал массив префиксов и определил, что твой префикс К1. Оторвал его от номера и получил Номер 000001, после чего стал от него ведущие нолики отрывать. В итоге Номер=1. Ты его возвращаешь и чему-то удивляешься. Возвращай ТекущийПрефикс+Номер и будет тебе счастье.
10 Валидатор
 
19.02.14
11:52
(9)
Для Каждого ТекущийПрефикс ИЗ МассивПрефиксовДляОбхода Цикл
        
        Если Найти(Номер, ТекущийПрефикс)=1 Тогда
            Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
        КонецЕсли;
        КонецЦикла;
                
        // так же, может остаться "минус" впереди
        Если Лев(Номер, 1) = "-" Тогда
            Номер = Сред(Номер, 2);
        КонецЕсли;
        
        // удаление ведущих нулей
        Пока Лев(Номер, 1)="0" Цикл
            Номер = Сред(Номер, 2);
        КонецЦикла;

    Возврат ПрефиксДокумента + Номер;

потом в процедуре печати:
НомерДокументаБезНулей    = ПолучитьНомерДляПечатиПКО(Шапка);

ОбластьМакета.Параметры.НомерДокумента = НомерДокументаБезНулей;


в Итоге в самом документе ( а не в печатной форме, просто остается 1 цифра, так что не помог ваш вариант)
11 Валидатор
 
19.02.14
12:03
и почему меняется номер в документе, когда я меняю его только в печатной форме?
12 grayshadow
 
19.02.14
12:06
извращенцы:)
где-то в общих модулях есть ф-ция ПолучитьНомерНаПечать
13 Шапокляк
 
19.02.14
12:06
А, ну это просто. Переменная Номер - она такая. Назови ее иначе и все пройдет
14 Валидатор
 
19.02.14
12:07
(12) да, я ее и брал, чтобы допиливать, потому что зачем в общем модуле мне делать удаление нулей, когда в других документах они тоже резаться будут
15 Валидатор
 
19.02.14
12:09
(13) а вот да, вроде получилось, спс
16 Валидатор
 
19.02.14
12:12
17 Шапокляк
 
19.02.14
12:14
Мне бы столько энергии