К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Как получить дату и время создания документов,, введённые не вручную?

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

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



1 - 25.05.2015 - 09:52
1. можно через http://www.1cpp.ru/docum/icpp/html/Hooker.html
2. можно и так, по ночам тормозить не должно...
2 - 25.05.2015 - 10:34
Спасибо.
Посмотрим..
Гость
3 - 25.05.2015 - 12:31
Есть-ли другие варианты? объявить [общий] реквизит[ы] для самих документов
4 - 25.05.2015 - 14:59
Да, общие реквизиты, дата и время. Тоже думал про них.
А можно добавить строку, общий реквизит, и заполнять её в самой базе SQL? Тоже триггер нужен? Или может уже есть там хранимая процедура, в которой можно прописать заполнение этого реквизита? Вроде находил роцедуру выдачи номера документа...
5 - 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С. Поэтому вылетает..
6 - 27.05.2015 - 13:50
(5)
похожая тема...
7 - 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=???
8 - 27.05.2015 - 14:34
Нашёл.
Работает.
Спасибо.
9 - 27.05.2015 - 14:45
Когда же уже народ начнет читать книжки, прежде чем спрашивать на форуме?
Из документации по скулю:
Цитата:
Триггеры DML используют логические (концептуальные) таблицы deleted и inserted.
По своей структуре они подобны таблице, на которой определен триггер, то есть таблице, к которой применяется действие пользователя.
В таблицах deleted и inserted содержатся старые или новые значения строк, которые могут быть изменены действиями пользователя.
Например, для запроса всех значений таблицы deleted можно использовать инструкцию:
SELECT * FROM deleted
Дополнительные сведения см. в разделе Использование таблиц inserted и deleted.
10 - 27.05.2015 - 14:46
8-который не честный >Молодец!


К списку вопросов






Copyright ©, Все права защищены