Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
Конвертация, перенос дополнительных реквизитов номенклатуры |
Я |
24.12.14 — 14:54
при переносе дополнительных реквизитов (свойств) как перенести тип значения свойства?
1 — 24.12.14 — 14:56
доп реквизиты в рс хранятся на сколько я помню. его и переноси
2 — 24.12.14 — 14:59
в ут 11.1
3 — 24.12.14 — 15:01
значения хранятся в таблице номенклатуры
4 — 24.12.14 — 15:01
тип определяется в плане видов характеристик
5 — 24.12.14 — 15:01
конвертации как сказать, в метаданных нет поля типданных
6 — 24.12.14 — 15:08
(3) Да ладно. Да не верю
7 — 24.12.14 — 15:09
СвойстваОбъектов рс не?
8 — 24.12.14 — 15:10
не, сейчас это табличная часть справочника номенклатура
9 — 24.12.14 — 15:11
суть вопроса, не значения перетянуть а тип значения свойства
10 — 24.12.14 — 15:11
тип значения элемента плана вида характеристик
11 — 24.12.14 — 15:12
(8) ПКО для ПВХ есть?
12 — 24.12.14 — 15:13
да, есть
13 — 24.12.14 — 15:14
ТипЗначения является стандартным реквизитом ПВХ, в ПКО для ПВХ есть ПКС «ТипЗначения»?
14 — 24.12.14 — 15:22
нет
15 — 24.12.14 — 15:23
в том то все и дело, в упор не вижу, а в запросе это поле присутствует (консольЗапросов)
16 — 24.12.14 — 15:23
(14) Ты знаешь что делать)
17 — 24.12.14 — 15:24
или не знаешь?
18 — 24.12.14 — 15:24
как нить через параметр?
19 — 24.12.14 — 15:28
(18) фуфуфу. нельзя так измываться.
Добавляй ПКС «ТипЗначения». Если в свойствах не видишь такого — загрузи структуру конфигурации (если ты загрузил только правила то структуры конфигураций создались только в части используемых в правилах объектов и свойств а не полностью)
20 — 24.12.14 — 15:58
структуру конфигурации загружал
21 — 24.12.14 — 15:58
ничего не изменилось
22 — 24.12.14 — 15:59
В ПКЗ заглядывал?
23 — 24.12.14 — 16:02
делай для пвх отдельное пко и подсовывай его реквизиты ТЧ
24 — 24.12.14 — 16:04
(20) нет свойства «ТипЗначения»?
25 — 24.12.14 — 16:06
нет, скрин прислать?
26 — 24.12.14 — 16:07
(23) что? какой ТЧ?
27 — 24.12.14 — 16:08
(22) да, на стороне источника только Контрагент
28 — 24.12.14 — 16:08
выгрузка из УТ 10.2 в УТ 11.1
29 — 24.12.14 — 16:09
(25) В правилах самих указаны 2 конфигурации, ты их перезагрузил (предварительно выгрузив из базы УТ обработкой)? Что-то мне подсказывает что нет, ни фига ты не сделал этого.
30 — 24.12.14 — 16:09
тип значения удалось передать через параметр таким способом:
Значение = ЗначениеВСтрокуВнутр(Источник.ТипЗначения.Типы());
после загрузки при присвоении ошибка
ОписаниеОшибки = Ошибка при установке значения атрибута контекста (ТипЗначения): Тип не является подмножеством типа значений плана видов характеристик
31 — 24.12.14 — 16:10
(29) изначально у меня не было правил, делал выгрузку метаданных
32 — 24.12.14 — 16:10
(30) тип строка, разная длина …
33 — 24.12.14 — 16:12
(26) табличная часть, где свойства хранятся
34 — 24.12.14 — 16:13
а по-хорошему — берешь типовые правила УТ11 — БП 3.0, смотришь как там и не паришься
35 — 24.12.14 — 16:18
ЩАс загружу у себя — посмотрю
36 — 24.12.14 — 16:35
да, не выгружает. сейчас посмотрю
37 — 24.12.14 — 16:54
все, сделал. ЩАс покажу
38 — 24.12.14 — 16:56
В обработках MD82Exp и MD83Exp в модуле объекта в процедуре ВыгрузитьОбъекты:
после
«Для каждого Объект из Метаданные[ИмяОбъекта] Цикл
ВыгрузитьОбъект(Объект, ПрефиксИмени);»
добавляешь следующий код:
«Если Объект.Имя = «СвойстваОбъектов» Тогда
Родитель = «00000000-0000-0000-0000-000000000000»;
Свойство = Новый Структура(«Имя, Синоним, Комментарий, Тип»);
Свойство.Имя = «ТипЗначения»;
Свойство.Синоним = «»;
Свойство.Комментарий = «»;
Свойство.Тип = Новый ОписаниеТипов(«Тип»);
ВыгрузитьСвойство(Свойство, «Свойство», Родитель);
КонецЕсли;»
39 — 24.12.14 — 17:00
супер конечно, но что то мне подсказывает, что сделано это не просто так, это как выгрузка регистров накопления
40 — 24.12.14 — 17:00
но большое спасибо за помощь!
41 — 24.12.14 — 17:03
Сделано это т.к. не было необходимости. Стандартные реквизиты выгружаются в процедуре «ВыгрузитьОсновныеСвойства(Объект)» — туда можно было бы вставить и это свойство. Но я не стал разбираться — все жде разовая потребность. У меня после загрузки конфигурации обновленной обработкой появилось свойство «ТипЗначения». Саму выгрузку не проверял. Отпишись как сделаешь — интересно просто
42 — 24.12.14 — 17:04
(30) все правильно. через параметр. а устанавливаешь его при загрузке объекта пвх. он же орет, что в пвх такрй тип недоступен
43 — 24.12.14 — 17:13
(40) Я проверил. Грузится все хорошо)
DionisSergeevich
44 — 24.12.14 — 17:52
(40) Получилось?
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
1 февраля, 2017
21 апреля, 2017
Дано
- 1С конфигурация бухгалтерия предприятия 2.0
- Ошибка печати ПКО (приходный кассовый ордер):
{ОбщаяФорма.ФормаПечати.Форма(18)}: Ошибка при установке значения атрибута контекста ЭлементыФормы.ПолеДокумента.ПолеСверху по причине: Несоответствие типов |
Анализ проблемы
На первый взгляд все ужасно:
- в конфигураторе видно, что система пытается выполнить строчку кода:
ЭлементыФормы.ПолеДокумента.ПолеСверху = ПечатныйДокумент.ПолеСверху; |
- в отладке видно, что обе переменные типа “Число”,
- синтакс-помощник говорит что:
ТабличныйДокумент (SpreadsheetDocument) ПолеСверху (TopMargin) Использование: Чтение и запись. |
То есть ПолеСверху доступно для записи и обе переменные типа число и все тут корректно, но система говорит “Несоответствие типов” – полный бред.
Решение
На решение проблемы натолкнула фраза “Ошибка при установке значения атрибута контекста”, значит что-то не так с доступом.
Оказалось в базе нет ни одного пользователя и работа осуществлялась под пользователем НеАвторизован. После создания пользователя с необходимыми правами все заработало.
Дополнено 2017.04.10
Проблема повторилась, но уже при печати РТУ и с использованием уже настроенной учетной записи.
Помогло создание нового пользователя с такими же правами доступа. То есть нового создаем, старого удаляем и после этого все работает.
Показывать по
10
20
40
сообщений
Новая тема
Ответить
Михаил80
Дата регистрации: 31.01.2012
Сообщений: 3
«Ну подскажите как исправить ошибку?<br>{Документ.ИК_БезвозмездноеПолучение.Форма.ФормаДокумента(300)} : Ошибка при установке значения атрибута контекста (Видимость)<br>ЭлементыФормы.ОсновныеСредства.Колонки.АмортизационнаяГруппа.Видимость= ВестиПоАналитике;<br>по причине: Несоответствие типов»
ZhAmAn
Дата регистрации: 23.12.2010
Сообщений: 1333
«Яблоко=Апельсин;<br>Вот что у вас,а должно быть яблоко=истина;»
Михаил80
Дата регистрации: 31.01.2012
Сообщений: 3
«И где ошибка?<br> <br>Процедура ДоступностьЭлементов()<br> Если ПоступлениеМЗ Тогда<br> ЭлементыФормы.Панель1.Страницы.МатериальныеЗапасы.Видимость = Истина;<br> ЭлементыФормы.Панель1.Страницы.ОсновныеСредства.Видимость = Ложь;<br> Иначе<br> ЭлементыФормы.Панель1.Страницы.МатериальныеЗапасы.Видимость = Ложь;<br> ЭлементыФормы.Панель1.Страницы.ОсновныеСредства.Видимость = Истина;<br> Если УчетНПА Тогда<br> ЭлементыФормы.ОсновныеСредства.Колонки.ГрупповойУчет.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.АмортизационнаяГруппа.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КодПоОКОФ.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СуммаАмортизации.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СчетАмортизации.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КОСГУСчетаАмортизации.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КОСГУСчетаЗатрат.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.НачислятьАмортизацию.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ОстСрокПолезногоИспользования.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ПорядокПогашенияСтоимости.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СпособНачисленияАмортизации.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СрокПолезногоИспользования.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СчетУчетаЗатрат.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат2.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат3.Видимость = Ложь;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат4.Видимость = Ложь;<br> Иначе<br> ЭлементыФормы.ОсновныеСредства.Колонки.ГрупповойУчет.Видимость = Истина;<br> ЭлементыФормы.ОсновныеСредства.Колонки.АмортизационнаяГруппа.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КодПоОКОФ.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СрокПолезногоИспользования.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СуммаАмортизации.Видимость = Истина;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СчетАмортизации.Видимость = Истина;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КОСГУСчетаАмортизации.Видимость = Истина;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ОстСрокПолезногоИспользования.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ПорядокПогашенияСтоимости.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СпособНачисленияАмортизации.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.НачислятьАмортизацию.Видимость = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СчетУчетаЗатрат.Видимость = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.КОСГУСчетаЗатрат.Видимость = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат2.Видимость = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат3.Видимость = НачислятьАмортизациюКазны;<br> ЭлементыФормы.ОсновныеСредства.Колонки.СубконтоСчетаЗатрат4.Видимость = НачислятьАмортизациюКазны;<br> КонецЕсли;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ДатаВводаВЭксплуатацию.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ФактическийСрокЭкспл.Видимость = ВестиПоАналитике;<br> ЭлементыФормы.ОсновныеСредства.Колонки.ИнвНомер.Видимость = ВестиПоАналитике;<br> КонецЕсли;»
ZhAmAn
Дата регистрации: 23.12.2010
Сообщений: 1333
Что такое ВестиПоАналитике?отладчиком смотрел что там?
Михаил80
Дата регистрации: 31.01.2012
Сообщений: 3
к счету добовляется аналитика, так как у счета может быть несколько аналитик. Скорей всего чтото в праметрах аналитики. Например для 01 счета справочник сотрудников может быть подключен как аналитика, но называться он будет материально ответственное лицо.
Денис (САМАРА)
Дата регистрации: 09.04.2008
Сообщений: 8351
ZhAmAn
Дата регистрации: 23.12.2010
Сообщений: 1333
я знаю что такое аналитика,конкретно скажи что за переменная!
Денис (САМАРА)
Дата регистрации: 09.04.2008
Сообщений: 8351
А что это за документ такой «ИК_БезвозмездноеПолучение» и откуда он взялся в БП?
ZhAmAn
Дата регистрации: 23.12.2010
Сообщений: 1333
Показывать по
10
20
40
сообщений
Heltarion 2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
||||
1 |
||||
02.12.2011, 11:18. Показов 8369. Ответов 11 Метки нет (Все метки)
Добрый день! ТПП — «табличное поле правил», в ней уже занесены некотрые значения из XML Код процедуры:
__________________ 0 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
02.12.2011, 11:32 |
2 |
СохранитьНажатие(Элемент) это событие формы 1 |
2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
|
02.12.2011, 11:56 [ТС] |
3 |
СохранитьНажатие(Элемент) это событие формы В МодулеОбъекта создал функцию «Процедура СохранитьВЭксель(ТПП) Экспорт» 0 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
02.12.2011, 12:10 |
4 |
процедуру ИнициализацияЭкселя() тоже закинь в модуль объекта 1 |
2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
|
02.12.2011, 12:19 [ТС] |
5 |
Да я именно так и сделал, просто забыл упомянуть, ТПП нужна в противном случае он не понимает что это за переменная Добавлено через 4 минуты Так работает, но если я поставлю Дело в том что «стр.НоменклатураБазы» — это справочник ссылка, если у нее текстовый тип то программа глотает и записывает. 0 |
19 / 18 / 1 Регистрация: 15.11.2011 Сообщений: 54 |
|
02.12.2011, 12:22 |
6 |
чет вы мудрено делаете. 1 |
2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
|
02.12.2011, 12:28 [ТС] |
7 |
В данный момент ему не нравится присваемое значение к ячейке экселя (если я правильно понимаю сообщение «Ошибка при установке значения атрибута контекста (Value)» ) Причем если тип значения строка, то он его получает без вопросо, если тип значения СправочникССсылка, то он руегается на «Ошибка при установке значения атрибута контекста (Value)». Я просто не понимаю как обратиться к такому типу переменных чтобы получить значение типа строка. 0 |
19 / 18 / 1 Регистрация: 15.11.2011 Сообщений: 54 |
|
02.12.2011, 12:30 |
8 |
а принудительно все значения в текст перевести нельзя? 1 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
02.12.2011, 12:30 |
9 |
стр.НоменклатураБазы.Наименование например 1 |
2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
|
02.12.2011, 12:32 [ТС] |
10 |
стр.НоменклатураБазы — это уже есть наименование интересующего меня поля (имя столбца), в некотрых случаях можно писать: стр.НоменклатураБазы.Значение, но это нетот случай Добавлено через 56 секунд 0 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
02.12.2011, 12:34 |
11 |
значение из Excel? 1 |
Heltarion 2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
||||
02.12.2011, 12:43 [ТС] |
12 |
|||
Рабочий код:
0 |
Код 1C v 8.3
// Реквизиты
ДобавляемыеРеквизиты = Новый Массив;
ИмяТаблицы = "КомандыДополнительныхОбработок";
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицы, Новый ОписаниеТипов("ТаблицаЗначений")));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ДополнительныеОтчетыИОбработки"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ВариантЗапуска", Новый ОписаниеТипов("ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяЭлемента", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоОтчет", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//реквизит
ИмяЭлемента = "Добавлен" + ИндексЭлемента;
Реквизит = Новый РеквизитФормы(ИмяЭлемента, ОписаниеТипов);
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//команда печать
ИмяКомандыПечать = "ДобавленПечать" + ИндексЭлемента;
КомандаПечать = Команды.Добавить(ИмяКомандыПечать);
КомандаПечать.Действие = "ПечатьДокумента";
КомандаПечать.Подсказка = НСтр("ru = 'Печать документа...'");
//элемент формы
//Родитель = Элементы.ГруппаСформированныеДокументы;
Элемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементГруппа);
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным = ИмяЭлемента;
Элемент.Гиперссылка = Истина;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
ЭтаФорма[ИмяЭлемента] = Документ;
//кнопка печать
ИмяЭлементаПечать = "ДобавленПечать" + ИндексЭлемента;
ЭлементПечать = Элементы.Добавить(ИмяЭлементаПечать, Тип("КнопкаФормы"), ЭлементГруппа);
ЭлементПечать.Картинка = БиблиотекаКартинок.Печать;
ЭлементПечать.Отображение = ОтображениеКнопки.Картинка;
ЭлементПечать.ИмяКоманды = ИмяКомандыПечать;
Есть внешняя обработка, на ней расположен табличный документ. Одной из колонок я хочу присвоить тип — справочник «Номенклатура», чтобы можно было по щелчку мышкой выбирать из справочника номенклатуру и помещать конкретное значение номенклатуры в ячейку табличного документа. Делаю вот такой код, но выходит ошибка: {Форма.Форма.Форма}: Ошибка при установке значения атрибута контекста (ТипЗначения)
да, всё верно, не соответствует тип, присваиваемый ТипуЗначения
Новый ОписаниеТипов(Тип(«тралялял»));
НовыйЭлементФормы = Элементы.Добавить(«Табличка»+Колонка.Имя, Тип(«ПолеФормы»), ЭлементТЗ);
Сделал так: Но выходит снова ошибка: {Форма.Форма.Форма}: Ошибка при вызове конструктора (ОписаниеТипов) по причине: Несоответствие типов (параметр номер ‘1’)
Скажем так, я не могу до конца понять прочитанное в СП в отношении типов)
Спасибо, теперь получилось:-)
Тэги:
Комментарии доступны только авторизированным пользователям
Доброго времени суток, уважаемые коллеги! В этой статье рассмотрены некоторые кусочки кода, который часто нужны на разных этапах разработки программного кода 1С. Здесь собраны некоторые примеры, которые использовались в разных задачах, с которыми мне пришлось столкнуться. Кроме того, есть статья о примерах программирования в версии 7.7 и отдельная статья по примерам работы с табличным полем. Итак, приступим!
- Как правильно реализовать цикл с постусловием?
- Как реализовать цикл с уменьшающимся счетчиком?
- Как получить название документа (аналог метода 1С 7.7 Вид())?
- Как узнать имеет ли текущий пользователь определённую роль?
- Как программно формируются кнопки печати документов в 1С:Предприятие 8.2?
- Как сделать запись в журнал регистрации 1С:Предприятие 8?
- Как правильно сделать выбор из составного типа данных?
- Как узнать тип объекта 1С8?
- Как открыть выпадающий список около элемента управления формы?
- Как программно переключить страницу (закладку) на «Панели»?
- Как активизировать элемент формы?
- Как обратиться к текущей странице формы, если на форму не помещён элемент управления формы «Панель»?
- Как установить значение в поле ввода в табличной части документа?
- Как правильно удалить строки из текстового файла с помощью встроенного языка системы 1С8?
- Как в 1С8 получить из строки с разделителями определённую подстроку по её позиции?
- Как проверить существует ли реквизит справочника 1с8?
- Как перебрать субконто счёта?
- Как устранить ошибку: Тип не является подмножеством типа значений плана видов характеристик?
Как правильно реализовать цикл с постусловием?
Повторять = Истина; Пока Повторять Цикл А=А+1; Повторять = (А<10); КонецЦикла;
Благодаря переменной Повторять наш цикл выполнится хотя бы один раз.
Как реализовать цикл с уменьшающимся счетчиком?
Вариант 1.
Зн1 = 100; Зн2 = 1; Сч=Зн1; Пока Сч>=Зн2 Цикл Сч=Сч-1; КонецЦикла;
Вариант 2.
Вариант 2. Для Сч = -Зн1 По -Зн2 Цикл // Чтобы получить положительную величину, // если вдруг Сч станет положительным. СчЗн = Макс(Сч, -Сч); КонецЦикла;
Как получить название документа (аналог метода 1С 7.7 Вид())?
ДокументСсылка.Метаданные().Имя; // получаем: УвольнениеИзОрганизаций ДокументСсылка.Метаданные().ПолноеИмя(); // получаем: Документ.УвольнениеИзОрганизаций
Как узнать имеет ли текущий пользователь определённую роль?
Используйте функцию сеанса работы «РольДоступна» (IsInRole), которая определяет доступность указанной роли текущему пользователю:
Если Не РольДоступна("ПравоАдминистрирования") Тогда Сообщить("Роль «Право администрирования» не доступна!"); КонецЕсли;
Или используйте следующую функцию:
Функция ПравоАдмина() Для Каждого РольМетаданных из Метаданные.Роли Цикл ИмяРоли = РольМетаданных.Имя; Если ИмяРоли = "ПравоАдминистрирования" Тогда Код = СокрЛП(глТекущийПользователь.Код); Юзер = ПользователиИнформационнойБазы.НайтиПоИмени(Код); Возврат Юзер.Роли.Содержит(РольМетаданных); КонецЕсли; КонецЦикла; КонецФункции // ПравоАдмина()
Как программно формируются кнопки печати документов в 1С:Предприятие 8.2?
- В модуле формы документа в процедурах ПередОткрытием, ПослеЗаписи, ОсновныеДействияФормыУстановитьПечатьПоУмолчанию добавляют вызов процедуры УстановитьКнопкиПечати.
- Процедура УстановитьКнопкиПечати находится модуле формы документа. В этой процедуре и происходят основные действия по формированию кнопок печати. Обратим внимание, что из нее происходит вызов функции ПолучитьДеревоМакетовПечати.
- Функция ПолучитьДеревоМакетовПечати получает список макетов конфигурации и внешних макетов. Для этого во втором параметре этой процедуры вызывается функция ПолучитьСтруктуруПечатныхФорм, а в ее теле функция ДобавитьВДеревоМакетовДополнительныеФормы.
- Процедура ПолучитьСтруктуруПечатныхФорм возвращает структуру с внутренними печатными формами. Пример:
// Возвращает доступные варианты печати документа // // Вовращаемое значение: // Струткура, каждая строка которой соответствует одному из вариантов печати // Функция ПолучитьСтруктуруПечатныхФорм() Экспорт СтруктураМакетов = Новый Структура; СтруктураМакетов.Вставить("ПереченьЦен","Перечень цен"); СтруктураМакетов.Вставить("Ценники", "Ценники на товары"); СтруктураМакетов.Вставить("ПечатьДвеЦены", "Две цены"); Возврат СтруктураМакетов; КонецФункции // ПолучитьСписокПечатныхФорм()
- С помощью процедуры ДобавитьВДеревоМакетовДополнительныеФормы получаются дополнительные печатные формы из справочника «ВнешниеОбработки».
- В модуле объекта документа, в процедуре Печать() добавляются условия, обрабатывающее идентификатор новой печатной формы:
// Процедура осуществляет печать документа. Можно направить печать на // экран или принтер, а также распечатать необходмое количество копий. // Название макета печати передается в качестве параметра, // по переданному названию находим имя макета в соответствии. // // Параметры: // НазваниеМакета - строка, название макета. // Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт ... Если ИмяМакета = "ПереченьЦен" Тогда ТабДокумент = ПечатьДокумента(); ИначеЕсли ИмяМакета = "Ценники" Тогда Попытка ТабДокумент = ПечатьЦенников(); Исключение Предупреждение("Нет прав доступа!"); КонецПопытки; ИначеЕсли ИмяМакета = "ПечатьДвеЦены" Тогда ТабДокумент = ПечатьДокументаДвеЦены(); КонецЕсли; ... КонецПроцедуры // Печать()
Как сделать запись в журнал регистрации 1С:Предприятие 8?
Процедура РегистрСведенийСписокДополнительныеУслугиПередУдалением(Элемент) ТС = Элемент.ТекущаяСтрока; Комментарий = "Код: " + ТС.Код + ". Номенклатура: " + ТС.Номенклатура + ". Вид наценки: " + ТС.ВидНаценки; ЗаписьЖурналаРегистрации("Данные.Удаление", УровеньЖурналаРегистрации.Информация, Метаданные.РегистрыСведений.ДополнительныеУслуги, РежимТранзакцииЗаписиЖурналаРегистрации.Независимая, Комментарий); КонецПроцедуры
Как правильно сделать выбор из составного типа данных?
Процедура УслугиПунктОтправкиНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; МассивТипов = Новый Массив(); МассивТипов.Добавить(Тип("СправочникСсылка.НаселённыеПункты")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов); ЭлементыФормы.Услуги.Колонки.ПунктОтправки. ЭлементУправления.ОграничениеТипа = ОписаниеТипов; // Первый вариант ЭлементыФормы.Услуги.Колонки.ПунктОтправки.ЭлементУправления.Значение = ОписаниеТипов.ПривестиЗначение( ЭлементыФормы.Услуги.Колонки.ПунктОтправки.ЭлементУправления.Значение); // Второй вариант ОписаниеТипов.ПривестиЗначение( ЭлементыФормы.Услуги.ТекущаяСтрока.ПунктОтправки); КонецПроцедуры
Как узнать тип объекта 1С8?
Если ТипЗнч(ТекОбъект) = Тип("СправочникСсылка.Номенклатура") Тогда ... КонецЕсли; Если ТипЗнч(ТекОбъект) = Тип("Строка") Тогда ... КонецЕсли;
Как программно переключить страницу (закладку) на «Панели»?
Панель1 = ЭлементыФормы.Панель1; Панель1.ТекущаяСтраница = Панель1.Страницы.Страница2; Панель1.ТекущаяСтраница = Панель1.Страницы["Страница2"];
Как открыть выпадающий список около элемента управления формы?
Воспользуемся методом формы ВыбратьИзМеню(<СписокЗначений>, <ЭлементФормы>):
//выведем пользователю список вариантов, //для ввода СФ около элемента управления «Кнопка» СписокДействийВводСФ = Новый СписокЗначений(); СписокДействийВводСФ.Добавить("ВвестиНовыйСчетФактуру", "Ввести новый счет-фактуру"); СписокДействийВводСФ.Добавить("ДополнитьСуществующийСчетФактуру", "Дополнить существующий счет-фактуру"); // ФормаДокумента.ТекущийЭлемент - //Элемент, около которого открывается список ВыбранныйВариантВводаСФ = ФормаДокумента.ВыбратьИзМеню(СписокДействийВводСФ, ФормаДокумента.ТекущийЭлемент); Если ВыбранныйВариантВводаСФ = Неопределено Тогда Возврат; КонецЕсли; Если ВыбранныйВариантВводаСФ.Значение = "ВвестиНовыйСчетФактуру" Тогда ... КонецЕсли;
Как активизировать элемент формы?
Воспользуйтесь свойством «ТекущийЭлемент» объекта «Форма».
Если НЕ ЗначениеЗаполнено(Ответственный) Тогда Предупреждение("Сначала заполните поле: Ответственный!", 3); ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Ответственный; КонецЕсли;
Как обратиться к текущей странице формы, если на форму не помещён элемент управления формы «Панель»?
У формы есть свойство «Панель», обращаемся через него.
ЭтаФорма.Панель.ТекущаяСтраница = ...
Пример использования:
ПанельФормы = ЭтаФорма.Панель; СтраницыФормы = ПанельФормы.Страницы; Если ПанельФормы.ТекущаяСтраница = СтраницыФормы.Страница1 Тогда //Мы на первой странице . . . ИначеЕсли ПанельФормы.ТекущаяСтраница = СтраницыФормы.Страница2 Тогда //Мы на второй странице . . . Иначе //Мы на последней странице . . . КонецЕсли;
Как установить значение в поле ввода в табличной части документа?
У нас есть документ, в котором табличная часть «Состав» содержит реквизит «Автомобиль» типа «СправочникСсылка.ТранспортныеСредства». Нужно, чтобы рядом стоящее поле ввода «НомерАвтомобиля» заполнялось значением из реквизита «Автомобиль.ГосНомер».
Как установить значение в поле ввода «НомерАвтомобиля» для каждой строки табличной части? В обработчике событий ПриПолученииДанных табличной часть «Состав» напишем следующий код:
Процедура СоставПриПолученииДанных(Элемент, ОформленияСтрок) Для каждого ОформлениеСтроки из ОформленияСтрок цикл ВычисленноеЗначение = ОформлениеСтроки.Ячейки.Автомобиль.Значение.ГосНомер; Оформлениестроки.Ячейки.НомерАвтомобиля. УстановитьТекст(ВычисленноеЗначение); КонецЦикла КонецПроцедуры
Как правильно удалить строки из текстового файла с помощью встроенного языка системы 1С8?
Предположим, нужно удалить все строки из текста, которые содержат слово «1С».
Процедура УдалитьСтрокиТекста() ТекстДок = Новый ТекстовыйДокумент; ТекстДок.Прочитать("Текст.txt"); Сч = 1; Пока Сч < ТекстДок.КоличествоСтрок() Цикл Строка = ТекстДок.ПолучитьСтроку(Сч); Если Найти(Строка, "1С") > 0 Тогда ТекстДок.УдалитьСтроку(Сч); Иначе // Благодаря этой переменной мы // не пропускаем строки в тексте Сч = Сч + 1; КонецЕсли; КонецЦикла; ТекстДок.Записать("Текст.txt"); КонецПроцедуры
Подобная процедура для правильного удаления строк таблицы значений описана тут. Также можете взглянуть на реализацию удаления строк в текстовом файле на PHP.
Как в 1С8 получить из строки с разделителями определённую подстроку по её позиции?
Для решения этой задачи используем функцию ПолучитьСтр():
//****************************************************************************** // ПолучитьСтр(знач ГдеИщем, Ном = 1, Р = ",") // // Параметры: // знач ГдеИщем - строка, Ном = 1 - число, Р = "," - строка // // Возвращаемое значение: // Строка // // Описание: // Возвращает подстроку под номером Ном из строки ГдеИщем с разделителями Р // Функция ПолучитьСтр(знач ГдеИщем, Ном = 1, Р = ";") Ном1 = Число(Ном); Поз=Найти(ГдеИщем,Р); Если (Поз = 0) Тогда Возврат ГдеИщем;КонецЕсли; Стр1=Лев(ГдеИщем,Поз-1); Если Ном1 = 1 Тогда Возврат Стр1;КонецЕсли; СчетчикЦикла = 0; Для СчетчикЦикла = 2 По Ном1 Цикл ГдеИщем=Сред(ГдеИщем,Поз+1,СтрДлина(ГдеИщем)-Поз); Поз=Найти(ГдеИщем,Р); Если (Поз = 0) Тогда Возврат ГдеИщем;КонецЕсли; Стр=Лев(ГдеИщем,Поз-1); Если Ном1 = СчетчикЦикла Тогда Возврат Стр;КонецЕсли; КонецЦикла; КонецФункции // ПолучитьСтр()
Пример использования:
НужнаяСтрока = "1С,PHP,Delphi,HTML,CSS"; Сообщить(ПолучитьСтр(НужнаяСтрока, 3, ","));
В окно служебных сообщений будет выведена подстрока «Delphi». Чтобы посмотреть как работает эта функция вы можете скачать внешнюю обработку здесь.
Посмотрите как реализована работа такой же функции в 1С 7.7.
Как проверить существует ли реквизит справочника 1с8?
СтатьяЗатрат.Метаданные().Реквизиты.Найти("ПринятиеКНалоговомуУчету") <> Неопределено
Как перебрать субконто счёта?
Процедура ПолучитьСубконтоСчета(Счет) ВидыСубконто = Счет.ВидыСубконто; Для Каждого ВидСубконто Из ВидыСубконто Цикл Сообщить(ВидСубконто.ВидСубконто); КонецЦикла; КонецПроцедуры
Как устранить ошибку: Тип не является подмножеством типа значений плана видов характеристик?
При попытке перенести данные из одной базы в другую возникла ошибка:
Ошибка при установке значения атрибута контекста (ТипЗначения): Тип не является подмножеством типа значений плана видов характеристик
Не переносилось число с длиной 18 и точностью 6 (18.6) из базы источника, так как было установлена длина 15, точность 3 (15.3) в базе приемнике. Чтобы решить данную проблему, нужно в текущем плане видов характеристик изменить длину и точность с 15.3 на 18.6 в диалоге редактирования типа данных.