Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
03 июл 2024, 12:36

Форматирование

Автор Shaman_blr, 21 июн 2023, 09:05

0 Пользователей и 1 гость просматривают эту тему.

Shaman_blr

Всем привет подскажите. Помогите с форматированием.
1.Нужно Дату в формате ГГ.ММ.ДД, я сделал так:
ДатаПроизводства = Формат(Дата,"ДФ=yyMMdd"));2.Внутренний номер должен быть из 5 символов, есть номер в 1с 3 символа то добавляем впереди нули, сделал так:
Номер = Формат(ВнутреннийНомер, "ЧЦ=5; ЧВН=; ЧГ=0");
3.Количество, первый символ - это количество знаков после запятой. Заполняется нулями после первого символа.
Пример:1004755 = 475,5 ПОМОГИТЕ ЭТО РЕАЛИЗОВАТЬ!!!)

4. Дата истечения срока годности, в 1с он пишет под каждой номенклатурой 2 года.
Помогите тоже реализовать что к ДатаПроизводства + 2 года и получить дату в формате ГГ.ММ.ДД

Shaman_blr

с 4 пунктам я разобрался!
Помогите с 3 пунктам)

Afinogen

Цитата: Shaman_blr от 21 июн 2023, 09:053.Количество, первый символ - это количество знаков после запятой. Заполняется нулями после первого символа.
Пример:1004755 = 475,5 ПОМОГИТЕ ЭТО РЕАЛИЗОВАТЬ!!!)


1004755 = "100"+Формат(475.5*10, строка формата)

Shaman_blr

Afinogen, число всегда должно быть 7 знаков, если число короткое то добавляются нули. У меня может быть число и без запятой к примеру 1250 то должно получится 0001250, первый 0 потому что нету знаков после запятой, а остальные 2 нуля это для заполнения пробела.
тоже самое может быть число 122,34 должно получится 2012234

Shaman_blr

Afinogen, исходное число это 475,5. Это его надо преобразовать в 1004755. А не наоборот ))) мой косяк не уточнил в условии)

LexaK

Shaman_blr, какой-то сложный вариант получился, может кто проще предложит
лкЧисло = 122.34;           
лкДробь = 0;
Пока Цел(лкЧисло) <> лкЧисло Цикл
лкДробь = лкДробь + 1; 
лкЧисло = лкЧисло * 10;
КонецЦикла;
Рез = "" + лкДробь + Формат(лкЧисло,"ЧЦ=6; ЧВН=; ЧГ=0" );

результат: 2012234

нет проверок: на отрицательное, на больше 6 знаков, на что там еще...
если помогло нажмите: Спасибо!

Afinogen

То есть длина итогового числа всегда 7  знаков?:
я правильно понимаю что 

1 = 0000001
1,1 = 1000011
123 = 0000123
123,347 = 3123347?

Тогда могу предложить парсить строку

Процедура Основная()

   лкЧисло = 122.34;
   Рез = ПреобразоватьЧисло(лкЧисло); //тут у вас будет результат 12234

   //далее

   лкЧислоИсходноеСтрока = Строка(122,34) // получаете стрковое представление
   лкЧислоИсходноеСтрока = СтрЗаменить(лкЧислоИсходноеСтрока ,",",".");

   Массив = СтрРазделить(лкЧислоИсходноеСтрока,".") //у вас будет массив либо из 2-х элементов либо из  одного

   ПервыйСимвол = "0"; //символ с которого  начнется ваше итоговое число;

   //проверяете массив
   Если Массив.Количество() = 2 Тогда //значит число было дробное

     ПервыйСимвол = Строка(СтрДлина(Массив[1]));

   КонецЕсли;

   ЧислоНедостающихНулей = 6-СтрДлина(Рез);

   ИтоговыйНомер = ПервыйСимвол;

   Для Н=1 ПО ЧислоНедостающихНулей Цикл

     ИтоговыйНомер = ИтоговыйНомер+"0";

   КонецЦикла;

   ИтоговыйНомер = ИтоговыйНомер+Рез // вот ваш итог

КонецПроцедуры


Функция ПреобразоватьЧисло(ЧислоИсходное)

  СтрокаПоиска = "0123456789";
 
  ЧислоПреобразованное = "";

  ЧислоСтрока = Строка(ЧислоИсходное);

  Для Н=1 По стрДлина(ЧислоСтрока);

    ТекСимвол = Сред(ЧислоСтрока,Н,1);

    Если СтрНайти(СтрокаПоиска,ТекСимвол)>0 Тогда
       ЧислоПреобразованное  = ЧислоПреобразованное +ТекСимвол;
    КонецЕсли;

  КонецЦикла;

  Возврат ЧислоПреобразованное;

КонецФункции

если не ошибся то должно все работать
 
   

Shaman_blr

Afinogen, СтрНайти и СтрРазделить не работает)))

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск