По теме из базы знаний
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Последовательное проведение документов по НДФЛ (при подготовке сведений для формы 6-НДФЛ)
- Простой способ убрать префикс и лидирующие нули из номера.
- Представление в запросе табличной части документа одним строковым полем
- Акт сверки со счетами-фактурами для документа Сверка взаиморасчетов. УТ 11.4 и КА 2.4
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если в конфигурации нет типовой функции ПолучитьНомерНаПечать, то ее нужно сделать по типу например Бухгалтерии (ниже ее текст). Нельзя просто преобразовать Строка-Число-Строка, в номере могут содержаться и буквы, кроме того нужно отрезать Префикс документа. Проще скопировать типовую функцию и в отладчике проверить как она работает в не типовой.
Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено) Экспорт
Если Документ = Неопределено Тогда
Возврат 0;
КонецЕсли;
Номер = СокрЛП(Документ.Номер);
// {ОбменДаннымиБСП
// Если номер документа по стандарту БСП 8.2, сформируем номер через стандартную процедуру БСП.
Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Истина Тогда
Если Сред(Номер, 5, 1) = "-" Тогда
Номер = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Номер,
Ложь, // УдалитьПрефиксИнформационнойБазы
Истина // УдалитьПользовательскийПрефикс
);
Возврат Номер;
КонецЕсли;
КонецЕсли;
// }ОбменДаннымиБСП
СсылкаНаДокумент = Неопределено;
Префикс = "";
Попытка
Если ТипЗнч(Документ) = Тип("Структура") Тогда
СсылкаНаДокумент = Документ.СсылкаСФАванс;
ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.СчетФактураВыданный")
Или ТипЗнч(Документ) = Тип("ДокументОбъект.СчетФактураВыданный") Тогда
Если Документ.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс Тогда
СсылкаНаДокумент = Документ;
КонецЕсли;
ИначеЕсли ТипЗнч(Документ) = Тип("ВыборкаИзРезультатаЗапроса") Тогда
Если Документ.СчетФактура.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс Тогда
СсылкаНаДокумент = Документ;
КонецЕсли;
КонецЕсли;
Исключение
КонецПопытки;
Если МассивПрефиксов = Неопределено Тогда
Организация = Неопределено;
ПодразделениеОрганизации = Неопределено;
Если ТипЗнч(Документ) = Тип("ВыборкаИзРезультатаЗапроса")
ИЛИ ТипЗнч(Документ) = Тип("Структура") Тогда
Организация = Документ.Организация;
Иначе
МетаданныеДокумента = Документ.Метаданные();
Если ЕстьРеквизитДокумента("Организация", МетаданныеДокумента) Тогда
Организация = Документ.Организация;
КонецЕсли;
КонецЕсли;
МассивПрефиксовДляОбхода = СформироватьМассивПрефиксовДляРИБИОрганизации(Организация);
Иначе
МассивПрефиксовДляОбхода = МассивПрефиксов;
КонецЕсли;
ВыкинутПрефиксСФНаАванс = Ложь;
ОтдельнаяНумерацияСФНаАванс = Константы.ОтдельнаяНумерацияСчетовФактурНаАванс.Получить();
Если ОтдельнаяНумерацияСФНаАванс
И СсылкаНаДокумент <> Неопределено
И Сред(Номер, 1, 1) = "А" Тогда
ВыкинутПрефиксСФНаАванс = Истина;
Номер = Сред(Номер, 2);
Если Сред(Номер, 1, 1) = "-" Тогда
Номер = Сред(Номер, 2);
КонецЕсли;
КонецЕсли;
Для Каждого ТекущийПрефикс ИЗ МассивПрефиксовДляОбхода Цикл
ТекущийНомер = Найти(Номер, ТекущийПрефикс);
Если ТекущийНомер = 1 Тогда
Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
КонецЕсли;
// удаление префикса из номера документа
//Если Найти(Номер, ТекущийПрефикс)=1 Тогда
// Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
//КонецЕсли;
// так же, может остаться "минус" впереди
Если Лев(Номер, 1) = "-" Тогда
Номер = Сред(Номер, 2);
КонецЕсли;
// удаление ведущих нулей
Пока Лев(Номер, 1)="0" Цикл
Номер = Сред(Номер, 2);
КонецЦикла;
КонецЦикла;
Если ВыкинутПрефиксСФНаАванс Тогда
Номер = "А" + Номер;
КонецЕсли;
Возврат Номер;
КонецФункции // ПолучитьНомерНаПечать()
Показать
(5) Dmitr033, само собой типовую процедуру использовать всегда корректнее. Если конфигурация не типовая - можно скопировать код из типовой конфигурации (со всеми процедурами, вызывающимися из нее), все зависит от конкретного случая. Если номер документа всегда числовой, то проще сделать строка-число-строка :)
Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено) Экспорт
.....
Обалдеть! Автору нужно всего лишь отсечь ведущие нули. А назначение этой функции в чем-то другом.
Может чуть по-проще:
//----------------------------------------------------------
// Преобразовать в число
Функция Число_(П_Элемент) Экспорт
Попытка
Возврат Число(П_Элемент);
Исключение
Возврат 0;
КонецПопытки;
КонецФункции // Число_
Если задача убрать именно нули спереди, тогда циклом вырезАть первый символ.
Если в номере могут содержаться буквы, тогда сложнее.
.....
Обалдеть! Автору нужно всего лишь отсечь ведущие нули. А назначение этой функции в чем-то другом.
Может чуть по-проще:
//----------------------------------------------------------
// Преобразовать в число
Функция Число_(П_Элемент) Экспорт
Попытка
Возврат Число(П_Элемент);
Исключение
Возврат 0;
КонецПопытки;
КонецФункции // Число_
Если задача убрать именно нули спереди, тогда циклом вырезАть первый символ.
Если в номере могут содержаться буквы, тогда сложнее.
(11) Dnki, да не преувеличивайте уж. Бывают разные ситуации, номер документов может не только из цифр состоять, но и из префиксов, из букв, указанных пользователем вручную. Та функция соответственно убирает лидирующие нули и префиксы. Но, если априори известно, что нумерация числовая, конечно проще использовать более простую функцию. Все зависит от ситуации. Если конфигурация типовая, лучше использовать и типовое решение.
На данный момент есть такая фун-ция :
// Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули.
// Функция:
// отбрасывает префикс организации,
// отбрасывает префикс информационной базы (опционально),
// отбрасывает пользовательские префиксы (опционально),
// удаляет лидирующие нули в номере объекта.
Функция ПолучитьНомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь) Экспорт
// {Обработчик: ПриПолученииНомераНаПечать} Начало
СтандартнаяОбработка = Истина;
ПрефиксацияОбъектовКлиентСерверПереопределяемый.ПриПолученииНомераНаПечать(НомерОбъекта, СтандартнаяОбработка, Ложь, Ложь);
Если СтандартнаяОбработка = Ложь Тогда
Возврат НомерОбъекта;
КонецЕсли;
// {Обработчик: ПриПолученииНомераНаПечать} Окончание
// Удаляем пользовательские префиксы из номера объекта.
Если УдалитьПользовательскийПрефикс Тогда
НомерОбъекта = УдалитьПользовательскиеПрефиксыИзНомераОбъекта(НомерОбъекта);
КонецЕсли;
// Удаляем лидирующие нули из номера объекта.
НомерОбъекта = ПрефиксацияОбъектовКлиентСервер.УдалитьЛидирующиеНулиИзНомераОбъекта(НомерОбъекта);
// Удаляем префикс организации и префикс информационной базы из номера объекта.
НомерОбъекта = ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Истина, УдалитьПрефиксИнформационнойБазы);
Возврат НомерОбъекта;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот