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

04.03.25

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

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

Файлы

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

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

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

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

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

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

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

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

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

 

 

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

 

 

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

 

 

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

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

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

 

 

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

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

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

См. также

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

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

15500 руб.

02.09.2020    227024    1233    415    

1078

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

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

14400 руб.

20.08.2024    49079    277    143    

248

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

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

9900 руб.

25.08.2025    23845    60    9    

64

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

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

22200 руб.

06.10.2023    29583    77    30    

104

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

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

16000 руб.

10.11.2023    20890    86    42    

95

Инструментарий разработчика Программист 1С v8.3 Платные (руб)

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

9500 руб.

17.05.2024    42198    152    57    

190

Инструментарий разработчика Перенос данных 1C Программист 1С v8.3 Платные (руб)

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

5000 руб.

24.09.2019    26898    22    16    

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

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

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

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

Итог: добавление во временную таблицу возможно только по полям с полным совпадением типов и классификаторов.
triviumfan; axelerleo; +2 Ответить
2. kalyaka 1138 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 64 07.03.25 05:59 Сейчас в теме
А где у тебя типы совпадают? То что ты берешь код и наименование (оба строки или число-строка) в одном запросе и в другом это не значит что они одинаковые. Длины могут быть разные.


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


Вот такая конструкция медленней в 5 раз, но при этом более универсальная:
ВЫБРАТЬ
	Таблица.Период КАК Период,
	Таблица.Валюта КАК Валюта,
	Таблица.Курс КАК Курс,
	Таблица.Кратность КАК Кратность
ДОБАВИТЬ ВТ_КурсВалют
ИЗ
	&Таблица КАК Таблица
7. Avatarzorro 64 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) Соврал, если правильно инициализировать ВТ с составным типом, то и добавление в неё будет без ошибки. Изначально я наткнулся на ошибку как в топике.
Для отправки сообщения требуется регистрация/авторизация