Проблемы со взятием остатков на конец периода в отчете на СКД

1. Kutuzov 740 17.04.14 16:50 Сейчас в теме
Всегда в параметры отчета на СКД в выражение для параметра &КонецПериода писал конструкцию:

КонецПериода(&КонецПериода, "ДЕНЬ")

Тут узнал, что запрос к виртуальной таблице остатков на &КонецПериода не отрабатывает документы, у которых время 23:59:59.

Сделал такую конструкцию:

началопериода(добавитькдате(КонецПериода(&КонецПериода, "ДЕНЬ"), "секунда", 1), "день")

Она мне не нравится - какая-то некрасивая. А значит, неправильная.
Как сделать нормальную отработку границы в отчете на СКД?
VKuser113777181; +1 Ответить
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
8. adamx 36 21.04.14 16:03 Сейчас в теме
Посмотри 41 и 42 урок Гилева по СКД.
41 - тот же вариант, что и у тебя добавитькдате(КонецПериода(&КонецПериода, "ДЕНЬ"), "секунда", 1), "день").

Второй вариант - использовать регистр оборотов и остатков и в нем ввести параметр типа СтандартныйПериод, у него два свойства ДатаНачала и ДатаОкончания вроде. Вот в ДатаОкончания и будет храниться нужный тебе момент, так как он включает в себя все движения за последнюю секунду дня.
VKuser113777181; user1040665; inlimbo; mirco; Sergey_Borisovi4; idiked; mcgoblin; ivangrant; +8 1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. agrustny 19 17.04.14 22:18 Сейчас в теме
(1) совершенно верное решение Вам подсказали, параметром может быть
1) Дата
2) МоментВремени
3) Граница
Так уж устроена эта "хитрая" 1С. Типа фишка такая, чтобы всем работа находилась (здесь могла бы быть улыбка) и стимулировались шарики и ролики. В общем, все подробности, как обычно, в СП, цены на который в последнее время существенно снижены. Мне кажется также, что
Граница = Новый Граница(КонецДня(Дата), ВидГраницы.Включая);
и
Граница = Новый Граница(КонецДня(Дата)+1, ВидГраницы.Исключая);
- это синонимы, если пространство МоментовВремени считать непрерывным, т.к. разница между этими двумя границами инфинитизимальна.
А может быть и нет)))
2. Olga12 182 17.04.14 16:58 Сейчас в теме
Можно так
Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("Период"));
Граница = Новый Граница(КонецДня(Дата), ВидГраницы.Включая);
Параметр.Значение = Граница;
Параметр.Использование = Истина;
begemot; iones; mcgoblin; user650871_vaskozmin; +4 Ответить
4. Kutuzov 740 19.04.14 15:47 Сейчас в теме
(2) kn, я так понимаю, это надо в отчете свою обработку компоновки делать? А тупо если создать отчет без формы без всего - только изменяя саму схему компоновки, можно работать с границами?
5. Olga12 182 19.04.14 16:51 Сейчас в теме
Можно не создавать форму отчета, а программно задать параметр СКД Период как написано в (2) в модуле объекта(Отчета) в Процедуре ПриКомпановкеРезультата()
6. SergeiA 20.04.14 09:15 Сейчас в теме
началопериода(добавитькдате(КонецПериода(&КонецПериода, "ДЕНЬ"), "секунда", 1), "день")


А для чего в этой конструкции НачалоПериода()? КонецПериода(&КонецПериода, "День") вернет 23.59.59, добавив секунду получаем 00.00.00 следующего дня, получив НачалоПериода от 00.00.00 мы получим тоже самое.
7. ksuman 20 20.04.14 20:33 Сейчас в теме
"виртуальной таблице остатков" эта таблица предназначена для определения остатков до указанного времени. Не понимаю, зачем её использовать применительно к КонцуПериода. Тогда используйте другую виртуальную таблицу "ОстаткиИОбороты" и заполняйте к ней ПериодОкончания тем значением, которое вам нужно, или продолжайте в запросе пересчитывать КонецПериода добавлением к нему секунды.
8. adamx 36 21.04.14 16:03 Сейчас в теме
Посмотри 41 и 42 урок Гилева по СКД.
41 - тот же вариант, что и у тебя добавитькдате(КонецПериода(&КонецПериода, "ДЕНЬ"), "секунда", 1), "день").

Второй вариант - использовать регистр оборотов и остатков и в нем ввести параметр типа СтандартныйПериод, у него два свойства ДатаНачала и ДатаОкончания вроде. Вот в ДатаОкончания и будет храниться нужный тебе момент, так как он включает в себя все движения за последнюю секунду дня.
VKuser113777181; user1040665; inlimbo; mirco; Sergey_Borisovi4; idiked; mcgoblin; ivangrant; +8 1 Ответить
10. agrustny 19 22.04.14 10:19 Сейчас в теме
Ну и чем Вам так помог (8), если сами эквивалентное в вопросе написали? А вот (2) - реально Вас просвЯтил насчет границ. Конечно, граница в применении к Дате, а не МоментуВремени - это белиберда, спорить не буду. Вообще, можно было бы для этой трехэтажной конструкции придумать какое-нибудь красивое имя, вроде НачалоРаннегоУтраПрекрасногоЗавтрашнегоДняПрограммиста1С(Дата);
11. AllexSoft 22.04.14 10:22 Сейчас в теме
(10) agrustny, думаю что правильно использование СтандартныйПериод вместо конструкций при компановке..
12. Kutuzov 740 24.04.14 10:14 Сейчас в теме
(11) AllexSoft, проверил - стандартный период не работает. Т.е. тоже не захватываются движения документов со временем 23:59:59.
(8) adamx, в результате эти способы оказались не верными, вам на заметку :)
(10) agrustny, вы правы, я был вынужден в конце концов остановиться на этом варианте. Моя "конструкция" оказалась не рабочей по той причине, что влияла на другие таблицы. "31.03.2013 23:59:59" она превращает в "01.04.2013 0:00:00", таблица остатков срабатывает верно, а вот "ДвиженияССубконто" начинают цеплять документы со временем "01.04.2013 0:00:00"

Итого, мой рабочий вариант:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	ПараметрКонецПериодаД = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериодаД"));
	ПараметрКонецПериода = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
	
	Если ПараметрКонецПериодаД <> Неопределено
	 И ПараметрКонецПериода <> Неопределено Тогда
		
		ПараметрКонецПериода.Значение =
			Новый Граница(КонецДня(ПараметрКонецПериодаД.Значение.Дата), ВидГраницы.Включая);
			
	КонецЕсли;
	
КонецПроцедуры
Показать
DennyPhilord; ivv1970; agrustny; +3 Ответить
13. tailer2 09.10.15 16:50 Сейчас в теме
(12) Kutuzov,
ПараметрКонецПериода.Значение = Новый Граница(КонецДня(ПараметрКонецПериода.Значение.Дата), ВидГраницы.Включая);



Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
{ВнешнийОтчет.tДвижение_10_90.МодульОбъекта(8)}: Поле объекта не обнаружено (Дата)
ПараметрКонецПериода.Значение = Новый Граница(КонецДня(ПараметрКонецПериода.Значение.Дата), ВидГраницы.Включая);
9. markgenuine 21.04.14 23:53 Сейчас в теме
А если у виртуальной таблицы использовать в свойствах эти даты? Мне кажется тогда будет все ок.
15. DennyPhilord 65 29.04.22 00:03 Сейчас в теме
16. DennyPhilord 65 29.04.22 00:34 Сейчас в теме
14. tailer2 09.10.15 17:02 Сейчас в теме
:))

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    ПараметрКонецПериода = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
	Если ТипЗнч(ПараметрКонецПериода.Значение) = Тип("СтандартнаяДатаНачала") Тогда
	    ПараметрКонецПериода.Значение = Новый Граница(КонецДня(ПараметрКонецПериода.Значение.Дата), ВидГраницы.Включая);
	КонецЕсли; 
КонецПроцедуры
17. Sintson 412 25.01.24 15:49 Сейчас в теме
Использование виртуальной таблицы Остатки в СКД проблематично из-за того что нет возможности нормально установить границу периода. Используйте в СКД ОстаткиИОбороты с настройкой метода дополнения "ДвиженияИГраницыПериода".
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот