Здравствуйте, учусь программировать в 1С и пытаюсь реализовать следующий механизм:
В документе при установке даты начала и даты конца в ТЗ появляются новые колонки с названием месяцев попавших в период.
Как добавлять колонки я разобрался, а вот как сделать правильный цикл и выбрать названия месяцев попавших в период не получается. Подскажите пожалуйста как можно реализовать данный функционал.
P.S. Для примера поставили дату начала 1 января 2018 - дата конца 3 марта 2018 : добавились колонки Январь, Февраль, Март.
В документе при установке даты начала и даты конца в ТЗ появляются новые колонки с названием месяцев попавших в период.
Как добавлять колонки я разобрался, а вот как сделать правильный цикл и выбрать названия месяцев попавших в период не получается. Подскажите пожалуйста как можно реализовать данный функционал.
P.S. Для примера поставили дату начала 1 января 2018 - дата конца 3 марта 2018 : добавились колонки Январь, Февраль, Март.
По теме из базы знаний
- Создание подключаемой обработки табличной части с диалогом запроса параметров заполнения (управляемые формы)
- Реализация задачки с собеседования: найти максимальное число, но не более, чем ограничено параметром
- "1С:Розница 8. Ювелирный магазин" - кол. УИН в списках ДМДК, альтернативная печать DataMatrix, заполнение партий для ДМДК по артикулам/штрихкодам
- Эмпатия и системный подход в сборе требований и составлении ТЗ
- Как я писал ТЗ на внедрение 1С:ERP
Найденные решения
(3)
примерно так
на выходе в МассивМесяцев у тебя должен быть список месяцев
НачалоИнтервала = некаяДата;
КонецИнтервала = некаядата;
МассивМесяцев = Новый Массив;
Для Итератор=0 по 11 Цикл
МесяцКонец = ДобавитьМесяц(НачалоМесяца(НачалоИнтервала),Итератор);
Если МесяцКонец>КонецИнтервала тогда
прервать;
КонецЕсли;
МассивМесяцев.Добавить(Формат(МесяцКонец,"ДФ=ММММ"));
КонецЦикла;
Показатьпримерно так
на выходе в МассивМесяцев у тебя должен быть список месяцев
(8) измени
на
ты неправильно массив используешь. Тебе нужно само значение а не массив. В массив я помещал, для примера. А ты в самом цикле добавляешь свои реквизиты
МассивМесяцев.Добавить(Формат(МесяцКонец,"ДФ=ММММ"));
Сообщить(МассивМесяцев);
НазваниеКолонки=Формат(МассивМесяцев, "ДФ=MMMM");
на
//МассивМесяцев.Добавить(Формат(МесяцКонец,"ДФ=ММММ"));
//Сообщить(МассивМесяцев);
НазваниеКолонки=Формат(МесяцКонец,"ДФ=ММММ");
ты неправильно массив используешь. Тебе нужно само значение а не массив. В массив я помещал, для примера. А ты в самом цикле добавляешь свои реквизиты
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) наименование месяца буквами по дате можно получить функцией формат Формат(Дата, "ДФ=MMMM");
по периоду,
делаешь цикл, от 1 до 12
в цикле используешь функцию ДобавитьМесяц
к НачалоМесяца начала интервала и количество итераций.
и проверяешь, не достигло ли значение даты конца. Если достигло то прервать.
по периоду,
делаешь цикл, от 1 до 12
в цикле используешь функцию ДобавитьМесяц
к НачалоМесяца начала интервала и количество итераций.
и проверяешь, не достигло ли значение даты конца. Если достигло то прервать.
(2) Добавление и наименование колонок смог реализовать так:
Но про цикл если честно не понимаю как это реализовать в коде.
НазваниеКолонки=Формат(ТекущаяДата(), "ДФ=MMMM");
НовыйРеквизит = Новый Массив;
НовыйРеквизит.Добавить(Новый РеквизитФормы(НазваниеКолонки, Новый ОписаниеТипов("Число"), "ПрозводственныеПланы", НазваниеКолонки, Истина));
ИзменитьРеквизиты(НовыйРеквизит);
НоваяКолонка = Элементы.Добавить(НазваниеКолонки, Тип("ПолеФормы"), Элементы.ПрозводственныеПланы);
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.ПутьКДанным = "ПрозводственныеПланы."+НазваниеКолонки;
ПоказатьНо про цикл если честно не понимаю как это реализовать в коде.
(3)
примерно так
на выходе в МассивМесяцев у тебя должен быть список месяцев
НачалоИнтервала = некаяДата;
КонецИнтервала = некаядата;
МассивМесяцев = Новый Массив;
Для Итератор=0 по 11 Цикл
МесяцКонец = ДобавитьМесяц(НачалоМесяца(НачалоИнтервала),Итератор);
Если МесяцКонец>КонецИнтервала тогда
прервать;
КонецЕсли;
МассивМесяцев.Добавить(Формат(МесяцКонец,"ДФ=ММММ"));
КонецЦикла;
Показатьпримерно так
на выходе в МассивМесяцев у тебя должен быть список месяцев
(4)
Спасибо, буду разбираться как это все работает, только подскажите пожалуйста почему итератор по 11?
НачалоИнтервала = некаяДата; КонецИнтервала = некаядата; МассивМесяцев = Новый Массив; Для Итератор=0 по 11 Цикл МесяцКонец = ДобавитьМесяц(НачалоМесяца(НачалоИнтервала),Итератор); Если МесяцКонец>КонецИнтервала тогда прервать; КонецЕсли; МассивМесяцев.Добавить(Формат(МесяцКонец,"ДФ=ММММ")); КонецЦикла;
Спасибо, буду разбираться как это все работает, только подскажите пожалуйста почему итератор по 11?
(6) Если можно, то еще вопрос, попытался запустить при изменении начальной даты через сервер:
Ругается:
{Документ.ПроизводственныеПланы.Форма.ПроизводственныеПланы.Форма(57)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
ИзменитьРеквизиты(НовыйРеквизит);
по причине:
Неуникальное имя реквизита. Имя: "Массив"
НачалоИнтервала = Объект.НачалоПериода;
КонецИнтервала = Объект.КонецПериода;
МассивМесяцев = Новый Массив;
Для Итератор=0 по 11 Цикл
МесяцКонец = ДобавитьМесяц(НачалоМесяца(НачалоИнтервала),Итератор);
Если МесяцКонец>КонецИнтервала тогда
прервать;
КонецЕсли;
МассивМесяцев.Добавить(Формат(МесяцКонец,"ДФ=ММММ"));
Сообщить(МассивМесяцев);
НазваниеКолонки=Формат(МассивМесяцев, "ДФ=MMMM");
НовыйРеквизит = Новый Массив;
НовыйРеквизит.Добавить(Новый РеквизитФормы(НазваниеКолонки, Новый ОписаниеТипов("Число"), "ПрозводственныеПланы", НазваниеКолонки, Истина));
ИзменитьРеквизиты(НовыйРеквизит);
НоваяКолонка = Элементы.Добавить(НазваниеКолонки, Тип("ПолеФормы"), Элементы.ПрозводственныеПланы);
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.ПутьКДанным = "ПрозводственныеПланы."+НазваниеКолонки;
КонецЦикла;
ПоказатьРугается:
{Документ.ПроизводственныеПланы.Форма.ПроизводственныеПланы.Форма(57)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
ИзменитьРеквизиты(НовыйРеквизит);
по причине:
Неуникальное имя реквизита. Имя: "Массив"
(8) измени
на
ты неправильно массив используешь. Тебе нужно само значение а не массив. В массив я помещал, для примера. А ты в самом цикле добавляешь свои реквизиты
МассивМесяцев.Добавить(Формат(МесяцКонец,"ДФ=ММММ"));
Сообщить(МассивМесяцев);
НазваниеКолонки=Формат(МассивМесяцев, "ДФ=MMMM");
на
//МассивМесяцев.Добавить(Формат(МесяцКонец,"ДФ=ММММ"));
//Сообщить(МассивМесяцев);
НазваниеКолонки=Формат(МесяцКонец,"ДФ=ММММ");
ты неправильно массив используешь. Тебе нужно само значение а не массив. В массив я помещал, для примера. А ты в самом цикле добавляешь свои реквизиты
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот