Имя: Пароль:
1C
1С v8
Как быстро найти документ с косячной датой?
0 Desna
 
23.09.13
16:48
запросик бы какой накидать
1 Волшебник
 
модератор
23.09.13
16:51
Выбрать * Из Документ.Имя Где Дата = @КосячнаяДата
2 Defender aka LINN
 
23.09.13
16:51
Накидай
3 Славен
 
23.09.13
16:51
а в списке отбором не?
4 Desna
 
23.09.13
16:52
ну оно же как раз Документ.Имя неизвестно
5 Славен
 
23.09.13
16:52
через метаданные тогда
6 vicof
 
23.09.13
16:52
(0) кто-то что-то недоговоривает
7 Fish
 
23.09.13
16:52
(1) Самое главное, это определить, какую дату считать косячной.
8 Desna
 
23.09.13
16:54
(6)делаю периферийную

{mngbase/DataExchangeCreateInitialImage.lf(128)}: Ошибка при вызове метода контекста (СоздатьНачальныйОбраз)
    ExchangePlans.CreateInitialImage(Node, ConnectionString);
по причине:
Ошибка в значении типа 'Дата'
Дата '27.02.1313 0:00:00' не может быть записана в базу данных на MS SQL Server с нулевым смещением дат

(7) ну если дали 4-е знака на год то и получишь гранату
9 Волшебник
 
модератор
23.09.13
16:55
(4) Как задать вопрос по теме 1С или советы новичку
http://www.forum.mista.ru/rules.php#rec
10 Волшебник
 
модератор
23.09.13
16:55
(8)  в консоли кластера установи смещение дат = 2000 и забей
http://infostart.ru/public/58505/
11 Desna
 
23.09.13
17:02
(9) надо было Как быстро найти документЫ с косячнЫМИ датами?
(10) спасибо за это, дадут по ушам потом
12 Desna
 
23.09.13
17:03
в "Универсальном журнале документов" тоже не найдешь
13 Лефмихалыч
 
23.09.13
17:04
нашел в загашнике спелл магии крови


USE <ИмяБазыSQL>

-- найдем все поля всех таблиц, имеющие тип Дата
Declare TablesAndFields cursor for
SELECT objects.name as Tablename, columns.name as columnname
FROM
    dbo.sysobjects as objects
left join dbo.syscolumns as columns
on objects.id = columns.id
where objects.xtype = 'U'
and columns.xtype = 61

open TablesAndFields

Declare @TableName as varchar(100)
Declare @ColumnName as varchar(100)

-- для каждого поля с типом дата, если значение больше "3999-12-31 23:59:59", заменим его на "2123-12-13 12:13:14"
FETCH NEXT FROM TablesAndFields
    into @TableName, @ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
    Exec ('update ' + @TableName + '
    set ' + @ColumnName + ' = ''2123-12-13 12:13:14''
    where ' + @ColumnName + ' > ''3999-12-31 23:59:59''')

   FETCH NEXT FROM TablesAndFields
    into @TableName, @ColumnName
END

close TablesAndFields
deallocate TablesAndFields
go
14 FIXXXL
 
23.09.13
17:10
(0) нарисуй запрос в котором в цикле по метаданным проверяется дата
пример из типовой:

    Для каждого Док из Метаданные.Документы Цикл
        Если Док.Имя = "УстановкаСоответствияСчетовБУиНУ" или Док.Имя = "УстановкаСоответствияСчетовБУиМСФО" Тогда
            Продолжить;
        КонецЕсли;

        Запрос.Текст = Запрос.Текст + ?(Запрос.Текст = "","", "ОБЪЕДИНИТЬ ВСЕ") + "
        |
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |    Документ" + Док.Имя + ".Ссылка
        |ИЗ
        |    Документ." + Док.Имя + " КАК " + "Документ" + Док.Имя + "
        |";

    КонецЦикла;

    Попытка
        РезультатЗапроса = Запрос.Выполнить();
        ЕстьДокументы = НЕ РезультатЗапроса.Пустой();
    Исключение
        ЕстьДокументы = Истина;
    КонецПопытки;
15 Desna
 
23.09.13
17:16
(14) спасибо
16 Desna
 
23.09.13
17:20
(13) это тоже можно, но это же пароли к скулю надо знать
17 Desna
 
23.09.13
17:23
есть еще ПоискОшибочныхПоДатеДокументовИРегистров
18 Kreont
 
23.09.13
17:30
Для большинства случаев подойдет:
ВЫБРАТЬ
ЖурналОпераций.Ссылка,
ЖурналОпераций.Дата КАК Дата,
ЖурналОпераций.Тип КАК Тип
ИЗ
ЖурналДокументов.ЖурналОпераций КАК ЖурналОпераций
ГДЕ
ЖурналОпераций.Дата МЕЖДУ &Д1 И &Д2
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший