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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Сегодня многие компании стали поглядывать в сторону использования операционных систем отличной от Майкрософта.

Почему же так? Ведь старый добрый Виндоуз давно изучен и чего еще нам искать.

Ответ прост — свободное, бесплатное распространение и повышенная популярность дистрибутива Ubuntu в связке с Postgre SQL.

Эта сборка ядра на базе Linux одной из первых получила поддержку со стороны «Фирмы 1С». Линекс системы менее требовательны к железу, меньше подвержены взлому и вторжениям вирусных программ. Графические оболочки пользовательских систем имеют сейчас больше разнообразия и выглядят очень достойно. Установка дистрибутива Ubuntu проходит гораздо быстрее проще чем Windows. В этой публикации мы рассмотрим насколько сложно провести обновление серверной части дистрибутива 1С:Предприятие с версии 8.3.14.1565 на релиз 8.3.14.1694.

Для легального доступа к дистрибутивам и обновлениям платформы и конфигураций 1С у вас должен быть действующий договор ИТС.

Мы можем помочь проверить его наличие и продлить. Ознакомиться с вариантами и ценами вы можете на нашем сайте в специальном разделе ИТС.

Если все условия соблюдены входим на страничку с обновлениями https://releases.1c.ru/total

входим на страничку с обновлениями 1С Предприятие 8

входим на страничку с обновлениями 1С Предприятие 8

входим на страничку с обновлениями 1С Предприятие 8

входим на страничку с обновлениями 1С Предприятие 8

Будет предложено скачать файл архива нужного нам дистрибутива: deb64_8_3_14_1694.tar.gz. Переносим его не сервер в отдельную папку пользователя, например «~/1cdistr» и распаковываем содержимое.

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

Далее запускаем терминал с правами суперпользователя, переходим в папку с дистрибами и одной командой устанавливаем сразу все пакеты 1С:Предприятие Сервер x64 Linux Debian / Ubuntu  поверх уже установленных:

sudo dpkg -i *.deb

одной командой устанавливаем сразу все пакеты 1С Предприятие Сервер x64 Linux Debian/Ubuntu

Проверяем и восстанавливаем зависимость пакетов:

apt-get install -f -y

Проверяем и восстанавливаем зависимость пакетов

Делаем рестарт сервера 1С Предриятие 8.3 и проверяем его статус:

service srv1cv83 restart
service srv1cv83 status

Делаем рестарт сервера 1С Предриятие 8.3 Linux Ubuntu

Если получаем состояние как на картинке выше «active«, то всё получилось по плану. Если получили что-то другое, то можно повторить всю процедура сначала, либо вы можете всегда обратиться к нам за помощью.

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

П.С. После обновления платформы 1С и проверки баз данных одна из них выдала вот такое неожиданное сообщение:

{Справочник ВерсииРзсширений МодупьМенеджера(113)} Ошибка при получении значения атрибута контекста (ВерсияРасширений)
ВерсияРасширений = ПараметрыСеанса ВерсияРасширений. по причине:
{Справочник ВерсииРэсширений МодупьМенеджера(26)}: Ошибка при установке значения атрибута контекста (ВерсияРасширений)
ПараметрыСеанса ВерсияРасширений = ВерсияРасширений(). по причине:
Несоответствие типов

Ошибка после обновления платформы 1С Предприятие 8.3 в конфигурации ЗУП 3.1

Хотя при этом никаких расширений в данной базе ЗУП не установлено, решается это чисткой кеша на рабочем месте пользователя. Как почистить кеш 1С вы можете прочитать в нашей отдельной публикации.

Для обновления и установки 1С Предприятие версии 8.3.18 читайте отдельную публикацию.

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Yakovin

Дата регистрации: 19.02.2007
Сообщений: 49

«Всем, здравствуйте!!! После обновления конфы с 1.6.25.6 до 1.6.25.9 с одного компьютера не получается открыть бухгалтерию, при этом появляется ошибка:<br><br>{ОбщийМодуль.ПолныеПрава(16)}: Ошибка при установке значения атрибута контекста (ТекущийПользователь): Несоответствие типов<br>ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь; по причине:<br>Несоответствие типов<br><br>Данная ошибка появляется при попытке войти под любым пользователем. Причем с любого другого компьютера и под любым пользователем данная база ОТКРЫВАЕТСЯ без проблем.<br><br>Я пробовал переустанавливать платформу, пробовал заново накатывать обновления, но ничего не помогает. База находится в корне сетевого диска. После повторной переустановки обновлений, базу также сохранил и в папке BACKUP, и в неё войти удалось. Т.е. на диске 2 одинаковые базы, одна в корне, другая в папке BACKUP, с проблемного компьютера удаётся войти только во вторую.<br><br>Платформа 8.1.15.14<br><br>Очень нужна Ваша помощь!!! Заранее всем огромное спасибо! «

BelikovS

Дата регистрации: 05.03.2007
Сообщений: 1701

Удалите базу из списка и добавьте снова или почистите кэш …:Documents and Settings…Local SettingsApplication Data1C1Cv81

Yakovin

Дата регистрации: 19.02.2007
Сообщений: 49

Показывать по
10
20
40
сообщений

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

Я
   Старуха Шапокляк

28.05.10 — 15:20

В спр.Контрагенты добавлен реквизит «Ключ» — строка, 25символов. Надо загрузить контрагентов из Эксель. В Эксель они попали из другой программы, которая является наиболее приоритетной, чем та, в которую загружать будем. Поэтому при загрузке, надо предусмотреть несколько условий:

анализируем Ключ: Ключ не совпал

анализируем ИНН: ИНН совпал

анализируем КПП: КПП совпал

В таком случае, надо заполнить Ключ и все остальные заполненные поля данными из файла (Кроме ИНН и КПП, т.к. они совпали).

Выходит ошибка:

Ошибка при установке значения атрибута контекста (ЮрФизЛицо): Реквизит недоступен для группы

ОбъектКА.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;

по причине:

Реквизит недоступен для группы

Вот мой код:

Ексель = новый COMОбъект(«Excel.Application»);

   
   Для ТекНомер = 1 По КоличествоСтраниц Цикл

       для н= 1 по   ВсегоКоличестовСтрок -1 цикл

           Ключ = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки).Value;

           Ключ = СтрЗаменить(Ключ, Символы.НПП, «»);                   //убрала пробел как разделитель

           
           КодКА = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +1).Value;

           КодКА = СтрЗаменить(КодКА, Символы.НПП, «»);                    

           
           ИНН = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +2).Value;

           ИНН = СтрЗаменить(ИНН, Символы.НПП, «»);                      

           
           КПП = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +3).Value;

           КПП = СтрЗаменить(КПП, Символы.НПП, «»);                      

           
           ЮРФЛ = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +4).Value;

           Название = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +5).Value;

           // …….

           
           // Ищем контрагента в справочнике по реквизиту      

           КА = Справочники.Контрагенты.НайтиПоРеквизиту(«Ключ»,Ключ);

           Если КА.Пустая() Тогда                              //не нашли с таким ключом  

               
               Если не ИНН = «» Тогда                              //ИНН не пустое в файле

                   КА = Справочники.Контрагенты;

                   СсылкаКА = КА.НайтиПоРеквизиту(«ИНН»,ИНН);

                   Если НЕ СсылкаКА.Пустая() Тогда                 //нашли такой ИНН

                       
                       Если не КПП = «» Тогда                          //КПП не пустое в файле

                           СсылкаКА = КА.НайтиПоРеквизиту(«КПП»,КПП);

                           Если Не СсылкаКА.Пустая() Тогда             //нашли такое КПП

                               
                               ОбъектКА = СсылкаКА.ПолучитьОбъект();

                               
                               // вставила это условие и все равно ошибка вылетает

                               Если ОбъектКА.ЭтоГруппа Тогда         //если элемент это группа

                                   Сообщить(ОбъектКА + » — является группой!!! Пропускаем его…»);

                                   Продолжить;

                               Иначе

                                   
                                   ОбъектКА.Ключ = Ключ;

                                   
                                   //ИНН не берем, т.к. он совпал

                                   //КПП не берем, т.к. он совпал

                                   //Код не меняем, т.к. в базе уже введен код

                                   
                                   Если не ЮРФЛ = «» Тогда               //если значение «ЮРФЛ» в файле заполнено

                                       Если СокрЛП(ЮРФЛ) = «Юридическое лицо» Тогда      

                                           ОбъектКА.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;

                                       ИначеЕсли СокрЛП(ЮРФЛ) = «Физическое лицо» Тогда  

                                           ОбъектКА.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;

                                       КонецЕсли;

                                   Иначе

                                       Сообщить («ЮЛ/ФЛ для контрагента » + Название + » в файле не заполнен!»);

                                   КонецЕсли;

                                   
                                   Если не Название = «» Тогда

                                       ОбъектКА.Наименование =  Название;

                                   КонецЕсли;

                                   
                                   // …                                    

                                   ОбъектКА.Записать();

                                   
                               КонецЕсли;  //если элемент это группа

                           Иначе // не нашли такое КПП

                           КонецЕсли;  //нашли такое КПП

                       КонецЕсли;  //КПП не пустое в файле

                   КонецЕсли;          //нашли такой ИНН

               КонецЕсли;  //ИНН не пустое в файле

           КонецЕсли;  //не нашли с таким ключом  

       КонецЦикла;

   КонецЦикла;

   maxar

1 — 28.05.10 — 15:24

включаем отладку — ставим галку остановка по ошибке — и смотрим результаты своих ошибок…

   mikecool

2 — 28.05.10 — 15:27

«Реквизит недоступен для группы » — не надо группе устанавливать этот реквизит
смотри признаки реквизитов — если только для элемента — не устанавливай для группы

   Старуха Шапокляк

3 — 28.05.10 — 15:30

(2) Так я и поставила условие в (0):

Если ОбъектКА.ЭтоГруппа Тогда         //если элемент это группа

                                   Сообщить(ОбъектКА + » — является группой!!! Пропускаем его…»);
                                   Продолжить;
                               Иначе

   butterbean

4 — 28.05.10 — 15:31

мне одному кажется, что поиск по ИНН и поиск по КПП между собой никак не связаны??

   hhhh

5 — 28.05.10 — 15:32

(4) связаны

   mikecool

6 — 28.05.10 — 15:32

а кпп всегда уникальны?

   mikecool

7 — 28.05.10 — 15:33

(5) как? меня это тоже напрягло

   maxar

8 — 28.05.10 — 15:34

пипец — если нашли по инн — потом если есть кпп ищем по кпп —

кпп — это не уникальный реквизит — т.е. ищем всегда один и тот эе элемент по кпп

   mikecool

9 — 28.05.10 — 15:35

КА = Справочники.Контрагенты;
                   СсылкаКА = КА.НайтиПоРеквизиту(«ИНН»,ИНН);
                   Если НЕ СсылкаКА.Пустая() Тогда                 //нашли такой ИНН
вот здесь будет только одна ссылка, если таковой имеется
затем ищем по кпп и находим другого контрагента

   Старуха Шапокляк

10 — 28.05.10 — 15:39

(9) спасибо, а как мне тогда в связке искать эти два значения — сначала ИНН, затем если нашли, то проверять у него КПП???

   butterbean

11 — 28.05.10 — 15:40

(10) запросом ищи

   Старуха Шапокляк

12 — 28.05.10 — 15:43

В (0) вопрос снимается, нашла где была ошибка.
Но вопрос про связь ИНН и КПП — остается открытым: Как сначала у этого контрагента проанализировать сначала ИНН, а затем у него же КПП?

   mikecool

13 — 28.05.10 — 15:43

(10) пробежалась по файлу, собрала инн-кпп в кучу, и затем параметром в (11)

   Старуха Шапокляк

14 — 28.05.10 — 15:44

(13) Легко вам сказать! Как это сделать???

   mikecool

15 — 28.05.10 — 15:47

инн-кпп в таблицу значений
таблицу значений во врем таблицу
потом запрос
типа
выбрать ИНН, КПП
поместить ВТ_Данные
Из &ТЗ;
выбрать Контрагенты.ссылка, ВТ_Данные.ИНН, ВТ_Данные.КПП
из ВТ_Данные
левое соединение справочник.контрагенты Как Контрагенты
по ВТ_Данные.ИНН = Контрагенты.ИНН И ВТ_Данные.КПП = Контрагенты.КПП

   mikecool

16 — 28.05.10 — 15:47

+15 там где нулл в ссылка — контрагент не найден

   Шапокляк

17 — 28.05.10 — 15:48

СсылкаКА = КА.НайтиПоРеквизиту(«ИНН»,ИНН);

                   Если НЕ СсылкаКА.Пустая() Тогда                 //нашли такой ИНН

                       
                       Если не КПП = «» Тогда                          //КПП не пустое в файле

//////////////////////////

Если СсылкаКА.КПП=КПП Тогда

///////////////////////////

вместо вот этого:

                           СсылкаКА = КА.НайтиПоРеквизиту(«КПП»,КПП);

                           Если Не СсылкаКА.Пустая() Тогда             //нашли такое КПП

   butterbean

18 — 28.05.10 — 15:52

(17) так ты не найдешь тех, у кого один ИНН, но разные КПП

   Шапокляк

19 — 28.05.10 — 15:56

(17) Мне не надо, это к автору пожалуйста. Я только догадываться могу, что у нее там в базе происходит. Так, чуть-чуть ее код подрихтовала, не более того

   Шапокляк

20 — 28.05.10 — 15:56

19 к (18)

   Старуха Шапокляк

21 — 28.05.10 — 16:03

(17),(18) cпасибо!
Но мне бы код полегче, без таблиц значений и временных таблиц, например, как в (17). Неужели, задать простое условие: проанализировать у контрагента ИНН, а затем у него же КПП — надо такую сложную конструкцию делать???

   hhhh

22 — 28.05.10 — 16:06

(21)

ВЫБРАТЬ

   Ссылка

ИЗ

   Справочник.Контрагенты КАК Контрагенты

ГДЕ

   Контрагенты.ИНН = &ИНН

   И Контрагенты.КПП = &КПП

   Шапокляк

23 — 28.05.10 — 16:11

(21)Ну не так там и слоно, хотя я бы запросом без соединений и попробовала, что-то вроде

   Запрос.Текст =

   «ВЫБРАТЬ

   |    Контрагенты.Ссылка,

   |    Контрагенты.Представление

   |ИЗ

   |    Справочник.Контрагенты КАК Контрагенты

   |ГДЕ

   |    Контрагенты.ИНН = &ИНН

   |    И Контрагенты.КПП = &КПП»;

   Запрос.УстановитьПараметр(«ИНН», ИНН);

   Запрос.УстановитьПараметр(«КПП», КПП);

   Результат = Запрос.Выполнить();

   ВыборкаДетали = Результат.Выбрать();

ЕстьКонтрагент=0;

   Пока ВыборкаДетали.Следующий() Цикл

ЕстьКонтрагент=1;

СсылкаКА=ВыборкаДетали.ссылка;

ОбъектКА=СсылкаКА.ПолучитьОбъект();

//пиши тут что надо

   КонецЦикла;

Если ЕстьКонтрагент=0 Тогда

//НЕТ с таким ИНН и КПП

КонецЕсли;

   Старуха Шапокляк

24 — 28.05.10 — 16:19

(22), (23) — спасибо, а как мне связать ваш запрос с данными из файла (Ключ, ИНН и КПП)?

   Шапокляк

25 — 28.05.10 — 16:20

Для ТекНомер = 1 По КоличествоСтраниц Цикл

       для н= 1 по   ВсегоКоличестовСтрок -1 цикл

           Ключ = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки).Value;

           Ключ = СтрЗаменить(Ключ, Символы.НПП, «»);                   //убрала пробел как разделитель

           
           КодКА = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +1).Value;

           КодКА = СтрЗаменить(КодКА, Символы.НПП, «»);                    

           
           ИНН = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +2).Value;

           ИНН = СтрЗаменить(ИНН, Символы.НПП, «»);                      

           
           КПП = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +3).Value;

           КПП = СтрЗаменить(КПП, Символы.НПП, «»);                      

           
           ЮРФЛ = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +4).Value;

           Название = Ексель.Sheets(ТекНомер).Cells(Строки,Колонки +5).Value;

           // …….

 Запрос=Новый Запрос;

и вот сюда.

   Старуха Шапокляк

26 — 28.05.10 — 16:24

(25) Большое СПАСИБО!!!! Буду пробовать!!!
)))))))

   Старуха Шапокляк

27 — 28.05.10 — 16:34

Подскажите еще, пожалуйста, два момента:

1) Нужен вначале анализ на реквизит Ключ. Если такого ключа нет в базе, то идет запрос как в (23) и тогда этот Ключ тоже надо вбить в базу.

2) В запросе (23) я найду контрагентов, которых:
или нет с таким как в файле ИНН и КПП
или есть с таким как в файле ИНН и КПП.
Т.е. это случаи или полного совпадения или полного несовпадения. А как мне тогда найти тех, у кого ИНН совпадает, а КПП из базы или не совпадает или вообще не заполнено (в этом случае, приоритет у КПП из файла, его надо вбить).

   Старуха Шапокляк

28 — 28.05.10 — 16:38

+(27) На мой первый вопрос из (27):
Я так полагаю, что должно быть что-то вроде:

КА = Справочники.Контрагенты.НайтиПоРеквизиту(«КодSAP»,КодСап);
Если КА.Пустая() Тогда     //не нашли с таким ключом
Запрос=Новый Запрос;

СсылкаКА=ВыборкаДетали.ссылка;
ОбъектКА=СсылкаКА.ПолучитьОбъект();

Иначе //нашли с таким ключом
КонецЕсли;

Но как тогда дальше связать Ключ, ИНН и КПП? Не знаю, понятно ли я изложила свою мысль…

   mikecool

29 — 28.05.10 — 16:40

запрос в цикле — уже не оригинально
смотрим (15)

   hhhh

30 — 28.05.10 — 16:46

(29) по сравнению с тем, что было до этого, запрос в цикле — большой шаг вперед.

   Шапокляк

31 — 28.05.10 — 16:47

Запрос один и тот же почти: для Ключа

  «ВЫБРАТЬ

   |    Контрагенты.Ссылка,

   |    Контрагенты.Представление

   |ИЗ

   |    Справочник.Контрагенты КАК Контрагенты

   |ГДЕ

   |    Контрагенты.Ключ = &Ключ»;

   Запрос.УстановитьПараметр(«Ключ», Ключ);

нашла есть ли кто с таким ключом. Если нету ищем по какой-то логике. Если есть что делаем? Как вариант проверяем, совпадает ли у найденного ИНН и КПП. Если не совпадают что делаем? Перезаписываем, спрашиваем?

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

(29) Никто не претендует на оригинальность. Пусть хоть как-то с мертвой точки сдвинется, к тому же все равно, как правило, вмешательство пользователей потребуетя в принятие решения. А ваша временная таблица убьет автора :) К тому же Ваш запрос из (15) не решает ее задачу, а для единичного прогона не сильно оптимален.

   Старуха Шапокляк

32 — 28.05.10 — 16:51

(31) Шапокляк — огромное Вам СПАСИБО!!! Что бы я делала без Вас!?
:*)

  

Шапокляк

33 — 28.05.10 — 16:51

(32) :) Успехов!

Heltarion

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

1

02.12.2011, 11:18. Показов 9193. Ответов 11

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день!
Посмотрите пожалуйста. Есть в обработке таблица значений, в которую я выгружаю данные их XML, после этого я корректирую таблицу и хочу чтобы программа сохранила ее в новый документ эксель. Для этого я создал процедуру «Процедура СохранитьНажатие(Элемент) Экспорт». При сохранении выскакивает: «Ошибка при установке значения атрибута контекста (Value)». Насколько я понимаю, программе не нравится тип значения, который я передаю.
Переменные:

ТПП — «табличное поле правил», в ней уже занесены некотрые значения из XML
НоменклатураЗагрузки, НоменклатураБазы — имена столбцов ТПП
СтолбЗагр, СтолбБаз — столбцы в экселе

Код процедуры:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
СтолбЗагр = 1;
СтолбБаз = 2;
 
Если ИнициализацияЭкселя() Тогда
      Книга = Excel.WorkBooks.Add();
      Sheet = Книга.Sheets(1);
    
      Для каждого стр из ТПП Цикл
              Sheet.Cells(стр,СтолбЗагр).Value=стр.НоменклатураЗагрузки;
              Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы;
      КонецЦикла;
 
      Попытка
              Книга.SaveAs("F:1CBaseВнешнии обработкиправила.xls");
      Исключение
              Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
              Возврат;
      КонецПопытки;
КонецЕсли;
Сообщить("Готово");



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

СохранитьНажатие(Элемент) это событие формы
в этой процедуре пропиши вызов другой процедуры, например СохранитьВЭксель();
саму же процедуру СохранитьВЭксель() добавь в модуль объекта и сделай её экспортной. Вставь свой код представленный выше.
обращение из формы будет ЭтотОбъект.СохранитьВЭксель();

В МодулеОбъекта создал функцию «Процедура СохранитьВЭксель(ТПП) Экспорт»
Прописал в ней тотже код, что выше. В событии формы написал: ЭтотОбъект.СохранитьВЭксель(ТПП);
Выскочила ошибка: Ошибка при вызове метода контекста (Cells)
Что я нетак сделал?



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 минуты
Проблема вот в чем:
Sheet.Cells(стр,СтолбЗагр).Value=1;
Sheet.Cells(стр,СтолбБаз).Value=2;

Так работает, но если я поставлю
Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы;
Выдает ошибку «Ошибка при установке значения атрибута контекста (Value)».

Дело в том что «стр.НоменклатураБазы» — это справочник ссылка, если у нее текстовый тип то программа глотает и записывает.



0



19 / 18 / 1

Регистрация: 15.11.2011

Сообщений: 54

02.12.2011, 12:22

6

чет вы мудрено делаете.
У вас не правильно указывается адресс ячейки в cell. Если стр — это коллекция или массив записей, то он не может нести в себе номер ячейки.
Не знаком с 1C, но програмлю в Excel и делаю выгрузки из других систем.



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

Рабочий код:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Функция ИнициализацияЭкселя()
 
    //Пытаемся подключиться к Excel
    Попытка
        Excel = новый COMОбъект("Excel.Application");
        Сообщить("=====> Загрузка производится через MS Excel...");
        Возврат Истина;
    Исключение
        Возврат Ложь                
    КонецПопытки;     
    
КонецФункции
 
 
Процедура СохранитьНажатие(Элемент) Экспорт
    СтолбЗагр = 1; // задаю номер столбца№1 в эксель
    СтолбБаз = 2;  // задаю номер столбца№2 в эксель
    
    Если ИнициализацияЭкселя() Тогда
        Книга = Excel.WorkBooks.Add(); // создал новый документ
        Sheet = Книга.Sheets(1);          // открыл страницу 1
   
// цикл для заполнения таблицы эксель данными из табличного поля (по двум полям)     
        Для каждого стр из ТПП Цикл
            Sheet.Cells(стр,СтолбЗагр).Value=стр.НоменклатураЗагрузки;
            Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы.Наименование;
        КонецЦикла;
 
//выполняю сохранение документа       
        Попытка
            Книга.SaveAs("F:1CBaseВнешнии обработкиправила12.xlsx");
        Исключение
            Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
            Возврат;
        КонецПопытки;
    КонецЕсли;
    Книга.Application.Quit();
    Сообщить("Готово");
КонецПроцедуры



0



  1. добрый день.

    Программно создаю документ.
    ДокументОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    ДокументОбъект.Дата = ТекущаяДата();

    Выдает ошибку: Ошибка при установке значения атрибута контекста (Дата) по причине «Документ не выбран». Что это значит ?

    — Объединение сообщений, 16 июл 2014

    конфигурация УТ для Украины 2.3.18.1


  2. alexburn

    Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Где создаете? На сервере, на клиенте ?

  3. обычное приложение, на сервер выходит


  4. alexburn

    Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Реквизит точно Дата? отладчиком пользоваться можете?

  5. да, реквизит дата, с типом дата, это стандартынй реквизит документа. Если вычислить выражение ДокументОбъект.Дата то показывает значение 01010001000000 тип дата

    — Объединение сообщений, 16 июл 2014

    ТекущаяДата() 16.07.2014 11:50:11 Дата

    ДокументОбъект.Дата 01.01.0001 0:00:00 Дата


  6. alexburn

    Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    У меня все создается нормально…


  7. alexburn

    Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Точно на сервере создаете? Отладчиком пройдитесь


  8. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    1) это весь код?
    2) Переменную ДокументОбъект переименуйте во что нибудь другое.

  9. я пытался создать документ рту с модуля формы «чек ккм» , перенес все в общий модуль, и все ок ) спасибо )


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

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