Имя: Пароль:
1C
1С v8
Как получить данные из подч. поля стадартного реквизита Регистратор регистра накопления?
,
0 Strategius
 
06.12.19
12:18
Здравствуйте.
Добавляю возможность вывода поля "Комментарий" в отчете "Ведомость по денежным средствам". Делаю это путем добавления группировки перед установкой начальных параметров:

Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
.........
     УниверсальныйОтчет.ДобавитьПолеГруппировка("Комментарий", "Регистратор", "Комментарий", НСтр("ru='Комментарий';uk='Коментар'"),,"ВЫРАЗИТЬ(ИсточникДанных.Регистратор.Комментарий КАК СТРОКА(300))");
.........
     УниверсальныйОтчет.УстановитьНачальныеНастройки(Истина);
.........
КонецПроцедуры // УстановитьНачальныеНастройки()

При открытии отчета выдает ошибку:

Поле не найдено "ИсточникДанных.Регистратор.Комментарий"
(ВЫРАЗИТЬ(<<?>>ИсточникДанных.Регистратор.Комментарий КАК СТРОКА(300))).* КАК Комментарий

В регистре накопления "ДенежныеСредства" реквизит "Регистратор" является стандартным. Можно ли из него в этом случае достать поле "Комментарий". Если "Регистратор" является измерением регистра, то все работает.
В ходе изучения проблемы пришел к тому, что дабавление группировки приводит к формированию следующего запроса в универсальном отчете:

"ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ИсточникДанных.ВидДенежныхСредств КАК ВидДенежныхСредств,
    ПРЕДСТАВЛЕНИЕ(ИсточникДанных.ВидДенежныхСредств) КАК ВидДенежныхСредствПредставление,
    ИсточникДанных.БанковскийСчетКасса КАК БанковскийСчетКасса,
    ПРЕДСТАВЛЕНИЕ(ИсточникДанных.БанковскийСчетКасса) КАК БанковскийСчетКассаПредставление,
    ИсточникДанных.Организация КАК Организация,
    ПРЕДСТАВЛЕНИЕ(ИсточникДанных.Организация) КАК ОрганизацияПредставление,
    ВЫРАЗИТЬ(ИсточникДанных.Регистратор.Комментарий КАК СТРОКА(300)) КАК Комментарий,
    ПРЕДСТАВЛЕНИЕ(ВЫРАЗИТЬ(ИсточникДанных.Регистратор.Комментарий КАК СТРОКА(300))) КАК КомментарийПредставление,
....."

Собственно, две последних строки и выдают ошибку, так как не могут получить данные из реквизита Регистратор. Если вместо реквизита будет использоваться измеренее, то данные нормально достаются.

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

то данные тоже нормально достаются.

Что не так с этим "ИсточникомДанным"?
1 vicof
 
06.12.19
12:24
Источник без данных по регистратору.Таблица остатков какая-нибудь.
2 Strategius
 
06.12.19
12:50
(1) Понятно, что источник без данных по регистратору, но почему? При получении данных перед формированием запроса:

     МетаданныеРегистра = Метаданные.РегистрыНакопления.Найти(ИмяРегистра); //Имя регистра ДенежныеСредства

в метаданных регистра все данные есть:

     МетаданныеРегистра.СтандартныеРеквизиты.Регистратор.Комментарий = ""

Куда пропадает доступ к Регистратор.Комментарий?
3 vicof
 
06.12.19
12:54
(2) Ты в хоть показал из какой таблицы ты тянешь данные
4 Strategius
 
06.12.19
12:57
Написано выше - из регистра накопления "ДенежныеСредства"
5 Strategius
 
06.12.19
12:58
или какая таблица имеется ввиду?
6 Strategius
 
06.12.19
13:24
(1) Спасибо за наводку. Досмотрел. Хотя в "МетаданныеРегистра = Метаданные.РегистрыНакопления.Найти(ИмяРегистра)" и указывался регистр ДенежныеСредства, однако построитель запроса в универсальном отчете добавлял к имени регистра ".ОстаткиИОброты" и получалось фактически тянутся данные из регистра "ДенежныеСредства.ОстаткиИОброты". Хотя проблема и не решена. Копаю дальше
7 shuhard
 
06.12.19
13:29
(6) посмотри отладчиком у универсального отчета сформированный запрос,не факт, что обороты по регистратору и точно комментарий не измерение.

и для УТ 10.3 проще сделать свой отчет на СКД, чем париться с универсальным
8 vicof
 
06.12.19
14:13
(6) Детализацию до регистратора укажи
9 Strategius
 
06.12.19
14:34
(7) Так и делаю.
(7), (8). Беда в том, что построитель запроса, прописанный в универсальном отчете, сам формирует название подчиненного регистра в зависимости от назначения отчета. Таким образом, если отчет по оборотам, то данные он будет брать не указанного регистра "ДенежныеСредства", а из регистра "ДенежныеСредства.ОстаткиИОбороты". Вот кусок кода:
    Если Обороты Тогда
        ОписаниеИсточниковЗапроса =    "
        |ИЗ РегистрНакопления." + ИмяРегистра + ".Обороты(&ДатаНач, &ДатаКон, Регистратор {&Периодичность}, {" +
        ОписаниеИсточниковЗапроса + "}) КАК ИсточникДанных
    Иначе
        ОписаниеИсточниковЗапроса =    "
        |ИЗ РегистрНакопления." + ИмяРегистра + ".ОстаткиИОбороты(&ДатаНач, &ДатаКон, Регистратор {&Периодичность},, {" +
        ОписаниеИсточниковЗапроса + "}) КАК ИсточникДанных";
    КонецЕсли;

В свою очередь в последнем, хоть реквизит "Регистратор" и присутствует, но для коснтруктора запросов недоступен. Сейчас разбираюсь почему.
10 Strategius
 
10.12.19
13:31
В общем, для вывода комментариев из документа движения в отчете "Ведомость по денежным средствам" пришлось добавить измерение "ДокументДвижения" в регистр накопления "ДенежныеСредства", и прописывать его движения по всем требуемым модулям и документам. По другому не получилось :(
11 d4rkmesa
 
10.12.19
13:36
(10) Ужос. Не проще было, действительно, переделать отчет на СКД? Кстати, тут в (8) правильно написали, не получилось?
12 shuhard
 
10.12.19
13:59
(10)[пришлось добавить измерение "ДокументДвижения" в регистр накопления "ДенежныеСредства", ]
что, уже НГ ?
13 Strategius
 
20.12.19
11:02
(11) На СКД делаю само-собой, но там другие грабли. Отчет выглядит так:
https://i111.fastpic.ru/big/2019/1220/b1/c6217d90391688fdeae1878ba70e41b1.jpg

Не могу добиться, чтобы в диаграмме был отбор только для подгрупп "Заказчики" и "Прочие доходы". В лучшем случае получается так, как на картинке. В худшем - выводит всю иерархию.

(8) (11) Мне пока не ведомы такие приемы. Где именно указать?
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.