8.х Краткая дата и краткий номер документа

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем MyNameNoName, 17 окт 2013.

  1. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    В 1С при выводе в печатную форму используется полная дата. Как вывести дату в формате ДД.ММ.ГГГГ?
    И как при выводе номера документа вывести не 00000000012 а 11?
    Спасибо.
  2. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    1) используй формат(твоядата,"ДФ=dd.MM.yyyy")
    2)используй Число(ТвойНомер)
  3. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    По поводу даты все просто - Формат (Дата,"ДФ=dd.MM.yyyy").
    а по поводу номера, либо сами напишите процедурку, которая убирает лидирующие нули или в типовых конфах есть функция которая это делает, сейчас поищу
  4. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а вы так удачно описались или номер еще и преобразовать надо помимо того, что отрезать лидирующие нули? Про них кстати много на форуме велось разговоров
  5. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    очепятка
  6. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    может, но я на всякий спросила

    2ТС посотрите _http://www.1c-pro.ru/topic52183.html/page__p__285881__hl__+лидирующие%20+нули__fromsearch__1#entry285881
  7. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    ну пятнЫца скоро :)
  8. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Спасибо, забыл про Формат. Постараюсь больше не забывать.
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Вот нашел в УПП по кране мере есть в общем модуле функция

    ПолучитьНомерНаПечать(Ссылка на документ)



    Код:
    Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено) Экспорт
    Если Документ = Неопределено Тогда
    Возврат 0;
    КонецЕсли;
    Номер   = СокрЛП(Документ.Номер);
    Префикс = "";
    Если МассивПрефиксов = Неопределено Тогда
    
    Организация = Неопределено;
    
    Если ТипЗнч(Документ) = Тип("ВыборкаИзРезультатаЗапроса")
    ИЛИ ТипЗнч(Документ) = Тип("Структура") Тогда
    Организация = Документ.Организация;
    
    Иначе
    МетаданныеДокумента = Документ.Метаданные();
    Если МетаданныеДокумента.Реквизиты.Найти("Организация") <> Неопределено Тогда
    Организация = Документ.Организация;
    КонецЕсли;
    КонецЕсли;
    
    МассивПрефиксовДляОбхода = СформироватьМассивПрефиксовДляРИБИОрганизации(Организация)
    
    Иначе
    
    МассивПрефиксовДляОбхода = МассивПрефиксов;
    
    КонецЕсли;
    
    Для Каждого ТекущийПрефикс ИЗ МассивПрефиксовДляОбхода Цикл
    
    // удаление префикса из номера документа
    Если Найти(Номер, ТекущийПрефикс)=1 Тогда
    Номер = Сред(Номер, СтрДлина(ТекущийПрефикс)+1);
    КонецЕсли;
    
    // так же, может остаться "минус" впереди
    Если Лев(Номер, 1) = "-" Тогда
    Номер = Сред(Номер, 2);
    КонецЕсли;
    
    // удаление ведущих нулей
    Пока Лев(Номер, 1)="0" Цикл
    Номер = Сред(Номер, 2);
    КонецЦикла;
    КонецЦикла;
    Возврат Номер;
    КонецФункции // ПолучитьНомерНаПечать()
    
  10. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Число тоже помогло!

    По совету из этой темы помогло:
    Код:
    Номер = Число(СсылкаНаОбъект.Номер);
    
    Просто и красиво)))
  11. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    НУ это если у Вас префикса нет :). А если перфиксы есть, тогда не прохляет.
  12. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    тогда циклом с обрезкой по одному левому символу (пока не прокатит ))))
  13. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну кому надо будет выше берите уже готовую функцию, для своих конфигураций - в типовых она есть, можете ей пользоваться.
  14. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    НомерОбрезки="ло0000001";
    НайденоЧисло=0;
    Пока СтрДлина(НомерОбрезки)>0 Цикл
    Попытка
    НайденоЧисло=Число(НомерОбрезки);
    Прервать;
    Исключение
    КонецПопытки;
    НомерОбрезки=Сред(НомерОбрезки,2);
    Конеццикла;

    более компактно:)))
  15. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    А если у Вас в базе две и более организации с разными по длине префиксами
  16. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    а разница ?

    подставь в мой кусок кода любую последовтельность буковок, чтоб в конце были циферки
  17. Aston
    Offline

    Aston Опытный в 1С

    Регистрация:
    6 июн 2012
    Сообщения:
    467
    Симпатии:
    3
    Баллы:
    29
    Я этот вопрос решал так
    Код:
    Функция ПолучитьЧислаВСтроке(Строка) Экспорт //Функция выделяет число из строки
    
    СтрокаЧисел = "";
    Для Индекс = 1 По СтрДлина(Строка) Цикл
    
    Символ = Сред(Строка, Индекс, 1); // Перебираем все сиволы из нашей строки
    Если КодСимвола(Символ) >= 48 И КодСимвола(Символ) <= 57 Тогда // Код нуля - 48, код 9-ки - 57
    СтрокаЧисел = СтрокаЧисел + Символ;	 
    КонецЕсли;
    
    КонецЦикла;
    Возврат Число(СтрокаЧисел);
    КонецФункции
    
  18. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    А если в префиксе есть циферка ?
    Напрмер А1А000100. приведенный код выдаст 1000100...
  19. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    У вас строчка
    НомерОбрезки=Сред(НомерОбрезки,2);

    Обрезает два символа, как я сказал что если в базе есть три фирмы с разнывми префиксами по длине
    Вот четыре номера
    А000000001
    А100000001
    АВ00000001
    ААА0000001

    НомерОбрезки=Сред(НомерОбрезки,2);
    для второго и четвертого даст неверный номер. Вам надо сделать так
    НомерОбрезки=Сред(НомерОбрезки,стрДлина(Организация.Префикс));
  20. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Доброго всем,
    можно честно отпарсить строку, например :
    Код:
    Функция ОбрезкаСимволовВНомере(СтрокаНомера)
    ЧислаВСтроке = "0123456789";
    
    ПозицияКурсора = СтрДлина(СтрокаНомера);
    // Парсим строку на предмет символов
    Пока Найти(ЧислаВСтроке, Сред(СтрокаНомера,ПозицияКурсора,1)) > 0 И ПозицияКурсора > 0 Цикл
    ПозицияКурсора = ПозицияКурсора - 1;
    КонецЦикла;
    
    Попытка
    ИскомоеЧисло = Число(Сред(СтрокаНомера,ПозицияКурсора));
    Исключение
    ИскомоеЧисло = Неопределено;
    Сообщить("Не удалось преобразовать !", СтатусСообщения.Важное);
    КонецПопытки;
    
    Возврат ИскомоеЧисло;
    КонецФункции
    
    IMHO
    + Нет необходимости в цикле повторять "попытку"

Поделиться этой страницей