Имя: Пароль:
1C
1C 7.7
v7: Номер документа не уникальный
0 Масянька
 
28.07.16
15:09
День добрый!
Странная ситуация...
ТиС 932, дописанная.
Не типовой документ: при копировании док-та в новый - номер док-та ставится правильно, при создании нового - не правильно (соответственно, и при попытке сохранить выдает "Номер не уникальный").
Номер этого док-та не редактируется вручную (тупо не доступен).
Нумерация: в пределах года, текстовый (3), автоматическая нумерация, контроль уникальности.

Почему получается так?

Заранее - спасибо.
1 vicof
 
28.07.16
15:14
Тупо кто-то программно поправил
2 Масянька
 
28.07.16
15:16
(1) Как?
В журнале - криминала нет. Все док-ты четко пронумерованы (сейчас есть 104).
При копировании - ставит номер 105, при создании - 100.
3 Масянька
 
28.07.16
15:18
+(2) В модуле док-та - нигде нет редактирования номера док-та.
4 vicof
 
28.07.16
15:18
А в коде что происходит с кодом?
5 vicof
 
28.07.16
15:18
не успел)
6 Масянька
 
28.07.16
15:19
(5) Именно, что ничего....
Я не понимаю - чего происходит-то?
и почему при копировании - норм, а при создании нового - нет.
7 vicof
 
28.07.16
15:20
Ну а там тиИ сделать не?
8 Масянька
 
28.07.16
15:21
(7) Хочется понять - что происходит...
9 Масянька
 
28.07.16
15:29
ТиИ - не помогло. Тоже самое...
10 abfm
 
28.07.16
15:30
Процедура ВводНового(,)
в модуле формы есть?
11 Масянька
 
28.07.16
15:32
(10)
Процедура ВводНового(Скопирован)
                      
    глЗаполнитьШапку(Контекст, Скопирован,"Продажа");
    
    // по умолчанию заполняются (и не изменяются!)
    УчитыватьЕНВД     = 0;
    УчитыватьНДС     = 1;
    СуммаВклНДС     = 1;
    УчитыватьНП     = 0;
    СуммаВклНП         = 0;  
    
    СпрКонтрагенты = СоздатьОбъект("Справочник.Контрагенты");
    СпрКонтрагенты.НайтиПоКоду("00000004", 0);    
    Контрагент     = СпрКонтрагенты.ТекущийЭлемент();
    Договор     = Контрагент.ОсновнойДоговор;
    
    Валюта        = Константа.ВалютаБухУчета;
    
    СпрСклады = СоздатьОбъект("Справочник.Склады");
    СпрСклады.НайтиПоКоду("00001");        // склад-оптравитель = Основной
    Склад = СпрСклады.ТекущийЭлемент();
    
    СпрСклады.НайтиПоКоду("00006");        // склад-получатель = Списание
    СкладПолучатель = СпрСклады.ТекущийЭлемент();
    
    СпрЦены = СоздатьОбъект("Справочник.ТипыЦен");
    СпрЦены.НайтиПоКоду("00004");
    ТипЦен = СпрЦены.ТекущийЭлемент();
    
КонецПроцедуры // ВводНового

глЗаполнитьШапку - типовая.
12 Ёпрст
 
28.07.16
15:32
(0) проверить, где стоит рабочая дата, много думать
13 Масянька
 
28.07.16
15:34
(12) Дата актуальности итогов = рабочая дата = 28.07.2016
14 Ёпрст
 
28.07.16
15:35
посмотреть в конфе
ПрефиксАвтоНумерации не стоит ли, и если стоит, то какой
15 Масянька
 
28.07.16
15:37
(14) В базе - нет (ни в константах, ни в юрике).
16 Ёпрст
 
28.07.16
15:37
+ посмотреть в константах префикс риба + в юрлицах/фирме префикс
17 Ёпрст
 
28.07.16
15:37
(15) в глобальнике смотри
18 abfm
 
28.07.16
15:37
посмотрите
глЗаполнитьШапку(Контекст, Скопирован,"Продажа");
действия при разных Скопирован.
19 Ёпрст
 
28.07.16
15:38
ну и отчетом вывести документы с упорядочиванием по номеру
20 Масянька
 
28.07.16
15:39
(17) Тоже пусто. Сообщить показало.
21 Масянька
 
28.07.16
15:40
(19) А чем журнал не устраивает?
Мне не понятно - почему при копировании номер правильный, а при создании нет? В чем разница?
22 abfm
 
28.07.16
15:41
(21)в разных Скопирован
23 Ёпрст
 
28.07.16
15:43
(21) не выполняется процедура вводнового
24 Ёпрст
 
28.07.16
15:43
или еще какая предопределенная
25 Масянька
 
28.07.16
15:43
(22) В глобальнике:

    Если Скопирован  = 1 Тогда
        
        // если документ скопирован, то новый номер надо устанавливать с учетом всех префиксов на момент копирования
        Конт.УстановитьНовыйНомер( СокрЛП( Константа.ПрефиксИБ) + СокрЛП( Конт.ЮрЛицо.ПрефиксНомеровДокументов));


Это в глЗаполнитьШапку.
Больше в этой процедуре обращения к номеру док-та нет.
откуда тогда берется номер при создании?
26 Ёпрст
 
28.07.16
15:43
там просто все реквизиты копируются
27 Масянька
 
28.07.16
15:43
(23) (24) Почему?
28 Ёпрст
 
28.07.16
15:44
(25) вот те и ответ.
29 Масянька
 
28.07.16
15:44
(28) Я не понимаю... Ответ...
30 Ёпрст
 
28.07.16
15:44
кто-то документ с префиксом записал
31 Это_mike
 
28.07.16
15:45
(30) так у нее номер - длиной 3
32 Это_mike
 
28.07.16
15:45
(30) с пустым префиксом?
33 Масянька
 
28.07.16
15:46
(30) C каким? Нумерация - текстовый, 3 символа. Текущий номер  - 104.
34 Ёпрст
 
28.07.16
15:46
(31) ааа.. давно бы уже обработкой нашла сбойный документ и поправила бы.
35 Ёпрст
 
28.07.16
15:46
смотри так же среди помеченных на удаление
36 Масянька
 
28.07.16
15:47
(34) Как его найти? По каким признакам?
И новый номер дает - 100. Какой префикс?
37 Злопчинский
 
28.07.16
15:47
естиь документ с номером 999
38 Ёпрст
 
28.07.16
15:47
(37) ага
39 DGorgoN
 
28.07.16
15:47
(37) Скорее 99 и ещё по нумератору возможен косяк.
40 Масянька
 
28.07.16
15:48
(35) В удаленных нет док-ов.
41 DGorgoN
 
28.07.16
15:48
Я лично сделал 10 строчками в глобальнике и справочником и забыл/забыл
42 Злопчинский
 
28.07.16
15:48
(39) если 99 - то было бы проблема с номером "10"
43 Масянька
 
28.07.16
15:49
(39) 99 есть, 100 есть, ..., 104 последний.
Номер не редактируется руками (закрыт).
44 Злопчинский
 
28.07.16
15:49
(40)
1. тупой реестр доков по всем фирмам по выбранному нумератору за период нумератора
2. отсортировать по убыванию номера дока
3. втыкать до помутнения
45 Масянька
 
28.07.16
15:50
(44) Нумератор не назначен.
46 Злопчинский
 
28.07.16
15:51
(43) сделай 100 номер 110 и попробуй создать новый - даст записать?
47 Ёпрст
 
28.07.16
15:52
скорее, еще в коде чего есть.
48 Ёпрст
 
28.07.16
15:52
тогда.
49 Злопчинский
 
28.07.16
15:52
(45) не принципиально - значит только по одному виду доков, а не по всем видам нумератора
50 abfm
 
28.07.16
15:53
сделать перенумерацию  хоть униджорном за период нумерации.
51 Масянька
 
28.07.16
15:54
(46) Открыла номер, изменила на 110, записала. Делаю новый - номер 100.
Бред....
52 Это_mike
 
28.07.16
15:56
(51) ну а что говорит товарищ отладчик?
53 timurhv
 
28.07.16
15:58
(43) "99 " или " 99" номер?
54 Масянька
 
28.07.16
15:58
(52) Я не умею с ним разговаривать :(
55 Масянька
 
28.07.16
15:58
(53) "099"
56 Масянька
 
28.07.16
15:59
+(55) В номерах док-ов все три символа заполнены (001, 015, 100)
57 abfm
 
28.07.16
16:02
Добавьте разрядность и перенумеруйте с добавлением нулей, или сделайте число а не строку. В вашем случае второй проще.
58 Масянька
 
28.07.16
16:07
(57) А объяснить можете?
59 eryomin
 
28.07.16
16:07
(29) что же тут непонятного, если скопированным номер устанавливается заново, а вновь созданным нет? ставь здесь точку останова и смотри, какой номер был (неправильный), и какой стал (правильный). предполагаю, что у вновь созданных номер остается без префикса или с неправильным префиксом.
60 Ёпрст
 
28.07.16
16:09
открой пофигуратор, поменяй тип кода на числовой, сохранись, потом вертай взад.. смотри результат
61 Ёпрст
 
28.07.16
16:09
хотя 3 символа на номерЯ, это всего 999 доков в год..
62 Масянька
 
28.07.16
16:12
(60) Встал 105 (когда на числовой поменяла)...
(61) Достаточно, специфика :)
63 abfm
 
28.07.16
16:13
(58)К строке сделать инкремент 1 сложнее чем к числу, появляются оговорки и правила. Из строки делают число прибавляют 1, потом делают строку. Как они это делают нам неведомо. Мы можем только догадываться. Нумерация остановилась как вы заняли последний разряд.
64 Масянька
 
28.07.16
16:14
+ (62) Обратно на текстовый - опять ругается, зараза....
65 Масянька
 
28.07.16
16:14
(63) А откуда тогда взялись 101, 102, 103, 104?
66 Ёпрст
 
28.07.16
16:15
(64) значит, где-то префикс ставишь
67 abfm
 
28.07.16
16:15
через копирование
68 Масянька
 
28.07.16
16:20
(66) Где? В смысле - как найти-то?
69 eryomin
 
28.07.16
16:31
(66) скорее, наоборот, дублирование должно было произойти, когда на число перешла (= от префикса отказалась). девчонка чудеса какие-то демонстрирует.
70 Масянька
 
28.07.16
16:43
Пипец... Полнейший...
В глЗаполнитьШапку есть такое:

    Если ПустоеЗначение(Конт.Фирма) = 1 Тогда
        
        Конт.Фирма = глЗначениеПоУмолчанию("ОсновнаяФирма");
        
        Если ПустоеЗначение(Конт.Фирма) = 0 Тогда
            
            // Обычные действия при смене фирмы (надо поменять номер и пареметры налогообложения)
            глПриИзмененииФирмы(Конт);
            
        КонецЕсли;
        
    КонецЕсли;


А в глПриИзмененииФирмы такое:

    // При изменении Юр.Лица надо изменить номер документа
    Если Конт.ЮрЛицо <> ЮрЛицоФирмы Тогда
        ПрефиксЮрЛицаФирмы = ?(СокрЛП(ЮрЛицоФирмы.ПрефиксНомеровДокументов)="","0",СокрЛП(ЮрЛицоФирмы.ПрефиксНомеровДокументов));
        Конт.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + ПрефиксЮрЛицаФирмы);
Сообщить("1 - " + СокрЛП(Константа.ПрефиксИБ) + ПрефиксЮрЛицаФирмы + ".");        
        Конт.ЮрЛицо = ЮрЛицоФирмы;
    КонецЕсли;

И вот тут (при создании) вывелось:
1 - 0.
71 Это_mike
 
28.07.16
16:45
(70) говорили же, спрашивай отладчика...
72 Масянька
 
28.07.16
16:48
(71) У отладчика?! Я бы у разрабов спросила.....
73 eryomin
 
28.07.16
16:48
(70) значит, ЮрЛицоФирмы.ПрефиксНомеровДокументов)="", т.е. для ЮрЛицоФирмы не задан префикс
74 Масянька
 
28.07.16
16:49
(73) Но ставит-то "0"!
Понятно почему разрядности не хватает...
75 Это_mike
 
28.07.16
16:49
(72) ну отладчик бы тебе и подсказал, что идти надо к разработчикам, и спрашивать: "Доколе? Никогда такого не было, и вот опять!"©
76 eryomin
 
28.07.16
16:50
открой карточку выбираемой фирмы и посмотри, указан ли префикс
77 Это_mike
 
28.07.16
16:51
(76) есественно, не указан. поэтому префикс ставится нууууль, со всеми вытекающими...
78 DGorgoN
 
28.07.16
16:52
(74) Мась, напиши свой код:
Создай справочник: код наименование фирма.
код - последнийНомер документа, наименование - вид документа, фирма - фирма документа
В коде

Если Конт.ЮрЛицо <> ЮрЛицоФирмы Тогда
        ПрефиксЮрЛицаФирмы = ?(СокрЛП(ЮрЛицоФирмы.ПрефиксНомеровДокументов)="","0",СокрЛП(ЮрЛицоФирмы.ПрефиксНомеровДокументов));
        Конт.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + ПрефиксЮрЛицаФирмы);
Сообщить("1 - " + СокрЛП(Константа.ПрефиксИБ) + ПрефиксЮрЛицаФирмы + ".");        
        Конт.ЮрЛицо = ЮрЛицоФирмы;
    КонецЕсли;

вместо

Конт.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + ПрефиксЮрЛицаФирмы);

напиши свой код по присвоению номера и узбагойся
79 eryomin
 
28.07.16
16:52
(74) а как это дополнительно отнимает разрядность, если другие фирмы имеют непустой префикс?
80 Масянька
 
28.07.16
16:55
(79) Нету префикса! Нету!
А разрядность отнимает. Нулем.
81 Масянька
 
28.07.16
16:55
(75) Не... Разговор будет .... В общем, ментов надо звать...
82 Масянька
 
28.07.16
16:56
(78) Да, без проблем. Но - как можно так писать?! Программы уже лет 10, если не больше.
83 Ёпрст
 
28.07.16
16:58
"0" это тоже может быть префиксом, если че.
84 Ёпрст
 
28.07.16
16:58
или "00"
85 Ёпрст
 
28.07.16
16:59
или пробел..
86 Масянька
 
28.07.16
17:00
(83) А зачем при незаполненном значении 0 пихать?
(85) Не может. Там СокрЛП() есть.
87 Ёпрст
 
28.07.16
17:46
При изменении кода на числовой, работает ? Ну и успакойся :)
88 Масянька
 
28.07.16
17:53
(87) Если на огороде оставить тяпку - рано или поздно получишь черенком по лбу.
89 Ёпрст
 
28.07.16
18:11
(88) ну, тогда гляди в код отладчиком
90 Ёпрст
 
28.07.16
18:12
чудес то, не бывает. Мот вообще, у тебя турбомд стоит, и ты не весь код видишь :)
91 Ёпрст
 
28.07.16
18:12
точнее, не тот смотришь
92 Масянька
 
28.07.16
18:19
(90) Нету. Турбо. Код - весь. Тот самый.
Если не заполнен префикс - пихаем 0. Зачем?
93 Злопчинский
 
28.07.16
19:13
глубокий вопрос
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.