|
Помогите с задачей | ☑ | ||
---|---|---|---|---|
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.посчитать сумму по колонке ТЗ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |