Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
17 Янв 2018, 06:29
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Быстрая запись в регистр сведений  (Прочитано 6105 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн pyrkin_vanya

  • **
  • Сообщений: 69
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2009-12-20
  • Сайт: 
Всем привет. Ребят, подскажите пожалуйста. Есть регистр сведений. Непериодический, независимый. Там хранятся данные для выгрузки. Данных много. Каждый день добавляется по несколько тысяч. Есть реквизит в этом регистре "ВыгруженНаСайт". Срабатывает регл. задание и выгружает на сайт эти данные. После того, как выгрузка прошла нужно во всех необходимых записях просто проставить этот реквизит в Истина. В процессе выгрузки я собираю все значения измерений в табл. значений,  а потом в цикле перебираю ее и устанавливаю отбор в наборе записей. Вот

НаборВыгрузкиНаСайт = РегистрыСведений.ИсторияВыгрузкиНаСайт.СоздатьНаборЗаписей();
НаборВыгрузкиНаСайт.Отбор.ДокументДляВыгрузки.Установить(Ссылка);
НаборВыгрузкиНаСайт.Прочитать();

ЭлементНабора = НаборВыгрузкиНаСайт[0];
ЭлементНабора.ДатаВыгрузкиНаСайт      = СерверныеФункции.ТекущаяДатаНаСервере();
ЭлементНабора.ВыгруженНаСайт          = Истина;


Попытка
   НаборВыгрузкиНаСайт.Записать(Истина);
Исключение
  ЗаписьЖурналаРегистрации("РегистрацияДокументаДляВыгрузкиНаСайт", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка при записи в РС ИсторияВыгрузкиНаСайт документа: " + Ссылка);
КонецПопытки;
[size=78%]
Это работает, но не очень быстро. В наборе записей нельзя установить отбор по всей таблице сразу. ВСписке например. Может есть есть какие методы? [/size]


Оффлайн Yura063

  • *****
  • Сообщений: 1045
  • РЕПУТАЦИЯ: 136
  • КПД: 13%
  • Регистрация: 2010-11-15
  • Сайт: yuis.ru
  • Профессия: Программист 1С
А почему бы вам при выгрузки на сайт отмечать, все ровно вы там перебираете все данные регистра.
И почему бы вам не удалять из регистра записи, тем самым выш регистр не будет таким большим и отбор будет работать быстрее.
Помогли, отблагодари!

Оффлайн pyrkin_vanya

  • **
  • Сообщений: 69
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2009-12-20
  • Сайт: 
А почему бы вам при выгрузки на сайт отмечать, все ровно вы там перебираете все данные регистра.
И почему бы вам не удалять из регистра записи, тем самым выш регистр не будет таким большим и отбор будет работать быстрее.
Объясню. Это только одна выгрузка. Есть еще и другая (контрольная). И иногда приходится данные перевыгружать. Запросом просто данные сначала отбираются для выгрызки по определенным условиям. Все максимально быстро. Записи надо хранить, т.к. там я еще добавил еще дату и время выгрузки. Это надо отслеживать. Поэтому удалить их не могу. А сразу не могу записи менять. Во-первых тоже самое получится :), а во-вторых, от сайта может прийти не корректный ответ загрузки, тем самым выгрузка не прошла.

Оффлайн Yura063

  • *****
  • Сообщений: 1045
  • РЕПУТАЦИЯ: 136
  • КПД: 13%
  • Регистрация: 2010-11-15
  • Сайт: yuis.ru
  • Профессия: Программист 1С
Может как вариант записывайте в ТЗ те строки которые выгрузили в конце выгрузки, удачной, Циклом пройдите по ТЗ и проставьте значение. Все инфа будет хранится в памяти и выборку делать не нужно будет.
Помогли, отблагодари!

Оффлайн pyrkin_vanya

  • **
  • Сообщений: 69
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2009-12-20
  • Сайт: 
Может как вариант записывайте в ТЗ те строки которые выгрузили в конце выгрузки, удачной, Циклом пройдите по ТЗ и проставьте значение. Все инфа будет хранится в памяти и выборку делать не нужно будет.
Я так и делаю. Работает. Когда 100 записей, то не заметно, а когда 1000, то заметно. В этом и вопрос.

Оффлайн Yura063

  • *****
  • Сообщений: 1045
  • РЕПУТАЦИЯ: 136
  • КПД: 13%
  • Регистрация: 2010-11-15
  • Сайт: yuis.ru
  • Профессия: Программист 1С
Судя по коду вы каждый элемент ищите в регистре
Добавлено: 20 Окт 2014, 10:31

Я так и делаю. Работает. Когда 100 записей, то не заметно, а когда 1000, то заметно. В этом и вопрос.
Еще вариант, вы меняете сразу при выгрузки на сайт, записываете в ТЗ. В случае не выгрузки то по ТЗ меняете значение обратно.
Помогли, отблагодари!

Оффлайн pyrkin_vanya

  • **
  • Сообщений: 69
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2009-12-20
  • Сайт: 
Судя по коду вы каждый элемент ищите в регистре
У меня только одно измерений. И значение этого измерения всегда одно. По нему и делаю отбор.
Еще вариант, вы меняете сразу при выгрузки на сайт, записываете в ТЗ. В случае не выгрузки то по ТЗ меняете значение обратно.
Сразу нельзя. Т.к. выгрузка через XML. И выполняется сразу и все. Так что только потом :)

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Процедура КнопкаВыполнитьНажатие(Кнопка)
Сообщить("Начало выполнения - "+Строка(ТекущаяДата()));

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИсторияОбменаДанными.Период,
| ИсторияОбменаДанными.УзелИнформационнойБазы
|ИЗ
| РегистрСведений.ИсторияОбменаДанными КАК ИсторияОбменаДанными
|ГДЕ
| ИсторияОбменаДанными.УзелИнформационнойБазы = &Узел";

Запрос.УстановитьПараметр("Узел", Узел);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

КолвоЗаписей = 0;

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ТекЗапись = РегистрыСведений.ИсторияОбменаДанными.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(ТекЗапись, ВыборкаДетальныеЗаписи);
ТекЗапись.Прочитать();

Если ТекЗапись.Выбран() Тогда

ТекЗапись.КомментарийКВыгрузкеДанных = "???";
ТекЗапись.РезультатПоследнейВыгрузки = ЛОЖЬ;

КолвоЗаписей = КолвоЗаписей + 1;

КонецЕсли;
ТекЗапись.Записать();
КонецЦикла;

Сообщить("Колво записей - "+Строка(КолвоЗаписей));
Сообщить("Окончание выполнения - "+Строка(ТекущаяДата()));
КонецПроцедуры

Результат:
Начало выполнения - 20.10.2014 12:48:07
Колво записей - 4 521
Окончание выполнения - 20.10.2014 12:48:16
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн pyrkin_vanya

  • **
  • Сообщений: 69
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2009-12-20
  • Сайт: 
Процедура КнопкаВыполнитьНажатие(Кнопка)
Сообщить("Начало выполнения - "+Строка(ТекущаяДата()));

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИсторияОбменаДанными.Период,
| ИсторияОбменаДанными.УзелИнформационнойБазы
|ИЗ
| РегистрСведений.ИсторияОбменаДанными КАК ИсторияОбменаДанными
|ГДЕ
| ИсторияОбменаДанными.УзелИнформационнойБазы = &Узел";

Запрос.УстановитьПараметр("Узел", Узел);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

КолвоЗаписей = 0;

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ТекЗапись = РегистрыСведений.ИсторияОбменаДанными.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(ТекЗапись, ВыборкаДетальныеЗаписи);
ТекЗапись.Прочитать();

Если ТекЗапись.Выбран() Тогда

ТекЗапись.КомментарийКВыгрузкеДанных = "???";
ТекЗапись.РезультатПоследнейВыгрузки = ЛОЖЬ;

КолвоЗаписей = КолвоЗаписей + 1;

КонецЕсли;
ТекЗапись.Записать();
КонецЦикла;

Сообщить("Колво записей - "+Строка(КолвоЗаписей));
Сообщить("Окончание выполнения - "+Строка(ТекущаяДата()));
КонецПроцедуры

Результат:
Начало выполнения - 20.10.2014 12:48:07
Колво записей - 4 521
Окончание выполнения - 20.10.2014 12:48:16
Получается же тоже самое только через менеджер записи. В цикле же читается и в цикле же записывается. Перелопатил весь инет. Профессиональную разработку тоже. Ничего нет. Судя по всему других, более быстрых способов записи в регистр не существует. Печаль. Всем спасибо большое за участие.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Зато запросом получаете тот самый отбор "в списке"
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.


Теги:
 

Отличие проводки по регистру сведений от проводки по регистру накопления?

Автор DirecTwiXРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 4937
Последний ответ 18 Апр 2012, 02:19
от Dethmontt
Добавление сведений в графу "основание" документа "ТОРГ-12"

Автор Ярослав1984Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 7858
Последний ответ 20 Авг 2013, 18:45
от Ярослав1984
Как можно подставлять цену из регистра сведений "Цены поставщиков" в документ"ПоступлениеТоваров" на актуальную дату? Необходимо использовать запрос в решении.

Автор Елена6666666666Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 14
Просмотров: 9686
Последний ответ 24 Окт 2014, 13:30
от cska-fanat-kz
В чем отличие регистра сведений от регистра накопления?

Автор Dmitry QweРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 698
Последний ответ 11 Сен 2017, 10:50
от ilyay
Регистры накопления, Регистры сведений, Документы, Проведение

Автор kot_ooРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 12
Просмотров: 8308
Последний ответ 17 Янв 2014, 21:52
от kot_oo

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
106 Сообщений
AIFrame
100 Сообщений
alex0402
30 Сообщений
kiksi
19 Сообщений
pavl_vs
19 Сообщений
alexandr_ll
17 Сообщений
andron81_81
16 Сообщений
Norfolk
15 Сообщений
LexaK
13 Сообщений
BuhRust
12 Сообщений

* Кто онлайн

  • Точка Гостей: 274
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal