Как в регистре сведений сделать отбор для списка значений? #551044


#0 by Domovoi
Есть регистр сведений переодический. Измерения Номенклатура. Нужно установить отбор номенклатуры входящей в список СПНоменклатура. Как это сделать не запросом? НаборЗаписей.Отбор.Номенклатура.ВидСравнения = ВидСравнения.ВСписке; выдает ошибку что недопустимый вид сравнения.
#1 by chelentano
читать надо. отбор для набора записей только на "Равно"
#2 by Живой Ископаемый
почему не запросом?
#3 by Живой Ископаемый
Почему бы не поставить условие: только левой рукой, и только мышью, не трогая клавиатуры?
#4 by Domovoi
Интересно. И во-вторых, запросом придется лопатить весь регистр. Сарказм?
#5 by Живой Ископаемый
2 точно "И во-вторых, запросом придется лопатить весь регистр. " - э... раскройте тему, а я таки подскажу способ в ответ
#6 by Domovoi
Насколько я знаю, запросом выбираем из регистра все что нужно оставить без изменения, выгружаем результат запроса в набор записсей и добавляем туда то что собираемся изменить и записываем набор записей. А хотелось бы сделать отбор по списку номенклатуры, думаю так было бы быстрее.
#7 by Domovoi
+Получается в списке к примеру 5 записей, а данный алгоритмом колбасит несколько секунд, а должен как бы мгновенно.
#8 by lxs
..здец
#9 by Живой Ископаемый
"Насколько я знаю, запросом выбираем из регистра все что нужно оставить без изменения, выгружаем результат запроса в набор записсей и добавляем туда то что собираемся изменить и записываем набор записей."- ничего не понятно зачем вы это делаете, впрочем плевать... Можно сделать через ПостроительЗапроса к списку. для Списка можно устанавливать отборы и не только на равентсво.
#10 by Reset
Проблема в алгоритмописателе.
#11 by Domovoi
Что не так? Скажите как проще, хочу научиться. Не понял.
#12 by Reset
К . Нельзя установить отбор по списку. Тебе придется или переписывать весь регистр целиком, как в (что является бредом), либо писать итерациями по одной номенклатуре.
#13 by Reset
Он не хочет получить данные по списку, он их хочет по списку изменить %-)
#14 by Живой Ископаемый
2 я уже понял что он хочет ересь а все потому что неправильно мыслит.. дальше вникать не хочу.. если ему сильно нужно - пусть грызет если это хоть как-то подходит.. если нет - начит нет
#15 by Domovoi
Наоборот хочу вникать. Задача бональная. Есть список номенклатуры, ей установлен статус на опеределенную дату надо эти данные загнать в регистр. Измерения регистра - Номенклатура, Значение - Статус. Регистр периодический. Как надо сделать тогда? писать итерациями по одной номенклатуре - это как?
#16 by Живой Ископаемый
все равно писать итерациями.
#17 by Reset
"Для каждого номенклатура из список номенклатуры"
#18 by Живой Ископаемый
потому что для периодического независимого РС набор записей - это одна запись, которая определяется уникальным сочетанием всех измерений (в твоем случае Номенклатура и Период)
#19 by Domovoi
Это вот так?
#20 by Живой Ископаемый
очевидно, что да.
#21 by Domovoi
Точно? Так очень долго.
#22 by rozer76
может "НаборЗаписей.Записать" после цикла?
#23 by lxs
не "может".. сам подумай почему.
#24 by rozer76
да.. сорри не увидел "НаборЗаписей.Отбор.Номенклатура.Установить(ТекСтрока.Номенклатура)"
#25 by Живой Ископаемый
2 читай буквари, мне казалось ты уже это прошел
#26 by Domovoi
Да вроде пробовал не получилось, хотя странно вроде должно работать. Не, ты что) Мне б за годика 2 еще пройти)
#27 by Domovoi
Сейчас вроде сработало. Но все равно долго очень.
#28 by Живой Ископаемый
регистр сведений независимый - стало быть в твоем наборе записей может быть максимум одна запись. понятно почему
#29 by Domovoi
Что я не так делаю?
#30 by Domovoi
Почему одна? Не понятно, я же много туда их записываю, когда из запроса выгружаю.
#31 by Живой Ископаемый
а, стоп... ересь сказал. :)
#32 by Reset
добавь
#33 by Reset
Ну или НаборЗаписей.Удалить(НоваяЗапись) - по вкусу
#34 by Reset
А вообще для приведенного примера набор не нужен, через менеджер записи все можно делать
#35 by Domovoi
+Я ошибся. Не перезапустил обработку. Не сработало если после цикла. А должно сработать?
#36 by Domovoi
Так все же как надо писать?
#37 by Domovoi
Через запрос 55700 записей в списке обработало за 20 сек. Через итерации, если наборЗаписей.Записать в цикле то счет на минут идет. Если НаборЗаписей.Записать вне цикла, то ошибка, можетя не так чтото делаю. Какой еще вариант есть?
#38 by Domovoi
Та же петрушка что и с набором записей. Очень долго.
#39 by Domovoi
Ну не подсказываете, скажите хоть что почитать. А то через запрос говорите фигня, а как надо делать - молчите.
#40 by 73
А если отбор только по ДатаОтбора использовать?
#41 by lxs
"Если НаборЗаписей.Записать вне цикла, то ошибка" - ты хоть немного соображаешь, что делаешь? И кстати, в тебе дали дельный совет.
#42 by Reset
а) Либо ты что-то не так делаешь, но умалчиваешь. б) Если Количество номенклатур в твоем списке достаточно велико, то оно вполне может отрабатывать долго в) Ты умолчал о каком-то упрощающем условии. Например, в таблице СписокНоменклатуры заведомо полный список на дату ДатаОтбора. Тогда в наборе вооще не надо устанавливать отбор по номенклатуре. г) Хз.
#43 by Reset
Попробуй (код не проверен, безошибочность работы НЕ ГАРАНТИРУЮ, в т.ч. синтаксическую) Если будет работать медленно, тогда нужно менять смысл темы на "Как оптимизировать запись в РС", указав сопутствующую информацию для размышления (коей сейчас явно недостаточно)
#44 by Domovoi
И что получится? Что то дельность его не видна только. а)Зачем мне умалчивать? Я не вас тут собрался подсикать на незнании, а мне самому надо узнать и научится, да и сделать побыстрее, смысл мне тянуть кота за хвост? б)НУ я не спорю, просто сказали что способ через запрос не правильный был, вот я и хочу научится правильному. в)Я все сказал, список произвольный, но на одну дату, но элементы не все могут быть на эту дату. г)Вот и я хз.
#45 by Reset
Я имел в виду умалчивать неосознанно, а не злоумышленно.
#46 by Domovoi
Долго.
#47 by 73
В регистре(до записи) могут быть другие элементы на эту же дату?
#48 by Reset
Исходя из , пункт в, могут :)
#49 by Domovoi
Да. В регистре может быть все) Я делаю обработку для изменения статустность номенклатуру на выбранную дату. Т.е. накидываю список номенклатуры ставлю дату и выбираю какой статус поставить, нажимаю применить, должны изменится или добавиться записи имеющие номенклатуру из списка и период равый выбранной дате.
#50 by 73
+ Исправлюсь: В регистре(до записи) могут быть записи по другой номенклатуре на эту же дату?
#51 by Domovoi
Да
#52 by 73
Статус - тип какой?
#53 by Domovoi
Перечисления, но думаю это не важно.
#54 by Reset
Тогда, возможно, нужно исходить из соотношения количества изменяемых записей за день к количеству неизменяемых. Если количество вторых сравнимо с первыми, тогда быстрее будет писать сразу весь набор за день (читаем набор - меняем нужные строки - пишем). Кроме того, если количество записей в твоей таблице изменений велико (55700 -  это что?), такой вариант будет быстрее в любом случае. Сколько записей в регистре за день в среднем? Сколько строк в списокНоменклатуры в среднем?
#55 by Domovoi
Это номенклатура, завели и забыли) Изменения происходят, статус показывает: снят с производства, в производстве, акция, распродажа. Меняется он редко. Через запрос, в любом случае 20 сек делает, а через другие методы при небольшом колве в списке номенклатуры делается быстрее, ну при большом - очень долго. Вот я и хотел найти способ универсальный, а так получается нужно наверно два способа использовать в зависимости от количества изменяемых записей.
#56 by 73
Еще вопрос: В регистре(до записи) могут быть записи по номенклатуре из списка на эту же дату?
#57 by Domovoi
Могут. К примеру был один статус. решили что он ошибочен и надо заменить.
#58 by Domovoi
Вот эту мысль все-таки не понял. Что мне делать с построителем запроса?
#60 by Reset
Примерно так. Только запрос не нужен опять же, НаборЗаписей.Прочитать ничуть не хуже :)
#61 by Domovoi
Спасибо.Правда я через запрос, тоже самое делаю,только проверю что быстрее. На будущее буду знать. Всмысле? А что мы получим через Прочитать?
#62 by 73
Только СписокНоменклатуры проверь в отборе построителя. Там список значений нужен. А у тебя похоже - таблица значений...
#63 by Reset
Получим то, что есть сейчас в регистре (что ты, видимо, запросом делаешь). См пример в :)
#64 by Domovoi
Запросом я получаю, записи из регитра, которые не буду менять.
#65 by Domovoi
При большом количестве изменяемых записей, получается очень долго. Но есть промежуток где этот метод выгоднее остальных, но это надо уже исследовать. Вообщем опыта набрался, всем спасибо, если есть еще методы напишите, буду рад узнать.
#66 by Reset
Тогда кстати вариант развить идею и получать запросом сразу готовую к записи таблицу: В запрос передаем ТаблицуИзменений, там помещаем ее во временную таблицу, которую соединяем (полным соединением по номенклатуре)со срезом на заданный период, по ГДЕ фильтруем чтобы состояние было различно в таблицах и возвращаем 1) состояние из временной в приоритете 2) состояние из регистра, если во временной значение NULL Полученную таблицу заносим в пустой набор и пишем. Все, ушел пить пиво по поводу ДР)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С