1с тип не определен хранилищезначения
Тип Хранилище значения может быть назначен реквизиту справочника, документа, ресурсу регистра сведений и т.д.
Восьмерка поддерживает сжатие данных, помещаемых в хранилище:
Если это были ДвоичныеДанные, то их можно восстановить из хранилища значения методом Получить и записать в файл методом Записать().
Чтобы очистить поле типа Хранилище значения, нужно присвоить ему Неопределено:
Код 1C v 8.х
Если в Хранилище значений содержались какие-то ссылки, то они не будут контролироваться при контроле ссылочной целостности (операция Удаление помеченных объектов или метод НайтиПоСсылкам).
К сожалению, 1С не содержит встроенных методов для проверки того, заполнено хранилище или нет.
Такой вариант не работает:
Код 1C v 8.х
Работает только такой вариант:
Код 1C v 8.х
Но он требует затрат времени на извлечение данных из хранилища.
Поэтому, если это критично, нужно заводить еще один флаг, который указывает, содержит ли хранилище значение.
Похожие FAQ
Еще в этой же категории
Выбрать файл и записать в реквизит типа Хранилище значений 2
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = " Выберите файл" ; Диалог.ПолноеИмяФайла = " " ; Фильтр = " DOC (*.doc)|*.doc|DOCX (*.docx)|*.docx" ; Диалог.Фильтр = Фильтр; //Диалог.МножественныйВыбор Как очистить значение, имеющее тип «Хранилище значения»? 1
РеквизитХранилище = Неопределено; Сохранить файл на диске полученный из реквизита типа хранилище значения 1
// Параметры // Хранилище – ХранилищеЗначения, которое содержит объект типа // ДвоичныеДанные с файлом для записи на диск. // ИмяФайла – Строка, содержащая полное имя файла. // ТолькоЧтение – Булево, признак установки Создать, заменить, записать файл в Хранилище Значения 1
Функция СоздатьФайлВХранилище(ЛокПолноеИмяФайла,ЛокНаименованиеЭлемента)Экспорт Попытка ЛокХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ЛокПолноеИмяФайла)); Исключение Возврат Null; КонецПопытки; ЛокСправочникХЗН = Справочники.Хран Как проверить тип значения, помещенного в реквизит имеющий тип 0
Значение = Фотография.Получить(); Если Значение Неопределено Тогда Если ТипЗнч(Значение) = Тип(" Строка" ) Тогда // Обработать строку. ИначеЕсли ТипЗнч(Значение) = Тип(" Картинка" ) Тогда // Обработать картинку. Сообщить(" Картинка" ); Посмотреть все в категории Работа с Хранилищем Значений
Работа с реквизитом типа ХранилищеЗначения имеет определенные ограничения. Как известно такой реквизит нельзя отобразить на управляемой форме ни в основной конфигурации, ни в расширении. Тренер предлагает воспользоваться базовым приемом разработки через временное хранилище.
Вопрос
Здравствуйте! В расширении создал справочник в новом справочнике добавил реквизит с типом ХранилищеЗначений. Платформа почему-то не видит этот реквизит. Если меняю тип данных, к примеру, на Число, то реквизит становиться видимым. В расширении на форме нельзя использовать реквизиты с типом данных ХранилищеЗначений?
Ответ
Добрый день! Вы имеете в виду, что реквизит с типом ХранилищеЗначения не отображается на форме? Тогда это правильно, аналогичное поведение будет и в основной конфигурации без использования расширения. Платформа в конструкторе формы показывает, что такой реквизит нельзя отобразить на форме:
Дело в том, что в таком реквизите могут храниться данные огромного размера, а управляемая форма существует и на сервере, и на клиенте. Данные большого размера из соображений производительности нет смысла передавать при клиент-серверном взаимодействии. Поэтому нужно искать обходные пути. Например, можно воспользоваться временным хранилищем. Такой прием используется при отображении на форме картинки, хранящейся в базе.
Комментарий слушателя
Система выдает ошибку, что реквизит не найден.
Ответ
Обратите внимание, что в управляемой форме реквизит Объект имеет тип ДанныеФормыСтруктура, а не СправочникОбъект. Поэтому в нем не будет вложенного реквизита с типом ХранилищеЗначения. Именно об этом сообщает платформа:
Значит, чтобы добраться до хранилища значения, нужно получить настоящий объект от такого “урезанного” типа данных:
Не могу понять логику 1С, почему с ТекущегоОбъекта сохраняется в реквизиты справочника, а напрямую в реквизит - вылетает с ошибкой. Подскажите советом, ссылкой на теорию или кодом.
P.S. Прошу не ругать что не использую функцию НачатьПомещениеФайлаНаСервер, не в ней сейчас проблема, пока тестирую со старой функцией, позже перепишу код.
Конфигурация самописная, без БСП, 1С:Предприятие 8.3 (8.3.18.1563)
(1) реквизиты с типом данных ХранилищеЗначения не доступны в данных формы. Т.е. как к реквизиту формы к нему невозможно обратиться, только через получение объекта прикладного типа. И в обработчике ПередЗаписьюНаСервере ТекущийОбъект это как раз объект, в котором уже доступен такой реквизит.
реквизиты с типом данных ХранилищеЗначения не доступны в данных формы. Т.е. как к реквизиту формы к нему невозможно обратиться, только через получение объекта прикладного типа. И в обработчике ПередЗаписьюНаСервере ТекущийОбъект это как раз объект, в котором уже доступен такой реквизит.
РеквизитФормыВЗначение значит мне поможет только? Блин ну какая то банальная задачка, а тормозится на пустом месте.
Это смотря для чего. Если прочитать их хранилища, то да.
Такое хранилище не доступно в данных формы, чтобы не гонять возможные Гб с сервера на клиент и обратно. И не занимать память.
(2) Не не, все норм, тип реквизита справочника выбран типа ХранилищеЗначения, иначе бы в обработчике ПередЗаписьюНаСервере все это не работало.
Неверно идёт работа с данными формы. Реквизит формы "Объект" (тип "ДанныеФормыСтруктура") и объект базы данных (тип "СправочникОбъект.<СправочникИмя>") - разные вещи, которые не обязаны совпадать. На это и намекает платформа, когда выдаёт ошибку об отсутствии у данных формы свойства "ФайлХранилище", его действительно нет, т.к. платформа не добавляет в данные формы реквизиты объекта с типом "ХранилищеЗначения".
СправочникИмя>В Вашем случае для корректной работы механизма лучше всего ограничиться помещением файла в связанное с формой временное хранилище без вызова немедленного сохранения:
А затем, если пользователь решит сохранить внесённые изменения (ведь он может и отказаться), перед записью на сервере установить необходимые значения в поля Объекта (ТекущийОбъект - уже "настоящий" объект, а не "ДанныеФормыСтруктура"):
Работаю с форматированным документом на форме обработке. Для сохранения изменений в нем, прочитала, что надо использовать реквизит с типом "Хранилище значений". Но я такого типа - не нахожу.
Я правильно понял задачу: в базе есть нечто, записанное в виде "ХранилищеЗначения", нужно создать обработку, которая может редактировать это нечто и сохранять изменения в базе?
Есть обработка, на форме которой надо вводить текст. После переоткрытия обработки, если были изменения в тексте, то они должны сохраняться. Для этих целей, использую реквизит с типом "ФорматированныйДокумент". Чтобы изменения в этом реквизите сохранялись, надо использовать реквизит с типом "ХранилищеЗначений", который я обнаружить не могу. Поэтому написала на форум, с просьбой помочь.
Как уже написал Lexey_, обработки ничего в базе не хранят. Определись где именно в базе будет храниться этот текст. Создай на форме реквизит типа ФорматированныйДокумент. При создании/открытии формы считывай в этот реквизит содержимое ХранилищяЗначения из базы. При закрытии формы (или командой) записывай реквизит формы в ХранилищеЗначения базы. Как считать и записать ты сама указала в .
Ну сделай форму и напиши где-нить в ПриСозданииНаСервере МоеХЗ = Новый ХранилищеЗначений; То, что он недоступен в данных формы, означает лишь, что если, скажем, у тебя есть реквизит формы, скажем, типа ДанныеФормыСтруктура, в котором, скажем, лежит объект обработки, у которой, скажем, есть реквизит типа ХЗ, то ты не сможешь сделать так:
упс, а про конструктор-то я прогнал, он в тонком клиенте не работает. но из реквизита объекта можно достать. ну ок, я так, буквоедствую
Из всего, что здесь написали, я поняла, что на форме обработки (даже встроенной в конфигурацию, а у меня она именно встроенная), нельзя создать реквизит с типом "ХранилищеЗначения". Тогда возникают вопросы: 1. Как мне сохранять изменения, введенные пользователем на форме обработки в реквизите "ФорматированныйДокумент"? 2. Может быть, создать новую константу, с типом "ХранилищеЗначения", куда будут записываться изменения и считываться?
Реквизит _формы_ в принципе нельзя сделать типа ХЗ. Только произвольный, куда можно пихнуть ХЗ. Реквизит _обработки_ тоже нельзя сделать типа ХЗ. А смысл, если обработка не хранит данные в базе? Если изменения в форматированном доке нужно для каждого пользователя отдельно сохранять, удобно использовать ХранилищеОбщихНастроек.
ты прочитала ? 1. преобразуешь свой форматированный документ в двоичные данные сперва. У тебя обработка, 2. хранить данные она не может, тебе нужно использовать тогда спецхранилище - можно справочник, можно регистр сведений с реквизитом или измерением типа ХЗ. 3. Записываешь эти двоичные данные в 2.
+ Исправила процедуру, ошибку перестал выдавать, но сохранение отредактированного текста не происходит:
а если у тебя будут разные форматированные доки или будет меняться в зависимости от условий они, тогда твоя константа не подойдет
Документ будет один и тот же, только будет меняться текст рассылки, который я и пытаюсь сохранять в ХЗ, но пока безуспешно.
а какую логику рассылки ты хочешь реализовать? я что-то подумал, что документ может меняться от условий)
Есть обработка по рассылке табелей, на форме которой задаются условия (месяц и прочее), а также текст, который получатели табелей увидят в письме при получении табеля. Так вот этот текст письма ежемесячно меняется, поэтому надо чтобы пользователи сами редактировали текст.
Этот текст письма, я и запихнула на форму в реквизит "ФорматированныйДокумент" - тип ФорматированныйДокумент.
Нет, это обработка формирует табеля в формате pdf в определенном каталоге, а затем рассылает их руководителям подразделений.
Неважно, что формируем и в каком формате. Речь идет о тексте, который получают вместе с письмом (например: "Уважаемый руководитель, добрый день!"). Именно этот текст письма, я и запихнула на форму обработки в реквизит "ФорматированныйДокумент" - тип ФорматированныйДокумент, чтобы была возможность написать вместо "Уважаемый руководитель, добрый ДЕНЬ!" - "Уважаемый руководитель, добрый ВЕЧЕР!". И если потом повторно открыть обработку, то будет сохранено последнее редактирование, т.е. будет на форме обработки "Уважаемый руководитель, добрый ВЕЧЕР!"
В пользовательском режиме наберите любой текст на форме обработки, затем закройте и снова откройте обработку. Текст сохранился?
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э rphost занимает память и грузит процессор 19
У многих возникают проблемы с rphost.exe, разного вида: rphost занимает всю память rphost грузит процессор rphost жрет память причем 1С даже на запущена, а в диспетчере следующее: ежеминутно расчет на 2-3 мегабайта. Как быть и что делат Автоматическая архивация баз 1С с использованием Cobian Backup и VBS скриптов 8
Клиент попросил настроить автоматическую архивацию баз 1С раз в три дня и выгрузку архивов на Dropbox и на FTP Сервер. Кроме 1С нужно архивировать папку с рабочими документами. Хочет - так хочет, делаем: Первым делом настроим автоматическую архивац Посмотреть все результаты поиска похожих
Еще в этой же категории
Работа с изображениями (картинками) в интерфейсе Такси 12
Рассмотрим алгоритм работы с файлами и картинками в новом интерфейсе 1С:Предприятие 8.3 "Такси". Во-первых, почему я решил написать эту статью: Новая концепция 1С - отказ от модальных окон, следовательно все методы и объекты, которые порождали о Загрузка картинок в базу 1С (сохранение в хранилище значений) 8
В теме форма: v8: Получение данных из ХралищаЗначений Bell в управляемом интерфейсе пробует сохранить выбранные картинки в базу 1С, но возникли сложности с сохранением в хранилище значений. как пример Bell приложил CF файл с мини конфигурацией, Как очистить ХранилищеЗначение в Управляемой форме 1
НаСервере Процедура УдалитьДанныеХЗНаСервере() ЭлементСправочника = РеквизитФормыВЗначение("Объект"); ЭлементСправочника.ХранилищеЗначения = Новый ХранилищеЗначения(Неопределено); ЭлементСправочника.Записать(); ЗначениеВРеквизитФормы(ЭлементСправо Посмотреть все в категории Работа с Хранилищем Значений
Читайте также: