Как исправить ошибку: значение не является значением объектного типа (Колонки) в

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку: значение не является значением объектного типа (Колонки) в

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38728
      Фото аватараOdineski
      Участник

        Значение не является значением объектного типа (Колонки)
        {ОбщийМодуль.ФормированиеФискальныхЧековСерверПереопределяемый.Модуль(4015)}:ОбъектыРасчетовДокументаОплаты.Колонки.Добавить(«ДокументОплаты»);
        {ОбщийМодуль.ФормированиеФискальныхЧековСерверПереопределяемый.Модуль(1843)}:ОбъектыРасчетовПоДокументамОплаты = ОбъектыРасчетовПоДокументамОплатыРазвернуто(ДокументыОплаты, ИмяКомандыПробитияЧека);
        {ОбщийМодуль.ФормированиеФискальныхЧековСервер.Модуль(682)}:ФормированиеФискальныхЧековСерверПереопределяемый
        {ОбщийМодуль.ФормированиеФискальныхЧековСервер.Модуль(598)}:Результат = ШтрихкодыУпаковокПоДокументамЗаполнены(Объект, ИмяФормы) И Результат;
        {ОбщийМодуль.ФормированиеФискальныхЧековВызовСервера.Модуль(143)}:Возврат ФормированиеФискальныхЧековСервер.ПроверкаДанныхПередФискальнойОперацией(Объект, ПараметрыПроверки);
        {ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(205)}:Возврат ФормированиеФискальныхЧековВызовСервера.ПроверкаДанныхПередФискальнойОперацией(Объект, ПараметрыПроверки);
        {ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(162)}:Если ПроверкаДанныхПередФискальнойОперацией(Форма.Объект, ПараметрыПроверки) Тогда
        {ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(178)}:ОтобразитьЧекПослеЗаписиДокумента(Истина, ДополнительныеПараметры);
        {ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(12)}:ОбработатьРежимЗаписи(СформироватьСтруктуруПараметровОбработкиОтображенияЧека(Форма, ФискальнаяОперацияЗавершение));
        {ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(32)}:ФормированиеФискальныхЧековКлиент.ОтобразитьЧек(
        {Документ.ПриходныйКассовыйОрдер.Форма.ФормаДокумента.Форма(973)}:ФормированиеФискальныхЧековКлиент.ФискальнаяОперацияОбработкаНавигационнойСсылки(

        [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

      • #38729
        bot_avaOdin — Одинэсник
        Участник

          Ошибка означает, что в строке:

          переменная ОбъектыРасчетовДокументаОплаты содержит не ТаблицаЗначений.

          Свойство Колонки есть у ТаблицаЗначений, ТабличнаяЧасть и некоторых других табличных объектов. В вашем случае там, скорее всего:

          — Неопределено;
          — Структура;
          — Массив;
          — СписокЗначений;
          — результат функции, возвращаемый не того типа;
          — данные от старой версии конфигурации.

          ## Где искать причину

          Откройте общий модуль:

          Перейдите к строке 4015 и посмотрите примерно 20-30 строк выше. Должна быть инициализация переменной примерно такого вида:

          После нее должны добавляться колонки:

          Если инициализации нет, добавьте ее перед первым обращением к .Колонки:

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

          ## Как точно определить, что находится в переменной

          Перед строкой 4015 временно добавьте:

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

          Ожидаемый результат:

          Если увидите:

          значит переменная не была инициализирована.

          Если:

          или:

          значит в коде нарушена логика формирования результата.

          ## Правильный вариант создания таблицы

          Если процедура должна формировать таблицу расчетов, блок должен выглядеть примерно так:

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

          ## Наиболее вероятная причина в вашем случае

          По стеку видно, что ошибка возникает при фискализации приходного кассового ордера:

          Далее вызывается:

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

          На практике такая ошибка чаще всего появляется в одной из следующих ситуаций.

          ### 1. В расширении остался старый код

          Конфигурацию обновили, а общий модуль:

          остался от предыдущего релиза.

          В новом релизе типовой код мог изменить:

          — тип переменной;
          — возвращаемое значение функции;
          — состав параметров;
          — порядок формирования таблицы;
          — структуру объектов расчетов;
          — состав колонок таблицы.

          В итоге одна часть кода ожидает ТаблицаЗначений, а другая передает Неопределено или Структура.

          ### 2. Расширение переопределяет типовой общий модуль

          Проверьте в конфигураторе:

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

          Если без расширения ошибка исчезает, причина точно в коде расширения.

          ### 3. Не совпадают версии основной конфигурации и расширения

          Проверьте:

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

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

          ## Что сделать в первую очередь

          ### Шаг 1. Отключить расширения

          В пользовательском режиме откройте:

          Отключите расширения, которые могут влиять на:

          — кассу;
          — фискальные чеки;
          — ПКО;
          — продажи;
          — подключаемое оборудование;
          — БСП;
          — формы документов.

          После этого повторите действие.

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

          ### Шаг 2. Сравнить переопределяемый модуль

          В конфигураторе сравните код:

          с текущей типовой версией.

          Особенно проверьте процедуру или функцию, в которой находится строка 4015. Нельзя копировать только отдельную строку из нового релиза. Нужно переносить весь согласованный блок процедуры.

          ### Шаг 3. Найти присваивания переменной

          В модуле выполните поиск по имени:

          Проверьте все строки, где переменной присваивается значение:

          Нужно найти место, после которого переменная перестает быть ТаблицаЗначений.

          Например, проблемным может быть такой код:

          или:

          Если Получить() возвращает Неопределено, последующее обращение к .Колонки вызовет именно вашу ошибку.

          ## Защитная проверка

          Для диагностики можно временно поставить проверку перед строкой 4015:

          Если переменная может быть Неопределено, диагностический код лучше написать так:

          ## Не следует исправлять так

          Не нужно без проверки заменять код на:

          в любом месте, где возникает ошибка.

          Это уберет исключение, но может привести к тому, что:

          — потеряются объекты расчетов;
          — чек сформируется без нужных строк;
          — не определится документ оплаты;
          — неправильно определится вид оплаты;
          — неверно рассчитается НДС;
          — чек не пройдет проверку ККТ.

          Сначала нужно понять, почему таблица оказалась не таблицей.

          ## Если ошибка появилась после обновления

          Наиболее правильное исправление:

          1. Сделать резервную копию информационной базы.
          2. Обновить основную конфигурацию до актуального релиза.
          3. Обновить БСП, если конфигурация ее использует.
          4. Обновить расширение.
          5. Выполнить проверку конфигурации.
          6. Перезапустить клиент и сервер 1С.
          7. Повторить фискализацию ПКО.

          Если модуль был изменен вручную, перенесите только собственные доработки в актуальную типовую процедуру.

          ## Если ошибка появилась после добавления собственной команды

          Если недавно добавлялась собственная команда печати или фискализации ПКО, проверьте, что в нее передается именно документ, а не форма, структура или ссылка другого типа.

          Например, для проверки перед фискализацией:

          Вызов должен выполняться для объекта документа, а не для:

          или:

          если конкретная процедура ожидает именно объект документа.

          По вашему стеку первично нужно проверять не сам ПКО, а процедуру в ФормированиеФискальныхЧековСерверПереопределяемый около строки 4015 и все места формирования переменной ОбъектыРасчетовДокументаОплаты. Ошибка находится именно в несоответствии фактического типа этой переменной ожидаемому типу ТаблицаЗначений.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С