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


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

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

v7: Прямой запрос. Требуется из регистра удалить все записи, где номенклатура в заданной группе
Я
   Злопчинский
 
12.11.17 - 01:59
Для скалярного значения может и сам бы осилил за часик—два, а так над хелп

Типовая тис
Скуль база
1с++ есть

На форме список значений
В списке значений перечень родительских групп самого верхнего уровня спр.номенклатуры
Требуется из движений регистра и итогов регистра — пусть будет ПартииНаличие —
удалить все записи где номенклатура входит в список родительских групп на любом уровне вложенности

Общее количество номенклатуры в этом перечне родительских групп ~60 тыс

Кому не в лом — дайте код и со всякими строками подключе6ия — я читать могу но писать — ни...

Спсб
Жду ответа как злоп лета
 
 
   Aleksey
 
1 - 12.11.17 - 06:37
60тысяч это фигня. Обычным перебором с через использоватьродитель формируй свой список. А дальше уложить и запрос же к таблице с готовым списокм
   Злопчинский
 
2 - 12.11.17 - 08:27
(1) я в курсе. сформировать список голых элементов - не проблема. а вот всякие "уложить и запрос же...." - никопенгаген, чего собственно и прошу!
   vcv
 
3 - 12.11.17 - 08:53
Где-то так:
Запрос = СоздатьОбъект("ODBCRecordSet");
Запрос.УложитьСписокОбъектов(МойСписокГрупп,"#СписокНоменклатуры","Номенклатура");

Запрос.ВыполнитьСкалярный("
|DELETE FROM $Регистр.ПартииНаличие AS ПартииНаличие
|WHERE $ПартииНаличие.Номенклатура IN (SELECT val FROM #СписокНоменклатуры)
|go
|DELETE FROM $РегистрИтоги.ПартииНаличие AS ПартииНаличиеИтоги
|WHERE $ПартииНаличиеИтоги.Номенклатура IN (SELECT val FROM #СписокНоменклатуры)
|");
Но писал без проверки
   Aleksey
 
4 - 12.11.17 - 09:47
Какое то странное желание по выборочному удалению движений
   FN
 
5 - 12.11.17 - 10:12
Итоги придётся пересчитывать
   vcv
 
6 - 12.11.17 - 10:24
(5) В данном случае, по моему, не придётся. Потому что удаляются все записи по измерению регистра как из движений, так и из итогов.
   FN
 
7 - 12.11.17 - 14:50
6 не придётся, если это единственное измерение в регистре. Если есть другие измерения, то придётся пересчитывать.
   Злопчинский
 
8 - 12.11.17 - 16:58
(7) не придется, записи с упоминанием этой номенклатуры вообще не интересуют.
   Злопчинский
 
9 - 12.11.17 - 17:00
(3) а как проверить? хотя бы для начала селектом получить массив чтобы посмотреть?
   Aleksey
 
10 - 12.11.17 - 17:05
(9) Запусти. Если не ругнется на синтаксические ошибки - значит запрос правильный
 
 Рекламное место пустует
   Aleksey
 
11 - 12.11.17 - 17:07
ну и если хочешь "посмотреть", то

Запрос.ВыполнитьСкалярный("
|select * FROM $Регистр.ПартииНаличие AS ПартииНаличие
|WHERE $ПартииНаличие.Номенклатура IN (SELECT val FROM #СписокНоменклатуры)"); 

И смотри свой список
   Злопчинский
 
12 - 12.11.17 - 17:19
Выгружать запрос в ТЗ?
   Aleksey
 
13 - 12.11.17 - 17:34
(12) да как хочешь, тебе же только посмотреть
Можешь вместо * написать count(*) (по идеи 1с++ должно понять) и тогда будет в результате запроса 1 число - количество записей
   vcv
 
14 - 12.11.17 - 21:31
(7) Почему придётся? Удаляем все записи за все периоды по указанной номенклатуре. И движения и итоги. Что пересчитывать-то?
   Злопчинский
 
15 - 13.11.17 - 01:23
Почему
ТЗЗ = Запрос.ВыполнитьСкалярный(ТекстЗапросаСелект);
ТЗЗ.ВыбратьСтроку(,ТЗЗ.КоличествоСтрок());
- ругается что ТЗЗ.КоличествоСтрок() - ошибка?

ВыполнитьСкалярный возвращает не ТЗ (записи в выборке стопудово есть)?
   Злопчинский
 
16 - 13.11.17 - 01:30
ТЗЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапросаСелект);
- потестил, вроде то что надо возвращает.. бум значит резать делитом...
   Злопчинский
 
17 - 13.11.17 - 01:31
"В этом примере мы использовали метод Выполнить Скалярный(), который возвращает не таблицу, а единственное значение или структуру, если выбирается несколько колонок."
   Злопчинский
 
18 - 13.11.17 - 01:33
как-то всегда считал что колонка - это много.. а тут что? типа строка, состоящая из нескольких ячеек (которые обзывают колонками) ....?
   vcv
 
19 - 13.11.17 - 05:31
ВыполнитьСкалярный используется, когда запрос гарантированно возвращает одно значение (количество обработанных delete from записей) или одну строку запроса.
Как я понимаю, синтаксический сахар для удобства обработки результатов. Проще обращение к результатам, не нужна выборка из ТЗ.
   Злопчинский
 
20 - 13.11.17 - 09:40
(19) спсб.
А если возвращается одна строка запроса, то результат запроса в виде какого объекта доступен?
   vcv
 
21 - 13.11.17 - 10:33
(20) Если используешь ВыполнитьИнструкцию, получаешь таблицу значений или индексированную таблицу (при передаче ИТ как параметра).
Если используешь ВыполнитьСкалярный, получаешь одно значение или структуру. В зависимости от запроса.
   Злопчинский
 
22 - 19.11.17 - 12:46
Запрос.ВыполнитьСкалярный("
            |DELETE FROM $Регистр.ПартииНаличие AS ПартииНаличие
            |WHERE $ПартииНаличие.Номенклатура IN (SELECT val FROM #СписокНоменклатуры)
            //|go

            //|DELETE FROM $РегистрИтоги.ПартииНаличие AS ПартииНаличие

            //|WHERE $ПартииНаличиеИтоги.Номенклатура IN (SELECT val FROM #СписокНоменклатуры)

            |"); 

Запрос.ВыполнитьСкалярный("
{D:\BASES_1C\ОБРАБОТКА.ERT(52)}: State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около ключевого слова "AS".    

Что не нравится?
   VladZ
 
23 - 19.11.17 - 12:49
Не нравится "AS ПартииНаличие". Убери.
   VladZ
 
24 - 19.11.17 - 12:51
Хотя.. Нет, гоню. Тебе ж потом к номенклатуре обращаться.
   VladZ
 
25 - 19.11.17 - 12:57
Вот здесь про удаление: http://www.script-coding.com/Direct_queries.html
   vcv
 
26 - 19.11.17 - 15:24
Убери "AS ПартииНаличие"
   Злопчинский
 
27 - 19.11.17 - 15:42
Разобрался уже.
Методом творческого тыка и мельком на кодинг-скрипт
молотит уже...
   Злопчинский
 
28 - 19.11.17 - 18:54
ERT(54)}: State 42000, native 9002, message [Microsoft][ODBC SQL Server Driver][SQL Server]Журнал транзакций для базы данных "MAIN_BASE" заполнен. Чтобы обнаружить причину, по которой место в журнале не может быть повторно использовано, обратитесь к столбцу log_reuse_wait_desc таблицы sys.databases

- и что теперь где ужать?
   vcv
 
29 - 19.11.17 - 19:52
Заглянуть на сервер.
В Microsoft SQL Server Management Studio.
Найти свою базу. Правая кнопка мыша, Свойства. Раздел Файлы. Смотреть, не ограничен ли размером файл журнала. Увеличить ограничение. Проверить свободное место на диске, где он расположен.
   Злопчинский
 
30 - 19.11.17 - 21:57
(29) да, я это уже разобрался в районе (28) и все успешно барабанит дальше и остановками и подчистками журнала транзакицй
типа вот так надо: http://catalog.mista.ru/public/168314/


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