Имя: Пароль:
1C
1С v8
Отображение даты
,
0 Валидатор
 
26.08.13
13:48
Такой вопрос: есть печатная форма:
http://pikucha.ru/ibZ8t
идут разделения по месяцам, 12 колонок: я - январь, ф - февраль и т.д., и когда закупка попадает в январь 2013 года, к примеру, то в колонку январь попадает год - 2013, и т.д., как это реализовать? для каждой колонки делать параметр, и потом проверять, в зависимости от попадания даты планирования выводить ее в соответствующую колонку? или как?
1 Wobland
 
26.08.13
13:50
чо?
2 Валидатор
 
26.08.13
13:50
(1) картинку открыл?
3 Starhan
 
26.08.13
13:51
(0)>>и когда закупка попадает в январь 2013 года, к примеру, то в колонку январь попадает год - 2013

Что б те всю жись так задачи ставили.
4 Валидатор
 
26.08.13
13:52
в документе, по которому печатается эта форма есть реквизит - Дата Извещения. На картинке видно, что в колонке с названием "я" стоит год 2013, то есть Дата извещения в документе для которого ПФ делается стоит: ДатаИзвещения - 01.01.2013, к примеру
5 Валидатор
 
26.08.13
13:53
начнем от обратного тогда) какйо формат задать, чтобы дата выводилась только годом? без месяца, числа и времени?
6 Starhan
 
26.08.13
13:53
YYYY
7 Wobland
 
26.08.13
13:54
(2) открыл. она вся белая
8 Starhan
 
26.08.13
13:56
(6) Точнее yyyy
9 Валидатор
 
26.08.13
13:58
(7) жаль, там суть в том, чтобы выводить на печатную форму год, в зависимости от месяца
10 Wobland
 
26.08.13
14:01
(9) то есть, в январе 13го - 2013, а в марте 13го - уже 2018?
11 Валидатор
 
26.08.13
14:04
Какое условие поставить для поиска попадает дата в указанный диапазон или нет?

мояДата = 15.01.2013

если МояДата > 01.01.2013 И 31.01.2013 < МояДата Тогда
выполняется условие
КонецЕсли;

так?
12 Wobland
 
26.08.13
14:04
нормальное условие. больше и меньше
13 Wobland
 
26.08.13
14:05
+(12) хотя, вероятно, имеется в виду нестрогое сравнение
14 Валидатор
 
26.08.13
14:05
01.01.2013 < Моя Дата И МояДата < 31.01.2013
во
15 Валидатор
 
26.08.13
14:06
или задать в условии
01.01.2013 < МояДата < 31.01.2013
чтобы Моя дата попадала в этот заданный интервал
16 Wobland
 
26.08.13
14:06
КонецДня не забудь
17 Валидатор
 
26.08.13
14:07
(16) где в этом условии он должен присутствовать?)
18 hhhh
 
26.08.13
14:12
(17) ну не первого января точно. Голову-то включи
19 Валидатор
 
26.08.13
14:12
Если  01.01.2013 < Строка.Параметры.ДатаПланирования < 31.01.2013 Тогда
            
КонецЕсли;
не пропускает такое условие
20 Wobland
 
26.08.13
14:13
(19) литерал даты заипсывается в апострофах
21 Wobland
 
26.08.13
14:13
(20) или то одинарная кавычка?
22 Валидатор
 
26.08.13
14:14
(21) c " вроде пропустило)
23 Валидатор
 
26.08.13
14:16
(18) я понимаю что конец дня в конце месяца, я спрашивал как в коде это указать, не скобками после кавычек же
24 Wobland
 
26.08.13
14:20
(23) можно прям 235959 сделать. но имхо ты городишь какую-то ерунду. не могут в нормальном решении использоваться литералы даты
25 Валидатор
 
26.08.13
14:25
(24) есть утвержденная форма, и вот под нее нужно подогнать Печатную форму. Делаю такое условие:
Если  "01.01.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "31.01.2013" Тогда
            Строка.Параметры.я = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.02.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "28.02.2013" Тогда
            Строка.Параметры.ф = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.03.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "31.03.2013" Тогда
            Строка.Параметры.март = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.04.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "30.04.2013" Тогда
            Строка.Параметры.апр = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.05.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "31.05.2013" Тогда
            Строка.Параметры.май = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.06.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "30.06.2013" Тогда
            Строка.Параметры.июнь = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.07.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "31.07.2013" Тогда
            Строка.Параметры.июль = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.08.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "31.08.2013" Тогда
            Строка.Параметры.авг = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.09.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "30.09.2013" Тогда
            Строка.Параметры.с = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.10.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "31.10.2013" Тогда
            Строка.Параметры.о = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.11.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "30.11.2013" Тогда
            Строка.Параметры.н = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если  "01.12.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "31.12.2013" Тогда
            Строка.Параметры.д = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
но вылетает ошибка, как тогда прописать условие?
26 Starhan
 
26.08.13
14:26
А просто вот так написать

Строка.Параметры.ф = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");


Без всяких если нельзя?
27 Starhan
 
26.08.13
14:27
А...стоп понял. :(
28 Wobland
 
26.08.13
14:27
(25) говорил же: г-код
ставь формат у ячейки и выплюнь это
29 Starhan
 
26.08.13
14:27
Текст ошибки в студию
30 Wobland
 
26.08.13
14:27
(27) переведи на русский, плз
31 Wobland
 
26.08.13
14:28
(29) строку с датой нельзя сравнивать. не знаю, как выглядит, никогда не встречал
32 Starhan
 
26.08.13
14:28
ну у него там буквы

я, ф, м и т.п. это параметры макета что ле.
33 Валидатор
 
26.08.13
14:28
{ВнешняяОбработка.ПФКомплексныйПлан.МодульОбъекта(98)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
        Если  "01.01.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "31.01.2013" Тогда

Потому что строка с датой сравнивается, а как передать дату?
Дата("01.01.2013); так?
34 Валидатор
 
26.08.13
14:28
(32) да
35 Starhan
 
26.08.13
14:30
(31)ааа...
(25)Дату напиши '20130101' и '20130131235959'
36 Wobland
 
26.08.13
14:30
(32) до меня всё равно не доходит необходимость (25)
37 Starhan
 
26.08.13
14:31
(36) та какая разница :)
Пускай пройдет грабленый путь.
38 Валидатор
 
26.08.13
14:31
(36) заказчик говорит им форму гос-во утвердило, и надо в 1ски ее заиметь)
39 Валидатор
 
26.08.13
14:32
(35) сейчас попробую
40 Wobland
 
26.08.13
14:32
(38) формат непосредственно у ячейки тебя не спасёт?
41 Starhan
 
26.08.13
14:33
Хотя, я вот ща немного задумался над кодом в (25)

там можно вместо

Строка.Параметры.н = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");

написать

Строка.Параметры.н = 2013

ничего не измениться XD
42 Валидатор
 
26.08.13
14:34
(41), да только когда будет 2014 год, там все равно останется 2013)
43 Wobland
 
26.08.13
14:34
(42) после НГ собираешься переписывать код формирования ПФ?
44 Starhan
 
26.08.13
14:34
(40) спасет...
45 Wobland
 
26.08.13
14:34
вообще, ставлю на то, что нужна одна область с соответственно одним параметром
46 Starhan
 
26.08.13
14:35
(42) не будет у тебя 2014 года потомучто не попадет по условию

Если  "01.11.2013" < ВыборкаДетальныеЗаписи.ДатаПланирования < "30.11.2013" Тогда
47 Валидатор
 
26.08.13
14:35
(40) я там не нашел просто уууу )
48 Валидатор
 
26.08.13
14:35
(46) а точно, блин, а когда тогда делать униврсально для каждого года?
49 Wobland
 
26.08.13
14:35
(47) не стесняйся, напиши руками
50 Операция 1Ы
 
26.08.13
14:38
(25) уууууу, быдлокодер, а в следующем году что будешь делать?
51 Starhan
 
26.08.13
14:39
(48)XD
Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
...
52 Валидатор
 
26.08.13
14:42
(51) и для каждой области получается это условие?
53 Starhan
 
26.08.13
14:45
Трудно сказать не зная всех подробностей.
54 Валидатор
 
26.08.13
14:48
(53) Если ДатаПланирования - 01.02.2013 - то в колонку, где буква "Ф", то есть февраль, попадет просто число 2013, и т.д.
55 Starhan
 
26.08.13
14:49
(54) Я про другое. В твоем случае так должно прокатить.
А можно было бы и более оптимально отчет сделать.
56 Валидатор
 
26.08.13
14:51
(55) делаю так:
Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.я = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;
        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.ф = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.март = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.апр = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.май = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.июнь = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.июль = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.авг = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.с = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.о = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.н = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 Тогда
            Строка.Параметры.д = формат(ВыборкаДетальныеЗаписи.ДатаПланирования,"ДФ=yyyy");    
        КонецЕсли;

но в итоге на макет не выводятся года(
57 Starhan
 
26.08.13
14:52
(56) месяцев 12 XD
58 Валидатор
 
26.08.13
14:54
(57) даже если так, то везде бы был тогда год 2013, а данных никаких не вывелось(
59 Starhan
 
26.08.13
14:55
(58)О_о, брось ты 1С, не твое оно.
60 Валидатор
 
26.08.13
15:03
(59) странно, еще раз запустил, появились данные, только теперь еще один вопрос, дата может быть 01.01.0001, вот как ее тогда обозначить, чтобы она не учитывалась? добавить условие после Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1:
Месяц(ВыборкаДетальныеЗаписи.ДатаПланирования)= 1 И НЕ '0101001' Тогда
так7
61 Валидатор
 
26.08.13
15:04
и сразу финальный вопрос: как сделать авторазмер колонки? не строки, а именно колонки, чтобы число туда помещалось само растягивая колонку?
62 Операция 1Ы
 
26.08.13
15:11
функция УстановитьФорматДаты(Дата, Строка, ДатаПланирования)
    Если Месяц(Дата) = 1 Тогда
        Строка.Параметры.я = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 2 Тогда
        Строка.Параметры.ф = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 3 Тогда
        Строка.Параметры.март = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 4 Тогда
        Строка.Параметры.апр = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 5 Тогда
        Строка.Параметры.май = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 6 Тогда
        Строка.Параметры.июнь = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 7 Тогда
        Строка.Параметры.июль = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 8 Тогда
        Строка.Параметры.авг = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 9 Тогда
        Строка.Параметры.с = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 10 Тогда
        Строка.Параметры.о = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 11 Тогда
        Строка.Параметры.н = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Если Месяц(Дата) = 12 Тогда
        Строка.Параметры.д = формат(ДатаПланирования,"ДФ=yyyy");    
    КонецЕсли;
    
    Возврат Строка;
    
КонецФункции

держи, бедолага...
63 Операция 1Ы
 
26.08.13
15:14
(59) пусть куячит xD
64 Валидатор
 
26.08.13
15:26
вернемся к авторазмеру колонок) функция выше тут не поможет)
65 Валидатор
 
26.08.13
15:27
не вернемся к этому вопросу никогда больше)
66 Валидатор
 
26.08.13
15:27
разобрался)
67 Валидатор
 
26.08.13
15:27
спс
68 Валидатор
 
27.08.13
13:27
сегодня возникла новая загвоздка, при коде:
Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 1  И  НЕ ВыборкаДетальныеЗаписи.ДатаИзвещения = '00010101'Тогда
            Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ДатаИзвещения)  И НЕ ВыборкаДетальныеЗаписи.ДатаИзвещения = '00010101' Тогда
                Строка.Параметры.январь = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy");
            Иначе
                Строка.Параметры.январь = " ";
            КонецЕсли;
        КонецЕсли;
        
        Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 2 Тогда
            Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ДатаИзвещения)  И НЕ ВыборкаДетальныеЗаписи.ДатаИзвещения = '00010101' Тогда
            Строка.Параметры.февраль = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy");
            Иначе
                Строка.Параметры.февраль = " ";
            КонецЕсли;
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 3 Тогда
            Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ДатаИзвещения)  И НЕ ВыборкаДетальныеЗаписи.ДатаИзвещения = '00010101' Тогда
            Строка.Параметры.мартИсп = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy");
            Иначе
                Строка.Параметры.мартИсп = " ";
            КонецЕсли;
        КонецЕсли;

        Если Месяц(ВыборкаДетальныеЗаписи.ДатаИзвещения)= 4 Тогда
            Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ДатаИзвещения)  И НЕ ВыборкаДетальныеЗаписи.ДатаИзвещения = '00010101' Тогда
            Строка.Параметры.апрИсп = формат(ВыборкаДетальныеЗаписи.ДатаИзвещения,"ДФ=yyyy");
            Иначе
                Строка.Параметры.апрИсп = " ";
            КонецЕсли;
        КонецЕсли;
происходит дублирование предыдущих позиций, то есть если у меня в январь попадает 2013 (так как в документе дата извещения у этой номенклатуры 01.01.13), то в следующей позиции в документе у номенклатуры, например февраль дата извещения, и на печатную форму выведется данные и в январь, и в февраль, а если даты извещения нет вообще в документе, то все равно выводится та дата, которая в табличной части в колонки извещение первой стоит
69 Валидатор
 
27.08.13
13:27
как избавиться от этого дублирования дат?
70 Валидатор
 
27.08.13
13:35
тут скорее вопрос где выводить, если после цикла, то не все строки выводятся
71 Валидатор
 
27.08.13
13:45
Есть какой-нибудь метод для очистки данных  параметров на макете?
72 Валидатор
 
27.08.13
13:53
Потому что в параметр сначала видимо пишется дата первой строки, и сохраняется, потом для второй строки берется опять таки эта первая дата, и добавляется вторая, а так не совсем правильно(