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

И опять конвертация данных

Я
   4uvak

23.10.12 — 08:55

Здравствуйте подскажите пожалуйста, в стандартных правилах изменяю ПВД на документ «РеализацияТоваровИУслуг» убираю в объект выборки, ставлю произвольный алгоритм в способе выборке, пишу код на выборку для записи в один документ из многих. Далее пытаюсь выгрузить данные по данному правилу но обработка выдает ошибку.

Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер ‘1’)

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

   vmv

1 — 23.10.12 — 08:57

я бросил курить

   Нуф-Нуф

2 — 23.10.12 — 08:57

(1) красава

   4uvak

3 — 23.10.12 — 08:57

(1)я тоже, не помогло

   Redkiy

4 — 23.10.12 — 08:59

Что передаешь в ПКО?

Давай кусок кода.

   4uvak

5 — 23.10.12 — 09:02

Запрос = Новый Запрос;

Запрос.текст = «ВЫБРАТЬ

              |    РеализацияТоваровУслугТовары.АкцизВидОперацииРеализации,

              |    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,

              |    РеализацияТоваровУслугТовары.Количество,

              |    РеализацияТоваровУслугТовары.Коэффициент,

              |    РеализацияТоваровУслугТовары.НДСВидОперацииРеализации,

              |    РеализацияТоваровУслугТовары.Номенклатура,

              |    РеализацияТоваровУслугТовары.СтавкаАкциза,

              |    РеализацияТоваровУслугТовары.СтавкаНДС,

              |    РеализацияТоваровУслугТовары.Сумма,

              |    РеализацияТоваровУслугТовары.СуммаАкциза,

              |    РеализацияТоваровУслугТовары.СуммаНДС,

              |    РеализацияТоваровУслугТовары.Цена

              |ИЗ

              |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары

              |ГДЕ

              |    РеализацияТоваровУслугТовары.Ссылка.НаличиеДокументов = ЛОЖЬ»;

Выборка = запрос.Выполнить().Выбрать();

ТаблицаДанные = Новый ТаблицаЗначений;

ТаблицаДанные.Колонки.Добавить(«Организация», Новый ОписаниеТипов(«СправочникСсылка.Организации»));

ТаблицаДанные.Колонки.Добавить(«ВидОперации», Новый ОписаниеТипов(«ПеречислениеСсылка.ВидыОперацийРеализацияТоваров»));

ТаблицаДанные.Колонки.Добавить(«БанковскийСчетОрганизации», Новый ОписаниеТипов(«СправочникСсылка.БанковскиеСчета»));

ТаблицаДанные.Колонки.Добавить(«ВалютаДокумента», Новый ОписаниеТипов(«СправочникСсылка.Валюты»));

ТаблицаДанные.Колонки.Добавить(«Склад», Новый ОписаниеТипов(«СправочникСсылка.Склады»));

ТаблицаДанные.Колонки.Добавить(«СуммаДокумента», Новый ОписаниеТипов(«Число»));

ТаблицаДанные.Колонки.Добавить(«Товары», Новый ОписаниеТипов(«ТаблицаЗначений»));

                                                                                     
Товары = Новый ТаблицаЗначений();

Товары.Колонки.Добавить(«АкцизВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыОперацийОблагаемыхАкцизом»));

Товары.Колонки.Добавить(«ЕдиницаИзмерения», Новый ОписаниеТипов(«СправочникСсылка.КлассификаторЕдиницИзмерения»));

Товары.Колонки.Добавить(«Количество», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Коэффициент», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«НДСВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыРеализации»));

Товары.Колонки.Добавить(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»));

Товары.Колонки.Добавить(«СтавкаАкциза», Новый ОписаниеТипов(«СправочникСсылка.СтавкиАкциза»));

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

Товары.Колонки.Добавить(«Сумма», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаАкциза», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаНДС», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Цена», Новый ОписаниеТипов(«Число»));

Пока Выборка.Следующий() Цикл

   СтрокаТоваров = Товары.Добавить();

   СтрокаТоваров.АкцизВидОперацииРеализации = Выборка.АкцизВидОперацииРеализации;

   СтрокаТоваров.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;

   СтрокаТоваров.Количество = Выборка.Количество;

   СтрокаТоваров.Коэффициент = Выборка.Коэффициент;

   СтрокаТоваров.НДСВидОперацииРеализации = Выборка.НДСВидОперацииРеализации;

   СтрокаТоваров.Номенклатура = Выборка.Номенклатура;

   СтрокаТоваров.СтавкаАкциза = Выборка.СтавкаАкциза;

   СтрокаТоваров.СтавкаНДС = Выборка.СтавкаНДС;

   СтрокаТоваров.Сумма = Выборка.Сумма;

   СтрокаТоваров.СуммаАкциза = Выборка.СуммаАкциза;

   СтрокаТоваров.СуммаНДС = Выборка.СуммаНДС;

   СтрокаТоваров.Цена = Выборка.Цена;

КонецЦикла;

Организация = Справочники.Организации.НайтиПоКоду(«000000001»);

НоваяСтрокаДанные = ТаблицаДанные.Добавить();

НоваяСтрокаДанные.Организация = Организация;

НоваяСтрокаДанные.СуммаДокумента = Товары.Итог(«Сумма»);

НоваяСтрокаДанные.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;

НоваяСтрокаДанные.БанковскийСчетОрганизации = Организация.ОсновнойБанковскийСчет;

НоваяСтрокаДанные.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду(«398»);

НоваяСтрокаДанные.Товары = Товары;

//ВыгрузитьПоПравилу(ИсходящиеДанные,, ,,»ПКО»);

ВыборкаДанных = ТаблицаДанные;

   4uvak

6 — 23.10.12 — 09:06

(4)Проблема заключается не в коде, а в стандартной обработке ОбменДаннымиXML там в процедуре

ВыполнитьВыгрузкуИзмененныхДанныхДляУзлаОбмена

Есть такой кусочек кода

Для Каждого СтрокаПравилаВыгрузки Из ВременныйМассивПравилВыгрузкиДанных Цикл

           
           МетаданныеПВД = Метаданные.НайтиПоТипу(СтрокаПравилаВыгрузки.ОбъектВыборки);

           МассивВыгружаемыхМетаданных.Добавить(МетаданныеПВД);

           
       КонецЦикла;

Вот тут то и возникает ошибка при поиске Типа объекта выборки.

   Redkiy

7 — 23.10.12 — 09:10

Судя но коду, ты пытаешься создать один док из всех по условию НаличиеДокументов = ЛОЖЬ.

   4uvak

8 — 23.10.12 — 09:10

(7)Так и есть

   vmv

9 — 23.10.12 — 09:11

Процедура СоздатьКолонкиТаблицы()

ТаблицаДанные = Новый ТаблицаЗначений;

ТаблицаДанные.Колонки.Добавить(«Организация», Новый ОписаниеТипов(«СправочникСсылка.Организации»));

ТаблицаДанные.Колонки.Добавить(«ВидОперации», Новый ОписаниеТипов(«ПеречислениеСсылка.ВидыОперацийРеализацияТоваров»));

ТаблицаДанные.Колонки.Добавить(«БанковскийСчетОрганизации», Новый ОписаниеТипов(«СправочникСсылка.БанковскиеСчета»));

ТаблицаДанные.Колонки.Добавить(«ВалютаДокумента», Новый ОписаниеТипов(«СправочникСсылка.Валюты»));

ТаблицаДанные.Колонки.Добавить(«Склад», Новый ОписаниеТипов(«СправочникСсылка.Склады»));

ТаблицаДанные.Колонки.Добавить(«СуммаДокумента», Новый ОписаниеТипов(«Число»));

ТаблицаДанные.Колонки.Добавить(«Товары», Новый ОписаниеТипов(«ТаблицаЗначений»));

                                                                                     
Товары = Новый ТаблицаЗначений();

Товары.Колонки.Добавить(«АкцизВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыОперацийОблагаемыхАкцизом»));

Товары.Колонки.Добавить(«ЕдиницаИзмерения», Новый ОписаниеТипов(«СправочникСсылка.КлассификаторЕдиницИзмерения»));

Товары.Колонки.Добавить(«Количество», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Коэффициент», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«НДСВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыРеализации»));

Товары.Колонки.Добавить(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»));

Товары.Колонки.Добавить(«СтавкаАкциза», Новый ОписаниеТипов(«СправочникСсылка.СтавкиАкциза»));

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

Товары.Колонки.Добавить(«Сумма», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаАкциза», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаНДС», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Цена», Новый ОписаниеТипов(«Число»));

КанецПродураков

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

   vmv

10 — 23.10.12 — 09:12

(6) поставь условие проверки на вшивость

СтрокаПравилаВыгрузки.ОбъектВыборки

   4uvak

11 — 23.10.12 — 09:14

(10)Знать бы где Массив уже приходит в процедуру

   4uvak

12 — 23.10.12 — 09:18

(10)Да к тому же, менять стандартный код обработки не хочется, может кто знает как можно ее обмануть?

   Redkiy

13 — 23.10.12 — 11:14

Создай новое ПКО РеализацияТоваровИУслуг_.

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

Т.к. ссылку не передаешь в ПКО отключи поиск по GUID, поиск по реквизиту Дата.

А вообще от твоего кода глаза режет…

   4uvak

14 — 23.10.12 — 11:35

(13)Понимаешь если в правилах выгрузки данных, я выбираю объект выборки «РеализацияТоваровУслуг», то выгрузка проходит, но количество документов остается прежним и поля заполнены лишь те которые указал, если объект выборки из правил выгрузки данных удаляю то ругается на ошибку. А что с кодом?

  

Redkiy

15 — 23.10.12 — 11:47

(14) Ты между строк читаешь? Тебе предложен способ быстро (за пару минут) локализовать ошибку!

по коду: запрос надо бы свернуть, или у тебя номенклатура не повторяется?

Товары = запрос.Выполнить().Выгрузить(); // ТАКОЕ ПРОХОДИЛИ?

Здравствуйте подскажите пожалуйста, в стандартных правилах изменяю ПВД на документ «РеализацияТоваровИУслуг» убираю в объект выборки, ставлю произвольный алгоритм в способе выборке, пишу код на выборку для записи в один документ из многих. Далее пытаюсь выгрузить данные по данному правилу но обработка выдает ошибку. Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер ‘1’) Проверяя в конфигураторе что не понравилось, обнаружил что проблема как раз в том что не указал в ПВД объект выборки. Кто сталкивался подскажите как с этим боролись

Что передаешь в ПКО? Давай кусок кода.

Проблема заключается не в коде, а в стандартной обработке ОбменДаннымиXML там в процедуре ВыполнитьВыгрузкуИзмененныхДанныхДляУзлаОбмена Есть такой кусочек кода Для Каждого СтрокаПравилаВыгрузки Из ВременныйМассивПравилВыгрузкиДанных Цикл        КонецЦикла; Вот тут то и возникает ошибка при поиске Типа объекта выборки.

Судя но коду, ты пытаешься создать один док из всех по условию НаличиеДокументов = ЛОЖЬ.

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

поставь условие проверки на вшивость СтрокаПравилаВыгрузки.ОбъектВыборки

Знать бы где Массив уже приходит в процедуру

Да к тому же, менять стандартный код обработки не хочется, может кто знает как можно ее обмануть?

Создай новое ПКО РеализацияТоваровИУслуг_. Начинай с малого — переноси реквизиты постепенно, сначала перенеси только дату, получится — добавляй следующие. Т.к. ссылку не передаешь в ПКО отключи поиск по GUID, поиск по реквизиту Дата. А вообще от твоего кода глаза режет…

Понимаешь если в правилах выгрузки данных, я выбираю объект выборки «РеализацияТоваровУслуг», то выгрузка проходит, но количество документов остается прежним и поля заполнены лишь те которые указал, если объект выборки из правил выгрузки данных удаляю то ругается на ошибку. А что с кодом?

Ты между строк читаешь? Тебе предложен способ быстро (за пару минут) локализовать ошибку! по коду: запрос надо бы свернуть, или у тебя номенклатура не повторяется?

Тэги: 1С 8

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

  1. Всем привет. Вопрос такой.Есть правила обмена между БП 3.0 и Управлением холдингом. Есть правило выгрузки данных, в котором прописан произвольный алгоритм выгрузки с узла (узел указан в явном виде
    УзелОбмена = ПланыОбмена.рибНеполныйДляУХ.НайтиПоКоду(«ribETS»);
    Если Не УзелОбмена.Пустая() Тогда
    Сообщить («Начинаем выгрузку с узла регистрации!»);
    ОбъектУзла = УзелОбмена.ПолучитьОбъект();
    ОбъектУзла.НомерОтправленного = 1 + ОбъектУзла.НомерОтправленного;
    ОбъектУзла.Записать();
    НомерОтправляемогоСообщения = ОбъектУзла.НомерОтправленного;
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, НомерОтправляемогоСообщения);

    Пока ВыборкаИзменений.Следующий() Цикл
    Объект = ВыборкаИзменений.Получить();
    //тут вызов метода ВыгрузитьПоПравилу в зависимости от условий в который передается нужное ПКО
    КонецЦикла;

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

    Ошибка при выгрузке данных для узла плана обмена
    ОписаниеОшибки = Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер ‘1’)
    ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(10463)
    КодСообщения = 72
    УзелПланаОбмена = ribETS
    Нашел, что ошибка связана с тем, что не указан Объект выборки в ПВД, но ведь по сути у меня произвольный алоритм и в нем обрабатываются все объекты, которые находятся на узле в зависимости от условий. Как быть в этой ситуации?


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

1) у меня сейчас получается, что данные из самописной выгружаются и в упп загружаются, но файл обмена не чистится и номера сообщения сейчас:
В самописной: номер отправленного 4 номер принятого 0
В УПП: номер отправленного 0 номер принятого 4

То есть после загрузки он не отправляет сообщение, что загрузил их

Макет с пустыми правилами обмена создал. Cценарии синхроинзации данных тоже не помогают.

2) Попытался сделать настройку в УПП через прочий обмен. Выгрузка квитанции происходит, но загрузка не идет по нему. падает на
Ошибка при загрузке данных: {Обработка.ОбменДаннымиXML.МодульОбъекта(5898)}: Ошибка при вызове метода контекста (Свойство): Задано неправильное имя атрибута структуры

        Для Каждого ЭлементПоиска Из  ДанныеПоискаПоТЧ.ПоляПоискаТЧ Цикл

           
            ЗначениеЭлемента = Неопределено;
            СтруктураЧтенияСвойств.Свойство(ЭлементПоиска, ЗначениеЭлемента);

           
            СтруктураПоиска.Вставить(ЭлементПоиска, ЗначениеЭлемента);     

           
        КонецЦикла;

Падает, когда элемент поиска равен “”ИндексСтрокиТаблицы,КоличествоПлан,КоличествоФакт,Номенклатура,НужнаСФ” это колонки табличной части

Почему то Правило.ПоискПоТабличнымЧастям[1].ПоляПоискаТЧ разбивает на две строки в первой Колонка1, а во второй все остальное. Получается это из правил идет?

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

в сампоиснйо конфе в обработке КонвертацияОбъектовИнформационныхБаз в процедуре ПрочитатьДанныеПоОбмену есть строка

УдалитьРегистрациюИзменений  = одАтрибут(ФайлОбмена, ТипБулево, «УдалитьРегистрациюИзменений»);

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

я попробовал в этой процедуре для своего узла удалять регистрацию и вроде все заработало, но не знаю на сколько это правильно

    Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда

       
        НачатьТранзакцию();
        НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, «НомерПринятого»);
        ЗафиксироватьТранзакцию();

       
        Если НомерПринятого >= ЧтениеСообщения.НомерСообщения Тогда // Номер сообщения меньше либо равен ранее принятому

           
            ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения);
            ЧтениеСообщенияВременное.СообщениеБылоПринятоРанее = Истина;
            ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное);

           
            ВызватьИсключение НСтр(«ru = ‘Сообщение обмена было принято ранее'»);
        КонецЕсли;

       
        УдалитьРегистрациюИзменений = УдалитьРегистрациюИзменений И Не ВосстановленаРезервнаяКопия;

       
        //++РС
        ЕСли УзелОбменаПолучатель.Код = «ГУ» Тогда
             УдалитьРегистрациюИзменений=Истина;
        КонецЕсли;
        //—

И опять конвертация данных

Я

  

4uvak

23.10.12 — 08:55

Здравствуйте подскажите пожалуйста, в стандартных правилах изменяю ПВД на документ «РеализацияТоваровИУслуг» убираю в объект выборки, ставлю произвольный алгоритм в способе выборке, пишу код на выборку для записи в один документ из многих. Далее пытаюсь выгрузить данные по данному правилу но обработка выдает ошибку.

Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер ‘1’)

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

  

vmv

1 — 23.10.12 — 08:57

я бросил курить

  

Нуф-Нуф

2 — 23.10.12 — 08:57

(1) красава

  

4uvak

3 — 23.10.12 — 08:57

(1)я тоже, не помогло

  

Redkiy

4 — 23.10.12 — 08:59

Что передаешь в ПКО?

Давай кусок кода.

  

4uvak

5 — 23.10.12 — 09:02

Запрос = Новый Запрос;

Запрос.текст = «ВЫБРАТЬ

              |    РеализацияТоваровУслугТовары.АкцизВидОперацииРеализации,

              |    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,

              |    РеализацияТоваровУслугТовары.Количество,

              |    РеализацияТоваровУслугТовары.Коэффициент,

              |    РеализацияТоваровУслугТовары.НДСВидОперацииРеализации,

              |    РеализацияТоваровУслугТовары.Номенклатура,

              |    РеализацияТоваровУслугТовары.СтавкаАкциза,

              |    РеализацияТоваровУслугТовары.СтавкаНДС,

              |    РеализацияТоваровУслугТовары.Сумма,

              |    РеализацияТоваровУслугТовары.СуммаАкциза,

              |    РеализацияТоваровУслугТовары.СуммаНДС,

              |    РеализацияТоваровУслугТовары.Цена

              |ИЗ

              |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары

              |ГДЕ

              |    РеализацияТоваровУслугТовары.Ссылка.НаличиеДокументов = ЛОЖЬ»;

Выборка = запрос.Выполнить().Выбрать();

ТаблицаДанные = Новый ТаблицаЗначений;

ТаблицаДанные.Колонки.Добавить(«Организация», Новый ОписаниеТипов(«СправочникСсылка.Организации»));

ТаблицаДанные.Колонки.Добавить(«ВидОперации», Новый ОписаниеТипов(«ПеречислениеСсылка.ВидыОперацийРеализацияТоваров»));

ТаблицаДанные.Колонки.Добавить(«БанковскийСчетОрганизации», Новый ОписаниеТипов(«СправочникСсылка.БанковскиеСчета»));

ТаблицаДанные.Колонки.Добавить(«ВалютаДокумента», Новый ОписаниеТипов(«СправочникСсылка.Валюты»));

ТаблицаДанные.Колонки.Добавить(«Склад», Новый ОписаниеТипов(«СправочникСсылка.Склады»));

ТаблицаДанные.Колонки.Добавить(«СуммаДокумента», Новый ОписаниеТипов(«Число»));

ТаблицаДанные.Колонки.Добавить(«Товары», Новый ОписаниеТипов(«ТаблицаЗначений»));

                                                                                     

Товары = Новый ТаблицаЗначений();

Товары.Колонки.Добавить(«АкцизВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыОперацийОблагаемыхАкцизом»));

Товары.Колонки.Добавить(«ЕдиницаИзмерения», Новый ОписаниеТипов(«СправочникСсылка.КлассификаторЕдиницИзмерения»));

Товары.Колонки.Добавить(«Количество», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Коэффициент», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«НДСВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыРеализации»));

Товары.Колонки.Добавить(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»));

Товары.Колонки.Добавить(«СтавкаАкциза», Новый ОписаниеТипов(«СправочникСсылка.СтавкиАкциза»));

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

Товары.Колонки.Добавить(«Сумма», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаАкциза», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаНДС», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Цена», Новый ОписаниеТипов(«Число»));

Пока Выборка.Следующий() Цикл

   СтрокаТоваров = Товары.Добавить();

   СтрокаТоваров.АкцизВидОперацииРеализации = Выборка.АкцизВидОперацииРеализации;

   СтрокаТоваров.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;

   СтрокаТоваров.Количество = Выборка.Количество;

   СтрокаТоваров.Коэффициент = Выборка.Коэффициент;

   СтрокаТоваров.НДСВидОперацииРеализации = Выборка.НДСВидОперацииРеализации;

   СтрокаТоваров.Номенклатура = Выборка.Номенклатура;

   СтрокаТоваров.СтавкаАкциза = Выборка.СтавкаАкциза;

   СтрокаТоваров.СтавкаНДС = Выборка.СтавкаНДС;

   СтрокаТоваров.Сумма = Выборка.Сумма;

   СтрокаТоваров.СуммаАкциза = Выборка.СуммаАкциза;

   СтрокаТоваров.СуммаНДС = Выборка.СуммаНДС;

   СтрокаТоваров.Цена = Выборка.Цена;

КонецЦикла;

Организация = Справочники.Организации.НайтиПоКоду(«000000001»);

НоваяСтрокаДанные = ТаблицаДанные.Добавить();

НоваяСтрокаДанные.Организация = Организация;

НоваяСтрокаДанные.СуммаДокумента = Товары.Итог(«Сумма»);

НоваяСтрокаДанные.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;

НоваяСтрокаДанные.БанковскийСчетОрганизации = Организация.ОсновнойБанковскийСчет;

НоваяСтрокаДанные.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду(«398»);

НоваяСтрокаДанные.Товары = Товары;

//ВыгрузитьПоПравилу(ИсходящиеДанные,, ,,»ПКО»);

ВыборкаДанных = ТаблицаДанные;

  

4uvak

6 — 23.10.12 — 09:06

(4)Проблема заключается не в коде, а в стандартной обработке ОбменДаннымиXML там в процедуре

ВыполнитьВыгрузкуИзмененныхДанныхДляУзлаОбмена

Есть такой кусочек кода

Для Каждого СтрокаПравилаВыгрузки Из ВременныйМассивПравилВыгрузкиДанных Цикл

           

           МетаданныеПВД = Метаданные.НайтиПоТипу(СтрокаПравилаВыгрузки.ОбъектВыборки);

           МассивВыгружаемыхМетаданных.Добавить(МетаданныеПВД);

           

       КонецЦикла;

Вот тут то и возникает ошибка при поиске Типа объекта выборки.

  

Redkiy

7 — 23.10.12 — 09:10

Судя но коду, ты пытаешься создать один док из всех по условию НаличиеДокументов = ЛОЖЬ.

  

4uvak

8 — 23.10.12 — 09:10

(7)Так и есть

  

vmv

9 — 23.10.12 — 09:11

Процедура СоздатьКолонкиТаблицы()

ТаблицаДанные = Новый ТаблицаЗначений;

ТаблицаДанные.Колонки.Добавить(«Организация», Новый ОписаниеТипов(«СправочникСсылка.Организации»));

ТаблицаДанные.Колонки.Добавить(«ВидОперации», Новый ОписаниеТипов(«ПеречислениеСсылка.ВидыОперацийРеализацияТоваров»));

ТаблицаДанные.Колонки.Добавить(«БанковскийСчетОрганизации», Новый ОписаниеТипов(«СправочникСсылка.БанковскиеСчета»));

ТаблицаДанные.Колонки.Добавить(«ВалютаДокумента», Новый ОписаниеТипов(«СправочникСсылка.Валюты»));

ТаблицаДанные.Колонки.Добавить(«Склад», Новый ОписаниеТипов(«СправочникСсылка.Склады»));

ТаблицаДанные.Колонки.Добавить(«СуммаДокумента», Новый ОписаниеТипов(«Число»));

ТаблицаДанные.Колонки.Добавить(«Товары», Новый ОписаниеТипов(«ТаблицаЗначений»));

                                                                                     

Товары = Новый ТаблицаЗначений();

Товары.Колонки.Добавить(«АкцизВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыОперацийОблагаемыхАкцизом»));

Товары.Колонки.Добавить(«ЕдиницаИзмерения», Новый ОписаниеТипов(«СправочникСсылка.КлассификаторЕдиницИзмерения»));

Товары.Колонки.Добавить(«Количество», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Коэффициент», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«НДСВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыРеализации»));

Товары.Колонки.Добавить(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»));

Товары.Колонки.Добавить(«СтавкаАкциза», Новый ОписаниеТипов(«СправочникСсылка.СтавкиАкциза»));

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

Товары.Колонки.Добавить(«Сумма», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаАкциза», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаНДС», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Цена», Новый ОписаниеТипов(«Число»));

КанецПродураков

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

  

vmv

10 — 23.10.12 — 09:12

(6) поставь условие проверки на вшивость

СтрокаПравилаВыгрузки.ОбъектВыборки

  

4uvak

11 — 23.10.12 — 09:14

(10)Знать бы где Массив уже приходит в процедуру

  

4uvak

12 — 23.10.12 — 09:18

(10)Да к тому же, менять стандартный код обработки не хочется, может кто знает как можно ее обмануть?

  

Redkiy

13 — 23.10.12 — 11:14

Создай новое ПКО РеализацияТоваровИУслуг_.

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

Т.к. ссылку не передаешь в ПКО отключи поиск по GUID, поиск по реквизиту Дата.

А вообще от твоего кода глаза режет…

  

4uvak

14 — 23.10.12 — 11:35

(13)Понимаешь если в правилах выгрузки данных, я выбираю объект выборки «РеализацияТоваровУслуг», то выгрузка проходит, но количество документов остается прежним и поля заполнены лишь те которые указал, если объект выборки из правил выгрузки данных удаляю то ругается на ошибку. А что с кодом?

  

Redkiy

15 — 23.10.12 — 11:47

(14) Ты между строк читаешь? Тебе предложен способ быстро (за пару минут) локализовать ошибку!

по коду: запрос надо бы свернуть, или у тебя номенклатура не повторяется?

Товары = запрос.Выполнить().Выгрузить(); // ТАКОЕ ПРОХОДИЛИ?

Здравствуйте подскажите пожалуйста, в стандартных правилах изменяю ПВД на документ «РеализацияТоваровИУслуг» убираю в объект выборки, ставлю произвольный алгоритм в способе выборке, пишу код на выборку для записи в один документ из многих. Далее пытаюсь выгрузить данные по данному правилу но обработка выдает ошибку. Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер ‘1’) Проверяя в конфигураторе что не понравилось, обнаружил что проблема как раз в том что не указал в ПВД объект выборки. Кто сталкивался подскажите как с этим боролись

Что передаешь в ПКО? Давай кусок кода.

Проблема заключается не в коде, а в стандартной обработке ОбменДаннымиXML там в процедуре ВыполнитьВыгрузкуИзмененныхДанныхДляУзлаОбмена Есть такой кусочек кода Для Каждого СтрокаПравилаВыгрузки Из ВременныйМассивПравилВыгрузкиДанных Цикл        КонецЦикла; Вот тут то и возникает ошибка при поиске Типа объекта выборки.

Судя но коду, ты пытаешься создать один док из всех по условию НаличиеДокументов = ЛОЖЬ.

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

поставь условие проверки на вшивость СтрокаПравилаВыгрузки.ОбъектВыборки

Знать бы где Массив уже приходит в процедуру

Да к тому же, менять стандартный код обработки не хочется, может кто знает как можно ее обмануть?

Создай новое ПКО РеализацияТоваровИУслуг_. Начинай с малого — переноси реквизиты постепенно, сначала перенеси только дату, получится — добавляй следующие. Т.к. ссылку не передаешь в ПКО отключи поиск по GUID, поиск по реквизиту Дата. А вообще от твоего кода глаза режет…

Понимаешь если в правилах выгрузки данных, я выбираю объект выборки «РеализацияТоваровУслуг», то выгрузка проходит, но количество документов остается прежним и поля заполнены лишь те которые указал, если объект выборки из правил выгрузки данных удаляю то ругается на ошибку. А что с кодом?

Ты между строк читаешь? Тебе предложен способ быстро (за пару минут) локализовать ошибку! по коду: запрос надо бы свернуть, или у тебя номенклатура не повторяется?

Тэги: 1С 8

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

И опять конвертация данных

Я

4uvak

23.10.12 — 08:55

Здравствуйте подскажите пожалуйста, в стандартных правилах изменяю ПВД на документ «РеализацияТоваровИУслуг» убираю в объект выборки, ставлю произвольный алгоритм в способе выборке, пишу код на выборку для записи в один документ из многих. Далее пытаюсь выгрузить данные по данному правилу но обработка выдает ошибку.

Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер ‘1’)

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

vmv

1 — 23.10.12 — 08:57

я бросил курить

Нуф-Нуф

2 — 23.10.12 — 08:57

(1) красава

4uvak

3 — 23.10.12 — 08:57

(1)я тоже, не помогло

Redkiy

4 — 23.10.12 — 08:59

Что передаешь в ПКО?

Давай кусок кода.

4uvak

5 — 23.10.12 — 09:02

Запрос = Новый Запрос;

Запрос.текст = «ВЫБРАТЬ

              |    РеализацияТоваровУслугТовары.АкцизВидОперацииРеализации,

              |    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,

              |    РеализацияТоваровУслугТовары.Количество,

              |    РеализацияТоваровУслугТовары.Коэффициент,

              |    РеализацияТоваровУслугТовары.НДСВидОперацииРеализации,

              |    РеализацияТоваровУслугТовары.Номенклатура,

              |    РеализацияТоваровУслугТовары.СтавкаАкциза,

              |    РеализацияТоваровУслугТовары.СтавкаНДС,

              |    РеализацияТоваровУслугТовары.Сумма,

              |    РеализацияТоваровУслугТовары.СуммаАкциза,

              |    РеализацияТоваровУслугТовары.СуммаНДС,

              |    РеализацияТоваровУслугТовары.Цена

              |ИЗ

              |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары

              |ГДЕ

              |    РеализацияТоваровУслугТовары.Ссылка.НаличиеДокументов = ЛОЖЬ»;

Выборка = запрос.Выполнить().Выбрать();

ТаблицаДанные = Новый ТаблицаЗначений;

ТаблицаДанные.Колонки.Добавить(«Организация», Новый ОписаниеТипов(«СправочникСсылка.Организации»));

ТаблицаДанные.Колонки.Добавить(«ВидОперации», Новый ОписаниеТипов(«ПеречислениеСсылка.ВидыОперацийРеализацияТоваров»));

ТаблицаДанные.Колонки.Добавить(«БанковскийСчетОрганизации», Новый ОписаниеТипов(«СправочникСсылка.БанковскиеСчета»));

ТаблицаДанные.Колонки.Добавить(«ВалютаДокумента», Новый ОписаниеТипов(«СправочникСсылка.Валюты»));

ТаблицаДанные.Колонки.Добавить(«Склад», Новый ОписаниеТипов(«СправочникСсылка.Склады»));

ТаблицаДанные.Колонки.Добавить(«СуммаДокумента», Новый ОписаниеТипов(«Число»));

ТаблицаДанные.Колонки.Добавить(«Товары», Новый ОписаниеТипов(«ТаблицаЗначений»));

                                                                                     

Товары = Новый ТаблицаЗначений();

Товары.Колонки.Добавить(«АкцизВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыОперацийОблагаемыхАкцизом»));

Товары.Колонки.Добавить(«ЕдиницаИзмерения», Новый ОписаниеТипов(«СправочникСсылка.КлассификаторЕдиницИзмерения»));

Товары.Колонки.Добавить(«Количество», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Коэффициент», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«НДСВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыРеализации»));

Товары.Колонки.Добавить(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»));

Товары.Колонки.Добавить(«СтавкаАкциза», Новый ОписаниеТипов(«СправочникСсылка.СтавкиАкциза»));

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

Товары.Колонки.Добавить(«Сумма», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаАкциза», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаНДС», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Цена», Новый ОписаниеТипов(«Число»));

Пока Выборка.Следующий() Цикл

   СтрокаТоваров = Товары.Добавить();

   СтрокаТоваров.АкцизВидОперацииРеализации = Выборка.АкцизВидОперацииРеализации;

   СтрокаТоваров.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;

   СтрокаТоваров.Количество = Выборка.Количество;

   СтрокаТоваров.Коэффициент = Выборка.Коэффициент;

   СтрокаТоваров.НДСВидОперацииРеализации = Выборка.НДСВидОперацииРеализации;

   СтрокаТоваров.Номенклатура = Выборка.Номенклатура;

   СтрокаТоваров.СтавкаАкциза = Выборка.СтавкаАкциза;

   СтрокаТоваров.СтавкаНДС = Выборка.СтавкаНДС;

   СтрокаТоваров.Сумма = Выборка.Сумма;

   СтрокаТоваров.СуммаАкциза = Выборка.СуммаАкциза;

   СтрокаТоваров.СуммаНДС = Выборка.СуммаНДС;

   СтрокаТоваров.Цена = Выборка.Цена;

КонецЦикла;

Организация = Справочники.Организации.НайтиПоКоду(«000000001»);

НоваяСтрокаДанные = ТаблицаДанные.Добавить();

НоваяСтрокаДанные.Организация = Организация;

НоваяСтрокаДанные.СуммаДокумента = Товары.Итог(«Сумма»);

НоваяСтрокаДанные.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;

НоваяСтрокаДанные.БанковскийСчетОрганизации = Организация.ОсновнойБанковскийСчет;

НоваяСтрокаДанные.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду(«398»);

НоваяСтрокаДанные.Товары = Товары;

//ВыгрузитьПоПравилу(ИсходящиеДанные,, ,,»ПКО»);

ВыборкаДанных = ТаблицаДанные;

4uvak

6 — 23.10.12 — 09:06

(4)Проблема заключается не в коде, а в стандартной обработке ОбменДаннымиXML там в процедуре

ВыполнитьВыгрузкуИзмененныхДанныхДляУзлаОбмена

Есть такой кусочек кода

Для Каждого СтрокаПравилаВыгрузки Из ВременныйМассивПравилВыгрузкиДанных Цикл

           

           МетаданныеПВД = Метаданные.НайтиПоТипу(СтрокаПравилаВыгрузки.ОбъектВыборки);

           МассивВыгружаемыхМетаданных.Добавить(МетаданныеПВД);

           

       КонецЦикла;

Вот тут то и возникает ошибка при поиске Типа объекта выборки.

Redkiy

7 — 23.10.12 — 09:10

Судя но коду, ты пытаешься создать один док из всех по условию НаличиеДокументов = ЛОЖЬ.

4uvak

8 — 23.10.12 — 09:10

(7)Так и есть

vmv

9 — 23.10.12 — 09:11

Процедура СоздатьКолонкиТаблицы()

ТаблицаДанные = Новый ТаблицаЗначений;

ТаблицаДанные.Колонки.Добавить(«Организация», Новый ОписаниеТипов(«СправочникСсылка.Организации»));

ТаблицаДанные.Колонки.Добавить(«ВидОперации», Новый ОписаниеТипов(«ПеречислениеСсылка.ВидыОперацийРеализацияТоваров»));

ТаблицаДанные.Колонки.Добавить(«БанковскийСчетОрганизации», Новый ОписаниеТипов(«СправочникСсылка.БанковскиеСчета»));

ТаблицаДанные.Колонки.Добавить(«ВалютаДокумента», Новый ОписаниеТипов(«СправочникСсылка.Валюты»));

ТаблицаДанные.Колонки.Добавить(«Склад», Новый ОписаниеТипов(«СправочникСсылка.Склады»));

ТаблицаДанные.Колонки.Добавить(«СуммаДокумента», Новый ОписаниеТипов(«Число»));

ТаблицаДанные.Колонки.Добавить(«Товары», Новый ОписаниеТипов(«ТаблицаЗначений»));

                                                                                     

Товары = Новый ТаблицаЗначений();

Товары.Колонки.Добавить(«АкцизВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыОперацийОблагаемыхАкцизом»));

Товары.Колонки.Добавить(«ЕдиницаИзмерения», Новый ОписаниеТипов(«СправочникСсылка.КлассификаторЕдиницИзмерения»));

Товары.Колонки.Добавить(«Количество», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Коэффициент», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«НДСВидОперацииРеализации», Новый ОписаниеТипов(«СправочникСсылка.ВидыРеализации»));

Товары.Колонки.Добавить(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»));

Товары.Колонки.Добавить(«СтавкаАкциза», Новый ОписаниеТипов(«СправочникСсылка.СтавкиАкциза»));

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

Товары.Колонки.Добавить(«Сумма», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаАкциза», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«СуммаНДС», Новый ОписаниеТипов(«Число»));

Товары.Колонки.Добавить(«Цена», Новый ОписаниеТипов(«Число»));

КанецПродураков

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

vmv

10 — 23.10.12 — 09:12

(6) поставь условие проверки на вшивость

СтрокаПравилаВыгрузки.ОбъектВыборки

4uvak

11 — 23.10.12 — 09:14

(10)Знать бы где Массив уже приходит в процедуру

4uvak

12 — 23.10.12 — 09:18

(10)Да к тому же, менять стандартный код обработки не хочется, может кто знает как можно ее обмануть?

Redkiy

13 — 23.10.12 — 11:14

Создай новое ПКО РеализацияТоваровИУслуг_.

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

Т.к. ссылку не передаешь в ПКО отключи поиск по GUID, поиск по реквизиту Дата.

А вообще от твоего кода глаза режет…

4uvak

14 — 23.10.12 — 11:35

(13)Понимаешь если в правилах выгрузки данных, я выбираю объект выборки «РеализацияТоваровУслуг», то выгрузка проходит, но количество документов остается прежним и поля заполнены лишь те которые указал, если объект выборки из правил выгрузки данных удаляю то ругается на ошибку. А что с кодом?

  

Redkiy

15 — 23.10.12 — 11:47

(14) Ты между строк читаешь? Тебе предложен способ быстро (за пару минут) локализовать ошибку!

по коду: запрос надо бы свернуть, или у тебя номенклатура не повторяется?

Товары = запрос.Выполнить().Выгрузить(); // ТАКОЕ ПРОХОДИЛИ?

Здравствуйте подскажите пожалуйста, в стандартных правилах изменяю ПВД на документ «РеализацияТоваровИУслуг» убираю в объект выборки, ставлю произвольный алгоритм в способе выборке, пишу код на выборку для записи в один документ из многих. Далее пытаюсь выгрузить данные по данному правилу но обработка выдает ошибку. Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер ‘1’) Проверяя в конфигураторе что не понравилось, обнаружил что проблема как раз в том что не указал в ПВД объект выборки. Кто сталкивался подскажите как с этим боролись

Что передаешь в ПКО? Давай кусок кода.

Проблема заключается не в коде, а в стандартной обработке ОбменДаннымиXML там в процедуре ВыполнитьВыгрузкуИзмененныхДанныхДляУзлаОбмена Есть такой кусочек кода Для Каждого СтрокаПравилаВыгрузки Из ВременныйМассивПравилВыгрузкиДанных Цикл        КонецЦикла; Вот тут то и возникает ошибка при поиске Типа объекта выборки.

Судя но коду, ты пытаешься создать один док из всех по условию НаличиеДокументов = ЛОЖЬ.

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

поставь условие проверки на вшивость СтрокаПравилаВыгрузки.ОбъектВыборки

Знать бы где Массив уже приходит в процедуру

Да к тому же, менять стандартный код обработки не хочется, может кто знает как можно ее обмануть?

Создай новое ПКО РеализацияТоваровИУслуг_. Начинай с малого — переноси реквизиты постепенно, сначала перенеси только дату, получится — добавляй следующие. Т.к. ссылку не передаешь в ПКО отключи поиск по GUID, поиск по реквизиту Дата. А вообще от твоего кода глаза режет…

Понимаешь если в правилах выгрузки данных, я выбираю объект выборки «РеализацияТоваровУслуг», то выгрузка проходит, но количество документов остается прежним и поля заполнены лишь те которые указал, если объект выборки из правил выгрузки данных удаляю то ругается на ошибку. А что с кодом?

Ты между строк читаешь? Тебе предложен способ быстро (за пару минут) локализовать ошибку! по коду: запрос надо бы свернуть, или у тебя номенклатура не повторяется?

Тэги: 1С 8

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

Содержание:

1.       Несоответствие типов данных

2.       Ошибка внутри таблицы в запросе

3.       Причина ошибки внутри команды

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


1.    Несоответствие типов данных

Тип – это характеристика у значения, которая определяет поведение и свойства, которые имеет данное значение.

В командах внутри системы 1С параметры имеют некую специальную очерёдность, а также все параметры имеют ссылку на данные, которые связаны с каким-либо типом. В случае, когда какой-то из параметров находится в неположенном месте, либо название не соответствует типу, выполняются невозможные действия для конкретного типа – появляется сообщение, в котором говорится о несоответствии типов данных (показано на скриншоте ниже):

Сообщение об ошибке несоответствии типов

Рис. 1 Сообщение об ошибке несоответствии типов

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

2.    Ошибка внутри таблицы в запросе

Рассмотрим пример: при чтении цен из номенклатуры согласно регистру данных «Цены номенклатуры» с общего внешнего отчёта всплывает ошибка «Неоднозначное поле «ТипЦен.Номенклатура».

Ошибка Неоднозначное поле

Рис. 2 Ошибка Неоднозначное поле

Видим, что в окне с сообщением о неполадке указано место в коде, где возникла ошибка несоответствия типов: «Параметр номер «1», в строчке вида:

«РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&&ТипЦен,) КАК ЦеныНоменклатурыСрезПоследних.

Чтобы устранить данную ошибку в первую очередь откроем конфигурацию с данным отчётом и найдем внутри кода с формой строчку, которая была приведена выше:

Исправление ошибки несоответствия типов (Параметр номер 1)

Рис. 3 Исправление ошибки несоответствия типов (Параметр номер 1)

При помощи «Синтаксис-Помощника», в меню конфигурации 1С можно сверить, насколько правильно была написана команда:

Исправление ошибки несоответствия типов

Рис. 4 Проверка написания команды с помощью Синтаксис-Помощника

Согласно описанию, в команде «СрезПоследних» находится два параметра: «Отбор» и «Период».

В случае, когда параметр «Период» не был указан, в данной команде будет пустое поле, а после запятой будет написан параметр для отбора. Для нашего примера этим параметром будет «ТипЦен». После правок команда видоизменится так: «СрезПоследних(,ТипЦен = &ТипЦен).

Исправление команды СрезПоследних

Рис. 5 Исправление команды СрезПоследних

После того как команда СрезПоследних была исправлена, стоит снова сформировать отчёт из «Главное меню → Файл → Открыть». 

3.    Причина ошибки внутри команды

Имеем такую ошибку: когда происходит поиск вариантов ссылок на контрагента в отчёте системы 1С, то возникает ошибка «Несоответствие типов (параметр номер «2»), как на скриншоте ниже:

Несоответствие типов

Рис. 6 Несоответствие типов (параметр номер «2»)

В системе 1С указано то место, где произошла неполадка – это недопустимый параметр номер 2, если кликнуть на кнопку «ERROR». Чтобы её исправить нужно запустить отчёт в конфигураторе системы 1С, далее ищем форму строчки, в которой написана команда «НайтиПоСсылкам», внутри модуля.

Команда НайтиПоСсылкам внутри модуля

Рис. 7 Команда НайтиПоСсылкам внутри модуля

Можно проверить верность того, как написана команда при помощи «Синтаксис-Помощника» в панели меню системы 1С, кнопка будет выделена:

Команда НайтиПоСсылкам

Рис. 8 Команда НайтиПоСсылкам в Синтаксис-Помощнике

По описанию следует: в команде «НайтиПоСсылкам» находится такие четыре параметра: СписокСсылок, ИсключитьОбъекты, ВключитьОбъекты и ОбластьПоиска.

В параметре с названием «ОбластьПоиска» будет тип «массив», в примере указана единица. Параметр «ОбластьПоиска» — не является обязательным, так что команда, которую исправили будет иметь следующий новый вид: НайтиПоСсылкам(МассивПоиска, , , МассивИсключений).

Тип массив в НайтиПоСсылкам

Рис. 9 Тип массив в НайтиПоСсылкам

Далее запускаем наш отчёт в системе 1С.

После наших действий команда работает исправно и ошибки нет.

НайтиПоСсылкам

Рис. 10 Проверка на наличие ошибок в системе конфигурации 1С


В данной статье было рассмотрено как устранить ошибку несоответствия типов в 1С. На примерах была устранена эта ошибка для запроса и для команды. По данному алгоритму можно всегда устранять данную ошибку.

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

Айдар Фархутдинов

Ошибка по причине Несоответствие типов в 1С 8.3 связана с передачей параметров в командах и запросах 1С.

Изучив статью, вы:

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

В какой момент выходит ошибка

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

Исправляется подобная ошибка восстановлением правильной последовательности в строке параметров команды или указанием нужного типа данных Ошибка 1С Несоответствие типов наиболее часто появляется при написании запросов и при некорректном указании параметров команды.

Рассмотрим причины ее возникновения и исправление на конкретном примере.

Ошибка в таблице запроса

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

В окне сообщений уже указано место возникновения ошибки: Несоответствие типов Параметр номер «1» в строке Регистр сведений.ЦеныНоменклатуры.СрезПоследних(&&ТипЦен,) КАК ЦеныНоменклатурыСрезПоследних.

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

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1 С Предприятие:

Из описания видно, что команда СрезПоследних имеет 2 параметра:

  • Период;
  • Отбор.

Если параметр Период не указывается, место в команде остается пустым, а через запятую указывается параметр отбора, в нашем случае: ТипЦен. Исправленная команда выглядит следующим образом: СрезПоследних(, ТипЦен = &ТипЦен ).

После исправления команды запустите отчет в 1 С Бухгалтерия по кнопке Главное меню — Файл — Открыть:

Теперь отчет формируется правильно!

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

При поиске ссылок на контрагента в отчете 1С появляется ошибка Несоответствие типов (параметр номер 2):

1С сообщает место ошибки — Параметр номер 2 при нажатии кнопки ERROR.

Для ее исправления необходимо открыть отчет в Конфигураторе 1С и найти в модуле формы строчку с командой НайтиПоСсылкам.

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Из описания идно, что команда НайтиПоСсылкам имеет 4 параметра:

  • СписокСсылок;
  • ОбластьПоиска;
  • ВключитьОбъекты;
  • ИсключитьОбъекты.

Параметр ОбластьПоиска имеет тип «массив», а в нашем примере указано число 1: НайтиПоСсылкам(МассивПоиска, 1, , МассивИсключений)Область поиска — необязательный параметр, поэтому исправленная команда может выглядеть следующим образом: НайтиПоСсылкам(МассивПоиска,  ,  , МассивИсключений).

После исправления команды запустите внешний отчет в 1С по кнопке Главное меню — Файл — Открыть:

Теперь команда поиска ссылок на контрагента отрабатывает правильно.

Вот так можно получить ошибку 1С Несоответствие типов в 1С, поэтому контролируйте правильность указания параметров в запросах и командах 1С в Синтаксис-Помощнике

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

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

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

Ошибка Несоответствие типов в 1С 8.3 связана с передачей параметров в командах и запросах 1С.

Изучив статью, вы:

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

Содержание

  • Несоответствие типов в 1С 8.3
    • Ошибка в таблице запроса
    • Исправление ошибки в команде 1С

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

Исправляется подобная ошибка восстановлением правильной последовательности в строке параметров команды или указанием нужного типа данных Ошибка 1С Несоответствие типов наиболее часто появляется при написании запросов и при некорректном указании параметров команды.

Рассмотрим причины ее возникновения и исправление на конкретном примере.

Ошибка в таблице запроса

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

В окне сообщений уже указано место возникновения ошибки: Параметр номер «1» в строке Регистр сведений.ЦеныНоменклатуры.СрезПоследних(&&ТипЦен,) КАК ЦеныНоменклатурыСрезПоследних.

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

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Из описания видно, что команда СрезПоследних имеет 2 параметра:

  • Период;
  • Отбор.

Если параметр Период не указывается, место в команде остается пустым, а через запятую указывается параметр отбора, в нашем случае: ТипЦен. Исправленная команда выглядит следующим образом: СрезПоследних(, ТипЦен = &ТипЦен ).

После исправления команды запустите отчет в 1С по кнопке Главное меню — Файл — Открыть:

Теперь отчет формируется правильно!

Скачать внешний отчет Вывод списка цен номенклатуры

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

При поиске ссылок на контрагента в отчете 1С появляется ошибка Несоответствие типов (параметр номер 2):

1С сообщает место ошибки — Параметр номер 2 при нажатии кнопки ERROR.

Для ее исправления необходимо открыть отчет в Конфигураторе 1С и найти в модуле формы строчку с командой НайтиПоСсылкам.

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Из описания идно, что команда НайтиПоСсылкам имеет 4 параметра:

  • СписокСсылок;
  • ОбластьПоиска;
  • ВключитьОбъекты;
  • ИсключитьОбъекты.

Параметр ОбластьПоиска имеет тип «массив», а в нашем примере указано число 1: НайтиПоСсылкам(МассивПоиска, 1, , МассивИсключений). Область поиска — необязательный параметр, поэтому исправленная команда может выглядеть следующим образом: НайтиПоСсылкам(МассивПоиска,  ,  , МассивИсключений).

После исправления команды запустите внешний отчет в 1С по кнопке Главное меню — Файл — Открыть:

Теперь команда поиска ссылок на контрагента отрабатывает правильно.

Скачать внешний отчет Поиск ссылок на контрагента

Вот так можно получить ошибку 1С Несоответствие типов в 1С, поэтому контролируйте правильность указания параметров в запросах и командах 1С в Синтаксис-Помощнике!

См. также:

  • Неоднозначное поле в запросе
  • Исправление технических ошибок при работе с 1С:Бухгалтерия: для начинающих и опытных пользователей
  • Метод объекта не обнаружен
  • Неизвестный идентификатор формы
  • Переменная не определена

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

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

или

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

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

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

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

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

1) у меня сейчас получается, что данные из самописной выгружаются и в упп загружаются, но файл обмена не чистится и номера сообщения сейчас:
В самописной: номер отправленного 4 номер принятого 0
В УПП: номер отправленного 0 номер принятого 4

То есть после загрузки он не отправляет сообщение, что загрузил их

Макет с пустыми правилами обмена создал. Cценарии синхроинзации данных тоже не помогают.

2) Попытался сделать настройку в УПП через прочий обмен. Выгрузка квитанции происходит, но загрузка не идет по нему. падает на
Ошибка при загрузке данных: {Обработка.ОбменДаннымиXML.МодульОбъекта(5898)}: Ошибка при вызове метода контекста (Свойство): Задано неправильное имя атрибута структуры

        Для Каждого ЭлементПоиска Из  ДанныеПоискаПоТЧ.ПоляПоискаТЧ Цикл

           
            ЗначениеЭлемента = Неопределено;
            СтруктураЧтенияСвойств.Свойство(ЭлементПоиска, ЗначениеЭлемента);

           
            СтруктураПоиска.Вставить(ЭлементПоиска, ЗначениеЭлемента);     

           
        КонецЦикла;

Падает, когда элемент поиска равен “”ИндексСтрокиТаблицы,КоличествоПлан,КоличествоФакт,Номенклатура,НужнаСФ” это колонки табличной части

Почему то Правило.ПоискПоТабличнымЧастям[1].ПоляПоискаТЧ разбивает на две строки в первой Колонка1, а во второй все остальное. Получается это из правил идет?

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

в сампоиснйо конфе в обработке КонвертацияОбъектовИнформационныхБаз в процедуре ПрочитатьДанныеПоОбмену есть строка

УдалитьРегистрациюИзменений  = одАтрибут(ФайлОбмена, ТипБулево, «УдалитьРегистрациюИзменений»);

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

я попробовал в этой процедуре для своего узла удалять регистрацию и вроде все заработало, но не знаю на сколько это правильно

    Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда

       
        НачатьТранзакцию();
        НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, «НомерПринятого»);
        ЗафиксироватьТранзакцию();

       
        Если НомерПринятого >= ЧтениеСообщения.НомерСообщения Тогда // Номер сообщения меньше либо равен ранее принятому

           
            ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения);
            ЧтениеСообщенияВременное.СообщениеБылоПринятоРанее = Истина;
            ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное);

           
            ВызватьИсключение НСтр(«ru = ‘Сообщение обмена было принято ранее’»);
        КонецЕсли;

       
        УдалитьРегистрациюИзменений = УдалитьРегистрациюИзменений И Не ВосстановленаРезервнаяКопия;

       
        //++РС
        ЕСли УзелОбменаПолучатель.Код = «ГУ» Тогда
             УдалитьРегистрациюИзменений=Истина;
        КонецЕсли;
        //—

02.07.2018, 11:35

#1

Марочка98 вне форума


Гость форума


По умолчанию Несоответствие типов (параметр номер ‘1’)

Здравствуйте, помогите пожалуйста с проблемой.
У меня внешняя обработка, загрузка xml файла в дерево значений, и выдает ошибку {Обработка.Обработка1.Форма .Форма.Форма(37)}: Ошибка при вызове метода контекста (УстановитьСтроку)
Чтение.УстановитьСтроку(Те кстXML);
по причине:
Несоответствие типов (параметр номер ‘1’)
Что нужно сделать?? Я начинающий программист в 1с, и поэтому не очень сильна в этом.

Вот полностью мой код модуля.

&НаКлиенте
Процедура Файл(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДи� �логаВыбораФайла.Открытие);
Диалог.Заголовок = «Выбор документа»;
Диалог.Фильтр = «Документы XML (*.xml, *.xdr, *.xsd, *.xsl)|*.xml;*.xdr;*.xsd;*.xsl|Все файлы|*.*|»;
Если Диалог.Выбрать() Тогда
ТекстXML.Прочитать(Диалог.По лноеИмяФайла);
Документ = ТекстXML.ПолучитьТекст();
Заголовок = «Просмотр XML-документа: » + Диалог.ПолноеИмяФайла;

КонецЕсли;

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

&НаКлиенте
Процедура КнИмпорт(Команда)
Если НЕ ПустаяСтрока(ТекстXML) Тогда
Дерево = Импорт1();

Если Объект.Дерево.Строки.Колич� �ство() > 0 Тогда
ЭлементДерево = ТекстXML.Объект.Дерево;
ЭлементДерево.СоздатьКоло� �ки();
ЭлементДерево.Колонки.Удал ить(ЭлементДерево.Колонки[«Атрибуты»]);

КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция Импорт1() Экспорт
Чтение = Новый ЧтениеXML();
Чтение.УстановитьСтроку(Те кстXML);
ДеревоЗначений = Новый ДеревоЗначений();

ДеревоЗначений.Колонки.Доб авить(«Элемент»);
ДеревоЗначений.Колонки.Доб авить(«Текст»);
ДеревоЗначений.Колонки.Доб авить(«Атрибуты»);
Корень = ДеревоЗначений.Строки.Доба вить();
Корень.Элемент = Чтение.Имя;
Рекурсия(Корень, Чтение);
Возврат ДеревоЗначений;
КонецФункции
Процедура Рекурсия(СтрокаДерева, Чтение)
Если Чтение.КоличествоАтрибуто� �() > 0 Тогда
АтрибутыСоответствие = Новый Соответствие();
Пока Чтение.ПрочитатьАтрибут() Цикл
АтрибутыСоответствие.Вста� �ить(Чтение.Имя, Чтение.Значение);
КонецЦикла;
СтрокаДерева.Атрибуты = АтрибутыСоответствие;
КонецЕсли;
//Состояние(Чтение.Имя);
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Прервать;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
СтрокаДерева.Текст = Чтение.Значение;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Дочерний = СтрокаДерева.Строки.Добави ть();
Дочерний.Элемент = Чтение.Имя;
Рекурсия(Дочерний, Чтение);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура Дерево1ПриАктивизацииСтро� �и(Элемент)
Объект.Атрибуты.Очистить();
Данные = Элемент.ТекущиеДанные;
Если Данные <> Неопределено Тогда
АтрибутыДерева = Данные.Атрибуты;
Если ТипЗнч(АтрибутыДерева) = Тип(«Соответствие») Тогда
Для каждого АтрибутДерева из АтрибутыДерева Цикл
СтрокаТаблицы = Объект.Атрибуты.Добавить();
СтрокаТаблицы.Атрибут = АтрибутДерева.Ключ;
СтрокаТаблицы.ЗначениеАтр� �бута = АтрибутДерева.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Дерево1Выбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОткрытьЗначение(Выбранная� �трока.Текст);
КонецПроцедуры

&НаКлиенте
Процедура АтрибутыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОткрытьЗначение(Выбранная� �трока.ЗначениеАтрибута);

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

Процедура ОчиститьТаблицы() Экспорт
Объект.Дерево.Строки.Очист� �ть();
Объект.Дерево.Колонки.Очис� �ить();
Объект.Атрибуты.Очистить();
КонецПроцедуры


11.07.2018, 05:59

#2

FraerFFSG вне форума


Пришел за помощью


По умолчанию Re: Несоответствие типов (параметр номер ‘1’)

Цитата Сообщение от Марочка98
Посмотреть сообщение

Здравствуйте, помогите пожалуйста с проблемой.
У меня внешняя обработка, загрузка xml файла в дерево значений, и выдает ошибку {Обработка.Обработка1.Форма .Форма.Форма(37)}: Ошибка при вызове метода контекста (УстановитьСтроку)
Чтение.УстановитьСтроку(Те кстXML);
по причине:
Несоответствие типов (параметр номер ‘1’)
Что нужно сделать?? Я начинающий программист в 1с, и поэтому не очень сильна в этом.

Вот полностью мой код модуля.

&НаКлиенте
Процедура Файл(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДи� �логаВыбораФайла.Открытие);
Диалог.Заголовок = «Выбор документа»;
Диалог.Фильтр = «Документы XML (*.xml, *.xdr, *.xsd, *.xsl)|*.xml;*.xdr;*.xsd;*.xsl|Все файлы|*.*|»;
Если Диалог.Выбрать() Тогда
ТекстXML.Прочитать(Диалог.По лноеИмяФайла);
Документ = ТекстXML.ПолучитьТекст();
Заголовок = «Просмотр XML-документа: » + Диалог.ПолноеИмяФайла;

КонецЕсли;

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

&НаКлиенте
Процедура КнИмпорт(Команда)
Если НЕ ПустаяСтрока(ТекстXML) Тогда
Дерево = Импорт1();

Если Объект.Дерево.Строки.Колич� �ство() > 0 Тогда
ЭлементДерево = ТекстXML.Объект.Дерево;
ЭлементДерево.СоздатьКоло� �ки();
ЭлементДерево.Колонки.Удал ить(ЭлементДерево.Колонки[«Атрибуты»]);

КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция Импорт1() Экспорт
Чтение = Новый ЧтениеXML();
Чтение.УстановитьСтроку(Те кстXML);
ДеревоЗначений = Новый ДеревоЗначений();

ДеревоЗначений.Колонки.Доб авить(«Элемент»);
ДеревоЗначений.Колонки.Доб авить(«Текст»);
ДеревоЗначений.Колонки.Доб авить(«Атрибуты»);
Корень = ДеревоЗначений.Строки.Доба вить();
Корень.Элемент = Чтение.Имя;
Рекурсия(Корень, Чтение);
Возврат ДеревоЗначений;
КонецФункции
Процедура Рекурсия(СтрокаДерева, Чтение)
Если Чтение.КоличествоАтрибуто� �() > 0 Тогда
АтрибутыСоответствие = Новый Соответствие();
Пока Чтение.ПрочитатьАтрибут() Цикл
АтрибутыСоответствие.Вста� �ить(Чтение.Имя, Чтение.Значение);
КонецЦикла;
СтрокаДерева.Атрибуты = АтрибутыСоответствие;
КонецЕсли;
//Состояние(Чтение.Имя);
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Прервать;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
СтрокаДерева.Текст = Чтение.Значение;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Дочерний = СтрокаДерева.Строки.Добави ть();
Дочерний.Элемент = Чтение.Имя;
Рекурсия(Дочерний, Чтение);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура Дерево1ПриАктивизацииСтро� �и(Элемент)
Объект.Атрибуты.Очистить();
Данные = Элемент.ТекущиеДанные;
Если Данные <> Неопределено Тогда
АтрибутыДерева = Данные.Атрибуты;
Если ТипЗнч(АтрибутыДерева) = Тип(«Соответствие») Тогда
Для каждого АтрибутДерева из АтрибутыДерева Цикл
СтрокаТаблицы = Объект.Атрибуты.Добавить();
СтрокаТаблицы.Атрибут = АтрибутДерева.Ключ;
СтрокаТаблицы.ЗначениеАтр� �бута = АтрибутДерева.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Дерево1Выбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОткрытьЗначение(Выбранная� �трока.Текст);
КонецПроцедуры

&НаКлиенте
Процедура АтрибутыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОткрытьЗначение(Выбранная� �трока.ЗначениеАтрибута);

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

Процедура ОчиститьТаблицы() Экспорт
Объект.Дерево.Строки.Очист� �ть();
Объект.Дерево.Колонки.Очис� �ить();
Объект.Атрибуты.Очистить();
КонецПроцедуры

Поставить бряку на
Чтение.УстановитьСтроку(Те кстXML);

И посмотреть Shift+F9 выделив Те кстXML — Что же скрывается под этой переменной.


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

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

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

Планшет

Приглашаем на
бесплатный вебинар!

06 июня в 11:00 мск

1 час

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


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

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

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

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

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


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

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

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

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

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

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

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

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

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

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

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста найтипореквизиту неверно указан реквизит
  • Ошибка при вызове метода контекста значениевреквизитформы параметр 2
  • Ошибка при вызове метода контекста найтипокоду 1с
  • Ошибка при вызове метода контекста значениевреквизитформы дерево значений
  • Ошибка при вызове метода контекста значениевданныеформы