Добавление данных в существующую временную таблицу — использование и проблемы
Начиная с версии платформы 8.3.25, разработчики расширили функционал работы с временными таблицами. Теперь можно во временную таблицу добавлять новые строки через «ДОБАВИТЬ». Это круто, подумал я, и решил немедленно воспользоваться такой возможностью.
Итак, новая фича работает только, если добавление происходит используя данные самой базы.
Если же хочешь добавить свою запись, то выскакивает ошибка «Тип устанавливаемого значения не соответствует типу поля временной таблицы. …». Хотя в параметры запроса были переданы значения с типами аналогичными измерениям и ресурсам регистра сведений.
В приложенной обработке реализован обход проблемы с добавлением своей произвольной строки. Проблема наблюдается в версии платформы 8.3.25.1445, возможно, в новых версиях платформы это исправят.
- Описание
- Подробнее
Описание
Начиная с версии платформы 8.3.25 расширили функционал работы с временными таблицами. Теперь можно во временную таблицу добавлять новые строки через "ДОБАВИТЬ". Это круто, подумал я, и решил немедленно воспользоваться такой возможностью.
У меня был алгоритм, который заполнял некий регистр сведений и при этом использовал данные этого регистра, чтоб просчитать новую запись для него же. Запись в регистр — это НЕ очень производительная процедура. В попытках отказаться от поштучной записи в этот регистр, используя таблицу значений не увенчались успехом, т.к. при большом количестве циклов поиска нужных данных из этой таблицы значений так же приводили к падению производительности. И тут бац и 1С добавляет такую полезную фичу.
В какой-то момент я решился отрефакторить данный алгоритм. Каково же было разочарование, когда потратив надцать часов, добавление новой записи во временную таблицу мне выдало: "Тип устанавливаемого значения не соответствует типу поля временной таблицы. …". И тут я провалился ещё на надцать часов, чтоб найти обходные пути.
Итак, новая фича работает только, если добавление происходит используя данные самой базы, как это описано в зазеркалье:

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

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

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

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