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

Доброго дня!

1С:Предприятие 8.3 (8.3.9.2170), Управление производственным предприятием, редакция 1.3 (1.3.90.1). Формы обычные.

Есть кусок кода (хранится в справочнике):

Если Не ГМЗ_СогласованиеДокументов.ТребоватьПроверкуРасценкиЗаказногоЛимита(ПараметрыВыполненияКода.СсылкаДокумента) Тогда
    // Два ЕСЛИ, чтобы сократить длину строки

    Если (ПараметрыВыполненияКода.НовоеСостояниеДокумента = Перечисления.ГМЗ_СостоянияДокументов.Согласован) Тогда
        Если (ПараметрыВыполненияКода.НовоеСостояниеДокумента = Перечисления.ГМЗ_СостоянияДокументов.Утвержден) Тогда
            прм_Запрос = Новый Запрос;
            прм_Запрос.Текст = 
                "ВЫБРАТЬ РАЗЛИЧНЫЕ
                |    ГМЗ_УстановкаЦенМатериаловЛимитов.Ссылка
                |ИЗ
                |    Документ.ГМЗ_УстановкаЦенМатериаловЛимитов КАК ГМЗ_УстановкаЦенМатериаловЛимитов
                |ГДЕ
                |    ГМЗ_УстановкаЦенМатериаловЛимитов.Проведен = ИСТИНА
                |    И ГМЗ_УстановкаЦенМатериаловЛимитов.ДокументЛимитов = &ДокументЛимитов";
            прм_Запрос.УстановитьПараметр("ДокументЛимитов", ПараметрыВыполненияКода.СсылкаДокумента);
            прм_РезультатЗапроса = прм_Запрос.Выполнить();
            прм_Выб = прм_РезультатЗапроса.Выбрать();
            прм_НовоеСостояние = Перечисления.ГМЗ_СостоянияДокументов.Утвержден;
            прм_Комментарий = "Утвержден при утверждении документа лимита";
            прм_РезОперации = "";
            Пока прм_Выб.Следующий() Цикл
                прм_СтрК = Новый Структура("Состояние, Комментарий", прм_НовоеСостояние, прм_Комментарий);
                прм_Рез = ГМЗ_СогласованиеДокументов.УстановитьНовоеСостояниеДокумента(прм_Выб.Ссылка, прм_СтрК);
                прм_РезОперации=?(прм_РезОперации = "","",прм_РезОперации +Символы.ПС+"Утверждение "+СокрЛП(прм_Выб.Ссылка)+":"+?(прм_Рез = "", "ОК", "ОШИБКА!!! " + прм_Рез));
            КонецЦикла;
            ПараметрыВыполненияКода.СтатусОбработкиДокумента = прм_РезОперации;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

В модуле формы обработки вызываю

ПараметрыВыполненияКода = Новый Структура("СсылкаДокумента, СсылкаПроверяемогоЭтапа, НовоеСостояниеДокумента, СтатусОбработкиДокумента");
ПараметрыВыполненияКода.СсылкаДокумента = СтрокаТабличнойЧасти.Ссылка; 
ПараметрыВыполненияКода.СсылкаПроверяемогоЭтапа = НовыйЭтап; 
ПараметрыВыполненияКода.НовоеСостояниеДокумента = НовоеСостояниеТекущегоДокумента;
ПараметрыВыполненияКода.СтатусОбработкиДокумента = ""; 
Выполнить(КодПостОбработки);



Вылезает вот такая ошибка: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(37,96)}: Ожидается символ ‘)’

Несмотря на это, при вставке кода напрямую в модуль формы (вместо Выполнить(КодПостОбработки)) все работает!

Я пытался уменьшить длину строк текста, все тщетно. Может, есть какие-то ограничения платформы?

Спасибо.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также:

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

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

Карточка публикации

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Вы можете задать еще вопросов

Доступ к форме «Задать вопрос» возможен только при оформлении полной подписки на БухЭксперт8

Нажимая кнопку «Задать вопрос», я соглашаюсь с
Регламентом БухЭксперт8.ру >>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источники:

Https://www. koderline. ru/expert/instruktsii/article-peremennaya-ne-opredelena-v-1s/

Https://buhexpert8.ru/obuchenie-1s/oshibki-v-1s/peremennaya-ne-opredelena-v-1s-8-3.html

Https://profbuh8.ru/2020/12/peremennaya-ne-opredelena-v-1s-8-3/

Ошибка при выгрузке из УТ 10.3 в БП 2.0

Ситуация такая УТ нетиповая, БП — типовая
делаю выгрузку через УниверсальныйОбменXML по стандартным привилам УТ с БП 2.0
и при нажатии Выгрузить данные вылазит ошибка:

Ошибка в обработчике события ПередВыгрузкойДанных (конвертация)
Обработчик = ПередВыгрузкойДанных (конвертация)
ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML(12582)
КодСообщения = 62

сам модуль перед выгрузкой вот:
Параметры.Вставить(«ВалютаРегламентированногоУчета», Константы.ВалютаРегламентированногоУчета.Получить());
Параметры.Вставить(«ВалютаУправленческогоУчета», Константы.ВалютаУправленческогоУчета.Получить());

Если НЕ Параметры.ПервыйОбмен Тогда

Параметры.Вставить(«ДатаНачалаВыгрузкиДокументов»,УзелДляОбмена.ДатаНачалаВыгрузкиДокументов);
Параметры.Вставить(«ПередаватьТолькоДокументыОтраженныеВБухгалтерскомУчете»,УзелДляОбмена.ПередаватьТолькоДокументыОтраженныеВБухгалтерскомУчете);

Параметры.Вставить(«ИспользоватьФильтрПоОрганизациям»,?(УзелДляОбмена.Организации.Количество()>0,Истина,Ложь));
Параметры.Вставить(«ИспользоватьФильтрПоСкладам»,?(УзелДляОбмена.Склады.Количество()>0,Истина,Ложь));
Параметры.Вставить(«ИспользоватьФильтрПоПодразделениям»,?(УзелДляОбмена.Подразделения.Количество()>0,Истина,Ложь));

Если Параметры.ИспользоватьФильтрПоОрганизациям Тогда

Параметры.Вставить(«МассивОрганизаций»,УзелДляОбмена.Организации.Выгрузить().ВыгрузитьКолонку(«Организация»));

КонецЕсли;

Если Параметры.ИспользоватьФильтрПоСкладам Тогда

Параметры.Вставить(«МассивСкладов»,УзелДляОбмена.Склады.Выгрузить().ВыгрузитьКолонку(«Склад»));

КонецЕсли;

Если Параметры.ИспользоватьФильтрПоПодразделениям Тогда

Параметры.Вставить(«МассивПодразделений»,УзелДляОбмена.Подразделения.Выгрузить().ВыгрузитьКолонку(«Подразделение»));

КонецЕсли;

МассивТиповДокументов = Новый Массив;

Для каждого МетаДокумент Из Метаданные.Документы цикл

МассивТиповДокументов.Добавить(Тип(«ДокументСсылка.» + МетаДокумент.Имя));
МассивТиповДокументов.Добавить(Тип(«ДокументОбъект.» + МетаДокумент.Имя));

КонецЦикла;

ОписаниеТиповДокументы = Новый ОписаниеТипов(МассивТиповДокументов);
Параметры.Вставить(«ОписаниеТиповДокументы»,ОписаниеТиповДокументы);

МассивТиповДокументов.Очистить();
МассивТиповДокументов.Добавить(Тип(«ДокументСсылка.СчетФактураВыданный»));
МассивТиповДокументов.Добавить(Тип(«ДокументСсылка.СчетФактураПолученный»));
МассивТиповДокументов.Добавить(Тип(«ДокументОбъект.СчетФактураПолученный»));
МассивТиповДокументов.Добавить(Тип(«ДокументОбъект.СчетФактураВыданный»));

ОписаниеТиповДокументы = Новый ОписаниеТипов(МассивТиповДокументов);

Параметры.Вставить(«ОписаниеТиповДокументыСФ»,ОписаниеТиповДокументы);

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

Как решить такую проблему?

Доброго дня!

1С:Предприятие 8.3 (8.3.9.2170), Управление производственным предприятием, редакция 1.3 (1.3.90.1). Формы обычные.

Есть кусок кода (хранится в справочнике):

Если Не ГМЗ_СогласованиеДокументов.ТребоватьПроверкуРасценкиЗаказногоЛимита(ПараметрыВыполненияКода.СсылкаДокумента) Тогда
    // Два ЕСЛИ, чтобы сократить длину строки

    Если (ПараметрыВыполненияКода.НовоеСостояниеДокумента = Перечисления.ГМЗ_СостоянияДокументов.Согласован) Тогда
        Если (ПараметрыВыполненияКода.НовоеСостояниеДокумента = Перечисления.ГМЗ_СостоянияДокументов.Утвержден) Тогда
            прм_Запрос = Новый Запрос;
            прм_Запрос.Текст = 
                "ВЫБРАТЬ РАЗЛИЧНЫЕ
                |    ГМЗ_УстановкаЦенМатериаловЛимитов.Ссылка
                |ИЗ
                |    Документ.ГМЗ_УстановкаЦенМатериаловЛимитов КАК ГМЗ_УстановкаЦенМатериаловЛимитов
                |ГДЕ
                |    ГМЗ_УстановкаЦенМатериаловЛимитов.Проведен = ИСТИНА
                |    И ГМЗ_УстановкаЦенМатериаловЛимитов.ДокументЛимитов = &ДокументЛимитов";
            прм_Запрос.УстановитьПараметр("ДокументЛимитов", ПараметрыВыполненияКода.СсылкаДокумента);
            прм_РезультатЗапроса = прм_Запрос.Выполнить();
            прм_Выб = прм_РезультатЗапроса.Выбрать();
            прм_НовоеСостояние = Перечисления.ГМЗ_СостоянияДокументов.Утвержден;
            прм_Комментарий = "Утвержден при утверждении документа лимита";
            прм_РезОперации = "";
            Пока прм_Выб.Следующий() Цикл
                прм_СтрК = Новый Структура("Состояние, Комментарий", прм_НовоеСостояние, прм_Комментарий);
                прм_Рез = ГМЗ_СогласованиеДокументов.УстановитьНовоеСостояниеДокумента(прм_Выб.Ссылка, прм_СтрК);
                прм_РезОперации=?(прм_РезОперации = "","",прм_РезОперации +Символы.ПС+"Утверждение "+СокрЛП(прм_Выб.Ссылка)+":"+?(прм_Рез = "", "ОК", "ОШИБКА!!! " + прм_Рез));
            КонецЦикла;
            ПараметрыВыполненияКода.СтатусОбработкиДокумента = прм_РезОперации;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

В модуле формы обработки вызываю

ПараметрыВыполненияКода = Новый Структура("СсылкаДокумента, СсылкаПроверяемогоЭтапа, НовоеСостояниеДокумента, СтатусОбработкиДокумента");
ПараметрыВыполненияКода.СсылкаДокумента = СтрокаТабличнойЧасти.Ссылка; 
ПараметрыВыполненияКода.СсылкаПроверяемогоЭтапа = НовыйЭтап; 
ПараметрыВыполненияКода.НовоеСостояниеДокумента = НовоеСостояниеТекущегоДокумента;
ПараметрыВыполненияКода.СтатусОбработкиДокумента = ""; 
Выполнить(КодПостОбработки);

Вылезает вот такая ошибка: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(37,96)}: Ожидается символ ')'

Несмотря на это, при вставке кода напрямую в модуль формы (вместо Выполнить(КодПостОбработки)) все работает!

Я пытался уменьшить длину строк текста, все тщетно. Может, есть какие-то ограничения платформы?

Спасибо.

Доброе утро,у меня 1с 8,2 2.0.63.5
Набираю шаблон типовой операции,программа выдает ошибку:
Формула содержания операции:  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,20)}: Ожидается символ ‘;’
Формула суммы операции:  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,17)}: Неправильная константа типа Число
Что делать? Я не программист,может кто обычным птичьим языком объяснит?Спасибо.

Добрый день!

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

Цитата (оксана пытли):Доброе утро,у меня 1с 8,2 2.0.63.5
Набираю шаблон типовой операции,программа выдает ошибку:
Формула содержания операции:  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,20)}: Ожидается символ ‘;’
 

Программа состоит из операций — действий, каждая операция имеет свой синтаксис — правила написания, чтобы компьютер мог понять. Операция 1С должна заканчиваться точкой с запятой «;». Вы забыли этот знак поставить.

Цитата (оксана пытли):Формула суммы операции:  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,17)}: Неправильная константа типа Число
Что делать? Я не программист,может кто обычным птичьим языком объяснит? Спасибо.

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

Заполнить и подать уведомление об исчисленных суммах налогов и взносов

Спасибо большое,надеюсь,в Новом году я буду задавать более сложные вопросы,ну,или сама находить на них ответы!!!!

Я программированием 1С не владею, поэтому использовал рекомендации из статьи «Загрузка данных в 1С из Excel. Часть 2. Загрузка справочника номенклатуры в 1С:Управление торговлей 8 из прайс-листа Excel» http://www.online-ufa.ru/conte… el_part_2/, где загрузка идет через типовую обработку «ЗагрузкаДанныхИзТабличногоДокумента.epf», которая приведена на диске ИТС.

Здесь сначала загружаются в номенклатуру названия и артикулы товаров, а на следующем этапе для каждого товара, найденного по артикулу, задаются «Единица для отчетов» и «Единица хранения остатков».

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

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", ТекущиеДанные["Артикул"]); 
БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(796); 
ТекСпр=Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту("ЕдиницаПоКлассификатору";,БазоваяЕдиницаИзмерения,,СсылкаНоменклатуры); 
Если ТекСпр.Пустая() Тогда НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); 
НайденнаяЕдиницаОбъект.Наименование = СокрЛП(БазоваяЕдиницаИзмерения); 
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = БазоваяЕдиницаИзмерения; 
НайденнаяЕдиницаОбъект.Коэффициент = 1; 
НайденнаяЕдиницаОбъект.Владелец = СсылкаНоменклатуры; 
Попытка НайденнаяЕдиницаОбъект.Записать(); 
Результат = НайденнаяЕдиницаОбъект.Ссылка; 
Исключение Сообщить("Не удалось записать"); 
КонецПопытки; 
Иначе Результат =ТекСпр.Ссылка; 
КонецЕсли;

При исполнении получаю диангостическое сообщение:

Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(3,79)}: Ожидается символ ‘)’

Что здесь неверно и как исправить?

Ошибка при выгрузке из УТ 10.3 в БП 2.0

Ситуация такая УТ нетиповая, БП — типовая
делаю выгрузку через УниверсальныйОбменXML по стандартным привилам УТ с БП 2.0
и при нажатии Выгрузить данные вылазит ошибка:

Ошибка в обработчике события ПередВыгрузкойДанных (конвертация)
Обработчик = ПередВыгрузкойДанных (конвертация)
ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML(12582)
КодСообщения = 62

сам модуль перед выгрузкой вот:
Параметры.Вставить(«ВалютаРегламентированногоУчета», Константы.ВалютаРегламентированногоУчета.Получить());
Параметры.Вставить(«ВалютаУправленческогоУчета», Константы.ВалютаУправленческогоУчета.Получить());

Если НЕ Параметры.ПервыйОбмен Тогда

Параметры.Вставить(«ДатаНачалаВыгрузкиДокументов»,УзелДляОбмена.ДатаНачалаВыгрузкиДокументов);
Параметры.Вставить(«ПередаватьТолькоДокументыОтраженныеВБухгалтерскомУчете»,УзелДляОбмена.ПередаватьТолькоДокументыОтраженныеВБухгалтерскомУчете);

Параметры.Вставить(«ИспользоватьФильтрПоОрганизациям»,?(УзелДляОбмена.Организации.Количество()>0,Истина,Ложь));
Параметры.Вставить(«ИспользоватьФильтрПоСкладам»,?(УзелДляОбмена.Склады.Количество()>0,Истина,Ложь));
Параметры.Вставить(«ИспользоватьФильтрПоПодразделениям»,?(УзелДляОбмена.Подразделения.Количество()>0,Истина,Ложь));

Если Параметры.ИспользоватьФильтрПоОрганизациям Тогда

Параметры.Вставить(«МассивОрганизаций»,УзелДляОбмена.Организации.Выгрузить().ВыгрузитьКолонку(«Организация»));

КонецЕсли;

Если Параметры.ИспользоватьФильтрПоСкладам Тогда

Параметры.Вставить(«МассивСкладов»,УзелДляОбмена.Склады.Выгрузить().ВыгрузитьКолонку(«Склад»));

КонецЕсли;

Если Параметры.ИспользоватьФильтрПоПодразделениям Тогда

Параметры.Вставить(«МассивПодразделений»,УзелДляОбмена.Подразделения.Выгрузить().ВыгрузитьКолонку(«Подразделение»));

КонецЕсли;

МассивТиповДокументов = Новый Массив;

Для каждого МетаДокумент Из Метаданные.Документы цикл

МассивТиповДокументов.Добавить(Тип(«ДокументСсылка.» + МетаДокумент.Имя));
МассивТиповДокументов.Добавить(Тип(«ДокументОбъект.» + МетаДокумент.Имя));

КонецЦикла;

ОписаниеТиповДокументы = Новый ОписаниеТипов(МассивТиповДокументов);
Параметры.Вставить(«ОписаниеТиповДокументы»,ОписаниеТиповДокументы);

МассивТиповДокументов.Очистить();
МассивТиповДокументов.Добавить(Тип(«ДокументСсылка.СчетФактураВыданный»));
МассивТиповДокументов.Добавить(Тип(«ДокументСсылка.СчетФактураПолученный»));
МассивТиповДокументов.Добавить(Тип(«ДокументОбъект.СчетФактураПолученный»));
МассивТиповДокументов.Добавить(Тип(«ДокументОбъект.СчетФактураВыданный»));

ОписаниеТиповДокументы = Новый ОписаниеТипов(МассивТиповДокументов);

Параметры.Вставить(«ОписаниеТиповДокументыСФ»,ОписаниеТиповДокументы);

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

Как решить такую проблему?

  1. 12.05.2017, 17:30

    #1

    Merya вне форума


    Гость форума


    По умолчанию Проблема с загрузкой данных в 1С 8.3 в формате XML Помогите!

    Через универсальный обмен данными в формате XML(2.1.8) пытаюсь загрузить данные с сайта бизнес ру Выдает ошибку

    Ошибка в обработчике события ПередЗагрузкойДанных (конвертация)
    Обработчик = ПередЗагрузкойДанных (конвертация)
    ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(4,47)}: Переменная не определена (УправлениеПользователями)
    ПозицияМодуля = Обработка.УниверсальныйОб� �енДаннымиXML.МодульОбъекта( 12497)
    КодСообщения = 22

    Я с 1 С 8.3. только начинаю работать, не могу понять причину. Помогите, пожалуйста!!!


  2. 13.05.2017, 12:07

    #2

    avm3110 вне форума


    Гордость форума PRO


    По умолчанию Re: Проблема с загрузкой данных в 1С 8.3 в формате XML Помогите!

    Похоже у вас в правилах используется конфигурация «источник» отличная от той, что используется сейчас.

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


September 22 2013, 10:43

Category:

  • IT
  • Cancel

exchСуть задачи: иногда возникает необходимость выгрузить данные из, например, 1С:Бухгалтерии предприятия в 1С:Управление торговлей, но не по узлам обмена распределенной информационной базы (РИБ), а через обработку Универсальный обмен данными XML. Это, например, может возникнуть когда Вы создаете новую базу УТ, и хотите импортировать справочник из БП в УТ, не настраивая двусторонний обмен данными или собственные правила обмена, или бухгалтеру привычнее и удобнее выгружать данные за выбранный период, а не по принципу регистрации обмена.

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

Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(4,52)}: Переменная не определена (УзелДляОбмена)

Вся проблема в том, что при выгрузке через РИБ, в контексте выполнения модулей правил обмена доступен узел обмена, в переменной «УзелДляОбмена», в реквизитах которого содержатся различные настройки. Собственно, пути решения два:

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

2. Дать доступ к вышеуказанной переменной.

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

1. Выгрузим правила обмена. Для этого, откроем конфигуратор, найдем в ветке ОбщиеМакеты макет, в данном случае, с названием ПравилаОбмена_БП_УТ, откроем его, и через меню «Файл/Сохранить как», сохраним с расширением .xml

2. Сохраним обработку УниверсальныйОбменДаннымиXML в файл. Найдем ее в дереве конфигурации, щелкнем правой кнопкой мыши, выберем «Сохранить как внешнюю обработку/отчет».

3. Откроем данную обработку (из файла), и добавим в нее реквизит УзелДляОбмена, тип данных, в нашем случае, «ПланОбменаСсылка.ОбменУправлениеТорговлейБухгалтерияКОРП».

4. В версии конфигурации Бухгалтерия предприятия, 2.0.37.12 (возможно, и в более ранних), нужно в модуль объекта данной обработки (в самый конец) вставить две строки, указанные ниже, иначе мы получим еще одно безрадостное сообщение типа «Переменная не определена»:

    мИнформацияОПользовательскихПоляхПоискаПриВыгрузкеДанных = Новый Соответствие();

мИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие();

5. Сохраняем и открываем обработку в режиме 1С:Предприятие.

6. В реквизите «УзелДляОбмена», который мы добавили, выбираем узел из плана обмена — лучше создать новый, и прописать в нем необходимые условия. К сожалению, в этом месте создается одна небольшая проблема: с этого момента все изменения информационной базы начинают регистрироваться и сохраняться в соответствующих таблицах. В связи с этим, я рекомендую периодически сбрасывать зарегистрированные объекты через Монитор обмена данными (закладка «Дополнительно», кнопка «Подробно», затем «Удалить всю регистрацию»). В прочем, этот процесс можно и автоматизировать, прописав соответствующие действия в обработке обмена, при каждом обмене данными.

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

8. Делаем выгрузку данных.

Соль/сахар по вкусу. Ваши вопросы оставляйте в комментариях.

Оригинал: http://delprog.ru/1s-bystryjj-sposob-ispolzovat-pravil/

Цитата
Сообщение от MrAndrey_ka
Посмотреть сообщение

ты не меняй описанную мною процедуру ВЫПОЛНИТЬ, на функцию ВЫЧИСЛИТЬ

Во первых код который ты дал — содержит ошибку — нет определения для переменной строка. То есть она просто тупо не компилиться. Но поверив тебе и усомнившись в своих знаниях решил все же проверить и сделал так

1C
1
2
3
4
5
6
7
8
9
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Формула = "45*15,26";
    ошибка = "Нет ошибки";
    Попытка  
        Выполнить(Формула);      
    Исключение
        Сообщить("Не удалось вычислить " + Формула+" Причина "+ОписаниеОшибки());  
    КонецПопытки; 
КонецПроцедуры

Не очень отличается от твоего идеала? На выходе увидел — «Не удалось вычислить 45*15,26 Причина {Форма.Форма.Форма(6)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,1)}: Неопознанный оператор»
Внимание, вопрос — Какое из указанных слов тебе не понятно?

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

Добавлено через 1 минуту
Неужели так сложно понять что оператор и функция — разные вещи?

Добавлено через 1 час 48 минут
В общем проблема твоего кода в том что ты сам не понимаешь — толи выполнить то ли вычислить. Если исходит из предположения что у тебя правильно оформленный код (это подразумевает наличие ; в конце оператора) то твой вопрос решается так

формула = «…..»
попытка
если найти(формула,»;») > 0 тогда
выполнить(формула);
иначе
результат = вычислить(формула);
исключение
сообщить(ОписаниеОшибки());
конецпопытки

но это костыль.
более правильный вариант — написать свой парсер 1С.
еще более правильный вариант — не использовать Выполнить и Вычислить. В твоем случае еще и гото нельзя использовать.

Понравилась статья? Поделить с друзьями:
  • Ошибка компиляции модов ведьмак 3
  • Ошибка компиляции майкрософт jscript что это
  • Ошибка компиляции майкрософт jscript код ошибки 800а03ее
  • Ошибка компиляции для платы ардуино нано
  • Ошибка компиляции для платы ардуино леонардо