19.04.19 — 09:49
Доброго времени суток всем.
Обращаюсь к экспортной процедуре, находящейся в модуле объекта, из модуля формы списка документов через метод РеквизитФормыВЗначение.
Программа ругается: {Документ.ЛГ_ЖдНакладная.Форма.ФормаСпискаЛогистика.Форма(297)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
ДокОбъект = РеквизитФормыВЗначение(«Объект»);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
В чем может быть ошибка?
Вот текст процедуры обращения:
&НаСервере
Процедура СпецификацияЗаполнитьПриложенияСервер()
Объект = Элементы.Ссылка;
ДокОбъект = («Объект»);
Объект. ЗаполнитьИРасценитьПоВнутреннимЦенам();
ДокОбъект.ЗначениеВРеквизитФормы(«Объект»);
Объект.Обработано = Истина;
КонецПроцедуры
1 — 19.04.19 — 09:52
(0) в тексте процедуры нет той строки на которой происходит ошибка
2 — 19.04.19 — 09:55
криво скрпировала))
&НаСервере
Процедура СпецификацияЗаполнитьПриложенияСервер()
Объект = Элементы.Ссылка;
ДокОбъект = РеквизитФормыВЗначение(«Объект»);
Объект. ЗаполнитьИРасценитьПоВнутреннимЦенам();
ДокОбъект.ЗначениеВРеквизитФормы(«Объект»);
Объект.Обработано = Истина;
КонецПроцедуры
3 — 19.04.19 — 09:56
(0) посмотрите на форме, справа, где список реквизитов, есть там такой реквизит «Объект»?
4 — 19.04.19 — 09:57
(2) тут у вас получается, что Объект это вообще не реквизит, а какие-то Элементы.Ссылка
5 — 19.04.19 — 09:58
на форме списка документов нужно обработать выделенные документы через процедуру вызываемую из модуля объекта:
&НаКлиенте
Процедура ЗаполнитьПриложениями(Команда)
ВыделенныеСтроки = ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.СписокПиломат);
Если ВыделенныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ТекстВопроса = НСтр(«ru=’К выделенным в списке документам будут заполнены приложения. Продолжить?'»);
Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ОчиститьСообщения();
Объект = Элементы.Ссылка;
Для каждого Объект из ВыделенныеСтроки Цикл
Если НЕ Объект.СпецификацияКатВ.Количество()= 0 Тогда
ТекстОшибки = НСтр(«ru = ‘Заполнена спецификация кат.В (необходимо предварительно очистить!'»);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
Возврат;
КонецЕсли;
СпецификацияЗаполнитьПриложенияСервер();
КонецЦикла;
КонецПроцедуры
6 — 19.04.19 — 10:00
(4) похоже на попытку «редактировать в списке»
7 — 19.04.19 — 10:02
(0)
что оно должно сделать?
8 — 19.04.19 — 10:03
перебирать выделенные документы и в каждом заполнять табличную часть
9 — 19.04.19 — 10:07
покажите теперь код процедуры «ЗаполнитьИРасценитьПоВнутреннимЦенам()»
10 — 19.04.19 — 10:13
в (2) в коде беда
11 — 19.04.19 — 11:15
немного подправила код, но ошибка осталась та же:
&НаКлиенте
Процедура ЗаполнитьПриложениями(Команда)
ВыделенныеСтроки = ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.СписокПиломат);
Если ВыделенныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ТекстВопроса = НСтр(«ru=’К выделенным в списке документам будут заполнены приложения. Продолжить?'»);
Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ОчиститьСообщения();
Для каждого Объект из ВыделенныеСтроки Цикл
Если НЕ Объект.СпецификацияКатВ.Количество()= 0 Тогда
ТекстОшибки = НСтр(«ru = ‘Заполнена спецификация кат.В (необходимо предварительно очистить!'»);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
Возврат;
КонецЕсли;
СпецификацияЗаполнитьПриложенияСервер();
КонецЦикла;
КонецПроцедуры
Процедура СпецификацияЗаполнитьПриложенияСервер()
ДокОбъект = РеквизитФормыВЗначение(«Объект»,Тип(«ДокументОбъект.ЛГ_ЖдНакладная»));
ДокОбъект. ЗаполнитьИРасценитьПоВнутреннимЦенам();
ДокОбъект.ЗначениеВРеквизитФормы(«Объект»);
ДокОбъект.Обработано = Истина;
КонецПроцедуры
12 — 19.04.19 — 11:17
Пробовала через ДанныеФормыВЗначение, но ошибка та же.
13 — 19.04.19 — 11:18
объект — это что?
14 — 19.04.19 — 11:18
если данные формы — то беда
15 — 19.04.19 — 11:19
объект-это документ
16 — 19.04.19 — 11:19
(11) >>Для каждого Объект из ВыделенныеСтроки Цикл
нельзя использовать слово «объект» в качестве переменных!
17 — 19.04.19 — 11:29
Хорошо,изменила код, ошибка та же(. В параметрах метода также пробовала менять. Ошибка не уходит.
Наименование п
&НаКлиенте
Процедура ЗаполнитьПриложениями(Команда)
ВыделенныеСтроки = ПроверитьПолучитьВыделенныеВСпискеСсылки(Элементы.СписокПиломат);
Если ВыделенныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ТекстВопроса = НСтр(«ru=’К выделенным в списке документам будут заполнены приложения. Продолжить?'»);
Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ОчиститьСообщения();
Для каждого Элемент из ВыделенныеСтроки Цикл
Если НЕ Элемент.СпецификацияКатВ.Количество()= 0 Тогда
ТекстОшибки = НСтр(«ru = ‘Заполнена спецификация кат.В (необходимо предварительно очистить!'»);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
Возврат;
КонецЕсли;
СпецификацияЗаполнитьПриложенияСервер();
КонецЦикла;
КонецПроцедуры
Процедура СпецификацияЗаполнитьПриложенияСервер()
ДокОбъект = РеквизитФормыВЗначение(«Объект»,Тип(«ДокументОбъект.ЛГ_ЖдНакладная»));
ДокОбъект. ЗаполнитьИРасценитьПоВнутреннимЦенам();
ДокОбъект.ЗначениеВРеквизитФормы(«Объект»);
ДокОбъект.Обработано = Истина;
КонецПроцедуры
18 — 19.04.19 — 11:32
она не читает ответы
19 — 19.04.19 — 11:41
(17) ДокОбъект = РеквизитФормыВЗначение(«Объект»,Тип(«ДокументОбъект.ЛГ_ЖдНакладная»)); — это для формы документа
для формы списка так писать — это полный дебилизм.
поэтому пробуйте
Процедура СпецификацияЗаполнитьПриложенияСервер(Элемент)
ДокОбъект = Элемент.Ссылка.ПолучитьОбъект();
ДокОбъект. ЗаполнитьИРасценитьПоВнутреннимЦенам();
ДокОбъект.Обработано = Истина;
ДокОбъект.Записать();
КонецПроцедуры
20 — 19.04.19 — 11:57
Ответы читаю.
Задача стоит так: в списке документов накладных пользователь выделяет несколько документов для групповой обработки. цель обработки проставить стоимость товаров в табличных частях выделенных документов. в процедуре Заполнить приложениями (команда) получаю список выделенных и в цикле забираю каждый. И для каждого выбранного документа вызываю процедуру заполнения (ЗаполнитьИРасценитьПоВнутреннимЦенам). Процедура заполнения цен товаров прописана в модуле объекта документа, поэтому обращаюсь через метод РеквизитФормыВЗначение.
Мои извинения, если чего-то не понимаю.
SSSSS_AAAAA
21 — 19.04.19 — 11:59
(20) И Реквизит какой формы вы пытаетесь загнать в значение? Формы списка?
Я сделал форму, добавил реквизит пользователей из справочника пользователей и создал поле выбора с типом справочника пользователей. Мне нужно получить значение этого реквизита в модуле формы, но в строке, где я его получаю, выходит ошибка:
Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
{Отчеты Отчет.НовыйОтчетПрофилей.Форма.ФормаОтчета.Форма(201)}:РеквизитПользователя = РеквизитФормыВЗначение("Пользователь"); //
{Отчеты Отчет.НовыйОтчетПрофилей.Форма.ФормаОтчета.Форма(230)}:ТабДокумент = СформироватьМакетНаСервере();
по причине:
Недопустимое значение параметра (параметр номер '1')
Как это можно исправить?
Вот сам код:
&НаСервере
Функция СформироватьМакетНаСервере()
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
РеквизитПользователя = РеквизитФормыВЗначение("Пользователь"); //
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, ОтчетОбъект.КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТаблицаЗначений = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Очистить();
Макет = ОтчетОбъект.ПолучитьМакет("Макет");
Возврат ТабДокумент;
КонецФункции
&НаКлиенте
Процедура СформироватьМакет(Команда)
ТабДокумент = СформироватьМакетНаСервере();
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Макет");
ПечатнаяФорма = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, "Макет");
ПечатнаяФорма.СинонимМакета = "Макет";
ПечатнаяФорма.ТабличныйДокумент = ТабДокумент;
ПечатнаяФорма.ИмяФайлаПечатнойФормы = "Макет";
ОбластиОбъектов = Новый СписокЗначений;
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбластиОбъектов);
КонецПроцедуры
Вот форма со свойствами поля:
И свойства реквизита:
Есть встроенная в конф-ии обработка. Пишу:
&НаСервере но получаю ошибку: Ошибка при вызове метода контекста (РеквизитФормыВЗначение) ОбъектНаСервере = РеквизитФормыВЗначение(«Объект»); по причине: Тип не определен ‘ecaffd21-70c8-4642-950b-379bc1ad00db’
Есть встроенная обработка. Пишу: приди ко мне. Но тщетно..
тип «Объект» — ДанныеФормыСтруктура Смотрю в справке, с помощью функции ДанныеФормыВЗначение вроде тоже можно но опять таки ошибка. Не пойму где ошибка. я 2 раза ctrl+enter нажал
Перем ОбъектНаСервере мешается?
в смысле что не нужно такое там?
я имел в виду это. на сам не верю
а чего бы ОбработатьВнешниеФайлыНаСервер не положить в модуль менеджера?
подумал над этим. но пока хочу разобраться почему в модуле объекта не работает
откуда то берется один и тот же ИД в описание ошибки, интересно: Тип не определен ‘ecaffd21-70c8-4642-950b-379bc1ad00db’
блин не хочется кэш чистить
даже после чистке кэша этот ИД в описание ошибке не меняется. ЧТо за …
а как у тебя Сообщить(йо) на сервере работает?
Выводит текст сообщения в окно сообщений. Если в момент вызова окно сообщений отсутствует, то будет открыто новое окно сообщений. Сообщение, в зависимости от его смысловой нагрузки, можно пометить одной из пиктограмм, входящих в предопределенный набор.
работает оно НаСервере. Оно дожидается возвращения на клиент и сообщает. СП читать надо
/СП читать надо/ Спасибо что разрешили… так и буду впредь поступать
я не разрешаю, я настаиваю. СП надо читать. Перед тем как задавать вопросы про то, почему метод работает не так, как тебе хочется, надо обязательно прочитать СП и хорошенько подумать. А потом уже спрашивать, если вдумчивое чтение СП не помогает
а давайте подумаем, где у сервера окно
/не так, как тебе хочется/ где Вы это в моем тексте узрели, чего мне хочется или не хочется, написал же «удивлен» ПС. К тому же не Вам
/Оно дожидается возвращения на клиент и сообщает/ Вот про это что то не нашел… Глобальный контекст (Global context) Сообщить (Message) Синтаксис: Сообщить(<ТекстСообщения>, <Статус>) Параметры: Тип: Строка. Тип: СтатусСообщения. Статус сообщения. Определяет вид пиктограммы. Значение по умолчанию: Обычное Описание: Выводит текст сообщения в окно сообщений. Если в момент вызова окно сообщений отсутствует, то будет открыто новое окно сообщений. Сообщение, в зависимости от его смысловой нагрузки, можно пометить одной из пиктограмм, входящих в предопределенный набор. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. потому и спросил…
Если в момент вызова окно сообщений отсутствует, то будет открыто новое
вообще, мутно сформулировано, да
поэтому честно признался что такое казалось бы примитивное, а не знал
а если сообщать в регзадании, к примеру, так и вообще никаких окон не будет
а я не к Вам обращалась, молодой человек. Я лишь высказала свою мысль, обращенную вообще к аудитории, которая может сей текст прочесть. Доступность: сервер — ни о чем не говорит Вам? А про «Оно дожидается возвращения на клиент и сообщает» на собственном опыте испытано
ну знай ещё. я в своё время логи регзадания ловил по Сообщить
и зачем тогда СообщениеПользователю было мутить… а Предупредить тоже дожидается возвращения на клиент?
спс, очччьь признателен. (не сарказм)
Сду по тому кому Вы свои сообщения адресовали, то не к аудитории а именно мне
СообщениеПользователю — потомок Сообщить, а предупреждения на сервере нет
Ах, ну простите меня, я такая бестактная. Впредь не буду приставать с такими глупостяи
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
khenata 0 / 0 / 0 Регистрация: 09.11.2017 Сообщений: 19 |
||||
1 |
||||
Внешняя обработка: не обновляется уже открытая форма после изменений в табличной части09.11.2017, 14:35. Показов 19467. Ответов 15 Метки нет (Все метки)
Создана внешняя обработка. Добавляется кнопкой в документ в 1С ЗУП 3.1 в документах ДанныеДляРасчетаЗарплаты(создаются с помощью шаблонов). В открытой форме нажатие на кнопку вызывает обработку, делает изменения, но форма не обновляется. Ф-ция Сообщить выдает правильные результаты изменений.Чего-то не хватает, может быть знает кто-нибудь что еще нужно дописать? Если такой код запускаю в документе РазовоеНачисление — все работает, форма сразу обновляется и документ можно провести.
__________________
0 |
476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,904 |
|
09.11.2017, 16:52 |
2 |
Может, владелецФормы.Обновить()? Добавлено через 1 минуту
0 |
khenata 0 / 0 / 0 Регистрация: 09.11.2017 Сообщений: 19 |
||||
09.11.2017, 21:51 [ТС] |
3 |
|||
говорит:{ВнешняяОбработка.ВнешняяОбработкаЗУП31021 12017данные.Форма.Форма.Форма(13)}: Метод объекта не обнаружен (Обновить) Добавлено через 3 минуты Добавлено через 4 часа 52 минуты
0 |
Joker_vad 476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,904 |
||||
09.11.2017, 22:33 |
4 |
|||
Добавлено через 11 секунд
0 |
0 / 0 / 0 Регистрация: 09.11.2017 Сообщений: 19 |
|
09.11.2017, 22:47 [ТС] |
5 |
Код изменила, но результат тот же.
0 |
1789 / 1213 / 438 Регистрация: 16.01.2015 Сообщений: 5,349 |
|
10.11.2017, 01:08 |
6 |
khenata, Скорей всего, дело в этом (из СП) Описание: Копирует данные формы, обладающие совместимой структурой. Структура форм несовместима. Реквизиты имеют одинаковое Имя? Одинаковый тип значений?
0 |
0 / 0 / 0 Регистрация: 09.11.2017 Сообщений: 19 |
|
10.11.2017, 08:16 [ТС] |
7 |
программно же видит реквизиты, которые созданы в 1С Предприятие. ЗначенияПоказателей- это табличная часть объекта ДанныеДляРасчетаЗарплаты, через эту табличную часть программа видит созданные мной реквизиты шаблона в 1С Предприятие, но в самом объекте Документы.ДанныеДляРасчетаЗарплаты.ЗначенияПоказат елей моих реквизитов нет. Т.е. считывать данные можно, а вернуть рассчитанные значения в форму как интересно? Может есть где почитать решения для таких задач. Собственно говоря, нужно было создать специальный документ для не типового вида начисления и хотелось в некоторых столбцах производить вычисления и записывать результаты для каждой строки. Хотелось бы найти решение, т.к. это дает большую возможность гибко настраивать не стандартные виды начислений. Спасибо, что помогаете думать.
0 |
1789 / 1213 / 438 Регистрация: 16.01.2015 Сообщений: 5,349 |
|
10.11.2017, 16:02 |
8 |
khenata, через эту табличную часть программа видит созданные мной реквизиты шаблона в 1С Предприятие, но в самом объекте Документы.ДанныеДляРасчетаЗарплаты.ЗначенияПоказат елей моих реквизитов нет. Так о том и речь. На сервере вы форму владелец заполните без проблем, а дальше КопироватьДанныеФормы не отрабатывает.
0 |
0 / 0 / 0 Регистрация: 09.11.2017 Сообщений: 19 |
|
10.11.2017, 16:29 [ТС] |
9 |
не соображу как проверить и где смотреть, подскажите пожалуйста. в конфигураторе моего конкретного документа и его формы нет.
0 |
polax 1789 / 1213 / 438 Регистрация: 16.01.2015 Сообщений: 5,349 |
||||
10.11.2017, 16:58 |
10 |
|||
khenata, Не знаю точно, но вы говорите, что где-то существует шаблон, посмотреть в нем. Возможно дело в шаблоне?
0 |
0 / 0 / 0 Регистрация: 09.11.2017 Сообщений: 19 |
|
10.11.2017, 22:02 [ТС] |
11 |
тогда не находит Табличную часть: {ВнешняяОбработка.ВнешняяОбработкаЗУП3102112017дан ные.МодульОбъекта(102)}: Поле объекта не обнаружено (ЗначенияПоказателей)
0 |
polax 1789 / 1213 / 438 Регистрация: 16.01.2015 Сообщений: 5,349 |
||||
10.11.2017, 22:43 |
12 |
|||
khenata, А что отладчик показывает на значение ОбъектыНазначенияМассив [0]?
0 |
0 / 0 / 0 Регистрация: 09.11.2017 Сообщений: 19 |
|
10.11.2017, 23:10 [ТС] |
13 |
на ОбъектНазначенияМассив — показывает ДанныеФрормыСтруктура
0 |
polax 1789 / 1213 / 438 Регистрация: 16.01.2015 Сообщений: 5,349 |
||||
10.11.2017, 23:13 |
14 |
|||
khenata, Отлично! Тогда так
0 |
0 / 0 / 0 Регистрация: 09.11.2017 Сообщений: 19 |
|
10.11.2017, 23:23 [ТС] |
15 |
а теперь :
0 |
polax 1789 / 1213 / 438 Регистрация: 16.01.2015 Сообщений: 5,349 |
||||||||||||
11.11.2017, 00:18 |
16 |
|||||||||||
khenata, Давайте попробуем через ДанныеФормыВЗначении. Все процедуры в модуле формы
Добавлено через 3 минуты
И в третьей Экспорт не нужен Добавлено через 11 минут Добавлено через 8 минут
0 |
-
Добрый день
такая ошибка!{Форма.Форма.Форма(4)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение) тотОбьект= РеквизитФормыВЗначение(Объект); по причине: Несоответствие типов (параметр номер '1')
вызываю функцию в модуле объекта из модуля формы таким способом
&НаСервере Процедура Команда1НаСервере() тотОбьект= РеквизитФормыВЗначение(Объект); тотОбьект.ВыгрузитьВCSV("C:my.csv"); КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); КонецПроцедуры
код в модуле объекта
// Выполним запрос к справочнику Номенклатуры // Получим Таблицу Значений Функция ПолучитьНоменклатуру() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 100 | Номенклатура.Наименование |ИЗ | Справочник.Номенклатура КАК Номенклатура"; Результат = Запрос.Выполнить(); ТаблицаЗначений = Результат.Выгрузить(); возврат ТаблицаЗначений; КонецФункции // // Создаем строку загоовков для CSV-файла Функция СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель) //разделитель = "|"; колонкиТЗ=ТаблицаЗначений.колонки; Для каждого колонка Из колонкиТЗ Цикл стрКолонки = "" + стрКолонки + колонка.Имя + разделитель ; КонецЦикла; Возврат стрКолонки; КонецФункции // Создаем текст CSV: // текст заголовков и // текст данных Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель) текст=""; для каждого запись из ТаблицаЗначений Цикл если текст="" тогда текст=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель) + Символы.ПС; КонецЕсли; сообщить(запись.Наименование); текст = текст + запись.Ссылка + разделитель + запись.Код + разделитель + запись.Родитель + разделитель + запись.Наименование + Символы.ПС; КонецЦикла; //сообщить(текст); Возврат текст; КонецФункции // // Запишем данные в файл Функция ЗаписатьCSV(текст,имяФайла) кодировка = КодировкаТекста.ANSI; ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка); ТекстовыйФайлЗапись.ЗаписатьСтроку(текст); ТекстовыйФайлЗапись.Закрыть(); Возврат 0; КонецФункции // // Основная логика: Функция ВыгрузитьВCSV(имяФайлаCSV); разделитель = "|"; ТаблицаЗначений = ПолучитьНоменклатуру(); текст = СоздатьДанныеCSV(ТаблицаЗначений,разделитель); ЗаписатьCSV(текст,имяФайлаCSV); КонецФункции
Помогите пожалуйста я новичок уже 3ю неделю пытаюсь решить не получается(
-
Offline
Dem0lisher
Профессионал в 1С- Регистрация:
- 4 авг 2009
- Сообщения:
- 1.271
- Симпатии:
- 106
- Баллы:
- 104
Вы читали,что написано про РеквизитФормыВЗначение(ИмяРеквизита) в синтакс-помощнике?
1.Туда нужно передавать имя реквизита формы, значение которого хотите получить.
А теперь откройте вкладу реквизиты на упр. форме и посмотрите, есть ли там такой реквизит с именем «Объект»?
2. Передавать нужно имя, т.е строку «Объект», «Обработка», а не сам Объект или Обработка.. -
спасибо передал строку
тотОбьект= РеквизитФормыВЗначение("Объект"); тотОбьект.ВыгрузитьВCSV("C:my.csv");
теперь вылезает ошибка
{Форма.Форма.Форма(5)}: Метод объекта не обнаружен (ВыгрузитьВCSV) тотОбьект.ВыгрузитьВCSV("C:my.csv")
ничего не понимаю(
-
Все разобрался забыл добавить ЭКСПОРТ
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.