Бухгалтерия / Говнокод #9538 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если ЭтоНовый() Тогда
		Запрос = Новый Запрос;
		Запрос.УстановитьПараметр("Период", НачалоГода(ТекущаяДата()));
		Запрос.Текст = "ВЫБРАТЬ
		|	Максимум(ПлатежноеПоручение.Номер) КАК Номер
		|ИЗ
		|	Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
		|ГДЕ
		|	ПлатежноеПоручение.Дата >= &Период";
		Выборка = Запрос.Выполнить().Выбрать();
		НомерМакс = 0;
		Пока Выборка.Следующий() Цикл
			Если НомерМакс < Число(Выборка.Номер) Тогда
				НомерМакс = Число(Выборка.Номер);
				Если СтрДлина(НомерМакс) = 1 И НомерМакс<9 Тогда
					НомерДок ="0000000000" + Строка(Число(Число(Выборка.Номер) + 1));
				ИначеЕсли (СтрДлина(НомерМакс) = 2 И НомерМакс<>99) Или НомерМакс=9 Тогда
					НомерДок ="000000000" + Строка(Число(Число(Выборка.Номер) + 1));
				ИначеЕсли (СтрДлина(НомерМакс) = 3 И НомерМакс<>999) Или НомерМакс<>99 Тогда
					НомерДок ="00000000" + Строка(Число(Число(Выборка.Номер) + 1));
				ИначеЕсли (СтрДлина(НомерМакс) = 4 И НомерМакс<>9999) Или НомерМакс<>999 Тогда
					НомерДок ="0000000" + Строка(Число(Число(Выборка.Номер) + 1));
				ИначеЕсли (СтрДлина(НомерМакс) = 5 И НомерМакс<>99999) Или НомерМакс<>9999 Тогда
					НомерДок ="000000" + Строка(Число(Число(Выборка.Номер) + 1));
				ИначеЕсли (СтрДлина(НомерМакс) = 6 И НомерМакс<>999999) Или НомерМакс<>99999 Тогда
					НомерДок ="00000" + Строка(Число(Число(Выборка.Номер) + 1));
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		ЭтотОбъект.Номер = НомерДок;
	КонецЕсли;
	
КонецПроцедуры

Мое творение, писАл на полном серьезе. В одном из документов БП пользователь отредактировал вручную номер документа, после этого сбилась нумерации. Документы с "неправильными" номерами удалили и добавили вновь - было поздно. Типового решения проблемы не нашлось и был написан этот код.
Можно увидеть очень интересное: нахождение максимального значения в запросе и одновременный бесполезный прогон всего цикла, чтобы снова найти максимальное значение и много чего другого.

Запостил: ErrorEd88 ErrorEd88, (Updated )

Комментарии (6) RSS

  • > Число(Число(Выборка.Номер) + 1)

    Два раза для верности? Вдруг прибавим единицу и будет не число?!
    Ответить
  • Приходится подобные писать на скорую руку
    Ответить
  • р Q EF.IGI?F!EF?M!Y.S$O.C(D$QC.BF,QG(B,R?M:F:PN?A$S.M,U.I$A"V)N?H)R:I(G$X(W L.A(C.U.F.K.Q$Z?Z.X.T:C)N M H(V)D?ZA"C"H:S.B$G,L!H(W(PQ,J:B$B)J(F(Z)T.G!D(E$R:U!R:Q D,L$L N"I.U)P"V!Q.Y:W(L,F)X,O(Y P W)G?VG(Q,W.U MW)V!O,YY:P,N$TB?U.P,W!K,Q)M$D.J,M?S"N$N?B:I"S:O.X!ON(Y F,W:C"M A D,P$W!L(Q)V?S!U(P$C,H,I"G.U(ZX L?P,VW:T B Y GB(P,M!W N"U?O O!N W.B"J V)I!C:B B!E.V M.F!J!C AK:A?I$KN.Z?V.Z.C$I.Q!A.N)U.D(X"N.H(O?TX$Z,X!L A G$C?U.F)B ZI"FG,X)Y(Q(O"S!Q?A:Y.N.T!B M(E.L"I:NI?BY?P,E"U O"N?M(I I,A(G?X!L)O"F(Z(V,F$Z?O,Q.C X?B(W,J)U"XR?G?B?GT(U:C"L!X N.S.B,H.Y?F?W(HM(K$VR?U:R,H:B:B.QQ X"Z:OS:A,U R L$J)I!Q$P C.G.G,R?O Z K C,Y T!J X"D.H(G)V(W,I)K:W:X?S.X)R?G)R M,C$D(J"L)G!S Q!U N"M"Y:I)Q(L)R!F,X"V"H!N?D$A(K"I,T"L.Q"Y,C!F?X:A!D!X(WA?A"T!G$O:G(V:L)V$U"V M,VR:V!B?R)X"Q I:I"CM(B,S?J.L"M.X)R!H!V W,K.S(Z,B?G,P"Q.JP:R!W!D,M,Q$E(IJ:E!C W)K I V(F N,Y(X:J:I:K(Q$B!Y"C)F:B$G?R,U,V:I:C$G$TU!L"I.P,T H,O)L.S(K!Q ST!K T?Q:Z:G!A(J:D A?D$S"D:M(W$G(M(O,H Q.O"O$S,A!DЩWMESUPRURDGCRUPMDSTBFGIWLNWCHCTKDAPTZXNFO
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8