Добавление данных в существующую временную таблицу - использование и проблемы

04.03.25

Разработка - Инструментарий разработчика

Начиная с версии платформы 8.3.25, разработчики расширили функционал работы с временными таблицами. Теперь можно во временную таблицу добавлять новые строки через "ДОБАВИТЬ". Это круто, подумал я, и решил немедленно воспользоваться такой возможностью. Итак, новая фича работает только, если добавление происходит используя данные самой базы. Если же хочешь добавить свою запись, то выскакивает ошибка "Тип устанавливаемого значения не соответствует типу поля временной таблицы. ...". Хотя в параметры запроса были переданы значения с типами аналогичными измерениям и ресурсам регистра сведений. В приложенной обработке реализован обход проблемы с добавлением своей произвольной строки. Проблема наблюдается в версии платформы 8.3.25.1445, возможно, в новых версиях платформы это исправят.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Добавление данных в существующую временную таблицу - использование и проблемы:
.epf 7,51Kb
1 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Начиная с версии платформы 8.3.25 расширили функционал работы с временными таблицами. Теперь можно во временную таблицу добавлять новые строки через "ДОБАВИТЬ". Это круто, подумал я, и решил немедленно воспользоваться такой возможностью.

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

В какой-то момент я решился отрефакторить данный алгоритм. Каково же было разочарование, когда потратив надцать часов, добавление новой записи во временную таблицу мне выдало: "Тип устанавливаемого значения не соответствует типу поля временной таблицы. ...". И тут я провалился ещё на надцать часов, чтоб найти обходные пути.

Итак, новая фича работает только, если добавление происходит используя данные самой базы, как это описано в зазеркалье:

 

 

А если в подготовленную временную таблицу:

 

 

пытаешься добавить так:

 

 

То выскакивает ошибка "Тип устанавливаемого значения не соответствует типу поля временной таблицы. ...". Хотя в параметры запроса были переданы значения с типами аналогичными измерениям и ресурсам регистра сведений. Ошибки вызывали поля НЕ ссылочного типа: число, дата, строка. Это и понятно, в параметрах запроса мы передаём значения, описание типов идут при этом лесом. Попытки выразить их в запросе ни к чему не привели. Я прошерстил кучу форумов и ресурсов, пробовал и так и сяк. В общем нашёл обходной путь как всё таки можно добавить свою строчку во временную таблицу. Единственно, не удалось справится с реквизитом с типом строка, перепробовал разные варианты, итог - строка не поддаётся. Т.е. если у вас в регистре/справочнике и т.п. есть реквизит с типом строка, то воспользоваться функцией ДОБАВИТЬ вам не удастся - будет возникать ошибка.

Прикладываю обработку, в которой реализован обход этой проблемы. Будем надеяться, что 1С решит эту проблему, и в каком-нибудь релизе платформы решит эту проблему, и можно будет нормально добавлять записи, а будет ещё лучше, если будет возможность изменять значение конкретной строки временной таблицы, а то приходится в конце расчета сворачивать строки, что так же затратно при больших объёмах данных.

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

 

 

Обработка протестирована на версии платформы: 1С:Предприятие 8.3 (8.3.25.1445).

Вступайте в нашу телеграмм-группу Инфостарт

Добавление данных в существующую временную таблицу Тип устанавливаемого значения не соответствует типу поля временной таблицы

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    54042    297    147    

271

SALE! %

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 15500 руб.

02.09.2020    235533    1286    419    

1099

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

15000 руб.

25.08.2025    31564    71    12    

81

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    32361    83    30    

107

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    45509    163    63    

200

SALE! %

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

17000 16000 руб.

10.11.2023    22373    83    42    

97

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36000 руб.

28.08.2025    4289    1    2    

4
Отзывы
2. kalyaka 1139 05.03.25 14:25 Сейчас в теме
Для решения задачи добавления во временную таблицу данных из переменных необходимо использовать в качестве источника таблицу значений с соответствующими типами колонок:
Таблица = Новый ТаблицаЗначений();
Таблица.Колонки.Добавить("Период", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата));
Таблица.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
Таблица.Колонки.Добавить("Курс", ОбщегоНазначения.ОписаниеТипаЧисло(10, 4, ДопустимыйЗнак.Неотрицательный));
Таблица.Колонки.Добавить("Кратность", ОбщегоНазначения.ОписаниеТипаЧисло(10, 0, ДопустимыйЗнак.Неотрицательный));

НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Период = ТекущаяДата();
НоваяСтрока.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
НоваяСтрока.Курс = 1;
НоваяСтрока.Кратность = 1;
Показать
triviumfan; adva; _root; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kalyaka 1139 05.03.25 13:35 Сейчас в теме
Мои изыскания на эту тему показали, что при чтении запроса не из таблицы БД типизация колонок происходит с классификатора типа по-умолчанию. Например, поле Период в примере типа "Дата" с классификатором "Дата", а при чтении из переменной становится с классификатором "Дата и время".

С числами ситуация сложнее: требуется точное совпадение по разрядам и допустимому знаку.

При добавлении данных во временную таблицу из таблицы значений также может возникает несоответствие типов из-за добавления типа Null. Тип Null добавляется в таблицу значений, которая получена выгрузкой из результата запроса или из таблицы менеджера временных таблиц.

Итог: добавление во временную таблицу возможно только по полям с полным совпадением типов и классификаторов.
triviumfan; axelerleo; +2 Ответить
2. kalyaka 1139 05.03.25 14:25 Сейчас в теме
Для решения задачи добавления во временную таблицу данных из переменных необходимо использовать в качестве источника таблицу значений с соответствующими типами колонок:
Таблица = Новый ТаблицаЗначений();
Таблица.Колонки.Добавить("Период", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата));
Таблица.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
Таблица.Колонки.Добавить("Курс", ОбщегоНазначения.ОписаниеТипаЧисло(10, 4, ДопустимыйЗнак.Неотрицательный));
Таблица.Колонки.Добавить("Кратность", ОбщегоНазначения.ОписаниеТипаЧисло(10, 0, ДопустимыйЗнак.Неотрицательный));

НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Период = ТекущаяДата();
НоваяСтрока.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
НоваяСтрока.Курс = 1;
НоваяСтрока.Кратность = 1;
Показать
triviumfan; adva; _root; +3 Ответить
3. _root 181 05.03.25 21:29 Сейчас в теме
(2) Хороший вариант, который позволяет и тип строка обрабатывать, только он для моих нужд медленнее в 5 раз, чем добавление без использования таблицы значений.
Прикрепленные файлы:
5. Avatarzorro 67 07.03.25 05:59 Сейчас в теме
А где у тебя типы совпадают? То что ты берешь код и наименование (оба строки или число-строка) в одном запросе и в другом это не значит что они одинаковые. Длины могут быть разные.


Я использовал добавить как оно вышло. Никаких проблем не встретил
6. _root 181 07.03.25 12:47 Сейчас в теме
(5) А в этом запросе ошибки и не возникает, этот запрос предоставлен в зазеркалье. Проблема возникает если тебе нужно добавить свою строку. Как это можно сделать описано в комментарии (2), но этот вариант медленней работает нежели конструкция:
ВЫБРАТЬ
	&Период КАК Период,
	&Валюта КАК Валюта,
	&Курс КАК Курс,
	&Кратность КАК Кратность
ДОБАВИТЬ ВТ_КурсВалют


Вот такая конструкция медленней в 5 раз, но при этом более универсальная:
ВЫБРАТЬ
	Таблица.Период КАК Период,
	Таблица.Валюта КАК Валюта,
	Таблица.Курс КАК Курс,
	Таблица.Кратность КАК Кратность
ДОБАВИТЬ ВТ_КурсВалют
ИЗ
	&Таблица КАК Таблица
7. Avatarzorro 67 07.03.25 16:29 Сейчас в теме
(6) через выразить приведи к нужным длинам. должно помочь
8. _root 181 08.03.25 23:28 Сейчас в теме
(7) А ты попробуй. Если почитаешь повнимательно, то увидишь, что этот вариант пробовался.
9. adva 45 05.06.25 05:29 Сейчас в теме
(6) Так медленнее может и в пять раз, но можно за раз эти же 5 строк и добавить. Надо при таких условиях сравнивать
10. _root 181 06.09.25 14:35 Сейчас в теме
(9) Однозначно, лучше использовать более универсальную конструкцию при помещении нескольких строк. Но в моём случае, нужно было добавлять по одной записи, т.к. каждая добавленная запись влияла на дальнейший расчёт.
11. triviumfan 102 15.11.25 10:26 Сейчас в теме
Печально, что нельзя таким образом создать ВТ с колонкой составного типа. Опять какой-то костыль от 1с.
12. triviumfan 102 15.11.25 13:29 Сейчас в теме
(11) Соврал, если правильно инициализировать ВТ с составным типом, то и добавление в неё будет без ошибки. Изначально я наткнулся на ошибку как в топике.
Для отправки сообщения требуется регистрация/авторизация