Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Как получить дату и время создания документов,, введённые не вручную? (http://forums.kuban.ru/f1040/kak_poluchit-_datu_i_vremya_sozdaniya_dokumentov_vved%D1%91nnye_ne_vruchnuyu-6856742.html)

который не честный 25.05.2015 08:29

Как получить дату и время создания документов,, введённые не вручную?
 
Поставили задачу - получить дату и время создания документов. Те, что сделаны вручную - есть в журнале регистрации. А те, что созданы обработками загрузки - там нет. У меня есть пока что 2 варианта, как это сделать:
1. Найти каждую обработку и прописать в них запись в журнал регистрации.
2. Создать в базе таблицы из двух колонок(или трёх, не знаю, можно ли время отдельно вытащить. Id документа датавремя. Повесить на журнал триггер на insert, и писать в таблицу данные. Потом, где надо, вытаскивать время и дату.

По ночам грузятся по несколько тысяч документов, добавлять их в журнал регистрации не хотелось-бы, а триггер не сильно притормозит?
Есть-ли другие варианты?

user1C 25.05.2015 09:52

1. можно через [url]http://www.1cpp.ru/docum/icpp/html/Hooker.html[/url]
2. можно и так, по ночам тормозить не должно...

который не честный 25.05.2015 10:34

Спасибо.
Посмотрим..

roma n 25.05.2015 12:31

[em]Есть-ли другие варианты?[/em] объявить [общий] реквизит[ы] для самих документов

который не честный 25.05.2015 14:59

Да, общие реквизиты, дата и время. Тоже думал про них.
А можно добавить строку, общий реквизит, и заполнять её в самой базе SQL? Тоже триггер нужен? Или может уже есть там хранимая процедура, в которой можно прописать заполнение этого реквизита? Вроде находил роцедуру выдачи номера документа...

который не честный 27.05.2015 13:36

Пробую создать простейший триггер
create trigger dbo.TestTrigger01 on Test_Trigger.dbo._1SJOURN
for insert
as
if @@nestlevel > 1 return
Select 1

При добавлении документа ничего не происходит, да и не должно.
Но если убрать проверку
if @@nestlevel > 1 return
то 1С вылетает.
Выяснилось, что @@nestlevel=3
Документ в базе не создаётся.
Пробовал вставку в отдельную таблицу - результат тот же.
Получается, но могу и ошибаться, триггер срабатывает в момент транзакции самой 1С. Поэтому вылетает..

user1C 27.05.2015 13:50

(5)
[url=http://www.forum.mista.ru/topic.php?id=387383]похожая тема...[/url]

который не честный 27.05.2015 14:27

6 спасибо!
SET NOCOUNT ON помог.
Инсерт в другую таблицу работает и заполнение реквизита журнала тоже.
Буду дальше копать, как заполнить именно нужную строку, а то непонятно, что сравниватьпри апдейте.
create trigger dbo.TestTrigger01 on Test_Trigger.dbo._1SJOURN
for insert
as
set nocount on
Update _1SJOURN
Set SP14='123'
Where IdDoc=???

который не честный 27.05.2015 14:34

Нашёл.
Работает.
Спасибо.

Billi 27.05.2015 14:45

Когда же уже народ начнет читать книжки, прежде чем спрашивать на форуме?
Из документации по скулю:
[quote]
Триггеры DML используют логические (концептуальные) таблицы deleted и inserted.
По своей структуре они подобны таблице, на которой определен триггер, то есть таблице, к которой применяется действие пользователя.
В таблицах deleted и inserted содержатся старые или новые значения строк, которые могут быть изменены действиями пользователя.
Например, для запроса всех значений таблицы deleted можно использовать инструкцию:
SELECT * FROM deleted
Дополнительные сведения см. в разделе Использование таблиц inserted и deleted.
[/quote]

Billi 27.05.2015 14:46

8-который не честный >Молодец!


Текущее время: 04:00. Часовой пояс GMT +3.