Имя: Пароль:
1C
1C 7.7
v7: В справочнике номенклатура появились элементы Р.ФС
,
0 OnePrg
 
10.10.21
23:24
В справочнике номенклатура появились элементы Р.ФС

Р.ФС-1
Р.ФС-2 и т.д.

Это что? Восстановленные ссылки при тестировании и исправлении?
1 acanta
 
10.10.21
23:37
Родители восстановленных ссылок при ТИИ вероятно..
2 OnePrg
 
10.10.21
23:38
пометил вручную на удаление, провёл удаление, открываю - они на месте со снятой пометкой удаления
3 Злопчинский
 
11.10.21
00:57
восстановленные потерянные элементы.
сделай штатный поиск ссылок - увидишь где они задействованы.
самовольное снятие пометок удаления программой - у себя не встречал.
возможно, вручную снята пометка удаления подчиненных элементов, что автоматом привело к связанной отмене удаления родителей.
4 OnePrg
 
12.10.21
10:41
В последнее время много таких элементов стало появляться после каждого ТИИ. База на SQL. В чём может быть причина?
5 Злопчинский
 
12.10.21
12:44
Кривые обмены с Риб как вариант. Неаккуратная работа с транзакцияии как вариант. Удаление без контроля ссылок.
???
6 OnePrg
 
12.10.21
16:44
(5) Кривые обмены от чего? От кривых рук программиста или сбой на уровне системы?
7 Злопчинский
 
12.10.21
16:49
(6) Скорее от кривых рук... могу ошибаться, конечно.
Возможно проводились подчистики 1supdts или нарушена ручками логика обменов. что-то куда-то не уходило или наоборот приходило, когда в базе не д.б.
8 OnePrg
 
12.10.21
16:53
(7) Перед каждым обменом выполняем обработку чистки 1supdts. Посмотри пожалуйста, тут бяка может быть?

    ПолучитьПриходныеНакладныеСУстановкойРозничнойЦены();
    
    RS = СоздатьОбъект("ODBCRecordset");
    
    RS.ВыполнитьСкалярный("
          |IF OBJECT_ID('tempdb..#ТаблВрем', 'U') IS NOT NULL
          |  DROP TABLE #ТаблВрем;
          |CREATE TABLE #ТаблВрем (КодИБ Char(3),СкладКод int);");
    RS.Подготовить("
      |insert into #ТаблВрем(КодИБ, СкладКод)
      |values(?, ?)");
    RS.ВыполнитьSQL_ИзТЗ(тбСклады);
                            
    Склады = СоздатьОбъект("Справочник.МестаХранения");
    тбСклады.НоваяКолонка("Склад");
    Если тбСклады.КоличествоКолонок() = 3 Тогда
        тбСклады.ВставитьКолонку("П",1);
        тбСклады.ВыводитьПиктограммы("П");
        тбСклады.ВыбратьСтроки();
        Пока тбСклады.ПолучитьСтроку() = 1 Цикл
            тбСклады.П = 2;  
            Склады.НайтиПоКоду(тбСклады.СкладКод);
            тбСклады.Склад = Склады.ТекущийЭлемент();
        КонецЦикла;        
    КонецЕсли;
    тбСклады.УдалитьКолонку("СкладКод");    
    
    тбСклады.ВыбратьСтроки();
    Пока тбСклады.ПолучитьСтроку() = 1 Цикл
        
        Если тбСклады.П = 1 Тогда
            Продолжить;
        КонецЕсли;
        
        Сообщить(тбСклады.Склад);
                
        //***************************************
        //     очищаем документы
        //***************************************
        ТекстЗапроса = "
        |SELECT
        |    Т1.OBJID as [Док $Документ],
        |    Т1.IDDocDef as Док_вид,
        |   Склады.ID as [Склад $Справочник.МестаХранения],                            
        |   Т1.DBSIGN,
        |    Т1.OBJID
        |FROM
        |(
        |SELECT
        |    U.OBJID,
        |    J.IDDocDef,
        |   U.DBSIGN,
        |   ТаблВрем.СкладКод
        |FROM
        |    _1SUPDTS as U
        |INNER JOIN
        |    _1Sjourn as J ON U.TypeID=J.IDDocDef And U.OBJID=J.IDDoc
        |LEFT JOIN
        |    #ТаблВрем as ТаблВрем ON U.DBSIGN=ТаблВрем.КодИБ) as Т1
        |LEFT JOIN
        |    $Справочник.МестаХранения as Склады ON Т1.СкладКод = Склады.Code
        |WHERE
        |   Склады.ID = :ВыбСклад
        |   AND NOT Т1.OBJID IN (SELECT Val FROM #спПН)";
        RS.УстановитьТекстовыйПараметр("ВыбСклад",  тбСклады.Склад);
        RS.УложитьСписокОбъектов(спПН, "#спПН");
        тбОбмен = RS.ВыполнитьИнструкцию(ТекстЗапроса);
        
        тбУдалять = СоздатьОбъект("ТаблицаЗначений");
        тбУдалять.НоваяКолонка("OBJID");
        тбУдалять.НоваяКолонка("DBSIGN");
        
        тбОбмен.ВыбратьСтроки();                
        Пока тбОбмен.ПолучитьСтроку()=1 Цикл        
            Удалять = 0;
            Если ПустоеЗначение(тбОбмен.Склад) = 1 Тогда
                Удалять = 1;
            ИначеЕсли ДокументСклада(тбОбмен.Док,тбОбмен.Склад) = 0 Тогда
                Удалять = 1;
            КонецЕсли;
            
            Если Удалять = 1 Тогда
                тбУдалять.НоваяСтрока();
                тбУдалять.OBJID     = тбОбмен.OBJID;
                тбУдалять.DBSIGN     = тбОбмен.DBSIGN;
            КонецЕсли;
            
            Если тбУдалять.КоличествоСтрок()=1000 Тогда
                RS.ВыполнитьСкалярный("
                |IF OBJECT_ID('tempdb..#тбУдалять', 'U') IS NOT NULL
                |  DROP TABLE #тбУдалять;
                |CREATE TABLE #тбУдалять (OBJID Char(9),DBSIGN Char(3));");
                RS.Подготовить("
                |insert into #тбУдалять(OBJID, DBSIGN)
                |values(?, ?)");
                RS.ВыполнитьSQL_ИзТЗ(тбУдалять);
                
                ТекстЗапроса = "
                |DELETE
                |    _1SUPDTS
                |FROM
                |    _1SUPDTS as U          
                |INNER JOIN
                |   #тбУдалять as тбУдалять ON U.OBJID = тбУдалять.OBJID and U.DBSIGN = тбУдалять.DBSIGN";
                RS.ВыполнитьИнструкцию(ТекстЗапроса);                                                    
                
                тбУдалять.УдалитьСтроки();
            КонецЕсли;
        КонецЦикла;
        
        RS.ВыполнитьСкалярный("
        |IF OBJECT_ID('tempdb..#тбУдалять', 'U') IS NOT NULL
        |  DROP TABLE #тбУдалять;
        |CREATE TABLE #тбУдалять (OBJID Char(9),DBSIGN Char(3));");
        RS.Подготовить("
        |insert into #тбУдалять(OBJID, DBSIGN)
        |values(?, ?)");
        RS.ВыполнитьSQL_ИзТЗ(тбУдалять);
        
        ТекстЗапроса = "
        |DELETE
        |    _1SUPDTS
        |FROM
        |    _1SUPDTS as U          
        |INNER JOIN
        |   #тбУдалять as тбУдалять ON U.OBJID = тбУдалять.OBJID and U.DBSIGN = тбУдалять.DBSIGN";
        RS.ВыполнитьИнструкцию(ТекстЗапроса);                                                    
        Сообщить("   документы");
        
        //***************************************
        //     очищаем справочник переоценки
        //***************************************
        
        //Сообщить("Удаляем из обмена переоценки;...");    
        
        ТекстЗапроса = "
        |DELETE
        |    _1SUPDTS
        |FROM
        |    _1SUPDTS as U2
        |INNER JOIN
        |    $Справочник.Переоценки as Переоценки ON U2.TypeID=3494 And  U2.OBJID=Переоценки.ID
        |LEFT JOIN
        |    #ТаблВрем as ТаблВрем ON U2.DBSIGN=ТаблВрем.КодИБ
        |LEFT JOIN
        |    $Справочник.МестаХранения as Склады ON ТаблВрем.СкладКод = Склады.Code
        |WHERE
        |   Склады.ID <> $Переоценки.Склад AND Склады.ID = :ВыбСклад";
        RS.УстановитьТекстовыйПараметр("ВыбСклад",  тбСклады.Склад);
        RS.ВыполнитьИнструкцию(ТекстЗапроса);
        Сообщить("   переоценки");                  
        тбСклады.П = 1;
    КонецЦикла;
9 OnePrg
 
12.10.21
16:55
(7) как например ручками можно нарушить логику обменов?
10 Злопчинский
 
12.10.21
17:23
(9) я хз.. например - удалить принудительно элементы справочника без обмена. а потом с обменом приходят эти данные этим элементам...
11 Злопчинский
 
12.10.21
17:24
(8) я хз, по УРБД слаб. Не люблю этот механизм. Без извращений нормально не сделать обмены.
12 АгентБезопасной Нацио
 
12.10.21
18:49
(11) зря ты так. нормальный механизм. да, не хватает штатных возможностей, но вполне устойчивый... МОД косячил, да. а с УРБД даже со всякими извращениями типа "снежинки" проблем не было...
(10) если они придут с обменом - то они будут "натуральные", а не "ФС"
(5) ну еще работа редактированием справочников в списке, и что-то еще было с ИспользоватьСписокЭлементов.  
(4) если индексы в порядке - то из-за соотношения радиусов.
13 acanta
 
12.10.21
19:09
Возможно, периферия периодически чистит базу у себя с удалением чужих элементов или своих ненужных. В журнале регистрации что? Каков уид (значениевстрокувнутр) этих ссылок и их место создания?
В конфигурации есть доработки по урбд (префикс иб создания в кодах и номерах, дата создания в элементах и документах, базы урбд как справочник с какими то настройками, например прав, место создания и редактирования в объектах и т.д. и т.п.)
14 acanta
 
12.10.21
19:11
Мод в свое время мы не рискнули к сожалению..
15 victuan1
 
13.10.21
04:09
(14) Считаю, что к счастью. МОД та еще какашка.
16 OnePrg
 
13.10.21
16:11
Ну ладно элементы "ФС", но выходим на то, что после каждого обмена нужно делать ТИИ потому что начинаются глюки типа

- 1С вылетает, когда снимаешь иерархию в списке справочника

- 1С зависает, когда пытаешься открыть карточку определённого товара, при этом другие товары отрываются

Перед обменом делаем чистку 1supds, неужели в этом может быть причина разрушения базы?
17 Злопчинский
 
13.10.21
16:53
(16) проверяй на циклические ссылки и неправильность ссылок.
18 Arbuz
 
14.10.21
15:55
Было такое, только не "ФС", а, кажись, "РС". На периферийке обесточили комп во время записи в базу. Похерились некоторые таблички. Их в целом вылечили, потерялось буквально меньше десятка строк. После обмена появились эти артефакты в справочнике номенклатуры, причём появились как новые, так и перезаписались существующие вместе с подчинёнными. Мы достаточно легко и быстро это поправили - бэкапы, логи, голова, руки. Я убеждён в (0) то кривой обмен - 146%, тому что в (8) такое.
19 АгентБезопасной Нацио
 
14.10.21
15:59
(18) кривой - не обмен. (хотя на говнокод из 8 смотреть страшновато).
у меня апдейтс корректировался (сначала DTSом в батнике, потом триггером) лет 8 (и 3 после), никаких проблем не было...
20 Arbuz
 
14.10.21
17:57
(19) Так то у вас не кривой, а у него кривой, там же логика хромает на все конечности, не считая запросы в циклах и сбор данных мимо запросов, там же какие-то пересекающиеся выборки. Вот это "выборка в ТЗ -> выполнил запрос с данными из ТЗ -> выборка в ещё ТЗ по результату -> раз в 1к итераций ещё запрос с данными ТЗ -> лапша после цикла с тем же запросом", да и всё остальное - это же, мля, шиза полная. Ему же, вообще-то, говорили в смежных ветках, что OBJID нельзя собирать с потолка.
21 АгентБезопасной Нацио
 
14.10.21
18:20
(20) ну я уже говорил, что причина - в отношении радиусов...
22 Ёпрст
 
14.10.21
23:41
(8)

это пять!


  |LEFT JOIN
        |    $Справочник.МестаХранения as Склады ON Т1.СкладКод = Склады.Code
        |WHERE
        |   Склады.ID = :ВыбСклад
        |   AND NOT Т1.OBJID IN (SELECT Val FROM #спПН)";
23 Ёпрст
 
14.10.21
23:44
Если что, (8) в топку.
+ если нужна помощь, то описать задачу, что именно нужно выкинуть из файла регистрации изменений.
А с той кашей, что в (8) ничего хорошего не выйдет.
Неудивительно, что понасоздавались ссылки из прибитых (недогруженных) рибом при ТиИ..
ЗЫ: накой вообще ТиИ запускают - тоже, загадка
24 Злопчинский
 
15.10.21
00:48
(23) Пацифисты потому что.. Не могут убить в себе перфекциониста...
25 OnePrg
 
15.10.21
10:56
(22) Объясни пожалуйста
26 Ёпрст
 
15.10.21
14:49
(25) че объяснять то ?
left join там не нужен от слова совсем, код справочника склады - тоже.
27 Ёпрст
 
15.10.21
14:50
пихать во времянку код справочника.. тоже не надо.
Как и сама времянка и подготовленный запрос там не впёрлись ни раху.
28 Ёпрст
 
15.10.21
14:51
*разу