
- •Содержание
- •1 Введение
- •1.1 Краткие сведения об объекте автоматизации
- •1.3 Задачи crm
- •1.4 Основные функции и характеристики системы
- •1.5 Обзор существующих crm систем
- •1.5.1 Компас: Маркетинг и Менеджмент.
- •1.7 1С Предприятие 7.7
- •1.7.1 Встроенный язык системы
- •1.7.2 Язык Запросов
- •1.8 Субд Oracle Enterprise Edition 9.2.0.1
- •1.9 Средство проектирования баз данных PowerDesigner 11
- •1.10.1 Doa компонент доступа к Oracle.
- •1.11 Выбор генератора отчетов
- •1.11.1 Вывод
- •2 Специальная часть
- •2.1 Архитектура автоматизированной системы
- •2.2 Выбор средства реализации уровня бд
- •2.3 Реализация уровня сервера (бд)
- •2.3.1 Основные понятия
- •2.3.2 Особенности реализации
- •2.3.3.1 Пример fgac в Oracle
- •2.3.2.2 Другие подходы реализации fgac
- •2.4 Проектирование базы данных
- •2.4.1 Концептуальная модель данных
- •2.4.2 Физическая модель данных
- •2.6.2 Технологии com и ole
- •2.6.3 Особенности использования Delphi и 1c
- •2.6.3.1 Функция, осуществляющая создание и инициализацию экземпляр 1с
- •2.6.3.2 Описание методов экземпляра 1с
- •Детали реализации импорта
- •2.6.5 Код процедуры импорта
- •2.7 Технические характеристики автоматизированной системы
- •2.7.1 Клиент
- •2.7.2 Сервер
- •2.8 Функции программы и интерфейс пользователя
- •2.8.1 Общий вид программы при запуске
- •2.8.2 Общие особенности программы
- •2.8.3 Вид основных справочников
- •2.9 Декомпозиция и анализ бизнес-процессов
- •3. Тестирование
- •3.1. Справочник “Клиент”
- •3.2. Напоминания
- •3.3. Отчеты
- •3.3.1. Понятие abc анализа
- •4.2. Построение ленточного графика этапов проектирования (График Ганта)
- •4.3. Материальные затраты
- •4.3.1. Затраты на оплату труда
- •4.3.2. Дополнительная заработная плата
- •4.3.3. Единый социальный налог
- •4.3.4. Затраты на электроэнергию
- •4.3.5. Затраты на содержание и эксплуатацию оборудования.
- •4.3.6. Амортизационные отчисления
- •4.3.7. Накладные расходы
- •4.4 Оценка эффекта от внедрения ас
- •5. Безопасность жизнедеятельности и охрана труда
- •5.1. Характеристика объекта
- •5.1.1. Характеристика оборудования
- •5.2. Характеристика опасных и вредных факторов
- •5.3. Нормализация санитарно-гигиенических условий труда
- •5.3.1. Микроклимат производственных помещений
- •5.3.2 Воздухообмен производственных помещений
- •5.3.3. Освещение производственных помещений
- •5.3.4. Шум рабочего помещения
- •5.4. Производственные излучения
- •5.5. Электробезопасность
- •5.6. Пожарная безопасность
- •Вывод: Условия пожарной безопасности в аудитории чп “Паздникова” обеспечены для предотвращения очагов пожаров.
- •5.7. Обеспечение безопасности в условиях чс
- •5.7.1. Эвакуация
- •5.8. Вывод по разделу
- •6. Заключение
- •Список используемой литературы
- •Приложение 1 “Принятые термины и обозначения”
2.6.3.2 Описание методов экземпляра 1с
После того, как мы создали и проинициализировали OLE-объект, работать с ним можно следующим образом:
Метод EvalExpr вычисляет выражение, записанное параметре <СтрокаВыражения> на встроенном языке 1С:Предприятие и возвращает результат вычисления. Результатом выражения может быть число, строка, дата или значение любого агрегатного типа данных.
С помощью метода CreateObject(<ИмяАгрегатногоТипа>). Метод CreateObject создает объект агрегатного типа данных системы 1С:Предприятие и возвращает ссылку на него. Данная функция обычно используется одновременно с явным определением переменной типа OLEVariant и присвоением ей ссылки на объект агрегатного типа данных.
С помощью метода ExecuteBatch(<СтрокаОператоров>). Метод ExecuteBatch выполняет последовательность операторов, записанную в параметре <СтрокаОператоров> на встроенном языке 1С:Предприятие. Метод возвращает -1, если последовательность операторов выполнена успешно, или 0 в противном случае.
Детали реализации импорта
Т.к. модуль импорта не предусматривает проверку накладных после их импортирования, т.е. снятие накладных с проведения или изменение из содержимого. То следует сперва удостоверится в неизменности данных перед импортом. В связи с этим была составлена схема бизнес процесса, в котором четко видно, когда можно производить импорт. Он полезна как разработчику, так и пользователю системы.
Рисунок 2.6 - Бизнес процесс импорта из 1С в Oracle
В реализации импорта задействованы следующие технологии и языки:
Pascal (язык описания процедуры главной импорта);
Встроенный в 1С язык запросов (используется для формирования необходимых данных);
ANSI SQL (используется для вставки строки с накладной);
PL/SQL (используется для вставки многострочной части накладной);
Технология OLE (для связи Delphi и 1C).
Общую схему потоков данных можно изобразить так:
Рисунок 2.7 - Общую схему потоков данных
Алгоритм импорта расходных накладных из 1С:
Рисунок 2.8 - Алгоритм импорта
2.6.5 Код процедуры импорта
/********************* Процедура импорта расх. накладных из 1С********************/
procedure TfClient.bt1cNaklExportClick(Sender: TObject);
var
counter: integer; //Счетчик импортированных записей
V77: Olevariant; //OLE-объект программы 1С:Предприятие
query: olevariant; //Агрегатные объекты
sql_command, query_command : string;
FChangeInterval: TFChangeInterval;
AFromDate, AToDate: TDate;
i: integer;
first: boolean;
kod_1c :string;
SumSoSkid,kolvo : double;
begin
sql_command := '';
FChangeInterval:=TFChangeInterval.Create(self);
AFromDate:=Today-5;
AToDate:=Today;
if (FChangeInterval.DoChangeInterval(AFromDate,AToDate)<>mrOk) then // интервал датт
exit;
try
V77 := create1CApplication;
query := V77.createobject('Запрос');
if VarType(V77) <> varDispatch then
DatabaseError('Не могу создать Запрос');
query_command:= 'Период с '''+ DateToStr(AFromDate) + ''' по '''+ DateToStr(AToDate) + ''';' +
'РасхНаклНомерДок = Документ.РасходнаяНакладная.ТекущийДокумент.НомерДок;' +
'НомерДок = Документ.РасходнаяНакладная.НомерДок;' +
'КлиетнКод = Документ.РасходнаяНакладная.Клиент.Код;' +
'СуммаСоСкидкой = Документ.РасходнаяНакладная.СуммаСоСкидкой;'+
'ДатаДок = Документ.РасходнаяНакладная.ДатаДок;'+
'Товар = Документ.РасходнаяНакладная.Товар.Наименование;'+
'ТоварКод = Документ.РасходнаяНакладная.Товар.Код;'+
'ЦенаПриобретения = Документ.РасходнаяНакладная.Товар.ЦенаПриобретения;'+
'Количество = Документ.РасходнаяНакладная.Количество;'+
'СумСоСкид = Документ.РасходнаяНакладная.СумСоСкид;'+
'Группировка РасхНаклНомерДок;'+
'Группировка СтрокаДокумента;';
query.Execute(query_command);
while query.Group('РасхНаклНомерДок') > 0 do
begin
kod_1c := query.РасхНаклНомерДок;
OQnakl_rasxod.SetVariable('sum',query.СуммаСоСкидкой);
OQnakl_rasxod.SetVariable('kod_1c',kod_1c);
OQnakl_rasxod.SetVariable('date_create',query.ДатаДок);
OQnakl_rasxod.SetVariable('partner_1c',query.КлиетнКод);
try
OQnakl_rasxod.Execute;
OQnakl_rasxod_CURRVAL.Execute;
OQnakl_rasxod_t.SetVariable('P_ID_NAKL_RASXOD',
OQnakl_rasxod_CURRVAL.FieldAsInteger(0));
while query.Group('СтрокаДокумента') > 0 do
begin
SumSoSkid := query.СумСоСкид;
kolvo := query.СумСоСкид;
OQnakl_rasxod_t.SetVariable('P_ID_GOOD',query.ТоварКод);
OQnakl_rasxod_t.SetVariable('P_GOOD_NAME',query.Товар);
OQnakl_rasxod_t.SetVariable('P_COUNT',query.Количество);
OQnakl_rasxod_t.SetVariable('P_BUY_COST',query.ЦенаПриобретения);
OQnakl_rasxod_t.SetVariable('P_GOODS_SUM',query.СумСоСкид);
OQnakl_rasxod_t.Execute;
end;
except
;//подавляем ошибки
end;
end;
finally
fMain.OracleSession.Commit;
V77 := UnAssigned;
ARefresh.Execute;
end;
end;
//Код вставки накладной
/****************************** OQnakl_rasxod.SQL ****************************/
‘INSERT INTO crm.nakl_rasxod
(SUM, kod_1c, date_create, partner_1c)
VALUES (:SUM, :kod_1c, :date_create, :partner_1c)’;
//Код вставки строки накладной
/****************************** OQnakl_rasxod_t.SQL ****************************/
‘begin
CRM.NAKL_RASXOD_T_INSERT(:p_id_good,:p_good_name,:p_id_nakl_rasxod,:p_count,:p_buy_cost,:p_goods_sum);
end;’;
/****************************** NAKL_RASXOD_T_INSERT ***********************/
CREATE OR REPLACE PROCEDURE NAKL_RASXOD_T_INSERT (
p_id_good IN crm.good.id_good%TYPE,
p_good_name IN crm.good.NAME%TYPE,
p_id_nakl_rasxod IN crm.nakl_rasxod_t.ID_NAKL_RASXOD%TYPE,
p_count IN crm.nakl_rasxod_t.COUNT%TYPE,
p_buy_cost IN crm.nakl_rasxod_t.buy_cost%TYPE,
p_goods_sum IN crm.nakl_rasxod_t.goods_sum%TYPE
)
/*
Процедура вставки строки расходной накладной, проверяем есть ли товар в
таблице good, если нет вставляем его в таблицу good и затем вставляем в nakl_rasxod_t
*/
IS
v_id_good crm.nakl_rasxod_t.id_good%TYPE;
BEGIN
BEGIN
SELECT id_good
INTO v_id_good
FROM good g
WHERE g.id_good = p_id_good;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO good
VALUES (p_id_good, p_good_name);
END;
INSERT INTO nakl_rasxod_t
(ID_NAKL_RASXOD, id_good, COUNT, sale_cost, buy_cost,
goods_sum)
VALUES (p_ID_NAKL_RASXOD, p_id_good, p_count, p_goods_sum/p_count, p_buy_cost, p_goods_sum);
END; -- nakl_rasxod_t_insert
/