|
Как вывести день недели прописью | ☑ | ||
---|---|---|---|---|
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))]; Но у нас в конфигурации день недели должен также попасть в регистр сведений закрепление за клиентом.Добавит ли этот код день недели в регистр? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |