Наверно многие работники Канцелярии сталкивались с проблемой хранения и сбора информации (оформления, систематизации и иже с ними) по переданным и имеющимся Печатям или штампам. Вот такой функционал я разработал и предлагаю его вам как пример работы с карточкой справочника.
И сразу к делу! Некоторые моменты я буду оформлять исключительно кратко, так как описывать каждый шаг, смысла большого в этой статье нет. Коды буду выкладывать полностью.
Начали!
Шаг первый. Справочник, новый элемент:
Шаг второй. Реквизиты:
Шаг третий. Оформляем карточку:
Ну как минимум, это не вызывает отторжения.
Теперь разберемся более детально. В данной карточке работают поля:
1. Наименование: Строка, (Ручной ввод);
2. Наша Организация: Справочник, Автозаполнение с возможностью выбора;
3. Печать или Штамп: Признак, имеет 2 значения "Печать" или "Штамп";
4. Текущий владелец: Справочник,(Ручной ввод);
5. Дата передачи: Дата, (Ручной ввод);
6. Поле для картинки: Тип Текст, выбирается через "Действие" вручную.
7. Таблица для истории передачи и текущего местонахождения, к сожалению не автозаполняющееся (но еще не вечер, может и доделаю, как время появиться)
Итак - с карточкой все понятно. Теперь дело за "Действиями"! В моем примере их 3:
1. DelStamp - Удаление картинки
2. LoadStamp - Загрузка картинки
3. Уведомление - Задание сотруднику, что в его ответственности появился "штамп" или "печать"
Разбираем по порядку. Первым дело - Штамп надо загрузить (LoadStamp):
FileIsExistReqName = ''
//------------------------------------------------------------------------------
JPG_FILE_EXT = 'jpg'
DotWithJPGExt = Format(".%s"; JPG_FILE_EXT)
OpenDialog = CreateOpenDialog()
OpenDialog.Filter = Format('JPEG files (*.jpeg)|*%0:s'; DotWithJPGExt)
OpenDialog.MultiSelect = False
if OpenDialog.Execute
File = OpenDialog.Result
// Проверить расширение файла
if ExtractFileExt(File) <<>> DotWithJPGExt
Msg = LoadStringFmt('DIRSTR_782'; 'COMMON'; DotWithJPGExt)
Raise(CreateException('EDIRInvalidParamType'; Msg; ecInformation))
else
if FileSize(File) > 512000 // Если больше 500 Кб, то сругаться
Raise(CreateException(""; "Размер файла не должен превышать 500 Кб"; ecWarning))
else
Object.Requisites("FilePath").LoadFromFile(File)
Object.Requisites("FilePath").Extension = JPG_FILE_EXT
if Assigned(FileIsExistReqName)
Object.Requisites("FileIsExist").Value = YES_VALUE
endif
endif
endif
endif
Примечание: У файла есть ограничение на объем, чтобы не перегружать систему бессмысленной информацией, как правило Штампы или печати это только 5% от сканированного листа - ему много и не нужно.
Следующий этап - Удаление изображения (DelStamp):
Object.Requisites("FilePath").Value = NULL
Object.Requisites("Ссылка").Value = NULL
Object.Events.DisableAll
Object.Save
Object.Events.EnableAll
Просто и эффективно.
Следующий и финальный этап - Уведомление Ответственного с обратной связью (Задачей то есть)!
if Assigned(Object.Employee)
Attachments = CreateList()
if not IsWebRuntimeContext() and not IsNOMADRuntimeContext()
FilePath = Object.Requisites('FilePath').AsString
if Assigned(FilePath)
if VarIsNull(Object.Ссылка)
PicFilePathOrig = GetTempFolder() & 'Stamp_' & Object.SYSREQ_ID & '.' & Object.Requisites('FilePath').Extension
Object.Requisites('FilePath').SaveToFile(PicFilePathOrig)
Doc = EDocuments.CreateNewFromFile('ПЭА';'Д000088';'JPG';PicFilePathOrig)
Object.Requisites('Ссылка').AsInteger = Doc.ID
Doc.Save
Docum = EDocuments.ObjectInfo(Doc.ID)
Attachments.Add(Docum.Name; Docum)
УдалитьФайл(PicFilePathOrig)
else
Docum = EDocuments.ObjectInfo(Object.Requisites("Ссылка").AsInteger)
Attachments.Add(Docum.Name; Docum)
endif
endif
endif
if Object.PechStm == 'Печать'
Theme = "Вам передана печать: " & Object.Requisites(SYSREQ_NAME).DisplayText
Text = "Вам передана печать: " & Object.Requisites(SYSREQ_NAME).DisplayText & CR & "Образец Печати во вложении."
else
Theme = "Вам передан штамп: " & Object.Requisites(SYSREQ_NAME).DisplayText
Text = "Вам передан штамп: " & Object.Requisites(SYSREQ_NAME).DisplayText & CR & "Образец Штампа во вложении."
endif
try
MainDocumentInfo = EDocuments.ObjectInfo(Doc.ID)
EDoc = MainDocumentInfo.Document
User = ReferenceRequisiteValue("РАБ"; Object.Employee; 'Пользователь')
USERSF = ServiceFactory.GetUserByCode(User)
EDoc.AccessRights.Readers.Add(USERSF)
EDoc.Save
except
//
endexcept
Task = CreateTaskToEmployees(Theme; CArrayElement(ArrayOf(Object.Employee)); Attachments; Text; 0)//.Form.Show
try
Task.Start
MessageBox("Хорошие новости!";"Информация о печати направлена Ответственному лицу: " & Object.Requisites('Employee').DisplayText)
except
Task.Cancel
Raise(CreateException('EDIRInvalidUserAction';
LoadString('DIR149EAF85_1F8E_4DF8_A2C6_D1F4573CF4E4'; 'RM') & CR & GetLastException().Message & CR &
LoadString('DIR6A9D32E2_4D4B_484C_AFA4_1708CCFEB125'; 'COMMON'); ecWarning))
EDocuments.DeleteByID(Doc.ID)
endexcept
else
MessageBox("Внимание!";"Не указан текущий владелец! " & CR & "Кому отправлять уведомление?")
endif
Если кратко, то это все что нужно. И этот пример можно использовать под любые нужды в зависимости от ваших потребностей.
Теперь смотрим что у нас получилось:
При нажатии на кнопку Уведомление от нас уйдет задача, причем мы об этом узнаем только из информационного сообщения:
Теперь посмотрим на нее в Исходящих:
Ну и как вы поняли - картинка во вложении полностью соответствует той, что была в карточке.
Надеюсь, что хоть некоторым пользователям эта информация пришлась в кассу
Примечание: В данном примере используется QR-Код как простой пример штампа, так как у меня не было под рукой нормального изображения.
Для справки: Ссылка на QR-Коде не нарушает ничьих авторских прав!
Статья конечно интересная, подробная. Но какие цели применения этому?
Как ни странно, но это рабочий инструмент нашей Канцелярии, они отвечают и ведут учет по каждой печати и штампу выданному сотрудникам на местах, и ранее все это велось в обычном бумажном журнале, сейчас же они ведут электронную опись и журналирование. Не знаю на сколько это было критично, но сотрудники вроде довольны - искать проще, где и у кого та или иная печать.
Афигенно! При проверках это очень пригодится.
Авторизуйтесь, чтобы написать комментарий