Имя: Пароль:
1C
1C 7.7
v7: Нужна ваша помошь по нумерации документа
0 defre315
 
16.01.13
11:17
Ребята нужна ваша помощь.
Подскажите пожалуйста....Есть Документ, кто то из грамотеев наклацал и теперь все пошло не так
Номер один работает правильно(При каждом новом создани документа он к номеру добавляет один, тоесть если сейчас 15, следующий документ будет 16)
А вот номер который должен совпадать с первым....все время выдаёт цифру 2
Проверял в отлдчике.....нимогу найти причину, может в коде что то не так?

Процедура НомерДоверенности()
   Док=СоздатьОбъект("Документ.Доверенность");
   Док.ВыбратьДокументы(НачГода(ДатаДок),КонГода(ДатаДок));
   Если Док.ПолучитьДокумент()>0 Тогда
       ПредыдущийНомер = Док.Номер;
       ДлинаПредыдущийНомер = СтрДлина(СокрЛП(ПредыдущийНомер));
       Попытка
           НовыйНомер = Строка(Число(ПредыдущийНомер)+1);
       Исключение
           НовыйНомер = 1;
       КонецПопытки;
       ДлинаНовыйНомер = СтрДлина(Строка(НовыйНомер));
       Если ДлинаНовыйНомер < ДлинаПредыдущийНомер Тогда
           Длина = ДлинаПредыдущийНомер;
       Иначе
           Длина = ДлинаНовыйНомер;
       КонецЕсли;
       ФорматнаяСтрока = "Ч(0)"+Строка(Длина)+".0";
       Номер = Формат(НовыйНомер, ФорматнаяСтрока);
   Иначе
       Номер = "1";
   КонецЕсли;    
КонецПроцедуры
1 defre315
 
16.01.13
11:19
2 Ёпрст
 
16.01.13
11:19
:))))))))))))))))))))
3 Ёпрст
 
16.01.13
11:20
Да уж..
Может того, подумаешь сперва ?
Ты берешь первый документ в году всегда и к нему +1 делаешь.
ну и 2 всегда и будет.
4 Ёпрст
 
16.01.13
11:21
Если че - ОбратныйПорядок(1) тебя спасёт, хотя бы последний документ будешь брать, а не первый.
5 Dolly_EV
 
16.01.13
11:21
Ваще жесть))
Процедура НомерДоверенности() это еще поди вызывается из ВводНового()? ))
6 Стрелок
 
16.01.13
11:21
ОбратныйПорядок !!!!
7 Стрелок
 
16.01.13
11:22
(5) конечно а что не так кроме того что чел забыл поставить обратный порядок выборки?
8 defre315
 
16.01.13
11:22
документ не первый то....уже сколько создавал
раньше было что при открытии.....первый и второй номер совподали
9 Ёпрст
 
16.01.13
11:22
(8) читай (3,4) до полного просветления
11 Стрелок
 
16.01.13
11:25
(10) а ты видимо сразу с СП в руках родился? может чел начинающий. я этак в году 2002 и  не такое чудил (перавых пару месяцев)
12 defre315
 
16.01.13
11:25
Подскажите пожалуйста как ОбратныйПорядок прописывается
13 Dolly_EV
 
16.01.13
11:25
(7) я ТС так понял (+ поизучав картинку):
в Документе Доверенность при вводе нового дока надо, чтобы в поле "Номер" упала числовая часть (без префикса) НомерДок ЭТОГО ЖЕ НОВОГО ДОКА, правильно?
Так ЗАЧЕМ в этом случае перебирать все доки за год?!?!?
14 Стрелок
 
16.01.13
11:25
(12) Перед выборкой написать
Док.ОбратныйПорядок(1);
15 Стрелок
 
16.01.13
11:26
(13) неправильно понял. ты не знаком с нумерацией доверенностей? тогда чего лезешь?
16 Ёпрст
 
16.01.13
11:26
(12)
Док=СоздатьОбъект("Документ.Доверенность");
Док.ОбратныйПорядок(1);
   Док.ВыбратьДокументы(НачГода(ДатаДок),КонГода(ДатаДок));

.....

наслаждайся
17 Стрелок
 
16.01.13
11:26
(16) )~
18 Dolly_EV
 
16.01.13
11:28
+(13)
Процедура ВводНового()
   Номер=Число(Сред(НомерДок,4))
...
КонецПроцедуры

так не хватит?
19 Стрелок
 
16.01.13
11:29
(18) писатель?
20 defre315
 
16.01.13
11:29
(16) сори, был у меня этот обратный порядок.....только когда он стоял у меня во втором номере всегда была цифра 1850
а когда я вчера убрал обратный порядок, цифра стала 2
21 Стрелок
 
16.01.13
11:30
(20) значит у тебя есть документ "Доверенность" у которого воткнули номер 1849
22 Стрелок
 
16.01.13
11:30
(+21) И он  датой "на днях"
23 Dolly_EV
 
16.01.13
11:31
(19) ?
24 Стрелок
 
16.01.13
11:31
телепатирую - была себе доверка прошлого года но кто то умнй решил что "нуегона.." перед НГ куда то ехать за товаром и поменял дату на текущий год. И понеслось...
25 Стрелок
 
16.01.13
11:32
(23) я говорю - "ТЫ ПИСАТЕЛЬ?" читать 15 два раза
26 defre315
 
16.01.13
11:32
(18) сделал, теперь во второй колонке вообще ничего нету
(21) проверял....такого документа нет....Дело в том что с нового года нумерация должна была обнулится, и документы должны были создаваться с 1 номера
27 Стрелок
 
16.01.13
11:33
(25) номера доверок и номер документа в 1С могут быть связаны ТОЛЬКО если все доверки выписываются в 1С и не помечаются на удаление (нет ошибочных) что происходит крайне редко. а нумерация должна быть сквозной
28 Ёпрст
 
16.01.13
11:33
(20) ну как тебе сказать то попроще - ты неправильно извлекаешь числовую часть из номера документа.
В начале, избавься от префикса, затем уже приобразовывай в число, прибавляй 1 и добавляй префикс.
Но, можно пойти другим путём -
тупо делаешь так и привет:

Док.Новый();
Док.УстановитьНовыйНомер()
Сообщить(Док.НомерДок) //тут будет номер+1..автоматом - наслаждайся
29 Стрелок
 
16.01.13
11:33
(26) не слушай его

проверяй в отладчике - есть
30 aka AMIGO
 
16.01.13
11:34
даже ОбратныйПорядок не поможет, если кто-то поменял дату.
но выход есть..
31 Стрелок
 
16.01.13
11:34
поищи в глобальнике глНомерБезПрефикса (используется в налоговых накладных обычно) это если нумерация совпадает 100 % но совет - не играйся.
32 Dolly_EV
 
16.01.13
11:37
(27) в сабже сказано "А вот номер который должен совпадать с первым"
33 Стрелок
 
16.01.13
11:39
(32) сори если так. я понял по другому - что он тоже должен приращаться на единицу. Так например как сделано в ПКО и РКО - номера ордеров не зависят от номер документа. но возможно такое только на Украине
34 defre315
 
16.01.13
11:40
Я в отладчике не сильный спец но вотчтооно мне показало
http://s018.radikal.ru/i507/1301/eb/45d10900ab7c.jpg
35 Dolly_EV
 
16.01.13
11:41
(34) текст ВводНового() еще приведи полностью
36 Стрелок
 
16.01.13
11:43
(34) а где табло отладки со значениями "Док="?
37 Dolly_EV
 
16.01.13
11:43
и таки ответь на спор (13)(15)(27)(32) - тебе в поле "Номер" надо поле "Номер" ПРЕДЫДУЩЕГО дока + 1, или просто ЧИСЛОВУЮ ЧАСТЬ нового дока (без префикса) ??
38 ЧеловекДуши
 
16.01.13
11:44
Автору нужен тупо:
1. Создать константу "ПорядковыйНомерДоверенности"
2. При создании нового документа "Доверенность" записывать номер (не номер самого документа) типа "ПорядковыйНомерДоверенности + 1"
3. И тут же константу "ПорядковыйНомерДоверенности" увеличивать на единицу.

...
Но по существу, все куда проще и лучше и дешевле.
1. Забить на нумерацию из под палки.
2. Любая доверенность еще и регистрируется на бумажном Журнале.
3. И вот этот журнал, где расписывается пользователь и играет БОЛЬШУЮ роль. А то что в базе, это лишь возможность еще раз распечатать одно и тоже в нескольких экземлярах :)
39 Стрелок
 
16.01.13
11:44
(37) спроси проще :

1. номерация доверок должна быть сквозной?
2. бывают ли ошибочно выписанные доверенности?
40 defre315
 
16.01.13
11:46
мне нужно что бы, номер предыдущего дока +1
41 ЧеловекДуши
 
16.01.13
11:46
(39)Судя по хотелки, нумерация сквозная (как бы пользователь хочет), на год.
Конечно бывают левые доверенности, куда без человеческого фактора :)
42 Стрелок
 
16.01.13
11:47
Ну вот что я и говорил.. автор ищи документ этого года у которого поле "Номер" забили 1849
43 Стрелок
 
16.01.13
11:47
частенько доверенности выписывают "наперёд" резервируя номер для расходных документов от поставщика
44 defre315
 
16.01.13
11:48
(42) ок, а если найду, то что с ним нужно делать?
45 Dolly_EV
 
16.01.13
11:48
(44) поменять на "правильный" по-порядку
46 ЧеловекДуши
 
16.01.13
11:49
(43)Если это так, то автору (0) нужно чисто перебором в цикле находить не используемый номер доверенности :)
47 Стрелок
 
16.01.13
11:49
(44) спросить кто и зачем сделал и что теперь с ним делать? если никто не сознается - пометь на удаление (кстати в выборке проверочку на проведение доверенности поставь)
48 Ёпрст
 
16.01.13
11:49
(42) да уж..


Автор, не слушай двоечников, смотри (28)

И если че,
Строка(Число("НФ-00015")+1) = 1
всегда
49 Стрелок
 
16.01.13
11:49
(46) точно. а точнее получить последний документ доверенность в текущем году. у него всё верно. не хватает обратного порядка выборки
50 ЧеловекДуши
 
16.01.13
11:49
(44)Нечего не делать. Ибо он уже скорей всего занесен в бумажный реестр доверенностей и за него расписался человек.
51 Ёпрст
 
16.01.13
11:49
(44) не найдешь, у тебя его нет
52 Стрелок
 
16.01.13
11:50
(48) да ему не тот номер надо если чо
53 Стрелок
 
16.01.13
11:50
(51) "аргументируй" ©
54 Dolly_EV
 
16.01.13
11:55
Если сквозная нумерация независимо от номера, тогда имхо лучшее решение будет прямым запросом:

Select
MAX($Довер.Номер) КАК Номер
from
$Документ.Доверенность КАК Довер
innerjoin
$Жур ...

и не надо никаких констант городить

З.Ы. и ЗАПРЕТИТЬ к изменению ручками поле "Номер" на форме!
55 Dolly_EV
 
16.01.13
11:56
а так же можно прислушаться к (38) второй абзац.
56 Стрелок
 
16.01.13
11:57
(54) ну ё-маё... вы сабж читали? код в нём? ясно же видно что нумерация уникальна в пределах года...
57 Dolly_EV
 
16.01.13
11:59
(56)
innerjoin $Жур ...

вот в "..." много кроется
58 Стрелок
 
16.01.13
12:00
(57) конечно много например "между"
59 Dolly_EV
 
16.01.13
12:02
(58) и какие претензии??? я ж не дописал просто, что в соединении с журналом выборка между НачГода и ТекДата и Проведен=1
60 Стрелок
 
16.01.13
12:04
(59) никаких кроме ... да ладно... "Если сквозная нумерация независимо от номера, тогда имхо лучшее решение будет прямым запросом:" и тут же откат "ну если надо то ставим условие на даты..." автор с отладчиком совладать не может а ты ему про прямые запросы... зачем городить огород если есть проверенное средство - обратная выборка
61 Dolly_EV
 
16.01.13
12:05
(60) "не ну если надо", а "имелось ввиду"
62 Стрелок
 
16.01.13
12:06
(61) поспорим. что ты имел в виду сказав "Если сквозная нумерация независимо от номера, тогда имхо лучшее решение будет прямым запросом:"? ась? где тут "имелось в виду"?
63 Dolly_EV
 
16.01.13
12:11
(62) я написал "Внутреннее соединение с Журналом..." МНОГОТОЧИЕ, не стал я писать условия на даты и Проведен, просто ИМЕЯ ВВИДУ... смысл спорить???
64 Стрелок
 
16.01.13
12:12
(63) мне надоело. вначале с номером теперь с прямым запросом.... как ты живёшь то с такой многосмысленностью в словах?