Имя: Пароль:
1C
1С v8
Разделение На Года
Ø (Fish 17.01.2014 11:47)
,
0 Hennessy
 
15.01.14
15:57
Сделал так, только вот теперь нужно отделить года друг от друга, Дополнительно выводить сообщения "Сообщить()" с определенным годом, количеством дней в нем и количеством рабочих дней в нем! Желательно так же отследить Высокосный год, чтобы небыло ошибок с датами.


Процедура Дополнительно(Команда)
    
     ДатаНач = Дата(2014, 01, 01, 0, 0, 0);
     ДатаКон = Дата(2024, 12, 30, 23, 59, 59);    
     Счетчик = 1;
     Счетчик2 = 1;
     Счетчик3 = 1;
    
     Пока ДатаНач<=ДатаКон Цикл    
        
         ДатаНач = ДатаНач+86400;
         ДН = ДеньНедели(ДатаНач);
         ДГ = ДеньГода(ДатаНач);
        
        
         Если ДГ = 1 или ДГ = 54 или ДГ = 67 Тогда
             Счетчик3 = Счетчик3+1;
         КонецЕсли;
        
         Если ДН=1 или ДН=2 или ДН=3 или ДН=4 или ДН=5 Тогда                          
             Счетчик2 = Счетчик2+1;
         КонецЕсли;
        
         Счетчик = Счетчик+1;
        
         Если ДН = 6 или ДН = 7  Тогда        
         Иначе
             //Сообщить(ДН);
             //Сообщить(ДатаНач);
             //Сообщить(ДГ);
         КонецЕсли;    
     КонецЦикла;
    
    
     ИтоговоеЗначениеВсехЛет=Счетчик2-Счетчик3;
    
     Сообщить("ИТОГ, ВСЕГО ДНЕЙ с 2014 по 2024:"+" "+ Счетчик);
     Сообщить("ИТОГ РАБОЧИХ ДНЕЙ С УЧЕТОМ ВЫХОДНЫХ:"+" "+Счетчик2);
     Сообщить("ИТОГ РАБОЧИХ ДНЕЙ С УЧЕТОМ ВЫХОДНЫХ И ПРАЗДНИКОВ:"+" "+ИтоговоеЗначениеВсехЛет);
     ПоказатьОповещениеПользователя("ОПОВЕЩЕНИЕ...", ,"ГОТОВО");
    
КонецПроцедуры
1 zak555
 
15.01.14
15:58
какая задача ?
2 supremum
 
15.01.14
15:59
(1) Походу все та же.
3 Адский плющ
 
15.01.14
15:59
Это чо за упражнения в г-кодинге?
4 Hennessy
 
15.01.14
16:00
(1) Есть Цикл в котором промежуток между 2014г и 2024, необходимо определить "Рабочие дни". Так же определить их не конкретно в этот промежуток, а по отдельности, рабочие дни 2014г., 2015, 2016, 2017 и т.д.
5 Maxus43
 
15.01.14
16:00
автор, хватит пить свой ник, почитай книги сначала... а то онлайн учебник тут реально открыл
6 Адский плющ
 
15.01.14
16:00
"ДГ = 54 или ДГ = 67"
23 февраля и 8 марта. Пятнично.
7 Hennessy
 
15.01.14
16:05
Раз уж на то пошло, вот само задание:

Создайте внешнюю обработку «Вычисление рабочих дней». Данная обработка должна
вычислять количество рабочих дней в году, исходя из следующих условий:
- нерабочими днями считаются субботы и воскресенья;
- праздниками являются 1 января, 23 февраля и 8 марта;
- если праздничный день попадает на субботу или воскресенье, то он не переносится.
Обеспечьте, чтобы обработка выдала данные о количестве рабочих дней за следующие 10
лет. Выводить информацию нужно в следующем формате: год – количество рабочих дней. Для
вывода информации используйте функцию «Сообщить()».
Например:
2010 год – 258 рабочих дней
2011 год – 258 рабочих дней
2012 год – 259 рабочих дней
2013 год – 259 рабочих дней
2014 год – 260 рабочих дней
2015 год – 259 рабочих дней
8 Wobland
 
15.01.14
16:05
понарасплодил тем..
(0) вперёд!
>Если ДГ = 1 или ДГ = 54 или ДГ = 67 Тогда
это для обычного или високосного?
9 Hennessy
 
15.01.14
16:06
(8) Для обычного
10 Wobland
 
15.01.14
16:07
(9) в високосные года у тебя другие праздники?
11 Адский плющ
 
15.01.14
16:08
Чтобы узнать сколько суббот и воскресений в году достаточно знать какой день недели 1 января ну и год високосный/нет. А цикл по дням - это пц.
12 Aprobator
 
15.01.14
16:08
(0) Неверно построенный алгоритм. Попадет праздник на субботу или воскресенье и все равно вычтется. Ну и плюс високосный или невисокосный год.
13 Wobland
 
15.01.14
16:09
(11) ему это говорили с неделю назад. пускай хоть как-нибудь сделает
14 Wobland
 
15.01.14
16:09
мда.. неделя назад была вчера
v8: Внешняя обработка, ДЗ по видеоурокам
15 Hennessy
 
15.01.14
16:10
(10) Те же, просто поидее в феврале идет смещение на 1 день, поэтому смещается
16 Wobland
 
15.01.14
16:10
(15) планируешь как-то это учитывать в алгоритме?
17 Адский плющ
 
15.01.14
16:10
Имхо книги по 1С тут не помогут. Надо или Фомина "Язык Си" читать, или сразу застрелиться.
18 Hennessy
 
15.01.14
16:11
(16) Да, вот поэтому и спрашиваю, как это лучше доработать!
19 Wobland
 
15.01.14
16:11
(18) не заметил
20 Wobland
 
15.01.14
16:13
(18) тебе по меньшей мере два человека разложили всё на атомы. Рэйв даже код набросал. так что, имхается мне, ты хочешь готовое, а не учиться
21 Hennessy
 
15.01.14
16:15
(20) я просто хочу видеть готовое по большей части, чтобы понимать спицифику... и от этого отталкиваться, потому что я эксперементирую с кодом и у меня многое не получается
22 Wobland
 
15.01.14
16:17
(21) тут достаточно специфики

тДанные=Новый ТаблицаЗначений;
тДанные.Колонки.Добавить("Год");
тДанные.Колонки.Добавить("Дней");
Для н=2014 По 2024 Цикл
    Д=(н,1,1,23,59,59);
    ДатаКон=Дата(н,12,31,23,59,59);
    Нов=тДанныеДобавить();
    Нов.Год=н;
    Нов.Дней=0;
    Пока Д <=ДатаКон Цикл
         ДеньН=ДеньНедели(Д);
         Если ДеньН=6  Или ДеньН=7
              Или (День(Д)=1 И Месяц(Д)=1)
              Или (День(Д)=23 И Месяц(Д)=2)
              Или (День(Д)=8 И Месяц(Д)=3)Тогда
              Прододжить;

         КонецЕсли;
         Нов.Дней=Нов.Дней+1;
    КонецЦикла;
Конеццикла;
тДанные.ВыбратьСтроку();
23 Aprobator
 
15.01.14
16:17
Ну вот тупо: идем по дням - суббота или воскресенье - не считаем, праздник (определенный месяц и день месяца), тоже мимо, все остальное складываем. Все - деревянный алгортм готов.
24 azernot
 
15.01.14
16:30
Предлагаю решить задачу запросом

    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    1 КАК Разряд
        |ПОМЕСТИТЬ Цифры
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    2
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    3
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    4
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    5
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    6
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    7
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    8
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    9
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    0
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, Числа.Число) КАК ДатаДень
        |ПОМЕСТИТЬ Даты
        |ИЗ
        |    (ВЫБРАТЬ
        |        Единицы.Разряд + ЕСТЬNULL(Десятки.Разряд, 0) * 10 + ЕСТЬNULL(Сотни.Разряд, 0) * 100 + ЕСТЬNULL(Тысячи.Разряд, 0) * 1000 + ЕСТЬNULL(ДесяткиТысяч.Разряд, 0) * 10000 + ЕСТЬNULL(СотниТысяч.Разряд, 0) * 100000 КАК Число
        |    ИЗ
        |        Цифры КАК Единицы
        |            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Сотни
        |            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 100)
        |            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Десятки
        |            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 10)
        |            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Тысячи
        |            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 1000)
        |            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК ДесяткиТысяч
        |            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 10000)
        |            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК СотниТысяч
        |            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 100000)) КАК Числа
        |ГДЕ
        |    Числа.Число <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ГОД(Даты.ДатаДень) КАК Год,
        |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Даты.ДатаДень) КАК КоличествоРабочихДней
        |ИЗ
        |    Даты КАК Даты
        |ГДЕ
        |    ДЕНЬНЕДЕЛИ(Даты.ДатаДень) <= 5
        |    И НЕ(ДЕНЬ(Даты.ДатаДень) = 1
        |                И МЕСЯЦ(Даты.ДатаДень) = 1)
        |    И НЕ(ДЕНЬ(Даты.ДатаДень) = 23
        |                И МЕСЯЦ(Даты.ДатаДень) = 2)
        |    И НЕ(ДЕНЬ(Даты.ДатаДень) = 8
        |                И МЕСЯЦ(Даты.ДатаДень) = 3)
        |
        |СГРУППИРОВАТЬ ПО
        |    ГОД(Даты.ДатаДень)";

    Запрос.УстановитьПараметр("НачалоПериода",НачалоГода(ТекущаяДата()));    
    Запрос.УстановитьПараметр("КонецПериода",КонецГода(Дата(Год(ТекущаяДата())+10,1,1)));    
    
    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(""+ВыборкаДетальныеЗаписи.Год + " год - "+ВыборкаДетальныеЗаписи.КоличествоРабочихДней+" рабочих дней");
    КонецЦикла;
25 Hennessy
 
15.01.14
16:37
(24) Немного замарочено, но спасибо большое! хороший вариант!
26 WildSery
 
15.01.14
16:47
Задание разумное, но абсолютно абстрактное.
Поскольку в реальности делается совсем по-другому, простенькой выборкой из производственного календаря.
27 WildSery
 
15.01.14
16:49
А. Почитал предыдущую ветку. Садик, ясно.
28 Fram
 
15.01.14
18:28
(21) по математике и информатике в старших классах и в вузе какие отметки были?
29 Fram
 
15.01.14
18:30
+(28) не совсем правильно сформулировал. все нравилось, получалось по этим предметам?
30 Fram
 
15.01.14
18:35
Короче, начни с алгоритмов на абстрактном языке. если не понимаешь что это и зачем это, забудь про программирование в качестве источника дохода.
31 Hennessy
 
17.01.14
08:27
Не надо давать мне Г-советов... Я не учу никого жизни! я лишь обратился за помощью, рассчитывая на то что тут есть специалисты, которые могли бы мне нормально помочь! Но я вижу лишь критику и глупые советы! Я рассчитывал увидеть здесь взрослых и разумных людей, а вижу лишь подростков, которые без конца тролят все что попадается на глаза! Я понимаю что настоящих специалистов тут нет кто бы мог помочь с теми вопросами которые я задаю! Вы сами это лишний раз доказываете, чтобы вы не говорили уже!
32 Hennessy
 
17.01.14
08:30
Хотя не совсем так! Есть несколько человек которые без лишней грязи попытались мне помочь! Не буду обобщать! Это люди которые просто показали мне решение моей задачи, ни сказав ни слова про мой уровень программирования!
33 Wobland
 
17.01.14
08:35
(31) ты нас раскрыл!
34 MiniMuk
 
17.01.14
08:44
(32) Поправся, не показали решение а решили.
35 WildSery
 
17.01.14
10:42
На этом форуме не вижу нужной ссылки, куда отправлять обиженных, что платочком не подтёрли носик.

"По-моему, все претензии тех, кто называет себя новичками, связаны с их восприятием форума как какого-то учебного учереждения с длительным циклом обучения. Например, с десятилетней школой. В которой их проведут с 1го по 10ый класс, старательно вдалбливая сначала азы, а потом по нарастающей все остальные знания. Не забывая при этом про выдачу и проверку домашних заданий, дополнительные занятия для отстающих, факультативы для любознательных и т.д. Эдакие седые, мудрые и добрые гуру, окруженные выводком "птенцов", про каждого из которых гуру знает все с момента рождения. Знает чем болел, что любит есть на завтрак. Знает как с ним надо разговаривать и как его надо обучать. И потом машет вслед улетающему заматеревшему "птенцу" рукой, смахивая украдкой слезу.
Так вот, дорогие мои, все это лишь ваши иллюзии.

Форум - это ускоренные курсы решения проблемы. Которые уже подразумевают наличие базовых знаний. А "блеяние" насчет "играл-играл, угадал все буквы, но не смог прочитать слово" - это не для форума.
Для получения базовых знаний нужно образование. Либо самообразование (т.е. чтение документации), либо обучение (т.е. курсы). Но форуме нет времени для подбора методики общения с каждым вопрошающим.
Есть планка. Не выполнил ее - иди расти."
(с) Glory
36 Wobland
 
17.01.14
10:51
вспоминаю Катерину19, которая в силу возраста и отсутствия ясности разума просто не понимала то, о чём ей говорили. тупо моргала глазами и ждала появления волшебного работоспособного кода
вспоминаю бананана, взрослого мужика, который в силу полной гуманитаризации мозга заниматься программингом не мог на физиологическом уровне. этот хотя бы понимал (ну, я в это верю), что для достижения результата следует читать и думать
37 Hennessy
 
17.01.14
11:34
Я просто останусь при своем мнении и не буду комментировать то что вы написали, либо это выльется в бесконечный спор! А Вы можете думать что хотите! Но меня лишь удивляет, то что каждый из вас может бесконечно учить жизни, как раз токи, будто каждый из вас "ГУРУ" как описал "WildSery", а помочь в решении простой задачи, не может никто! Лишний раз убеждение в том что таким образом люди самоутверждаются!
38 Wobland
 
17.01.14
11:39
если ты не в курсе, даю справку. между "помогите" и "дайте" есть небольшое различие
39 Wobland
 
17.01.14
11:40
ну вот так мы понимаем помощь: взяли и подсказали
40 Fish
 
модератор
17.01.14
11:47
ИМХО, тема себя исчерпала, на чём и закончим. Автору рекомендуется к прочтению раздел
Рекомендации:
Как задать вопрос по теме 1С или советы новичку.
http://www.forum.mista.ru/rules.php
Закон Брукера: Даже маленькая практика стоит большой теории.