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

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

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

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

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

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

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


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

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

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

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

Одно рекламное объявление стоит больше, чем сорок передовиц.

открытие формы выбора с отбором

Я

  

falselight

02.12.16 — 12:41

есть перечисление, оно задано реквизиту справочника

есть реквизит у этого справочника, типа другого справочника

где так же есть реквизит типа перечисления

как при открытии формы справочника, устанавливать отбор элементов

в форме выбора равному значению перечисления?

  

DrShad

1 — 02.12.16 — 12:43

присвоить отбору значение

  

Ёпрст

2 — 02.12.16 — 12:43

Если смотреть сбоку, то сверху кажется, что снизу ничего не видно

  

falselight

3 — 02.12.16 — 12:45

(1) средствами свойств конфигурации?

  

falselight

4 — 02.12.16 — 12:50

или кодом накладывать?

  

DrShad

5 — 02.12.16 — 12:53

кодом конечно, программа сама не знает чего ты хочешь

  

DrShad

6 — 02.12.16 — 12:54

можешь в типовых посмотреть как открываются формы выбора программно, глядишь и наткнешься на установку отбора

  

falselight

7 — 02.12.16 — 13:38

почему может ругаться на такую конструкцию, не соответсвие типов

&НаКлиенте

Процедура ДежурныйНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

  

   ЗначениеОтбора = Новый Структура(«ЭксплуатационныйРайон», Объект.ЭксплуатационныйРайон);

   ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

   ОткрытьФорму(«Справочник.Дежурный.ФормаВыбора», ПараметрыВыбора, Элемент);

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

  

DrShad

8 — 02.12.16 — 13:41

а такой отбор точно есть в форме выбора?

  

falselight

9 — 02.12.16 — 13:48

(8) подскажите пожалуйста, где это посмотреть?

  

falselight

10 — 02.12.16 — 13:51

(8) видимо нет, взял пример, но не знаю как его приделать

  

SergTheGreat

11 — 02.12.16 — 13:58

(9) Напиши коротенький пример, без туманных намеков как в (0).

  

falselight

12 — 02.12.16 — 14:09

(11) я сделал как в примере (7)

у формы создал параметр «Отбор»

  

falselight

13 — 02.12.16 — 14:10

(12) у формы владельца есть реквизит перечисление

у формы выбора есть параметр отбор типа этого перечисления

есть реквизит типа этого перечисления у подчиненного справочника

  

Lexey_

14 — 02.12.16 — 14:10

(7) из-за совпадения имени переменной ПараметрыВыбора с параметром формы

  

Lexey_

15 — 02.12.16 — 14:13

(7) вообще, в подробном тексте ошибки всё написано, но ты за 10 лет так и не научился ни читать его, ни копировать на Мисту

  

falselight

16 — 02.12.16 — 14:16

(15) от туда не перенесешь его

  

Lexey_

17 — 02.12.16 — 14:17

(16) откуда?

  

falselight

18 — 02.12.16 — 14:21

(17) текст ошибки с сервера

  

Lexey_

19 — 02.12.16 — 14:22

(18) нет ничего невозможного для человека с интеллектом

  

falselight

20 — 02.12.16 — 14:34

(19) ну ошибка называется «несоответствие типов»

на строке  ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

чт опоправить, до меня не доходит (((

  

falselight

21 — 02.12.16 — 14:37

(11) просто нужно открыть форму выбора справочника с отбором

  

Lexey_

22 — 02.12.16 — 14:40

(20) в (14) написано, думай

  

falselight

23 — 02.12.16 — 14:45

(22) ну понятно, я создал параметр формы отбор

и в строке (20) тоже отбор

так он же и должен совпадать?

как иначе то?????

  

falselight

24 — 02.12.16 — 14:58

(22) ну изменю значение параметра на другое, попробую

непомогло

  

falselight

25 — 02.12.16 — 15:08

ПОДСКАЖИТЕ В ЧЕМ ДЕЛО?

  

Lexey_

26 — 02.12.16 — 15:10

(25) еще раз: ошибка возникает из-за того, что имя переменной ПараметрыВыбора совпадает с именем параметра формы ПараметрыВыбора

  

falselight

27 — 02.12.16 — 15:35

(26) я не могу сделать, ты можешь сказать как нужно поправить?

  

falselight

28 — 02.12.16 — 15:41

везде одинаковые примеры

    ЗначениеОтбора = Новый Структура(«Контрагент», «ОАО Рога и копыта»);

    ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

    ОткрытьФорму(«Документ.ПриходнаяНакладная.ФормаСписка», ПараметрыВыбора);

  

falselight

29 — 03.12.16 — 07:38

ребят продолжаю, развернул маленькую конфигурацию у себя на компе

имитирую этот момент, ошибка та же, подскажите как исправить???

{Справочник.Сотрудники.Форма.ФормаЭлемента.Форма(6)}: Ошибка при установке значения атрибута контекста (ПараметрыВыбора)

   ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

по причине:

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

&НаКлиенте

Процедура ВидРубкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

   ЗначениеОтбора = Новый Структура(«СпособРубки», Объект.СпособРубки);

   ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

   ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ПараметрыВыбора, Элемент);

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

  

falselight

30 — 03.12.16 — 07:40

Уважаемый Lexey_, говорит что дело в имени переменной ПараметрыВыбора.

Как исправить, подскажите кто понимает?

Я всяко разно пробовал. Причем во всех примерах все так же, у меня не работает ((((

  

falselight

31 — 03.12.16 — 07:46

Согласно (26) исправил, понимая буквально замечание, на

&НаКлиенте

Процедура ВидРубкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

   ЗначениеОтбора = Новый Структура(«СпособРубки», Объект.СпособРубки);

   ПараметрыВыбора1 = Новый Структура(«Отбор», ЗначениеОтбора);

   ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ПараметрыВыбора1, Элемент);

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

Но сейчас нет ошибки, но и отбор не устанавливается в форме выбора справочника, подскажите почему?

  

falselight

32 — 03.12.16 — 07:48

и так пробую

&НаКлиенте

Процедура ВидРубкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

   ЗначениеОтбора = Новый Структура(«СпособРубки», Объект.СпособРубки);

   //ПараметрыВыбора1 = Новый Структура(«Отбор», ЗначениеОтбора);

   //ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ПараметрыВыбора1, Элемент);

   ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ЗначениеОтбора, Элемент);

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

  

falselight

33 — 03.12.16 — 07:50

нужно ли как то саму форму дорабатывать на какие либо параметры

используя (31) или (32)

  

МимохожийОднако

34 — 03.12.16 — 07:58

Возьми фрагмент «НачалоВыбора(» и полным поиском в типовой конфигурации найдешь кучку примеров

  

falselight

35 — 03.12.16 — 07:59

(34) да я в интернете много примеров нахожу

все они подобные, но не работает у меня (((((

  

falselight

36 — 03.12.16 — 07:59

(34) в конфигурации какой? в УТ 11.3 попробую поискать

  

МимохожийОднако

37 — 03.12.16 — 08:01

(35) Так бывает…

(36) в типовой или  в своей, если типовая.

  

falselight

38 — 03.12.16 — 08:01

(37) в которой я стал делать пример

там вообще пара объектов, не доделанные

  

falselight

39 — 03.12.16 — 08:10

реально не понимаю (((( все подобно везде!!!!

  

falselight

40 — 03.12.16 — 08:13

не работает отбор (

  

falselight

41 — 03.12.16 — 08:20

СтандартнаяОбработка = Ложь;

   ЗначениеОтбора       = Новый Структура(«СпособыРубок», Объект.СпособРубки);

   ПараметрыВыбора1     = Новый Структура(«Отбор», ЗначениеОтбора);

   ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ПараметрыВыбора1, Элемент);

вот так сработало, важно было в значении отбора, установить название параметра таким же как у справочника

  

EvgeniuXP

42 — 03.12.16 — 13:22

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

открытие формы выбора с отбором

Я

falselight

02.12.16 — 12:41

есть перечисление, оно задано реквизиту справочника

есть реквизит у этого справочника, типа другого справочника

где так же есть реквизит типа перечисления

как при открытии формы справочника, устанавливать отбор элементов

в форме выбора равному значению перечисления?

DrShad

1 — 02.12.16 — 12:43

присвоить отбору значение

Ёпрст

2 — 02.12.16 — 12:43

Если смотреть сбоку, то сверху кажется, что снизу ничего не видно

falselight

3 — 02.12.16 — 12:45

(1) средствами свойств конфигурации?

falselight

4 — 02.12.16 — 12:50

или кодом накладывать?

DrShad

5 — 02.12.16 — 12:53

кодом конечно, программа сама не знает чего ты хочешь

DrShad

6 — 02.12.16 — 12:54

можешь в типовых посмотреть как открываются формы выбора программно, глядишь и наткнешься на установку отбора

falselight

7 — 02.12.16 — 13:38

почему может ругаться на такую конструкцию, не соответсвие типов

&НаКлиенте

Процедура ДежурныйНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

  

   ЗначениеОтбора = Новый Структура(«ЭксплуатационныйРайон», Объект.ЭксплуатационныйРайон);

   ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

   ОткрытьФорму(«Справочник.Дежурный.ФормаВыбора», ПараметрыВыбора, Элемент);

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

DrShad

8 — 02.12.16 — 13:41

а такой отбор точно есть в форме выбора?

falselight

9 — 02.12.16 — 13:48

(8) подскажите пожалуйста, где это посмотреть?

falselight

10 — 02.12.16 — 13:51

(8) видимо нет, взял пример, но не знаю как его приделать

SergTheGreat

11 — 02.12.16 — 13:58

(9) Напиши коротенький пример, без туманных намеков как в (0).

falselight

12 — 02.12.16 — 14:09

(11) я сделал как в примере (7)

у формы создал параметр «Отбор»

falselight

13 — 02.12.16 — 14:10

(12) у формы владельца есть реквизит перечисление

у формы выбора есть параметр отбор типа этого перечисления

есть реквизит типа этого перечисления у подчиненного справочника

Lexey_

14 — 02.12.16 — 14:10

(7) из-за совпадения имени переменной ПараметрыВыбора с параметром формы

Lexey_

15 — 02.12.16 — 14:13

(7) вообще, в подробном тексте ошибки всё написано, но ты за 10 лет так и не научился ни читать его, ни копировать на Мисту

falselight

16 — 02.12.16 — 14:16

(15) от туда не перенесешь его

Lexey_

17 — 02.12.16 — 14:17

(16) откуда?

falselight

18 — 02.12.16 — 14:21

(17) текст ошибки с сервера

Lexey_

19 — 02.12.16 — 14:22

(18) нет ничего невозможного для человека с интеллектом

falselight

20 — 02.12.16 — 14:34

(19) ну ошибка называется «несоответствие типов»

на строке  ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

чт опоправить, до меня не доходит (((

falselight

21 — 02.12.16 — 14:37

(11) просто нужно открыть форму выбора справочника с отбором

Lexey_

22 — 02.12.16 — 14:40

(20) в (14) написано, думай

falselight

23 — 02.12.16 — 14:45

(22) ну понятно, я создал параметр формы отбор

и в строке (20) тоже отбор

так он же и должен совпадать?

как иначе то?????

falselight

24 — 02.12.16 — 14:58

(22) ну изменю значение параметра на другое, попробую

непомогло

falselight

25 — 02.12.16 — 15:08

ПОДСКАЖИТЕ В ЧЕМ ДЕЛО?

Lexey_

26 — 02.12.16 — 15:10

(25) еще раз: ошибка возникает из-за того, что имя переменной ПараметрыВыбора совпадает с именем параметра формы ПараметрыВыбора

falselight

27 — 02.12.16 — 15:35

(26) я не могу сделать, ты можешь сказать как нужно поправить?

falselight

28 — 02.12.16 — 15:41

везде одинаковые примеры

    ЗначениеОтбора = Новый Структура(«Контрагент», «ОАО Рога и копыта»);

    ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

    ОткрытьФорму(«Документ.ПриходнаяНакладная.ФормаСписка», ПараметрыВыбора);

falselight

29 — 03.12.16 — 07:38

ребят продолжаю, развернул маленькую конфигурацию у себя на компе

имитирую этот момент, ошибка та же, подскажите как исправить???

{Справочник.Сотрудники.Форма.ФормаЭлемента.Форма(6)}: Ошибка при установке значения атрибута контекста (ПараметрыВыбора)

   ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

по причине:

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

&НаКлиенте

Процедура ВидРубкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

   ЗначениеОтбора = Новый Структура(«СпособРубки», Объект.СпособРубки);

   ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);

   ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ПараметрыВыбора, Элемент);

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

falselight

30 — 03.12.16 — 07:40

Уважаемый Lexey_, говорит что дело в имени переменной ПараметрыВыбора.

Как исправить, подскажите кто понимает?

Я всяко разно пробовал. Причем во всех примерах все так же, у меня не работает ((((

falselight

31 — 03.12.16 — 07:46

Согласно (26) исправил, понимая буквально замечание, на

&НаКлиенте

Процедура ВидРубкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

   ЗначениеОтбора = Новый Структура(«СпособРубки», Объект.СпособРубки);

   ПараметрыВыбора1 = Новый Структура(«Отбор», ЗначениеОтбора);

   ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ПараметрыВыбора1, Элемент);

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

Но сейчас нет ошибки, но и отбор не устанавливается в форме выбора справочника, подскажите почему?

falselight

32 — 03.12.16 — 07:48

и так пробую

&НаКлиенте

Процедура ВидРубкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

   ЗначениеОтбора = Новый Структура(«СпособРубки», Объект.СпособРубки);

   //ПараметрыВыбора1 = Новый Структура(«Отбор», ЗначениеОтбора);

   //ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ПараметрыВыбора1, Элемент);

   ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ЗначениеОтбора, Элемент);

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

falselight

33 — 03.12.16 — 07:50

нужно ли как то саму форму дорабатывать на какие либо параметры

используя (31) или (32)

МимохожийОднако

34 — 03.12.16 — 07:58

Возьми фрагмент «НачалоВыбора(» и полным поиском в типовой конфигурации найдешь кучку примеров

falselight

35 — 03.12.16 — 07:59

(34) да я в интернете много примеров нахожу

все они подобные, но не работает у меня (((((

falselight

36 — 03.12.16 — 07:59

(34) в конфигурации какой? в УТ 11.3 попробую поискать

МимохожийОднако

37 — 03.12.16 — 08:01

(35) Так бывает…

(36) в типовой или  в своей, если типовая.

falselight

38 — 03.12.16 — 08:01

(37) в которой я стал делать пример

там вообще пара объектов, не доделанные

falselight

39 — 03.12.16 — 08:10

реально не понимаю (((( все подобно везде!!!!

falselight

40 — 03.12.16 — 08:13

не работает отбор (

falselight

41 — 03.12.16 — 08:20

СтандартнаяОбработка = Ложь;

   ЗначениеОтбора       = Новый Структура(«СпособыРубок», Объект.СпособРубки);

   ПараметрыВыбора1     = Новый Структура(«Отбор», ЗначениеОтбора);

   ОткрытьФорму(«Справочник.ВидыРубок.ФормаВыбора», ПараметрыВыбора1, Элемент);

вот так сработало, важно было в значении отбора, установить название параметра таким же как у справочника

  

EvgeniuXP

42 — 03.12.16 — 13:22

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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

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

Ошибка по причине Несоответствие типов в 1С 8.3 связана с передачей параметров в командах и запросах 1С.

Изучив статью, вы:

  • ознакомитесь с порядком исправления ошибки в запросе и командах 1С и узнаете, как исправить;
  • получите два внешних отчета, демонстрирующих ошибочный и правильный коды.

В какой момент выходит ошибка

Как правило, параметры в командах 1С идут в определенной очередности и ссылаются на данные конкретного типа. Ошибка в указании параметра не на том месте или не того типа приводит к появлению сообщения о несоответствии типов:

Исправляется подобная ошибка восстановлением правильной последовательности в строке параметров команды или указанием нужного типа данных Ошибка 1С Несоответствие типов наиболее часто появляется при написании запросов и при некорректном указании параметров команды.

Рассмотрим причины ее возникновения и исправление на конкретном примере.

Ошибка в таблице запроса

При чтении цен номенклатуры по регистру сведений Цены номенклатуры из внешнего отчета появляется ошибка Неоднозначное поле «ТипЦен.Номенклатура».

В окне сообщений уже указано место возникновения ошибки: Несоответствие типов Параметр номер «1» в строке Регистр сведений.ЦеныНоменклатуры.СрезПоследних(&&ТипЦен,) КАК ЦеныНоменклатурыСрезПоследних.

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

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1 С Предприятие:

Из описания видно, что команда СрезПоследних имеет 2 параметра:

  • Период;
  • Отбор.

Если параметр Период не указывается, место в команде остается пустым, а через запятую указывается параметр отбора, в нашем случае: ТипЦен. Исправленная команда выглядит следующим образом: СрезПоследних(, ТипЦен = &ТипЦен ).

После исправления команды запустите отчет в 1 С Бухгалтерия по кнопке Главное меню — Файл — Открыть:

Теперь отчет формируется правильно!

Исправление ошибки в команде 1С

При поиске ссылок на контрагента в отчете 1С появляется ошибка Несоответствие типов (параметр номер 2):

1С сообщает место ошибки — Параметр номер 2 при нажатии кнопки ERROR.

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

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Из описания идно, что команда НайтиПоСсылкам имеет 4 параметра:

  • СписокСсылок;
  • ОбластьПоиска;
  • ВключитьОбъекты;
  • ИсключитьОбъекты.

Параметр ОбластьПоиска имеет тип «массив», а в нашем примере указано число 1: НайтиПоСсылкам(МассивПоиска, 1, , МассивИсключений)Область поиска — необязательный параметр, поэтому исправленная команда может выглядеть следующим образом: НайтиПоСсылкам(МассивПоиска,  ,  , МассивИсключений).

После исправления команды запустите внешний отчет в 1С по кнопке Главное меню — Файл — Открыть:

Теперь команда поиска ссылок на контрагента отрабатывает правильно.

Вот так можно получить ошибку 1С Несоответствие типов в 1С, поэтому контролируйте правильность указания параметров в запросах и командах 1С в Синтаксис-Помощнике

Обслуживание

Заказать консультацию

По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.

Построитель

Автор Альбина, 16 мар 2010, 17:41

0 Пользователей и 1 гость просматривают эту тему.

Всем добрый день!
Помогите разобраться, пожалуйста, с возникшей проблемой.
Суть:
Формируется отчёт с помощью построителя с отбором по дате.
Необходимо проверить роль активного пользователя, и если это не «Администратор», то добавить отбор по сотруднику(по текущему пользователю) без возможности снятия этого отбора.

Добавляю отбор так:

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

Выдаёт ошибку:
Ошибка при установке значения атрибута контекста (Значение): Неверный тип значения
ОтборСотрудник.Значение = Сотрудник;


Пожалуйста,кто-нибудь подкиньте идейку.Мои идеи уже исчерпали себя(((((

Заранее,спасибо


проверь значения (ПараметрыСеанса.ТекущийПользователь)


Проверила,Там всё в норме.


а какой тип у «ОтборСотрудник.Значение»?


Что значит в норме???? Типы через отладчик посмотри. тип «ПараметрыСеанса.ТекущийПользователь» и тип «ОтборСотрудник.Значение»
— они разные у тибя


я не понимаю, как мне их к одинаковому типу привести.


спасибо всем большое)Всё заработало)


:))) хоросе


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Построитель

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

&НаКлиенте Он стал выдавать ошибку. {Документ.УведомлениеКлиентТаможеннаяПроцедура.Форма.ФормаДокумента.Форма}: Ошибка при установке значения атрибута контекста (ПараметрыВыбора)     ПараметрыВыбора = Новый Структура(«Отбор», ЗначенияОтбора); по причине: СписКлиентДТО имеет тип массив из СправочникСсылка.Партнеры Подскажите в чем может быть дело.

переименуй переменную ПараметрыВыбора

теперь так надо отбор делать? раньше то у меня работал этот код

см и Отбор можно использовать, но он считается устаревшим параметром, оставлен только для совместимости..

&НаКлиенте И ошибка теперь {Документ.УведомлениеКлиентТаможеннаяПроцедура.Форма.ФормаДокумента.Форма}: Ошибка при установке значения атрибута контекста (ПараметрыВыбора)     ПараметрыВыбора = Новый Структура(«ФиксированныеНастройки», ФиксированныеНастройки); по причине: Несоответствие типов

как обычно те же грабли ))) Спасибо огромное…

Вот то что взлетело, но отбор списком не выводит &НаКлиенте Процедура КлиентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СписКлиентДТО — список значений со ссылками на справочник партнеры

если список ссылок помещать в массив, то тоже не работает

Тэги: 1С 8

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



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

Дано

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

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

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

по причине:

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

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

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

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

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

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

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

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

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

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

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

Решение

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

Дополнено 2017.04.10

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

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

Ошибка Несоответствие типов в 1С 8.3 связана с передачей параметров в командах и запросах 1С.

Изучив статью, вы:

  • ознакомитесь с порядком исправления ошибки в запросе и командах 1С;
  • получите два внешних отчета, демонстрирующих ошибочный и правильный коды.

Содержание

  • Несоответствие типов в 1С 8.3
    • Ошибка в таблице запроса
    • Исправление ошибки в команде 1С

Как правило, параметры в командах 1С идут в определенной очередности и ссылаются на данные конкретного типа. Ошибка в указании параметра не на том месте или не того типа приводит к появлению сообщения о несоответствии типов:

Исправляется подобная ошибка восстановлением правильной последовательности в строке параметров команды или указанием нужного типа данных Ошибка 1С Несоответствие типов наиболее часто появляется при написании запросов и при некорректном указании параметров команды.

Рассмотрим причины ее возникновения и исправление на конкретном примере.

Ошибка в таблице запроса

При чтении цен номенклатуры по регистру сведений Цены номенклатуры из внешнего отчета появляется ошибка Неоднозначное поле «ТипЦен.Номенклатура».

В окне сообщений уже указано место возникновения ошибки: Параметр номер «1» в строке Регистр сведений.ЦеныНоменклатуры.СрезПоследних(&&ТипЦен,) КАК ЦеныНоменклатурыСрезПоследних.

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

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Из описания видно, что команда СрезПоследних имеет 2 параметра:

  • Период;
  • Отбор.

Если параметр Период не указывается, место в команде остается пустым, а через запятую указывается параметр отбора, в нашем случае: ТипЦен. Исправленная команда выглядит следующим образом: СрезПоследних(, ТипЦен = &ТипЦен ).

После исправления команды запустите отчет в 1С по кнопке Главное меню — Файл — Открыть:

Теперь отчет формируется правильно!

Скачать внешний отчет Вывод списка цен номенклатуры

Исправление ошибки в команде 1С

При поиске ссылок на контрагента в отчете 1С появляется ошибка Несоответствие типов (параметр номер 2):

1С сообщает место ошибки — Параметр номер 2 при нажатии кнопки ERROR.

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

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Из описания идно, что команда НайтиПоСсылкам имеет 4 параметра:

  • СписокСсылок;
  • ОбластьПоиска;
  • ВключитьОбъекты;
  • ИсключитьОбъекты.

Параметр ОбластьПоиска имеет тип «массив», а в нашем примере указано число 1: НайтиПоСсылкам(МассивПоиска, 1, , МассивИсключений). Область поиска — необязательный параметр, поэтому исправленная команда может выглядеть следующим образом: НайтиПоСсылкам(МассивПоиска,  ,  , МассивИсключений).

После исправления команды запустите внешний отчет в 1С по кнопке Главное меню — Файл — Открыть:

Теперь команда поиска ссылок на контрагента отрабатывает правильно.

Скачать внешний отчет Поиск ссылок на контрагента

Вот так можно получить ошибку 1С Несоответствие типов в 1С, поэтому контролируйте правильность указания параметров в запросах и командах 1С в Синтаксис-Помощнике!

См. также:

  • Неоднозначное поле в запросе
  • Исправление технических ошибок при работе с 1С:Бухгалтерия: для начинающих и опытных пользователей
  • Метод объекта не обнаружен
  • Неизвестный идентификатор формы
  • Переменная не определена

Если Вы еще не подписаны:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

После оформления подписки вам станут доступны все материалы Бухэксперт8, записи поддерживающих эфиров и вы сможете задавать любые вопросы по программе 1С.

Подписывайтесь на наши YouTube и Telegram чтобы не пропустить
важные изменения 1С и законодательства

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

&НаКлиенте Он стал выдавать ошибку. {Документ.УведомлениеКлиентТаможеннаяПроцедура.Форма.ФормаДокумента.Форма}: Ошибка при установке значения атрибута контекста (ПараметрыВыбора)     ПараметрыВыбора = Новый Структура(«Отбор», ЗначенияОтбора); по причине: СписКлиентДТО имеет тип массив из СправочникСсылка.Партнеры Подскажите в чем может быть дело.

переименуй переменную ПараметрыВыбора

теперь так надо отбор делать? раньше то у меня работал этот код

см и Отбор можно использовать, но он считается устаревшим параметром, оставлен только для совместимости..

&НаКлиенте И ошибка теперь {Документ.УведомлениеКлиентТаможеннаяПроцедура.Форма.ФормаДокумента.Форма}: Ошибка при установке значения атрибута контекста (ПараметрыВыбора)     ПараметрыВыбора = Новый Структура(«ФиксированныеНастройки», ФиксированныеНастройки); по причине: Несоответствие типов

как обычно те же грабли ))) Спасибо огромное…

Вот то что взлетело, но отбор списком не выводит &НаКлиенте Процедура КлиентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СписКлиентДТО — список значений со ссылками на справочник партнеры

если список ссылок помещать в массив, то тоже не работает

Тэги: 1С 8

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

Код 1C v 8.3

 // Реквизиты
ДобавляемыеРеквизиты = Новый Массив;

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

Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);

//реквизит
ИмяЭлемента = "Добавлен" + ИндексЭлемента;
Реквизит = Новый РеквизитФормы(ИмяЭлемента, ОписаниеТипов);
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);

//команда печать
ИмяКомандыПечать = "ДобавленПечать" + ИндексЭлемента;
КомандаПечать = Команды.Добавить(ИмяКомандыПечать);
КомандаПечать.Действие = "ПечатьДокумента";
КомандаПечать.Подсказка = НСтр("ru = 'Печать документа...'");

//элемент формы
//Родитель                     = Элементы.ГруппаСформированныеДокументы;
Элемент                      = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементГруппа);
Элемент.Вид                  = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным          = ИмяЭлемента;
Элемент.Гиперссылка          = Истина;
Элемент.ПоложениеЗаголовка   = ПоложениеЗаголовкаЭлементаФормы.Нет;

ЭтаФорма[ИмяЭлемента] = Документ;

//кнопка печать
ИмяЭлементаПечать = "ДобавленПечать" + ИндексЭлемента;
ЭлементПечать = Элементы.Добавить(ИмяЭлементаПечать, Тип("КнопкаФормы"), ЭлементГруппа);
ЭлементПечать.Картинка = БиблиотекаКартинок.Печать;
ЭлементПечать.Отображение = ОтображениеКнопки.Картинка;
ЭлементПечать.ИмяКоманды = ИмяКомандыПечать;

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

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

Атрибут контекста — это свойство объекта или элемента программы, которое может быть установлено, изменено или прочитано в процессе выполнения кода. Атрибуты контекста могут хранить разные типы данных — числа, строки, логические значения и другие.

Ошибка при установке значения атрибута контекста происходит, когда при попытке присвоить какое-либо значение атрибуту возникает сбой из-за несоответствия типов, некорректного синтаксиса или другой причины.

Действия при возникновении ошибки

Если, несмотря на все меры предосторожности, все же произошла ошибка при установке значения атрибута контекста, рекомендуется:

  1. Проанализировать точное сообщение об ошибке и стек вызовов
  2. Проверить код, связанный с использованием данного атрибута
  3. Уточнить типы данных и допустимые значения для этого атрибута

Методы предотвращения

Лучшей защитой от ошибки при установке значения атрибута контекста является:

  • Использование строгой типизации данных
  • Проведение юнит-тестирования кода
  • Ранняя обработка исключений

Руки печатают код на сине-фиолетовой клавиатуре

Восстановление данных

Даже если произошла фатальная ошибка и приложение вылетело, все можно исправить, если:

  1. Были настроены точки восстановления и резервное копирование
  2. Есть доступ к журналам работы приложения
  3. Можно перезапустить приложение и повторить действия заново

Особенности в 1С

Рассмотрим некоторые особенности возникновения ошибки при установке значения атрибута контекста в программах на платформе 1С:

  • Часто ошибка связана с обращением к реквизитам и свойствам объектов метаданных
  • Может возникать при попытке записи значений в несуществующие или недоступные реквизиты и табличные части
  • Причина ошибки не всегда очевидна из-за сложности механизмов платформы 1С

Поэтому при возникновении ошибки установке значения атрибута контекста в 1С в первую очередь следует проверить правильность обращения к метаданным конфигурации.

Программист отлаживает код ночью при синем свете мониторов

Работа со свойствами в 1С

Чтобы избежать ошибок при работе с объектами и их свойствами в 1С, рекомендуется:

  1. Использовать строгую типизацию и классы значений
  2. Проверять наличие нужных реквизитов у объекта
  3. Обрабатывать возможные исключительные ситуации

Отладка в 1С

При отладке ошибок 1С также полезно:

  • Включить режим предупреждения об ошибках
  • Использовать точки останова и пошаговое выполнение
  • Просматривать значения переменных и выражений

Факторы риска в 1С

Основные факторы риска ошибки установке значения атрибута контекста в 1С:

  1. Изменение версий платформы и конфигураций
  2. Некорректные права доступа пользователей
  3. Нестандартные настройки и расширения

Работа в облачных сервисах

При работе с облачными сервисами и веб-приложениями также возможно возникновение ошибки при установке значения атрибута контекста. Это может быть связано с особенностями работы в распределенной среде.

Например, при обновлении страницы может произойти потеря контекста и значений атрибутов. Или же возникнуть конфликт при одновременном доступе к одному ресурсу с разных клиентов.

Ошибки при масштабировании

Увеличение нагрузки на систему тоже повышает риск возникновения ошибки. Например, из-за нехватки ресурсов сервера при большом числе запросов.

В таком случае атрибут может оказаться неинициализирован или его значение может быть перезаписано параллельным потоком.

Особенности мобильной разработки

В мобильных приложениях возможна потеря атрибутов контекста из-за пересоздания активити при повороте экрана или выгрузки приложения из памяти.

Также на мобильных устройствах выше риск обрыва связи и проблем с доступностью сервисов.

Распределенные и микросервисные архитектуры

В распределенных системах сложнее отслеживать контекст, так как обработка может передаваться между разными сервисами по сети.

Поэтому важно грамотно организовать передачу контекста между сервисами с сохранением всех атрибутов.

Тестирование и контроль качества

Чтобы снизить риск ошибок в сложных системах, очень большое значение имеют процессы тестирования и контроля качества.

Необходимо максимально автоматизировать проверку различных сценариев работы приложения с имитацией возможных сбоев и ошибок.

Мониторинг приложений

Важным инструментом для предотвращения и своевременного обнаружения ошибок при установке значения атрибута контекста является мониторинг работы приложений.

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

Логирование данных

Подробные журналы и логи работы приложения также помогают выявить факт возникновения ошибки и найти детали того, как именно произошел сбой при установке значения атрибута.

Анализ логов позволяет восстановить последовательность событий и найти корневую причину.

Искусственный интеллект

Перспективным направлением является использование технологий искусственного интеллекта для поиска ошибок в коде и мониторинга приложений.

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

Разделение ответственности

В больших проектах важно грамотно разделить ответственность между различными инженерами и командами.

Это позволит более детально прорабатывать отдельные компоненты системы, находить в них ошибки и оперативно исправлять.

Skip to content

При программном изменении формы может возникнуть ошибка:

Нельзя изменять поле, содержащее объект данных формы

Ошибка возникает при следующем коде:

&НаКлиенте

Процедура ПробитьЧек(Команда)

    ПробитьЧекНаСервере(Объект);

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

&НаСервере

Процедура ПробитьЧекНаСервере(Док)

    ОбщийМодуль.ЗаписатьВБазуДокумент(Док);

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

В параметре процедуры
ПробитьЧекНаСервере() мы передаем данные формы с типом
ДанныеФормыКоллекция, и потом на сервере пытаемся их изменить.

Даже если эти данные мы не меняем внутри процедуры, 1С на всякий случай ругнется.

Параметр
Док  процедуры
ПробитьЧекНаСервере передается по ссылке, а значит при завершении процедуры этот параметр возвращается и пытается присвоиться реквизиту, что запрещено.

Если объект не планируется изменять в процедуре
ПробитьЧекНаСервере(), то достаточно скопировать реквизит во временную переменную, которая не является реквизитом и поэтому без проблем “возвратится” обратно из процедуры.

&НаКлиенте

Процедура ПробитьЧек(Команда)

    ДокКопия = Объект;

    ПробитьЧекНаСервере(ДокКопия);

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

Тот же самый эффект можно получить просто указав в объявлении процедуры ключевое слово
Знач и передавать в качестве параметра изначальный реквизит
Объект, без использования
ДокКопия:

&НаКлиенте

Процедура ПробитьЧек(Команда)

    ПробитьЧекНаСервере(Объект);

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

&НаСервере

Процедура ПробитьЧекНаСервере(Знач ТожеДокКопия)

    ОбщийМодуль.ЗаписатьВБазуДокумент(ТожеДокКопия);

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

Однако, если объект в процедуре
ПробитьЧекНаСервере() планируется изменять, то нужно использовать копирование реквизита во временную переменную и добавить вызов
КопироватьДанныеФормы:

&НаКлиенте

Процедура ПробитьЧек(Команда)

    ДокКопия = Объект;

    ПробитьЧекНаСервере(ДокКопия);

    КопироватьДанныеФормы(ДокКопия, Объект);

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


Просмотров:
3 735

[Практика программирования] Управляемые формы 1С 8: как программно изменить запрос динамического списка и программно вывести колонку добавленного реквизита списка

Ранее уже описывалось в соответствующей статье то, как разместить программно в форме колонку реквизита объекта базы (например, документа или справочника). В этой статье будет рассмотрено как программно добавить колонку с флажком в список управляемой формы с динамическим списком, данные для которого выбираются произвольным запросом.

Для программного добавления элементов управляемой формы должно быть учтено условие о том, что добавление происходит на стороне сервера, а не на клиенте (не в процедуре «ПриОткрытии», как это было в обычном приложении). И так можно ошибочно подумать по старой привычке (если есть опыт программирования в обычном интерфейсе), учитывая архитектуру платформы 1С: Предприятие 8.2 и 8.3. Ведь процедура «ПриОткрытии» формы есть и в управляемом приложении, но через не создать программно и не разместить элементы для прикладной задачи. Поэтому «&НаСервере» и преимущественно в процедуре «ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)» формы документа или элемента справочника или формы списка теперь происходит программное добавление каких-либо элементов формы.

В общем информация о том, как программно изменить текст запроса динамического списка, использующего произвольный запрос можно найти на странице сайта ИТС 1С, если у Вас есть доступ. Но если доступа нет, то можете сильно не расстраиваться — информация на странице как и во многих случаях методологической информации от 1С носит условно практический характер. А это означает, что мелочи и нюансы, о которых бы было неплохо упомянуть на указанной странице ИТС, не упомянуты никак. И их понимание будет происходить на практике. Вот часть такой практики изложена ниже на прикладной задаче.

Нажатие на изображении увеличит его
1С 8, код, управляемый интерфейс, программное изменение запроса динамического списка реквизита формы
Рис. 1. Пример теоретического кода для программного изменения текста произвольного динамического списка для управляемой формы в 1С 8. 

Прикладная задача заключалась в том, чтобы выводить программно в управляемую форму списка документов «Реализация товаров и услуг» колонку добавленного реквизита документа. Реквизит с именем «ДопМФ_Отгружено» тип «Булево», в данном примере добавлен в расширении, но может быть и добавлен в основной конфигурации, если она на частичной поддержке. Как вывести программно элемент формы, содержащей флажок, добавленного реквизита, повторимся, можно изучить в соответствующей статье, о которой уже упоминалось в начале страницы.

1С 8, как программно изменить запрос динамического списка, чтобы вывести добавленный реквизит объекта конфигурации

Рис. 2. Пример добавленного реквизита объекта конфигурации (документа) в 1С 8 для дальнейшего программного вывода колонки в управляемую форму списка объекта.

Прежде чем перейти непосредственно к программному добавлению колонки элемента таблицы формы нужно добавить его выбор в текст запроса динамического списка. Таким образом подготовительный рабочий исполняемый код получается примерно следующим:

1 | СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
2 | СвойстваСписка.ОсновнаяТаблица = «Документ.РеализацияТоваровУслуг»;
3 | СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
4 | ИсхТекстаЗапроса = СписокРеализацииТоваровУслуг.ТекстЗапроса;
5 |
|
СвойстваСписка.ТекстЗапроса = СтрЗаменить(ИсхТекстаЗапроса, «ВЫБРАТЬ», «ВЫБРАТЬ»+Символы.ПС+«РеализацияТоваровУслуг.ДопМФ_Отгружено КАК ДопМФ_Отгружено,»);
6 |
|
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.СписокРеализацииТоваровУслуг, СвойстваСписка);
7 | //СписокРеализацииТоваровУслуг.Параметры.УстановитьЗначениеПараметра(«Параметр1», 42);

Прокомментируем его основные моменты. В строке 1 происходит получение структуры через функцию «СтруктураСвойствДинамическогоСписка()» общего модуля «ОбщегоНазначения» для заполнения ее значений и передачи для заполнения свойств динамического списка. Для ключа «ОсновнаяТаблица» структуры в строке 2 указывается название основной таблицы, которая используюется для динамического списка, в примере это «Документ.РеализацияТоваровУслуг». Значение ключа структуры в строке 3 «ДинамическоеСчитываниеДанных» в значении «Истина». В строках 4 и 5 ведется произвольная модификация запроса.

Нажатие на изображении увеличит его
1С 8, пример исходного текста произвольного запроса динамического списка, как изменить программно,
Рис. 3. Пример исходного текста произвольного запроса динамического списка реквизита управляемой формы списка документов.

Можно просто подготовить новый или измененный исходный текст запроса для указания его в ключе «ТекстЗапроса» структуры. В данном же случае была использована хитрость, чтобы минимизировать зависимость от изменений разработчиков. Происходит модификация исходного текста запроса, который определили разработчики, за счет замены подстроки «ВЫБРАТЬ», которая есть в любом запросе, на подстроку так же содержащее это обязательное слово текста запроса и текст для выборки значения добавленного реквизита документа «ДопМФ_Отгружено». Таким образом, доработка в расширении может сломаться тогда, когда разработчики существенным образом изменять исходный текст запроса. И на примере строки 5 помещаем новый вариант текста запроса в структуру. В данном примере получилось, что запрос содержит одну дополнительную строчку, чтобы выбирать значения добавленного реквизита. Порядок следования полей выборки в запросе для динамического списка не имеет значения.

Т.е. в практической задаче начало запроса программно изменялось:

С:

ВЫБРАТЬ

    РеализацияТоваровУслуг.Ссылка,

На:

ВЫБРАТЬ

    РеализацияТоваровУслуг.ДопМФ_Отгружено КАК ДопМФ_Отгружено,

    РеализацияТоваровУслуг.Ссылка,

Особенно обратим внимание на то, к каким объектам ведется обращение в строке 7, когда выполняется установка новой настройки для динамического списка с помощью процедуры «УстановитьСвойстваДинамическогоСписка» общего модуля «ОбщегоНазначения». В этом месте важно не перепутать, т.к. в типовой конфигурации названия элемента формы таблицы-списка и реквизита формы одинаковые. А важно, что первым параметром передается элемент управляемой формы — Таблица реквизита формы. Не перепутать его с названием реквизита формы, к которому ранее обращались для получения текста исходного запроса. Вторым параметром передается заполненная структура. Строка 7 в данном примере закомментирована, т.к. в данной прикладной задаче в тексте запроса не содержится параметров. Но, если параметр  есть, то устанавливается через свойство «Параметры» и метод «УстановитьЗначениеПараметра» реквизита управляемой формы, а не элемента формы. Установка значения по имени параметра по коду как для классического запроса в 1С: первое значение — текстовое имя параметра, второе значение — собственно значение для параметра.

Нажатие на изображении увеличит его
1С 8, как программно изменить текст запроса динамического списка реквизита управляемой формы
Рис. 4. Сравнение одноименных реквизита и элемента управляемой формы 1С 8 для программного изменения текста произвольного запроса динамического списка этого реквизита формы.

После модификации текста произвольного динамического запроса реквизита управляемой формы 1С 8, становится возможным размещение колонки нового реквизита. И теперь рассмотрим код для программного вывода, размещения, добавления (как будет угодно) колонки в элемент-таблицу формы. 

Нажатие на изображении увеличит его
1С 8, как программно вывести, добавить колонку из запроса динамического списка для добавленного реквизита справочника, документа
Рис. 5. Пример кода в 1С 8 для программного вывода колонки нового реквизита объекта конфигурации, в частности документа, в элемент «Таблица» управляемой формы 

По логике программного вывода в прикладной задачи новая колонка, напомним с флажком, должна выводиться сразу после колонки «Номер», содержащей данные номеров документов списка. Код на скриншоте содержит условие на то, что если колонка «Номер» по каким то причинам, например скрыта пользователем в управляемой форме, что вполне может быть (странно но может быть, ведь номер для документа является ключевым реквизитом для работы пользователей), то тогда новая колонка будет выведена самой первой в списке.

1 | ТаблицаФормы = Элементы.СписокРеализацииТоваровУслуг;
2 | КолонкаВставки = ТаблицаФормы.ПодчиненныеЭлементы.Найти(«Номер»);
3 |  
4 | КолонкаОтгружено = Элементы.Вставить(«_Отгружено», Тип(«ПолеФормы»), ТаблицаФормы, КолонкаВставки);
5 | КолонкаОтгружено.Вид = ВидПоляФормы.ПолеФлажка;
6 | КолонкаОтгружено.Заголовок = «О.»;
7 | КолонкаОтгружено.Подсказка = «Отгружено»;
8 | КолонкаОтгружено.ТолькоПросмотр = Истина;
9 | КолонкаОтгружено.ШиринаЭлемента = 5;
10 | КолонкаОтгружено.ПутьКДанным = «СписокРеализацииТоваровУслуг.ДопМФ_Отгружено»;

Есть небольшие отличия от случая, который уже упоминался выше, добавления колонки для элемента формы Таблица динамического списка, как было описано смежной статье. В смежном случае был пример для таблицы, данными (ПутьКДанным) которой выступал «динамический список», но у которого основанием выступала таблица, а не произвольный запрос. Если отличия не учесть, то будут просто возникать ошибки. В данном же примере 

Отличия заключаются в двух местах кода. Во-первых, это обращение к свойству «ШиринаЭлемента, а не просто «Ширина» как в случае, если колонка — это программно выводимая колонка динамического списка, но у которого указана «Основная таблица» и не используется произвольный запрос. Т.е. для программно добавляемой колонки динамического списка с произвольным запросом указывается свойство «ШиринаЭлемента».

Во-вторых, очень важно правильно указать значение свойства «ПутьКДанным», иначе можно получить ошибку:

Нажатие на изображении увеличит его
1С 8, ошибка, Ошибка при установке значения атрибута контекста (ПутьКДанным) по причине: Недопустимое значение
Рис. 6. Пример ошибки «Недопустимое значение» при указании неверного значения для свойства «ПутьКДанным» элемента управляемой формы .

{Документ.РеализацияТоваровУслуг.Форма.ФормаСписка.Форма(26)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)

КолонкаОтгружено.ПутьКДанным = «Объект.СписокРеализацииТоваровУслуг.ДопМФ_Отгружено»; 

по причине:

Недопустимое значение

Недопустимое значение

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

Нажатие на изображении увеличит его
1С 8, программирование, как программно вывести, добавить элементы управляемой формы, колонку реквизита запроса динамического списка
Рис. 7. Демонстрация того, что данные элемента формы Таблица — это динамический произвольный запрос.

В текущей задаче реквизит формы (он не основной) носит имя «СписокРеализацийТоваровУслуг», а не так, как часто можно встретить в конфигурации, что основной реквизит формы носит имя «Объект». И значения для добавленной колонки берется из реквизита типа «ДинамическийСписок» и для элемента формы. Поэтому строка для «ПутьКДанным» — «СписокРеализацииТоваровУслуг.ДопМФ_Отгружено» с указанием через «.» имени нового реквизита.

Это все условия и нюансы, с которыми пришлось столкнуться на практике для программной модификации произвольного запроса динамического списка реквизита управляемой формы в 1С 8, чтобы потом программно вывести колонку нового реквизита объекта конфигурации базы в элемент «Таблица» формы .

Оцените, оказалась ли эта публикация полезна для Вас?




© www.azhur-c.ru 2013-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

25-11-2021

Журавлев А.С.
(Сайт azhur-c.ru)

Назад

Понравилась статья? Поделить с друзьями:
  • Ошибка при установке значения xdto
  • Ошибка при установке касперского kernel32 dll
  • Ошибка при установке значения атрибута контекста типкода
  • Ошибка при установке значения атрибута контекста картинка несоответствие типов
  • Ошибка при установке кали линукс virtualbox