ВИКОРИСТАННЯ ФУНКЦІЙ

ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение andriychernyukh » Пн авг 09, 2010 1:03 pm

ДЛЯ ЧОГО ВИКОРИСТОВУЮТЬСЯ НАСТУПНІ ФУНКЦІЇ:
1.GetMenuMode()
2.DpGetDat("d")
3.getDateTag
4.firstDayMonth(gd.dat1)
5.IsTable(tblName)
6.qrySet("Fields", "t.*,cl.Ftxt","From", tblName+" as t left join ^cl as cl on t.Ftabn_id=cl.Fwid",
"Order", "t.Fcod",
"Alias", "t");
7.var oGrid = new DpGrid("NOCREATE");
8.var gr = oGrid.page();
9.FieldEx("Fcod", "Таб №|Таб №", 3);
10.sqlTo(dat1)
11.setProgressRange(step, t.rowCount);
12.setProgressPos(step++, ru("Обработка записей: ","Обробка записів: ")+t.bookmark+"/"+t.rowCount);
13.getVislTerm(dat1,t.getValue("Fdatvisl"))
Аватара пользователя
andriychernyukh
Опытный пользователь
Опытный пользователь
 
Сообщения: 89
Зарегистрирован: Чт июл 29, 2010 9:08 am

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение Дарья » Ср авг 18, 2010 9:30 am

1.GetMenuMode() - получить параметр запуска задачи
2.DpGetDat("d") - вывести диалог для отбора информации, в данном примере с периодом: дата начала-дата конца
3.getDateTag - возвращает год и месяц (например для даты 01.01.2005 - 200501)
4.firstDayMonth(gd.dat1) - возвращает первый день месяца для заданной даты
5.IsTable(tblName) - проверяет существование таблицы
6.qrySet("Fields", "t.*,cl.Ftxt","From", tblName+" as t left join ^cl as cl on t.Ftabn_id=cl.Fwid", "Order", "t.Fcod", "Alias", "t"); - используется для передачи источника данных для отображения списка
7.var oGrid = new DpGrid("NOCREATE"); - объект для описания табличной части
8.var gr = oGrid.page(); - функция устарела
9.FieldEx("Fcod", "Таб №|Таб №", 3); - добавляет столбик в табличную часть
10.sqlTo(dat1) - преобразовывает объект произвольного типа в строку sql с учетом текущей СУБД
11.setProgressRange(step, t.rowCount); - используется для управления progressbar
12.setProgressPos(step++, ru("Обработка записей: ","Обробка записів: ")+t.bookmark+"/"+t.rowCount); - использеются для управления progressbar
13.getVislTerm(dat1,t.getValue("Fdatvisl")) - возвращает срок выслуги лет в формате y/m/d
Аватара пользователя
Дарья
Консультант
 
Сообщения: 1774
Зарегистрирован: Пн июл 28, 2008 9:40 am

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение andriychernyukh » Вт сен 14, 2010 9:48 am

Скажіть, будь ласка, який об'єкт повертає функція getSnap()? Чи можу я з її допомогою отримати масив значень(припустимо масив ідентифікаторів осіб, що працюють на підприємстві починаючи з дуякої дати.
Запит має вигляд - getSnap(" select Fwid_cl from ^full_pers as f where Fbdat<="+sqlTo(deginDate)+" and Fedat>="+sqlTo(deginDate) + " and Fwid=(select MAX(Fwid) from ^work_pers as wp where f.Fwid_cl=wp.Fwid_cl and wp.Fbdat<="+ sqlTo(deginDate)+" and wp.Fedat>="+sqlTo(deginDate)+")") , де deginDate - деяка задана дата)
Вона здається повертає масив, але я не можу знайти властивості length (а дуже треба).
Дякую!!!
Аватара пользователя
andriychernyukh
Опытный пользователь
Опытный пользователь
 
Сообщения: 89
Зарегистрирован: Чт июл 29, 2010 9:08 am

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение Oleg » Вт сен 14, 2010 10:52 am

Скажіть, будь ласка, який об'єкт повертає функція getSnap()? Чи можу я з її допомогою отримати масив значень(припустимо масив ідентифікаторів осіб, що працюють на підприємстві починаючи з дуякої дати.
Запит має вигляд - getSnap(" select Fwid_cl from ^full_pers as f where Fbdat<="+sqlTo(deginDate)+" and Fedat>="+sqlTo(deginDate) + " and Fwid=(select MAX(Fwid) from ^work_pers as wp where f.Fwid_cl=wp.Fwid_cl and wp.Fbdat<="+ sqlTo(deginDate)+" and wp.Fedat>="+sqlTo(deginDate)+")") , де deginDate - деяка задана дата)
Вона здається повертає масив, але я не можу знайти властивості length (а дуже треба).

Функция getSnap(sSql, showErr) возвращает массив значений столбцов первой строки запроса sSql, если запрос не имеет результата или выполнен с ошибкой, то функция вернет null. Сообщение об ошибках можно отключить, указав вторым параметром false. Что касается Вашего кода, то данная функция в случае удачного выполнения вернет массив из одного элемента (т.к. после select указано только одно поле Fwid_cl) со значением первого попавшегося идентификатора персонала. Поэтому для Вашей задачи эта функция не подходит, можете использовать цикл с проходом по таблице (Ваш SQL запрос я упростил, т.к. в данной ситуации можно обойтись без подзапросов)
Код: Выделить всё
var tbl = OpenTable("select distinct Fwid_cl from ^full_pers as f where Fbdat<="+sqlTo(deginDate)+" and Fedat>="+sqlTo(deginDate));
var fwidAr = new Array();
for(tbl.MoveFirst(); !tbl.IsEOF(); tbl.MoveNext())
{
   fwidAr[fwidAr.length] = tbl.getValue("Fwid_cl");
}
tbl.close();

fwidAr - нужный Вам массив, можете на основе этого кода создать свою функцию и использовать ее в дальнейшем, либо же обрабатывать данные сразу в цикле прохода по таблице, чтобы повторно потом не проходить по элементам массива.
Аватара пользователя
Oleg
Программист
 
Сообщения: 110
Зарегистрирован: Вт сен 05, 2006 4:53 pm
Откуда: Конанчик Олег

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение andriychernyukh » Вт сен 14, 2010 2:57 pm

Який скріпт треба підключити, щоб використати getSnap()?
Аватара пользователя
andriychernyukh
Опытный пользователь
Опытный пользователь
 
Сообщения: 89
Зарегистрирован: Чт июл 29, 2010 9:08 am

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение Oleg » Вт сен 14, 2010 3:02 pm

Який скріпт треба підключити, щоб використати getSnap()?

Никакой скрипт подключать не нужно, т.к. функция getSnap() описана в системном скрипте, который подключается автоматически при запуске программы.
Аватара пользователя
Oleg
Программист
 
Сообщения: 110
Зарегистрирован: Вт сен 05, 2006 4:53 pm
Откуда: Конанчик Олег

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение andriychernyukh » Вт ноя 23, 2010 12:08 pm

Як дізнатися значення найбільшого ідентифікатора записів в базі даних на деякий поточний момент?
Аватара пользователя
andriychernyukh
Опытный пользователь
Опытный пользователь
 
Сообщения: 89
Зарегистрирован: Чт июл 29, 2010 9:08 am

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение Oleg » Вт ноя 23, 2010 1:08 pm

Як дізнатися значення найбільшого ідентифікатора записів в базі даних на деякий поточний момент?

Код: Выделить всё
browse("select * from dpbase.tuid")

Где dpbase - имя базы.
Аватара пользователя
Oleg
Программист
 
Сообщения: 110
Зарегистрирован: Вт сен 05, 2006 4:53 pm
Откуда: Конанчик Олег

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение andriychernyukh » Вт ноя 23, 2010 1:17 pm

Дуже Вам вдячний!!!
Аватара пользователя
andriychernyukh
Опытный пользователь
Опытный пользователь
 
Сообщения: 89
Зарегистрирован: Чт июл 29, 2010 9:08 am

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение andriychernyukh » Ср ноя 24, 2010 10:53 am

Не могли б Ви описати структуру штатного розкладу. А то я імпортую дані в таблиці cdr_work_pers та cdr_stru_dol, а дані в штатному так і не зявляються.
Дякую.
Аватара пользователя
andriychernyukh
Опытный пользователь
Опытный пользователь
 
Сообщения: 89
Зарегистрирован: Чт июл 29, 2010 9:08 am

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение Oleg » Ср ноя 24, 2010 12:28 pm

andriychernyukh писал(а):Не могли б Ви описати структуру штатного розкладу. А то я імпортую дані в таблиці cdr_work_pers та cdr_stru_dol, а дані в штатному так і не зявляються.
Дякую.

Данные штатного расписания (далее ШР) хранятся в 3-х следующий таблицах: stru_org, stru_dol, work_pers.
1. stru_org – таблица подразделений ШР, структура основных полей следующая:
- fwid – идентификатор подразделения
- fwid_par – идентификатор родительского подразделения
- ftxt – название подразделения
- ftxts – сокращенное название подразделения
- fbdat – дата начала действия подразделения
- fedat – дата окончания действия подразделения
- flv1 – код первого уровня подразделений
- flv2 – код второго уровня подразделений
- flv3 – код третего уровня подразделений
- flv4 – код четвертого уровня подразделений
- flv5 – код пятого уровня подразделений
- fleftkey – левый ключ дерева
- frightkey – правый ключ дерева
У корневого подразделения идентификатор родителького подразделения (fwid_par) и коды всех уровней (flv1,flv2, flv3, flv4, flv5) равны 0. Для каждого вложенного подразделения первого уровня flv1 будет иметь свой код, для второго уровня flv1 такой же как и родительского, а flv2 уникальный и т.д. Левый и правый ключ формируются автоматически, при выполнении импорта таблицы их можно проставить с помощью вызова в скрипт консоле функции:
Код: Выделить всё
buildTreeKeysOnTable("^stru_org", 0, 0, "flv1, flv2, flv3, flv4, flv5", "fwid_par");

2. stru_dol – таблица должностей, структура основных полей следующая:
- fwid – идентификатор записи
- fwid_org – идентификатор подразделения
- fwid_cl – идентификатор должности в справочнике должностей
- fcod – код должности в справочнике должностей (не обязателен, при импорте по этому полю можно в последствии проставить поле fwid_cl)
- foklad – оклад
- fshpz – шифр производственных затрат (тип текст)

3. work_pers – таблица персонала в ШР, структура основных полей следующая:
- fwid – идентификатор записи
- fwid_dol – идентификатор записи таблицы должностей stru_dol
- fwid_cl – идентификатор сотрудника в справочнике персонала
- fid – код записи ШР, уникальный код в пределах одного сотруднка, т.е. при наличии в ШР по одному и тому же сотруднику нескольких записей (изменение оклада, перевод на другую должность, совместитель и т.д.) для всех этих записей будет уникальный код
- fwid_kat – идентификатор категории в справочнике категорий
- fwid_zvan – идентификатор квалификации (звания) в справочнике квалификаций (званий)
- fbdat – дата начала действия
- fedat – дата окончания действия
- fvopl – вид оплаты
- favans – аванс по умолчанию
- ftable – таблица подоходного налога (1 – основным сотрудникам, 2 – совместителям)
- fis_nazn – признак назначения, устанавливается при зачислении сотрудника в штат (логический тип)
- fis_uv – признак увольнения (логический тип)
- finval – признак инвалидности (логический тип)
- fpens – признак пенсионера (логический тип)
Связь между таблицами stru_dol и work_pers должна быть один к одному.
Аватара пользователя
Oleg
Программист
 
Сообщения: 110
Зарегистрирован: Вт сен 05, 2006 4:53 pm
Откуда: Конанчик Олег

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение andriychernyukh » Ср ноя 24, 2010 1:09 pm

Я так і думав(на рахунок структури штатного). Але Як я вже говорив я імпортував дані у таблиці cdr_stru_dol та cdr_work_pers. Але процедура була наступна:

- Вручну (в підсистемі "Облік кадрів") додав підрозділи. Потім із табл. cdr_stru_org "взяв" ідентифікатори підрозділів. Таким чином отримав значення для поля fwid_org. Тобто я в файлі котрий потрібно імпортувати я для козного працівника записав цей fwid_org.

-тоді імпортував цей файл у таблицю tmp_import. Але при налаштуванні параметрів імпорту для всях полів, окрім дати та логічних, проставив тип "Текст"

-Тоді написав скріпт,який витягує дані із табл. tmp_import та записує у таблиці cdr_stru_dol та cdr_work_pers.
Так от дані, то записуються. Але в штатному розписі запис не відображається. У чому може бети помилка. Може важливо як записувати дату і т.д. Чи які типи проставляти полям при імпорті.

І ще, якщо я пишу скріпт для використання якого не потрібна ні форма ні лісти, то чи існує якась функція типу main в с# ("щось типу точки входу"). Тому що зараз я просто пишу в скріпті функції і далі просто їх викликаю- це правильно?
Аватара пользователя
andriychernyukh
Опытный пользователь
Опытный пользователь
 
Сообщения: 89
Зарегистрирован: Чт июл 29, 2010 9:08 am

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение Oleg » Ср ноя 24, 2010 2:28 pm

-Тоді написав скріпт,який витягує дані із табл. tmp_import та записує у таблиці cdr_stru_dol та cdr_work_pers.
Так от дані, то записуються. Але в штатному розписі запис не відображається. У чому може бети помилка. Може важливо як записувати дату і т.д. Чи які типи проставляти полям при імпорті.

Если Ваш скрипт правильно привел текстовые поля идентификаторов к соответствующим числовым полям в таблицах stru_dol и work_pers и сущесвуют связи между тремя основными таблицами ШР, а также используемых в них справочников аналитики, то все должно быть нормально. Единственное что в своем описании я указал что поле Fcod в таблице stru_dol не является обязательным, но потом сверился с исходным кодом ШР, там стоит условие на то чтобы этот код не был нулевым, поэтому если вы не импортировали этот код, проставьте его или закомментируйте в скрипте l_shtatRasp.js строчку со следующим кодом:
Код: Выделить всё
+ " AND dol.fcod <> 0 "

Если проблема не в этом, попробуйте разобраться следующим образом: назначте на должность в ШР какого-то сотрудника, затем откройте в консоле каждую из импортированых таблиц и представление full_pers, которое являет собой связанные воедино все таблицы ШР и справочники:
Код: Выделить всё
browse("select * from ^stru_dol")
browse("select * from ^work_pers")
browse("select * from ^full_pers")

Сперва с помощью комбинации клавиш Ctrl+A или Ctlr+<Плюс на малой числовой> убедитесь что в каждой из таблиц одинаковое кол-во записей, если в full_pers записей будет меньше (должна быть как минимум одна запись того сотрудника, которого Вы добавите вручную), то это значит что нет какой-либо из связей между таблицами ШР и соответствующими справочниками (сотрудников, должностей, категорий). Если кол-во записей во всех таблицах одинаковое, тогда найдите в таблицах stru_dol и work_pers записи относящиеся к добавленному вручную сотруднику и попробуйте визуально найти отличия с другими записями, которые Вы импортировали.
Аватара пользователя
Oleg
Программист
 
Сообщения: 110
Зарегистрирован: Вт сен 05, 2006 4:53 pm
Откуда: Конанчик Олег

Re: ВИКОРИСТАННЯ ФУНКЦІЙ

Сообщение andriychernyukh » Ср ноя 24, 2010 4:34 pm

Знайшов проблему- неправильно записував дату. Тепер записи відображаються в штатному.
Дякую!!!
Аватара пользователя
andriychernyukh
Опытный пользователь
Опытный пользователь
 
Сообщения: 89
Зарегистрирован: Чт июл 29, 2010 9:08 am


Вернуться в Вопросы по разработке в системе

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron