Имя: Пароль:
1C
 
Помогите с задачей
0 kantusza
 
04.12.23
14:19
Создать таблицу значений с колонками: месяц, число дней. Таблица значений заполняется
программно. Посчитать количество дней в 2023 году. Пользователю выводится сообщение о
количестве дней в году.

Сам только начинаю изучать 1С, дайте подсказку как это можно решить
1 Donkey_hot
 
04.12.23
14:23
(0) А какие есть идеи? И в каком именно месте сложность?
2 maxab72
 
04.12.23
14:25
Цикл. В цикле к 01.01.2023 прибавлять по одному дню. если номер месяца в функции месяц() поменялся - добавлять новую строку в ТЗ с числом дней в предыдущем месяце и его именем (через Формат()) Как вариант, можно и по другому.
3 uPstart_
 
04.12.23
14:29
Можно добавлять месяцами. Будет быстрее в 30 раз. А количество дней можно сделать как итог по колонке.
4 kantusza
 
04.12.23
14:32
(1) Я попытаюсь объяснить, я создаю таблицу и вписываю в нее колонки Месяц и Число дней, по теории которую мне дают на курсах, строчки тоже вписывались в ручную, но мой наставник сказал что как раз таки месяц и сколько в нем дней будут вписываться программно через цикл и я не очень понимаю как мне это сделать...
5 kantusza
 
04.12.23
14:42
МесяцИЧислоДней = Новый ТаблицаЗначений;
    
    МесяцИЧислоДней.Колонки.Добавить("Месяц");
    МесяцИЧислоДней.Колонки.Добавить("ЧислоДней");
    //Первая строчка
    НоваяСтрока = МесяцИЧислоДней.Добавить();
    
    НоваяСтрока.Месяц = "Январь";
    НоваяСтрока.ЧислоДней = 31;

Я конечно понимаю что это совсем выглядит убого, но другого решения у меня нет, той теории которую дают не хватает, может посоветуете где найти информацию для понимания
6 AlexeyKh
 
04.12.23
14:45
тоже как вариант себе
еще 11 пар таких строчек кода
и заполненная ТЗ у вас в кармане (т.е. в зачете)
7 Donkey_hot
 
04.12.23
14:49
Год = 2023;
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Месяц");
    ТЗ.Колонки.Добавить("КоличествоДней");
    
    СекундВСутках = 86400;
    Для Месяц = 1 По 12 Цикл
        ТекДата = Дата(Год, Месяц, 1);
        НоваяСтрока = ТЗ.Добавить();
        НоваяСтрока.Месяц = Формат(ТекДата, "ДФ=MMMM");
        НоваяСтрока.КоличествоДней = (НачалоДня(КонецМесяца(ТекДата)) - ТекДата) / СекундВСутках + 1;
    КонецЦикла;
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = СтрШаблон(НСтр("ru='В %1 году %2 дней'"), Формат(Год, "ЧГ=0"), ТЗ.Итог("КоличествоДней"));
    Сообщение.Сообщить();
8 OldCondom
 
04.12.23
14:51
Посмотри в синтаксис помощнике раздел Глобальный контекст - Функции работы со значениями типа Дата.

Там есть необходимые методы, чтобы посчитать количество дней в каждом из месяцев. К примеру, можно брать конец месяца - начало месяца / 86400, то есть получим количество секунд за весь месяц и поделим на количество секунд в дней. Это один из вариантов.
9 Asmody
 
04.12.23
14:52
(7)
КоличествоДней = (НачалоДня(КонецМесяца(ТекДата)) - ТекДата) / СекундВСутках + 1

сам придумал или подсказал кто?
10 Donkey_hot
 
04.12.23
14:54
(9) Это Вы к чему?
11 kantusza
 
04.12.23
14:56
(7) Спасибо огромное
12 kantusza
 
04.12.23
14:56
(8) Пошел читать, спасибо большое
13 AlexeyKh
 
04.12.23
14:57
действительно так же короче и понятнее

НоваяСтрока.КоличествоДней = День(КонецМесяца(ТекДата));
14 Asmody
 
04.12.23
14:57
(10) День(КонецМесяца())
15 uPstart_
 
04.12.23
14:57
А не легче использовать День(ПоследнийДеньМесяца)?
16 Asmody
 
04.12.23
14:58
а теперь давайте тоже самое запросом, чего уж там
17 Donkey_hot
 
04.12.23
14:59
(13) Согласен
18 uPstart_
 
04.12.23
15:00
ДатаНачалаГода = Дата("31122022");
    Для н = 1 по 12 Цикл
        Стр = ТЗ.Добавить();
        Стр.Месяц = н;
        Стр.Число = День(КонецМесяца(ДобавитьМесяц(ДатаНачалаГода,н)));
    КонецЦикла;
19 AlexeyKh
 
04.12.23
15:03
(16) про запрос в задаче не было ни слова!

надо приучать себя, делать только то что прописано в постановке (и как можно проще)
20 OldCondom
 
04.12.23
15:07
(13) Проще, но на счет понятнее - хз. Я когда впервые прочитал описание "Определяет календарный день в указанной дате." не понял, день в году, в квартале, какой день? Да, гугл подсказывает "Календарный день имеет порядковый номер в календарном месяце", но я почему то был убежден, что это номер дня в году. А уж соседняя функция "ДеньГода()" и вовсе с толку сбивала.
21 Asmody
 
04.12.23
15:22
Нахрена тут таблица значений - я не понял.
Посчитать количество дней в 2023 году. Пользователю выводится сообщение о
количестве дней в году.


Сообщить(ДеньГода('20231231'));


и всё.

не надо плодить сущности
22 Donkey_hot
 
04.12.23
15:25
(21) Если читать только часть задания, то можно еще проще. Например, читаем только "Пользователю выводится сообщение", выводим в одну строчку Hello World и все счастливы.
23 uPstart_
 
04.12.23
15:34
(21) В задании указано про таблицу значения. И постановщиком предполагается, что результат по общему количеству дней будет получено из таблицы значений. И предполагается что использоваться будет Итог, а не повторный проход по таблице значений в цикле или сумма по строкам в первом цикле.
24 lEvGl
 
04.12.23
15:40
(22) задача из (0) только и подразумевает, что количество дней пользователю сообщить, а что еще? то, что это тестовое задание и хотят посмотреть на способности работать с ТЗ и циклами - как всегда самодовольные хотелки наставника или тестера от Джуна/Бота, которые к итоговому решению задачи отношения не имеют, просто позабавиться
(21) причуды постановщика, довольно криво придуманные
25 Asmody
 
04.12.23
15:42
🤦
з = новый запрос(
"ВЫБРАТЬ 0 ъ ПОМЕСТИТЬ _0 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3;
|ВЫБРАТЬ _0.ъ * 4 + _1.ъ ъ ПОМЕСТИТЬ _1 ИЗ _0, _0 _1;
|ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&нг, МЕСЯЦ, _1.ъ) М ПОМЕСТИТЬ _2 ИЗ _1 ГДЕ _1.ъ МЕЖДУ 0 И 11;
|ВЫБРАТЬ _2.М Месяц, ДЕНЬ(КОНЕЦПЕРИОДА(_2.М, МЕСЯЦ)) КоличествоДней ИЗ _2");
з.Параметры.Вставить("нг", НачалоГода(ТекущаяДата()));
тз = з.Выполнить().Выгрузить();
Сообщить(тз.Итог("КоличествоДней"));

26 saradip
 
04.12.23
15:43
Если ЗначениеЗаполнено(Объект.ВыбранныйГод) Тогда
        ВыбранныйГод = Объект.ВыбранныйГод;
    Иначе
        ВыбранныйГод = ТекущаяДата();
    КонецЕсли;    
    
    НачГода = НачалоГода(ВыбранныйГод);

    Для Месяц = 0 По 11 Цикл
        ТекМесяц = ДобавитьМесяц(НачГода, Месяц);
        КолвоДней = День(КонецМесяца(ТекМесяц));
        
        Сообщить(Формат(ТекМесяц,"ДФ=ММММ") + " : "+ КолвоДней);
    
    КонецЦикла
27 rphosts
 
04.12.23
16:09
"И тут Остапа понесло..." молодёжь плохому учите? Ну-ну.
28 rphosts
 
04.12.23
16:10
(0) возможно топикстартер плохо изъясняется... возможно нужно было:
1.заполнить ТЗ.
2.посчитать сумму по колонке ТЗ
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан