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

Объединение файлов docx ☑ 0

idw

05.04.16

11:17

Можно ли программно объединить несколько word’ских файла?

1

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

05.04.16

11:18

Наверняка

2

DDwe

05.04.16

11:23

(0) Объединяйте, пожалуйста. Никто не возражает.

3

idw

05.04.16

11:29

Как?

4

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

05.04.16

11:30

(3)Открой учебник по офису

5

idw

05.04.16

11:32

(4) в учебнике по офису написано как в 1С склеить два файла ворда?

6

DDwe

05.04.16

11:33

(5) Ты не поверишь )

7

Мэс33

05.04.16

11:40

(0) file3.doc = file1.doc + file2.doc;

Шутка.

8

Мэс33

05.04.16

11:42

(0) открываешь файл.

Делаешь выделить все и копируешь в новый файл.

Со вторым файлом также.

9

Мэс33

05.04.16

11:44

Возможно, надо посмотреть команды (выдернул из макроса):

Selection.WholeStory

Selection.Copy

Selection.PasteAndFormat (wdUseDestinationStylesRecovery)

10

DDwe

05.04.16

11:44

(8) «программно объединить» — где программа?

11

idw

05.04.16

11:46

(10) 1С пойдет ;)

12

Рэйв

05.04.16

11:54

(0)макросом пишется так:

Selection.InsertFile FileName:=»1.doc», Range:=»», ConfirmConversions:= _

        False, Link:=False, Attachment:=False

Адаптируй в 1С:-)

13

Мэс33

05.04.16

12:01

(12) так не интересно. Давай полное законченное решение )

14

Рэйв

05.04.16

12:03

(13)полное и законченное стоит полый кошелек денюх:-)

15

Мэс33

05.04.16

12:04

(14) ах ты жадный 1Сник )))

16

Рэйв

05.04.16

12:07

(15)Надо же поддерживать имидж программиста 1С!

Еще вот поднатужусь и стану тупым и ленивым!:-)

17

Мэс33

05.04.16

12:07

EvilMacros = «Sub SuperMacros()

|Selection.InsertFile FileName:=»file1.docx», _

|Range:=»», ConfirmConversions:=False, Link:=False, Attachment:=False

|Selection.InsertFile FileName:=»file2.docx», _

|Range:=»», ConfirmConversions:=False, Link:=False, Attachment:=False

|Selection.InsertFile FileName:=»file3.docx», _

|Range:=»», ConfirmConversions:=False, Link:=False, Attachment:=False

|Selection.InsertFile FileName:=»file4.docx», _

|Range:=»», ConfirmConversions:=False, Link:=False, Attachment:=False

|End Sub»;

Word = Новый COMОбъект(«Word.Application»);

Word.Documents.Add();

VBComponents = Word.ActiveDocument.VBProject.VBComponents;

Count = VBComponents.Count();

VBComponents.Add(1);

VBComponents.Item(Count + 1).CodeModule.I_nsertLines(1, EvilMacros);

Word.Application.Run(SuperMacros»);

Word.Quit();

Word = Неопределено;

18

Рэйв

05.04.16

12:08

(17)Ты все испортил!!!(С)

:-)

19

Мэс33

05.04.16

12:10

(18) и не говори ))

20

idw

05.04.16

12:30

(17) спасибо. Попробую.

Хочу из 1С в один файл объединить несколько таблиц с разной ориентацией.

21

b_ru

05.04.16

12:32

(17) Извращение. Мало кто программный доступ к проекту ВБА разрешает.

22

idw

05.04.16

12:38

(21) ага.

{Форма.Форма.Форма(446)}: Ошибка при получении значения атрибута контекста (VBProject)

    VBComponents = Word.ActiveDocument.VBProject.VBComponents;

по причине:

Произошла исключительная ситуация (Microsoft Word): Отсутствует доверие к программируемому доступу к проекту Visual

23

Мэс33

05.04.16

12:44

(22) ну да разрешить )))

а иначе — юзайте MS Word Merge Tool. Но он платный.

24

b_ru

05.04.16

12:57

(23) написать по-человечески тот же макрос не варик?

Word = Новый COMОбъект(«Word.Application»);

Word.Documents.Add();

Word.ActiveDocument.Selection.InsertFile FileName:=»file1.docx», _

Word.ActiveDocument.Range:=»», ConfirmConversions:=False, Link:=False, Attachment:=False

Word.ActiveDocument.Selection.InsertFile FileName:=»file2.docx», _

Word.ActiveDocument.Range:=»», ConfirmConversions:=False, Link:=False, Attachment:=False

Word.ActiveDocument.Selection.InsertFile FileName:=»file3.docx», _

Word.ActiveDocument.Range:=»», ConfirmConversions:=False, Link:=False, Attachment:=False

Word.ActiveDocument.Selection.InsertFile FileName:=»file4.docx», _

Word.ActiveDocument.Range:=»», ConfirmConversions:=False, Link:=False, Attachment:=False

Word.Quit();

Word = Неопределено;

и я даже не говорю о том, что сам по себе макрос не особо хороший, хотя рабочий.

25

Мэс33

05.04.16

12:58

(24) может и варик ).

Мой вариант был симбиозом двух рецептов )

26

b_ru

05.04.16

12:59

точнее

Word = Новый COMОбъект(«Word.Application»);

Word.Documents.Add();

Word.ActiveDocument.Selection.InsertFile(«file1.docx», «», False, False, False)

Word.ActiveDocument.Selection.InsertFile(«file2.docx», «», False, False, False)

Word.Quit();

Word = Неопределено;

27

Мэс33

05.04.16

13:01

(26) то-то я думаю, что за странный синтаксис:

Word.ActiveDocument.Selection

Word.ActiveDocument.Range

28

idw

05.04.16

13:16

(26) не работает что-то метод Selection

тут

Word.ActiveDocument.Selection.InsertFile(«file1.docx», «», False, False, False):

Метод объекта не обнаружен (Selection)

29

idw

05.04.16

13:29

Так работает:

MSWord = Новый COMОбъект(«Word.Application»);

    Документ = MSWord.Application.Documents.Add();

    //Документ.Activate();

    MSWord.Application.Selection.InsertFile(«W:\ТабДок1.docx»,,, Ложь);

    MSWord.Application.Selection.InsertFile(«W:\ТабДок4.docx»,,, Ложь);

    
    MSWord.Application.Visible = Истина;

    MSWord.Activate();

30

idw

05.04.16

13:42

Только при объединении двух вордовских файлов не сохраняется их ориентация:

1-й стоит Портрет,

2-й — Ландшафт.

Выводит все листы в портретной ориентации.

31

Fish

05.04.16

13:43

(30) Разрыв раздела вставляй.

32

idw

05.04.16

14:05

(31) разрыв страницы макросом делается так:

Selection.InsertBreak Type:=wdPageBreak

а в 1С как сделать?

Пробую так:

MSWord.Application.Selection.InsertBreak.Type=7;

выдает ошибку «Поле объекта не обнаружено (InsertBreak)»

33

Fish

05.04.16

14:19

(32) А так? MSWord.Application.Selection.InsertBreak(7)

Только 7 — это вроде разрыв страницы, а тебе нужен разрыв раздела wdSectionBreakNextPage.

34

Fish

05.04.16

14:21

(33) Вместо 7 это 2 .

35

idw

05.04.16

14:23

(33) (34) да так работает, спасибо. Но ориентацию ставит всё равно одну, первую (портрет).

36

Fish

05.04.16

14:24

(35) Потому что надо разрыв раздела ставить (может я с номером параметра ошибся). В ворде в разных разделах может быть разная ориентация, а на разных страницах одного раздела — нет.

37

idw

05.04.16

14:25

(36) я так делал:

MSWord.Application.Selection.InsertBreak(2)

38

idw

05.04.16

14:25

MSWord = Новый COMОбъект(«Word.Application»);

    Документ = MSWord.Application.Documents.Add();

    MSWord.Application.Selection.InsertFile(«W:\ТабДок1.docx»,,, Ложь);

    MSWord.Application.Selection.InsertBreak(2);

    MSWord.Application.Selection.InsertFile(«W:\ТабДок5.docx»,,, Ложь);

39

Fish

05.04.16

14:33

(38) Да, проверил. InsertFile — просто вставляет текст из файла без сохранения ориентации. Может там параметры какие есть, навскидку попробовал параметры ConfirmConversions.

40

Fish

05.04.16

14:33

+(39) Не помогло.

41

idw

05.04.16

14:39

Сделал так: нажал запись макроса, выделил раздел, нажал кнопку параметры и установил ориентацию, получил такой макрос:

Sub Макрос1()



‘ Макрос1 Макрос





    With Selection.PageSetup

        .LineNumbering.Active = False

        .Orientation = wdOrientLandscape

        .TopMargin = CentimetersToPoints(3)

        .BottomMargin = CentimetersToPoints(1.5)

        .LeftMargin = CentimetersToPoints(2)

        .RightMargin = CentimetersToPoints(2)

        .Gutter = CentimetersToPoints(0)

        .HeaderDistance = CentimetersToPoints(1.25)

        .FooterDistance = CentimetersToPoints(1.25)

        .PageWidth = CentimetersToPoints(29.7)

        .PageHeight = CentimetersToPoints(21)

        .FirstPageTray = wdPrinterDefaultBin

        .OtherPagesTray = wdPrinterDefaultBin

        .SectionStart = wdSectionNewPage

        .OddAndEvenPagesHeaderFooter = False

        .DifferentFirstPageHeaderFooter = False

        .VerticalAlignment = wdAlignVerticalTop

        .SuppressEndnotes = False

        .MirrorMargins = False

        .TwoPagesOnOne = False

        .BookFoldPrinting = False

        .BookFoldRevPrinting = False

        .BookFoldPrintingSheets = 1

        .GutterPos = wdGutterPosLeft

    End With

End Sub

Как вот его переделать для 1С вот в чем вопрос.

42

Fish

05.04.16

14:40

(40) А вот если из файла 2 копипастить (Ctrl+A, Сtrl+С) и вставлять в новый раздел файла 1, то ориентация тоже копируется :)

43

idw

05.04.16

14:44

Ура заработало:

MSWord.Application.Selection.PageSetup.Orientation = 1;

44

Fish

05.04.16

14:48

(43) Ну если ты заранее знаешь, в каком файле какая ориентация — то пойдёт. А иначе придётся извращаться. Или если в добавляемом файле будет несколько разделов с разной ориентацией.

45

b_ru

05.04.16

14:48

(41) Да хз в чем там вопрос. Объктная модель у ворда такая:

Application (окно приложений с конпками меню, вобщем сам ворд)

v

ActiveDocument (текущий открытый документ ворда)

v

Range (область в документе. Свойство Selection возвращает Range, который выделил пользователь, ессно при работе с COM Selection лучше не пользоваться, а использовать непосредственно Range).

Еще у Document есть коллекции Paragraphs (абзацы) и Words (отдельные слова). Элементы этих коллекций тоже имеют свойство Range.

46

idw

05.04.16

14:52

(44) да это известно.

47

idw

05.04.16

15:00

Еще проблема:

листы, у которых ориентация ландшафт широкие и при сохранении в ворд, получаю ошибку:

«Ошибка экспорта табличного документа: Превышена допустимая ширина документа Word 2007»

А ворде параметр — «по ширине листа не рабоает» FitToPagesWide

48

idw

05.04.16

16:12

В экселе это не сделаешь, нет метода InsertFile.

Остается выравнивать по вертикале, если не влазит, то ставить верикальный разделитель.

Всё это делать с помощью методов ПроверитьПрисоединение() и ВывестиВертикальныйРазделительСтраниц().

Содержание:

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

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

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

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

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

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

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

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

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

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

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

Можно ли программно объединить несколько word’ских файла?

Объединяйте, пожалуйста. Никто не возражает.

в учебнике по офису написано как в 1С склеить два файла ворда?

открываешь файл. Делаешь выделить все и копируешь в новый файл. Со вторым файлом также.

Возможно, надо посмотреть команды (выдернул из макроса): Selection.WholeStory Selection.Copy Selection.PasteAndFormat (wdUseDestinationStylesRecovery)

«программно объединить» — где программа?

так не интересно. Давай полное законченное решение )

полное и законченное стоит полый кошелек денюх:-)

Надо же поддерживать имидж программиста 1С! Еще вот поднатужусь и стану тупым и ленивым!:-)

Ты все испортил!!!(С) :-)

спасибо. Попробую. Хочу из 1С в один файл объединить несколько таблиц с разной ориентацией.

Извращение. Мало кто программный доступ к проекту ВБА разрешает.

ага. {Форма.Форма.Форма}: Ошибка при получении значения атрибута контекста (VBProject)     VBComponents = Word.ActiveDocument.VBProject.VBComponents; по причине: Произошла исключительная ситуация (Microsoft Word): Отсутствует доверие к программируемому доступу к проекту Visual

ну да разрешить ))) а иначе — юзайте MS Word Merge Tool. Но он платный.

написать по-человечески тот же макрос не варик? и я даже не говорю о том, что сам по себе макрос не особо хороший, хотя рабочий.

может и варик ). Мой вариант был симбиозом двух рецептов )

то-то я думаю, что за странный синтаксис: Word.ActiveDocument.Selection Word.ActiveDocument.Range

не работает что-то метод Selection тут Word.ActiveDocument.Selection.InsertFile(«file1.docx», «», False, False, False): Метод объекта не обнаружен (Selection)

Только при объединении двух вордовских файлов не сохраняется их ориентация: 1-й стоит Портрет, 2-й — Ландшафт. Выводит все листы в портретной ориентации.

разрыв страницы макросом делается так: а в 1С как сделать? Пробую так: MSWord.Application.Selection.InsertBreak.Type=7; выдает ошибку «Поле объекта не обнаружено (InsertBreak)»

А так? MSWord.Application.Selection.InsertBreak Только 7 — это вроде разрыв страницы, а тебе нужен разрыв раздела wdSectionBreakNextPage.

да так работает, спасибо. Но ориентацию ставит всё равно одну, первую (портрет).

Потому что надо разрыв раздела ставить (может я с номером параметра ошибся). В ворде в разных разделах может быть разная ориентация, а на разных страницах одного раздела — нет.

я так делал: MSWord.Application.Selection.InsertBreak

Да, проверил. InsertFile — просто вставляет текст из файла без сохранения ориентации. Может там параметры какие есть, навскидку попробовал параметры ConfirmConversions.

Сделал так: нажал запись макроса, выделил раздел, нажал кнопку параметры и установил ориентацию, получил такой макрос: ‘ Как вот его переделать для 1С вот в чем вопрос.

А вот если из файла 2 копипастить (Ctrl+A, Сtrl+С) и вставлять в новый раздел файла 1, то ориентация тоже копируется :)

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

Да хз в чем там вопрос. Объктная модель у ворда такая: Application (окно приложений с конпками меню, вобщем сам ворд) v ActiveDocument (текущий открытый документ ворда) v Range (область в документе. Свойство Selection возвращает Range, который выделил пользователь, ессно при работе с COM Selection лучше не пользоваться, а использовать непосредственно Range). Еще у Document есть коллекции Paragraphs (абзацы) и Words (отдельные слова). Элементы этих коллекций тоже имеют свойство Range.

Еще проблема: листы, у которых ориентация ландшафт широкие и при сохранении в ворд, получаю ошибку: «Ошибка экспорта табличного документа: Превышена допустимая ширина документа Word 2007» А ворде параметр — «по ширине листа не рабоает» FitToPagesWide

В экселе это не сделаешь, нет метода InsertFile. Остается выравнивать по вертикале, если не влазит, то ставить верикальный разделитель. Всё это делать с помощью методов ПроверитьПрисоединение и ВывестиВертикальныйРазделительСтраниц.

Тэги: 1С 8

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

Содержание:

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, после этого я корректирую таблицу и хочу чтобы программа сохранила ее в новый документ эксель. Для этого я создал процедуру «Процедура СохранитьНажатие(Элемент) Экспорт». При сохранении выскакивает: «Ошибка при установке значения атрибута контекста (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

Код 1C v 8.3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Код 1C v 8.х

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

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

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

Код 1C v 8.х

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

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

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

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

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

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

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

Пожалуйста )

Подсказка:Вы можете добавить любую страничку в Социальные закладки щелкнув по значку соцсетей (в вверху)

Понравилась статья? Поделить с друзьями:
  • Ошибка при подключении к сетевому диску 0х80004005
  • Ошибка при подключении к onedrive
  • Ошибка при перемещении файла или папки разрушительный сбой
  • Ошибка при подготовке к установке автокад
  • Ошибка при подключении к ncalayer mac os