|
Поле не найдено "Регистратор" happysan, Михаил_, Timon1405, shuhard, Галахад, ReaLg, Шаграм, Metman, bolder, Олдж, X Leshiy, Hawk_1c, Ненавижу 1С, kir-g, Lama12, _Batoo, ОператорПК, PR, Fish, viraboy, yurikmellon2, arsik, kittystark, okmail, Gucci76, Franchiser, AlexKimp, San787, Amra, Vstur, Homer, Eiffil123, СеньорПрограммист, Шурик71, Волшебник, d4rkmesa
| ☑ | ||
|---|---|---|---|---|
|
0
happysan
14.09.26
✎
16:27
|
Доброго времени суток!
Как говорил политик 90-х В.Черномырдин: "Никогда такого не было, и вот опять!». Создаю программную расшифровку в СКД: Набор данных(делалось и через "ВЫРАЗИТЬ", и без группировок, и тип периода в параметрах виртуальной таблицы менялся): ВЫБРАТЬ СоставКнигиПокупок.Регистратор КАК Регистратор, СУММА(СоставКнигиПокупок.НДСОборот) КАК РасшифровкаСтроки120 ПОМЕСТИТЬ ВТ_РасшифровкаСтроки120 ИЗ РегистрНакопления.НДСЗаписиКнигиПокупок.Обороты( &НачалоПериода, &КонецПериодаГраница, Запись, Организация В (&Организация) И Поставщик = &Контрагент И Событие <> ЗНАЧЕНИЕ(Перечисление.СобытияПоНДСПокупки.ПредъявленНДСКВычету0) И НЕ ЗаписьДополнительногоЛиста И ТИПЗНАЧЕНИЯ(СчетФактура) <> ТИП(Документ.СводнаяСправкаНДС)) КАК СоставКнигиПокупок СГРУППИРОВАТЬ ПО СоставКнигиПокупок.Регистратор Код расшифровки: &НаСервере Функция ПолучитьПараметрыОсновнойСКД(Контрагент) ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ПараметрыКомпоновкиОрганизация = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных; ПараметрКомпоновкиОрганизация = ПараметрыКомпоновкиОрганизация.Элементы.Найти("Организация"); ИдентификаторНастройкиОрганизация = ПараметрКомпоновкиОрганизация.ИдентификаторПользовательскойНастройки; КоллекцияОрганизация = ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; ПараметрПользовательскихНастроекОрганизация = КоллекцияОрганизация.Найти(ИдентификаторНастройкиОрганизация); Если ПараметрПользовательскихНастроекОрганизация <> Неопределено Тогда ЗначениеОрганизации = ПараметрПользовательскихНастроекОрганизация.Значение; КонецЕсли; ПараметрыКомпоновкиПериод = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных; ПараметрКомпоновкиПериод = ПараметрыКомпоновкиПериод.Элементы.Найти("Период"); ИдентификаторНастройкиПериод = ПараметрКомпоновкиПериод.ИдентификаторПользовательскойНастройки; КоллекцияПериод = ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы; ПараметрПользовательскихНастроекПериод = КоллекцияПериод.Найти(ИдентификаторНастройкиПериод); Если ПараметрПользовательскихНастроекПериод <> Неопределено Тогда ЗначениеПериод = ПараметрПользовательскихНастроекПериод.Значение; КонецЕсли; // Ищем нужный вариант по имени, заданному в конфигураторе Вариант = ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.Найти("Расшифровка строки 120 по юр. лицам"); Если Вариант <> Неопределено Тогда КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(Вариант.Настройки.ПараметрыДанных, ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных); // Загружаем настройки варианта в компоновщик ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(Вариант.Настройки); КонецЕсли; НастройкиОтчета = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки(); КомпоновкаДанныхКлиентСервер.УстановитьПараметр(НастройкиОтчета, "Организация", ЗначениеОрганизации); КомпоновкаДанныхКлиентСервер.УстановитьПараметр(НастройкиОтчета, "Период", ЗначениеПериод); КомпоновкаДанныхКлиентСервер.УстановитьПараметр(НастройкиОтчета, "Контрагент", Контрагент); КомпоновкаДанныхКлиентСервер.УстановитьПараметр(ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки, "Организация", ЗначениеОрганизации); КомпоновкаДанныхКлиентСервер.УстановитьПараметр(ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки, "Период", ЗначениеПериод); НастройкиОтчета = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки(); СхемаКомпоновки = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); // Инициализация компоновщика КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки()); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина); КонецФункции При попытке расшифровки выдаёт сообщение "Поле не найдено "Регистратор"". Если кто-то в курсе, что системе нужно, то буду признателен в содействии! |
|||
|
1
yurikmellon2
14.09.26
✎
16:36
|
(0) позабыты хлопоты, остановлен бег
вкалывают роботы, а не человек GLM-5.3-Flash пишет что: Что означает эта ошибка «Поле не найдено "Регистратор"» — это ошибка компоновщика, а не запроса. Она возникает, когда в настройках (группировка, выбранные поля, отбор, сортировка) есть поле Регистратор, а в наборе данных макета такого поля нет. В вашем случае это почти наверняка происходит по одной из причин ниже. Причина №1 (самая вероятная): запрос набора заканчивается на ПОМЕСТИТЬ Запрос набора данных СКД обязан возвращать таблицу. Если пакетный запрос заканчивается на ПОМЕСТИТЬ ВТ_..., результат запроса не содержит ни строк, ни полей — набор данных получается «пустым», и любое поле из настроек варианта становится «не найденным». Добавьте вторую часть пакета: bsl ВЫБРАТЬ СоставКнигиПокупок.Регистратор КАК Регистратор, СУММА(СоставКнигиПокупок.НДСОборот) КАК РасшифровкаСтроки120 ПОМЕСТИТЬ ВТ_РасшифровкаСтроки120 ИЗ РегистрНакопления.НДСЗаписиКнигиПокупок.Обороты( &НачалоПериода, &КонецПериодаГраница, Запись, ...) КАК СоставКнигиПокупок СГРУППИРОВАТЬ ПО СоставКнигиПокупок.Регистратор ; // ОБЯЗАТЕЛЬНО: финальная выборка — именно она формирует поля набора данных ВЫБРАТЬ ВТ.Регистратор КАК Регистратор, ВТ.РасшифровкаСтроки120 КАК РасшифровкаСтроки120 ИЗ ВТ_РасшифровкаСтроки120 КАК ВТ Кстати, СГРУППИРОВАТЬ ПО Регистратор и СУММА() в запросе вообще не нужны — СКД сама сгруппирует по Регистратору, если в варианте настроек настроены группировка по Регистратор и ресурс Сумма(РасшифровкаСтроки120). После правки запроса проверьте на вкладке «Поля» набора данных, что Регистратор появился и у него не стоит «Ограничение доступности». Причина №2: периодичность виртуальной таблицы Поле Регистратор в таблице Обороты существует только при периодичности «Запись» (или «Регистратор»). При периодичности «Период»/«Авто» ошибка будет точно такой же. Оставьте третий параметр = Запись. Причина №3: настройки варианта ссылаются на старый набор полей Если вариант «Расшифровка строки 120 по юр. лицам» настраивался при другой редакции запроса (до добавления ПОМЕСТИТЬ, с другой периодичностью и т.п.), в его структуре осталась группировка/отбор по несуществующему пути. Откройте вариант в конфигураторе и проверьте, что все поля в группировках, отборе и порядке соответствуют актуальным полям набора (и это Регистратор, а не СоставКнигиПокупок.Регистратор). Причина №4: две разные схемы В коде настройки берутся из ОтчетОбъект.СхемаКомпоновкиДанных, а макет — из ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"). Если схема отчёта назначается программно (типовые отчёты на БСП так делают), это могут быть разные схемы, и поля не совпадут. Используйте один и тот же источник схемы в обоих местах. Ошибки в самом коде «Контрагент» устанавливается в никуда: вы кладёте его в переменную НастройкиОтчета, а в КомпоновщикМакета.Выполнить() передаёте заново полученный ПолучитьНастройки(). Параметр теряется. СкопироватьЭлементы(...) выполняется до ЗагрузитьНастройки(), которая всё перезатирает — бессмысленно. УстановитьПараметр в пользовательских настройках работает только для параметров, которые включены в пользовательские настройки (существуют как элементы коллекции) — иначе молча не сработает. Надёжнее не трогать компоновщик основного отчёта, а работать с настройками варианта напрямую: bsl &НаСервере Процедура ВывестиРасшифровку(Контрагент) ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); Схема = ОтчетОбъект.СхемаКомпоновкиДанных; Вариант = Схема.ВариантыНастроек.Найти("Расшифровка строки 120 по юр. лицам"); Настройки = ?(Вариант = Неопределено, Схема.НастройкиПоУмолчанию, Вариант.Настройки); УстановитьПараметр(Настройки, "Организация", ЗначениеОрганизации); УстановитьПараметр(Настройки, "НачалоПериода", ЗначениеПериод.ДатаНачала); УстановитьПараметр(Настройки, "КонецПериодаГраница", Новый Граница(ЗначениеПериод.ДатаОкончания, ВидГраницы.Включая)); УстановитьПараметр(Настройки, "Контрагент", Контрагент); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; Макет = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки); Результат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры Как быстро продиагностировать Откройте схему в конфигураторе → набор данных → вкладка «Поля»: есть ли там Регистратор физически. Если поля нет — проблема в запросе (пункты 1–2 выше). Если поле есть — проблема в настройках варианта: проверьте группировки/отбор/порядок на несуществующие пути. В 90% случаев при такой ошибке с виртуальной таблицей оборотов виновато именно отсутствие финальной выборки после ПОМЕСТИТЬ. |
|||
|
2
Lama12
14.09.26
✎
16:46
|
Мда... мельчаем 😒
|
|||
|
3
happysan
14.09.26
✎
17:22
|
(1) Благодарю)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |