Имя: Пароль:
1C
 
Добавление лидирующих нулей в номер документа
,
0 Олеся999
 
10.04.17
09:19
Подскажите пожалуйста, как правильно добавить нули в строку перед номером ?
Использовала данную конструкцию, но почему то не добавляет ((
Номер =  Источник.Номер;
Результат = Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0");
1 Amra
 
10.04.17
09:20
А почему должна такая конструкция добавлять? Для этого в типовых функция есть
2 Олеся999
 
10.04.17
09:25
3 Масянька
 
10.04.17
09:28
(1) Комсомольцы :)
4 1dvd
 
10.04.17
09:29
Формат(0 + Номер, "ЧЦ=6; ЧВН=; ЧГ=0")
5 Морозов Александр
 
10.04.17
09:31
(4) в 8-ке не должно быть так все просто... обязательно надо через ж..у.... там через запрос например, СтрДинна(), Лев(), Прав(), Сред()....  :-))
6 Serg_1960
 
10.04.17
09:32
Все свободны :) символьный номер может содержать префикс(ы)
7 НЕА123
 
10.04.17
09:36
Результат = Формат(Число(Сокрлп(Номер)), "ЧЦ=6; ЧВН=; ЧГ=0");
8 Рэйв
 
10.04.17
09:37
Сообщить(Прав("00000000000000000",ДлинаНомера-СтрДлина(Номер))+Номер)
9 Dmitrii
 
гуру
10.04.17
09:37
(0) (2) Это работает, если Номер - число.
Не знаю откуда ты взяла этот код, но в 99% случаев в 99% типовых конфигураций Номер - это строка, а не число.
10 Рэйв
 
10.04.17
09:37
+(8)Если префиксы есть, то с ними отдельно колдовать надо
11 1dvd
 
10.04.17
09:38
(8) Сообщить(Прав("00000000000000000" + Номер, ДлинаНомера));

не усложняй
12 Рэйв
 
10.04.17
09:39
(11)ну так тоже можно
13 Олеся999
 
10.04.17
09:52
(9) Да, дак в том то и дело что тип строка.
14 h-sp
 
10.04.17
09:55
(13) ну, а функция Формат строку не принимает. Это же известно из курса средней школы.

поэтому подсовывайте ей число.
15 Олеся999
 
10.04.17
09:59
Что то типо такого ?

Номер =  Источник.Номер;
Сообщить(Прав("00000000000000000",ДлинаНомера-СтрДлина(Номер))+Номер)
16 1dvd
 
10.04.17
10:02
- дохтур, почему меня все игнорируют?
- следующий!
17 Serg_1960
 
10.04.17
10:04
(13) "в том то и дело что тип строка" - а я предупреждал :)

Формат(Число(Номер), "ЧВН=; ЧЦ=6; ЧГ=0");
18 DrZombi
 
гуру
10.04.17
10:04
(0) Правильно, 1С сама добавляет нули... :)
19 DrZombi
 
гуру
10.04.17
10:06
(17) Сейчас окажется, что в качестве номера там буковки.
Либо номер формата "9999" от строки 10 символов :)
20 DrZombi
 
гуру
10.04.17
10:06
+ 100% пользователи требуют дать им руками править номера документов :)
21 aka AMIGO
 
10.04.17
10:15
(20) + при этом капризным голоском требуют, чтобы "она (1с, стало-быть) продолжала нумеровать, как положено!" :)

ЗЫ. у нас есть филиал в одном из городов, тамошний замдир использовал 1с, как блокнот для записей: насоздавал документов, часть пометил к удалению, часть не проводил: "Это я храню для памяти!". Надо ли говорить, что номера он тоже ставил свои, после чего бд сообщала, что она о нас думает..
Разъяснили, вроде внял
22 Олеся999
 
10.04.17
10:16
Если так :
Номер =  Источник.Номер;
Результат = Сообщить(Прав("00000000000000000" + Номер, ДлинаНомера));

То :



Ошибка при выгрузке данных для узла плана обмена
    ТипОбъекта             =  Документ объект: Командировки организаций
    Объект                 =  Командировки организаций к3 от 07.04.2017 15:15:01
    ОписаниеОшибки         =  Ошибка в обработчике события ПередВыгрузкой (свойства)
    ПКО                    =  КомандировкиОрганизаций  (Документ: Командировки организаций)
    ПКС                    =  1  (Номер --> Номер)
    Объект                 =  Командировки организаций к3 от 07.04.2017 15:15:01  (Документ объект: Командировки организаций)
    СвойствоПриемника      =  Номер  (Строка)
    Обработчик             =  ПередВыгрузкойСвойства
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода:  Обращение к процедуре как к функции (Сообщить)
    ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(9289)
    КодСообщения           =  55
    ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(1648)
    КодСообщения           =  72
    УзелПланаОбмена        =  гл
Произошла ошибка при выгрузке объектов. Было выгружено: 0

Техническая информация:
    ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(2,13)}: Обращение к процедуре как к функции (Сообщить)
23 1dvd
 
10.04.17
10:17
(22) мозги включай иногда. Сообщить зачем там?
24 Махони402
 
10.04.17
10:17
(22) Олеся, позови спеца и дай ему денег. Не мучайся.
25 Махони402
 
10.04.17
10:18
А если ты изучением занимаешься, то сначала возьми тему по базовым понятиям языка, потом запросам, и только после этого можно подходить к обменам.
26 aka AMIGO
 
10.04.17
10:19
(22) Мда.. Конфигуратор у бд запускается? В нём есть отладчик, можно вручную написать формулы из ветки, сразу увидишь, что не проходит
27 Serg_1960
 
10.04.17
10:26
(22) Я предупреждал в (6)
28 Serg_1960
 
10.04.17
10:29
От скуки развлекаясь :)

    Номер = Источник.Номер;
    Номер = СокрЛП(Номер); Цифры = ""; Префикс = ""; Суффикс = "";
    Для х = 1 По СтрДлина(Номер) Цикл
        Символ = Сред(Номер, х, 1); КодСимвола = КодСимвола(Символ);
        Если НЕ (КодСимвола >= 48 И КодСимвола <= 57) Тогда
            Если СтрДлина(Цифры) Тогда
                Суффикс = Суффикс + Символ;
            Иначе
                Префикс = Префикс + Символ;
            КонецЕсли;
        Иначе
            Цифры = Цифры + Символ;
        КонецЕсли;
    КонецЦикла;
    Результат = Префикс + Формат(Число(Цифры), "ЧВН=; ЧЦ=6; ЧГ=0") + Суффикс;
29 aka AMIGO
 
10.04.17
10:32
Если СтрДлина(Цифры) Тогда
Интересное условие :)
30 Amra
 
10.04.17
10:33
Извращенцы. В обработке выгрузки есть функция ДобавитьКПрефиксу . Кто мешает ТС ее использовать в правилах?
31 Serg_1960
 
10.04.17
10:37
(29)

    Если 3.14 Тогда
        Сообщить("Фича платформы. Работает - ну и хрен с ней :)");
    КонецЕсли;
32 Олеся999
 
10.04.17
10:39
Номер =  Источник.Номер;
Результат = Прав("00000000000000000" + Номер, ДлинаНомера);
ПЛАН = ПланыОбмена.Полный.ЭтотУзел();
ПЛАНКОД = ПЛАН.Код;
Значение = ПЛАНКОД +Сред(Источник.Номер,4);
33 DrZombi
 
гуру
10.04.17
10:44
(32) Префикс статичный?
Я к тому, что вы проанализируйте номера документов.

Может так быть, что там нет цифр, совсем.
И в качестве номера луче использовать простой реквизит :)
34 Serg_1960
 
10.04.17
10:44
(32) Выключи компьютер и отойди от него - сегодня не твой день.
35 aka AMIGO
 
10.04.17
10:47
(32) Второй раз советую: загляни в отладчик, увидишь, что получается Результате и в Значении
36 Serg_1960
 
10.04.17
10:47
(33) Ты тоже последуй совету (34)

В (22) - "Объект                 =  Командировки организаций к3 от 07.04.2017 15:15:01", где "к3" - это символьный номер документа. С префиксом "к" и числовой частью "3" :)
37 Serg_1960
 
10.04.17
10:50
(35) Ака, амиго, посмотри что автор в (22) написала:

Результат = Сообщить(...);
38 polosov
 
10.04.17
10:51
(22) Смотри  в своей конфигурации общие модули ПрефиксацияОбъектов...
39 aka AMIGO
 
10.04.17
10:52
(37) в 22 много букав..
у ТС было полтора часа (!) справиться, в т.ч. применить (28)..
...
40 aka AMIGO
 
10.04.17
11:01
(39)+ а развлекалочка-то забавная.. запомнил идею :)
41 Олеся999
 
10.04.17
11:01
(32) Выгружает без ошибок
Номер =  Источник.Номер;
Результат = Прав("00000000000000000" + Номер, 12);
Но при загрузке, нули не добавляются.
42 Serg_1960
 
10.04.17
11:07
(38) Ваш совет преждевременный и бесполезный.
Преждевременный - до тех пор, пока автор не озвучила конфигурацию.
Бесполезный - если у автора УПП, в котором общий модуль ПрефиксацияОбъектовСобытия содержит только одну функцию, которая очищает номер если префиксы организаций источника и приёмника не совпадают.
43 h-sp
 
10.04.17
11:09
(41) вы вообще фигней какой-то занимаетесь. Там в правиле есть галка "Автоматически приводить к длине приемника". Вы ее поставьте у поля Номер, она вам всё сделает. Не надо какой-то код левый лепить.
44 Serg_1960
 
10.04.17
11:13
(43) Бинго, кэп! :)
45 Олеся999
 
10.04.17
11:18
(43) Так она добавляет тогда нули в конце.
46 Serg_1960
 
10.04.17
17:21
PS: алгоритм (28) нельзя использовать в работе (ограниченное использование). Алгоритм был сознательно "кастомизирован" для более лёгкого восприятия и неработоспособен как таковой при использовании цифр в префиксах и/или суффиксах номеров документов.
47 Pahomich
 
10.04.17
17:36
Берешь строку из заведомо большего числа нулей "000...000"+номер и задаешь как номер документа, при присвоении номера база сама лишние нули обрежет по длине номера документа.
2 + 2 = 3.9999999999999999999999999999999...