1. 1C / Говнокод #9538

    −137

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 24 Февраля 2012

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

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