Ошибка инициализации модуля модульменеджера переменная не определена

Расширение не видит функции общего модуля

Я
   windows98a

22.10.18 — 13:42

День добрый.

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

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

Еще раз повторюсь — изначально всё работало. Вроде как изменений, которые могли зацепить — не вносилось.

Есть у кого предположения?

   windows98a

1 — 22.10.18 — 13:46

новая информация — пробелема возникает только в толстом клиенте.

Видимо до этого тестировал только в тонком.

Кстати 8.3.11.3034

   windows98a

2 — 22.10.18 — 13:50

Ошибка инициализации модуля: НоменклатураРасширенный Документ.ОтчетОРозничныхПродажах.МодульМенеджера

по причине:

{НоменклатураРасширенный Документ.ОтчетОРозничныхПродажах.МодульМенеджера(134,10)}: Переменная не определена (ПроведениеСерверУТ)

    Если НЕ <<?>>ПроведениеСерверУТ.ЕстьТаблицаЗапроса(«ВтАгентскиеУслуги», ТекстыЗапроса) Тогда

{НоменклатураРасширенный Документ.ОтчетОРозничныхПродажах.МодульМенеджера(214,10)}: Переменная не определена (ПроведениеСерверУТ)

    Если НЕ <<?>>ПроведениеСерверУТ.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда

{НоменклатураРасширенный Документ.ОтчетОРозничныхПродажах.МодульМенеджера(135,3)}: Процедура или функция с указанным именем не определена (ТекстЗапросаВтАгентскиеУслуги)

        <<?>>ТекстЗапросаВтАгентскиеУслуги(Запрос, ТекстыЗапроса);

{НоменклатураРасширенный Документ.ОтчетОРозничныхПродажах.МодульМенеджера(138,2)}: Процедура или функция с указанным именем не определена (ИнициализироватьКлючиАналитикиУчетаНоменклатуры)

    <<?>>ИнициализироватьКлючиАналитикиУчетаНоменклатуры(Запрос);

   windows98a

3 — 22.10.18 — 14:04

поставил у модуля ПроведениеСерверУТ вызовсервера — проблема ушла. Такое ощущение, что В РАСШИРЕНИИ модульменеджера обрабатывается на клиенте, а В ОСНОВНОЙ — на серврере

   windows98a

4 — 22.10.18 — 14:05

имеется в виду в толстом клиенте

   RomanYS

5 — 22.10.18 — 14:14

(3) в «основной» модуль менеджера в толстом клиенте отрабатывает в том контексте, откуда его вызвали. Про расширение ничего не скажу.

   windows98a

6 — 22.10.18 — 14:17

Поведение программы в тонком и толстом клиенте разное. Поведение одного и того же кода в расширении и без него тоже разное.

Удобная штука — расширения, но они добавили вопросов))

   PiotrLoginov

7 — 22.10.18 — 14:21

модуль, методы которого нужны, серверный?   Флаг «Вызов сервера» стоит ?

   Cyberhawk

8 — 22.10.18 — 14:55

В модуле менеджера отчета инструкции препроцессора никто не отменял

   Cyberhawk

9 — 22.10.18 — 14:55

И модуле менеджера документа тоже

   Вафель

10 — 22.10.18 — 14:57

(9) те при переопределении серверного модуля менеджера происходит передача на толстый клиент?

   windows98a

11 — 22.10.18 — 14:59

Получается я неправильно сформулировал название темы. Не видит не процедуры, а не видит сам модуль. «Переменная не определена (ПроведениеСерверУТ)».

   windows98a

12 — 22.10.18 — 15:00

(7) вызов сервера не стоит, но менять основную конфигурацию на хотелось бы, а поставить чисто в расширении нельзя.

но установка флага проблему решает(см. сообщение 3)

   windows98a

13 — 22.10.18 — 15:01

(9) я же не новые процедуры описываю, а перехватываю существующие.  и в основной конфигурации тот же код отрабатывает правильно

   Вафель

14 — 22.10.18 — 15:01

а ту тебя тонкий клиент или как?

   windows98a

15 — 22.10.18 — 15:06

в тонком клиенте отрабатывает ВСЁ без проблем. проблемы начались в толстом

   Cyberhawk

16 — 22.10.18 — 15:06

(10) Хз, что там за передача и куда и про что ты. Ошибка-то на этапе компиляции кода расширения происходит. Компилятор тупо смотрит текст модуля менеджера расширения и видит обращения к ОМ, которые из-за отсутствия инструкций ему не доступны

   Cyberhawk

17 — 22.10.18 — 15:06

(13) «в основной конфигурации тот же код отрабатывает правильно» // Конечно. Ведь там инструкции имеются.

   windows98a

18 — 22.10.18 — 15:09

(17) их там нет

   RomanYS

19 — 22.10.18 — 15:11

(18) похоже (17) прав. В БП3 весь модуль менеджера РТиУ сидит в

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

   windows98a

20 — 22.10.18 — 15:12

текст из основной

Функция ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)

    
    ИмяРегистра = «ДвиженияСерийТоваров»;

    
    Если НЕ ПроведениеСерверУТ.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда

        Возврат «»;

    КонецЕсли;

   windows98a

21 — 22.10.18 — 15:13

текст из расширения

&Вместо(«ТекстЗапросаТаблицаДвиженияСерийТоваров»)

Функция Номенклатура_ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры)

    
    ИмяРегистра = «ДвиженияСерийТоваров»;

    
    Если НЕ ПроведениеСерверУТ.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда

        Возврат «»;

    КонецЕсли;

   RomanYS

22 — 22.10.18 — 15:14

(20) поищи «#Если» в модуле менеджера, оно относится к области, а не конкретной функции

   windows98a

23 — 22.10.18 — 15:15

(22) есть в начале модуля менеджера

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

   windows98a

24 — 22.10.18 — 15:17

добавил аналогично в модуль расширения — проблема ушла

   Cyberhawk

25 — 22.10.18 — 15:18

Автор баклан какой-то

   windows98a

26 — 22.10.18 — 15:18

благодарю.

Видимо нужно лучше учить матчасть, никоргда бы не предположил такого поведения

   windows98a

27 — 22.10.18 — 15:19

(25) что значит баклан))?

   Cyberhawk

28 — 22.10.18 — 15:22

(27) Разговорное для тугодум / глупец, а так это птица

   windows98a

29 — 22.10.18 — 15:23

(28) ааа, согласен ,есть такое дело)) ну ьыл бы другой — разобрался бы сам

   windows98a

30 — 22.10.18 — 15:23

спасибо!

   RomanYS

31 — 22.10.18 — 15:24

(28) Скажи как зоолог, к какому виду относится ТС Примитивный запрос, в консоле работает, в конфе выборка пустая.

10+ лет на форуме, обход выборки запроса не осилил.

   Вафель

32 — 22.10.18 — 15:27

интересно, а в каких если режима, кроме (23) может быть модуль менеджера?

   RomanYS

33 — 22.10.18 — 15:32

(32) в толстом клиенте он доступен на клиенте, собственно из-за этого вся тема.

   Cyberhawk

34 — 22.10.18 — 15:43

(31) О, это редкое явление Сибири :) «Семерочник-кустарщик»?

   Вафель

35 — 22.10.18 — 15:46

(33) толстый клиент управляемое приложение?

   RomanYS

36 — 22.10.18 — 15:48

(35) да

  

RomanYS

37 — 22.10.18 — 15:49

(34) В точку! Я думал, они вымерли)

Платформа: 8.3.14.1694
Режим БД: клиент-серверный
Конфигурация. Название: Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.9.229)
Конфигурация. Основной режим запуска: Управляемое приложение
Конфигурация. Вариант встроенного языка: Русский
Конфигурация. Режим совместимости: Версия8_3_12
Конфигурация. Версия БСП: 3.0.1.440
Инструменты разработчика. Версия: Расширение 5.08e
Инструменты разработчика. Объекты на сервере: Да
Расширения. ДополненияФорм ()
Расширения. ИнструментыРазработчикаTormozit (5.08e)
Клиент. ОС: Windows x86 Microsoft Windows 8.1 version 6.3  (Build 9600)
Клиент. Приложение: Управляемое приложение 32б
Клиент. От имени администратора Windows: Да
Клиент. Текущий язык системы: ru
Сервер. ОС: Windows x86-64 Microsoft Windows 8.1 version 6.3  (Build 9600)
Сервер. Отладка: tcp

Выбрал документы помечены на удаление НеявкаОтсутсвие, хочу удалить, жму контроль
и появляется следующее сообщение

Также такая же ошибка возникает при использовании обработки Удаление объектов с контролем ссылок ИР и выборе всех документов и выборочных типов документов
Ниже привожу сообщение из раздела «Информация для тех поддержки»

Код

Ошибка инициализации модуля: Документ.ТамОплатаМедосмотра.МодульМенеджера
по причине:
{Документ.ТамОплатаМедосмотра.МодульМенеджера(4,10)}: Переменная не определена (ЗарплатаКадрыСоставДокументов)
Возврат <<?>>ЗарплатаКадрыСоставДокументов.ОписаниеСоставаДокументаПоМетаданнымФизическиеЛицаВТабличныхЧастях(МетаданныеДокумента);

Переменная
не определена в 1С

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

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

Переменные указываются в структуре кода с использованием знака равенства (=) или перечисляются после ключевого слова Перем в одноименном разделе модулей, кроме общего и модуля сеанса.

Тип переменной заранее не задается, а определяется после присвоения какого-либо значения. В памяти они не хранятся, а создаются в момент исполнения кода и стираются с завершением операций. Различают 3 вида переменных:

  • глобальные,
  • локальные,
  • экспортные.

Глобальные переменные

Объявляются в верхней части модулей до процедур/функций в разделе объявления переменных. Имена перечисляются после ключевого слова Перем через запятую. Присвоение значений происходит в процессе выполнения кода, изначально имеет тип [Неопределено].

Глобальные переменные можно использовать в модулях:

  • обычного приложения;
  • управляемого приложения;
  • команды;
  • внешнего соединения;
  • менеджера;
  • формы;
  • объекта;
  • набора записей.

В модулях формы и команды для каждой процедуры/функции определяется место исполнения: на сервере (&НаСервере, &НаСервереБезКонтекста) или на клиенте (&НаКлиенте), при этом режим работы программы (серверный или файловый) не имеет значения. Объявленные глобальные переменные в этих модулях во время выполнения кода:

  • &НаКлиенте — передаются от одной процедуры к другой с сохранением значения. При переводе исполнения кода на сервер переменные продолжают существовать на стороне клиента со значениями, которые имели до передачи на сервер;

  • &НаСервере — уничтожаются по окончании выполнения процедур/функций на сервере, обратная передача переменной на клиент не производится. При повторном обращении к серверу создается вновь со значением по умолчанию [Неопределено].

Локальные переменные

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

Экспортные переменные

В разделе переменных после имени имеют ключевое слово Экспорт, которое позволяет экспортировать их в любое место программы через обращение к модулю-родителю.

Ошибка «Переменная не определена» в 1С 8.3

Когда программа 1С не может найти переменную, пользователю выдается сообщение «Переменная не определена ([Имя_переменной])».

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

  • очистка кэш-памяти программы 1С;
  • регистрация ошибки на сайте поддержки 1С, загрузка исправленных версий конфигурации;
  • тестирование и исправление сбоев в 1С через одноименную команду в конфигураторе.

Если ни один из вышеуказанных способов не дал результата, то для решения проблемы с ошибкой «Переменная не определена» потребуется разобрать в программном коде и при необходимости внести правки.

Кроме текста ошибки в окне указано место ее возникновения:

  • Документ — вид объекта метаданных;
  • РеализацияТоваровУслуг — имя объекта;
  • Форма. ФормаДокументаТовары — модуль возникновения сбоя;
  • Форма(299,42) — номер строки в коде модуля и порядковый номер символа в строке.

Для перехода в конфигуратор нажмите Подробно — Конфигуратор. Если кнопки Подробно нет в окне:

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

В конфигураторе откроется модуль, в котором не удалось определить переменную, а курсор автоматически переместится на ее имя.

Способы устранения ошибки

Если переменная не определена в процедуре/функции, исполняемой на стороне клиента (&НаКлиенте):

1. Проверьте код процедуры/функции до места, где идет обращение к переменной: возможно, произошла опечатка в имени.

2. Просмотрите раздел объявления переменных в начале модуля: если есть сходные по наименованию переменные, исправьте описку в процедуре/функции.

3. До момента использования в процедуре/функции локальной переменной не было присвоено никакого значения, и в памяти 1С ее еще не существует.

С глобальными переменными такие случаи исключены, т. к. они создаются сразу после объявления в начале модуля со значением [Неопределено] и могут подставляться в выражения без предварительной записи в них значения.
Для устранения ошибки потребуется вставить в код строку с присвоением переменной значения. По негласному соглашению программисты 1С при написании исполняемого кода дают имена объектам, реквизитам, процедурам, переменным и т. д., созвучные с записываемой в них информацией или выполняемыми действиями. Обратите внимание:

  • когда появляется окно с ошибкой «Переменная не определена»: открытие формы, нажатие на кнопку, выбор из списка и т. д.? В примере окно с сообщением об ошибке выдается при попытке изменить дату документа;
  • на наименование процедуры/функции, которая содержит строку кода с ошибкой —ДатаПриИзменении, содержит алгоритм действий при смене даты;
  • на имя ненайденной переменной — ТекДатаДокумента, говорит о значении с типом Дата.
    Проанализировав эту информацию, определите, какое значение должно быть в переменной. В представленном коде, возможно, программист имел в виду дату документа до изменения.
    После определения данных, которые должна содержать переменная, в процедуру/функцию перед местом сбоя дописывается строка кода с присвоением переменной требуемого значения.

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

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

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

Когда ошибку «Переменная не определена» 1С 8.3 выдает при выполнении серверной процедуры/функции (&НаСервере, &НаСервереБезКонтекста):

  1. Не присвоено значение локальной переменной, действия аналогичны использованию на клиенте с поправкой на место исполнения.
    Глобальные переменные на сервере создаются автоматически при выполнении процедур/функций с пометкой &НаСервере или &НаСервереБезКонтекста, так же, как на клиенте им присваивается начальное значение [Неопределено]. По завершении всех операций на сервере переменная уничтожается. При последующих вызовах сервера глобальная переменная примет начальное значение [Неопределено]. Последовательность процедур/функций в модулях не влияет на порядок их выполнения, переход с клиента на сервер и обратно определяется программным кодом.
  2. Переменная объявлена на стороне клиента, а используется на сервере, где ее не существует. Если переменная должна содержать значение, полученное в клиентской процедуре/функции, то можно передать ее на сервер через параметр.
  3. Глобальная переменная не объявлена — добавьте в начале модуля переменную для сервера.
  4. При обращении к базе данных неверно указаны имена объектов, параметров, из-за чего программа ошибочно приняла их за переменные — исправьте опечатку.

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

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

Обслуживание

Заказать консультацию

По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.

База БГУ 1.0, последнего релиза, другой нет. При проверке себя Проверкой конфигурации выдаёт много ошибок, пытаюсь разгребсти их. Плиз сподмогните к чем может Вот такая ошибка есть, ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(2457,10)}: Переменная не определена (ОбщегоНазначения) Возврат <<?>>ОбщегоНазначения.ПолучитьНомерНаПечать(Документ, МассивПрефиксов); (Проверка: Тонкий клиент) Как это побороть, точнее исправить

Ошибка при работе возникает? Может там не явная инициализация и проверка синтаксиса не может ее выявить.

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

#4
by Неверный Параметр И

БГУ она же на обычных формах, вроде как. Зачем ты проверяешь ее в режиме тонкого клиента?

Галка стояла по умолчанию она и проверила, в толстом клиенте та же история, вопрос как исправить, а это уже частности

Ну вы уже посмотрели область доступности модуля ОбщегоНазначения?

простановкой галочек у общих модулей попробуйте исправить.

Что даст простановка галочек? Это как я понимаю её надо с чем-то сравнить? А сравнивать не с чем

Тэги: 1С 8

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

Содержание:

1.       Проверка на определения в 1С 8.3

2.       Поиск объявления переменной в 1С 8.3

3.       Обычная опечатка в программах 1С:Предприятие

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

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

1.   Проверка на определения 1С 8.3

Можно прописать перед ошибкой следующий код:

Если Не НашаПеременная = Неопределено Тогда

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

2.   Поиск объявления переменной 1С 8.3

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

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

3.   Обычная опечатка в программе 1С 8.3 Предприятие

Чтобы быстро в программе 1С 8.3 Предприятие проверить опечатка ли спровоцировала ошибку, просто скопируем переменную из объявления и вставим ее имя в то место, где случается ошибка. Можно сделать следующим образом, чтобы избежать таких ошибок в будущем:

Обычная опечатка в 1С

опечатка в программе 1С

Теперь, когда курсор останавливается на идентификаторе, все другие его упоминания будут выделены, как на следующем изображении:

Проверка на определения 1C

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

Дягилев Дмитрий Вадимович

Ошибка Переменная не определена в 1С 8.3 указывает на то, что программа не может получить нужную информацию в исполняемом программном коде. Это может быть связано с обновлением или доработкой программы. Если стандартный набор действий при исправлении ошибок не помог:

  • чистка кеша;
  • тестирование и исправление информационной базы;
  • просмотр зарегистрированных ошибок на сайте 1С,

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

БухЭксперт8 подготовил 3 примера получения и исправления ошибки:

  • в доработанном программном коде;
  • при выводе печатной формы;
  • при исполнении кода на Клиенте.

Содержание

  • Ошибка в доработанном программном коде
  • Ошибка вывода печатной формы
  • Ошибка исполнения кода на Клиенте

Ошибка в доработанном программном коде

В форму типового отчета Движение товаров программист добавил поле Склад. Список выбора значений в это поле ограничен. При открытии отчета появляется ошибка:

В сообщении об ошибке указано место возникновения ошибки — строка 919 в модуле формы. Для исправления ошибки необходимо выполнить следующие действия:

  1. Нажмите кнопку Подробно в форме сообщения об ошибке.
    В окне Обнаружены ошибки программа укажет:

    • номер неправильной строки кода;
    • исполняемую команду, которая привела к ошибке.

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

  2. Для перехода в место ошибки нажмите кнопку Конфигуратор.
    В Конфирураторе курсор автоматически установится на строке программного кода с ошибкой. Необходимо проверить используемые командой данные. В данном примере ошибка сигнализирует, что переменной ОсновнойСклад не задано значение: при добавлении в список складов программа не понимает, какой склад требуется добавить.
  3. Исправьте ошибку.
    Укажите нужное значение переменной в программном коде, например:

    • ОсновнойСклад = Справочники.Склады.НайтиПоНаименованию(«Основной склад»);
    • ОсновнойСклад = Справочники.Склады.ОсновнойСклад.

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

  4. Сохраните изменения и обновите информационную базу.
  5. Проверьте работу 1С после исправления ошибки.

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

Ошибка вывода печатной формы

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

В макет документа добавлена область Подвал:

В программном коде дописан вывод данных области Подвал:

После доработки программы при попытке вывода накладной на печать 1С выдает ошибку:

Информация в окне сообщения об ошибке указывает, что в Модуле менеджера документа ПоступлениеТоваровУслуг не определено значение переменной Ответственный. Для исправления ошибки:

  1. Перейдите в Конфигуратор. В Модуле менеджера документа ПоступлениеТоваровУслуг перейдите на строку 4804.
  2. Укажите для вывода в печатную форму поля Ответственный — текущего пользователя, используя специальную команду 1С:
    • Пользователи.ТекущийПользователь().
  3. Сохраните изменения и обновите информационную базу.
  4. Перейдите в пользовательский режим для проверки выполненных изменений.

После исправления программного кода накладная сформируется без ошибки.

Ошибка исполнения кода на Клиенте

С переходом на управляемые формы в Бухгалтерия 3.0 работы программистам прибавилось.

Язык программирования стал сложнее. Часть команд теперь могут выполняться только на стороне клиента — это, условно говоря, компьютер пользователя, который посылает запросы на исполнение операций серверу. Сервер обрабатывает все поступившие запросы и отсылает обратно клиенту результат обработки данных.

Все это привело к тому, что в 1С команды делятся на исполняемые &НаСервере и &НаКлиенте. И при написании программного кода нужно это учитывать, иначе программа не сможет выполнить заданную операцию. При работе с переменными при написании программного кода важно понимать:

  • &НаКлиенте — переменные существуют только на время клиентского вызова;
  • &НаСервере— переменные существуют только на время серверного вызова.

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

При доработке программного кода программист использовал операцию получения данных склада &НаКлиенте в процедуре ПриОткрытии.

При сохранении изменений 1С сообщила об ошибке Переменная не определена (Справочники) при определении значения склада:

  • «?»Справочники.Склады.НайтиПоКоду(«»00-000002»).

Ошибка связана с тем, что данная операция исполняется только на сервере, т. е. &НаСервере. И несмотря на то, что сама команда исполнения корректна, ошибка будет формироваться до тех пор, пока ее не перенесут в область команд исполнения &НаСервере, например так:

Теперь сохранение изменений пройдет без ошибки.

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

См. также:

  • Большое количество забивается решеткой
  • Печатная форма недоступна 1С 8.3 при вызове внешней печатной формы
  • Значение поля номер не уникально 1С 8.3: как исправить
  • У пользователя недостаточно прав на исполнение операции

Если Вы еще не подписаны:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

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

Подписывайтесь на наши YouTube и Telegram чтобы не пропустить
важные изменения 1С и законодательства

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

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

Новая тема

Ответить

Юрий

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

Доброго времени суток. Подскажите пожалуйста при обновлении версии программы БП 3.0.99.21 вот такая ошибка, как с этим бороться?
Ошибка инициализации модуля: Документ._УПР_КорректировкаВыпуска.МодульМенеджера
по причине:
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(1124,21)}: Переменная не определена (ОбменСКонтрагентамиСлужебный)
НастройкиОбмена = <<?>>ОбменСКонтрагентамиСлужебный.ЗаполнитьПараметрыЭДПоИсточнику(СсылкаНаОбъект);
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(1157,25)}: Переменная не определена (ОбменСКонтрагентамиСлужебный)
МассивСтруктурОбмена = <<?>>ОбменСКонтрагентамиСлужебный.СформироватьXMLФайлыДокументов(МассивСсылокНаОбъект,
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(7398,19)}: Переменная не определена (ОбменСКонтрагентамиСлужебный)
ИмяФайлаАрхива = <<?>>ОбменСКонтрагентамиСлужебный.ТекущееИмяВременногоФайла(«zip»);
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(7752,20)}: Переменная не определена (ОбменСКонтрагентамиСлужебный)
ИмяФайлаАрхива = <<?>>ОбменСКонтрагентамиСлужебный.ТекущееИмяВременногоФайла(«zip»);
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(7406,11)}: Переменная не определена (ЭлектронноеВзаимодействиеСлужебный)
Если НЕ <<?>>ЭлектронноеВзаимодействиеСлужебный.ВозможноИзвлечьФайлы(ЧтениеЗИП, ПапкаДляРаспаковки) Тогда
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(7407,21)}: Переменная не определена (ЭлектронноеВзаимодействиеСлужебныйПовтИсп)
ТекстСообщения = <<?>>ЭлектронноеВзаимодействиеСлужебныйПовтИсп.ПолучитьСообщениеОбОшибке(«006»);
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(7466,21)}: Переменная не определена (ОбменСКонтрагентамиВнутренний)
ДанныеДокумента = <<?>>ОбменСКонтрагентамиВнутренний.СформироватьДеревоРазбора(ИмяФайлаДанных,
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(7666,23)}: Переменная не определена (ОбменСКонтрагентамиВнутренний)
ТабличныйДокумент = <<?>>ОбменСКонтрагентамиВнутренний.СформироватьПечатнуюФормуЭД(
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(7727,2)}: Переменная не определена (ОбменСКонтрагентамиВнутренний)
<<?>>ОбменСКонтрагентамиВнутренний.СформироватьТранспортнуюИнформацию(СтруктураОбмена.СтруктураЭД,
{Документ._УПР_КорректировкаВыпуска.МодульМенеджера(7732,2)}: Переменная не определена (ОбменСКонтрагентамиВнутренний)
<<?>>ОбменСКонтрагентамиВнутренний.СформироватьКарточку(СтруктураОбмена.СтруктураЭД, АдресКаталога, ТекстОшибки);

iRust

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

Юрий пишет:

Цитата
Ошибка инициализации модуля: Документ._УПР_КорректировкаВыпуска.МодульМенеджера….

Ошибка начала появляться случайно не после обновления конфигурации?
Откройте Администрирование > Печатные формы, отчеты и обработки > Расширения и посмотрите, что у вас в указано в списке установленных расширений.

Vladko

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

Юрий,у вас самостоятельно разработанный документ УПР_КорректировкаВыпуска. Он был разработан для прошлых релизов бухгалтерии. Сейчас вы обновили бухгалтерию, процедуры там тоже обновились, а в самописном документе у вас эти процедуры вызываются по-старому. Надо дорабатывать ваш документ программисту.

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

Содержание

  • Ошибка в доработанном программном коде
  • Ошибка вывода печатной формы
  • Ошибка исполнения кода на Клиенте
      • См. также:
    • Шаг 1. Обновление прошивки
    • Шаг 2. Команда авторизации
    • Шаг 3. Восстановление данных об организации
    • Шаг 4. Перерегистрация без замены ФН
    • Шаг 5. Восстановление NVR
    • Шаг 6. «Ошибка контрольной суммы ОЗУ»
  • Пример кода, вызывающего ошибку:
  • Разбор полётов

Ошибка Переменная не определена в 1С 8.3 указывает на то, что программа не может получить нужную информацию в исполняемом программном коде. Это может быть связано с обновлением или доработкой программы. Если стандартный набор действий при исправлении ошибок не помог:

  • чистка кеша;
  • тестирование и исправление информационной базы;
  • просмотр зарегистрированных ошибок на сайте 1С,

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

БухЭксперт8 подготовил 3 примера получения и исправления ошибки:

  • в доработанном программном коде;
  • при выводе печатной формы;
  • при исполнении кода на Клиенте.

Ошибка в доработанном программном коде

В форму типового отчета Движение товаров программист добавил поле Склад. Список выбора значений в это поле ограничен. При открытии отчета появляется ошибка:

В сообщении об ошибке указано место возникновения ошибки — строка 919 в модуле формы. Для исправления ошибки необходимо выполнить следующие действия:

  1. Нажмите кнопку Подробно в форме сообщения об ошибке.
    В окне Обнаружены ошибки программа укажет:
    • номер неправильной строки кода;
    • исполняемую команду, которая привела к ошибке. Иногда подробной информации в окне Обнаружены ошибки достаточно для понимания причин ее возникновения, но не всегда. В большинстве случаев требуется перейти в место возникновения ошибки и проанализировать используемые в команде данные.
  2. Для перехода в место ошибки нажмите кнопку Конфигуратор.
    В Конфирураторе курсор автоматически установится на строке программного кода с ошибкой. Необходимо проверить используемые командой данные. В данном примере ошибка сигнализирует, что переменной ОсновнойСклад не задано значение: при добавлении в список складов программа не понимает, какой склад требуется добавить.
  3. Исправьте ошибку.
    Укажите нужное значение переменной в программном коде, например:
    • ОсновнойСклад = Справочники.Склады.НайтиПоНаименованию(«Основной склад»);
    • ОсновнойСклад = Справочники.Склады.ОсновнойСклад.
      Синтаксис Справочники.Склады.ОсновнойСклад используется только для предопределенного склада с именем ОсновнойСклад:
  4. Сохраните изменения и обновите информационную базу.
  5. Проверьте работу 1С после исправления ошибки.

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

Ошибка вывода печатной формы

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

В макет документа добавлена область Подвал:

В программном коде дописан вывод данных области Подвал:

После доработки программы при попытке вывода накладной на печать 1С выдает ошибку:

Информация в окне сообщения об ошибке указывает, что в Модуле менеджера документа ПоступлениеТоваровУслуг не определено значение переменной Ответственный. Для исправления ошибки:

  1. Перейдите в Конфигуратор. В Модуле менеджера документа ПоступлениеТоваровУслуг перейдите на строку 4804.
  2. Укажите для вывода в печатную форму поля Ответственный — текущего пользователя, используя специальную команду 1С:
    • Пользователи.ТекущийПользователь().
  3. Сохраните изменения и обновите информационную базу.
  4. Перейдите в пользовательский режим для проверки выполненных изменений.

После исправления программного кода накладная сформируется без ошибки.

Ошибка исполнения кода на Клиенте

С переходом на управляемые формы в Бухгалтерия 3.0 работы программистам прибавилось.

Язык программирования стал сложнее. Часть команд теперь могут выполняться только на стороне клиента — это, условно говоря, компьютер пользователя, который посылает запросы на исполнение операций серверу. Сервер обрабатывает все поступившие запросы и отсылает обратно клиенту результат обработки данных.

Все это привело к тому, что в 1С команды делятся на исполняемые &НаСервере и &НаКлиенте. И при написании программного кода нужно это учитывать, иначе программа не сможет выполнить заданную операцию. При работе с переменными при написании программного кода важно понимать:

  • &НаКлиенте — переменные существуют только на время клиентского вызова;
  • &НаСервере— переменные существуют только на время серверного вызова.

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

При доработке программного кода программист использовал операцию получения данных склада &НаКлиенте в процедуре ПриОткрытии.

При сохранении изменений 1С сообщила об ошибке Переменная не определена (Справочники) при определении значения склада:

  • «?»Справочники.Склады.НайтиПоКоду(«»00-000002»).

Ошибка связана с тем, что данная операция исполняется только на сервере, т. е. &НаСервере. И несмотря на то, что сама команда исполнения корректна, ошибка будет формироваться до тех пор, пока ее не перенесут в область команд исполнения &НаСервере, например так:

Теперь сохранение изменений пройдет без ошибки.

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

См. также:

  • Большое количество забивается решеткой
  • Печатная форма недоступна 1С 8.3 при вызове внешней печатной формы
  • Значение поля номер не уникально 1С 8.3: как исправить
  • У пользователя недостаточно прав на исполнение операции

Если Вы еще не подписаны:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

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

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Здравствуйте!
Самописная конфигурация на платформе 1С:Предприятие 8.3 (8.3.3.641).
Режим Управляемое приложение.
Перенес из модуля формы функцию в ОбщиеМодули и общий модуль перестал инициализироваться.
У модуля ОбщиеМеханизмыКлиента указаны свойства: Клиент (управляемое приложение), Сервер, Вызов сервера.
Выдает ошибку при попытке вызова любой функции модуля:

Цитата Ошибка инициализации модуля: ОбщийМодуль.ОбщиеМеханизмыКлиента.Модуль
по причине:
{ОбщийМодуль.ОбщиеМеханизмыКлиента.Модуль(246,17)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос;
Функция, которая перенесена:
// *************************************************
// * Возвращает остаток на счете на момент времени *
// *************************************************
Функция ПолучитьОстаток(
пСчет, // «Счет», по которому определяется остаток
Знач пМоментВремени = Неопределено // «Момент времени», на который возвращается остаток
) Экспорт
// ======================================
// = Сформировать значения по умолчанию =
// ======================================
Если пМоментВремени = Неопределено Тогда
пМоментВремени = ТекущаяДата();
КонецЕсли;
// ============================================
// = Получить остаток по регистру бухгалтерии =
// ============================================
// Сформировать условие по отобору «Счета»
Отбор = Новый Структура(«Счет», пСчет);
// Выбрать данные
Выборка = РегистрыБухгалтерии.Фин_Отч_ЖурналОпераций.Остатки(пМоментВремени, , Отбор);
// Получить значение остатка
Остаток = Выборка.Итог(«СуммаОстатокДт») — Выборка.Итог(«СуммаОстатокКт»);
// =====================================
// = Добавить «Начальный баланс» счета =
// =====================================

// ——————————-
// — Получить «Начальный баланс» —
// ——————————-
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| НИС_Учт_Сч_Счета.НачальныйБаланс
|ИЗ
| Справочник.НИС_Учт_Сч_Счета КАК НИС_Учт_Сч_Счета
|ГДЕ
| НИС_Учт_Сч_Счета.Счет = &Счет»;
Запрос.УстановитьПараметр(«Счет», пСчет);
РезультатЗапроса = Запрос.Выполнить();

Ошибка означает, что данные в ФН и на фискальной плате не совпадают.
Может произойти при: замене платы FM15/16, при подаче команды авторизации на зарегистрированной кассе, и при сбое электропитания на кассе во время работы (т.к. на фискальной плате стоит энергозависимая память).

Обязательно используйте последнюю версию Fito.
Скачать ее можно тут: «Страница загрузок»

Точно ли эта инструкция мне нужна? (раскрыть)

Да, если:

  • На уже зарегистрированной кассе была заменена фискальная плата FM15/16
  • На уже зарегистрированную кассу была подана команда «Авторизация» или «Тех. Обнуление»
  • На чеке диагностики печатается «Ошибка модуля ФН»: значит, в данных фискальной платы нет информации по организации
  • В Fito стоит галочка «Фатальная ошибка ФН» или «Нефискальный режим»: обязательно проверьте серийный номер на чеке диагностики — совпадает ли он с номером на шильде

Инструкция:

  • Обязательно обновите прошивку!
  • На чеке диагностики заводской номер не совпадает с номером на шильдике
  • Восстановите данные по организации в памяти фискальной платы
  • Восстановите NVR (Счетчики нарастающих итогов)
  • «Ошибка контрольной суммы ОЗУ» — как исправить?

Шаг 1. Обновление прошивки

Проверьте версию прошивки на плате (как это сделать?). Если версия не является последней (последнюю можно найти тут: «Страница загрузок») — обновите ее.

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

Шаг 2. Команда авторизации

Команда Авторизации сотрёт всё содержимое памяти Вики Принт включая лицензии Дримкас Ключ. Лицензию нужно будет активировать повторно.

Fito → «Сервис» → «Авторизация» → укажите Модель ККТ из списка и последние 6 цифр заводского номера с шильдика → «Выполнить»

Шаг 3. Восстановление данных об организации

Fito → «Сервис» → «Проверка записи регистрации» → «Считать» → сохраните файл в любое место, он нам не нужен.

У вас нет такого пункта в Fito (раскрыть)

В Fito по умолчанию скрыты пункты меню, с помощью которых можно напрямую работать с данными в фискальной памяти.

Закройте Fito и скопируйте файл Fito.ini в папку с утилитой.
На кассах Вики путь к Fito следующий:

Либо можно добавить параметры вручную: откройте текстовым редактором файл Fito.ini и в раздел добавьте строку:
ServAccess=767 (измените цифры на 767, если пункт ServAccess уже есть).

Укажите следующие значения в полях этой таблицы (скриншот ниже):

  1. Серийный номер = если не совпадает с номером на шильде, вернитесь к шагу 2
  2. Регистрационный номер, ИНН, номер ФН — впишите соотв. значения
  3. Версия = 1
  4. Тип ФФД = 2 (если регистрация была по ФФД 1.05) или 1 (если по ФФД 1.0)

Внесли всё?

Нажмите «Записать» и перезагрузите ККТ из режима «Сервис» → «Рестарт ККТ».

Если после перезагрузки на чеке диагностики будет ошибка «Расхождение данных в ФН и NVR» — следуйте инструкции дальше.

Если же выйдет «Ошибка ФН» — значит, третий шаг выполнен некорректно. Вы где-то ошиблись или не сохранили данные. Начните заново с шага №3.

Шаг 4. Перерегистрация без замены ФН

Теперь нужно сделать перерегистрацию, установив СНО и режим работы.

Для начала проверим, что в ФН смена закрыта (ведь на открытой смене перерегистрацию сделать нельзя). Fito → «Тестирование» → «Ручной ввод команд» → Номер команды = 78; параметр 1 = 6 → «Выполнить» → «Детализация ответа». Если смена закрыта, то статус смены будет = 0, открыта = 1.

Если смена открыта в ФН, то нужно в на плате ее тоже открыть, что бы потом закрыть и на плате, и в ФН. Сначала откройте смену, потом закройте.

Как открыть и закрыть смену через Fito? (раскрыть)

Открыть смену: Fito → «Тестирование» → «Ручной ввод команды» → Номер команды = 23, Параметр 1 = имя кассира → «Выполнить»

Закрыть смену: Fito → «Тестирование» → «Печать отчетов» → «Печать z-отчета» → Имя оператора = имя кассира → «Выполнить»

Проверьте настройки отправки чеков:
Fito → «Программирование настроек сети» → «Считать» → заполните URL и порт сервера ОФД → «Установить». Настройки сети можно не заполнять — служба ComProxy сама возьмет их из текущего подключения к интернету.

Теперь можно сделать перерегистрацию:

Fito → «Сервис» → «Регистрация/Снятие с учета» → «Перерегистрация без замены ФН» → заполните все данные в полях (реквизиты организации, данные по ОФД, СНО и режимы работы) → «Выполнить»

Обязательно укажите чуть-чуть другой адрес или наименование организации (например, добавьте лишний пробел). Это нужно, чтобы у перерегистрации была причина. Если делать перерегистрацию с теми же самыми параметрами, на ФФД 1.05 выйдет ошибка.

Шаг 5. Восстановление NVR

Текст ошибки: «РАСХОЖДЕНИЕ НОМЕРОВ СМЕН В ФН И NVR».

Fito → «Сервис» → «Проверка NVR» → «Считать» → сохраните файл в любое место, он нам не нужен → «Умолчание» → заполните поля нарастающий итогов → «Записать»

Нарастающие итоги заполняются без разделителя между рублями и копейками. Например, сумма 28 884.00 записывается как 2888400.
Значения нарастающих итогов нужно взять из последнего z-отчета (если смена открыта, для корректности этих значений к этим цифрам нужно добавить то, что было набито на последней открытой смене — данные можно посмотреть в ОФД или распечатать из ФН).

У вас нет такого пункта в Fito (раскрыть)

В Fito по умолчанию скрыты пункты меню, с помощью которых можно напрямую работать с данными в фискальной памяти.

Закройте Fito и скопируйте файл Fito.ini в папку с утилитой.
На кассах Вики путь к Fito следующий:

Либо можно добавить параметры вручную: откройте текстовым редактором файл Fito.ini и в раздел добавьте строку:
ServAccess=767 (измените цифры на 767, если пункт ServAccess уже есть).

Шаг 6. «Ошибка контрольной суммы ОЗУ»

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

Откройте и закройте смену, ошибка пропадет. Сделать это можно через кассовое ПО или через Fito.

Как открыть и закрыть смену через Fito? (раскрыть)

Открыть смену: Fito → «Тестирование» → «Ручной ввод команды» → Номер команды = 23, Параметр 1 = имя кассира → «Выполнить»

Закрыть смену: Fito → «Тестирование» → «Печать отчетов» → «Печать z-отчета» → Имя оператора = имя кассира → «Выполнить»

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

Пример кода, вызывающего ошибку:

Процедура ПроверитьТэгиИПоставщиков() Для каждого СтрокаТ из тПоставщиков Цикл Если ПустаяСтрока(СтрокаТ.TAG) или ЗначениеЗаполнено(СтрокаТ.Поставщик) = Ложь Тогда СтрокаТ.Создавать = Ложь; Сообщить(«Не заполнены данные по поставщику «+СтрокаТ.TAG+»!»); КонецЕсли; КонецЦикла; КонецПроцедуры; Процедура ИмяЛокальногоОтветаОткрытие(Элемент, СтандартнаяОбработка) Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяЛокальногоОтвета); Текст.Показать(«Файл ответа»); КонецПроцедуры

Разбор полётов

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

Ошибка в этой строке:

КонецПроцедуры;

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

1С считает эту «;» частью кода тела модуля, а процедуры/функции в нем недопустимы

Решение простое:

Найти и убрать точку с запятой (необязательно что это будет последняя функция или процедура)

Переменная
не определена в 1С

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

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

Переменные указываются в структуре кода с использованием знака равенства (=) или перечисляются после ключевого слова Перем в одноименном разделе модулей, кроме общего и модуля сеанса.

Тип переменной заранее не задается, а определяется после присвоения какого-либо значения. В памяти они не хранятся, а создаются в момент исполнения кода и стираются с завершением операций. Различают 3 вида переменных:

  • глобальные,
  • локальные,
  • экспортные.

Глобальные переменные

Объявляются в верхней части модулей до процедур/функций в разделе объявления переменных. Имена перечисляются после ключевого слова Перем через запятую. Присвоение значений происходит в процессе выполнения кода, изначально имеет тип [Неопределено].

Глобальные переменные можно использовать в модулях:

  • обычного приложения;
  • управляемого приложения;
  • команды;
  • внешнего соединения;
  • менеджера;
  • формы;
  • объекта;
  • набора записей.

В модулях формы и команды для каждой процедуры/функции определяется место исполнения: на сервере (&НаСервере, &НаСервереБезКонтекста) или на клиенте (&НаКлиенте), при этом режим работы программы (серверный или файловый) не имеет значения. Объявленные глобальные переменные в этих модулях во время выполнения кода:

  • &НаКлиенте — передаются от одной процедуры к другой с сохранением значения. При переводе исполнения кода на сервер переменные продолжают существовать на стороне клиента со значениями, которые имели до передачи на сервер;

  • &НаСервере — уничтожаются по окончании выполнения процедур/функций на сервере, обратная передача переменной на клиент не производится. При повторном обращении к серверу создается вновь со значением по умолчанию [Неопределено].

Локальные переменные

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

Экспортные переменные

В разделе переменных после имени имеют ключевое слово Экспорт, которое позволяет экспортировать их в любое место программы через обращение к модулю-родителю.

Ошибка «Переменная не определена» в 1С 8.3

Когда программа 1С не может найти переменную, пользователю выдается сообщение «Переменная не определена ([Имя_переменной])».

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

  • очистка кэш-памяти программы 1С;
  • регистрация ошибки на сайте поддержки 1С, загрузка исправленных версий конфигурации;
  • тестирование и исправление сбоев в 1С через одноименную команду в конфигураторе.

Если ни один из вышеуказанных способов не дал результата, то для решения проблемы с ошибкой «Переменная не определена» потребуется разобрать в программном коде и при необходимости внести правки.

Кроме текста ошибки в окне указано место ее возникновения:

  • Документ — вид объекта метаданных;
  • РеализацияТоваровУслуг — имя объекта;
  • Форма. ФормаДокументаТовары — модуль возникновения сбоя;
  • Форма(299,42) — номер строки в коде модуля и порядковый номер символа в строке.

Для перехода в конфигуратор нажмите Подробно — Конфигуратор. Если кнопки Подробно нет в окне:

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

В конфигураторе откроется модуль, в котором не удалось определить переменную, а курсор автоматически переместится на ее имя.

Способы устранения ошибки

Если переменная не определена в процедуре/функции, исполняемой на стороне клиента (&НаКлиенте):

1. Проверьте код процедуры/функции до места, где идет обращение к переменной: возможно, произошла опечатка в имени.

2. Просмотрите раздел объявления переменных в начале модуля: если есть сходные по наименованию переменные, исправьте описку в процедуре/функции.

3. До момента использования в процедуре/функции локальной переменной не было присвоено никакого значения, и в памяти 1С ее еще не существует.

С глобальными переменными такие случаи исключены, т. к. они создаются сразу после объявления в начале модуля со значением [Неопределено] и могут подставляться в выражения без предварительной записи в них значения.
Для устранения ошибки потребуется вставить в код строку с присвоением переменной значения. По негласному соглашению программисты 1С при написании исполняемого кода дают имена объектам, реквизитам, процедурам, переменным и т. д., созвучные с записываемой в них информацией или выполняемыми действиями. Обратите внимание:

  • когда появляется окно с ошибкой «Переменная не определена»: открытие формы, нажатие на кнопку, выбор из списка и т. д.? В примере окно с сообщением об ошибке выдается при попытке изменить дату документа;
  • на наименование процедуры/функции, которая содержит строку кода с ошибкой —ДатаПриИзменении, содержит алгоритм действий при смене даты;
  • на имя ненайденной переменной — ТекДатаДокумента, говорит о значении с типом Дата.
    Проанализировав эту информацию, определите, какое значение должно быть в переменной. В представленном коде, возможно, программист имел в виду дату документа до изменения.
    После определения данных, которые должна содержать переменная, в процедуру/функцию перед местом сбоя дописывается строка кода с присвоением переменной требуемого значения.

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

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

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

Когда ошибку «Переменная не определена» 1С 8.3 выдает при выполнении серверной процедуры/функции (&НаСервере, &НаСервереБезКонтекста):

  1. Не присвоено значение локальной переменной, действия аналогичны использованию на клиенте с поправкой на место исполнения.
    Глобальные переменные на сервере создаются автоматически при выполнении процедур/функций с пометкой &НаСервере или &НаСервереБезКонтекста, так же, как на клиенте им присваивается начальное значение [Неопределено]. По завершении всех операций на сервере переменная уничтожается. При последующих вызовах сервера глобальная переменная примет начальное значение [Неопределено]. Последовательность процедур/функций в модулях не влияет на порядок их выполнения, переход с клиента на сервер и обратно определяется программным кодом.
  2. Переменная объявлена на стороне клиента, а используется на сервере, где ее не существует. Если переменная должна содержать значение, полученное в клиентской процедуре/функции, то можно передать ее на сервер через параметр.
  3. Глобальная переменная не объявлена — добавьте в начале модуля переменную для сервера.
  4. При обращении к базе данных неверно указаны имена объектов, параметров, из-за чего программа ошибочно приняла их за переменные — исправьте опечатку.

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

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

Обслуживание

Заказать консультацию

По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.

Понравилась статья? Поделить с друзьями:
  • Ошибка инициализации дбд при запуске
  • Ошибка инициализации игры gta 5
  • Ошибка инициализации модуля модуль сеанса
  • Ошибка инициализации гта 5 как решить
  • Ошибка инициализации игры 135dec40 984сба38 00000077