Вход | Регистрация


Добавление записей в регистр сведений через список программно

Добавление записей в регистр сведений через список программно
Я
   falselight
 
14.12.17 - 10:42
Подскажите кому не трудно. Обычное приложение.
По кнопке из документа открывается список регистра сведений.
При добавлении в него записи, срабатывает процедура перед
добавлением:


Процедура РегистрСведенийСписокПередНачаломДобавления(Элемент, Отказ, Копирование)
    //

    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    //

    Диалог.Заголовок                   = НСтр("ru = 'Выберите файл'");
    Диалог.ПолноеИмяФайла              = "";
    Диалог.МножественныйВыбор          = Ложь;
    Диалог.ПредварительныйПросмотр     = Ложь;
    Диалог.ПроверятьСуществованиеФайла = Истина;
    Диалог.Фильтр                      = "";
    Если Диалог.Выбрать() Тогда
        _Файл = Диалог.ПолноеИмяФайла;
    КонецЕсли;
    //

    НаборЗаписей                                    = РегистрыСведений.ФайлыОбъектов.СоздатьНаборЗаписей();
    //

    НоваяЗапись                                     = НаборЗаписей.Добавить(); 
    НоваяЗапись.ИмяОбъекта                          = Элемент.Значение.Отбор.ИмяОбъекта.Значение;
    НоваяЗапись.НомерФайла                             = НоваяЗапись.НомерФайла + 1;
    //НоваяЗапись.Файл                                =

    НоваяЗапись.ИмяФайла                            = ПолучитьИмяФайла(_Файл);
    НоваяЗапись.РасширениеФайла                     = ПРАВ(_Файл,3);
    НоваяЗапись.ПредставлениеФайла                  = _Файл;
    //

    НаборЗаписей.Записать(); 
КонецПроцедуры



Ресурс Файл регистра сведений типа хранилище значений, как в него
правильно поместить файл?
 
 
   1Сергей
 
1 - 14.12.17 - 10:46
Гуглофобия?
   falselight
 
2 - 14.12.17 - 10:47
Так идет ошибка, подскажите как правильно?

Процедура РегистрСведенийСписокПередНачаломДобавления(Элемент, Отказ, Копирование)
    //

    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    //

    Диалог.Заголовок                   = НСтр("ru = 'Выберите файл'");
    Диалог.ПолноеИмяФайла              = "";
    Диалог.МножественныйВыбор          = Ложь;
    Диалог.ПредварительныйПросмотр     = Ложь;
    Диалог.ПроверятьСуществованиеФайла = Истина;
    Диалог.Фильтр                      = "";
    Если Диалог.Выбрать() Тогда
        _Файл = Диалог.ПолноеИмяФайла;
    КонецЕсли;
    //

    НаборЗаписей                                    = РегистрыСведений.ФайлыОбъектов.СоздатьНаборЗаписей();
    //

    НоваяЗапись                                     = НаборЗаписей.Добавить(); 
    НоваяЗапись.ИмяОбъекта                          = Элемент.Значение.Отбор.ИмяОбъекта.Значение;
    НоваяЗапись.НомерФайла                             = НоваяЗапись.НомерФайла + 1;
    //

    Файл                                               = Новый Файл(_Файл);
    ХранилищеФайла                                     = Новый ХранилищеЗначения(Файл, Новый СжатиеДанных(9));    
    НоваяЗапись.Файл                                  = ХранилищеФайла;
    НоваяЗапись.ИмяФайла                            = ПолучитьИмяФайла(_Файл);
    НоваяЗапись.РасширениеФайла                     = ПРАВ(_Файл,3);
    НоваяЗапись.ПредставлениеФайла                  = _Файл;
    //

    НаборЗаписей.Записать(); 
КонецПроцедуры
   1Сергей
 
3 - 14.12.17 - 10:51
(2) посмотри примеры внизу:
http://howknow1c.ru/jazyk-1s/hranilishhe-znachenij-1s.html
   falselight
 
4 - 14.12.17 - 10:53
Так правильно?

    ХранилищеФайла                                     = Новый ХранилищеЗначения(Новый ДвоичныеДанные(_Файл), Новый СжатиеДанных(9));    


(3) да примеров полно.
   falselight
 
5 - 14.12.17 - 10:55
Как в этой процедуре отменить стандартную обработку?
А то добавляется 2 строки. Стандартной обработки нет в параметрах.
   Lexey_
 
6 - 14.12.17 - 11:03
(5) "Стандартной обработки нет в параметрах" но есть другие параметры
   alkorolev
 
7 - 14.12.17 - 11:06
(5) Отказ = Истина
   falselight
 
8 - 14.12.17 - 11:59
(7) Да спасибо!
Сейчас такая проблема. Открываю документ. Открываю список регистра пробую добавить запись. Она добавляется всегда либо одна. То есть если добавить по нескольким документам файлы то добавится всегда одна.
Либо выходит сообщение об ошибке что значение поля не
соответствует установленному отбору.
Подскажите пожалуйста как будет правильно?
Нужно добавлять записи прикрепленных файлов по каждому
документу. Что бы все они были в регистре сведений?


//

Процедура РегистрСведенийСписокПередНачаломДобавления(Элемент, Отказ, Копирование)
    //

    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    //

    Диалог.Заголовок                   = НСтр("ru = 'Выберите файл'");
    Диалог.ПолноеИмяФайла              = "";
    Диалог.МножественныйВыбор          = Ложь;
    Диалог.ПредварительныйПросмотр     = Ложь;
    Диалог.ПроверятьСуществованиеФайла = Истина;
    Диалог.Фильтр                      = "";
    Если Диалог.Выбрать() Тогда
        _Файл = Диалог.ПолноеИмяФайла;
    КонецЕсли;
    //

    НаборЗаписей                                    = РегистрыСведений.ФайлыОбъектов.СоздатьНаборЗаписей();
    //

    НаборЗаписей.Отбор.ИмяОбъекта.Установить(Элемент.Значение.Отбор.ИмяОбъекта.Значение);
    НоваяЗапись                                     = НаборЗаписей.Добавить(); 
    //НоваяЗапись.ИмяОбъекта                          = Элемент.Значение.Отбор.ИмяОбъекта.Значение;

    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    ФайлыОбъектов.НомерФайла КАК НомерФайла
        |ИЗ
        |    РегистрСведений.ФайлыОбъектов КАК ФайлыОбъектов
        |
        |УПОРЯДОЧИТЬ ПО
        |    НомерФайла УБЫВ";
    Рез = Запрос.Выполнить();
    Если Не Рез.Пустой() Тогда
        Выборка = Рез.Выбрать();
        Выборка.Следующий();
        ПоследнийНомер = Выборка.НомерФайла;
    Иначе
        ПоследнийНомер = 0;
    КонецЕсли;
    НоваяЗапись.НомерФайла                             = ПоследнийНомер + 1;
    //

    //Файл                                               = Новый Файл(_Файл);

    ХранилищеФайла                                     = Новый ХранилищеЗначения(Новый ДвоичныеДанные(_Файл), Новый СжатиеДанных(9));    
    НоваяЗапись.Файл                                  = ХранилищеФайла;
    НоваяЗапись.ИмяФайла                            = ПолучитьИмяФайла(_Файл);
    НоваяЗапись.РасширениеФайла                     = ПРАВ(_Файл,3);
    НоваяЗапись.ПредставлениеФайла                  = _Файл;
    НаборЗаписей.Записать();
    //

    Отказ = Истина;
    //

    Возврат;
КонецПроцедуры
//
   falselight
 
9 - 14.12.17 - 12:03
как понять???? Я же задаю отбор и в него пишу?!!!!


{РегистрСведений.ФайлыОбъектов.Форма.ФормаСписка.Форма(49)}: Ошибка при вызове метода контекста (Записать)
    НаборЗаписей.Записать();
по причине:
Запись не верна! Значение поля не соответствует установленному отбору: ФайлыОбъектов: , 1 (Регистр сведений: Файлы объектов; Номер строки: 1; Поле: ИмяОбъекта)
   falselight
 
10 - 14.12.17 - 12:06
Поправил, извиняюсь за недочет. Решаю другие проблемы с этим.

//

Процедура РегистрСведенийСписокПередНачаломДобавления(Элемент, Отказ, Копирование)
    //

    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    //

    Диалог.Заголовок                   = НСтр("ru = 'Выберите файл'");
    Диалог.ПолноеИмяФайла              = "";
    Диалог.МножественныйВыбор          = Ложь;
    Диалог.ПредварительныйПросмотр     = Ложь;
    Диалог.ПроверятьСуществованиеФайла = Истина;
    Диалог.Фильтр                      = "";
    Если Диалог.Выбрать() Тогда
        _Файл = Диалог.ПолноеИмяФайла;
    КонецЕсли;
    //

    НаборЗаписей                                    = РегистрыСведений.ФайлыОбъектов.СоздатьНаборЗаписей();
    //

    НаборЗаписей.Отбор.ИмяОбъекта.Установить(Элемент.Значение.Отбор.ИмяОбъекта.Значение);
    НоваяЗапись                                     = НаборЗаписей.Добавить(); 
    НоваяЗапись.ИмяОбъекта                          = Элемент.Значение.Отбор.ИмяОбъекта.Значение;
    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    ФайлыОбъектов.НомерФайла КАК НомерФайла
        |ИЗ
        |    РегистрСведений.ФайлыОбъектов КАК ФайлыОбъектов
        |
        |УПОРЯДОЧИТЬ ПО
        |    НомерФайла УБЫВ";
    Рез = Запрос.Выполнить();
    Если Не Рез.Пустой() Тогда
        Выборка = Рез.Выбрать();
        Выборка.Следующий();
        ПоследнийНомер = Выборка.НомерФайла;
    Иначе
        ПоследнийНомер = 0;
    КонецЕсли;
    НоваяЗапись.НомерФайла                             = ПоследнийНомер + 1;
    //

    //Файл                                               = Новый Файл(_Файл);

    ХранилищеФайла                                     = Новый ХранилищеЗначения(Новый ДвоичныеДанные(_Файл), Новый СжатиеДанных(9));    
    НоваяЗапись.Файл                                  = ХранилищеФайла;
    НоваяЗапись.ИмяФайла                            = ПолучитьИмяФайла(_Файл);
    НоваяЗапись.РасширениеФайла                     = ПРАВ(_Файл,3);
    НоваяЗапись.ПредставлениеФайла                  = _Файл;
    НаборЗаписей.Записать();
    //

    Отказ = Истина;
    //

    Возврат;
КонецПроцедуры
//
 
 Рекламное место пустует
   falselight
 
11 - 14.12.17 - 12:11
Подскажите по несколько глупому вопросу.
Как сделать что бы в соответствии с кодом (10) можно
было бы добавлять несколько записей в регистр по одному документу. В данный момент при добавлении записи в регистр
открыв список из документа можно только перезаписывать
имеющуюся запись.
Как правильно сделать что бы добавлять несколько записей?
В другом событии записывать данные в регистр, но как
правильно это реализовать?
   novichok79
 
12 - 14.12.17 - 12:41
(11) измерения, для того и измерения, чтобы знать по чему мерять. сначала определи в зависимости от чего по одному документу надо несколько записей.
потом найди реквизит который меняется от записи к записи и сделай его измерением.
   Табуретко
 
13 - 14.12.17 - 12:56
(1) Вопрософилия ))

(11) сведений> (InformationRegisterRecordSet.<Имя регистра сведений>)
Записать (Write)
Синтаксис:

Записать(<Замещать>)
Параметры:

<Замещать> (необязательный)

Тип: Булево.
Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям
Значение по умолчанию: Истина
Описание:

Записывает набор записей в базу данных. В зависимости от переданного параметра, может быть выполнено добавление записей или их замещение.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Для регистров сведений, подчиненных регистратору, при вызове с параметром <Замещать> равным Ложь после записи в информационную базу набор записей очищается (удаляются записи из набора).
   falselight
 
14 - 14.12.17 - 13:18
(12) СТРУКТУРА РЕГИСТРА ТАКОВА:

Измерения:
   ИмяОбъекта
   НомерФайла

Ресурсы:
   Файл

Реквизиты:
   ИмяФайла
   РасширениеФайла
   ПредставлениеФайла

По одному документу нужно несколько записей так как к
одному документу могут быть прикреплены несколько файлов.

Реквизиты ИмяФайла и ПоредставлениеФайла меняются.

(13) Пока не осилил.
   Табуретко
 
15 - 14.12.17 - 13:27
(14) у тебя Выборка.Следующий(); не в цикле, как ты собрался несколько прикреплять?
   falselight
 
16 - 14.12.17 - 13:30
(10) Это обработчик нажатия кнопки.
Выборка для наращивания номера в измерении НомерФайла.
Там не нужен цикл.

Прикреплять несколько, -
раз нажал, одну строку добавил,
второй раз нажал, добавил вторую строку (пока переписывается текущая).
И так по каждому нажатию и выбору файла новые строки.
   Табуретко
 
17 - 14.12.17 - 13:31
НаборЗаписей.Записать(Ложь);
   novichok79
 
18 - 14.12.17 - 13:37
(0) Что такое "Документ"? Такого в списке измерения нет. Где типы у измерений и ресурсов? Мало того что дичь спрашиваешь, так еще и неполную информацию даешь.
Для уникальности можно добавить уникальный идентификатор как измерение - тогда можно будет что угодно писать в твой регистр.
А так, задача решается проще - раз можно несколько файлов к одному объекту прикрепить и уникальность не нужна (а именно для этого делается регистр сведений), то можно просто сделать справочник "Файлы" с необходимыми полями, где элемент = 1 файл. у файла есть поле "владелец", таким образом можно напихать кучу файлов на 1 объект-владелец без мучений с регистром сведений. еще и работать быстрее будет (если индексировать справочник правильно).
   falselight
 
19 - 15.12.17 - 04:32
(18 задача в регистр дожить)
   1Сергей
 
20 - 15.12.17 - 06:02
после того, как установил отбор, сделай
НаборЗаписей.Прочитать();

А то ты каждый раз в пустой НаборЗаписей записываешь одну запись, остальные затираются

Список тем форума
Рекламное место пустует  Рекламное место пустует
Независимо от того, куда вы едете — это в гору и против ветра!
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует