v7: Прямой запрос. Требуется из регистра удалить все записи, где номенклатура в заданной группе #808269


#0 by Злопчинский
Для скалярного значения может и сам бы осилил за часик—два, а так над хелп На форме список значений В списке значений перечень родительских групп самого верхнего уровня спр.номенклатуры Требуется из движений регистра и итогов регистра — пусть будет ПартииНаличие — удалить все записи где номенклатура входит в список родительских групп на любом уровне вложенности Общее количество номенклатуры в этом перечне родительских групп ~60 тыс Кому не в лом — дайте код и со всякими строками подключе6ия — я читать могу но писать — ни... Спсб Жду ответа как злоп лета
#1 by Aleksey
60тысяч это фигня. Обычным перебором с через использоватьродитель формируй свой список. А дальше уложить и запрос же к таблице с готовым списокм
#2 by Злопчинский
я в курсе. сформировать список голых элементов - не проблема. а вот всякие "уложить и запрос же...." - никопенгаген, чего собственно и прошу!
#3 by vcv
Где-то так: |"); Но писал без проверки
#4 by Aleksey
Какое то странное желание по выборочному удалению движений
#5 by FN
Итоги придётся пересчитывать
#6 by vcv
В данном случае, по моему, не придётся. Потому что удаляются все записи по измерению регистра как из движений, так и из итогов.
#7 by FN
6 не придётся, если это единственное измерение в регистре. Если есть другие измерения, то придётся пересчитывать.
#8 by Злопчинский
не придется, записи с упоминанием этой номенклатуры вообще не интересуют.
#9 by Злопчинский
а как проверить? хотя бы для начала селектом получить массив чтобы посмотреть?
#10 by Aleksey
Запусти. Если не ругнется на синтаксические ошибки - значит запрос правильный
#11 by Aleksey
ну и если хочешь "посмотреть", то Запрос.ВыполнитьСкалярный(" И смотри свой список
#12 by Злопчинский
Выгружать запрос в ТЗ?
#13 by Aleksey
да как хочешь, тебе же только посмотреть Можешь вместо * написать count(*) (по идеи 1с++ должно понять) и тогда будет в результате запроса 1 число - количество записей
#14 by vcv
Почему придётся? Удаляем все записи за все периоды по указанной номенклатуре. И движения и итоги. Что пересчитывать-то?
#15 by Злопчинский
Почему ТЗЗ.ВыбратьСтроку(,ТЗЗ.КоличествоСтрок); - ругается что ТЗЗ.КоличествоСтрок - ошибка? ВыполнитьСкалярный возвращает не ТЗ (записи в выборке стопудово есть)?
#16 by Злопчинский
ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапросаСелект); - потестил, вроде то что надо возвращает.. бум значит резать делитом...
#17 by Злопчинский
"В этом примере мы использовали метод Выполнить Скалярный, который возвращает не таблицу, а единственное значение или структуру, если выбирается несколько колонок."
#18 by Злопчинский
как-то всегда считал что колонка - это много.. а тут что? типа строка, состоящая из нескольких ячеек (которые обзывают колонками) ....?
#19 by vcv
ВыполнитьСкалярный используется, когда запрос гарантированно возвращает одно значение (количество обработанных delete from записей) или одну строку запроса. Как я понимаю, синтаксический сахар для удобства обработки результатов. Проще обращение к результатам, не нужна выборка из ТЗ.
#20 by Злопчинский
спсб.А если возвращается одна строка запроса, то результат запроса в виде какого объекта доступен?
#21 by vcv
Если используешь ВыполнитьИнструкцию, получаешь таблицу значений или индексированную таблицу (при передаче ИТ как параметра). Если используешь ВыполнитьСкалярный, получаешь одно значение или структуру. В зависимости от запроса.
#22 by Злопчинский
Запрос.ВыполнитьСкалярный(" {D:BASES_1CОБРАБОТКА.ERT}: State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около ключевого слова "AS".     Что не нравится?
#23 by VladZ
Не нравится "AS ПартииНаличие". Убери.
#24 by VladZ
Хотя.. Нет, гоню. Тебе ж потом к номенклатуре обращаться.
#25 by VladZ
Вот здесь про удаление:
#26 by vcv
Убери "AS ПартииНаличие"
#27 by Злопчинский
Разобрался уже. Методом творческого тыка и мельком на кодинг-скрипт молотит уже...
#28 by Злопчинский
ERT}: State 42000, native 9002, message [Microsoft][ODBC SQL Server Driver][SQL Server]Журнал транзакций для базы данных "MAIN_BASE" заполнен. Чтобы обнаружить причину, по которой место в журнале не может быть повторно использовано, обратитесь к столбцу log_reuse_wait_desc таблицы sys.databases - и что теперь где ужать?
#29 by vcv
Заглянуть на сервер. В Microsoft SQL Server Management Studio. Найти свою базу. Правая кнопка мыша, Свойства. Раздел Файлы. Смотреть, не ограничен ли размером файл журнала. Увеличить ограничение. Проверить свободное место на диске, где он расположен.
#30 by Злопчинский
да, я это уже разобрался в районе и все успешно барабанит дальше и остановками и подчистками журнала транзакицй типа вот так надо:
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям