|
Убрать Лидирующие нули при записи. | ☑ | ||
---|---|---|---|---|
0
Ghost1830
24.08.20
✎
15:26
|
Добрый день. УПП 1.3. РАУЗ.
Тема уже не новая и в разных формулировках была,но подходящего ответа не нашла. Записываем номер документа в формате: Префикс+ДДмм+"."+ Порядковый номер. Например, КГ2408.001. Как убрать незначащие нули после "."? Вот обе процедуры: Процедура ДобавитьПрефиксОрганизации_1(ДокументОбъект, Префикс) Экспорт // Если в документе нет реквизита "Организация" или для организации не задан префикс, // то используем пустой префикс, иначе используем префикс организации. Префикс = "0"; Если ДокументОбъект.Метаданные().Реквизиты.Найти("Организация") <> Неопределено Тогда ПрефиксОрганизации = ПолучитьЗначениеРеквизита(ДокументОбъект.Организация, "Префикс"); Если ЗначениеЗаполнено(ПрефиксОрганизации) Тогда ДатаГод = Формат(ДокументОбъект.Дата, "ДФ=ддММ"); ПрефиксДата = Строка(ДатаГод); Префикс = ПрефиксОрганизации + ПрефиксДата + "."; Иначе Префикс = ПрефиксОрганизации; КонецЕсли; КонецЕсли; КонецПроцедуры // процедура формирования номера документа Процедура ПриУстановкеНовогоНомераДляДокументов_1(Источник, СтандартнаяОбработка, Префикс) Экспорт ДобавитьПрефиксОрганизации_1(Источник, Префикс); ДобавитьПрефиксУзла(Префикс); КонецПроцедуры |
|||
1
Philix
24.08.20
✎
15:44
|
(0) Мэтр, таким макаром Вы убиваете встроенный нумератор, так как он будет нормально работать только с лидирующими нулями и после присвоения номера 9 в пределах текущей даты, он сломается.
По сути: Вам нужно разобрать дату документа на отдельные числа (не строки, а числа), и каждое число отдельно форматировать так, как считаете нужным. |
|||
2
spiller26
24.08.20
✎
15:57
|
(0) Формировать номер самому, у вас не хватает поиска последнего номера и присвоения после ".".
|
|||
3
spiller26
24.08.20
✎
16:12
|
(0) Я делал свою нумерацию для СФ на аванс (бухи заказали). Думаю разберётесь. Принцип нумерации после "А", у вас ".".
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ЭтоНовый() и ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс Тогда Номер = абтПолучитьНомерСчетаФактурыНаАванс(); ПредставлениеНомера = Номер; КонецЕсли; КонецПроцедуры Функция абтПолучитьНомерСчетаФактурыНаАванс() НовыйНомерСФА=""; НомерРеализации = ""; ДатаРеализации = НачалоГода(Дата); НомерСФА = ""; ДатаСФА = НачалоГода(Дата); НумерацияСчетФактурСтандарт = Истина; Попытка НумерацияСчетФактурСтандартCRM = Константы.abtНумерацияСчетФактурСтандартCRM.Получить(); Исключение НумерацияСчетФактурСтандартCRM = Ложь; КонецПопытки; //найти последнюю реализацию Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | РеализацияТоваровУслуг.Номер КАК НомерРеализации, | РеализацияТоваровУслуг.Дата КАК ДатаРеализации |ИЗ | Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Дата <= &Дата | //ПрефиксацияCRM | И РеализацияТоваровУслуг.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРеализацияТоваров.Товары) | И РеализацияТоваровУслуг.Дата >= НАЧАЛОПЕРИОДА(&Дата, ГОД) | |УПОРЯДОЧИТЬ ПО | РеализацияТоваровУслуг.Дата УБЫВ, | НомерРеализации УБЫВ"; Запрос.УстановитьПараметр("Дата", КонецДня(Дата)); Если НумерацияСчетФактурСтандартCRM Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "//ПрефиксацияCRM", "И РеализацияТоваровУслуг.Номер ПОДОБНО ""%/%"""); КонецЕсли; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда НовыйНомерСФА = "1А1"; //начало года и первая СФ на аванс Иначе ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Если ВыборкаДетальныеЗаписи.Следующий() Тогда ДатаРеализации = НачалоДня(ВыборкаДетальныеЗаписи.ДатаРеализации); НомерРеализации = ВыборкаДетальныеЗаписи.НомерРеализации; КонецЕсли; КонецЕсли; //найти последние номера СФ на аванс Максимал = 0; ПрефиксСФА = ""; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СчетФактураВыданный.Номер КАК Номер, | НАЧАЛОПЕРИОДА(СчетФактураВыданный.Дата, ДЕНЬ) КАК Дата |ПОМЕСТИТЬ ВтСфАванс |ИЗ | Документ.СчетФактураВыданный КАК СчетФактураВыданный |ГДЕ | СчетФактураВыданный.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыВыставленного.НаАванс) | И СчетФактураВыданный.Номер ПОДОБНО ""%А%"" | И СчетФактураВыданный.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) И &Дата |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | МАКСИМУМ(ВтСфАванс.Дата) КАК Дата |ПОМЕСТИТЬ ВтМакс |ИЗ | ВтСфАванс КАК ВтСфАванс |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВтСфАванс.Номер КАК НомерСФА, | ВтСфАванс.Дата КАК ДатаСФА |ИЗ | ВтМакс КАК ВтМакс | ЛЕВОЕ СОЕДИНЕНИЕ ВтСфАванс КАК ВтСфАванс | ПО ВтМакс.Дата = ВтСфАванс.Дата | |УПОРЯДОЧИТЬ ПО | НомерСФА"; Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаРеализации)); Запрос.УстановитьПараметр("Дата", КонецДня(Дата)); ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.НомерСФА = Null Тогда //нет СФ на аванс Максимал = 0; ПрефиксСФА = "1А"; Иначе Поз = СтрНайти(ВыборкаДетальныеЗаписи.НомерСФА, "А" , НаправлениеПоиска.СНачала, 1, 1); Порядковый = Число(Прав(ВыборкаДетальныеЗаписи.НомерСФА, СтрДлина(ВыборкаДетальныеЗаписи.НомерСФА)- Поз)); Если Порядковый > Максимал Тогда Максимал = Порядковый; ДатаСФА = ВыборкаДетальныеЗаписи.ДатаСФА; КонецЕсли; ТекПрефиксСФА = СокрЛП(Лев(ВыборкаДетальныеЗаписи.НомерСФА, Поз)); Если ПрефиксСФА <> ТекПрефиксСФА Тогда ПрефиксСФА = ТекПрефиксСФА; Максимал = Порядковый; ДатаСФА = ВыборкаДетальныеЗаписи.ДатаСФА; КонецЕсли; КонецЕсли; КонецЦикла; НомерСФА = (ПрефиксСФА+Строка(Максимал)); //номер последней СФ на Аванс Если ДатаСФА <= ДатаРеализации Тогда Если НЕ НомерРеализации = "" Тогда //префикс берем из реализации Если НумерацияСчетФактурСтандартCRM Тогда Поз = СтрНайти(НомерРеализации, "/" , НаправлениеПоиска.СНачала, 1, 1); Префикс = Лев(НомерРеализации, Поз-1); Иначе Префикс = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(НомерРеализации, Истина, Ложь); Префикс = СтрЗаменить(Префикс, " ",""); КонецЕсли; //сверяем номер последней реализации и номер последней сфа ПозА = СтрНайти(НомерСФА, "А" , НаправлениеПоиска.СНачала, 1, 1); ПрефиксСФАПроверочный = Лев(НомерСФА, ПозА-1); Если Префикс > ПрефиксСФАПроверочный Тогда Максимал = 0; ПрефиксСФА = Строка(Префикс)+"А"; КонецЕсли; КонецЕсли; КонецЕсли; Максимал = Максимал + 1; НовыйНомерСФА = абтПроверитьСуществованияНомер(ПрефиксСФА, Максимал, Дата); Возврат СокрЛП(НовыйНомерСФА); КонецФункции Функция абтПроверитьСуществованияНомер(ПрефиксСФА, Максимал, ДатаГода) СуществуетСФА = Истина; Пока СуществуетСФА Цикл НомерСФА = ПрефиксСФА+Строка(Максимал); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СчетФактураВыданный.Номер КАК НомерСФ |ИЗ | Документ.СчетФактураВыданный КАК СчетФактураВыданный |ГДЕ | СчетФактураВыданный.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыВыставленного.НаАванс) | И СчетФактураВыданный.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаГода, ГОД) И КОНЕЦПЕРИОДА(&ДатаГода, ГОД) | И СчетФактураВыданный.Номер = &Номер"; Запрос.УстановитьПараметр("Номер", НомерСФА); Запрос.УстановитьПараметр("ДатаГода", ДатаГода); ТаблицаНомеровСФА = Запрос.Выполнить().Выгрузить(); Если ТаблицаНомеровСФА.Количество() = 0 Тогда СуществуетСФА = Ложь; Иначе СуществуетСФА = Истина; Максимал = Максимал + 1; КонецЕсли; КонецЦикла; Возврат НомерСФА; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |