Имя: Пароль:
1C
 
Программная нумерация документов
0 titan83
 
12.09.10
16:30
Здравствуйте!
Хочу изменить порядок нумерации расходной накладной, чтобы было примерное так: 12\09-01.
Первое число - день месяца, второе - месяц, третье - номер документа за этот день.
К сожалению, в программировании конкретно 1с я не очень силен. Но по старой памяти вижу алгоритм таким:
1. Получить текущую дату.
2. получить все документы данного вида (расходная накладная) за эту дату.
3. В событии ПриВводеНового (вроде так) присвоить НомерДок полученные ранее данные
Если есть готовый пример (не обязательно такой), иллюстрирующий принципы работы с номером документа, то буду признателен вдвойне.
С уважением, Аликин Сергей
1 Эльниньо
 
12.09.10
16:42
Преф = Сред(Строка(РабочаяДата()), 4, 2) + "/" + Лев(Строка(РабочаяДата()), 2) + "-";
   УстановитьНовыйНомер(Преф);
2 Зеленый Кот
 
12.09.10
16:48
а может не надо?
3 Mагистр
 
12.09.10
16:51
проще сделай еще один реквизит, который будет назван , например так: НОВЫЙНОМЕР и делай с ним что хочешь, а нормальный номер не трогай.
4 titan83
 
12.09.10
17:12
Эльниньо, спасибо!
Все отлично!
Тебе огромный респект!
5 titan83
 
13.09.10
08:18
только одну канитель не могу побороть - ведущий ноль не выводится в печатной форме.
сделал так:
   Преф = "";
   Если СтрДлина(Сред(Строка(РабочаяДата()), 4, 2)) = 1 Тогда
       Преф = "0";
   КонецЕсли;
   Преф = Преф + Сред(Строка(РабочаяДата()), 4, 2) + "/" + Лев(Строка(РабочаяДата()), 2) + "-";
   УстановитьНовыйНомер(Преф);
В форме все отражается правильно, а печатной форме ведущего ноля нет.
куда копнуть?
6 Rie
 
13.09.10
08:20
(5) Там функция есть в Глобальном модуле для формирования номера в печатной форме. Её подправь - и будет счастье.
7 dk
 
13.09.10
08:35
(0) будущие проги этой конфы еще долго будут поминать тебя недобрым словом.
Рекомендую установку нового номера вывести в глобальник, иначе с программным созданием документов наплюхаешься
8 titan83
 
13.09.10
13:35
на счет прогеров, пожалуй, соглашусь)
но остался один нерешенный вопрос, при вводе накладной на основании счета, номер накладной всегда один и тот же (естественно, неправильный).
глянул в модуле накладной, там есть процедура ввод на основании, но добавление туда установки номера эффекта не дало. где смотреть?
и еще: спасибо огромное за ваши ответы, вдохновляет))
9 titan83
 
13.09.10
13:42
отвечу сам себе: ВводНаОсновании.
10 Wit
 
13.09.10
13:43
(9) а в (8) ты на какую процедуру смотрел?
11 titan83
 
13.09.10
13:59
Функция ЗаполнитьНаОсновании()
но это, как я понимаю, относится к документам, вводимым на основании накладной.
другая проблемка - левая часть, которую собираю я, правильная, но вот после тире надо бы убрать ведущий ноль, т.е. сделать не "01", а просто "1", причем это
НомерДокПечатнойФормы = глПреобразоватьНомерДок(НомерДок, 1, 0)
влияет только на ведущие ноли в той части, которую заполняю я, на автогенерируемую воздействия не оказывает. как этот ноль скрыть?
12 Rie
 
13.09.10
18:41
(11) Никак не скрыть. И не надо скрывать, если не хочешь поиметь больших проблем с нумерацией. Если количество документов за период не превышает 9, можешь уменьшить длину номера.
13 Эльниньо
 
13.09.10
18:56
Строка(Число("01"))
14 titan83
 
14.09.10
18:40
Эльниньо, спасибо за ответ. Но вроде как мы только на префикс влияем, как применить твое преобразование к номеру, генерируемому 1с?
извини, если вопрос (и ответ на него) очевидный)
15 Эльниньо
 
14.09.10
19:18
(14) Строка(ТвоёЧисло)
16 titan83
 
15.09.10
14:02
Извини, я, наверное, неправильно выразился(
Подстановка переменной - это понятно, но вот здесь
Преф = Сред(Строка(РабочаяДата()), 4, 2) + "/" + Лев(Строка(РабочаяДата()), 2) + "-";
мы формирует только ПРЕФИКС, т.е. например "04\11-", а вот то, что после тире - например, "01", "02" и т.д., число подставляемое 1с автоматически. и вот у него мне и надо убрать ведущий ноль при выводе на печать. Если ты подскажешь название переменной, в которой содержится это значение, то я буду очень признателен!
17 Wit
 
15.09.10
14:04
длину строки с номером знаешь
длину префикса знаешь
после формирования нового номера вырезаешь то что за префиксом, делаешь (13) и клеишь назад.
18 titan83
 
15.09.10
14:19
Так я об этом и спрашиваю - как называется переменная, в которой хранится полный номер? откуда вырезать то, что за префиксом? или это значение возвращает функция УстановитьНовыйНомер(Преф)?
Если бы у меня была полная строка, то я бы не стал утруждать форумчан, а быстренько бы посмотрел строковые функции в справочнике.
19 babytype
 
15.09.10
14:22
НомерДок - имя переменной
20 babytype
 
15.09.10
14:34
а еще в типовых есть такая функция:

// Возвращает номер документа без префикса
Функция глНомерБезПрефикса(Знач НомерДок) Экспорт
   Если Найти(НомерДок,"-") > 0 Тогда
       Возврат Число(Сред(НомерДок,Найти(НомерДок,"-")+1));
   Иначе
       Возврат Число(НомерДок);
   КонецЕсли;
КонецФункции
21 Эльниньо
 
15.09.10
17:07
НовыйНомер = НомерДок;
К = Найти(НовыйНомер, "/");
НовыйНомер = Лев(НовыйНомер, К) + Число(Прав(НовыйНомер, СтрДлина(НовыйНомер) - К));
НомерДок = НомерДок;
22 Эльниньо
 
15.09.10
17:08
+(21) Можно короче, но так понятнее