«Значение недопустимого типа» в 1С: сервер ни при чём, чинится в коде
Сообщение «Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа» появляется, когда код 1С отправляет через границу клиент-сервер то, что платформа не умеет упаковать: объект справочника, результат запроса, форму, COM-объект. Сервер и сеть тут ни при чём. Исправляется правкой вызова: вместо объекта передают ссылку, структуру или таблицу значений.
🎬 Закрытие месяца и кнопка «Загрузить выписку»
Конец месяца. Бухгалтер оптовой компании открывает внешнюю обработку загрузки банковских выписок, нажимает «Загрузить» и вместо заполненной таблицы видит красное окно с той самой ошибкой. Накануне базу перенесли на новый сервер, поэтому подозрение сразу падает на него. Админ проверяет сеть, перезапускает службу сервера 1С, добавляет оперативной памяти. Ошибка остаётся, а бухгалтерия тем временем вносит поступления вручную.
Дело в том, что сервер её не создавал. Сообщение формирует платформа в момент упаковки данных для передачи: с клиента на сервер или обратно. Переезд просто совпал по времени. Вместе с ним обычно обновляют конфигурацию, подключают расширение или меняют тип клиента, и любое из этих действий запускает код, который раньше не выполнялся.
🔍 Что платформа не умеет передавать
Управляемое приложение 1С делит код на клиентский и серверный контекст. Всё, что пересекает границу, то есть параметры серверной процедуры и возвращаемые значения, проходит сериализацию: платформа превращает данные в поток и собирает заново на другой стороне. Часть типов в этот поток не помещается.
Свободно проходят число, строка, дата, булево, ссылки на объекты базы, перечисления, а также структуры, массивы, соответствия, списки значений и таблицы значений, если внутри лежат такие же допустимые значения. Вызов ломают:
- ✓объект справочника или документа (СправочникОбъект, ДокументОбъект), который серверная функция вернула клиенту или клиентская процедура отправила на сервер как есть;
- ✓результат запроса и выборка из него;
- ✓COM-объект, ЧтениеXML, ЗаписьXML, файловые потоки;
- ✓форма (ЭтаФорма) или её элемент, переданные параметром из клиентского кода в серверный вызов;
- ✓структура, массив или таблица значений, в одной из ячеек которой лежит что-то из этого списка.
Последний случай ловят дольше всех. Сама структура допустима, виноват вложенный элемент, а платформа сообщает о недопустимом типе, но не всегда называет ключ или колонку. Программист смотрит на параметр, видит «Структура» и не понимает, что не так. Типичный пример: клиентская процедура вызывает серверную функцию получения документа и в ответ ждёт ДокументОбъект, хотя вернуть можно только ссылку.
📦 Откуда такой код берётся в рабочей базе
Чаще всего из таких источников:
- ✓обработка, написанная под обычное приложение, где клиента и сервера как отдельных контекстов нет и объект можно носить между процедурами как угодно; её перенесли в управляемую форму копированием;
- ✓расширение, которое перехватывает процедуру типовой конфигурации и добавляет в вызов параметр с объектом;
- ✓быстрая правка «чтобы работало быстрее»: программист вынес заполнение таблицы на сервер и вместе с ним перенёс объект, который обратно клиенту уже не отдать.
Поэтому ошибка и не показывала себя раньше: код работал в том контексте, для которого его писали, и перестал, когда его перенесли в другой.
💸 Во сколько обходится поиск не там
Пока команда ищет виноватого среди железа, загрузка не работает. Выписки вносят руками, а ближе к сроку сдачи отчётности каждый час на счету. Это первая цена. Вторая считается в рублях: системный администратор по нашей ставке стоит 3800 руб/час, и рабочий день диагностики сети, перезапусков и проверок памяти обходится в 30 400 руб. После него ошибка остаётся на месте, потому что её не было ни в сети, ни в памяти.
Если дальше заказывают более мощный сервер «на всякий случай», к этим деньгам добавляется ежемесячная плата за ресурсы, которые ничего не исправили. Поэтому первый вопрос при такой ошибке звучит так: что именно передаёт код, а не как быстро работает сервер.
🧪 Как отличить эту ошибку от настоящих проблем сервера
Сбои инфраструктуры выглядят иначе. Сравните симптомы.
| Что видите | Откуда берётся | Поможет ли замена сервера | Кто разбирается |
|---|---|---|---|
| «Значение недопустимого типа» при вызове серверной процедуры | Код передаёт объект, который нельзя упаковать | Нет | Программист 1С |
| Пользователей выбрасывает из базы, пишет о потере соединения | Сеть, падение рабочего процесса rphost, нехватка памяти | Иногда, если дело в ресурсах | Системный администратор |
| Не удаётся подключиться к серверу 1С | Остановлена служба, закрыт порт, неверно указан кластер | Нет, хватит настройки | Системный администратор |
| Закрытие месяца или тяжёлый отчёт идут долго, но завершаются | Мало ядер или памяти, медленный диск, блокировки | Да, если упёрлись в ресурсы | Администратор вместе с программистом |
Главный признак ошибки кода: она воспроизводится у любого пользователя, в одном и том же действии, в любое время суток. Нагрузочные проблемы ведут себя иначе: они приходят вместе с пиком, например утром, когда все одновременно открывают базу.
🛠 Как найти вызов по шагам
- ✓В окне с ошибкой нажмите «Подробно» и перепишите стек вызова: в нём указаны модуль и номер строки. Нередко этого хватает.
- ✓Если стека нет или он ведёт в общий модуль, воспроизведите ошибку на копии базы в Конфигураторе и включите пункт «Остановка по ошибке» в меню «Отладка».
- ✓Когда отладчик остановится на строке вызова, посмотрите тип каждого параметра. Тот, что значится как СправочникОбъект или РезультатЗапроса, и есть причина.
- ✓Если параметр оказался структурой или таблицей, пройдитесь по ключам и колонкам: объект спрятан в одном из значений.
- ✓Исправьте вызов и прогоните тот же сценарий. Проверьте и обратное направление: значение, которое возвращает серверная функция, проходит ту же проверку.
Если вызов лежит в типовом модуле, а не в вашей обработке, ищите свежую доработку или расширение: на копии базы отключайте расширения по одному и повторяйте сценарий.
✏️ Чем заменить недопустимый объект
- ✓Вместо объекта справочника или документа передавайте его ссылку. Серверная процедура получит объект методом ПолучитьОбъект() и сделает с ним всё нужное на своей стороне.
- ✓Результат запроса выгружайте на сервере методом Выгрузить() в таблицу значений и возвращайте её.
- ✓Клиенту нужны несколько реквизитов объекта? Соберите из них структуру.
- ✓Форму в серверный вызов не передавайте. Серверная процедура формы уже работает в её контексте и видит её реквизиты, остальное отдайте отдельными параметрами.
- ✓COM-объект, ЧтениеXML и файловые потоки создавайте, используйте и закрывайте на одной стороне, а клиенту возвращайте готовый результат.
Если форме нужен объект целиком, его кладут в реквизит формы на сервере методом ЗначениеВРеквизитФормы(). Платформа сама хранит данные формы и синхронизирует их с сервером, а в параметры вызова объект не попадает.
🖥 Где сервер всё же нужен и как это решаем мы
Железо эту ошибку не лечит, но сервер помогает её найти. Технологический журнал 1С пишет исключения (событие EXCP) вместе со стеком вызова, а включают его на самом сервере через файл logcfg.xml. Если журнал настроен заранее, при следующем сбое стек уже лежит в файле, и пользователя не нужно просить повторить действие. Настраивать лучше узко: одно событие и ограниченный срок хранения, иначе журнал разрастётся и займёт диск. Подготовить его удобно на этапе настройки сервера 1С.
Отладку лучше вести на копии базы. Её можно поднять на отдельном виртуальном сервере для 1С: остановки в отладчике не задерживают работу бухгалтерии, а правка проверяется на тех же данных.
Так выглядит наш разбор:
- ✓просим текст ошибки и стек из окна «Подробно»;
- ✓включаем на сервере технологический журнал с событием EXCP и просим пользователя повторить действие;
- ✓по стеку находим процедуру и параметр с недопустимым типом;
- ✓определяем, чей это код: типовой конфигурации, расширения или вашей обработки;
- ✓описываем правку или вносим её на копии базы и проверяем сценарий целиком.
Аренда сервера 1С у нас стартует от 1 100 ₽ в месяц за пользователя. Сисадмин и сопровождение 1С стоят 3800 руб/час, и разбор такой ошибки считается по этой ставке. Сколько часов он займёт, зависит от места вызова: правка в одной процедуре собственной обработки короткая, в типовом модуле или расширении длиннее, потому что сначала решают, как менять без потерь при обновлениях. Если после разбора вопросы к ресурсам всё же остались, сверьте конфигурацию с системными требованиями 1С.
Пришлите текст ошибки со стеком из окна «Подробно»: по нему обычно видно, в чьём коде лежит вызов и какой параметр его ломает.
❓ Частые вопросы
Что значит ошибка «Значение недопустимого типа» в 1С?
Это значит, что код 1С передал через границу клиент-сервер значение, которое платформа не может упаковать и собрать на другой стороне. Чаще всего это объект справочника или документа, результат запроса, форма или COM-объект. Допустимы примитивы, ссылки, структуры, массивы, таблицы значений и другие сериализуемые типы.
Поможет ли перезагрузка или более мощный сервер?
Нет. Ошибку создаёт код, а не нехватка ресурсов, поэтому она воспроизводится у любого пользователя в одном и том же действии, независимо от нагрузки. Перезапуск службы и добавление памяти ничего не меняют. Помогает только правка вызова: вместо объекта передают ссылку, структуру или таблицу значений.
Как найти строку, в которой возникает ошибка?
Нажмите «Подробно» в окне ошибки и возьмите из стека модуль и номер строки. Если стека нет, воспроизведите ошибку на копии базы в Конфигураторе с включённым пунктом «Остановка по ошибке» и посмотрите тип каждого параметра вызова. Параметр с типом СправочникОбъект или РезультатЗапроса и есть причина.
Сколько стоит разобрать такую ошибку?
Разбор идёт по ставке сопровождения 1С и системного администратора: 3800 руб/час. Мы снимаем стек, находим вызов и определяем, в чьём коде он лежит: типовой конфигурации, расширения или вашей обработки. Сколько часов уйдёт на правку, зависит от места вызова и от того, нужно ли менять расширение.
Почему ошибка появилась после переезда базы на сервер?
Переезд обычно совпадает по времени с обновлением конфигурации, подключением расширения или сменой клиента, и одно из этих действий запускает код, который раньше не выполнялся. Если этот код передаёт недопустимый объект, ошибка появляется сразу. Сервер ни при чём. Проверьте, что менялось в базе в последние дни.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

