Имя: Пароль:
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"+номер и задаешь как номер документа, при присвоении номера база сама лишние нули обрежет по длине номера документа.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан