Ошибка при вызове метода контекста rows

Программно удалить строку из таблицы word с объединенными ячейками ☑ 0

galuna

20.11.17

11:17

Как из 1С программно удалить строку из таблицы word с объединенными ячейками?

Сформирован файл, в нем есть таблица. 1-я и 2-я строчки обычные, дальше с 3-ей строки идут строки с объединенными по вертикали ячейками. При попытке удалить ВТОРУЮ строку (без объединенных ячеек) выпадает такая ошибка:

{Форма.Форма.Форма(305)}: Ошибка при вызове метода контекста (Rows)

    Таблица.Rows(2).Delete();

по причине:

Произошла исключительная ситуация (Microsoft Word): Отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объединенные по вертикали.

При том, что если все аналогично формировать, но создавать строки БЕЗ объединенных ячеек, то этот метод без проблем отрабатывает ровно в том же виде.

1

Cyberhawk

20.11.17

11:22

А что в тексте ошибки не ясного?

2

galuna

20.11.17

11:30

Всё ясно, не ясно, как удалить строку.

3

Cyberhawk

20.11.17

11:31

(2) Попробуй удалять ячейки

4

Рэйв

20.11.17

11:32

(0)у таблички есть свойство Range. Может через него надо указать объединенную область?

5

galuna

20.11.17

11:36

(4) Мне не нужно объединенную область удалять, вопрос в удалении простой строки.

6

galuna

20.11.17

11:37

(2) Шансов удалить всю строку сразу нет?

7

Рэйв

20.11.17

11:41

(5) А ты внимательно прочитай, что тебе умный робот пишет:-)

«Отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объединенные по вертикали. »

Не дает оно доступ к отдельным строкам, вот такая бука:-)

Бери диапазон второй строки через Range и удаляй

8

Масянька

20.11.17

11:46

(0) А в Word’е выдели эту строчку (с объединенными ячейками) и посмотри…

9

galuna

20.11.17

11:48

(8) Выделяла, смотрела, все с ней хорошо, ничего объединенного нет…

10

Рэйв

20.11.17

11:51

(9)Он же не написал,что отсутствует доступ к строкам с объединенными ячейками. Он написал что доступа к строкам нет СОВСЕМ

11

galuna

20.11.17

11:53

(10) Поняла. Пробую через Range

12

galuna

20.11.17

12:42

(7) Что-то делаю не так. Ячейки очищаются, но сама строка не удаляется.

Для СчетчикЦикла = 1 по 8 Цикл

    Ячейка = Таблица.Cell(2, СчетчикЦикла).Range;      

    Ячейка.Delete();

КонецЦикла;

13

Рэйв

20.11.17

12:45

(12)Range как минимум указать надо какой:-) А вообще лучше сначала записать автоматический макрос удаления того, что ты хочешь и посмотреть что там пишут

14

Рэйв

20.11.17

12:45

аа..у тебя вроде указывается..

15

Рэйв

20.11.17

12:45

Я точно не помню, так что дух открытий чудных ждет тебя:-)

16

galuna

20.11.17

13:14

(0) Решение найдено!

ДокументВорд.Range(Таблица.Cell(2, 1).Range.Start, Таблица.Cell(2, 8).Range.End).Cells.Delete();

Всем спасибо :)

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

Новая тема

Ответить

Sargez

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

«Здравствуйте!<br><br>Никак не могу понять в чем причина. ругается вот на эту строчку:<br>Лист1.Rows(ТекСтрочка+»:»+ТекСтрочка).Select();<br><br>ошибка:<br><br><br>{Форма.Форма.Форма(212)}: Ошибка при вызове метода контекста (Select)<br> Лист1.Rows(ТекСтрочка+»:»+ТекСтрочка).Select();<br>по причине:<br>Произошла исключительная ситуация (Microsoft Office Excel): Метод Select из класса Range завершен неверно<br><br>В чем проблема, подскажите, плиз?<br><br> <br>тот же самый код на платформе 8.1 работает корректно не ругается….»

Thorvardr

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

Лист1.Activate перед этим

Sargez

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

хм….действительно помогло спасибо! интересно почему на 8.1 без активации все с рабатвлово….

Thorvardr

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

«Понятия не имею, вы как Лист1 связывали с листом книги Excel?<br>Вот проверил по быстрому, все работает без проблем:<br>Попытка<br> ExcelServer = СоздатьОбъект(«Excel.Application»);<br> РабочаяКнига=ExcelServer.WorkBooks.Add();<br> РабочийЛист=РабочаяКнига.Sheets(«Лист1″);<br> РабочийЛист.Rows(10).Select();<br> ExcelServer.Visible=-1;<br> ExcelServer=0;<br>Исключение<br> ExcelServer=0;<br> Сообщить(ОписаниеОшибки());<br>КонецПопытки;<br><br>P.S. У вас еще в коде ошибка, скорее всего. Полагаю, что ТекСтрочка у вас наверняка число и когда вы делаете:<br>ТекСтрочка+»:»+ТекСтрочка получается непонятно что. Это неявное преобразование типов, так делать нельзя, надо так:<br>»»»»+ТекСтрочка+»:»+ТекСтрочка<br>или как я привык:<br>Строка(ТекСтрочка)+»:»+Строка(ТекСтрочка)<br>а вообще, в Rows(…) можно одно число подавать, как в моем примере тут»

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

Читают тему:

Делаю выгрузку из datagridview

введите сюда описание изображения

в документ Word

введите сюда описание изображения

с помощью этого кода:

string num = null;
int y = 0;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    tbl.Rows.Add(ref missing);//Добавляем в таблицу строку.
    if (num == null)
    {
        wordDocument.Range(tbl.Cell(i + 2, 2).Range.Start, tbl.Cell(i + 2, 2).Range.End).Text = dataGridView1.Rows[i].Cells["Column2"].Value.ToString();
        num = dataGridView1.Rows[i].Cells["Column2"].Value.ToString();
    }
    else
    {
        if (num == dataGridView1.Rows[i].Cells["Column2"].Value.ToString())
        {
            y++;
            //тут он не может найди запрашиваемый номер семейства
            wordDocument.Range(tbl.Cell(i + 2 - y, 1).Range.Start, tbl.Cell(i + 2, 1).Range.End).Cells.Merge();
            //объединение второй колонки
            wordDocument.Range(tbl.Cell(i + 2 - y, 2).Range.Start, tbl.Cell(i + 2, 2).Range.End).Cells.Merge();
        }
        else
        {//если нет, то просто заполняем данными
            wordDocument.Range(tbl.Cell(i + 2, 1).Range.Start, tbl.Cell(i + 2, 1).Range.End).Text = dataGridView1.Rows[i].Cells["Column1"].Value.ToString();
            wordDocument.Range(tbl.Cell(i + 2, 2).Range.Start, tbl.Cell(i + 2, 2).Range.End).Text = dataGridView1.Rows[i].Cells["Column2"].Value.ToString();
            num = dataGridView1.Rows[i].Cells["Column2"].Value.ToString();
            y = 0;
        }
    }
    //заполняем остальные колонки данными
    wordDocument.Range(tbl.Cell(i + 2, 3).Range.Start, tbl.Cell(i + 2, 3).Range.End).Text = dataGridView1.Rows[i].Cells["Column3"].Value.ToString();
    wordDocument.Range(tbl.Cell(i + 2, 4).Range.Start, tbl.Cell(i + 2, 4).Range.End).Text = dataGridView1.Rows[i].Cells["Column4"].Value.ToString();
    wordDocument.Range(tbl.Cell(i + 2, 5).Range.Start, tbl.Cell(i + 2, 5).Range.End).Text = stepennn.ShowSubText(dataGridView1.Rows[i].Cells["Column5"].Value.ToString(), dataGridView1.Rows[i].Cells["Column6"].Value.ToString());
    wordDocument.Range(tbl.Cell(i + 2, 6).Range.Start, tbl.Cell(i + 2, 6).Range.End).Text = dataGridView1.Rows[i].Cells["Column6"].Value.ToString();
    wordDocument.Range(tbl.Cell(i + 2, 7).Range.Start, tbl.Cell(i + 2, 7).Range.End).Text = dataGridView1.Rows[i].Cells["Column7"].Value.ToString();
}

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

На третьем цикле происходит ошибка

Маленький пример

private void button1_Click(object sender, EventArgs e)
{
    Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
    var doc =word.Documents.Open( @"C:1.docx", ReadOnly: true);
    word.Visible = true; 
    object missing = Type.Missing;
    Microsoft.Office.Interop.Word.Table tbl = word.ActiveDocument.Tables[1];
    tbl.Borders.Enable = 1;

    tbl.Rows.Add(ref missing);//Добавляем в таблицу строку
    tbl.Rows.Add(ref missing);//Добавляем в таблицу строку
    tbl.Rows.Add(ref missing);//Добавляем в таблицу строку
    tbl.Rows.Add(ref missing);//Добавляем в таблицу строку
    tbl.Rows.Add(ref missing);//Добавляем в таблицу строку
    doc.Range(tbl.Cell(2, 2).Range.Start, tbl.Cell(4, 2).Range.End).Cells.Merge();
    doc.Range(tbl.Cell(2, 3).Range.Start, tbl.Cell(3, 3).Range.End).Cells.Merge();
}

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

Почему так, не пойму

  

Falex

16.11.09 — 21:07

Платформа пишет такую ошибку:

Ошибка при вызове метода контекста (Item): Произошла исключительная ситуация (Microsoft Word): Запрашиваемый номер семейства не существует.

       Макет=ПолучитьМакет(«Макет»);

       MSWord = Макет.Получить();

       Попытка

           Шаблон = MSWord.Application.Documents(1);

           Шаблон.Activate();

Таблица = Шаблон.Tables.Item(1);

Эта обработка на моем компьютере отрабатывает. По отладчику посмотрел на другом компьютере (где не работает): количество таблиц равно нулю. На всякий случай нарисовал прямо на данном компьютере еще одну таблицу в ActiveDocument. И все равно количество таблицу в документе равно нулю.

Что может быть не так?

Falex

1 — 16.11.09 — 21:07

вылетает на этом месте:

Таблица = Шаблон.Tables.Item(1);

dk

2 — 16.11.09 — 21:15

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

Лефмихалыч

3 — 16.11.09 — 21:23

а может нет там в этой коллекции элементов? Посмотри Шаблон.Tables.Count

Falex

4 — 16.11.09 — 21:24

всмысле шаблон перезаполняется?

так я и смотрю Шаблон.Tables.Count()

Он равен нулю.

Тьма

5 — 16.11.09 — 21:27

MSWord.Application.Documents().Count() — сколько?

Falex

6 — 16.11.09 — 21:27

причем я сделал еще так: взял скопировал свой шаблон в doc файл. скопировал его на тот компьютер. загрузил в activedocument. та же ерунда.

Falex

7 — 16.11.09 — 21:29

MSWord.Application.Documents().Count() = 1

Falex

8 — 16.11.09 — 21:30

причем у меня что закомментировано тоже не проходит, а проходит иначе

           //Шаблон.Fields.item(1).Result.Text = Формат(Дата, «ДЛФ=D»)+» г.»;

           Замена = Шаблон.Content.Find;

           Замена.Execute(«[Дата]», Ложь, Истина, Ложь, , , Истина, , Ложь, Формат(Дата, «ДЛФ=D»)+» г.»);

dk

9 — 16.11.09 — 21:35

Шаблон = MSWord.Application.Documents(1);

Шаблон.Tables.Count()

что говорит?

Falex

10 — 16.11.09 — 21:44

говорит 0

Falex

11 — 16.11.09 — 21:45

а у меня говорит 2 (сколько и есть на самом деле)

Falex

12 — 16.11.09 — 21:46

ЗЫ: базы одинаковые, но тестируются на разных машинах.

dk

13 — 16.11.09 — 21:52

версии МС офиса одинаковые?

Falex

14 — 16.11.09 — 21:53

и там и там 2007. СОхраняю для надежности в 2003.

dk

15 — 16.11.09 — 21:57

значит не тот макет

Falex

16 — 16.11.09 — 21:58

всмысле не тот макет?

Falex

17 — 16.11.09 — 22:00

попробовал иначе: прямо на том компьютере в конфигураторе создал макет (activedocument). Нарисовал 2 таблицы.Проверил количество таблиц при выводе: оно опять равно нулю.

Тьма

18 — 16.11.09 — 22:08

Ковычки

19 — 16.11.09 — 22:09

визибле=-1

Ковычки

20 — 16.11.09 — 22:14

+ выкинуть попытку

Falex

21 — 16.11.09 — 22:19

это что за ссылка?

Что попробовать?

Шаблон.Visible = -1;???

Тьма

22 — 16.11.09 — 22:21

Falex

23 — 16.11.09 — 22:28

блин.

Система в настоящее время не доступна. Пожалуйста попытайтесь позже или свяжитесь с службой поддержки, если Вам необходима срочная помощь.http://support.microsoft.com/contactus/?ws=support

Falex

24 — 16.11.09 — 22:37

как всегда майкрософт подводит ((

  

Falex

25 — 17.11.09 — 16:18

не работает (

Материал из AutoPark

Перейти к: навигация,
поиск

Содержание

  • 1 Функционирование
    • 1.1 Именование переменных документа
    • 1.2 Многострочные части
    • 1.3 Изображения
  • 2 Режимы работы с Word
    • 2.1 Обычный режим
    • 2.2 Режим разработки шаблона
      • 2.2.1 Особенности
    • 2.3 Публикация шаблона
  • 3 Как заказать новый Word-отчёт
  • 4 Создание пользовательского шаблона
  • 5 Некоторые особенности использования MS Word
  • 6 Известные проблемы
    • 6.1 При выгрузке в Word возникает ошибка «Запрашиваемый номер семейства не существует»
    • 6.2 При выгрузке в Word возникает ошибка «Приложению Word не удалось запустить конвертер mswrd632»
    • 6.3 При выгрузке в Word появляется ошибка «Вызов был отклонен»
    • 6.4 При выгрузке в Word появляется ошибка «Неверно указана единица измерения»
  • 7 Процедура настройки шаблона

Функционирование

MS Word — текстовый процессор. Обычно входит в состав пакета офисных программ MS Office. Система АвтоПарк поддерживает формирование отчетных форм с использованием MS Word.
Обратите внимание: версия MS Word, пригодная для использования в Системе АвтоПарк — не ниже MS Word 2000.

Данные в Word АвтоПарк передаёт путём создания в документе набора переменных и присваивания им значений. Для управления отображением данных в шаблоне документа используются поля. Более подробно о том, что такое поля и переменные документа, смотрите в справочной системе Word. Начальные сведения содержатся в статьях «О полях», «Коды полей: DOCVARIABLE».

Разрабатываемые и поддерживаемые разработчиком шаблоны находятся в каталогах:

  • AutoPark$_LIBDOT — системные шаблоны
  • AutoParkDOT — локальные шаблоны

Именование переменных документа

Основные принципы на примерах.

  • Staff.TSN, Post.Name — переменные документа имеют названия в соответствии с наименованием полей файлов базы данных. Список файлов и их полей открывается в АвтоПарке по комбинации клавиш Ctrl+F10.
  • Officer.Sort.Name — переменные могут содержать в наименовании, как наименование основного файла, так и файла — справочника (Поле Name из записи файла Sort, соответствующей записи файла Officer).
  • OrderL[2].Sort.Name — в случае, когда подготавливаются переменные по нескольким записям в файле БД, после имени файла добавляется индекс (наименование сектора, соответствующего второй строке приказа). Важно знать: строки нумеруются, начиная с 0.
  • Staff.BegDate.Month, Man.Name.Short — в переменной содержится модифицированное значение поля (только месяц из даты приёма, ФИО с инициалами вместо имени и отчества).
  • OwnFirm.RegName, OwnFirm.AcntName — всегда создаётся набор переменных с префиксом OwnFirm, содержащих различные данные о Вашем предприятии (Наименование предприятия, ФИО главного бухгалтера).
  • Math.BalCost — если значение переменной не берётся из какого-то конкретного поля, а вычисляется, то наименование передаёт смысл значения (балансовая стоимость объекта).

Многострочные части

Если отчётная форма содержит одну или несколько многострочных частей, следует учитывать следующие особенности:
Подлежащая тиражированию часть документа должна быть помечена закладкой. Имя закладки определено в программе подготовки документа.
В наименовании переменных при тиражировании индексом строки считается первый встречающийся нулевой индекс в наименовании переменных. При добавлении каждой новой строки индекс увеличивается на единицу.

Если тиражируемая часть является набором строк таблицы Word, закладкой должны быть помечены и символы окончания строки (в режиме отображения непечатных символов выглядит как ¤).

Если предусмотренную шаблоном таблицу требуется продублировать или разбить на две (например, часть столбцов перенести на другую страницу), для каждой из таблиц должна быть установлена закладка. Дополнительным закладкам следует дать имя основной закладки с добавлением «_1» или «_2».

Изображения

Если в отчётной форме предусмотрена вставка изображений (например, фотография работника), то место для вставки изображения отмечается закладкой. В случае, если одно изображение требуется вставить в несколько мест документа, то дополнительным закладкам следует дать имя основной закладки с добавлением цифры от 1 до 9 (например, если АвтоПарк выводит фото работника в шаблон в закладку «Face», то добавление закладок «Face1», «Face7» приведёт к выводу такого же фото и в места, отмеченные этими закладками).

Разные режимы применяются на разных этапах работы с шаблонами. Изменяется режим через пункт меню «Сервис — Администратор — Настройка системного окружения — … для работы с шаблонами MS Word — Разработка шаблонов CtrlW». Изменение режима доступно только АДМИНИСТРАТОРУ.

Существует три режима работы с Word:

Обычный режим

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

При создании отчётной формы АвтоПарк выполняет следующие операции: создаёт документ Word на основе соответствующего шаблона, создаёт в документе необходимые переменные, присваивает им значения, обновляет все поля документа, отправляет документ на печать либо (в зависимости от выбора пользователя) сохраняет его и открывает для редактирования.

Также в некоторых документах производится тиражирование многострочной части и вставка графических изображений.

Режим разработки шаблона

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

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

Особенности

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

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

Используется для окончательного оформления пользовательского шаблона, подготовленного в режиме разработки или другим способом. Внимание! Работа в «обычном режиме» (печать на принтер, печать в файл) с неопубликованным пользовательским шаблоном невозможна!

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

С выбранного шаблона делается резервная копия, затем удаляются неиспользуемые в шаблоне переменные, значения используемых заменяются на символы «X» и «0», после чего шаблон сохраняется, а режим работы с Word возвращается в прежнее значение.

Повторно опубликовать шаблон безвредно.

Как заказать новый Word-отчёт

  • В случае если Вам необходим какой-либо отчёт, его необходимо заказать, используя стандартную форму оформления технического требования.
  • Если по каким-либо причинам Вам необходимо, чтобы отчёт готовился с использованием MS Word, следует отразить данный факт в ТТ. В ТТ следует отразить, какие данные должны быть выгружены в Word, а также приложить к нему проект шаблона отчёта, выполненный в виде шаблона Word.

Создание пользовательского шаблона

Существует возможность пользователю самостоятельно дорабатывать и изменять готовую отчетную форму MS-Word.
При использовании такого шаблона АвтоПарк подготавливает набор переменных документа в обычном режиме, но формирование выходной формы происходит на основе пользовательского шаблона. Это позволяет использовать нестандартные формы вместо подготавливаемых АвтоПарком.

Может быть две причины самостоятельной модификации выходных форм:

  1. Данная форма изначально изготавливается самим пользователем (к этому относятся, например, шаблоны текстов договоров, дополнительных соглашений и т.п.). Согласно п. 2.9 договора на сопровождение системы АвтоПарк: «При реализации готовой настраиваемой или свободной выходной формы, Исполнитель, кроме изменений прикладного программного обеспечения, реализует также образец выходной формы стандартными программными средствами. Дальнейшие технические требования по изменению выходной формы, реализованной как готовая настраиваемая или свободная, могут выдаваться Заказчиком только в части факторов, которые определяются программным обеспечением Системы, в соответствии с положениями пункта 1.2.12.4 настоящего договора. Изменения таких выходных форм в части факторов, которые определяются стандартными программными средствами, в стоимость настоящего договора не входят». Это означает, что пользователи самостоятельно разрабатывают собственные формы на основании предоставленных образцов, но в случае, например, изменения внутренней структуры формы, разработчики окажут помощь в поддержке работоспособности таких форм.
  2. Пользователь самостоятельно вносит изменения в стандартный вид выходной формы. Чаще всего такие формы изготавливаются из-за того, что на предприятии принят вид формы, либо не отвечающий требованиям нормативных документов, либо содержащий лишнюю и ненужную в этих формах информацию (например, если на Вашем предприятии используется форма приказа о приёме на работу, отличная от стандартной формы T-1).

Следует осознавать, что в случае изменения состава стандартно подготавливаемых переменных или необходимого вида отчётной формы может возникать необходимость вносить изменения в пользовательский шаблон. В случае использования собственного шаблона это придётся делать самостоятельно, причем «внезапно». Исходя из этого, изготавливать собственные версии стандартных выходных форм следует очень аккуратно.

Некоторые особенности использования MS Word

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

Известные проблемы

При выгрузке в Word возникает ошибка «Запрашиваемый номер семейства не существует»

  • Обычно это возникает в случае, когда до выполнения операции на компьютере случилось ненормальное завершение MS Word (Word «вылетел» в процессе работы, либо выгрузка из АвтоПарк была прервана пользователем). Исправляется перезагрузкой компьютера.
  • В случае, когда ошибка проявляется всегда и перезагрузка не помогает, проблема в самом MS Word. Исправление: если MS Office версии 2002 и 2003 — может помочь установка Service Pack 3, иначе переустановка MS Office.

При выгрузке в Word возникает ошибка «Приложению Word не удалось запустить конвертер mswrd632»

  • Следует выполнить рекомендации корпорации Microsoft, изложенные в этой статье.

При выгрузке в Word появляется ошибка «Вызов был отклонен»

Возможные причины:

  • В уже открытом у вас Word был активный диалог. Закрыть диалог в Word и попробовать снова.
  • Не хватило системных ресурсов (много уже открытых Excel и Word). Позакрывать и повторить попытку.
  • Сбой в Windows или Word. Перезагрузить компьютер, если не помогает — обратиться к администратору.

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

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

Для устранения ошибки: открываем Microsoft Office Word далее Сервис — Настройка — Команды — Упорядочить команды — выбрать Панель инструментов — в ней Форматирование — в Элементах встать на Межстрочный интервал — Удалить — Закрыть — Закрыть — закрыть Microsoft Office Word.

Процедура настройки шаблона

  1. Зарегистрироваться АДМИНИСТРАТОРОМ.
  2. Сохранить копию имеющегося шаблона.
  3. Запустить АвтоПарк.
  4. Установить режим разработки.
  5. Выполнить пункт АвтоПарка, который в обычном режиме подготавливает либо печатает отчётную форму.
  6. Внести требуемые изменения в шаблон.
  7. Сохранить шаблон.
  8. Повторить пункты 5 — 7 пока не будет достигнуто желаемое.
  9. Установить режим публикации и выбрать нужный шаблон.
  10. Установить обычный режим.
  11. Зарегистрироваться обычным пользователем.
Примечания
  • Перед тем, как начать работу с шаблоном в режиме публикации или разработки, программе необходимо снять с файла шаблона атрибут «только для чтения». Если шаблон в этот момент используется другим пользователем, появляется сообщение «Ошибка при установке атрибутов файла». В этом случае можно попробовать подождать некоторое время и нажать «повторить», так как есть вероятность, что файл быстро освободится.
    Такое же сообщение может возникнуть, когда после публикации шаблона программа пытается установить атрибут «только для чтения». На этом этапе работы программы шаблон уже полностью подготовлен, и отмена не вернёт его в исходное состояние. Чтобы установить атрибут «только для чтения» в этом случае можно либо воспользоваться обычными средствами, либо повторно выполнить процедуру публикации шаблона.
  • Если не существует каталог DOTBY_USER, создать его.
    Если этот каталог не указан в RED-файле, указать его (должен быть самым первым в перечне месте хранения):
*.dot = dotby_user;dottmp_lib;dot;$_libdotap;$_libdotsys.

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

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

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


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

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


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Синтакс-помощник
Синтакс-помощник

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

Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Довольно часто начинающие 1С разработчики сталкиваются с ошибками, которых достаточно легко избежать. Ниже мы рассмотрим топ 11 ошибок и способы их исправления. Также доступна видеоверсия статьи

Содержание

Поле объекта не обнаружено

1С ошибка Поле объекта не обнаружено

Существует множество статей, которые описывают возможные причины возникновения в 1С ошибки “Поле объекта не обнаружено”. Порой это связывают с обновлением платформы, обновлением типового релиза, или с какими-то другими причинами.

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

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

  • Удалили табличную часть, к которой обращаемся в коде?
  • Переименовали реквизит, а в коде не исправили?
  • Заменили значение со ссылки на неопределено?

Вуаля – платформа выдаст ошибку “Поле объекта не обнаружено”!

Как исправить? Исходя из природы ошибки – переименовать реквизит на нужное имя, отредактировать код, или использовать правильные обращения к стандартным свойствам объекта.

Например, у объекта “СообщениеПользователю” нет свойства “Таблица”, и следующий код приведет к ошибке:

Сообщение = Новый СообщениеПользователю;
Сообщение.Таблица = “Ошибка”;

Индекс находится за границами массива

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

Что означает такое сообщение системы? Как правило, с данной ошибкой разработчик сталкивается при некорректной работе с коллекциями. Самые частые случаи появления ошибки “Индекс находится за границами массива”.

  • Использование при обходе коллекции количества элементов вместо индекса. Индексы начинаются с нуля, а количество элементов – с единицы. Поэтому следующий код гарантированно приведет к ошибке: Массив[Массив.Количество()]
  • Последствия удаления элементов из коллекции, очистки коллекции или замены коллекции на пустую
  • Ошибочное увеличение счетчика в цикле “Для”

 Как исправить? Для удаления элементов из коллекции по условию – использовать обратный цикл. Добавлять условие на соответствие счетчика цикла и индекса массива. Не увеличивать счетчик внутри кода цикла Для … Цикл … КонецЦикла

Обращение к процедуре как к функции

ОШибка

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

Данная ошибка имеет две вариации – если используется стандартная процедура из методов какого-нибудь объекта, то фраза будет звучать “Обращение к процедуре объекта как к функции”. Если же использовать процедуру, объявленную в коде, то текст ошибки будет “Обращение к процедуре как к функции”.
При этом ошибка использования процедуры объекта является ошибкой времени выполнения – т.е. на этапе сохранения и проверки конфигурации платформа эту ошибку не обнаружит.

А вот неправильное использование процедуры синтаксическая проверка (Ctrl + F7) успешно обнаруживает, и не даст сохранить конфигурацию или внешнюю обработку/отчет, пока ошибка не будет устранена.

Рассмотрим два примера:

1. Воспроизведем ошибку “Обращение к процедуре как к функции”. При этом платформа не даст сохранить изменения, т.к. не проходит синтакс-контроль.

2. Воспроизведем ошибку “Обращение к процедуре объекта как к функции”. Здесь мы неверно используем метод объекта массива “Добавить”, который является процедурой.

Как исправить? Ошибка тривиальная, и исправление тоже. Чаще всего, достаточно внимательно прочитать описание методов объекта во встроенной справке или синтакс-помощнике. Если метод является процедурой, то значений он возвращать не может. Следовательно, нужно модифицировать код так, чтобы такого ошибочного вызова не было.
Если же используется процедура, объявленная в коде, возможно, есть необходимость изменить ее на функцию, либо также скорректировать код, который эту процедуру использует.

Процедура не может возвращать значение

Родственная предыдущей ошибка. Для того, чтобы код возвращал какое-то значение, следует этот код размещать в функции, а не в процедуре.

В процедуре можно написать ключевое слово “Возврат” без параметров. Это будет означать выход из процедуры.

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

Процедура ПроцедураНеМожетВозвращатьЗначение(Команда)
Возврат "Ошибка";
КонецПроцедуры

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

Переменная не определена

Такой текст ошибки платформа 1С выдает на этапе синтаксического контроля, при сохранении конфигурации, внешнего отчета или обработки.
Причин у этой ошибки может быть несколько.

  • Опечатка в имени переменной
  • Обращение к переменной, которая нигде в области видимости не объявлена (неявной инициализацией с присвоением значения, явным образом с использованием ключевого слова “Перем”, или передана в качестве параметра)
  • Написание на клиенте серверного кода. Например, обращение к менеджеру справочников “Справочники”, и т.п. Клиентская часть приложения “не видит ” серверные объекты языка
  • Также ошибка может появиться, если ранее код использовался в режиме толстого клиента, но после был запущен в тонком клиенте.

Как исправить?

Внимательно следить за правильностью набранного кода, своевременно объявлять переменные или передавать их в качестве параметров. Писать серверный код только в серверных модулях, а также использовать соответствующие инструкции препроцессора, например “&НаСервере”.

Значение не является значением объектного типа

Ошибка “Значение не является значением объектного типа” может возникнуть при неверном обращении к объекту языка. Объектный тип – это такие объекты языка, которые содержат в себе другие объекты – свойства, реквизиты и т.п. Эти свойства доступны через точку, например “Объект.СвойствоЭтогоОбъекта”

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

Разберем более сложный пример:

&НаСервере
Процедура ЗначениеНеЯвляетсяЗначениемОбъектногоТипаНаСервере(Справочники = Ложь)
Сообщить(Справочники.Сотрудники.ПустаяСсылка());
КонецПроцедуры

Ошибка может быть “плавающей”. Если вместо параметра по умолчанию “Справочники = Ложь” будет передан менеджер справочников, то ошибки возникать не будет. А если вызвать процедуру без параметров, то будет использоваться параметр по умолчанию с типом Булево, что и приведет к ошибке.

Чаще всего чтобы исправить ошибку, нужно в отладчике посмотреть, какой тип значения используется. Можно внести изменения в код, чтобы обеспечить корректное поведение (например, в запросе вместо наименования товара выбрать ссылку, и в коде через точку уже обращаться к свойствам ссылки, а не текстового наименования). А можно добавить проверку на нужный тип значения. Т.е. – если значение того типа, который мы ожидаем – выполняем код. Иначе – не выполняем.

Ошибка при вызове метода контекста

Ошибка при вызове метода контекста

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

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

Если эти условия не соблюдать, платформа в зависимости от версии может выдавать сообщения вида “Ошибка при вызове метода контекста”, и далее будут следовать более подробные сведения об ошибке – стек вызовов, приведших к ошибке, номер строки и позиции в строке, где произошла ошибка.

Чаще всего ошибка при вызове метода контекста встречается в следующих методах:

  1. Записать
  2. Прочитать
  3. Выполнить
  4. Создать
  5. ПроверитьВывод

Разберем эту ошибку на примере метода Выполнить объекта Запрос:

Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 1 ГДЕ ИСТИНА И");
Запрос.Выполнить();

В тексте запроса допущена ошибка –  после первого условия “ГДЕ ИСТИНА” указан оператор И, но после него нет еще одного условия. В результате при попытке выполнения запроса, платформа вернет ошибку.

Для исправления ошибки зачастую достаточно внимательно использовать методы, при необходимости уточнять порядок, количество и тип параметров – это можно сделать в справке или синтакс-помощнике (встать курсором на имя метода в коде, и нажать сочетание клавиш Ctrl+F1). В случае запроса – нужно передавать синтаксически корректный текст запроса; в случае проверки вывода на печать – в системе должен быть установлен принтер; в случае подключения к почте – должны быть корректно указаны логин и пароль, и т.п.

Тип не может быть выбран в запросе в 1С 8.3 (8.2)

Ошибка Тип не может быть выбран в запросе

С такой ошибкой начинающие разработчики (да и не только начинающие 😉 ) сталкиваются чаще всего, при чтении запросом данных из таблиц значений, либо из регистров сведений. Все дело в том, что запросы поддерживают далеко не все типы значений. Так, например, нельзя запросом выбрать тип Картинка, ХранилищеЗначений, Шрифт, и многие другие типы, которые не относятся к примитивным или ссылочным типам значений.

Так, если ресурс регистра сведений имеет тип ХранилищеЗначений, выбрать его запросом будет нельзя. Также, если в таблицу значений поместить значения не подходящих типов, а после передать эту таблицу в качестве параметра-источника данных, выполнение запроса также приведет к ошибке “Тип не может быть выбран в запросе”.

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

Неверно:

//ТЗОшибочныйТип.Колонки.Добавить("Контрагент");

Верно:

//ТЗОшибочныйТип.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));

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

Использование в 1С модальных окон в данном режиме запрещено

Ошибка Использование в 1С модальных окон в данном режиме запрещено​

Платформа будет выдавать такое сообщение, если в коде используются методы, приводящие к открытию модальных окон. Модальные окна – это окна, которые при открытии блокируют весь остальной интерфейс. В 1С есть несколько модальных методов – например – “Вопрос”, “ОткрытьЗначение”, “Предупреждение”. Кроме того, в коде может использоваться модальный синтаксис открытия форм: “ОткрытьМодально()”

Если в свойствах конфигурации выбран режим использования модальности “Не использовать”, то выполнение модальных методов будет приводить к этой ошибке “Использование в 1С модальных окон в данном режиме запрещено”.

Для устранения ошибки можно пойти несколькими путями. Как водится, один – быстрый, другой – правильный 🙂

Быстрый способ – переключить режим использования модальности в положение “Использовать”.

Более правильный способ – использовать в коде немодальные вызовы методов. Например, у метода “Вопрос” есть немодальный аналог  – “ПоказатьВопрос”, у метода “Предупреждение” – “ПоказатьПредупреждение”, и т.п. Чаще всего об этих методах дополнительно указано в синтакс-помощнике и справке.

Кроме того, в последних версиях платформы появились асинхронные методы – “ВопросАсинх”, “ПредупреждениеАсинх” и др. Появление этих методов позволяет писать более простой и понятный асинхронный код, и направлено в первую очередь, на более полноценную поддержку браузерами и работу в веб-клиенте.

1С 8.3 и 8.2: Запись с такими ключевыми полями существует!

Данная ошибка появляется при некорректной записи в регистр сведений. Чаще всего с этой ошибкой сталкиваются начинающие разработчики, не до конца понимающие механизмы работы с ключевыми полями (измерениями).

Суть ошибки следующая – регистр сведений позволяет записать запись (строку таблицы) с уникальным набором ключевых полей – а для периодических регистров также и поля Период. Если следующая запись полностью повторяет значение ключевых полей, но осуществляется методом Записать с параметром Замещать = Истина, то запись в таблице регистра просто заменится на идентичную.

Однако если поместить две абсолютно одинаковые записи в набор записей, и попытаться его записать – платформа выдаст ошибку. Еще один распространенный случай, когда 1С сообщает “Запись с такими ключевыми полями существует” – это запись в периодический регистр сведений с периодичностью от “День” и выше, подчиненный регистратору.

В типовых конфигурациях часто эту ошибку можно воспроизвести, если в пользовательском режиме создать два документа “Установка цен номенклатуры” с одной и той же номенклатурой и за один и тот же день. Попытка провести второй документ приведет к ошибке.

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

Поле объекта недоступно для записи в 1С

Ошибка Поле объекта недоступно для записи в 1С​

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

Первый случай – это попытка редактирования системных полей, недоступных для записи. Например, в модуле формы сама форма будет содержаться в объекте ЭтаФорма. И попытка присвоить этому реквизиту любое значение приведет к ошибке “Поле объекта недоступно для записи”.

Второй случай – и с ним новички как раз допускают больше всего ошибок – это попытка редактирования полей ссылки, а не самого объекта. Чаще всего код выглядит примерно так:

Элемент = Справочники.Сотрудники.НайтиПоКоду("12345");
Элемент.Наименование = "Новое наименование";

 

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

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

Ссылка на обработку

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

Заключение

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста range 1с
  • Ошибка при входе плей маркет df dferh 01
  • Ошибка при вызове конструктора описаниеоповещения
  • Ошибка плагин недоступен честный знак рутокен
  • Ошибка при вызове конструктора картинка