Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Задать свой период отчета в СКД , 1С:Предприятие 8.3 (8.3.5.1517) - управляемое приложение          
Gigi Подменю пользователя
сообщение 16.07.20, 10:01
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Всем привет!
Давно не нуждался в помощи, но к сожалению опять приходится
Короче что требуется ... сущий пустяк, который на удивление стал целой проблемой с которой уже, с этими бесконечными методами тыка, уже второй день вожусь, и трачу кучу времени. Тогда как изначально думал, что вопрос слишком простой что бы он превращался в целую проблему и что бы вообще возникла сама надобность выходить на форум. Но видимо без этого никак не получается. Ладно ... так и быть...
Так вот, что нужно... нужно в созданную форму отчета СКД вставить любую свою дату. И сделать это программно (т.е. не интерактивным, а кодовым способом).
Вот что нужно...
Казалось бы сущий пустяк ... Просто ерунда ...но дорогие друзья ... честно говорю ... осточертело уже ... вожусь с этой чепухой ... то так, то сяк ... ну никак не хочет система подчиниться.
А все что нужно это просто вставить эту несчастную указанную дату в это несчастное поле даты на форме. Всего лишь и больше НИЧЕГО!
Т.е. Допустим в метаданных: "Отчеты", мы создали: "Отчет1". Потом определили выгрузку данных: "ОсновнаяСхемаКомпоновкиДанных". А потом создали форму "отчета1".
И вот тут нужно что бы при открытии формы, или при изменении какого-нибудь реквизита отчета в поля: "НачалоПериода", "КонецПериода" вставлялась и отображалась своя дата.
Вот что нужно.
Вот пример кода, где взяты условные значения дат:
&НаКлиенте
Процедура ГодПриИзменении(Элемент)
ПараметрыДанных_Заполнить('00010101',ТекущаяДата());
КонецПроцедуры
&НаКлиенте
Процедура МесяцПриИзменении(Элемент)
ПараметрыДанных_Заполнить('00010101',ТекущаяДата());    
КонецПроцедуры
&НаКлиенте
Процедура ПараметрыДанных_Заполнить(ДатаНачало,ДатаКонец)
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
ПараметрСКД.Использование = Истина;
ПараметрСКД.Значение = ДатаКонец;
ПараметрСКД2 = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");
ПараметрСКД2.Использование = Истина;
ПараметрСКД2.Значение = ДатаНачало; //Сообщить(ПараметрСКД.Значение);
//Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(..);
КонецПроцедуры

Короче ... дорогие друзья ... никак че то не выходит. При изменении на пример реквизита "Год" или "Месяц" в открытой форме НИЧЕГО НЕ ПРОИСХОДИТ! Абсолютно!
Буду признателен!

pablo Подменю пользователя
сообщение 16.07.20, 14:05
Сообщение #2

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Для программного заполнения параметров СКД используйте обработчик события ПриКомпоновкеРезультата модуля отчета
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
        ТекНастройки=КомпоновщикНастроек.ПолучитьНастройки();
    ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("Дата",ТекущаяДата());
    КомпоновщикНастроек.ЗагрузитьНастройки(ТекНастройки);
КонецПроцедуры


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: Gigi,

TohaMonster Подменю пользователя
сообщение 16.07.20, 14:29
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 67
Спасибо сказали: 28 раз
Рейтинг: 28

Цитата(Gigi @ 16.07.20, 11:01) *
А все что нужно это просто вставить эту несчастную указанную дату в это несчастное поле даты на форме.

Немного запутанно. Уточните пожалуйста, Вы хотите изменить дату на форме, чтобы она попала в Параметр СКД?
Тогда, вроде, в ПараметрыДанных_Заполнить() всё чотко, должно сработать. Естественно, когда Вы нажмете "Сформировать"

Что у Вас должно происходить в ГодПриИзменении() и МесяцПриИзменении(), не совсем понятно. Почему-то Вы передаете в правильную процедуру ПараметрыДанных_Заполнить() все время одинаковый интервал: с начала веков по текущую дату. Возможно, там имеется в виду что-то вроде
&НаКлиенте
Процедура ГодПриИзменении(Элемент)
ДатаСКоторойПолучаемОтчет = Дата(РеквизитГодНаФорме, РеквизитМесяцНаФорме, 1);
ПараметрыДанных_Заполнить(ДатаСКоторойПолучаемОтчет, ТекущаяДата());
КонецПроцедуры


Gigi Подменю пользователя
сообщение 16.07.20, 17:47
Сообщение #4

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

TohaMonster @ Сегодня, 14:29 * ,
Гуу ... хоть что-то в ответ..
Цитата(TohaMonster @ 16.07.20, 14:29) *
все время одинаковый интервал: с начала веков по текущую дату. Возможно, там имеется в виду что-то вроде

Да нет ... я там просто чисто условно указал даты... да хоть какие ... это для теста. А что касается того, какими датами должны заполняться параметры: начала/конец периода то суть в следующем...
Дело в том, у нас все отчеты... акты,счета и т.д. оформляются в месяц раз... и статистика тоже нужна за один месяц или год.
А в отчетах СКД по стандарту для этого постоянно нужно указывать дату на пример: с 01.07.2020 по 01.08.2020 а это не очень удобно... ну не знаю .. лично мне не удобно ковырять и выбирать дату, тогда как всегда нужно с 01... по 01.
Поэтому в чем идея... создать доп реквизиты в отчете СКД: "Отчет.Год" и "Отчет.Месяц". Типы которых СправочникСсылка.Год и ПеречислениеСсылка.Месяц.
И что нужно в конечном счете ... при изменении года или месяца дата будет вставляться с 01 ... по 01... в зависимости от того какой указан год/месяц.
Как это сделать это не вопрос... Вопрос в том, что в интеракивном режиме при изменении года или месяца в поля Начало-Конец периода не вставляется вообще ничего.
Не смотря на то что РУССКИМ КОДОВЫМ ЯЗЫКОМ написано что должно быть отображено..
Вот в чем проблема ..

pablo @ Сегодня, 14:05 * ,
Цитата(pablo @ 16.07.20, 14:05) *
Для программного заполнения параметров СКД используйте обработчик события ПриКомпоновкеРезультата модуля отчета

Стоп .. пардон.... упустил ... нужно протестить то что рекомендует автор этого поста... ладно проверю ...

Gigi @ Сегодня, 16:27 * ,
Только что пробовал так ...
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;    
ТекНастройки=КомпоновщикНастроек.ПолучитьНастройки();
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("Дата",ТекущаяДата()); // Условно взята
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаНачала",ТекущаяДата());    // Условно взята
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаОкончания",ТекущаяДата());     // Условно взята
КомпоновщикНастроек.ЗагрузитьНастройки(ТекНастройки);
КонецПроцедуры

хотя это не совсем то что нужно... так как это не модуль отчета, а модуль объекта отчета... но при нажатии на кнопку "Сформировать" ошибка...


Цитата(Gigi @ 16.07.20, 16:57) *
так как это не модуль отчета, а модуль объекта отчета.

Тьфу ты ... не модуль формы, а модуль отчета...
Просто ... дорогие друзья ... я могу конечно создать отчет и в нем и вовсе не создавать СКД и обойтись без него. А вместо этого создать произвольную форму отчета и там делать что угодно и как угодно оперируя с регом накопления по командам оборотов. Но это ведь нужно повозиться... создавать макет ... потом писать код заполнения в макет... Не охота на это тратить время. Проще воспользоваться СКД .. там все в готовом виде. Единственное что нужно как говорил это вставлять даты промежутков в зависимости от указанного на форме года и месяца... с 01... по 01. Вот что нужно. А в остальном все устраивает. СКД это ведь слишком удобно что бы программист не пользоваться им.
Вот собственно и весь вопрос..

pablo Подменю пользователя
сообщение 17.07.20, 9:05
Сообщение #5

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

СтандартнаяОбработка=Ложь;
-лишнее.


Если Вам нужно в модуле объекта отчета получать данные с формы - добавьте пару реквизитов отчета. Эти реквизиты можно заполнять на форме и они будут доступны в модуле объекта.


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Gigi Подменю пользователя
сообщение 17.07.20, 9:24
Сообщение #6

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Цитата(pablo @ 17.07.20, 9:05) *
Эти реквизиты можно заполнять на форме и они будут доступны в модуле объекта

Ну эт понято... знаю... и заполонять то можно, но все равно ничего не выходит.... как с сервера(в модуле отчета), так и с клиента(в модуле формы отчета).
А если говорить о модуле отчета то, после кнопки "Сформировать" ВЫДАЕТ ОШИБКУ:на этой линии:
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("Дата",ТекущаяДата()); // Условно взята

И пишет:
Цитата
Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
{Отчет.Накопление_ЮрЛица_НачисленоОплачено_НаПериод.МодульОбъекта(5)}: Ошибка при вызове метода контекста (УстановитьЗначениеПараметра)
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("Дата",ТекущаяДата()); // Условно взята
по причине:
Параметр с указанным именем не найден

Короче и так тоже че то не работает. Не выезжаю почему ...

pablo Подменю пользователя
сообщение 17.07.20, 9:30
Сообщение #7

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0


А какие у Вас есть параметры в СКД?


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Gigi Подменю пользователя
сообщение 17.07.20, 9:52
Сообщение #8

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

pablo @ Сегодня, 9:30 * ,
Цитата(pablo @ 17.07.20, 9:30) *
А какие у Вас есть параметры в СКД?

Обычные ... ничего особенного ...
1. Запрос выгрузки с рега накопления
2. Определение нужных столбцов отображения в таб.доке СКД
3. Определение даты промежутка
Короче все как обычно.

sava1 Подменю пользователя
сообщение 17.07.20, 10:05
Сообщение #9

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Параметры - это то, что во вкладке Параметры схемы СКД

Gigi Подменю пользователя
сообщение 17.07.20, 10:34
Сообщение #10

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

sava1 @ Сегодня, 10:05 * ,
Цитата(sava1 @ 17.07.20, 10:05) *
Параметры - это то, что во вкладке Параметры схемы СКД

Вы имеете ввиду эту вкладку?


 ! 

Правила: 8
 


Сообщение отредактировал Vofka - 17.07.20, 11:27

sava1 Подменю пользователя
сообщение 17.07.20, 11:25
Сообщение #11

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Цитата(Gigi @ 17.07.20, 10:24) *
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("Дата",ТекущаяДата()); // Условно взята


ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода",ТекущаяДата()); // Условно взята
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода",ТекущаяДата()); // Условно взята

Спасибо сказали: Gigi,

Gigi Подменю пользователя
сообщение 17.07.20, 13:43
Сообщение #12

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

sava1 @ Сегодня, 11:25 * ,
Цитата(sava1 @ 17.07.20, 11:25) *
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода",ТекущаяДата()); // Условно взята
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода",ТекущаяДата()); // Условно взята

Отлично! Работает! Как сам не догнал ... то что ошибка возникала из-за не правильного указания реквизитов дат.
Просто я как то смотрел реквизиты на форме Отче.ПараметрыДанных, а там обнаружил "Дата", "ДатаНачала","ДатаОкончания" это меня запутало. Слишком многими другими задачами голова лопается.
Оказывается нужно так как указано в параметрах СКД: "НачалоПериода","КонецПериода"... Вот как..
И вообще с СКД не очень дружил и практический не пользовался ... это что бы было больше свободы и меньше разных ограничений стандарта... вот почему. И тольо недавно решил пользоваться возможностями СКД. При условии что это не сильно ограничит свободу действий.
Но представленное решение вопроса через модуль отчета конечно не на все сто устраивает,
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
//СтандартнаяОбработка=Ложь;    
ТекНастройки=КомпоновщикНастроек.ПолучитьНастройки();
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода",ТекущаяДата()); // Условно взята
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода",ТекущаяДата()); // Условно взята
КомпоновщикНастроек.ЗагрузитьНастройки(ТекНастройки);
КонецПроцедуры

Больше устраивало бы с клиента (в модуле формы).
Но ладно... путь хотя бы так ...по кр. мере, это лучше чем ничего
За что огромное Вам спасибо дорогие друзья!
Ладно! Вопрос решен и тема думаю закрыта!
Спасибо!

Gigi Подменю пользователя
сообщение 17.07.20, 15:03
Сообщение #13

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Цитата(Gigi @ 17.07.20, 13:43) *
Больше устраивало бы с клиента (в модуле формы).

Пардон! Только что прописал все что требовалось... и вообще что касается параметров СКД НачалоПериода/КонецПериода эти поля и вовсе скрыл на форме....Ну имею ввиду: Элементы.КомпоновщикНастроекПользовательскиеНастройки ...
А потом создал уже свои реквизиты в отчете: Отчет.ДатаНачало,Отчет.ДатаКонец,Отчет.Год,Отчет.Месяц и еще числовой тип Отчет.ПараметрыОтчетногоПериода с переключением уже на форме: "Отчетный месяц", "Отчетный год" и "По промежутку дат". При чем если галка стоит на первом то на форме видимы только Отчет.Год,Отчет.Месяц; если на втором то только Отчет.Год; а если на третьем то Отчет.ДатаНачало, Отчет.ДатаКонец.
При этом при изменении года месяца , равно как и опции "ПараметрыОтчетногоПериода " в полях: Отчет.ДатаНачало, Отчет.ДатаКонец автоматический вставляются нужный промежуток.
А все остальное согласно предложенному тут решению... Вот как:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)    
ТекНастройки=КомпоновщикНастроек.ПолучитьНастройки();
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода",ЭтотОбъект.ДатаНачало);
ТекНастройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода",ЭтотОбъект.ДатаКонец);
КомпоновщикНастроек.ЗагрузитьНастройки(ТекНастройки);
КонецПроцедуры

Именно поэтому
Цитата(Gigi @ 17.07.20, 13:43) *
Но представленное решение вопроса через модуль отчета конечно не на все сто устраивает,

Пардон! Уже не так когда включил все поставленные задачи. Беру свои слова обратно!
Очень устраивает... на все сто. Главное то что отвечает всем требованиям поставленных задач.
Ладно! Еще раз огромное спасибо!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 16:08
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!