Имя: Пароль:
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) Мне пока не ведомы такие приемы. Где именно указать?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший