Имя: Пароль:
1C
 
Как удалить запись с пустым полем регистратор из регистра накопления?
0 Sashko773
 
22.02.10
17:42
Подскажите плиз как удалить запись с пустым полем регистратор из регистра накопления? Проблема именно в том что ссылка на регистратор не битая а пустая.
1 Михей
 
22.02.10
17:46
ГДЕ НЕ Регистратор.Номер ЕСТЬ NULL
2 DrShad
 
22.02.10
17:53
(1) и что это даст?
3 Sashko773
 
22.02.10
17:59
(2)Наверное отобрать все записи с не пустым значением регистратора и перезаписать их в регистр
4 DrShad
 
22.02.10
18:00
в регистр без регистратора?
5 DrShad
 
22.02.10
18:01
я бы для начала запустил лекарство
6 Sashko773
 
22.02.10
18:02
(5) какое?
7 Sashko773
 
22.02.10
18:02
ТИИ?
8 DrShad
 
22.02.10
18:04
нивкоем случае
9 DrShad
 
22.02.10
18:04
chdbfl.exe
10 IronDemon
 
22.02.10
18:06
11 Михей
 
22.02.10
18:07
Запрос = Новый Запрос();
   ТекстЗапроса = "ВЫБРАТЬ
   |    Регистратор
   |ИЗ "+ТипРегистраЗ+"."+ИмяРегистра+"
   |ГДЕ
   |    (НЕ Регистратор = &ПустаяСсылкаДокумента)
   |    И Регистратор.Номер ЕСТЬ NULL";
   
   Если ЕстьОрганизация Тогда
       ТекстЗапроса =  ТекстЗапроса + " И " + ТипРегистраЗ+"."+ИмяРегистра+".Организация = &Организация ";
       Запрос.УстановитьПараметр("Организация", Организация);
   КонецЕсли;

   Запрос.Текст = ТекстЗапроса;
   Запрос.УстановитьПараметр("ПустаяСсылкаДокумента", Неопределено);
   
   
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       Если Строка(Выборка.Регистратор) <> GUID Тогда
           Продолжить;
       КонецЕсли;
       
       
       Набор = ТипРегистра[ИмяРегистра].СоздатьНаборЗаписей();
       Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
       Набор.ОбменДанными.Загрузка = Истина;
       Набор.Записать();
       ОбработкаПрерыванияПользователя();
       Состояние("Удаление битых ссылок в "+ТипРегистра+"."+ИмяРегистра);
       

       
   КонецЦикла;
12 Sashko773
 
22.02.10
18:07
А разве это не тоже самое?
13 Sashko773
 
22.02.10
18:11
(11) Пробовал, не работает. Выскакивает ошибка о том что не задан отбор для регистратора
14 Sashko773
 
22.02.10
18:11
(10) щас попробую
15 Sashko773
 
22.02.10
18:19
(10) Вообще не пашит, даже ни одной кривой записи не находит
16 DrShad
 
22.02.10
18:20
тогда колись как и в каком регистре ты его обнаружил?
17 IronDemon
 
22.02.10
18:21
(15) Пашет, но ищет не пустые а битые
18 Михей
 
22.02.10
18:22
все там работает, запускал уже не раз
19 Sashko773
 
22.02.10
18:22
Да просто. Обнавлять не дается))). Открыл регистр РабочееВремяРаботниковОрганизаций а там пустых строк аж 120 штук
20 Sashko773
 
22.02.10
18:23
Все поля не заполнены. Думаю из-за потери связи с базой (на серваке) появились такие записи
21 Sashko773
 
22.02.10
18:24
(18) А у тебя именно пустые ссылки были или на несуществующие документы?
22 Sashko773
 
22.02.10
18:24
У миня пустые - NULL
23 DrShad
 
22.02.10
18:25
конфа?
24 Михей
 
22.02.10
18:25
(21) на не существующий документы
у которых <объект не найден>
25 Sashko773
 
22.02.10
18:26
(23) ЗУП типовая
26 Михей
 
22.02.10
18:27
и шо у тебя возвращает вот это?

ВЫБРАТЬ
*
ИЗ
 РегистрСведений.РабочееВремяРаботниковОрганизаций
ГДЕ
ГДЕ НЕ Регистратор.Номер ЕСТЬ NULL
27 Sashko773
 
22.02.10
18:29
(26) Все целые записи
28 DrShad
 
22.02.10
18:30
(27) не может быть
29 Sashko773
 
22.02.10
18:31
может :)
30 shuhard
 
22.02.10
18:33
(29) если может, то чему равен Регистратор.Номер ?
31 Sashko773
 
22.02.10
18:34
(30) Не понял тебя?
32 DrShad
 
22.02.10
18:35
народ а не может такой глюк быть, если дописали движения к документу не указав его при этом регистратором?
33 73
 
22.02.10
18:35
В (26) <ГДЕ НЕ ...> - не убери. И посмотри, что вернет.
34 DrShad
 
22.02.10
18:36
ведь форма списка регистра такая же форма как и все остальные и если тип значения в табоичном поле не соответствует присваемому то тоже пустая ячейка
35 Sashko773
 
22.02.10
18:36
(28) А чего удивительного то, условие если номер документа регистратора не равен NULL. Вот все записи у которых проставлен регистратор и отбираются
36 Sashko773
 
22.02.10
18:37
(33) ну соответственно все коцаные отобрал
37 Михей
 
22.02.10
18:38
тупанул там НЕ
не надо
38 DrShad
 
22.02.10
18:38
(33) посыпаю голову пеплом
39 Sashko773
 
22.02.10
18:41
(37) Михей пробую твой код, я немного другой юзал. Ругается на    Если Строка(Выборка.Регистратор) <> GUID Тогда
40 Sashko773
 
22.02.10
18:41
Переменная не определена (GUID)
41 Sashko773
 
22.02.10
18:41
Там чаго перед GUID дописать надо?
42 DrShad
 
22.02.10
18:42
(39) естественно
43 Sashko773
 
22.02.10
18:43
(42) и...
44 DrShad
 
22.02.10
18:44
(43) это переменная и надо ей присвоить значение
45 Sashko773
 
22.02.10
18:46
(44) Я просто не совсем вообще понимаю зачем этот кусок и что там проверяется
46 DrShad
 
22.02.10
18:47
там проверяется равенство ссылки
47 Sashko773
 
22.02.10
18:49
Ей надо присвоить идентификатор пустой ссылки что-ли?
48 DrShad
 
22.02.10
18:52
врядли
тогда просто можно было проверить на Пустая()
49 Sashko773
 
23.02.10
16:46
Блин так ничего и не вышло. Тема актуальна. Алгоритм (11) работает только в случае с битыми но не пустыми ссылками. Есть еще предложения???
50 H A D G E H O G s
 
23.02.10
17:20
51 Sashko773
 
23.02.10
17:22
(50) Таблица не найдена "РегистрНакопления.РегистрНакопления"
<<?>>РегистрНакопления.РегистрНакопления КАК РегистрНакопления
52 Sashko773
 
23.02.10
17:27
Подправил, но тем не менее это все равно не работает. Все таже ошибка -
Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Взаиморасчеты с работниками организаций)
53 Михей
 
23.02.10
17:29
(52) это  - Набор.Отбор.Регистратор.Установить(Регистратор);
есть перед записью?
54 Sashko773
 
23.02.10
17:30
(53)Есть, но но там регистратор то пустой. Вот видимо он отбор по пустому установить и не может
55 Sashko773
 
23.02.10
17:31
Может быть можно отобрать только верные записи, очистить регистр и записать туда снова только их
56 Sashko773
 
23.02.10
17:31
Если да, то нипишите как сделать
57 Михей
 
23.02.10
17:32
записывать НаборЗаписей для РегистраНакопления можно только с установленным отбором по Регистратору
58 Sashko773
 
23.02.10
17:33
(57) я понял, а какой выход то найти?
59 Михей
 
23.02.10
17:34
точна уверен что регистратор именно ПустаяСсылка ?
60 Михей
 
23.02.10
17:35
ваще можно запустить ТиИ, с соответствующими настройками для начала
61 Sashko773
 
23.02.10
17:37
(59)точно пустая. Вот этим у меня все такие пустые записи отбираются
ВЫБРАТЬ
*
ИЗ
 РегистрСведений.РабочееВремяРаботниковОрганизаций
ГДЕ Регистратор.Номер ЕСТЬ NULL
62 Sashko773
 
23.02.10
17:37
(59)точно пустая. Вот этим у меня все такие пустые записи отбираются
ВЫБРАТЬ
*
ИЗ
 РегистрСведений.РабочееВремяРаботниковОрганизаций
ГДЕ Регистратор ЕСТЬ NULL
63 Sashko773
 
23.02.10
17:38
(60) Запускал, не помогает
64 Михей
 
23.02.10
17:39
(61) а вот этот?

ВЫБРАТЬ
*
ИЗ
 РегистрСведений.РабочееВремяРаботниковОрганизаций

ГДЕ Регистратор = ЗНАЧЕНИЕ(Документ.ТвойДокумент.ПустаяСсылка)
65 73
 
23.02.10
17:40
(62) А кстати, этот не должен выбирать...
66 Sashko773
 
23.02.10
17:41
(65) Да да этот не отбирает, обманул )
67 Михей
 
23.02.10
17:42
пушо у тебя там все таки не ПустаяСсылка
ссылка у регистратора есть, но нету данных на которые она ссылается

так шо (11) тебя спасет
68 Sashko773
 
23.02.10
17:44
(67) А как быть с этим?
Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Взаиморасчеты с работниками организаций)
69 73
 
23.02.10
17:44
(66)Регистратор - один или неск типов? И что дает (64)?
70 Михей
 
23.02.10
17:45
(68) покажи свой код
71 Sashko773
 
23.02.10
17:46
(69) Один. Условие задать не получается такое. ЗНАЧЕНИЕ(Документ.ТабельУчетарабочегоВремениОрганизаций.ПустаяСсылка)
72 Sashko773
 
23.02.10
17:47
Процедура УдалениеБитыхСсылок()
Запрос = Новый Запрос();
   ТекстЗапроса = "ВЫБРАТЬ
   |РабочееВремяРаботниковОрганизаций.Регистратор КАК Регистратор,
   |РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени КАК ВидВремени
   |ИЗ
   |РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
   |ГДЕ
   //|    (НЕ Регистратор = &ПустаяСсылкаДокумента)
   |     Регистратор.Номер ЕСТЬ NULL";
   
   //Если ЕстьОрганизация Тогда
   //    ТекстЗапроса =  ТекстЗапроса + " И " + ТипРегистраЗ+"."+ИмяРегистра+".Организация = &Организация ";
   //    Запрос.УстановитьПараметр("Организация", Организация);
   //КонецЕсли;

   Запрос.Текст = ТекстЗапроса;
   Запрос.УстановитьПараметр("ПустаяСсылкаДокумента", Неопределено);
   
   
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       //Если Строка(Выборка.Регистратор) <> GUID Тогда
       //    Продолжить;
       //КонецЕсли;
       
       
       Набор = РегистрыНакопления.РабочееВремяРаботниковОрганизаций.СоздатьНаборЗаписей();
       Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
       Набор.ОбменДанными.Загрузка = Истина;
       Набор.Записать();
       ОбработкаПрерыванияПользователя();
       Состояние("Удаление битых ссылок");
   КонецЦикла;    
КонецПроцедуры
73 Sashko773
 
23.02.10
17:48
Все подобные обработки на таком же алгоритме построенны и поэтому ни одна из них мне не помогла
74 73
 
23.02.10
17:50
(71) Как условие не получается? Должно получаться. Или ничего не выбирает? Уточни.
75 Михей
 
23.02.10
17:52
(72) может у тя есть какой то код в модуле набора записей регистра РабочееВремяРаботниковОрганизаций, что мешает записать
76 Sashko773
 
23.02.10
17:52
(74) Ругается вот на это
ЗНАЧЕНИЕ(Документ.ТабельУчетарабочегоВремениОрганизаций.ПустаяСсылка)
не понимает
77 Sashko773
 
23.02.10
17:53
(75) не понял
78 Михей
 
23.02.10
17:54
в модуле набора записей регистра РабочееВремяРаботниковОрганизаций
есть что то?
79 73
 
23.02.10
17:54
(76) 1с 8.0 что ли?
80 73
 
23.02.10
17:56
Вместо (64) попробуй:

ВЫБРАТЬ
*
ИЗ
 РегистрСведений.РабочееВремяРаботниковОрганизаций

ГДЕ Регистратор = &ПустаяСсылка


и
Запрос.УстановитьПараметр("ПустаяСсылка", Документы.ДДДДД.ПустаяСсылка());
81 Sashko773
 
23.02.10
17:56
(78) Это текст внешней обработки с одной единственной процедурой
82 73
 
23.02.10
17:58
(81) У самого регистра тоже модуль есть.... Клацни на нем правой кнопкой мыши в конфигураторе.
83 Sashko773
 
23.02.10
17:58
(80) Регистр кстати не сведений а накопления, просто сначала все с ошибкой начали писать
84 73
 
23.02.10
17:59
(83) Не суть. Копипастил...
85 Sashko773
 
23.02.10
18:03
(78) (81)
Процедура ПередЗаписью(Отказ, Замещение)
   
   Если ОбменДанными.Загрузка Тогда
       Возврат;
   КонецЕсли;
       
   ЗарегистрироватьПерерасчеты();
   
КонецПроцедуры

Процедура ПриЗаписи(Отказ, Замещение)
   
   Если ОбменДанными.Загрузка Тогда
       Возврат;
   КонецЕсли;
   
   ЗарегистрироватьПерерасчеты();
   
КонецПроцедуры

Процедура ЗарегистрироватьПерерасчеты()
   
   Запрос = Новый Запрос(
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    Основные.ФизЛицо,
   |    Основные.Регистратор КАК Регистратор,
   |    Основные.Организация,
   |    Основные.Сотрудник
   |ИЗ
   |    РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремя
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Основные
   |        ПО РабочееВремя.Период >= Основные.ПериодДействияНачало
   |            И РабочееВремя.Период <= Основные.ПериодДействияКонец
   |            И РабочееВремя.Сотрудник = Основные.Сотрудник
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ПерерасчетОсновныхНачислений КАК Перерасчеты
   |        ПО (Перерасчеты.ОбъектПерерасчета = Основные.Регистратор)
   |            И (Перерасчеты.ФизЛицо = Основные.ФизЛицо)
   |            И (Перерасчеты.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка))
   |ГДЕ
   |    РабочееВремя.Регистратор = &Регистратор
   |    И Перерасчеты.ФизЛицо ЕСТЬ NULL
   |    И Основные.Регистратор ЕСТЬ НЕ NULL
   |
   |УПОРЯДОЧИТЬ ПО
   |    Регистратор");
   
   Запрос.УстановитьПараметр("Регистратор", Отбор.Регистратор.Значение);
   
   Выборка = Запрос.Выполнить().Выбрать();
   ПроведениеРасчетов.ДописатьПерерасчетыОсновныхНачислений(Выборка);
   
КонецПроцедуры
86 H A D G E H O G s
 
23.02.10
18:04
У товарисча в регистре записи, с Пустым (не битым) регистраторов.
Регистратор = ПустойСсылке, UID ее =00000000-0000-0000-0000-000000000000.
Только через SQL удалять.
87 H A D G E H O G s
 
23.02.10
18:05
Либо регистр выгрузить в xml, удалить в конфигураторе, реструктуризовать, вставить такой же регистр из копии, загрузить данные их xml
88 Sashko773
 
23.02.10
18:08
(87) весело. Встречал уже такой вариант на одном форуме, думал есть попроще способ. Спасибо наверное так и буду делать. База типовая не хотелось такие манипуляции проводить
89 Михей
 
23.02.10
18:14
а как можно записать в регистр пустую ссылку?
90 Sashko773
 
23.02.10
18:16
(89) были частые прерывания связи с базой во время работы. Я думаю из-за этого так получилось
91 73
 
23.02.10
18:17
(90) Так (80) это подтвердил? Или я что-то пропустил?
92 Sashko773
 
23.02.10
18:31
(91) Запрос так и не сформировал.
ВЫБРАТЬ
   |РабочееВремяРаботниковОрганизаций.Регистратор КАК Регистратор
   |ИЗ РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
   |ГДЕ Регистратор = &ПустаяСсылка"

Запрос.УстановитьПараметр("ПустаяСсылка", Документы.ТабельУчетаРабочегоВремениОрганизации.ПустаяСсылка());
Регистратор  Значение = Ошибка чтения значения
Ошибка? Это не ошибка, это системная функция.