Имя: Пароль:
1C
1C 7.7
v7: Удалить движения документов
,
0 Pit0n_08
 
15.02.17
14:27
ИБ - переписанная ТиС 7.7 SQL 2000. Предыдущим специалистом была выполнена свертка ИБ - созданы документы по вводу остатков, а предшествующие помечены на удаление. Полагаю, пометки на удаление были поставлены не штатно, а прямым запросом, поскольку у каждого документа присутствуют движения регистров. Документов таких очень много, как следствие ИБ не проходит ТИИ - падает с сообщением "Недостаточно свободной памяти" (на сервере 12 Гб). Успевает сообщить "Документ ... не проводился - некорректная запись о движениях регистра". Как это можно победить?
1 МихаилМ
 
15.02.17
14:47
прямыми запросами
2 Pit0n_08
 
15.02.17
14:54
(1) догадываюсь, что прямыми, только сам их использую не часто - если есть рыба или ссылка на пример - буду признателен.
3 Pit0n_08
 
15.02.17
15:06
ТиИ проводить надо край, поскольку есть и другие ошибки.
4 Это_mike
 
15.02.17
15:13
а зачем ТиИ нужно?
5 Pit0n_08
 
15.02.17
15:24
при копировании базы (бэкап-рестор на SQL) копия базы не запускается "Нарушена структура таблицы SC496" (справочник "Полномочия пользователей"). После реструктуризаци этот справочник пустой - это не особо печально записей 12, но очищаются и справочник "Типы цен" SC597 вроде. А вот он подвязан в ценах номенклатуры, коих более 250000 наименований...
6 Это_mike
 
15.02.17
15:53
(5) ну так причем тут ТиИ? смотри, какая структура должна быть, какая есть, и приводи одно к другому... проще привести струтуру БД к структуре мд.
7 Pit0n_08
 
15.02.17
16:29
А ТиИ не приведет структуры БД и md в соответствие? Каким иным способом это сделать корректно?
8 Это_mike
 
15.02.17
16:31
(7) тииделает это долго, монопольно и зачастую с потерей данных.
9 Pit0n_08
 
15.02.17
16:39
Вот поэтому я хочу сначала удалить движения документов, а потом уже выяснять расхождения БД и md.
10 Pit0n_08
 
15.02.17
17:11
(8) Так как иначе это сделать,быстро и корректно?
11 МихаилМ
 
15.02.17
17:26
+ (10)
уточню:  быстро , корректно, дёшево
12 Bigbro
 
15.02.17
17:30
+11 выберите любые 2
13 Builder
 
15.02.17
17:30
(11) Ну и как обычно - выберите 2 варианта!
14 Pit0n_08
 
15.02.17
17:34
День св. Валентина похоже удался :-)
(11-13) могу предложить любого из Вас и за дорого руководителю
15 МихаилМ
 
15.02.17
17:39
(14)
на фриланс ру . Вам за 5-15 тысяч помогут.
16 trdm
 
15.02.17
17:45
(13) выбрал: корректно, дёшево

Смогешь? )))
17 trdm
 
15.02.17
17:49
СЦ = 0;
    Для СЦ = 1 По Метаданные.Регистр() Цикл
        вМетаРег = Метаданные.Регистр(СЦ);
        вИдент = вМетаРег.Идентификатор;
        ТекстЗапроса = "
        |DELETE FROM $Регистр."+вИдент+"
        |WHERE IDDOC IN (
        |    SELECT
        |        жОбщий.IDDOC
        |    FROM
        |        _1SJourn as жОбщий (NOLOCK)
        |    WHERE
        |        жОбщий.DATE_TIME_IDDOC <= :ВыбДата
        |)
        |";
        
    КонецЦикла;
18 trdm
 
15.02.17
17:50
А вот как поля в _1SJourn разыменовать, в которых флаги проведения по регистрам я не помню.
19 Pit0n_08
 
15.02.17
17:54
(18) это если есть документы без проведения регистрам?
20 trdm
 
15.02.17
17:55
Пардон,
жОбщий.DATE_TIME_IDDOC <= :ВыбДата~

Хвостик забыл. А то будет ошибка приведения.
21 Builder
 
15.02.17
17:56
(16) Легко. Думаю сроки заказчика не устроят :)
22 trdm
 
15.02.17
17:57
(19)     вРекордСет = СоздатьОбъект("ODBCRecordset");
    Состояние("Начинаем Чистку регистров у непроведенных документов.");
    СЦ = 0;
    Для СЦ = 1 По Метаданные.Регистр() Цикл
        вМетаРегистр = Метаданные.Регистр(СЦ);
        вИдент = вМетаРегистр.Идентификатор;
        ТекстЗапроса = "
        |DELETE FROM $Регистр."+вИдент+"
        |WHERE IDDOC IN (
        |
        |SELECT
        |    рег.IDDOC
        |FROM
        |    $Регистр."+вИдент+" as рег(NOLOCK)
        |    INNER JOIN _1SJourn as жОбщий (NOLOCK) on рег.IDDOC = жОбщий.IDDOC
        |WHERE
        |    жОбщий.CLOSED & 1 = 0
        |GROUP BY
        |    рег.IDDOC
        |)
        |";
        вТаблаЗнач = СоздатьОбъект("ТаблицаЗначений");
        Попытка
            вТаблаЗнач = вРекордСет.ВыполнитьИнструкцию(ТекстЗапроса);
        Исключение
            глСообщитьОбОшибке(ОписаниеОшибки()+"[201404291347]");
            вТаблаЗнач = СоздатьОбъект("ТаблицаЗначений");
        КонецПопытки;
    КонецЦикла;
23 trdm
 
15.02.17
17:58
(19) <= (22)
24 trdm
 
15.02.17
18:00
+ Бекап сделай.
Епрста не хватает, он бы сейчас тут все до копья разрулил.
У чела талант.
25 trdm
 
15.02.17
18:03
Потом сделаешь пересчет регистров
вот этой обработкой: https://yadi.sk/d/XO5v3agy3E7xTP
26 Pit0n_08
 
15.02.17
18:07
Спасибо, завтра на копии опробую.
27 Злопчинский
 
15.02.17
18:09
проще убить таблицы движений и итогов вообще все тупо. потом сделать штатное удаление помеченных. потом сделать перепроведение начиная с документов свертки.
28 trdm
 
15.02.17
18:13
(27) Конечно проще. Только неизвестно каков объем созданных после свертки документов и сколько их проведено.
Обычно свертка на НГ делается. а сегодня уже 15 февраля. ХЗ сколько они наработали.
29 Pit0n_08
 
15.02.17
18:14
(27) прошлая свертка была в 2011, перепроведение на SQL 2000 до второго пришествия будет (native connekt)...
30 Pit0n_08
 
15.02.17
18:19
Собственно вся бодяга из-за новой свёртки - надо архивную базу оставить, а копии получаются битыми. Не уверен, что если детачить базу, скопировать, приатачить обратно получится.
31 Diman_Kr
 
15.02.17
18:22
А вариант перевести в файловую, убить RG,RA. Перепровести нужное не катит?
32 Pit0n_08
 
15.02.17
18:24
(31) Пробовал, выгрузка падает "Ошибка чтения из архива". Ранее выгрузки получались.
33 Diman_Kr
 
15.02.17
18:26
Выгрузка или загрузка?
34 Pit0n_08
 
15.02.17
18:35
(33) ВЫГРУЗКА
35 Злопчинский
 
15.02.17
18:41
(30) ссзб
Надо было за базой следить и одноэсника не жлобить
Сейчас единственный вариант это перейти на восьмерку
36 sidalexsandr
 
15.02.17
18:46
(30)
1) А не проще написать обработку средствами 1с, которая пометит на удаление средствами 1с. Если не получается то сначала снять пометку удаления, а потом заново поставить средствами 1с.
2) Есть ещё конфигурация 1с Конвертация данных 2.0. Так вот можно создать пустую такуюже базу и с помощью 1с конфертация данных перенести только нужное.
37 sidalexsandr
 
15.02.17
18:56
(0) Ты где?
38 Diman_Kr
 
15.02.17
18:56
(34) Проверь место на диске куда сохраняешь, и права туда.
39 Pit0n_08
 
16.02.17
07:23
(35) ссзб - ??? У руководителя этой конторы по жизни правило - стоматолог, программист и ... должны быть приходящими. Прошлый "специалист" свернул - теперь  выкручиваться приходится...
Вы же взрослый товарищ и понимаете, что фраза "переход на восьмёрку" - это не чудодейственная таблетка...
40 Pit0n_08
 
16.02.17
07:27
(36) 1) - как вариант, но выполняться будет очень-очень долго.
2) - это на крайний случай. В свернутой базе надо оставить документы за последние несколько месяцев. Не уверен, что перенос документов прокатит.
41 Это_mike
 
16.02.17
07:29
(40) чем тебя не устроил (22)?
(40).1 с переносом ТА на удалаемый документ - не так уж и долго
2. перенос будет в разы дольше
42 Pit0n_08
 
16.02.17
07:30
(38) с этим всё в порядке, пробовал сохранять в разные места, как на сервере, так и с рабочей станции.
43 Это_mike
 
16.02.17
07:31
(39) "специалист" обновлял подменой МД?
44 Pit0n_08
 
16.02.17
07:32
(41) спасибо, (22) пока не проверил.
45 DrZombi
 
гуру
16.02.17
07:32
(3) Подумай, как должно быть и сделай :)
Удали движения, пересчитай итоги.
46 DrZombi
 
гуру
16.02.17
07:32
(43) Жесть, это не спец, а нуб :)
47 DrZombi
 
гуру
16.02.17
07:34
(5) Все правильно, в МД файле отсутствуют реквизиты, которые присутствуют в Базе. Либо добавь их в МД, либо удали колонки из БД :)
48 DrZombi
 
гуру
16.02.17
07:34
(7) Нет, не может оно такое делать.
И лучше не работать с человеком, кто так вам сделал :)
49 Это_mike
 
16.02.17
07:35
(46) они друг друга стоят...
50 DrZombi
 
гуру
16.02.17
07:35
(9) Вот это зря. За движениями стоят остатки, ТиИ их не может пропустить :)
51 DrZombi
 
гуру
16.02.17
07:36
(49) Действительно? Я пока только до 9-го поста дошел :)
52 Pit0n_08
 
16.02.17
07:37
(43) не обновлял. Добавил документ, обработкой заполнил документы по свертке регистров и, полагаю, прямым запросом установил значение признака удаленности в журнале. А движения остались.
53 Это_mike
 
16.02.17
07:39
(52) а откуда тогда разница между описанием структуры и самой структурой данных? "оно само"? :-)))
54 DrZombi
 
гуру
16.02.17
07:39
(30) Вам нужно починить МД файл.
Свернуть БД, т.е. получить остатки.
После грохнуть Лишние Движения.
Пересчитать Итоги через ТиИ... лишние галочки не ставить, только итоги и служебные данные!!!

И не забываем всегда делать бекапы средствами СКУЛЯ, а не через выгрузку от 1С :)
55 DrZombi
 
гуру
16.02.17
07:41
(52) Разница в структуре возникает просто.
1. Делаешь копию МД и DDS файла
2. Добавляешь мертвый реквизит.
3. Тупо копируешь старые файлы МД и DDS...

И вуаля, ты запер конфу от изменения...
56 DrZombi
 
гуру
16.02.17
07:42
+(55) Решение, грохнуть в БД колонки через менеджер запросов :)

https://msdn.microsoft.com/ru-ru/library/ms175491.aspx
57 Это_mike
 
16.02.17
07:43
(54) пересчет итогов делается и без ТиИ. и гораздо эффективнее. ссылку вроде давали выше.
58 DrZombi
 
гуру
16.02.17
07:43
(57) Да? Не углядел :)
59 Pit0n_08
 
16.02.17
08:01
Попробую отделить мух от котлет. Есть две проблемы:
1. Не получается создать копию базы. Выгрузка из 1С падает с "Ошибка чтения из архива" - +см. (38,42). Бекапы средствами СКУЛЯ после загрузки в чистую БД с идентичной конфигурацией выдают нарушения структуры таблиц (обнаружил пока две, может их больше...). После реструктуризации, соответственно, некоторые справочники пустые.
2. Чтобы выяснить, какие есть расхождения между БД и md, запускаю ТиИ. Оно падает на проверке служебных данных "Недосточно свободной памяти" (12 Гб на сервере) после 36 часов выполнения по причине наличия "висящих" движений у документов, некорректно помеченных на удаление - их очень много.
60 Pit0n_08
 
16.02.17
08:05
+(59) А главная цель - сверка базы. В свернутой ИБ желательно бы оставить документы последних месяцев и остатки в разрезе партий - документов поступления.
61 Это_mike
 
16.02.17
08:10
(59) проблема только одна :-)))
62 Это_mike
 
16.02.17
08:12
(59) сделай следующее:
1. бэкап Бд.
2. восстановление БД
(как вариант - превод в оффлайн - копирование мдф и лдф, перевод в онлайн)
3. копия каталога базы с МД
4. заити в копии каталога в конфигуратор, привязать конфигурацию к БД (ну, или БД к конфигурации, что монопенисуально)
63 DrZombi
 
гуру
16.02.17
08:17
(59) Чукча не читатель :)
64 DrZombi
 
гуру
16.02.17
08:18
(59) >>>  Чтобы выяснить, какие есть расхождения между БД и md

"Муха тоже бьется об стекло, когда рядом открыта форточка" :)
65 DrZombi
 
гуру
16.02.17
08:19
+(59) >>> их очень много.

Их всегда много. При свертки удаляются только Движения.
И в БД так то растут катастрофически только Остатки :)
66 Это_mike
 
16.02.17
08:21
(64)
"муха тоже вертолет
без коробки передач"
©
67 Это_mike
 
16.02.17
08:22
кстати, ветка - лишнее подтверждение "закона соответсвия"
68 DrZombi
 
гуру
16.02.17
08:32
(67) Как он звучит? :)
69 Pit0n_08
 
16.02.17
16:23
Прошу пардону - отвалился по работе. Пока в сухом остатке:
(62) бекап - восстановление в рабочей БД приведет (уверен на 99%) к потере данных в части озвученных справочников. Не уверен, что перевод БД в офлайн позволит вернуть её в онлайн - на "прямых" базах прокатывает, на кривой рабочей проверять страшновато.
70 Pit0n_08
 
16.02.17
16:30
(65) а здесь движения у помеченных на удаление документов остались. Вот их удалить и надо.
Пока нашел обормотку - за полчаса удалила в копии документы за 5 лет плодотворной работы. Вечером запущу ТиИ.
71 Pit0n_08
 
16.02.17
16:37
(68) может кто ещё знает - Это_mike сегодня, похоже не ответит...
72 Злопчинский
 
16.02.17
17:13
(39) ССЗБ = СамиСебеЗлобныеБуратины
73 Pit0n_08
 
16.02.17
17:52
(72):-)