Добро пожаловать на Ass1s. Пожалуйста, авторизуйтесь или зарегистрируйтесь.

Май 21, 2024, 19:53

Вход в систему с именем пользователя, паролем и длиной сессии
Пользователи
  • Всего пользователей: 40
  • Последний: cartblansh
Статистика
  • Всего сообщений: 81
  • Всего тем: 19
  • Онлайн сегодня: 2
  • Максимальный онлайн: 34
  • (Окт. 01, 2023, 18:24 )
Сейчас на форуме
Пользователи: 0
Гостей: 2
Всего: 2
2 гостей, 0 пользователей

Разделы

СКД и установка границы периода на параметр даты остатков

Автор ass1s, Окт. 09, 2023, 20:05

« назад - далее »

ass1s

Всем привет! Есть такая проблема - пользователь юзал универсальный отчет (далее УО) и строил данные по регистру накопления за период. В отчете отображались данные: ОстатокНачалоПериода, ПриходСумма, РасходСумма, ОстатокКонецПериода. Я перенёс вариант отчета в систему компоновки данных вывел все необходимые данные и получил аналогичный отчет. Но проблема в том что при построении моего отчета не совпадает ОстатокКонецПериода с результатом УО. Я так понимаю что проблема в том, что в СКД я получаю остатки на конец периода в параметр равный дате КонецДня(ДатаОстатков), а нужно каким то образом использовать параметр равный ГраницеВремени. Так вот вопрос: Как в СКД вместо даты указать границу времени?

ass1s

Привет, брат) Сам недавно столкнулся с такой проблемой и долго бился над её решением. А оказалось все просто:
Для начала убедись что твой параметр имеет пустое выражение на закладке параметры скд (файл 1)

А затем тебе просто нужно установить его программно границей времени. Для примера это можно сделать в модуле отчета в процедуре ПриКомпоновкеРезультата() любым доступным тебе способом. Я сделал через методы БСП, ты можешь сделать по другому:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
ПользовательскиеНастройкиМодифицированы = Ложь;

УстановитьОбязательныеНастройки(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы);

// Сформируем отчет
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// Сообщим форме отчета, что настройки модифицированы
Если ПользовательскиеНастройкиМодифицированы Тогда
КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ПользовательскиеНастройкиМодифицированы", Истина);
КонецЕсли;

КонецПроцедуры

Процедура УстановитьОбязательныеНастройки(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы)

УстановитьКонецПериодаГраницаВремени(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы);

КонецПроцедуры

Процедура УстановитьКонецПериодаГраницаВремени(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы)

ПараметрПериодОтбор = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ПериодОтбор");
//ПараметрПериодОтбор.Использование = Истина;

//ПараметрДатаНачала = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ДатаНачала");
//ПараметрДатаНачала.Значение = Новый Граница(НачалоДня(ПараметрПериодОтбор.Значение.ДатаНачала), ВидГраницы.Включая);
//ПараметрДатаНачала.Использование = Истина;

ПараметрДатаОкончания = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ДатаОкончания");
ПараметрДатаОкончания.Значение = Новый Граница(КонецДня(ПараметрПериодОтбор.Значение.ДатаОкончания), ВидГраницы.Включая);
ПараметрДатаОкончания.Использование = Истина;


КонецПроцедуры

И после этого все заработает! У меня сошлось 1 в 1 с универсальным отчетом! Суть просто: установить параметру программно границу времени.  "Новый Граница(ДатаОкончания, ВидГраницы.Включая)". Я так понимаю в таких отчетах это нужно делать всегда. По крайней мере в типовых так делают. Удачи! Пример отчета прилагаю!

ass1s

Спасибо, то что нужно! Завтра протестирую и отпишусь!

Где Дэн?


vb

Сегодня рыбный день на СКД) Тоже попался отчет с несходящимися остатками, помогла статья на ИТС - Типичные проблемы при расчете остатков (ИТС)
ЦитироватьВ данной статье описывается, по какой причине отчет, созданный при помощи системы компоновки данных, может выдавать неправильные остатки.
Попался пример, на Отсутствие родительских полей-периодов в запросе.
Пример неправильного запроса (для такого запроса система рассчитать правильные остатки не может):
УчетНоменклатурыОстаткиИОбороты.Регистратор, 
 УчетНоменклатурыОстаткиИОбороты.Номенклатура, 
 УчетНоменклатурыОстаткиИОбороты.Склад, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоОборот 
ИЗ 
 РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты

Для устранения проблемы нужно обеспечить, чтобы в запросе присутствовало поле Период - ПериодСекунда.
Пример правильного запроса:
ВЫБРАТЬ 
 УчетНоменклатурыОстаткиИОбороты.Регистратор, 
 УчетНоменклатурыОстаткиИОбороты.ПериодСекунда, 
 УчетНоменклатурыОстаткиИОбороты.Номенклатура, 
 УчетНоменклатурыОстаткиИОбороты.Склад, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоОборот 
ИЗ 
 РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты

И аналогичная проблема возникает, когда используется периодичность отличная от Авто, если при этом в отчет выводятся не все поля-периоды.

Неправильный запрос:
ВЫБРАТЬ 
 УчетНоменклатурыОстаткиИОбороты.Регистратор, 
 УчетНоменклатурыОстаткиИОбороты.Период, 
 УчетНоменклатурыОстаткиИОбороты.Номенклатура, 
 УчетНоменклатурыОстаткиИОбороты.Склад, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоОборот 
ИЗ 
 РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Регистратор, , ) КАК УчетНоменклатурыОстаткиИОбороты

"Для решения проблемы лучше в запросах для настраиваемых отчетов системы компоновки данных, в виртуальных таблицах ОстаткиИОбороты, использовать периодичность Авто. Или обеспечить обязательных вывод всех полей-периодов в результат отчета".
Правильный:
ВЫБРАТЬ 
 УчетНоменклатурыОстаткиИОбороты.Регистратор, 
 УчетНоменклатурыОстаткиИОбороты.ПериодСекунда, 
 УчетНоменклатурыОстаткиИОбороты.Номенклатура, 
 УчетНоменклатурыОстаткиИОбороты.Склад, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток, 
 УчетНоменклатурыОстаткиИОбороты.КоличествоОборот 
ИЗ 
 РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты

Обратите внимание на наличие поля ПериодСекнда.

Где Дэн?

Да, нюансов в 1с-ке конечно тьма) - о которых мы можем только догадываться  ;D

Чат Полянка

Cheese_0:
2023-10-12, 12:25:42
Datamax особенно
Где Дэн?:
2023-10-12, 09:20:15
этикетки и принтеры это то еще удовольствие  ;D
Cheese_0:
2023-10-11, 12:07:24
Уууу я вернулся, 2 дня принтер для этикеток пытался настроить хахаха
Где Дэн?:
2023-10-09, 20:58:50
Потихоньку наполняю форум полезными темами и решениями, с которыми сам сталкиваюсь на практике.
Где Дэн?:
2023-10-08, 19:36:57
видос закинул веселый) на ютубчике - немного творчества в выходные
Где Дэн?:
2023-10-04, 23:22:59
Для незарегистрированных пользователей так же будет потихонечку пополняться пул обработок, доступных для скачивания и без регистрации....
Где Дэн?:
2023-10-04, 22:37:42
да, есть такое. Пускай здесь пока побудет - вроде не мешается и если что то можно блок с ним свернуть...что бы глаза не мазолил
Cheese_0:
2023-10-04, 22:35:59
Сразу чат стал удобнее
Где Дэн?:
2023-10-04, 22:33:31
файлы немного накидываю для зарегистрированных пользователей. Думаю скоро весь пул файлов полезных что есть здесь будет
Где Дэн?:
2023-10-04, 22:32:44
че за звезды? В принципе если так поговорить кому надо или спросить по быстрому оперативно - при наличии народа на сайте, то чат думаю удобно
Где Дэн?:
2023-10-04, 22:29:34
Да, перетащил его в другой блок) ;D
Cheese_0:
2023-10-04, 22:27:17
Где 5 звезд поставить?
Cheese_0:
2023-10-04, 22:27:06
ооооо чатик стал больше
Где Дэн?:
2023-10-04, 07:40:10
Что бы научиться программировать нужно всего лишь раз в день по утрам... ;D ;D
1cgod:
2023-10-03, 22:56:39
как же приятен форум без всяких реклам)