Вход | Регистрация
    1  2  3  4  5   
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Не удаляются движения документа

v7: Не удаляются движения документа
Я
   LisaAlisa
 
07.09.20 - 18:09
Привет!
При установке пометки на удаление или при отмене проведения документа движения в регистре не очищаются. При этом флаг "Автоматическое удаление движений" стоит.
Из-за чего так может быть?
   Ёпрст
 
301 - 14.09.20 - 19:59
Или, попробуй ему еще имя задать.. MyIndex в поле descr
   Franchiser
 
302 - 14.09.20 - 20:00
(300) нужно скрипт тогда переписывать, нашел где-то его на форуме.
   Ёпрст
 
303 - 14.09.20 - 20:00
И это, а чего он у тебя неуникальный то ?
   Ёпрст
 
304 - 14.09.20 - 20:01
поставь ему уникальность еще
   Franchiser
 
305 - 14.09.20 - 20:03
(301) имя задал произвольное, не помогло
   Franchiser
 
306 - 14.09.20 - 20:05
(304) указал 1 для уникальности в DDS - не помогло
   Ёпрст
 
307 - 14.09.20 - 20:41
(306) проверил на демке, пофик, где указан индекс, можно сразу за полями как у тебя.
В самом скуле он хоть создан и соответствует описанию в ддс ?
   tgu82
 
308 - 14.09.20 - 21:04
(0) Куда круче любых лент новостей. Столько полезного узнал для себя
   Franchiser
 
309 - 14.09.20 - 23:01
(307) да в скуле он есть, я как раз теперь все сделал на рабочей базе, просто потом решил восстановить строку индекса в том месте где он был в словаре и вылез этот косяк. Переставка индекса в ддс приводит к такому результату: уже проверил на четырех базах (₽ копии и 1 рабочая).
   Franchiser
 
310 - 14.09.20 - 23:02
Проверял на Sql 2008
   Franchiser
 
311 - 14.09.20 - 23:05
(308) ага все-то 150 сообщений с того момента как я пришел в тему)
   Franchiser
 
312 - 14.09.20 - 23:46
(296) в твоём индексе нет date_time_iddoc. 1с ищет по полям индекса и не изменяет поля которые в него входят. В частности при изменении времени, должно меняться поле date_time_iddoc.
   Franchiser
 
313 - 14.09.20 - 23:47
(300) его нужно пихать после строки I=PK__1SJOURN
   Franchiser
 
314 - 14.09.20 - 23:53
Как можно отлаживать скрипты для openconf или в принципе vbs скрипты?
   Ёпрст
 
315 - 15.09.20 - 01:42
(312) может быть, проверю потом
(314) https://1c.alterplast.ru/faq/openconf.html
   Ёпрст
 
316 - 15.09.20 - 01:46
   Ёпрст
 
317 - 15.09.20 - 01:46
Есть всё что нужно
   Franchiser
 
318 - 15.09.20 - 12:19
Доработал скрипт:
'------------------------------------------------------------------
'Добавление строк в dd(dds)
Sub ProcessDD()

    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FileExists(IBDir & "1cv7.ddx") Then

        If FSO.FileExists(IBDir & "1cv7.dd") Then
            ext = "dd"
        Else
            ext = "dds"
        End If
        
        'Резервное копирование исходного dd
        FSO.CopyFile IBDir & "1cv7." & ext, IBDir & "1cv7." & ext & ".bak", True
    
        'Обработка расширенного словаря - ddx
        'Строки на символ "X" состоят из двух частей:
        '  до символа "%" - имя сушествующей в dd таблицы(Т) к которой необходимо применить доп. описание
        '  после символа "%" - строка дополнительного описание которая вставляется после описания полей Т
        'Все другие строки добавляются в конец dd
        
        'Построение ассоциативного массива, где: Ключ - имя таблицы, Значение - строки доп. описания
        Set XDict = CreateObject("Scripting.Dictionary")
        Set TS = FSO.OpenTextFile(IBDir & "1cv7.ddx", 1)
        AppendStr = ""
        Do While TS.AtEndOfStream <> True
            Str = TS.ReadLine()
            Ch = Left(Str, 1)
            If Ch = "X" Then
                Arr = Split(Mid(Str,3), "%", 2)
                TableName = RTrim(Arr(0))
                If XDict.Exists(TableName) Then
                    XDict.Item(TableName) = XDict.Item(TableName) & vbNewLine & Arr(1)
                Else
                    XDict.Add TableName, Arr(1)
                End If
            Else
                AppendStr = AppendStr & vbNewLine & Str
            End If
        Loop
        TS.Close()
        
        Set TS = FSO.OpenTextFile(IBDir & "1cv7." & ext & ".bak", 1) 'для чтения
        Set TS_Out = FSO.OpenTextFile(IBDir & "1cv7."& ext, 2) 'для перезаписи
        CurTable = ""
        Mode = ""
        Do While TS.AtEndOfStream <> True
            Str = TS.ReadLine()
            SubStr = Left(str, 2)
            Select Case SubStr
                Case "T="
                    Arr = Split(Str, "|", 3, 0)
                    CurTable = RTrim(Mid(Arr(0),3))
                Case "F="
                    Mode = "F"
                Case "I="
                    Mode = "I"    
                Case Else
                    If Mode = "I" Then
                        Mode = ""
                        If XDict.Exists(CurTable) Then
                            TS_Out.WriteLine(XDict.Item(CurTable)) 'Запись строк доп. описания
                        End If
                    End If
            End Select
            TS_Out.WriteLine(Str) 'Копирование строки
        Loop
        TS.Close()
        
        If AppendStr > "" Then
            TS_Out.Write("### ddExtension ###")
            TS_Out.Write(AppendStr) 'Добавление строк в конец
        End If
        TS_Out.Close()
        
        MsgBox "Внесены изменения в 1cv7." & ext
        
    End If 'FileExists(IBDir & "1cv7.ddx")
    
End Sub

'------------------------------------------------------------------
'Удаление строк описания доп.таблиц из dd(dds) перед реорганизацией
'чтобы Конфигуратор не удалил таблицы из базы данных
Sub UnProcessDD()
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    If FSO.FileExists(IBDir & "1cv7.ddx") Then

        If FSO.FileExists(IBDir & "1cv7.dd") Then
            ext = "dd"
        Else
            ext = "dds"
        End If
        
        'Резервное копирование исходного dd
        FSO.CopyFile IBDir & "1cv7." & ext, IBDir & "1cv7." & ext & ".tmp", True
    
        Set TS = FSO.OpenTextFile(IBDir & "1cv7." & ext & ".tmp", 1) 'для чтения
        Set TS_Out = FSO.OpenTextFile(IBDir & "1cv7."& ext, 2) 'для перезаписи
        CurTable = ""
        Mode = ""
        Do While TS.AtEndOfStream <> True
            Str = TS.ReadLine()
            If Str = "### ddExtension ###" Then
                MsgBox "del ddExtension"
                Exit Do
            End If
            TS_Out.WriteLine(Str) 'Копирование строки
        Loop
        TS.Close()
        TS_Out.Close()
        
        FSO.DeleteFile(IBDir & "1cv7." & ext & ".tmp")
    End If 'FileExists(IBDir & "1cv7.ddx")
    
End Sub

'------------------------------------------------------------------
Sub Configurator_OnMsgBox(Text, Style, DefAnswer, Answer)
    If Left(Text,49) = "При сохранении метаданных будет произведен анализ" Then
        UnProcessDD()
    ElseIf Text = "Реорганизация информации закончена!" Then
        ProcessDD()
    End If
End Sub
   Ёпрст
 
319 - 15.09.20 - 13:18
(318) еще немного и дорастешь до своих вьюх\триггеров\прямой записи...
   Ёпрст
 
320 - 15.09.20 - 13:22
Хотя, всё потом в снеговике пригодится, там те же грабли вид сбоку.
Борьба за универсальность ограничивает возможности платформы.
Хотя могли бы на селезнёвке выпускать релизы 1с-ины чисто под контретную бд - сскуль\постриги\..и т.д Где использовался весь функционал того же tsq в запросах + создание своих индексов, а не там где галочка "индексировать" ну и т.д
   Franchiser
 
321 - 15.09.20 - 13:30
(319) Я уже setattrs переделал на прямую запись в скуль...
   Mikeware
 
322 - 16.09.20 - 13:06
(320) Скинь, плз, какую-нибудь свою обработку с разворачиванием 1с++ и формекса из этой обработки.
домашний архив пока недоступен, а знакомая попросила наваять ей отчетик...
   Ёпрст
 
323 - 16.09.20 - 13:40
(322) на вот, тока там не совсем актуальные версии
http://catalog.mista.ru/public/79515/

тут бесплатно, тока мыло надо ввести, на мыло придёт ссылка
   Ёпрст
 
324 - 16.09.20 - 13:41
в поделке есть описание, чем запакованы dll, или в коде не помню.
   Franchiser
 
325 - 16.09.20 - 13:45
(324) попробовал отключить бух учет штатно, выдает сообщение "Бухгалтерский учет не может быть отключен. Есть проведенные документы..."
   Franchiser
 
326 - 16.09.20 - 13:55
Как сейчас получается APPCODE 21 ?
Из описания:
Число, отражающее принадлежность документа к компонентам. Возможные значения:
0 - не принадлежит никакому учету.
(1) 000001 - опер учет.
(2) 000010 - расчет.
(4) 000100 - бух учет.
(8) 001000 - движения периодических реквизитов.
(16) 010000 - существует документ операция у документа (документ может быть не проведен, но тогда должно быть выбрано "Создавать операцию - Всегда" в окне свойств документа).
(32) 100000 - Выполнен метод Операция.Записать(); в документе, принадлежащем бух. учету.
(20) 010100 - Это документ "Операция".
Возможна их комбинация, например 6 = 2+4 (бух. учет + расчет), 7 = все три компоненты. Тип - Число(2).
   Mikeware
 
327 - 16.09.20 - 13:56
(323) Спасибо!
   Mikeware
 
328 - 16.09.20 - 13:57
(326) Существует операция+проведен по бухучету+проведне  по оперучету
   Mikeware
 
329 - 16.09.20 - 13:58
(325) апдейтом замени все CLOSED>0 на 1
   Franchiser
 
330 - 16.09.20 - 13:59
(328) при отключении бух. учета (оставить только опер. уч) нужно проставить appcode = 1 и удалить таблицу _1Soper ?
 
 Рекламное место пустует
   Franchiser
 
331 - 16.09.20 - 13:59
(329) это зачем?
   Mikeware
 
332 - 16.09.20 - 14:00
(330) я не помню, проверяет ли он аппкод. емнип, только проведение проверяет
(331) чтоб был проведен только по упручету
   Franchiser
 
333 - 16.09.20 - 14:00
Сейчас Closed = 4 это не проведен
Closed = 5 это проведен
   Mikeware
 
334 - 16.09.20 - 14:02
(333) 4 - проведен по бухучету
   Franchiser
 
335 - 16.09.20 - 14:03
(332) так получится что все документы проведенные, а нужно непроведенные оставить непроведенными.
   trad
 
336 - 16.09.20 - 14:03
(333) Closed = 4 - проведен, по бух
   trad
 
337 - 16.09.20 - 14:04
(329) не корректно. Например так можно 20 превратить в 1, а это фигня.
   Mikeware
 
338 - 16.09.20 - 14:04
(333) ну проверь на копии. вот чесслово, не помню - лет 20 назад делал
(335) значит,  CLOSED&1=1 на 1
   Franchiser
 
339 - 16.09.20 - 14:05
Мне нужны значения которые нужно поставить в поле closed при отключении  бух. учета
   trad
 
340 - 16.09.20 - 14:05
надо так
update _1sjourn
set closed = closed&1
   Franchiser
 
341 - 16.09.20 - 14:05
А CLOSED&1=0 заменить на 0 ?
   trad
 
342 - 16.09.20 - 14:08
CLOSED&1=1 на 1, а CLOSED&1=0 на 0
записывается так (340)
   Mikeware
 
343 - 16.09.20 - 14:08
(341) - см (340)
   trad
 
344 - 16.09.20 - 14:09
аппкод - аналогично
   Franchiser
 
345 - 16.09.20 - 14:15
(344) Так?

update _1sjourn
set appcode = 1
   Mikeware
 
346 - 16.09.20 - 14:21
(345) update _1sjourn
set appcode = appcode&1
   Mikeware
 
347 - 16.09.20 - 14:22
Хотя по идее, без принадлежности документов быть не должно
   Franchiser
 
348 - 16.09.20 - 14:23
(346)
Select
21&1

Возвращает 1
   Ёпрст
 
349 - 16.09.20 - 14:26
(348) через метаданные обойди доки и сделай условие, что если есть галка опер учет, то апкоде =1 иначе 0 и привет
в запросе условие на iddocdef и case воткнешь и всё
   Ёпрст
 
350 - 16.09.20 - 14:28
а можешь и еще тупее, 2 запроса и 

update _1sjourn set appcode = 1 where iddocdef in ($ВидДокумента.Один,....$ВидДокумента.Y)
   Ёпрст
 
351 - 16.09.20 - 14:29
для тех кто в опер учете и 0 для всех остальных
   Ёпрст
 
352 - 16.09.20 - 14:29
ну и truncate table _1soper и 1sentry
   Franchiser
 
353 - 16.09.20 - 14:29
Уже поправил такими запросами:
update _1sjourn
set closed = closed&1
where IDDOCDEF = 130

update _1sjourn
set AppCode = 1
where IDDOCDEF = 130

Но сообщение осталось, truncate не делал
   Ёпрст
 
354 - 16.09.20 - 14:33
При желании, можешь и на пустышке нужный мд и словарик создать и хоть на ходу подсунуть в рабочую базу
   Ёпрст
 
355 - 16.09.20 - 14:33
эт чтоб оно реструктуризацию потом не делало
   Franchiser
 
356 - 16.09.20 - 14:47
(355) все удалил, заменил, и все равно ругается...
   Franchiser
 
357 - 16.09.20 - 14:49
(254) подсунуть только мд? dd от пустышки не подойдет
   Ёпрст
 
358 - 16.09.20 - 14:50
(357) чей та ? словари тоже нужен
   Ёпрст
 
359 - 16.09.20 - 14:51
очисти еще таблицы итогов и итоги по субконто
   Ёпрст
 
360 - 16.09.20 - 14:51
и табличку плана счетов до кучи
 
 Рекламное место пустует
   Franchiser
 
361 - 16.09.20 - 14:56
(358) у меня dds файл со своими добавленными индексами. Структура DD сильно отличается от DDS
   Ёпрст
 
362 - 16.09.20 - 14:59
(361) дык пустышку вскуле создай, и добавь свои поля
   Franchiser
 
363 - 16.09.20 - 15:02
а что меняется в словаре, если я отключаю бу в МД?
   Franchiser
 
364 - 16.09.20 - 15:03
Не достаточно перетащить МД из скульной базы в файловую и там внести исправление?
   trad
 
365 - 16.09.20 - 15:03
(363) на подобные вопросы лучше (полезнее) отвечать самому. Делаешь да смотришь
   Mikeware
 
366 - 16.09.20 - 15:05
Да, блин, без опенконнфа - пофигуратор 7.7 действительно неприятен...
   Franchiser
 
367 - 16.09.20 - 15:11
(365) Ну вроде сделал: все работает в моем варианте.
   Ёпрст
 
368 - 16.09.20 - 15:13
(367) это в каком ? просто с мд ?
   Franchiser
 
369 - 16.09.20 - 15:16
(368) да, создал файловую пустышку, там поменял признак, вернул мд на место в скуль
   Ёпрст
 
370 - 16.09.20 - 15:17
(369) по-уму, еще надо в пустышке удалить план счетов, тогда вообще бух учет улетит
   Franchiser
 
371 - 16.09.20 - 16:25
(370) да надо бы, но тогда может код править придется: когда новую базу делаешь он автоматически заполняется...
   Z1
 
372 - 16.09.20 - 18:12
(0) НА инфостарте есть моя обработка  "Поиск Ошибок в регистрах 7.7.
Обработка как раз для Вашей базы. Прогоните базу по всем кнопкам.
Обработка писалась по поиску ошибок ( которые  я смог представить )
   Z1
 
373 - 16.09.20 - 18:17
(0 , 110 ) В 110 найдите ошибку, лучше найдите сами и это не потому что не хочу сказать,
а потому что пока свои шишки не набъешь не поймешь.
Подсказка: ошибка не с точки зрения правильности выполнения запроса, а сточки зрения производительности.
   Z1
 
374 - 16.09.20 - 18:22
+ 372  в 128 ссылка дана на 372
   Z1
 
375 - 16.09.20 - 18:53
(274)  >>> У нас есть как раз такой собственный некластерный индекс в таблице _1sjourn. Может в этом проблема?
Если дополнительный индекс уникальный то скорее всего в нем проблема, уникальность не выполнима вот и получаешь ошибку обновления,
если индекс неуникальный то он никак не может влиять на ситуацию.
   Z1
 
376 - 16.09.20 - 19:02
(297) назвать индекс IDDIC в таблице где и поля такие есть - это сильно.
Лучеше переименуйте как нибудь по другому.
   Z1
 
377 - 16.09.20 - 19:07
+ 375 так это его так 1с назвала. Вот уж не разу на это пристально не смотрел.
   Z1
 
378 - 16.09.20 - 19:14
(330) да не трогай бы бы учет : там есть еще счета и оборотка по счетам.
Если к ним не обращаешься лишние таблицы не мешают а при удалении еще что нибудь поломаешь.
   Franchiser
 
379 - 16.09.20 - 23:28
(375) вроде разобрались: переставление строки индекса в файле dds решило проблему
   Franchiser
 
380 - 16.09.20 - 23:30
(364) обработка из 128 только ищет ошибки и не исправояет. Я ее запускал. Мне не нужно устранять все ошибки , а решить конкретную проблему.
   Franchiser
 
381 - 16.09.20 - 23:32
(376) индекс не называется iddic
   Franchiser
 
382 - 16.09.20 - 23:34
(376) индекс K_IX1
   Z1
 
383 - 17.09.20 - 08:07
(380) Ну это Ваша база, Ваша ответственность, Вам решать что нужно а что нет
   Z1
 
384 - 17.09.20 - 08:12
(382)
индекс
I=K_IX1                    |              |0     |IDDOC,DATE_TIME_IDDOC,SP652                                |0  

если это индекс на таблицу _1sjourn и описание индекса совпадает с тем что прописано в ms sql
то этот индекс бесполезный - он только замедляет работу сервера ms sql
   Franchiser
 
385 - 17.09.20 - 11:41
(384) Почему он замедляет работу сервера, он делался для какого-то отчета для выполнения прямого запроса. Состав индекса не обсуждается.
   ДенисЧ
 
386 - 17.09.20 - 11:50
(385) Отчёт у тебя выполняется раз в неделю, а индекс обновляется на каждую запись документа... Любого...
   Franchiser
 
387 - 17.09.20 - 12:00
(386) я ХЗ, индекс не мой, я его не могу просто так удалить. Какие конкретно претензии к данному индексу?
   Franchiser
 
388 - 17.09.20 - 12:02
Так можно про любой индекс сказать, что избыточные индексы замедляют проведение.
   trad
 
389 - 17.09.20 - 12:02
(385) "Состав индекса не обсуждается."
А почему бы и нет?
Вот я вижу наличие этих полей в порядке индекса (IDDOC,DATE_TIME_IDDOC), и в таком порядке совершенно бессмысленным.

Значение IDDOC однозначно определяет значение DATE_TIME_IDDOC.
Если в условии запроса не указываем IDDOC, то индекс не работает
Если в условии запроса указываем IDDOC, то ему будет соответствовать одно и только одно DATE_TIME_IDDOC, при этом DATE_TIME_IDDOC нужно будет указывать обязательно, когда хотим чтобы и SP652 работало.
   Franchiser
 
390 - 17.09.20 - 12:05
(389) как  понимаю Индексы работают если такой же состав полей указан в условии связи с другими таблицыми или секции where. Этот индекс был создан человеком, на основании анализа планов запроса.
   Franchiser
 
391 - 17.09.20 - 12:06
Абсолютно пофиг что "Значение IDDOC однозначно определяет значение DATE_TIME_IDDOC".
Даже у 1С есть индексы которые включают IDDOC и DATE_TIME_IDDOC
   ДенисЧ
 
392 - 17.09.20 - 12:09
(391) А кто тебе сказал такую чушь, что у 1с нормальные индексы?
   trad
 
393 - 17.09.20 - 12:09
Отсюда рассмотрим два варианта:
1. (IDDOC, SP652)
При указании в запроса IDDOC = А и SP652 = В - индекс будет работать.
2. (DATE_TIME_IDDOC, SP652)
При указании в запроса DATE_TIME_IDDOC = А и SP652 = В - индекс будет работать, но для этого достаточно п.1
Если рассматривать запрос на интервал DATE_TIME_IDDOC между А и Б, то в ключе SP652 - работать все равно не будет, а для интервала уже есть штатный индекс.

Отсюда вывод. Имеет смысл только (IDDOC, SP652)
   ДенисЧ
 
394 - 17.09.20 - 12:10
(390) Знаешь, почему-то мне кажется, что trad разбирается в индексах на порядок лучше как тебя, так и того человека...
   Franchiser
 
395 - 17.09.20 - 12:10
Если есть Join по IDDOC,DATE_TIME_IDDOC,SP652 то этот индекс будет использоваться
   Franchiser
 
396 - 17.09.20 - 12:11
(394) Еще раз, я не могу удалить индекс, т.к. он был создан не мной. Это требует согласования и обоснования.
   trad
 
397 - 17.09.20 - 12:14
(390) "Этот индекс был создан человеком, на основании анализа планов запроса."
Значит анализ был так себе.
См. (393) - почему этот индекс не имеет смысла
   trad
 
398 - 17.09.20 - 12:14
(396) Индекс можешь и не удалять, но понять не помешает, что бы потом самому делать правильно
   Franchiser
 
399 - 17.09.20 - 12:15
(393) Почему индекс будет работать "При указании в запроса DATE_TIME_IDDOC = А и SP652 = В" ?
   trad
 
400 - 17.09.20 - 12:15
(395) правильно, будет.
Но он также отлично будет работать если будет таким (IDDOC,SP652)
  1  2  3  4  5   

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