Имя: Пароль:
1C
1С v8
Как лучше реализовать раздельную нумерацию документа для разных видов операций
,
0 Mashap
 
22.08.12
18:39
Как лучше реализовать раздельную нумерацию для разных видов операций одного документа. Т.е. есть документ с разными видами операции, по одному виду операции нумерация в пределах года, по второму - в пределах дня, также разные маски номера: где-то нужен префикс организации, где-то не нужен, где-то нужна маска дня, где-то не нужна. Спасибо.
1 Fragster
 
гуру
22.08.12
18:41
ПриУстановкеНовогоНомера
2 Fragster
 
гуру
22.08.12
18:41
ПередЗаписью
3 Fragster
 
гуру
22.08.12
18:41
как угодно
4 Aleksey
 
22.08.12
18:41
(1) Не взлетит
5 Fragster
 
гуру
22.08.12
18:42
(4) почему? сделать префикс равный длине номера...
6 Aleksey
 
22.08.12
18:42
Для начало нужно убрать "по одному виду операции нумерация в пределах года, по второму - в пределах дня,". А остальное реализуемо, даже в типовой, например фактуры на аванс, или разная нумерация в зависимости от подразделения в БП КОРП
7 Mashap
 
22.08.12
18:42
а нумерация одного в пределах дня, а второго в пределах года?
8 Aleksey
 
22.08.12
18:42
(5) И?
9 Mashap
 
22.08.12
18:43
а если завести отдельный реквизит? Программно искать последний номер, присваивать его?
10 Mashap
 
22.08.12
18:43
присваивать следующий?
11 ЧашкаЧая
 
22.08.12
18:43
по одному виду операции нумерация в пределах года, по второму - в пределах дня
Только отключать проверку уникальности номеров - соответственно самостоятельно следить, соответственно тормоза.
12 happysan
 
22.08.12
18:45
13 Mashap
 
22.08.12
18:46
(12) Т.е. дополнительный реквизит...
14 happysan
 
22.08.12
18:47
(13)лучше не придумаешь
15 Mashap
 
22.08.12
18:48
(14) могут быть проблемы типа, одновременно нажали кнопку записать, присвоились одинаковые номера документов, контролировать уникальность и т.д. Будет тормозить..
16 happysan
 
22.08.12
18:57
(15)тормозить будет в любом случае
17 GenV
 
22.08.12
18:59
(0) Разный префикс номера для разных операций. В пределах дня - содержит дату, в пределах года - содержит год. Ничего не тормозит.
18 Mashap
 
22.08.12
19:01
(18) Ну вот я написала нечто похожее, но я не знаю - будет ли такое работать. Изменения для процедуры "ПриУстановкеНовогоНомера":

   Если ТипЗнч(Источник) = Тип("ДокументОбъект.ДоговорУправленческий") Тогда
       
       Если Источник.ВидОперации = Перечисления.ВидыОперацийДоговорУправленческий.Общий Тогда
           
           ДобавитьПрефиксОрганизации(Источник, Префикс);
           
       КонецЕсли;
       
       Если Источник.ВидОперации = Перечисления.ВидыОперацийДоговорУправленческий.Курсовой Тогда
           
           День =""+ Строка(День(Источник.Дата));
           Если СтрДлина(День) = 1 Тогда
               День = "0"+День;
           КонецЕсли;
           
           Месяц = Строка(Месяц(Источник.Дата));
           Если СтрДлина(Месяц) = 1 Тогда
               Месяц = "0"+Месяц;
           КонецЕсли;
           
           Год = Строка(Год(Источник.Дата));
           
           Префикс = ""+День+"/"+Месяц+"/"+Год;
           
       КонецЕсли;
       
       Если Источник.ВидОперации = Перечисления.ВидыОперацийДоговорУправленческий.ДоговорСчет Тогда
           
           День =""+ Строка(День(Источник.Дата));
           Если СтрДлина(День) = 1 Тогда
               День = "0"+День;
           КонецЕсли;
           
           Месяц = Строка(Месяц(Источник.Дата));
           Если СтрДлина(Месяц) = 1 Тогда
               Месяц = "0"+Месяц;
           КонецЕсли;
           
           Префикс = ""+День+"/"+Месяц;
           
       КонецЕсли;
       
       
       
   КонецЕсли;
19 GenV
 
22.08.12
19:02
(18) Буквы разные добавь для разных операций иначе пересекутся номера. И можно использовать функцию Формат для получения префикса по дате.
20 GenV
 
22.08.12
19:03
19+ буквы в начало префикса
21 Mashap
 
22.08.12
19:04
работает как-то криво, перескакивают номера через один.. сейчас.
22 pumbaEO
 
22.08.12
19:04
Если дату поменяют, что будешь делать?
23 GenV
 
22.08.12
19:05
(22) Очищать номер
24 Mashap
 
22.08.12
19:06
(23) как?
25 Mashap
 
22.08.12
19:06
(23) в какой момент в какой процедуре?
26 Fragster
 
гуру
22.08.12
19:07
(18) префиксы хорошо бы одной длины. ну и разделение префиксов по виду операции
27 GenV
 
22.08.12
19:07
(24) Номер = "" ) Как же еще )
28 Mashap
 
22.08.12
19:07
(22) да, это очевидно
29 GenV
 
22.08.12
19:07
(25) ПриИзмененииДаты если не ошибаюсь
30 Mashap
 
22.08.12
19:07
(27) думала, вы говорите про перескакивание номеров - в чем ошибка - не понимаю.
31 Mashap
 
22.08.12
19:08
(29) про изменение даты понятно, спасибо.
32 Mashap
 
22.08.12
19:10
Делаю один документ с операцией 1, сохраняю. Делаю второй документ с операцией 2, сохраняю. У первого: О0000001, у второго О0000003.
Как бороться?
33 GenV
 
22.08.12
19:10
(30) Номер 20/1200001 и 20/12/120001 - для программы общие, т.к. начало общее. Добавь букву в начала, самый простой способ различать их. Или единый префикс вида ГГГГ0000, ГГГГММДД, где год будет вначале, потом месяц, потом день.
34 Mashap
 
22.08.12
19:10
(32) не так. Вот так: Делаю один документ с операцией 1, сохраняю. Делаю второй документ с операцией 1, сохраняю. У первого: О0000001, у второго О0000003.
Как бороться?
35 Mashap
 
22.08.12
19:12
да, добавила в начало для каждой операции по одному символу. Вот так теперь:

   Если ТипЗнч(Источник) = Тип("ДокументОбъект.ДоговорУправленческий") Тогда
       
       Если Источник.ВидОперации = Перечисления.ВидыОперацийДоговорУправленческий.Общий Тогда
           
           
           ДобавитьПрефиксОрганизации(Источник, Префикс);
           Префикс = "О"+Префикс;
           
       КонецЕсли;
       
       Если Источник.ВидОперации = Перечисления.ВидыОперацийДоговорУправленческий.Курсовой Тогда
           
           День =""+ Строка(День(Источник.Дата));
           Если СтрДлина(День) = 1 Тогда
               День = "0"+День;
           КонецЕсли;
           
           Месяц = Строка(Месяц(Источник.Дата));
           Если СтрДлина(Месяц) = 1 Тогда
               Месяц = "0"+Месяц;
           КонецЕсли;
           
           Год = Строка(Год(Источник.Дата));
           
           Префикс = ""+День+"/"+Месяц+"/"+Год;
           Префикс = "К"+Префикс;
           
       КонецЕсли;
       
       Если Источник.ВидОперации = Перечисления.ВидыОперацийДоговорУправленческий.ДоговорСчет Тогда
           
           День =""+ Строка(День(Источник.Дата));
           Если СтрДлина(День) = 1 Тогда
               День = "0"+День;
           КонецЕсли;
           
           Месяц = Строка(Месяц(Источник.Дата));
           Если СтрДлина(Месяц) = 1 Тогда
               Месяц = "0"+Месяц;
           КонецЕсли;
           
           Префикс = ""+День+"/"+Месяц;
           Префикс = "С"+Префикс;
           
       КонецЕсли;
       
   КонецЕсли;
36 Mashap
 
22.08.12
19:16
(33) как бороться в пределах дня/в пределах месяца?
37 Mashap
 
22.08.12
19:18
Последовательно создавала документы:
1. вид операции 1
2. вид операции 2
3. вид операции 3
4. вид операции 1

Получила такие номера:
1. О00000001
2. К22/08/2
3. С22/08001
4. О00000004

Что делать?