Ошибка при установке значения атрибута контекста группировка

Содержание:

1.       Ошибка при установке значения атрибута контекста

2.       Ошибка при получении значения атрибута контекста

Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.  

1.    Ошибка при установке значения атрибута контекста

Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута. 

Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.  

2.    Ошибка при получении значения атрибута контекста

Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.

При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).  

Специалист компании «Кодерлайн»

Александр Суворов

Программная настройка СКД

Я

  

Кондидат В

11.02.19 — 09:05

Ребят, всем привет!

Необходимо настроить выгрузку данных в JSON из отчета.

Сделал обработку, которая на основе СКД отчета получет данные.

Делаю так:

    СКД = Отчеты.Выработка.ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»);

    Настройки = СКД.НастройкиПоУмолчанию;    

    Настройки.Структура.Очистить();

    Группировка = Настройки.Структура.Добавить(Тип(«ГруппировкаКомпоновкиДанных»));

    Группировка.Использование = Истина;

    

    Для Каждого КиЗ ИЗ СтруктураПолей Цикл

        ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип(«ВыбранноеПолеКомпоновкиДанных»));

        ВыбранноеПоле.Заголовок = КиЗ.Ключ;

        ВыбранноеПоле.Использование = Истина;

        ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(КиЗ.Значение);

    КонецЦикла;

Данные вывожу в ТЗ, но в ней выводится итоговая строка. Собственно вопрос в том, какой настройкой обрать ее?

В коллекции Группировка.ПараметрыВывода.ДоступныеПараметры.Элементы получить ее по имени не могу через [], как и через Настройки

  

Nikoss

1 — 11.02.19 — 09:16

(0) имхо, нужно программно настройку СКД поправить, с вкладки «Другие настройки», «Расположение итого» = Нет

  

Кондидат В

2 — 11.02.19 — 09:19

(1) Вот и не могу программно найти где в НЕТ выставить группировку.

В сам отчет лезть не хочу :)

  

toypaul

3 — 11.02.19 — 09:28

в отладчике разве не показывает все параметры в списке Группировка.ПараметрыВывода.ДоступныеПараметры.Элементы

?

  

Кондидат В

4 — 11.02.19 — 09:30

(3) Эту коллекцию я видел. Изменить ее не могу :(

  

Кондидат В

5 — 11.02.19 — 09:32

Забивая Группировка.ПараметрыВывода.Элементы[«РасположениеИтогов»] получаю {(1)}: Поле объекта не обнаружено (РасположениеИтогов)

  

toypaul

6 — 11.02.19 — 09:32

ПараметрыВывода.УстановитьЗначениеПараметра ?

  

Кондидат В

7 — 11.02.19 — 09:37

(6) Спасибо.

Помогла УстановитьЗначениеПараметра(«РасположениеИтогов», РасположениеИтоговКомпоновкиДанных.Нет)

  

Кондидат В

8 — 11.02.19 — 11:58

===========================================

Еще вопрос по СКД:

А как добавить группу ИЛИ в отборы программно?

  

toypaul

9 — 11.02.19 — 12:12

Группа = Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Группа.ТипГруппы  = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

  

Кондидат В

10 — 12.02.19 — 07:58

И снова подниму вопрос.

Я тут когнитивный диссонанс поймал.

В общем решил дать пользователю возможность настроек отбора, для чего в обработку добавил реквизит «КомпоновщикНастроек» типа КомпоновщикНастроекКомпоновкиДанных. В процедуре при открытии прописал следующий код:

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

    Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    Группировка.Использование = Истина;


И в нем предпоследняя строка дает ошибку: 

{Обработка.ВыгрузкаНМГР.Форма.Форма.Форма(70)}: Ошибка при установке значения атрибута контекста (Группировка)
    Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));

Несоответствие типов

хотя следующий код

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

прекрасно отрабатывает.

Посмотрел в отладчике тип структуры, в обоих случаях это "КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных"

Может кто подскажет направление рытья???

  

toypaul

11 — 12.02.19 — 08:14

не надо было добавлять КомпоновщикНастроек в объект. можно обойтись добавлением его на форму.

вот это вообще не пойму как работает в при открытии

ОбработкаОбъект = РеквизитФормыВЗначение("Объект");

оно не должно там работать

  

Кондидат В

12 — 12.02.19 — 08:17

(11) ну так на клиенте вызываю серверную ПриОткрытии

  

Кондидат В

13 — 12.02.19 — 08:18

+(12) На форму в параметры или в реквизиты лучше пихнуть?

  

DrZombi

14 — 12.02.19 — 08:59

(0) Долго, лень читать….

Вот, в древо значений… это из ЗУП 3.1

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

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

    //Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СвойствоВодитель",         мСвойствоВодитель);

    //Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок",            Заголовок);

    
    //Установить отбор...

    ЭлементыОтборов = Настройки.Отбор.Элементы;
    
    Если ЗначениеЗаполнено(Подразделение) Тогда
        ЭлемОтбора = ЭлементыОтборов[1];
        ЭлемОтбора.Использование = Истина;
        ЭлемОтбора.ПравоеЗначение = Подразделение;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(Должность) Тогда
        ЭлемОтбора = ЭлементыОтборов[2];
        ЭлемОтбора.Использование = Истина;
        ЭлемОтбора.ПравоеЗначение = Должность;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(Сотрудник) Тогда
        ЭлемОтбора = ЭлементыОтборов[3];
        ЭлемОтбора.Использование = Истина;
        ЭлемОтбора.ПравоеЗначение = Сотрудник;
    КонецЕсли;
    
    //Помещаем в переменную данные о расшифровке данных - здесь ненужный пункт, но пусть будет.

    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    
    //Формируем макет, с помощью компоновщика макета

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    //Передаем в макет компоновки схему, настройки и данные расшифровки

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

    //ДопСвойства.Вставить("ОтчетПустой", ДанныеОтчета.Строки.Количество() = 0);

    
    //РезультатКомпоновкиМакета.Вставить("ДанныеОтчета", ДанныеОтчета);

    
    //ДопСвойства = КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства;

    //ДопСвойства.Вставить("ОтчетПустой", ДанныеОтчета.Строки.Количество() = 0);

    //РезультатКомпоновкиМакета.Вставить("ДанныеОтчета", ДанныеОтчета);

    
    Объект.Сотрудники.Очистить();
    ТЗ = Объект.Сотрудники.Выгрузить();
    
    Для Каждого СтрокаУр1 Из ДанныеОтчета.Строки Цикл 
        Для Каждого СтрокаУр2 Из СтрокаУр1.Строки Цикл 
            Для Каждого СтрокаУр3 Из СтрокаУр2.Строки Цикл 
                
                НовСтрокаТЗ = ТЗ.Добавить();
                НовСтрокаТЗ.Сотрудник = СтрокаУр3.РабочееМестоСотрудник;
                НовСтрокаТЗ.НомерДоговора = СтрокаУр3.РабочееМестоТрудовойДоговорНомер;
                НовСтрокаТЗ.ДатаДоговора = СтрокаУр3.РабочееМестоТрудовойДоговорДата;
                НовСтрокаТЗ.Оклад = СтрокаУр3.РабочееМестоТарифнаяСтавка;
                НовСтрокаТЗ.Подразделение = СтрокаУр3.РабочееМестоПодразделение;
                НовСтрокаТЗ.Должность = СтрокаУр3.РабочееМестоДолжность;
                
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    
    Объект.Сотрудники.Загрузить(ТЗ);

  

Кондидат В

15 — 12.02.19 — 12:38

*****************************************************

Спасибо всем участникам. Для завершенности ветки добавлю от себя:

1. КомпоновщикНастроекКомпоновкиДанных давал ошибку при добавлении группировки, потому что вызывался из модуля формы. Перенес в модуль обработки и все заработало.

2. Для того, что бы КомпоновщикНастроекКомпоновкиДанных увидел все настройки инициировать его надо через временное хранилище

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

  

singlych

16 — 12.02.19 — 12:51

(13) Он там и так есть как реквизит отчета.

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

  

singlych

17 — 12.02.19 — 12:54

(16) А, там обработка у тебя. Я бы реквизит формы сделал.

  

Кондидат В

18 — 12.02.19 — 13:32

(17) обработкой первое время будут отправлять данные вручную (для проверки корректности), затем она должна будет по расписанию запускаться. Поэтому через реквизиты делал

Ошибка при установке значения атрибута контекста (СписокВыбора)

Данная ошибка возникает при попытке установить полю с типом «СписокЗначений» значение неподходящего типа. Например: Неопределено. 

Полная ошибка

Ошибка при установке значения атрибута контекста (СписокВыбора)
ЭлементыФормы.Поставщик.СписокВыбора = КЭШируемые.СписокПоставщиков(Контрагент);
по причине:
Несоответствие типов

Скриншот:oshibka-ustanovki-spiska-vybora

Причина: В функции, которая формировала данный список (КЭШируемые.СписокПоставщиков()) отсутствовал возврат значения.


В экспериментальных целях:

передал значение с типом «Массив»  — текст ошибки не поменялся.

В итоге переписал на более универсальный метод ЗагрузитьЗначения() самого элемента диалога:

ЭлементыФормы.Поставщик.СписокВыбора.ЗагрузитьЗначения(КЭШируемые.СписокПоставщиков(Контрагент));

Впервые в истории планеты Земля все люди во всех странах задались единой целью: заработать столько денег, чтобы уподобиться героям рекламы.



1 февраля, 2017
21 апреля, 2017

Дано

  • 1С конфигурация бухгалтерия предприятия 2.0
  • Ошибка печати ПКО (приходный кассовый ордер):

{ОбщаяФорма.ФормаПечати.Форма(18)}: Ошибка при установке значения атрибута контекста

   ЭлементыФормы.ПолеДокумента.ПолеСверху

по причине:

Несоответствие типов

Анализ проблемы

На первый взгляд все ужасно:

  • в конфигураторе видно, что система пытается выполнить строчку кода:

ЭлементыФормы.ПолеДокумента.ПолеСверху          = ПечатныйДокумент.ПолеСверху;

  • в отладке видно, что обе переменные типа “Число”,
  • синтакс-помощник говорит что:

ТабличныйДокумент (SpreadsheetDocument)

ПолеСверху (TopMargin)

Использование:

Чтение и запись.

То есть ПолеСверху доступно для записи и обе переменные типа число и все тут корректно, но система говорит “Несоответствие типов” – полный бред.

Решение

На решение проблемы натолкнула фраза “Ошибка при установке значения атрибута контекста”, значит что-то не так с доступом.
Оказалось в базе нет ни одного пользователя и работа осуществлялась под пользователем НеАвторизован. После создания пользователя с необходимыми правами все заработало.

Дополнено 2017.04.10

Проблема повторилась, но уже при печати РТУ и с использованием уже настроенной учетной записи.

Помогло создание нового пользователя с такими же правами доступа. То есть нового создаем, старого удаляем и после этого все работает.

Ошибка при получении значения атрибута контекста (ТекущийПользователь)

bless18
06.04.2010 09:32 Прочитано: 49756

Ошибка при получении значения атрибута контекста (ТекущийПользователь): Попытка получения неинициализированного значения параметра сеанса
Пользователь = ПараметрыСеанса.ТекущийПользователь;
по причине:
Попытка получения неинициализированного значения параметра сеансаКод 1C v 8.х

 Процедура ПриНачалеРаботыСистемы()
Пользователь = ПараметрыСеанса.ТекущийПользователь;
Если обЗначениеНеЗаполнено(Пользователь.Сотрудник) Тогда
ИмяПользователя = СокрЛП(Пользователь.Наименование);
Иначе
ИмяПользователя = СокрЛП(Пользователь.Сотрудник.Наименование);
КонецЕсли;
Предупреждение("Здравствуйте уважаемый пользователь """+ИмяПользователя+"""
|Система готова к работе.", 3);
КонецПроцедуры

Где происходит их инициализация?

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
06.04.2010 09:48 Ответ № 1

Когда в Общие — Параметры сеанса добавил ТекущийПользователь, то его нужно определять при загрузке:
так же в процедуре ПриНачалеРаботыСистемы пишешь что то типо:
Код 1C v 8.х

 ИмяПользователя = ИмяПользователя();
Если Не ПустаяСтрока(ИмяПользователя) Тогда
ТекущийПользователь = Справочники.Пользователи.НайтиПоКоду(ИмяПользователя);
КонецЕсли;
ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь;

Это работает при условии, что ИмяПользователя заданное в конфигураторе, равно Имени введенному в справочнике Пользователей в реквизит Код

bless18
06.04.2010 09:56 Ответ № 2

А если не совпадают, можно как-нибудб привязать пользователя к сотруднику?

E_Migachev
06.04.2010 09:57 Ответ № 3

А лучше добавить процедуру в Модуль сеанса(Правой клавишей щелкаещь на названии конфигурации и выбираешь Открыть модуль сеанса)

В ней создаешь Процедура УстановкаПараметровСеанса () и в ней пишешь код который я предложил выше или так, Если не совпадают:

Код 1C v 8.х

 Процедура УстановкаПараметровСеанса()
Спр = Справочники.Сотрудники;
ПараметрыСеанса.ТекущийПользователь=Спр.НайтиПоРеквизиту("Пользователь1С", ИмяПользователя());
КонецПроцедуры
//где Пользователь1С, это реквизит справочника сотрудники, и именем как вбито в конфигураторе

Эта процедура вызывается раньше чем ПриНачалеРаботыСистемы.

Ну а дальше подставлять сопоставленное значение при создании соответствующего документа:

Код 1C v 8.х

  Док.Пользователь=ПараметрыСеанса.Пользователь;   

События модуля сеанса:
Глобальный контекст
УстановкаПараметровСеанса (SessionParametersSetting)
Синтаксис:
УстановкаПараметровСеанса(<Требуемые параметры>)
Параметры:
<Требуемые параметры>
Тип: Массив; Неопределено. Массив устанавливаемых идентификаторов параметров сеанса, которые нужно инициализировать, если обработчик вызывается перед использованием неинициализированных параметров сеанса.
Неопределено, если обработчик события вызывается системой при начале сеанса или при захвате соединения из пула.
Описание:
Событие предназначено для инициализации параметров сеанса.
Вызывается системой:
при установке соединения с информационной базой или при захвате соединения с информационной базой из пула до вызова всех остальных обработчиков. Значение параметра «Параметры сеанса» — Неопределено;
перед фактическим использованием значений параметров сеанса, которые не были инициализированы ранее. В этом случае значением параметра «Параметры сеанса» является массив идентификаторов неинициализированных параметров сеанса, значения которых используются. Если после выполнения обработчика хотя бы один из перечисленных параметров сеанса остается неинициализированным, то возникает исключение.

bless18
06.04.2010 12:13 Ответ № 4

Спасибо вам огромное! Вы мне очень помогли!

bless18
06.04.2010 12:15 Ответ № 5

Спасибо вам огромное! Вы мне очень помогли!

E_Migachev
06.04.2010 15:44 Ответ № 6

Пожалуйста )

Подсказка: Для быстрого поиска ответов — используйте ‘Поиск’

Утро доброе. Установил 1с на новый компьютер, захожу под любым пользователем, выдает такую ошибку: {МодульПриложения}: Ошибка при установке значения атрибута контекста (***): Несоответствие типов В инете, нашел подобную проблему, только, приравнивание идет к ТекущийПользователь. Там проблема решается чисткой профиля в windows. А как решить, данную, проблему? Комп находиться на расстоянии, профиль почищу, как доберусь, просто хотел узнать, может загвоздка в другом.

Компьютер=Неопределено у тебя скорее всего.

Хм, база одна на 20 компов, проблема только с этим. Неопределенность смотреть в том же модуле?

Смотри  где определяется переменная Компьютер

Переменная Компьютер берется из запроса. Вот кусок кода:

Что будет, если Выборка.Следующий = Ложь?

На моем компе, ни чего не меняется =) На том, посмотреть не могу, плюс, если поменяю код, придется выгонять всех пользователей, что бы обновить, либо ждать, пока ночью обновиться.

Я же написал, что не могу проверить. У себя изменил, в тестовой, все работает.

может получится так, что в справочнике смсКомпьютеры нет наименования проблемного компьютера.

Думал над этим, только, почему программа его не добавляет.

А как, по другому, имя компьютера там появится? =) Перед этим, устанавливал на другие компьютеры 1с, делал все тоже самое — все работает. У меня есть подозрение, что не порядки с правами в винде. С админами сейчас поговорю, они как раз, в том здании, где комп.

[А как, по другому, имя компьютера там появится? =)] Например, пользователь руками создаст элемент справочника. Для это нужно запустить приложение в режиме 1с:Предприятие.

Сейчас попробую. Просто не делал ни когда такого, не требовалось.

Справочник заполняется программой. Таки думаю, что с правами косяк.

так есть в справочнике элемент с наименованием того компьютера?

В справочнике нет наименования. Зашел в другую базу, с этого же сервера — все работает (правда не создавал нового пользователя в этой базе, зашел под админом). Зашел в другую базу, с другого сервера — аналогично, все работает. Не работает одна единственная база, хотя, базы, у которых идентичный код, с неработающей и находящиеся на том же сервере, так же работают. Добавил в справочник наименование компьютера. Пойду смотреть.

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

[Помогло добавление справочника.] Ну вообще это очевидно сразу было — первым делом проверить есть ли в этом справочнике элемент с именем этого компьютера;)

Мысля то была, просто, при установки программы на новый комп и добавлении нового пользователя ни когда его не заполнял.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Программная настройка СКД

Я
   Кондидат В

11.02.19 — 09:05

Ребят, всем привет!

Необходимо настроить выгрузку данных в JSON из отчета.

Сделал обработку, которая на основе СКД отчета получет данные.

Делаю так:

    СКД = Отчеты.Выработка.ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»);

    Настройки = СКД.НастройкиПоУмолчанию;    

    Настройки.Структура.Очистить();

    Группировка = Настройки.Структура.Добавить(Тип(«ГруппировкаКомпоновкиДанных»));

    Группировка.Использование = Истина;

    
    Для Каждого КиЗ ИЗ СтруктураПолей Цикл

        ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип(«ВыбранноеПолеКомпоновкиДанных»));

        ВыбранноеПоле.Заголовок = КиЗ.Ключ;

        ВыбранноеПоле.Использование = Истина;

        ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(КиЗ.Значение);

    КонецЦикла;

Данные вывожу в ТЗ, но в ней выводится итоговая строка. Собственно вопрос в том, какой настройкой обрать ее?

В коллекции Группировка.ПараметрыВывода.ДоступныеПараметры.Элементы получить ее по имени не могу через [], как и через Настройки

   Nikoss

1 — 11.02.19 — 09:16

(0) имхо, нужно программно настройку СКД поправить, с вкладки «Другие настройки», «Расположение итого» = Нет

   Кондидат В

2 — 11.02.19 — 09:19

(1) Вот и не могу программно найти где в НЕТ выставить группировку.

В сам отчет лезть не хочу :)

   toypaul

3 — 11.02.19 — 09:28

в отладчике разве не показывает все параметры в списке Группировка.ПараметрыВывода.ДоступныеПараметры.Элементы

?

   Кондидат В

4 — 11.02.19 — 09:30

(3) Эту коллекцию я видел. Изменить ее не могу :(

   Кондидат В

5 — 11.02.19 — 09:32

Забивая Группировка.ПараметрыВывода.Элементы[«РасположениеИтогов»] получаю {(1)}: Поле объекта не обнаружено (РасположениеИтогов)

   toypaul

6 — 11.02.19 — 09:32

ПараметрыВывода.УстановитьЗначениеПараметра ?

   Кондидат В

7 — 11.02.19 — 09:37

(6) Спасибо.

Помогла УстановитьЗначениеПараметра(«РасположениеИтогов», РасположениеИтоговКомпоновкиДанных.Нет)

   Кондидат В

8 — 11.02.19 — 11:58

===========================================

Еще вопрос по СКД:

А как добавить группу ИЛИ в отборы программно?

   toypaul

9 — 11.02.19 — 12:12

Группа = Добавить(Тип(«ГруппаЭлементовОтбораКомпоновкиДанных»));

Группа.ТипГруппы  = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

   Кондидат В

10 — 12.02.19 — 07:58

И снова подниму вопрос.

Я тут когнитивный диссонанс поймал.

В общем решил дать пользователю возможность настроек отбора, для чего в обработку добавил реквизит «КомпоновщикНастроек» типа КомпоновщикНастроекКомпоновкиДанных. В процедуре при открытии прописал следующий код:

    ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»);

    СКД = Отчеты.Выработка.ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»);

    ОбработкаОбъект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));

    ОбработкаОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);

    Настройки = ОбработкаОбъект.КомпоновщикНастроек.Настройки;

    
    МассивЭлементовОтбора = Новый Массив;

    Для Каждого ЭлементОтбора ИЗ Настройки.Отбор.Элементы Цикл

        МассивЭлементовОтбора.Добавить(ЭлементОтбора);    

    КонецЦикла;

    Для Каждого ЭлементОтбора ИЗ МассивЭлементовОтбора Цикл

        Настройки.Отбор.Элементы.Удалить(ЭлементОтбора);    

    КонецЦикла;

    Настройки.Структура.Очистить();

    Настройки.ПараметрыВывода.УстановитьЗначениеПараметра(«ВертикальноеРасположениеОбщихИтогов», РасположениеИтоговКомпоновкиДанных.Нет);

    Группировка = Настройки.Структура.Добавить(Тип(«ГруппировкаКомпоновкиДанных»));

    Группировка.Использование = Истина;

И в нем предпоследняя строка дает ошибку:

{Обработка.ВыгрузкаНМГР.Форма.Форма.Форма(70)}: Ошибка при установке значения атрибута контекста (Группировка)

    Группировка = Настройки.Структура.Добавить(Тип(«ГруппировкаКомпоновкиДанных»));

Несоответствие типов

хотя следующий код

    СКД = Отчеты.Выработка.ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»);

    Настройки = СКД.НастройкиПоУмолчанию;

    
    Настройки.Структура.Очистить();

    Настройки.ПараметрыВывода.УстановитьЗначениеПараметра(«ВертикальноеРасположениеОбщихИтогов», РасположениеИтоговКомпоновкиДанных.Нет);

    
    Группировка = Настройки.Структура.Добавить(Тип(«ГруппировкаКомпоновкиДанных»));

    Группировка.Использование = Истина;

прекрасно отрабатывает.

Посмотрел в отладчике тип структуры, в обоих случаях это «КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных»

Может кто подскажет направление рытья???

   toypaul

11 — 12.02.19 — 08:14

не надо было добавлять КомпоновщикНастроек в объект. можно обойтись добавлением его на форму.

вот это вообще не пойму как работает в при открытии

ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»);

оно не должно там работать

   Кондидат В

12 — 12.02.19 — 08:17

(11) ну так на клиенте вызываю серверную ПриОткрытии

   Кондидат В

13 — 12.02.19 — 08:18

+(12) На форму в параметры или в реквизиты лучше пихнуть?

   DrZombi

14 — 12.02.19 — 08:59

(0) Долго, лень читать….

Вот, в древо значений… это из ЗУП 3.1

    Обработка = РеквизитФормыВЗначение(«Объект»);    

    СхемаКомпоновкиДанных = Обработка.ПолучитьМакетОтчета2(«ОтчетыПоСотрудникамРасширенный»);

    
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных();

    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

    
    СтрОбъект = Новый Структура();

    СтрОбъект.Вставить(«СхемаКомпоновкиДанных»,СхемаКомпоновкиДанных);

    СтрОбъект.Вставить(«КомпоновщикНастроек»,КомпоновщикНастроек);

    
    ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(СтрОбъект, СоответсвиеДополнительныхПолейПредставлениям);

    
    //создадим компоновщик настроек и загрузим настройки по умолчанию, вместо настроек по умолчанию можно использовать восстановленные настройки

    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

    Настройки = КомпоновщикНастроек.Настройки;

    
    //установка параметров отчета, без КомпоновщикНастроекКомпоновкиДанных делать это гораздо сложнее

    //Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(«СвойствоВодитель»,         мСвойствоВодитель);

    //Настройки.ПараметрыВывода.УстановитьЗначениеПараметра(«Заголовок»,            Заголовок);

    
    //Установить отбор…

    ЭлементыОтборов = Настройки.Отбор.Элементы;

    
    Если ЗначениеЗаполнено(Подразделение) Тогда

        ЭлемОтбора = ЭлементыОтборов[1];

        ЭлемОтбора.Использование = Истина;

        ЭлемОтбора.ПравоеЗначение = Подразделение;

    КонецЕсли;

    
    Если ЗначениеЗаполнено(Должность) Тогда

        ЭлемОтбора = ЭлементыОтборов[2];

        ЭлемОтбора.Использование = Истина;

        ЭлемОтбора.ПравоеЗначение = Должность;

    КонецЕсли;

    
    Если ЗначениеЗаполнено(Сотрудник) Тогда

        ЭлемОтбора = ЭлементыОтборов[3];

        ЭлемОтбора.Использование = Истина;

        ЭлемОтбора.ПравоеЗначение = Сотрудник;

    КонецЕсли;

    
    //Помещаем в переменную данные о расшифровке данных — здесь ненужный пункт, но пусть будет.

    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

    
    //Формируем макет, с помощью компоновщика макета

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    
    //Передаем в макет компоновки схему, настройки и данные расшифровки

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

    
    ВнешниеНаборыДанных = Неопределено;

    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

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

    
    ДанныеОтчета = Новый ДеревоЗначений;

    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

    ПроцессорВывода.УстановитьОбъект(ДанныеОтчета);

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

    
    //ДопСвойства = КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства;

    //ДопСвойства.Вставить(«ОтчетПустой», ДанныеОтчета.Строки.Количество() = 0);

    
    //РезультатКомпоновкиМакета.Вставить(«ДанныеОтчета», ДанныеОтчета);

    
    //ДопСвойства = КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства;

    //ДопСвойства.Вставить(«ОтчетПустой», ДанныеОтчета.Строки.Количество() = 0);

    //РезультатКомпоновкиМакета.Вставить(«ДанныеОтчета», ДанныеОтчета);

    
    Объект.Сотрудники.Очистить();

    ТЗ = Объект.Сотрудники.Выгрузить();

    
    Для Каждого СтрокаУр1 Из ДанныеОтчета.Строки Цикл

        Для Каждого СтрокаУр2 Из СтрокаУр1.Строки Цикл

            Для Каждого СтрокаУр3 Из СтрокаУр2.Строки Цикл

                
                НовСтрокаТЗ = ТЗ.Добавить();

                НовСтрокаТЗ.Сотрудник = СтрокаУр3.РабочееМестоСотрудник;

                НовСтрокаТЗ.НомерДоговора = СтрокаУр3.РабочееМестоТрудовойДоговорНомер;

                НовСтрокаТЗ.ДатаДоговора = СтрокаУр3.РабочееМестоТрудовойДоговорДата;

                НовСтрокаТЗ.Оклад = СтрокаУр3.РабочееМестоТарифнаяСтавка;

                НовСтрокаТЗ.Подразделение = СтрокаУр3.РабочееМестоПодразделение;

                НовСтрокаТЗ.Должность = СтрокаУр3.РабочееМестоДолжность;

                
            КонецЦикла;

        КонецЦикла;

    КонецЦикла;

    
    Объект.Сотрудники.Загрузить(ТЗ);

   Кондидат В

15 — 12.02.19 — 12:38

*****************************************************

Спасибо всем участникам. Для завершенности ветки добавлю от себя:

1. КомпоновщикНастроекКомпоновкиДанных давал ошибку при добавлении группировки, потому что вызывался из модуля формы. Перенес в модуль обработки и все заработало.

2. Для того, что бы КомпоновщикНастроекКомпоновкиДанных увидел все настройки инициировать его надо через временное хранилище

    АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор);

    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных));

При добавлении напрямую в ИсточникДоступныхНастроекКомпоновкиДанных СКД ошибки не вылетало, но в настройках небыло доступных полей.

   singlych

16 — 12.02.19 — 12:51

(13) Он там и так есть как реквизит отчета.

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

   singlych

17 — 12.02.19 — 12:54

(16) А, там обработка у тебя. Я бы реквизит формы сделал.

  

Кондидат В

18 — 12.02.19 — 13:32

(17) обработкой первое время будут отправлять данные вручную (для проверки корректности), затем она должна будет по расписанию запускаться. Поэтому через реквизиты делал

Содержание:

1.       Ошибка при установке значения атрибута контекста

2.       Ошибка при получении значения атрибута контекста

Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.  

1.    Ошибка при установке значения атрибута контекста

Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута. 

Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.  

2.    Ошибка при получении значения атрибута контекста

Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.

При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).  

Специалист компании «Кодерлайн»

Александр Суворов

Ошибка при установке значения атрибута контекста (СписокВыбора)

Данная ошибка возникает при попытке установить полю с типом «СписокЗначений» значение неподходящего типа. Например: Неопределено. 

Полная ошибка

Ошибка при установке значения атрибута контекста (СписокВыбора)
ЭлементыФормы.Поставщик.СписокВыбора = КЭШируемые.СписокПоставщиков(Контрагент);
по причине:
Несоответствие типов

Скриншот:oshibka-ustanovki-spiska-vybora

Причина: В функции, которая формировала данный список (КЭШируемые.СписокПоставщиков()) отсутствовал возврат значения.


В экспериментальных целях:

передал значение с типом «Массив»  — текст ошибки не поменялся.

В итоге переписал на более универсальный метод ЗагрузитьЗначения() самого элемента диалога:

ЭлементыФормы.Поставщик.СписокВыбора.ЗагрузитьЗначения(КЭШируемые.СписокПоставщиков(Контрагент));

Реклама — искусство превращения полуправды в полную ложь.

Утро доброе. Установил 1с на новый компьютер, захожу под любым пользователем, выдает такую ошибку: {МодульПриложения}: Ошибка при установке значения атрибута контекста (***): Несоответствие типов В инете, нашел подобную проблему, только, приравнивание идет к ТекущийПользователь. Там проблема решается чисткой профиля в windows. А как решить, данную, проблему? Комп находиться на расстоянии, профиль почищу, как доберусь, просто хотел узнать, может загвоздка в другом.

Компьютер=Неопределено у тебя скорее всего.

Хм, база одна на 20 компов, проблема только с этим. Неопределенность смотреть в том же модуле?

Смотри  где определяется переменная Компьютер

Переменная Компьютер берется из запроса. Вот кусок кода:

Что будет, если Выборка.Следующий = Ложь?

На моем компе, ни чего не меняется =) На том, посмотреть не могу, плюс, если поменяю код, придется выгонять всех пользователей, что бы обновить, либо ждать, пока ночью обновиться.

Я же написал, что не могу проверить. У себя изменил, в тестовой, все работает.

может получится так, что в справочнике смсКомпьютеры нет наименования проблемного компьютера.

Думал над этим, только, почему программа его не добавляет.

А как, по другому, имя компьютера там появится? =) Перед этим, устанавливал на другие компьютеры 1с, делал все тоже самое — все работает. У меня есть подозрение, что не порядки с правами в винде. С админами сейчас поговорю, они как раз, в том здании, где комп.

[А как, по другому, имя компьютера там появится? =)] Например, пользователь руками создаст элемент справочника. Для это нужно запустить приложение в режиме 1с:Предприятие.

Сейчас попробую. Просто не делал ни когда такого, не требовалось.

Справочник заполняется программой. Таки думаю, что с правами косяк.

так есть в справочнике элемент с наименованием того компьютера?

В справочнике нет наименования. Зашел в другую базу, с этого же сервера — все работает (правда не создавал нового пользователя в этой базе, зашел под админом). Зашел в другую базу, с другого сервера — аналогично, все работает. Не работает одна единственная база, хотя, базы, у которых идентичный код, с неработающей и находящиеся на том же сервере, так же работают. Добавил в справочник наименование компьютера. Пойду смотреть.

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

[Помогло добавление справочника.] Ну вообще это очевидно сразу было — первым делом проверить есть ли в этом справочнике элемент с именем этого компьютера;)

Мысля то была, просто, при установки программы на новый комп и добавлении нового пользователя ни когда его не заполнял.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Понравилась статья? Поделить с друзьями:
  • Ошибка при установке значения атрибута контекста вид 1с
  • Ошибка при установке значения атрибута контекста версиярасширений несоответствие типов
  • Ошибка при установке драйверов на сетевую карту
  • Ошибка при установке драйверов на звук
  • Ошибка при установке драйверов на видеокарту amd