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