|   |   | 
| 
 | Как вывести день недели прописью | ☑ | ||
|---|---|---|---|---|
| 0
    
        amadeus2010 14.05.12✎ 09:11 | 
        Доброе утро помогите разобраться с функцией вывода дня недели прописью.
  Загружаю из ексель в 1с документ файл.В нем день недели указан цифрой,а мне надо получить в документе 1с день недели прописью.Вот строка кода Строка.ДеньПосещения =Формат(СокрЛП(Лист.Cells(ПоСтрокам,4).Value),"ДФ=ддд"); Пытался использовать функцию формат(ТекущаяДата(),"ДФ=ддд").Трассировка показала что эта функция не сработала и день недели остался числом. | |||
| 1
    
        mikecool 14.05.12✎ 09:14 | 
        насколько помню - нет в 8.2 такого, отменили     | |||
| 2
    
        amadeus2010 14.05.12✎ 09:16 | 
        у меня 8.1 УПП 1.2     | |||
| 3
    
        Wobland 14.05.12✎ 09:16 | 
        Сообщить(формат(ТекущаяДата(),"ДФ=ддд"))
  Пн что я не так делаю? | |||
| 4
    
        andrewks 14.05.12✎ 09:16 | 
        нпихрена не понял. у тебя на входе что - строка, дата, число, или что?     | |||
| 5
    
        Maxus43 14.05.12✎ 09:17 | 
        СокрЛП(Лист.Cells(ПоСтрокам,4).Value) - дак это не дата по факту, вот и всё. строка     | |||
| 6
    
        aleks-id 14.05.12✎ 09:17 | 
        да число у него на входе. и надо функцию типа ДеньНеделиПрописью(1) которая вернет Понедельник     | |||
| 7
    
        amadeus2010 14.05.12✎ 09:18 | 
        у меня строка ексель содержащая номер дня недели строка и получить я должен строку     | |||
| 8
    
        Zhuri 14.05.12✎ 09:19 | 
        за 10 минут что здесь спрашиваеш 8 строк кода условия бы уже раза 4 накрапал...     | |||
| 9
    
        mikecool 14.05.12✎ 09:20 | 
        а блин, работает
  Формат(ТекущаяДата(), "ДФ=дддд") | |||
| 10
    
        aleks-id 14.05.12✎ 09:21 | 
        Функция ДеньНеделиПрописью(ДН)
  ДниНедели = Новый Массив; ДниНедели.Добавить("пн"); ДниНедели.Добавить("вт"); ДниНедели.Добавить("ср"); ДниНедели.Добавить("чт"); ДниНедели.Добавить("пт"); ДниНедели.Добавить("сб"); ДниНедели.Добавить("вс"); Возврат ДниНедели[ДН-1]; КонецФункции | |||
| 11
    
        Maxus43 14.05.12✎ 09:23 | 
        (10) 28 апреля в високосный год - какой день?)     | |||
| 12
    
        Maxus43 14.05.12✎ 09:24 | 
        а, задача то простая, день недели указывается. неинтересно     | |||
| 13
    
        aleks-id 14.05.12✎ 09:24 | 
        (11) не тупи. там цифры от 1 до 7     | |||
| 14
    
        andrewks 14.05.12✎ 09:25 | 
        (10)читер!     | |||
| 15
    
        andrewks 14.05.12✎ 09:25 | 
        (8) за 2 мин     | |||
| 16
    
        vmv 14.05.12✎ 09:25 | 
        (0) я так полагаю это документ "Рейсы", я уже обрадовался думал не будет в понедельник амадеуса и проблем с рейсами)     | |||
| 17
    
        Xapac 14.05.12✎ 09:26 | 
        (10)+100500 пока читал ветку, не понял ПРОБЛЕМ автора     | |||
| 18
    
        qeos 14.05.12✎ 09:26 | 
        представлениеПериода     | |||
| 19
    
        vmv 14.05.12✎ 09:27 | 
        (17) это уже как утренний коффе - у него всегда одна и таже проблема, просто условное оформление разное     | |||
| 20
    
        amadeus2010 14.05.12✎ 09:31 | 
        потому что задачи разные     | |||
| 21
    
        amadeus2010 14.05.12✎ 09:38 | 
        большое спасибо (10) добавил вашу функцию в строку кода
  Строка.ДеньПосещения =ДеньНеделиПрописью(СокрЛП(Лист.Cells(ПоСтрокам,4).Value)); заработало | |||
| 22
    
        vmv 14.05.12✎ 10:12 | 
        уточняем задачу и избавляемся от г-кода
  Исходная: у господина амадеуса есть порядковые дни недели в эксель, т.е. 1 день - понедельник ... 7 день - воскресенье Необходимо: по порядковому номеру дня недели выводить его символьное представление "понедельник"..."воскресенье " решение: находим недельный период дат в которых неделя начинается с 1-го числа, например май 2006 начинался с понедельника, т.е. 1 мая 2006 понедельник ... 7 мая 2006 воскресение Собственно код для господина амадеуса без г-технологий //ПорядковыйНомерДняНедели = СокрЛП(Лист.Cells(ПоСтрокам,4).Value; ПорядковыйНомерДняНедели = 1; Строка.ДеньПосещения = Формат(Дата(2006, 5, ПорядковыйНомерДняНедели), "ДФ="" дддд """); // "понедельник" Строка.ДеньПосещения = Формат(Дата(2006, 5, ПорядковыйНомерДняНедели), "ДФ="" ддд """); // "Пн" во сути код в одну строку уложить можно | |||
| 23
    
        Serg_1960 14.05.12✎ 10:13 | 
        (так, просто, ради прикола)
  Сообщить(Формат(Дата("13.05.2012 10:12:23") + СокрЛП(Лист.Cells(ПоСтрокам,4).Value),"ДФ=дддд")); | |||
| 24
    
        Serg_1960 14.05.12✎ 10:40 | 
        (23) Что-то как-то никакой реакции на г-код :( А если так :)
  Сообщить(ТРег(Формат(Дата(СокрЛП(Лист.Cells(ПоСтрокам,4).Value) + ".10.2012 00:00:00"),"ДФ=дддд"))); | |||
| 25
    
        amadeus2010 14.05.12✎ 12:01 | 
        согласен что мой код не катит, поэтому  и спрашивал знатоков 1С как вывести день недели прописью     | |||
| 26
    
        aleks-id 14.05.12✎ 12:06 | 
        (22) думаешь вызывать 2 функции оптимальнее моего копрокода?     | |||
| 27
    
        Reset 14.05.12✎ 12:13 | 
        Вариант
  Сред("пнвтсрчтптсбвс",НомерДняНедели-1,2) | |||
| 28
    
        Reset 14.05.12✎ 12:13 | 
        пардон 
  Сред("пнвтсрчтптсбвс",(НомерДняНедели-1)*2,2) | |||
| 29
    
        amadeus2010 14.05.12✎ 12:14 | 
        В принципе я использовал код (10), а потом вызвал эту функцию в этой части кода
  Строка.ДеньПосещения =Перечисления.ДниПосещения[ДеньНеделиПрописью(СокрЛП(Лист.Cells(ПоСтрокам,4).Value))]; Вывел дни недели так как они идут в ексель файле | |||
| 30
    
        vmv 14.05.12✎ 12:16 | 
        (26) во-первых, можно использовать только Формат() без Дата() см. (24)
  я привел пример с Дата() для наглядности, чтобы прочно осела мысль, что нам нужна дата, которая начинается с понедельника(1) и потом ее в (24) во-вторых, зачем писать функцию, если все есть в Формат для этой задачи. сомневаюсь, что она будет быстрее формат, но г добавит точно, при всем уважении | |||
| 31
    
        Reset 14.05.12✎ 12:20 | 
        (28) Опять, простите, поторопился.
  Два финальных варианта на выбор: 
  | |||
| 32
    
        Reset 14.05.12✎ 12:21 | 
        или даже
  Сред("*пнвтсрчтптсбвс",НомерДняНедели*2,2) | |||
| 33
    
        amadeus2010 14.05.12✎ 12:23 | 
        (30) т.е предлагаете использовать такой вариант
  Сообщить(ТРег(Формат(СокрЛП(Лист.Cells(ПоСтрокам,4).Value),"ДФ=дддд""""")); | |||
| 34
    
        vmv 14.05.12✎ 12:24 | 
        (31) по крайней мере это избавляет от создания массива и сокращает код до строчки, правда вычисление представления из строки будет с той же скростью, что по индексу массива, т.к.
  в обоих случаях это указатель на строку символов, согласно с++ на котором пашет платформа | |||
| 35
    
        Reset 14.05.12✎ 12:25 | 
        (34) Да, в том варианте мне не нравится постоянное пересоздание массива.     | |||
| 36
    
        aleks-id 14.05.12✎ 12:30 | 
        согласен, криво сделал. создание массива нужно вынести из функции.
  но мой код быстрее формата. на 100к итерациях 0.633138 против 0.872828 | |||
| 37
    
        aleks-id 14.05.12✎ 12:32 | 
        вариант (32) самый быстрый. 0.365601     | |||
| 38
    
        vmv 14.05.12✎ 12:36 | 
        (37) быстрее потому что указатель на строку создается без создания переменной массива     | |||
| 39
    
        aleks-id 14.05.12✎ 12:37 | 
        вот только если понадобится выводить день недели полностью то будет облом.
  мнстр = "пн |вт |ср |чт |пт |сб |вс"; ДеньПосещения = СтрПолучитьСтроку(мнстр,ПорядковыйНомерДняНедели); 0.27 | |||
| 40
    
        vmv 14.05.12✎ 12:38 | 
        (39) не-а, взять максимальное представление и в более коротких в конце добить пробелы, затем тот же принцип     | |||
| 41
    
        aleks-id 14.05.12✎ 12:39 | 
        (40) мой последний код лишен этих недостатков ;)     | |||
| 42
    
        vmv 14.05.12✎ 12:43 | 
        (41) СтрПолучитьСтроку() я открыл для себя этот метод, он был всегда?
  хоть какая-то польза от господина амадеуса) | |||
| 43
    
        aleks-id 14.05.12✎ 12:47 | 
        (42) вроде давно уже 1с с многострочкой работает.     | |||
| 44
    
        Zhuri 14.05.12✎ 12:57 | 
        Линейку всем выдали?     | |||
| 45
    
        amadeus2010 14.05.12✎ 13:51 | 
        небольшое уточнение я преобразую день недели из числа в строку используя этот код
  Строка.ДеньПосещения =Перечисления.ДниПосещения[ДеньНеделиПрописью(СокрЛП(Лист.Cells(ПоСтрокам,4).Value))]; Но у нас в конфигурации день недели должен также попасть в регистр сведений закрепление за клиентом.Добавит ли этот код день недели в регистр? | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |