База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку: значение не является значением объектного типа (Колонки) в
- В этой теме 1 ответ, 2 участника, последнее обновление 11 часов, 20 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
25 сентября 2026 в 10:58 #38728
Значение не является значением объектного типа (Колонки)
{ОбщийМодуль.ФормированиеФискальныхЧековСерверПереопределяемый.Модуль(4015)}:ОбъектыРасчетовДокументаОплаты.Колонки.Добавить(«ДокументОплаты»);
{ОбщийМодуль.ФормированиеФискальныхЧековСерверПереопределяемый.Модуль(1843)}:ОбъектыРасчетовПоДокументамОплаты = ОбъектыРасчетовПоДокументамОплатыРазвернуто(ДокументыОплаты, ИмяКомандыПробитияЧека);
{ОбщийМодуль.ФормированиеФискальныхЧековСервер.Модуль(682)}:ФормированиеФискальныхЧековСерверПереопределяемый
{ОбщийМодуль.ФормированиеФискальныхЧековСервер.Модуль(598)}:Результат = ШтрихкодыУпаковокПоДокументамЗаполнены(Объект, ИмяФормы) И Результат;
{ОбщийМодуль.ФормированиеФискальныхЧековВызовСервера.Модуль(143)}:Возврат ФормированиеФискальныхЧековСервер.ПроверкаДанныхПередФискальнойОперацией(Объект, ПараметрыПроверки);
{ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(205)}:Возврат ФормированиеФискальныхЧековВызовСервера.ПроверкаДанныхПередФискальнойОперацией(Объект, ПараметрыПроверки);
{ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(162)}:Если ПроверкаДанныхПередФискальнойОперацией(Форма.Объект, ПараметрыПроверки) Тогда
{ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(178)}:ОтобразитьЧекПослеЗаписиДокумента(Истина, ДополнительныеПараметры);
{ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(12)}:ОбработатьРежимЗаписи(СформироватьСтруктуруПараметровОбработкиОтображенияЧека(Форма, ФискальнаяОперацияЗавершение));
{ОбщийМодуль.ФормированиеФискальныхЧековКлиент.Модуль(32)}:ФормированиеФискальныхЧековКлиент.ОтобразитьЧек(
{Документ.ПриходныйКассовыйОрдер.Форма.ФормаДокумента.Форма(973)}:ФормированиеФискальныхЧековКлиент.ФискальнаяОперацияОбработкаНавигационнойСсылки([ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]
-
25 сентября 2026 в 10:58 #38729
Ошибка означает, что в строке:
1С (Код)1ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");переменная
ОбъектыРасчетовДокументаОплатысодержит неТаблицаЗначений.Свойство
Колонкиесть уТаблицаЗначений,ТабличнаяЧастьи некоторых других табличных объектов. В вашем случае там, скорее всего:—
Неопределено;
—Структура;
—Массив;
—СписокЗначений;
— результат функции, возвращаемый не того типа;
— данные от старой версии конфигурации.## Где искать причину
Откройте общий модуль:
1С (Код)1ФормированиеФискальныхЧековСерверПереопределяемыйПерейдите к строке 4015 и посмотрите примерно 20-30 строк выше. Должна быть инициализация переменной примерно такого вида:
1С (Код)1ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;После нее должны добавляться колонки:
1С (Код)123ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");Если инициализации нет, добавьте ее перед первым обращением к
.Колонки:1С (Код)123ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");Но просто добавлять эту строку нужно только после проверки логики процедуры. Возможно, переменная должна заполняться результатом другой функции.
## Как точно определить, что находится в переменной
Перед строкой 4015 временно добавьте:
1С (Код)123456Сообщить("Тип ОбъектыРасчетовДокументаОплаты: "+ Строка(ТипЗнч(ОбъектыРасчетовДокументаОплаты)));Если ОбъектыРасчетовДокументаОплаты = Неопределено ТогдаСообщить("ОбъектыРасчетовДокументаОплаты = Неопределено");КонецЕсли;Если используется серверный общий модуль, лучше поставить точку останова и посмотреть значение переменной в отладчике.
Ожидаемый результат:
1С (Код)1ТаблицаЗначенийЕсли увидите:
1С (Код)1Неопределенозначит переменная не была инициализирована.
Если:
1С (Код)1Структураили:
1С (Код)1Массивзначит в коде нарушена логика формирования результата.
## Правильный вариант создания таблицы
Если процедура должна формировать таблицу расчетов, блок должен выглядеть примерно так:
1С (Код)1234567891011ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты",Новый ОписаниеТипов("ДокументСсылка.ПриходныйКассовыйОрдер"));ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументРасчетов",Новый ОписаниеТипов("ДокументСсылка"));Но конкретные типы колонок должны соответствовать вашей конфигурации. Если в типовом коде колонки создаются без
ОписаниеТипов, оставьте так:1С (Код)1234ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументРасчетов");## Наиболее вероятная причина в вашем случае
По стеку видно, что ошибка возникает при фискализации приходного кассового ордера:
1С (Код)1Документ.ПриходныйКассовыйОрдер.Форма.ФормаДокумента.Форма(973)Далее вызывается:
1С (Код)1ФормированиеФискальныхЧековСерверПереопределяемыйНазвание модуля с суффиксом
Переопределяемыйобычно означает, что это код расширения или переопределяемая копия типового общего модуля.На практике такая ошибка чаще всего появляется в одной из следующих ситуаций.
### 1. В расширении остался старый код
Конфигурацию обновили, а общий модуль:
1С (Код)1ФормированиеФискальныхЧековСерверПереопределяемыйостался от предыдущего релиза.
В новом релизе типовой код мог изменить:
— тип переменной;
— возвращаемое значение функции;
— состав параметров;
— порядок формирования таблицы;
— структуру объектов расчетов;
— состав колонок таблицы.В итоге одна часть кода ожидает
ТаблицаЗначений, а другая передаетНеопределеноилиСтруктура.### 2. Расширение переопределяет типовой общий модуль
Проверьте в конфигураторе:
1С (Код)123Расширения конфигурацииОбщие модулиФормированиеФискальныхЧековСерверПереопределяемыйЕсли модуль изменен в расширении, временно отключите расширение и проверьте пробитие чека в основной конфигурации.
Если без расширения ошибка исчезает, причина точно в коде расширения.
### 3. Не совпадают версии основной конфигурации и расширения
Проверьте:
— релиз конфигурации;
— релиз БСП;
— релиз расширения;
— дату последнего обновления расширения;
— наличие изменений в общих модулях, связанных с фискальными чеками.Если расширение содержит скопированный типовой код, его нужно обновить из текущей версии основной конфигурации, а не исправлять одну строку вручную.
## Что сделать в первую очередь
### Шаг 1. Отключить расширения
В пользовательском режиме откройте:
1С (Код)123АдминистрированиеПечатные формы, отчеты и обработкиРасширенияОтключите расширения, которые могут влиять на:
— кассу;
— фискальные чеки;
— ПКО;
— продажи;
— подключаемое оборудование;
— БСП;
— формы документов.После этого повторите действие.
Если ошибка пропала, включайте расширения по одному и найдите виновное.
### Шаг 2. Сравнить переопределяемый модуль
В конфигураторе сравните код:
1С (Код)1ФормированиеФискальныхЧековСерверПереопределяемыйс текущей типовой версией.
Особенно проверьте процедуру или функцию, в которой находится строка 4015. Нельзя копировать только отдельную строку из нового релиза. Нужно переносить весь согласованный блок процедуры.
### Шаг 3. Найти присваивания переменной
В модуле выполните поиск по имени:
1С (Код)1ОбъектыРасчетовДокументаОплатыПроверьте все строки, где переменной присваивается значение:
1С (Код)1ОбъектыРасчетовДокументаОплаты = ...Нужно найти место, после которого переменная перестает быть
ТаблицаЗначений.Например, проблемным может быть такой код:
1С (Код)1ОбъектыРасчетовДокументаОплаты = Неопределено;или:
1С (Код)12ОбъектыРасчетовДокументаОплаты =ОбъектыРасчетовПоДокументамОплаты.Получить(ДокументОплаты);Если
Получить()возвращаетНеопределено, последующее обращение к.Колонкивызовет именно вашу ошибку.## Защитная проверка
Для диагностики можно временно поставить проверку перед строкой 4015:
1С (Код)1234567Если ТипЗнч(ОбъектыРасчетовДокументаОплаты) <> Тип("ТаблицаЗначений") ТогдаВызватьИсключение"Ожидалась ТаблицаЗначений, получен тип: "+ Строка(ТипЗнч(ОбъектыРасчетовДокументаОплаты));КонецЕсли;ОбъектыРасчетовДокументаОплаты.Колонки.Добавить("ДокументОплаты");Если переменная может быть
Неопределено, диагностический код лучше написать так:1С (Код)12345678910Если ОбъектыРасчетовДокументаОплаты = Неопределено ТогдаВызватьИсключение"ОбъектыРасчетовДокументаОплаты не инициализирована";КонецЕсли;Если ТипЗнч(ОбъектыРасчетовДокументаОплаты) <> Тип("ТаблицаЗначений") ТогдаВызватьИсключение"Неверный тип ОбъектыРасчетовДокументаОплаты: "+ Строка(ТипЗнч(ОбъектыРасчетовДокументаОплаты));КонецЕсли;## Не следует исправлять так
Не нужно без проверки заменять код на:
1С (Код)1ОбъектыРасчетовДокументаОплаты = Новый ТаблицаЗначений;в любом месте, где возникает ошибка.
Это уберет исключение, но может привести к тому, что:
— потеряются объекты расчетов;
— чек сформируется без нужных строк;
— не определится документ оплаты;
— неправильно определится вид оплаты;
— неверно рассчитается НДС;
— чек не пройдет проверку ККТ.Сначала нужно понять, почему таблица оказалась не таблицей.
## Если ошибка появилась после обновления
Наиболее правильное исправление:
1. Сделать резервную копию информационной базы.
2. Обновить основную конфигурацию до актуального релиза.
3. Обновить БСП, если конфигурация ее использует.
4. Обновить расширение.
5. Выполнить проверку конфигурации.
6. Перезапустить клиент и сервер 1С.
7. Повторить фискализацию ПКО.Если модуль был изменен вручную, перенесите только собственные доработки в актуальную типовую процедуру.
## Если ошибка появилась после добавления собственной команды
Если недавно добавлялась собственная команда печати или фискализации ПКО, проверьте, что в нее передается именно документ, а не форма, структура или ссылка другого типа.
Например, для проверки перед фискализацией:
1С (Код)12345Сообщить("Тип объекта: " + Строка(ТипЗнч(Объект)));Если ТипЗнч(Объект) <> Тип("ДокументОбъект.ПриходныйКассовыйОрдер") ТогдаВызватьИсключение "В фискальный механизм передан неправильный объект";КонецЕсли;Вызов должен выполняться для объекта документа, а не для:
1С (Код)1Формаили:
1С (Код)1ДокументСсылкаесли конкретная процедура ожидает именно объект документа.
По вашему стеку первично нужно проверять не сам ПКО, а процедуру в
ФормированиеФискальныхЧековСерверПереопределяемыйоколо строки 4015 и все места формирования переменнойОбъектыРасчетовДокументаОплаты. Ошибка находится именно в несоответствии фактического типа этой переменной ожидаемому типуТаблицаЗначений.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.