Имя: Пароль:
1C
1С v8
v8: Нули в номере документа при формировании печатных форм
0 Валидатор
 
17.09.13
15:41
Дорбрый день, БП 8.2 конфа, при формировании документов (счет, реализация товаров и т.д.) в номер при формировании ПФ стал попадать так:
Счет на оплаты 0000000000048 например
как для всех печатных встроенных форм сделать, чтобы был номер просто 48, к примеру?
1 пипец
 
17.09.13
15:42
число() не предлагать ?
2 John83
 
17.09.13
15:42
если типовая печ. форма, то наверное поставили префикс букву "О"
3 Валидатор
 
17.09.13
15:43
не совсем так, на одной печатной форме можно все исправить, а у меня по всей базе во всех ПФ Документы покупатлю вместо просто номера стоит 00000004839, вот эти 0-ли, можно ли по всей конфе для всех печатных форм поставить на вывод без нулей перед цифрами?
4 giallo
 
17.09.13
15:45
(3) она и так вроде без нулей выводит. Отладь формирование печ. формы- функцию ПолучитьНомерНапечать емнип
5 Валидатор
 
17.09.13
15:46
(4) это общий модуль?
6 Валидатор
 
17.09.13
15:48
(4) нету такой функции в этом модуле
7 giallo
 
17.09.13
15:48
(6) отладчик есть в любом случае ;)
8 Serg_1960
 
17.09.13
15:54
Если в остальных печатных формах ведущие нули номера документа обрезаются - то значит есть такая общая функция.

Если для некоторых документов она "не работает" - то, скорее всего, там  первый символ не "ноль", а буква "О" :))
9 Валидатор
 
17.09.13
15:56
(8) для всех выводятся нули перед номером документа в печатной форме
10 giallo
 
17.09.13
15:58
(9) Что мешает отладить формирование номера на печать? Ставишь точку останова на определение в коде соответствующего параметра макета и вперед!
11 Валидатор
 
17.09.13
15:59
(10) на всех печатных формах отдельно?
12 giallo
 
17.09.13
16:00
(11) Есть варианты:

а) провести отладку на произвольной проблемной форме для начала

б) гадать на форуме

http://funkyimg.com/i/D4hp.jpg
13 Валидатор
 
17.09.13
16:00
(12) нашел ту функцию, вот она:
Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено) Экспорт

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

    Номер   = СокрЛП(Документ.Номер);
    
    // {ОбменДаннымиБСП
    // Если номер документа по стандарту БСП 8.2, сформируем номер через стандартную процедуру БСП.
    Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Истина Тогда
        
        Если Сред(Номер, 5, 1) = "-" Тогда
            Номер = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Номер,
            Ложь, // УдалитьПрефиксИнформационнойБазы
            Истина // УдалитьПользовательскийПрефикс
            );
            Возврат Номер;
        КонецЕсли;
        
    КонецЕсли;
    // }ОбменДаннымиБСП
    
    СсылкаНаДокумент = Неопределено;
    Префикс = "";
    Попытка
        Если ТипЗнч(Документ) = Тип("Структура") Тогда
            СсылкаНаДокумент = Документ.СсылкаСФАванс;
        ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.СчетФактураВыданный")
            Или ТипЗнч(Документ) = Тип("ДокументОбъект.СчетФактураВыданный") Тогда
            Если Документ.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс Тогда
                СсылкаНаДокумент = Документ;
            КонецЕсли;
        ИначеЕсли ТипЗнч(Документ) = Тип("ВыборкаИзРезультатаЗапроса") Тогда
            Если Документ.СчетФактура.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс Тогда
                СсылкаНаДокумент = Документ;
            КонецЕсли;
        КонецЕсли;
    Исключение
    КонецПопытки;
    
    Если МассивПрефиксов = Неопределено Тогда
        
        Организация              = Неопределено;
        ПодразделениеОрганизации = Неопределено;
        
        Если ТипЗнч(Документ) = Тип("ВыборкаИзРезультатаЗапроса")
            ИЛИ ТипЗнч(Документ) = Тип("Структура") Тогда

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

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

            Если ЕстьРеквизитДокумента("Организация", МетаданныеДокумента) Тогда

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

            КонецЕсли;
            
        КонецЕсли;
        
        МассивПрефиксовДляОбхода = СформироватьМассивПрефиксовДляРИБИОрганизации(Организация);
        
    Иначе
        
        МассивПрефиксовДляОбхода = МассивПрефиксов;
        
    КонецЕсли;
    
    Номер = ПолучитьНомерБезПрефиксов(Номер, МассивПрефиксовДляОбхода);
    
    ВыкинутПрефиксСФНаАванс = Ложь;
    ОтдельнаяНумерацияСФНаАванс = Константы.ОтдельнаяНумерацияСчетовФактурНаАванс.Получить();
    Если ОтдельнаяНумерацияСФНаАванс
        И СсылкаНаДокумент <> Неопределено
        И Сред(Номер, 1, 1) = "А" Тогда
        
        ВыкинутПрефиксСФНаАванс = Истина;
        Номер = Сред(Номер, 2);
        Если Сред(Номер, 1, 1) = "-" Тогда
            Номер = Сред(Номер, 2);
        КонецЕсли;
        Номер = ПолучитьНомерБезПрефиксов(Номер, МассивПрефиксовДляОбхода);
    КонецЕсли;
    
    Если ВыкинутПрефиксСФНаАванс Тогда
        Номер = "А" + Номер;
    КонецЕсли;

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

КонецФункции // ПолучитьНомерНаПечать()


только как в ней сделать, чтобы нули резались?
14 Sabbath
 
17.09.13
16:00
(0) и (3) чтобы сразу во всех, не слышал такого. А в отдельных, наверно, сам знаешь
15 Валидатор
 
17.09.13
16:00
была в общего назначения
16 giallo
 
17.09.13
16:01
(13) вот врубайся теперь почему у тебя нули не режутся, ты же прог, ничего сложного не должно быть.
17 Serg_1960
 
17.09.13
16:01
В УПП префиксы и ведущме нули обрезает ОбщегоНазначения.ПолучитьНомерНаПечать. И в любом модуле документа, где есть встроенные печатные формы, используется строка, типа:

ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(ЭтотОбъект);
18 Валидатор
 
17.09.13
16:02
(17) Номер   = Сокр(Документ.Номер); вот тут я так понял должен обрезаться номер, но он как был 0000004175, так после этой строки и остался 00000004175
19 Serg_1960
 
17.09.13
16:04
(18) Этот бред ты написал по памяти? А как на самом деле?
20 Валидатор
 
17.09.13
16:06
(19) Документ. Номер = 00000001706
СокрЛП(Документ. Номер) = 00000001706
вот в чем проблема(
21 Валидатор
 
17.09.13
16:06
не обрезает он функцией СОКрЛП
22 Валидатор
 
17.09.13
16:10
что еще может быть?
23 Sabbath
 
17.09.13
16:12
(18) сокрЛП обрезает проблеы по краям
(13) не знал о такой. Перед возвратом придется тебе прописать код для обрезания нулей (хотя вроде было что-то такое по типу "УбратьЛидирущиеНули" :) )
Можешь втупую обойти строку в цикле и обрезать нули.
24 Sabbath
 
17.09.13
16:13
+ (23) насчет функции УбратьЛидирущиеНули не граантирую)), возможно, была где-то нетиповая реализация, а мне запомнилось.
25 Валидатор
 
17.09.13
16:16
Для Каждого ТекущийПрефикс ИЗ МассивПрефиксовДляОбхода Цикл
        
        ТекущийНомер = Найти(Номер, ТекущийПрефикс);
        
        Если ТекущийНомер = 1 Тогда
            Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
        КонецЕсли;
        // удаление префикса из номера документа
        //Если Найти(Номер, ТекущийПрефикс)=1 Тогда
        //    Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
        //КонецЕсли;
        
        // так же, может остаться "минус" впереди
        Если Лев(Номер, 1) = "-" Тогда
            Номер = Сред(Номер, 2);
        КонецЕсли;
        
        // удаление ведущих нулей
        Пока Лев(Номер, 1)="0" Цикл
            Номер = Сред(Номер, 2);
        КонецЦикла;
    КонецЦикла;


если надо кому будет в функцию засовыватее в конец и все
26 Валидатор
 
17.09.13
16:22
причем этот код был в типовой конфе раньше, версии 49.15 смотрел, ав  51.9 его уже нет, 1сники решили убрать его, дабы прогеры сами дописывали что ли?)))))
27 Sabbath
 
17.09.13
16:23
(25) типа того
        Пока Лев(Номер, 1)="0" Цикл
            Номер = Сред(Номер, 2);
        КонецЦикла;
2 + 2 = 3.9999999999999999999999999999999...