Не протягивается нумерация в Excel? Используйте один из доступных способов для автоматической установки цифр, воспользуйтесь приложением Access, попробуйте раскрыть строчки путем выделения с последующим нажатием правой кнопки мышки по заголовкам слева и выбором пункта «Показать». Ниже подробно рассмотрим, как действовать при появлении такой ошибки, и как правильно выполнить работу.
Причины
Для понимания причин, почему в Эксель не протягивается нумерация, необходимо знать особенности этого процесса. В отличие от другого софта Майкрософт Офис, здесь не предусмотрено кнопки автоматического проставления цифр. Но по желанию можно с легкостью добавить последовательные числа в строки данных посредством перетаскивания маркера или с применением функции «Строка».
Если же в Эксель не протягивается нумерация, причиной может быть некорректное выполнение работы или какой-то нехарактерный баг программы. В таких случаях необходимо знать, как правильно проставить цифры, и каким способом исправить возникшие ошибки.
Что делать
В ситуации, когда в Экселе не протягивается нумерация, убедитесь в правильности выполнения работы. Воспользуйтесь одним из следующих методов, позволяющих автоматически установить номера.
Способ №1:
- Выделите 1-ю ячейку в диапазоне, требующем заполнения.
- Укажите стартовое значение будущей последовательности.
- Введите параметр в следующей ячейке для задания образца заполнения. К примеру, если нужна последовательность от 1 и далее, введите в первые ячейки цифры 1 и 2. Если нужна другая последовательность, к примеру, 3, 6, 9, 12 и т. д, ведите 3 и 6.
- Выделите ячейки, в которых проставлена начальная нумерация. В более старом Эксель предусмотрена кнопа «Быстрый анализ». Она показывается по умолчанию, если выбрать больше одной ячейки с информацией.
- Попробуйте, протягивается ли маркер заполнения — переместите его в диапазон, требующий заполнения. По мере продвижения маркера Excel отображает предварительный параметр. Для изменения образца переместите маркер заполнения, зафиксировав нажатой правую клавишу, и после выберите образец.
Для введения нумерации в Excel по возрастанию передвиньте маркер вниз или в правую сторону, а по убыванию — вверх и в левую сторону. В случае, если маркера заполнения нет, сначала отобразите его. Для этого войдите в раздел «Параметры» и «Дополнительно». Там найдите пункт «Параметры правки» и установите отметку «Разрешить маркеры заполнения и перетаскивания ячеек».
Если нумерация протягивается в Excel, все сделано правильно. Но учтите, что в случае добавления, смещения или удаления строчек числа не обновляются. Обновление последовательной нумерации можно проводить вручную путем выбора двух чисел в правильной последовательности и перетащив маркер заполнения к концу перечня.
Способ №2:
- Найдите первую ячейку для нумерации Excel, которая требует нумеровку, и введите =Строка(А1). Эта функция возвращает номер в строчку, где находится ссылка. В приведенном примере будет стоять 1.
- Переместите маркер заполнения и захватите диапазон, требующий заполнения. Если его не видно, отобразите по рассмотренному выше принципу.
Если Эксель не протягивает числа, рассмотренный выше метод часто выручает. При этом обновление цифр происходит при сортировке. Если же добавлять, смещать или удалять строчки, происходит прерывание последовательности. В ситуации, когда нумерация Excel не протягивается, ее можно обновить самостоятельно путем выбора двух цифр в правильной последовательности и перемещения маркера в конец списка.
В случае применения опции «Строка» нумерация в Excel протягивается автоматически. Если же нужно, чтобы цифры добавлялись сами при внесении дополнительных строк, выполните преобразование данных в таблицу Эксель. При этом все строчки, добавленные в конец, будут нумероваться.
Если нужно ввести определенные коды, к примеру, для заказов, используйте функции «Строка» и «Текст». К примеру, для указания 00-01 введите =Текст(Строка (А1), «00-00» в 1-й ячейке диапазона и переместите маркер в конец списка. После этого проверьте, протягивается нумерация Excel или нет.
Способ №3:
- Выделите 1-ю ячейку и поставьте в ней «1».
- Жмите на «Заполнить», что находится в панели инструментов.
- Выберите пункт «Прогрессия» из списка.
- В появившемся окне необходимо задать все необходимые параметры. Ставьте расположение «по столбцам», а тип — «арифметическая» с шагом «1». Граничное значение укажите равное строчкам, которые требуют нумеровки.
Какие есть альтернативы
Если Эксель не протягивает нумерацию, можно воспользоваться альтернативными решениями:
- Используйте приложение Access для импортирования данных Excel в базу приложения. Здесь можно создать поле, отличающееся способностью генерировать уникальный номер в случае добавления в таблицу новой записи.
- Исправьте проблему, связанную со скрытыми строками. Выделите нужные строчки, в которых не протягивается нумерация в Excel, жмите правой кнопкой мышки по заголовкам с левой стороны и выберите пункт «Показать».
- Попробуйте перезагрузить компьютер, перезайти в приложение Excel или переустановить его. Этот метод подходит, если причиной проблемы был какой-то временный и несущественный баг.
Теперь вы знаете, почему в Экселе не протягивается нумерация, и как исправить эту ошибку. В большинстве случаев достаточно правильно сделать работу с учетом рекомендаций разработчика или выполнить дополнительные советы, указанные в статье.
Отличного Вам дня!
Я пытаюсь загрузить файл «.csv» в базу данных SQL с помощью phpMyAdmin. Однако всякий раз, когда я импортирую его, я получаю сообщение об ошибке: Неверное количество столбцов во входных данных CSV в строке 1.
Я провел весь день, играя с различными вариантами, чтобы попытаться заставить его работать, но безрезультатно. В моем файле .csv ровно 47 столбцов. Я создал 47 столбцов в своей таблице SQL. Однако имена не совсем совпадают с именами в файле. Всякий раз, когда я импортирую, он продолжает выдавать мне эту ошибку.
Любая помощь был бы очень признателен!
~Шипение ковра
Одна вещь, которая, как я думал, может быть причиной проблемы, заключалась в том, что первый столбец ничего не назван в моем документе excel. Может ли это быть причиной проблемы?
РЕДАКТИРОВАТЬ 12:30 УТРА: phpMyAdmin уже является последней доступной версией, через (apt-get install phpmyadmin) (phpmyadmin уже является последней версией)
Вот файл .csv, если это поможет.
12 answers
Если ваша таблица БД уже существует, и вы НЕ хотите включать все столбцы таблицы в свой CSV-файл, то при запуске PHP Admin Import вам потребуется заполнить поле Имена столбцов в Параметрах формата для CSV, показанных здесь внизу следующего снимка экрана.
Вкратце:
- Выберите файл CSV
- Установите формат в CSV
- Заполните поле Имена столбцов именами столбцов в вашем CSV
- Если ваш CSV-файл содержит имена столбцов, перечисленные в строке 1, установите «Пропустить это количество запросов (для SQL) или строк (для других форматов), начиная с первого» до 1
Исправлено! Я в основном просто выбрал «Импорт», даже не составив таблицу самостоятельно. phpMyAdmin создал для меня таблицу со всеми правильными именами столбцов из исходного документа.
Я получил ту же ошибку при импорте csv-файла с помощью phpMyAdmin.
Решение моей проблемы заключалось в том, что мой компьютер сохранил файл .csv с; (точкой с запятой) в качестве разделителя вместо (запятых).
Однако в параметрах, зависящих от формата, вы можете выбрать «столбцы разделены:» и выбрать; вместо (запятая).
Чтобы посмотреть, в каком файле хранится файл на вашем компьютере, откройте файл .csv в текстовом редакторе.
10
Author: Nicholas, 2015-07-06 19:17:20
У меня только что возникла эта проблема, и я понял, что пустые столбцы обрабатываются как столбцы со значениями, я увидел это, открыв свой CSV в текстовом редакторе. Чтобы исправить это, я открыл свою электронную таблицу и удалил столбцы после моей последней колонки, они выглядели совершенно пустыми, но это было не так. После того, как я сделал это, импорт работал отлично.
Имел ту же проблему и внес два изменения: (а) не переписывал существующие данные (не идеально, если это ваше намерение, но вы можете заранее выполнить запрос на удаление) и (б) подсчитал столбцы и обнаружил, что в csv есть пустой столбец, поэтому всегда стоит вернуться к вашей первоначальной работе, даже если все «кажется» выглядит правильно.
1
Author: Rule, 2016-03-12 12:46:14
Вам нужно будет пропустить первую строку (где определены имена столбцов), и вам нужно будет проверить, какой «символ» разделяет ячейки (обычно это ,
, но в моем случае было ;
)
Ниже приведена картинка моего импорта:
1
Author: raBne, 2018-07-15 09:40:24
Ваше решение, похоже, предполагает, что вы хотите создать совершенно новую таблицу.
Однако, если вы хотите добавить содержимое в уже существующую таблицу, посмотрите структуру таблицы и обратите внимание на количество столбцов (столбец идентификатора, если он у вас есть, все еще считается -> даже если он может быть автоматически увеличен/уникален)
Итак, если ваша таблица выглядит так
, имя идентификатора Возраст Пол
Убедитесь, что ваша таблица Excel выглядит так
A1 идентификатор B1 Имя C1 Возраст D1 Пол
И теперь у них обоих есть 4 столбцы.
Также прямо под частичным импортом, рядом с пропуском количества запросов…. увеличьте количество, чтобы пропустить соответствующую строку. при выборе 1 первая строка будет автоматически пропущена. Для тех, у кого могут быть заголовки в файлах excel
Если таблица уже была создана, и вы были достаточно ленивы, чтобы не указывать столбцы при вводе имен полей, то все, что вам нужно сделать, это выбрать пустые столбцы справа от содержимого файла и удалить их.
У меня была аналогичная проблема с phpMyAdmin. Количество столбцов в импортируемом файле соответствовало столбцам в целевой таблице базы данных. Я попытался импортировать файлы как в формате .csv, так и в формате.ods, но безрезультатно, получив множество ошибок, в том числе одну, в которой утверждалось, что количество столбцов неверно.
Файлы .csv и .ods были созданы с помощью LibreOffice 5.204. Основываясь на небольшом опыте работы с проблемами импорта в прошлые годы, я решил переделать файлы с помощью электронной таблицы gnumeric, экспорт .ods в соответствии со стандартом «строгого» формата. Вуаля! Больше никаких проблем с импортом. Хотя у меня не было времени для дальнейшего изучения этой проблемы, я подозреваю, что что-то изменилось во внутренней структуре вывода файлов LibreOffice.
При возникновении ошибок с входными файлами любого типа часто возникают проблемы с кодировкой .
Простым решением может быть открытие нового файла, копирование, вставка в него текста CSV, а затем сохранение его в качестве нового файла.
0
Author: P-S, 2018-05-02 21:30:20
Последний столбец моей базы данных (это столбец F в электронной таблице) не используется и поэтому пуст. Когда я импортировал CSV-файл excel, я получил ошибку «количество столбцов».
Это связано с тем, что excel сохранял только те столбцы, которые я использую. А-Е
Добавление 0 в первую строку в F решило проблему, затем я удалил ее после успешной загрузки.
Надеюсь, это поможет и сэкономит кому-то еще время и потерю волос:)
Самая глупая вещь, которая когда-либо исправит эту ошибку в Microsoft Excel (при условии, что у вас на самом деле все правильно):
Выберите свои данные и нажмите «Границы всех» в Excel (устанавливает визуальные границы вокруг ваших данных) перед сохранением CSV. Звучит бессмысленно? Я полностью согласен! Однако это исправит эту ошибку. Я использую этот трюк по крайней мере три раза в неделю.
0
Author: jtubre, 2018-07-29 22:15:37
Попытка //Некоторые действия Исключение //Действия при ошибке КонецПопытки;
Показ сообщения об ошибке
Для вывода сообщения об ошибке нужно использовать функцию ОписаниеОшибки();
Пример:
Попытка НаборЗаписей.Записать(Истина); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
Для выдачи структуированной информации об ошибке в версии 8.2 служит функция ИнформацияОбОшибке().
Инфо = ИнформацияОбОшибке(); Сообщить("Описание='" + Инфо.Описание + "'"); Сообщить("ИмяМодуля='" + Инфо.ИмяМодуля + "'"); Сообщить("НомерСтроки=" + Инфо.НомерСтроки); Сообщить("ИсходнаяСтрока='" + Инфо.ИсходнаяСтрока + "'");
Вызов исключения
В 1С:Предприятие 7.7 оператор ВызватьИсключение; служит для повторного вызова исключения из блока Исключение-КонецПопытки. Для вызова из других частей программы можно использовать внешнюю компоненту или деление на 0, например а=1/0.
В 1С:Предприятие версии 8 есть оператор ВызватьИсключение:
ВызватьИсключение "Текст сообщения об ошибке";
Отображение ошибок
Механизм отображения ошибок предназначен для улучшения обратной связи пользователей с разработчиками, ускорения реакции на ошибки и улучшения поддержки. Разным целевым группам он предоставляет следующие возможности:
-
Конечные пользователи: если происходит ошибка, пользователь получает либо подсказку для исправления ошибки (если пользователь может ее исправить сам) либо получает удобный способ сообщить об ошибке специалистам (в техподдержку и т. п.).
-
Прикладные разработчики: имеют возможность обрабатывать все ошибки, возникающие в приложении, менять текст и форму отображения ошибки и показывать пользователям полезную для них информацию.
-
ИТ-отделы компаний клиентов, а также компании, осуществляющие внедрения продуктов 1С: имеют возможность быстрого получения информации об ошибках и возможность проинформировать пользователя о том, куда обращаться для решения проблемы.
Сообщение об ошибке
Сообщение об ошибке содержит иконку, соответствующую категории ошибки, текст, а также может содержать ссылку для формирования отчета об ошибке.
Декларативная настройка текста сообщения об ошибке
Специалисты по внедрению и администраторы информационных баз имеют возможность настраивать сообщения об ошибках без использования программирования. В частности, они могут добавлять в сообщения об ошибках информацию, специфическую для конкретного внедрения или для текущего этапа работы (телефоны, фамилии сотрудников и т. д.).
Отчет об ошибке
Сообщение об ошибке может содержать ссылку для автоматического формирования отчета об ошибке. Доступно как интерактивное, так и программное формирование отчета. Программно можно добавлять в отчет свои вложения и объекты. Отчет об ошибке можно сохранить на диск или отправить в сервис регистрации ошибок.
Сервис регистрации ошибок
Сервис регистрации ошибок — внешний по отношению к платформе компонент, представляющий собой набор НТТР-сервисов с определенными интерфейсами. Он может быть реализован с помощью любой подходящей технологии. Например, это может быть информационная база «1С:Предприятия» с набором HTTP-сервисов.
ОписаниеОшибки (ErrorDescription)
1C v 8.2 |
---|
ОписаниеОшибки (ErrorDescription)
Синтаксис:
ОписаниеОшибки()
Возвращаемое значение:
Возвращает описание ошибки, такое же, какое было бы выдано в окне сообщений в случае отсутствия обработчика исключительной ситуации, за исключением описания модуля и строки, в которой ошибка возникла.
Описание:
Получает описание ошибки.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Примечание:
Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку. Помогает в выдаче диагностики при возникновении ошибок.
Пример:
Код 1C v 8.2 УП
Попытка
НаборЗаписей.Записать(Истина);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
1C v 8.0 — 8.1 |
---|
Синтаксис:
ОписаниеОшибки()
Возвращаемое значение:
Возвращает описание ошибки, такое же, какое было бы выдано в окне сообщений в случае отсутствия обработчика исключительной ситуации, за исключением описания модуля и строки, в которой ошибка возникла.
Описание:
Получает описание ошибки.
Примечание:
Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку. Помогает в выдаче диагностики при возникновении ошибок.
Пример:
Код 1C v 8.х
Попытка
НаборЗаписей.Записать(Истина);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
1C v 7.x |
---|
Синтаксис:
ОписаниеОшибки()
Назначение:
Применять данную функцию имеет смысл только в конструкции <Попытка — Исключение — КонецПопытки>, так как в иных случаях она возвращает пустую строку.
См. также:Попытка Исключение; ВызватьИсключение.
Возвращает описание ошибки времени выполнения модуля, такое же, как то, которое выдается в окне сообщений.
Параметры: нет
Разместил: E_Migachev Дата: 30.11.2009 Прочитано: 9657 |
В этой статье мы научимся работать с оператором Попытка Исключение в 1С 8.3
Оператор Попытка Исключение в 1С
В чем суть этого оператора? В ходе выполнения программы часто могут возникать ошибки, такие как деление на ноль, корень из отрицательного числа и прочие. Эти ошибки приводят к «крушению» программы – это значит, что программа прекратит свою работу и ни какие операторы после ошибки выполняться не будут. Чтобы обойти исключительную ситуацию и продолжить выполнение программы, в языке программирования 1С существует оператор Попытка…Исключение.
Рассмотрим его синтаксис.
Попытка
//операторы попытки
Исключение
//операторы исключения.
КонецПопытки
Разберем этот синтаксис.
Ключевое слово Попытка открывает список операторов, выполнение которых может привести к исключительной ситуации, все операторы между ключевыми словами Попытка и Исключение это Операторы попытки.
Ключевое слово Исключение открывает список операторов, которые будут выполняться в том случае, если вызвана исключительная ситуация операторами попытки. Т.е. если во время выполнения программы один из операторов попытки вызвал ошибку выполнения программы (исключительную ситуацию), то выполнение данного оператора прерывается и управление передается на первый Оператор исключения. Причем обращаю Ваше внимание, что управление будет передано и в том случае, если исключительную ситуацию вызвали функции и процедуры, разработанные программистом и применяемые в качестве операторов попытки. Естественно, что если ошибка произошла в процедуре или функции, то ее выполнение будет прервано.
Попытка КореньЧислаяА = Sqrt(А); Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5)); Исключение Сообщить("Попытка извлечь корень из отрицательного числа"); КонецПопытки;
В примере выше, я пытаюсь извлечь квадратный корень из какого-то числа. Если число под корнем больше нуля, то корень прекрасно извлечется, и выйдет соответствующее сообщение. А если число под корнем меньше нуля, то программа сообщит об этом, и выполнение не будет завершено аварийно.
Таким образом, в примере выше вычисление квадратного корня и вывод сообщения являются операторами попытки. Между словом Исключение и КонецПопытки располагаются операторы исключения. На эти операторы перейдет программа после вызова исключения (когда число под корнем меньше нуля). Операторы попытки, следующие после строки, где была инициализирована ошибка, исполняться не будут, т.е. сообщение чему равен квадратный корень из числа мы не увидим, если оно отрицательное.
Описание ошибки в 1С
В коде выше я использовал собственное выражение для описания ошибки, но можно использовать метод ОписаниеОшибки(), который возвращается описание ошибки с точки зрения разработчиков платформы 1С. Это функция, которая возвращает текст с описанием ошибки. Например, код выше можно переделать так:
А = -100; Попытка КореньЧислаяА = Sqrt(А); Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5)); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
Тогда, при выполнении выйдет «стандартизированное» описание ошибки.
Оператор ВызватьИсключение в 1С
Если мы всё сделаем правильно, то никакой ошибки не возникнет, просто выйдет сообщение о корне из отрицательного числа. А что если нам нужно, чтобы все-таки ошибка вышла? Для этого есть оператор ВызватьИсключение.
Попытка КореньЧислаяА = Sqrt(А); Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяА,5)); Исключение Сообщить("Попытка извлечь корень из отрицательного числа"); ВызватьИсключение; КонецПопытки;
Если сейчас мы попробуем посчитать корень из отрицательного числа, то выйдет следующее сообщение:
Оператор ВызватьИсключение можно использовать отдельно для «эмуляции» вызова исключение. Например, при выполнении этой команды формы:
&НаКлиенте Процедура Команда1(Команда) ВызватьИсключение "Мы вызвали какое-то исключение"; КонецПроцедуры
Будет вызвано исключение.
Причём, в открывавшемся окне можно посмотреть место в коде, где было вызвано исключение.
Попытка внутри попытки в 1С
В платформе 1С 8.3 можно один оператор попытки разместить в другом операторе. Например, на управляемой форме обработки разместим несколько реквизитов с типом Число.
И по команде с формы попытаемся вычислить корень из каждого реквизита, при этом сделаем это в двух вложенных операторах попытки.
Попытка Попытка КореньЧислаА = Sqrt(А); Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаА,5)); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КореньЧислаяБ = Sqrt(Б); Сообщить("Квадратный корень числа А = " + Окр(КореньЧислаяБ,5)); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
И результат работы этой обработки:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009
Если при исполнении программы происходит ошибка, то 1С сообщает о ней пользователю.
Сообщение обычно производится в окне с красным крестом, откуда такие сообщения называют «поймать красный крест» или «не работает, есть красные ошибки».
Конструкция 1С Попытка-Исключение служит для обработки возможных ошибочных ситуаций.
Хорошим тоном считается обрабатывать ошибки с помощью конструкции 1С Попытка-Исключение, то есть предусматривать места, где они могут произойти и ставить обработчик, который запишет ошибку «в сообщения администратору», а пользователю или сообщит корректно или найдет способ отработать по-другому.
Переменная1 = "22";
Попытка
//код, который может вызвать ошибку
ЧислоСтрокой = Число(Переменная1);
Исключение
ТекстОшибки = ОписаниеОшибки();
КонецПопытки
Код, в котором может произойти ошибка, обрамляется оператором 1С Попытка-Исключение.
В случае, если ошибка происходит, срабатывает выполнение кода между Исключение и КонецПопытки. Если ошибка не происходит, тот код между Исключение и КонецПопытки не выполняется.
Чтобы получить расшифровку ошибки, необходимо получить текст ошибки с помощью функции ОписаниеОшибки() сразу после слова Исключение.
Также существует функция ИнформацияОбОшибке(), которую можно вызывать вместо ОписаниеОшибки(). Разница в том, что она возвращает информацию в структурированном виде, а не строкой.
Структура, возвращаемая функцией ИнформацияОбОшибке():
Проголосовать за этот пост:
Загрузка…
Posted in Язык 1С
Конструкция Попытка-Исключение-КонецПопытки
Если в модуле на встроенном языке 1С будет ошибка времени выполнения, например деление на 0, то выполнение модуля будет прервано и на экран будет выведено сообщение об ошибке:
&НаКлиенте Процедура Исключение(Команда) а = 5/0; КонецПроцедуры
Ошибки времени выполнения (run time) — это ошибки во время выполнения модуля. Еще есть ошибки времени компиляции (compile time) — это ошибки во время компиляции модуля.
Для обработки ошибок времени выполнения можно использовать исключения:
&НаКлиенте Процедура Исключение(Команда) Попытка а = 5/0; Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры
Если в коде после ключевого слова Попытка будет ошибка времени выполнения, то выполнение программы перейдет на первую строку после ключевого слова Исключение. Если ошибок не будет, то код после ключевого слова Исключение даже не будет выполнен.
Конструкцию Попытка-Исключение-КонецПопытки нельзя использовать для обработки ошибок времени компиляции. Такой модуль все равно не будет скомпилирован:
&НаКлиенте Процедура Исключение(Команда) Попытка а = 5/0;+ //здесь ошибка Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры
Вызовы процедур и функций внутри попытки тоже будут обработаны:
&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() а = 5/0; КонецПроцедуры
В 1С используется единый механизм для обработки всех исключений, как исключений платформы, так и исключений конфигураций. То есть при возникновении ошибки времени выполнения платформа начинает искать ближайший оператор Исключение, относящийся к данному блоку кода. Если ошибка произошла на строке, который не был обернут в конструкцию Попытка-Исключение, но после этой строки есть такая конструкция — ошибка не будет обработана этой конструкцией. Если такой оператор найден, то ошибка будет обработана им. Если не найден, то ошибка обрабатывается платформой, выполнение модуля останавливается.
Оператор ВызватьИсключение
Попытки могут быть вложенными:
&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() Попытка а = 5/0; Исключение Сообщить("Ошибка в процедуре"); КонецПопытки; КонецПроцедуры
Если выполнить данный код, то выйдет сообщение «Ошибка в процедуре», то есть код из первого исключения даже не будет выполнен. Чтобы выполнялся код из вышестоящего исключения нужно использовать оператор ВызватьИсключение:
&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() Попытка а = 5/0; Исключение ВызватьИсключение; КонецПопытки; КонецПроцедуры
В этом случае исключение будет проброшено вверх по стеку и обработано первым блоком Попытка-Исключение.
Можно вызывать исключение из кода оператором ВызватьИсключение. Выполнение кода будет прервано, на экране будет сообщение с текстом исключения:
&НаКлиенте Процедура Исключение(Команда) ВызватьИсключение "Исключение вызванное из кода"; КонецПроцедуры
Информация об ошибке
В 1С нельзя использовать несколько блоков Исключений для разных типов ошибки. Какая бы ошибка не произошла всегда будет вызываться код после оператора Исключение. Для получения описания ошибки можно использовать метод ОписаниеОшибки():
&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры
Пример с другим типом ошибки:
&НаКлиенте Процедура Исключение(Команда) Попытка а = ПредопределенноеЗначение("Справочник.Склады.ОсновнойСклад"); //при этом такого предопределенного элемента нет Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры
Но правильней использовать метод ИнформацияОбОшибке(), который вернет объект типа ИнформацияОбОшибке:
&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //объект типа ИнформацияОбОшибке передаем //в метод КраткоеПредставлениеОшибки() //для вывода сообщения на экран Сообщить(КраткоеПредставлениеОшибки(Инф)); КонецПопытки; КонецПроцедуры
Метод КраткоеПредставлениеОшибки() выведет более понятное для обычного пользователя сообщение: «Деление на 0» вместо «{Обработка.Обработка1.Форма.Форма.Форма(5)}: Деление на 0».
Для более полного описания ошибки можно использовать метод ПодробноеПредставлениеОшибки():
&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //объект типа ИнформацияОбОшибке передаем //в метод ПодробноеПредставлениеОшибки() //для вывода подробного сообщения на экран Сообщить(ПодробноеПредставлениеОшибки(Инф)); КонецПопытки; КонецПроцедуры
Но правильней пользователю сообщать кратное представление, а в журнал регистрации записывать подробное представление ошибки:
&НаКлиенте Процедура Исключение(Команда) //ЗаписьЖурналаРегистрации доступно только на сервере Команда1НаСервере(); КонецПроцедуры &НаСервере Процедура Команда1НаСервере() Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //сообщим пользователю Сообщить(КраткоеПредставлениеОшибки(Инф)); //и запишем в журнал регистрации ПодробнаяОшибка = ПодробноеПредставлениеОшибки(Инф); ЗаписьЖурналаРегистрации("Ошибка", УровеньЖурналаРегистрации.Ошибка,,, ПодробнаяОшибка); КонецПопытки; КонецПроцедуры
Приведение к нужному типу
При загрузке числовых данных из файла (например из текстового документа) в 1С часто применяется такой прием для получения числа из строки:
&НаКлиенте Процедура Исключение(Команда) //это строка с числом, допустим она была получена из файла ЧислоСтрокой = "123.45"; Попытка //пробуем перевести ее в число ЧислоЧислом = Число(ЧислоСтрокой); Исключение //если не получилось ЧислоЧислом = 0; КонецПопытки; //дальше работаем как с числом ЧислоЧислом = ЧислоЧислом + 1; Сообщить(ЧислоЧислом); КонецПроцедуры
С точки зрения производительности это не совсем корректно. Правильно использовать объект ОписаниеТипов:
&НаКлиенте Процедура Исключение(Команда) //это строка с числом, допустим она была получена из файла ЧислоСтрокой = "123.45"; //создаем объект типа ОписаниеТипов с типом Число ОписаниеТипа = Новый ОписаниеТипов("Число"); //приводим строку к числу, если не получится вернет значение по умолчанию //для числа это 0 ЧислоЧислом = ОписаниеТипа.ПривестиЗначение(ЧислоСтрокой); //дальше работаем как с числом ЧислоЧислом = ЧислоЧислом + 1; Сообщить(ЧислоЧислом); КонецПроцедуры
Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки
- Главная
- О сайте
- Главная
- Содержание
Категории
—>
рубрики: Язык программирования 1С | Дата: 2 марта, 2017
Как известно ничего идеального в этом мире нет, в том числе и программ. И 1С в этом плане не исключение. И бывает так, что выполнение кода завершается ошибкой. В этом случае пользователю выдается системное сообщение об ошибке из которого как правило мало что можно понять.
К тому же часто необходимо, чтобы несмотря на возникновение ошибки программа продолжила свою работу. Например, когда мы загружаем в базу 1С большой объем данных (элементы справочников, документы и т.д.) совершенно недопустимо, чтобы в случае сбоя во время загрузки одного элемента у нас остановилась вся дальнейшая загрузка. Так вот для обработки таких исключительных ситуаций предназначена конструкция языка 1С Попытка Исключение. Синтаксис ее следующий:
Попытка
//Выполняемый код
Исключение
//Обработка исключительной ситуации:
//- Сообщение пользователю;
//- Запись лога в файл;
//- Отправка сообщения по электронной почте;
//- Фиксация ошибки путем присвоения переменной соответствующего значения
КонецПопытки;
Рассмотрим все вышесказанное на элементарном примере. Для начала искусственно создадим ситуацию с ошибкой. Сделаем это очень просто — путем деления на ноль.
&НаКлиенте
Процедура ВыполнитьДеление(Команда)
Частное = 1 / 0;
КонецПроцедуры
При выполнении этого кода выводится вот такое системное сообщение об ошибке:
А теперь доработаем нашу процедуру с использованием Попытки
&НаКлиенте
Процедура ВыполнитьДеление(Команда)
Попытка
Частное = 1 / 0;
Исключение
Сообщить("Произошла ошибка при попытке деления");
КонецПопытки;
КонецПроцедуры
Снова запустим на выполнение нашу процедуру. В этот раз системное сообщение об ошибке показано не будет, а будет выведено наше собственное сообщение, которое мы прописали в исключении. В исключении можно получить дополнительную информацию об ошибке с помощью метода ОписаниеОшибки(). Вот таким образом
Сообщить("Произошла ошибка при попытке деления" + ОписаниеОшибки());
В этом случае в момент выполнения деления в окне сообщений появится следующий текст
Произошла ошибка при попытке деления{ВнешняяОбработка.ПопыткаИсключение.Форма.Форма.Форма(34)}: Деление на 0
Попытки могут быть вложенными одна в другую. То есть вполне допустимым является следующая конструкция
Попытка
//Код
Попытка
//Код
Исключение
//Обработка исключения
КонецПопытки;
Попытка
//Код
Исключение
//Обработка исключения
КонецПопытки;
Исключение
//Обработка исключения
КонецПопытки;
Это может потребоваться в случае объемного кода, когда мы хотим локализовать место возникновения ошибки.
Конечно не стоит злоупотреблять использованием конструкции Попытка Исключение. По сути ее использование целесообразно в следующих случаях
- Когда несмотря на возникновение ошибки необходимо продолжить выполнение кода.
- Когда необходимо сигнализировать пользователю или администратору о факте возникновении исключительной ситуации, либо о месте ее возникновения. Особенно актуально это при использовании фоновых заданий, т.к. если оно завершается аварийно, то можно увидеть только сам факт этого аварийного завершения в журнале регистрации. И в этом случае отправка письма администратору с описанием причины и места возникновения ошибки в обработке исключения очень даже уместна.
Ошибки в Excel возникают довольно часто. Вы, наверняка, замечали странные значения в ячейках, вместо ожидаемого результата, которые начинались со знака #. Это говорит о том, что формула возвращает ошибку. Чтобы избавиться от ошибки, Вы должны исправить ее причину, а они могут быть самыми разными.
Содержание
- Несоответствие открывающих и закрывающих скобок
- Ячейка заполнена знаками решетки
- Ошибка #ДЕЛ/0!
- Ошибка #Н/Д
- Ошибка #ИМЯ?
- Ошибка #ПУСТО!
- Ошибка #ЧИСЛО!
- Ошибка #ССЫЛКА!
- Ошибка #ЗНАЧ!
Несоответствие открывающих и закрывающих скобок
Самым распространенным примером возникновения ошибок в формулах Excel является несоответствие открывающих и закрывающих скобок. Когда пользователь вводит формулу, Excel автоматически проверяет ее синтаксис и не даст закончить ввод, пока в ней присутствует синтаксическая ошибка.
Например, на рисунке выше мы намеренно пропустили закрывающую скобку при вводе формулы. Если нажать клавишу Enter, Excel выдаст следующее предупреждение:
В некоторых случаях Excel предлагает свой вариант исправления ошибки. Вы можете либо согласиться с Excel, либо исправить формулу самостоятельно. В любом случае слепо полагаться на это исправление ни в коем случае нельзя. Например, на следующем рисунке Excel предложил нам неправильное решение.
Ячейка заполнена знаками решетки
Бывают случаи, когда ячейка в Excel полностью заполнена знаками решетки. Это означает один из двух вариантов:
-
- Столбец недостаточно широк для отображения всего содержимого ячейки. Для решения проблемы достаточно увеличить ширину столбца, чтобы все данные отобразились…
…или изменить числовой формат ячейки.
- Столбец недостаточно широк для отображения всего содержимого ячейки. Для решения проблемы достаточно увеличить ширину столбца, чтобы все данные отобразились…
- В ячейке содержится формула, которая возвращает некорректное значение даты или времени. Думаю, Вы знаете, что Excel не поддерживает даты до 1900 года. Поэтому, если результатом формулы оказывается такая дата, то Excel возвращает подобный результат.
В данном случае увеличение ширины столбца уже не поможет.
Ошибка #ДЕЛ/0!
Ошибка #ДЕЛ/0! возникает, когда в Excel происходит деление на ноль. Это может быть, как явное деление на ноль, так и деление на ячейку, которая содержит ноль или пуста.
Ошибка #Н/Д
Ошибка #Н/Д возникает, когда для формулы или функции недоступно какое-то значение. Приведем несколько случаев возникновения ошибки #Н/Д:
- Функция поиска не находит соответствия. К примеру, функция ВПР при точном поиске вернет ошибку #Н/Д, если соответствий не найдено.
- Формула прямо или косвенно обращается к ячейке, в которой отображается значение #Н/Д.
- При работе с массивами в Excel, когда аргументы массива имеют меньший размер, чем результирующий массив. В этом случае в незадействованных ячейках итогового массива отобразятся значения #Н/Д.Например, на рисунке ниже видно, что результирующий массив C4:C11 больше, чем аргументы массива A4:A8 и B4:B8.
Нажав комбинацию клавиш Ctrl+Shift+Enter, получим следующий результат:
Ошибка #ИМЯ?
Ошибка #ИМЯ? возникает, когда в формуле присутствует имя, которое Excel не понимает.
- Например, используется текст не заключенный в двойные кавычки:
- Функция ссылается на имя диапазона, которое не существует или написано с опечаткой:
В данном примере имя диапазон не определено.
- Адрес указан без разделяющего двоеточия:
- В имени функции допущена опечатка:
Ошибка #ПУСТО!
Ошибка #ПУСТО! возникает, когда задано пересечение двух диапазонов, не имеющих общих точек.
- Например, =А1:А10 C5:E5 – это формула, использующая оператор пересечения, которая должна вернуть значение ячейки, находящейся на пересечении двух диапазонов. Поскольку диапазоны не имеют точек пересечения, формула вернет #ПУСТО!.
- Также данная ошибка возникнет, если случайно опустить один из операторов в формуле. К примеру, формулу =А1*А2*А3 записать как =А1*А2 A3.
Ошибка #ЧИСЛО!
Ошибка #ЧИСЛО! возникает, когда проблема в формуле связана со значением.
- Например, задано отрицательное значение там, где должно быть положительное. Яркий пример – квадратный корень из отрицательного числа.
- К тому же, ошибка #ЧИСЛО! возникает, когда возвращается слишком большое или слишком малое значение. Например, формула =1000^1000 вернет как раз эту ошибку.
Не забывайте, что Excel поддерживает числовые величины от -1Е-307 до 1Е+307.
- Еще одним случаем возникновения ошибки #ЧИСЛО! является употребление функции, которая при вычислении использует метод итераций и не может вычислить результат. Ярким примером таких функций в Excel являются СТАВКА и ВСД.
Ошибка #ССЫЛКА!
Ошибка #ССЫЛКА! возникает в Excel, когда формула ссылается на ячейку, которая не существует или удалена.
- Например, на рисунке ниже представлена формула, которая суммирует значения двух ячеек.
Если удалить столбец B, формула вернет ошибку #ССЫЛКА!.
- Еще пример. Формула в ячейке B2 ссылается на ячейку B1, т.е. на ячейку, расположенную выше на 1 строку.
Если мы скопируем данную формулу в любую ячейку 1-й строки (например, ячейку D1), формула вернет ошибку #ССЫЛКА!, т.к. в ней будет присутствовать ссылка на несуществующую ячейку.
Ошибка #ЗНАЧ!
Ошибка #ЗНАЧ! одна из самых распространенных ошибок, встречающихся в Excel. Она возникает, когда значение одного из аргументов формулы или функции содержит недопустимые значения. Самые распространенные случаи возникновения ошибки #ЗНАЧ!:
- Формула пытается применить стандартные математические операторы к тексту.
- В качестве аргументов функции используются данные несоответствующего типа. К примеру, номер столбца в функции ВПР задан числом меньше 1.
- Аргумент функции должен иметь единственное значение, а вместо этого ему присваивают целый диапазон. На рисунке ниже в качестве искомого значения функции ВПР используется диапазон A6:A8.
Вот и все! Мы разобрали типичные ситуации возникновения ошибок в Excel. Зная причину ошибки, гораздо проще исправить ее. Успехов Вам в изучении Excel!
Оцените качество статьи. Нам важно ваше мнение:
Я пытаюсь получить «.csv » файл в базу данных SQL с phpMyAdmin. Однако всякий раз, когда я импортирую его, я получаю ошибку: недопустимое количество столбцов во входных данных CSV в строке 1.
Я провел весь день, играя вокруг с различными вариантами, чтобы попытаться заставить его работать, но безрезультатно. В моем ровно 47 столбцов .CSV-файл. Я создал 47 столбцов в моей таблице SQL. Однако имена не совсем совпадают с именами в файле. Когда я импортирую, он продолжает давать мне эту ошибку.
Любая помощь был бы очень признателен!
~ Carpetfizz
Одна вещь, которую я думал, может вызвать проблему, заключалась в том, что первый столбец ничего не назван в моем документе excel. Может ли это вызвать проблему?
EDIT 12: 30AM: phpMyAdmin уже последняя версия доступна, через (apt-get install phpmyadmin) (phpmyadmin уже последняя версия)
здесь — это .CSV-файл, если это поможет.
12 ответов
Если ваша таблица БД уже существует, и вы не хотите включать все столбцы таблицы в свой CSV-файл, то при запуске PHP Admin Import вам нужно будет заполнить поле имена столбцов в параметрах формата для CSV, показанных здесь внизу следующего скриншота.
в итоге:
- Выберите файл CSV
- установите формат в CSV
- заполните поле имена столбцов именами столбцов в вашем CSV
- если ваш CSV-файл имеет имена столбцов, перечисленные в строке 1, Установите «пропустить это количество запросов (для SQL) или строк (для других форматов), начиная с первого» до 1
48
автор: Daniel Flippance
исправлено! Я в основном просто выбрал «импорт», даже не делая таблицу сам. phpMyAdmin создал для меня таблицу со всеми правильными именами столбцов из исходного документа.
Я получил ту же ошибку при импорте .csv-файл с использованием phpMyAdmin.
решением моей проблемы было то, что мой компьютер сохранил .csv-файл с; (с запятой) в качестве разделителя вместо, (запятые).
в параметрах формата вы можете выбрать «столбцы разделены:» и выбрать ; вместо, (запятая).
чтобы посмотреть, в чем ваш компьютер хранит файл, откройте .CSV-файл в текстовом редакторе.
У меня просто была эта проблема и я понял, что пустые столбцы рассматриваются как столбцы со значениями, я увидел это, открыв свой CSV в текстовом редакторе. Чтобы исправить это, я открыл электронную таблицу и удалил столбцы после моего последнего столбца, они выглядели полностью пустыми, но они не были. После того, как я сделал это, импорт работал отлично.
имел ту же проблему и сделал два изменения: (a) не переписал существующие данные (не идеально, если это ваше намерение, но вы можете запустить запрос на удаление заранее), и (b) подсчитал столбцы и обнаружил, что csv имеет пустой столбец, поэтому всегда платит, чтобы вернуться к исходной работе, даже если все «кажется» правильным.
вам нужно будет пропустить первую строку (где определены имена столбцов), и вам нужно будет проверить, какой «символ» разделяет ячейки (обычно это ,
, но в моем случае был ;
)
Ниже приведена картина моего импорта:
ваше решение, похоже, предполагает, что вы хотите создать совершенно новую таблицу.
однако, если вы хотите добавить содержимое в уже существующую таблицу, найдите структуру таблицы и обратите внимание на количество столбцов (столбец id, если у вас есть один все еще подсчитывает ->, даже если это может быть автоматическое приращение/уникальный)
Итак, если таблица выглядит так
id имя возраст секс
убедитесь, что ваша таблица excel выглядит так
A1 id B1 имя C1 возраст D1 пол
и теперь они оба имеют 4 колонки.
также прямо под частичным импортом, рядом с пропуском количества запросов…. увеличьте число, чтобы пропустить соответствующую строку. выбор 1 автоматически пропустит первую строку. Для тех, у кого могут быть заголовки в файлах excel
Если таблица уже была создана, и Вы были достаточно ленивы, чтобы не указывать столбцы в полях ввода имен, то все, что вам нужно сделать, это выбрать пустые столбцы справа от содержимого файла и удалить их.
У меня была аналогичная проблема с phpmyAdmin. Количество столбцов в импортируемом файле соответствует столбцам в целевой таблице базы данных. Я попытался импортировать файлы в обоих .csv и .формат ods безрезультатно, получая множество ошибок, включая один аргумент, что количество столбцов было неправильным.
Как .csv и .файлы ods были созданы с помощью LibreOffice 5.204. Основываясь на небольшом опыте с проблемами импорта в прошлые годы, я решил переделать файлы с помощью gnumeric электронная таблица, экспорт .СОД в соответствии со стандартом «строгого» формата. Вуаля! Больше нет проблем с импортом. Хотя у меня не было времени исследовать проблему дальше, я подозреваю, что что-то изменилось во внутренней структуре вывода файла LibreOffice.
при возникновении ошибок с входными файлами любого типа,проблемы с кодировкой общие.
простым решением может быть открытие нового файла, копирование вставки в него текста CSV, а затем сохранение его как нового файла.
последний столбец моей базы данных (это столбец F в электронной таблице) не используется и поэтому пуст. Когда я импортировал файл CSV excel, я получил ошибку «количество столбцов».
Это потому, что excel сохранял только столбцы, которые я использую. А-Е
добавление 0 в первую строку в F решило проблему, затем я удалил ее после успешной загрузки.
надеюсь, это поможет и сэкономит кому-то еще время и потерю волос:)
самая тупая вещь, которая когда-либо исправит эту ошибку в Microsoft Excel (при условии, что у вас действительно есть все остальное):
выберите данные и нажмите «границы все» в Excel (ставит визуальные границы вокруг ваших данных) перед сохранением CSV. Звучит бессмысленно? Я полностью согласен! Однако он исправит эту ошибку. Я использую этот трюк, по крайней мере, три раза в неделю.