Достъпът не се зарежда за 1s. Изходният код на функцията за създаване на файл с база данни

Особености:

  1. Файлът на базата данни може да бъде създаден отделно от данните.
  2. Таблица във файл на база данни може да бъде създадена отделно от данните.
  3. Типовете данни се преобразуват, за да са съвместими с достъп.
  4. Стойностите, равни на празна дата или низ, се преобразуват в нула.
  5. Непримитивните и ненизовите типове данни (препратка) се съкращават до 255 знака.
  6. Типовете данни за низ се адаптират към дължината на низа, за да спестят място.
  7. Символът с единични кавички ' ще бъде записан в базата данни с помощта на функцията за заявка char().
  8. Автоматично добавяне на първичен индекс (брояч на редове).

Ограничения:

  1. Работи само с таблица със стойности като източник на данни.
  2. Механизмът работи само в режим на дебел клиент. Това се дължи на използването на библиотеката ADO и таблицата със стойности едновременно.
  3. Работата е възможна само на Windows системи.

Самият механизъм се състои от три блока:

  1. Функция за създаване на файл с база данни.
  2. Функция за създаване на таблица от база данни.
  3. Функция за запис на данни в таблица на база данни.

Схематично работата на механизма изглежда така:

Изходен кодФункции за създаване на DB файл:

//функцията създава нов файлБД с възможност за презаписване на стария//Параметър //Параметър 2: boolean - флаг за пренаписване, ако файлът на базата данни вече съществува //връща 0, ако функцията е завършила успешно, а не 0, ако функцията е неуспешнаФункция CreateFileAccess(ValueFileName,ValueOverwriteFile = True) //Проверете валидността на името на файла If EmptyString(FileName) Then Return - 2 ; В противен случай//анализирайте къде е файлът на диска If OverwriteFile Then File = New File(FileName) ;Ако файл. Exists() Then File = Undefined; Изтриване на файлове (име на файл); EndIf ; EndIf ; EndIf ; държава("Файлът за достъп е създаден: " + Име на файл);" + Символи. PS + DescriptionError() ; Return - 1 ; EndAttempt ; ADOH. ActiveConnection. Close() ; ADOH = Undefined ; Return 0 ; EndFunction

Функцията получава 2 параметъра:

  1. Името на файла на бъдещата база данни е низ. Това е пълният път до файла; ако не бъде подаден, процедурата ще бъде прекратена.
  2. Презаписване на файл - boolean. Това е булев флаг, който използва механизъм за презаписване на файлове.

Първо се проверява пълното име на файла. Тогава механизмът за пренаписване на файла работи. Ако е необходимо, съществуващият файл се изтрива. След което процедурата преминава към създаване празен файл DB. Това се прави с помощта на обекта ADOX.Catalog. За да разберете тънкостите на това как работи ADOX.Catalog, препоръчвам да потърсите подходяща информация на уебсайта на Microsoft.

Второто „предавка“ на механизма за качване в access реализира създаването на таблица във файла на базата данни. За създаване на таблици се използва същия обект ADOX.Catalog.

Изходен код за процедурата за създаване на нова таблица в базата данни:

//Параметър 1: низ - пълно имефайл с база данни//Параметър 2: Стойностна таблица - Таблица с данни за качване//Параметър 3: структура - описание на създаваната таблица (може да се генерира чрез функцията: Създаване на структура на описание на полета) //Връща 0, ако функцията е завършила успешно, а не 0, ако функцията е неуспешнаФункция EnterTableData(FileNameValue, DataTableValue, TableDescriptionValue)ConnectionString = " Доставчик =Microsoft. Джет. OLEDB. 4. 0 ; Източник на данни=" " " + Име на файл + " " " ; Реактивен OLEDB:Тип на двигателя= 5;"; Конектор = Нов COMObject(" ADODB . Връзка" ) ; Connection. ConnectionString = Connection String; // Connection Attempt Connector. Open() ; Exception Report(" Неуспешно отваряне на файл с база данни!" ); Доклад(Описание на грешка() ); Връщане - 1 ; Краен опит; Състояние(" Попълвам таблицата с данни:" + TableDescription.TableName); //DB команден обект Com = Нов COMObject(" ADODB . командване" ) ;Com. ActiveConnection = Конектор; //константа 1 означава "заявка", има също изгледи и съхранени процедуриКом. Тип на командата = 1; Брояч на редове = 1;За всеки ред TK от таблица с данни Loop ProcessingUserInterrupt() ; = " ) + " , " + Символи. PS; Брояч на редове = Брояч на редове + 1; Брояч на колони = 0; За всяка колона TK от таблицата с данни. Колони Цикъл CurrentValue = Ред TK [ Колона TK. Име] ; Описание на поле = Описание на таблица. Описание на поле. Вземи (брояч на колони); //анализ на типа данниАко DescriptionFields. Тип = " 3 " След това // цяло число TechValue = ? (TechValue = null , 0 , TechValue); FieldList = FieldList + Format(TechValue, " CHN = нула;" ) + " , 5 CHG= " Тогава //числото е дробно//преобразуване на null в 0, защото следващата функция Format() не го преобразува правилно TechValue = ? (TechValue = null, 0, TechValue) ;" ) + " , FieldList = FieldList + Format(CurrentValue, " BRD 7 = . ; 00010101 " CHN= нула; 00010101 " CHG= " + Символи. PS; Описание на ElseIfField. Тип = ""Тогава //date CurrentValue = ? (TechValue = null, " , TechValue);Ако TechValue = " , FieldList = FieldList + Format(CurrentValue, " BRD 11 Тогава ModValue = " нула" ) + " , FieldList = FieldList + Format(CurrentValue, " BRD 202 " ; Else ModValue = " " " + Format(TechValue, " DLF = DT" ) + " " " ; EndIf ;) + " FieldList = FieldList + ModValue + " , " Тогава //булева TechValue = ? (TechValue = null, False, TechValue); FieldList = FieldList + Format(TechValue, " BL 203 = невярно; = DT BI = вярно EndIf ;" Тогава // низ TechValue = ? (TechValue = null, " ", TechValue); ; StringValue = Lev(TechValue, 255) ; If EmptyString(StringValue) Then FieldList = FieldList + " ) + " нула , " + Символи. PS; В противен случай ModValue = StrReplace(ValueString, " " " , " " +chr(" ); FieldList = FieldList + " " " + Abbr(Lev(ModValue, 255 ) ) + " " ( " + Символи. PS EndIf; ElseIfField Описание. Тип = " ) " Тогава //низ Ако EmptyString(ValueString) Then FieldList = FieldList + " " + Символи. PS; Else ModValue = StrReplace(CurrentValue, " " " , " "" + Символи. PS + " Текст на заявка: " + Текст на заявка + Символи. PS + Описание на грешка() ); Връщане - 2; Краен опит; Краен цикъл; //затворете връзкатаКом. ActiveConnection. Close() ;

Com = Недефинирано;

  1. Конектор = Недефиниран;
  2. Връщане 0;
  3. EndFunction

Функцията получава 3 параметъра: Структура на описанието на таблицата - структура, съдържаща описание на самата таблица и нейните полета. Той се формира от спомагателна функция, която ще предоставя по-долу.Име на файл - име на низ на файла на базата данни.

DeleteExistingTable - флаг, който определя поведението на функцията по отношение на съществуващи таблици със същото име.

След като получи управление, функцията отваря файла на базата данни. При успешна връзка се създава обект “ADOX.Catalog” (каталог на таблици), който първо проверява съществуването на таблицата в съответствие с функционален параметър №3. Следващото действие създава

нова маса//Параметър . Към таблицата се добавя ключово поле (индекс). След това, на базата на функционален параметър № 2, се създават таблични полета от съответните типове. След завършване, новосъздадената таблица се добавя към каталога и връзката се затваря.//Параметър Разбира се, ръчното събиране на параметъра на функция № 2 е доста трудоемко; за да го улесня, написах функция, която на базата на таблица със стойности с данни формира структурата на описанието на таблицата. Изходният код на функцията, съставяща структурата на описанието на полето://спомагателна функция за форматиране на структурата на описанието на полето 1: Таблица със стойности - Таблица с данни за качване 2: низ - пълно име на таблица (не трябва да съдържа непозволени знаци: " , .) //Връща структурата на описанието на таблицатаФункция ComposeFieldDescriptionStructure(DataTableValue, TableNameValue)DescriptionStructure = Нова структура("TableName" , Полета за описание" ) ;DescriptionStructure.TableName =TableName;DescriptionStructure.FieldDescription = Нов масив; //преминаваме през колоните на таблицата със стойности За всяка колона TK от таблицата с данни. Колони Цикъл StructurePropertyFields = Нова структура(" Име , Тип, Дължина, Синоним" ); ColumnValueType = ColumnTZ.ValueType; StringLength = ColumnValueType.StringQualifiers.Length;//проверка на типовете, съдържащи се в колоната 202 " ; //adVarWChar, тип FieldPropertyStructure. Length = 255 ;FieldPropertyStructure. Синоним = ColumnTK. Header; ElseIfColumnValueType. ContainsType(Type(" Линия" ) ) След това FieldPropertyStructure. Име = TK колона. Име; Ако дължина на линия = 0, тогава FieldPropertyStructure. Тип = " 203 " ; //adLongVarWChar("memo"), тип 203 [Unicode текстов поток (DT_NTEXT)]202 " ; //adVarWChar, тип 202 [255 знаков Unicode низ (DT_WSTR)] //FieldPropertyStructure.Length = ?(LineLength 0 Тогава //грешка в редактора на статия при вмъкване на код, не може да се поправи, вижте обработката StructurePropertyFields. Тип = " 5 " ; //adDouble, тип 5 В противен случай StructurePropertyFields. Тип = " 3 " ; //adInteger, тип 3 EndIf ; 11 ElseIfColumnValueType. ContainsType(Type(" Boolean ") ) След това StructurePropertyField. Име = КолонаTZ. име; StructurePropertyFields. Тип = " 11 " ; //adBoolean, тип 7 StructurePropertyFields. Дължина = Недефинирана; 7 StructurePropertyFields. Синоним = КолонаTZ. Заглавие; 202 " ; //adVarWChar, тип 202 [255 знаков Unicode низ (DT_WSTR)] ElseIfColumnValueType. ContainsType(Type(" Date ") ) След това StructurePropertyField. Име = КолонаTZ. име; StructurePropertyFields. Тип = "

Функцията получава 2 параметъра:

  1. " ; //adDate, тип
  2. StructurePropertyFields. Дължина = Недефинирана; StructurePropertyFields. Синоним = КолонаTZ. Заглавие;В противен случай StructurePropertyFields. Име = КолонаTZ. име; StructurePropertyFields. Тип = "

StructurePropertyFields. Дължина = 255 ;

  1. StructurePropertyFields. Синоним = КолонаTZ. Заглавие;
  2. Типът е низ, това е константа на Microsoft. В нашия случай използваме само: цяло число, дробно число, низ (с различна дължина), булево и дата.
  3. Дължина - число, за типове низове.
  4. Синоним - низ, текстово описание на полето.

След като завърши формирането на структурата, тя се връща.

Накрая можете да преминете към функцията, която записва данни в таблицата на базата данни. В тази функция, може да се каже, е концентрирана сърцевината на функционалността на целия механизъм. по този начин тази функцияе най-трудното, но това не трябва да ви плаши. Програмистът е програмист, защото развива аналитично мислене.

Изходен код за функцията, въвеждаща данни в таблица:

//функцията въвежда данни в таблицата //Параметър 1 : низ - пълно име на файла с база данни //Параметър 2 : Таблица със стойности - Таблица с данни за качване //Параметър 3 : структура - описание на таблицата, която се създава (може да се генерира с помощта на функцията: Компилиране на структура, описание на полета) //Връща 0 в случай на успешно завършване на работата и не 0 ако функцията е неуспешна функцияВъвеждане на данни в таблица (ЗначениеИме на файла , Значение DataTable , ЗначениеОписание Таблици ) Низ за свързване = " Доставчик = Microsoft . Джет . OLEDB . 4 . 0 ; Източник на данни = " " " + Име на файла + " " " ; Jet OLEDB: Тип двигател = 5 ; " ; //обект, отговорен за комуникацията с базата данниКонектор = Нов COMObject (" ADODB . Връзка" ) ; Конектор . ConnectionString = Низ за свързване ; //връзка опитКонектор . Отворете () ; ИзключениеДокладвай (" неуспя да отвори файла с базата данни!" ) ; Докладвай (Описание Грешки () ) ; Връщане - 1 ; EndAttempt; състояние (" Попълвам таблицата с данни:" + Описание Таблици . TableName ) ; //DB команден обектКом = Нов COMObject (" ADODB . командване" ) ; Ком . ActiveConnection = Конектор ; //постоянен 1 означава "заявка", има също изгледи и съхранени процедуриКом . CommandType = 1 ; Брояч на редове = 1 ; ЗаВсяка линия TK от DataTable ЦикълОбработка на потребителски прекъсвания () ; Брояч на редове = 1;Списък с полета = формат (Брояч на редове , " CHG = " ) + " , " + Символи . PS ; Брояч на редове = Брояч на редове + 1 ; Брояч на колони = 0 ; //цикъл за генериране на списък с полета ЗаВсяка колона TK от DataTable . Колони Цикъл TechValue = Линия TK [ КолонаTZ . Име ] ; Полета за описание = Описание Таблици . Полета за описание . Вземете (Брояч на колони ) ; //анализ на типа данни АкоПолета за описание . Тип = " 3 " Тогава //цяло числоСписък с полета = Списък с полета + формат ( TechValue , " CHN = нула; CHG = " ) + " , " + Символи . PS ; В противен случай АкоПолета за описание . Тип = " 5 " Тогава //дробно числоСписък с полета = Списък с полета + формат ( TechValue , " ЧРД = . ; CHN = нула; CHG = " ) + " , " + Символи . PS ; В противен случай АкоПолета за описание . Тип = " 7 " Тогава //дата Ако TechValue = "00010101 " Тогава ModValue = " нула" ; В противен случай ModValue = " " " + формат ( TechValue , " DLF = Д.Т." ) + " " " ; EndIf; Списък с полета = Списък с полета + ModValue + " , " + Символи . PS ; В противен случай АкоПолета за описание . Тип = " 11 " Тогава //булева стойностСписък с полета = Списък с полета + формат ( TechValue , " БЛ = невярно; BI = вярно" ) + " , " + Символи . PS ; В противен случай АкоПолета за описание . Тип = " 202 " Тогава // линия ValueString = лъв ( TechValue , 255 ) ; Ако EmptyString ( ValueString ) ТогаваСписък с полета = Списък с полета + " нула, " + Символи . PS ; В противен случай //Единичните кавички са специален знак в sql //преобразуване на този символ чрез код ModValue = PageReplace ( ValueString , " " " , " " + хр (" + Код на символа (" " " ) + " ) + " " ) ; Списък с полета = Списък с полета + " " " + AbbrLP (лъв ( ModValue , 255 ) ) + " ", " + Символи . PS EndIf; В противен случай АкоПолета за описание . Тип = " 203 " Тогава // линия Ако EmptyString ( ValueString ) ТогаваСписък с полета = Списък с полета + " нула, " + Символи . PS ; В противен случай ModValue = PageReplace ( TechValue , " " " , " " + хр (" + Код на символа (" " " ) + " ) + " " ) ; Списък с полета = Списък с полета + " " " + ModValue + " ", " + Символи . PS EndIf; EndIf; Брояч на колони = Брояч на колони + 1 ; Край на цикъла; //За всяка колона TK от цикъла на колоните с данни +chr(Списък с полета = лъв (Списък с полета , StrLength (Списък с полета ) - 2 ) ; // окончателно формиране на теста на заявкатаТекст на заявката = " INSERT INTO" + Описание Таблици . TableName + " ЦЕННОСТИ (" + Списък с полета + " ) " ; Ком . CommandText = Текст на заявката ; //записване на данни в базата данни (изпълнение на заявка) опитКом . Изпълнение() ; ИзключениеДокладвай (" " + Символи. PS; Else ModValue = StrReplace(CurrentValue, " " " , " "" + Символи . PS + " Текст на заявката:" + Текст на заявката + Символи . PS + Описание Грешки () ) ; Връщане - 2 ; EndAttempt; Край на цикъла; //За всеки LineTK от цикъл на данни //затворете връзкатаКом . ActiveConnection . затвори () ; Ком = Недефиниран; Конектор = Недефиниран; Връщане 0 ; EndFunction

Com = Недефинирано;

  1. FileName - име на низ на файла на базата данни.
  2. DataTable - таблица със стойности, съдържаща данни.
  3. Описание на таблица - структура, описваща полетата и името на таблицата.

За работа с базата данни се създава връзка, която вече ни е позната. След като се свържем, създаваме обект, отговорен за изпълнението на sql инструкции. След това организираме цикъл през редовете на таблицата със стойности (функционален параметър № 2) и вложен цикъл през колоните на таблицата. Броячът на редове ще се използва за индексиране на редове. Броячът на колоните ще се използва за търсене на описание на полето в структурата на описанието на таблицата (параметър № 3). Преминавайки през колоните на следващия ред, анализираме техните типове (според описанието на таблицата) и извършваме съответните трансформации. В резултат на това имаме готова sql команда за запис на ред в базата данни. Прилагаме получената sql инструкция с помощта на обекта ADODB.Command. В края на процеса затворете връзките и изчистете паметта.

За съжаление на този сайт не успях да прикача обработка за дебелия клиент, който може да качва всякакви директории в базата данни за достъп. Но можете да го изтеглите на Yandex диск: http://yadi.sk/d/UzK_PAsJ3vjTS. Тази обработка включва всички части на универсалния разтоварващ механизъм. Разбира се, този механизъм не се ограничава до тази обработка. Може безопасно да се копира, както в отделен модул, и във вашата обработка. Не изключвам грешни ситуации, които могат да доведат до неуспешно качване, но това не е комерсиален проект. Вие сте свободни да променяте този механизъмза да отговарят на вашите нужди. По-долу има 2 приложения, описващи adox константи. Надявам се, че този механизъм ще ви бъде полезен. Желая ти успех в професионалната кариера!

Приложение 1 списък с допълнителни свойства на полето на таблицата за достъп:

Автоматично увеличаване

Задава типа поле на "Брояч", като стойността се увеличава автоматично при добавяне на запис.

По подразбиране

Стойност на полето по подразбиране.

Описание

Описание на терена.

Фиксирана дължина

Определя дали полето ще бъде с фиксирана дължина или променлива.

Увеличаване

Стойността, с която полето тип брояч ще бъде увеличено.

Nullable

Определя дали полето може да не съдържа стойност, с други думи, дали полето трябва да е задължително.

семена

Стойността, от която ще започне обратното броене в първия запис за поле от тип "брояч".

Jet OLEDB: Разрешаване на нулева дължина

Определя дали текстовите полета могат да съдържат низове с нулева дължина. Игнорира се за полета без знаци.

Jet OLEDB: Автоматично генериране

Определя дали автоматично ще се генерира нова GUID стойност за полета от тип adGUID.

Jet OLEDB: Правило за валидиране на колони

Израз, който определя коректността на стойността, записана в полето, трябва да бъде написан във формат SQL WHERE, но без ключова думаКЪДЕ.

Jet OLEDB: Текст за проверка на колона

Текстът, който ще се покаже, ако въведената стойност в полето не отговаря на правилото, дефинирано за това поле (Правило).

Jet OLEDB: Компресирани UNICODE низове

Определя дали Microsoft Jet ще компресира UNICODE низове при запис на диск. Игнорира се, ако базата данни не е вътре Microsoft формат Jet версия 4.0.

Jet OLEDB: Хипервръзка

Указва, че данните в полето са хипервръзка. Игнорира се за полета с тип, различен от adLongVarWChar.

Jet OLEDB:IISAM Не е последната колона

За Installable-ISAMs това свойство информира I-ISAM, че има още колони, които ще бъдат добавени към таблицата след тази. Ако използвате ITableDefinition::AddColumn или ITableDefinition::CreateTable, се изисква да зададете това свойство за всеки.

Jet OLEDB: Един BLOB на страница

Определя дали данните трябва да се съхраняват в отделни страници (True) или могат да се използват споделени страници от база данни, за да се спести дисково пространство. Работи само с полета adLongVarBinary.

Приложение 2 списък на типове стойности, използвани в ADOX

adDouble, тип 5 - дробно число

adDate, тип 7 ​​- дата/час

adCurrency, тип 6 - цяло число

adInteger, тип 3 - цяло число без знак

adBoolean, тип 11 - булев

adVarWChar, тип 202 - Unicode низ с дължина 255 знака

adLongVarWChar("memo"), тип 203 - unicode низ неограничен низ

Наскоро трябваше да изтегля всички данни от една проста база данни на Access в самостоятелно написана конфигурация (1C:Enterprise. Нямаше много информация за прехвърляне и по принцип беше възможно да разтоваря този завладяващ процес на потребителя, но Реших да помогна на вече заетите си служители.

Помощта се състоеше в пълна автоматизация на този процес. Трябваше да напиша проста обработка, която направи всичко за няколко секунди. Преди тази задача не трябваше да работя с комбинацията 1C + Access, така че преди да грабна клавиатурата и да започна да наплясквам кода, реших да прочета ръководствата.

От самото начало знаех, че всяко взаимодействие ще включва използването на подходящите доставчици, но все пак реших да се поровя в примерите.

Дълго мислих в какъв смисъл да напиша тази бележка. В крайна сметка се спрях на най-простия вариант - предоставям кода за моето решение. Дори и да не е много оптимален, той е повече от достатъчен за повечето задачи.

Така че, нека започнем да разглеждаме всичко по ред. Създаваме нова обработка и хвърляме един компонент върху нея - „TableField“. Опънах този компонент през цялата форма. В резултат моята форма изглеждаше като на фигура 1.


Фигура 1. Форма за обработка

На този етап можем да приемем, че дизайнът на формата е готов. Няма да създаваме колони ръчно, а ще изпълняваме тази процедура динамично. За щастие не е трудно. Създайте манипулатор на събития „При кликване“ за бутона „Изпълни“ и напишете следния код в него:

//Изчистване на полето на нашата таблица TableField1.Clear(); TableField1.Columns.Clear(); //Подготовка на низа за връзка за MS Access //Пътят до базата данни е посочен в самия край Низ за връзка = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+"C:\mydb.mdb";

ConnectionWithBase = Нов COMObject("ADODB.Connection"); //Свържете ConnectionWithBase.Open(ConnectionString); //Вземете набор от записи от таблицата demo_tableRecords Collection = New COMObject("ADODB.Recordset");

RecordsCollection.Open("изберете * от demo_table", DatabaseConnection, 1); //прочетете структурата на полетата на таблицата //В таблицата със стойности създайте всички колони, които са в таблицата на Access For count = 0 от Records Collection.Fields.Count - 1 цикъл TableField1.Columns.Add("Column" + count, Row(Records Collection .Fields.Name (count).Name)); For count = 0 by RecordsCollection.Fields.Count - 1 Cycle NewRow["Column" + count] = RecordsCollection.fields(TableField1) .Columns[count].Value; EndCycle.MoveNext(); //Показване на данни от спецификацията TableFieldFormElements.TableField1.Value = TableField1.CreateColumns(); Кодът се оказа не много голям, но доста полезен. Не съм правил никакви обвързвания към конкретна структура. Кодът работи чудесно на голямо разнообразие от таблици. Нямам какво повече да добавя, така че ще кажа довиждане, всякакви акцизи и т.н.), 1C не може да бъде заменен с нищо и опитът да се направи това е най-малкото неконструктивен.

Но не спирайте да четете тази статия, това все още не е основната идея. Основното нещо е да не попадате в логически капан и да считате 1C за напълно незаменим във всяка част от автоматизацията на всички процеси в предприятието. Тук има какво да спорим и какво да предложим. Искам да говоря за един успешен опит в автоматизирането на различни аспекти на бизнес дейността на компютърна компания и, разбира се, за свързването на това решение с 1C. Работата произтича от необходимостта от свързване на самостоятелно разработена система с програмата 1C, но този подход (разделяне на 2 програмни блока) може да се развие в пълноценна философия за изграждане на информационна система като цяло.

Първоначално задачата беше следната. Имаше корпоративна системаавтоматизация, написана в Microsoft Access. През годините на своето развитие тя е поела почти всички ежедневни задачи - поддържане на банка, издаване на фактури, подготовка на счетоводни документи за експедиране, поддържане на склад, отчитане на компоненти серийни номера, компилация технологични картиза производство и др. Наскоро във възможностите на системата бяха добавени следните допълнения: създаване на банкови плащания директно на базата на входящи фактури, автоматично генериранеценоразписи в различни формати за публикуване в уеб ресурси, актуализиране на уебсайта на компанията и изготвяне на договори по съществуващи шаблони (т.нар. офис автоматизация). Плюс наличието на голямо количество анализи и поддържане на цялото управленско счетоводство. Всичко това направи системата напълно незаменима - прехвърлянето на цялата тази функционалност към 1C би отнело много време и пари.

От друга страна, програмата 1C-Enterprise обслужваше само нуждите на счетоводния отдел за поддържане на счетоводни и счетоводни записи и подаване на отчети. По този начин 1C беше „отвързан“ от ежедневното функциониране на компанията и завършените документи бяха въведени в базата данни a posteriori.

Какво е добро в тази схема? Има няколко предимства:
- изключване на ръководители и други (без)отговорни лица от „светая светих” – счетоводната база данни, която да се формира само от служители, разбиращи от материята; точно поддържане на директории,
- премахване от 1C на всичко, което не е свързано с него: от управленски задачи, които не изискват отразяване в счетоводството, до всички други точки, които са специфични за компанията и до които външни лица не трябва да имат достъп,
- спестявания на лицензи: работните станции 1C струват значителни пари,
- важен момент: при внедряването на цялата допълнителна функционалност, описана по-горе, директно „вътре“ в 1C, има постоянна нужда от нейното подобряване, когато се пускат актуализации на продукта. Това, разбира се, гарантира почти постоянна заетост на 1C програмисти, но това е място, където можете да спестите значително.

Е, големият минус, разбира се, е необходимостта от повторна проверка на всички документи и актуализиране на директориите.

Всъщност това беше основната задача - да се измъкнем от двойната работа.

Първо трябва да се справите с всички видове директории - на първо място, това е директория на изпълнители и артикули. Проблемът със синхронизирането на директории, който толкова често възниква в програми от този вид, е достатъчно разработен и е разбираем при изпълнение. В този случай обаче беше взето волево решение да не се използват 2 директории с взаимна синхронизация, а да има една първоначална версия - тази, въведена в MS Access, и просто да се репликира в 1C ( обратна връзка- това е само знак в MS Access, че тази позиция вече е разтоварена).
Този подход значително опростява задачата. За чисто счетоводни нужди ви трябват много малко позиции в такива директории - и те също са включени външна програмаза да не се наруши формулираният принцип. По този начин можете да премахнете още един често срещан проблем- огромно раздуване на справочника на използваната номенклатура. По-долу е продуктовата група „Монитори“

Зареждането на такъв ужас в директорията 1C (а новите модели монитори се появяват почти всяка седмица) може да бъде конфигурирано по такъв начин, че всички да попадат в една позиция, тъй като нюансите на цвета на рамката около екрана и броя на пикселите са напълно незначителен за счетоводството! И, честно казано, размерът на диагонала е още по-голям, ако се различава с половин инч.

Освен това във външна програма можете да изработите обединяването на дублиращи се позиции в директории, особено в директорията на контрагентите, с много по-малко загуби, тъй като в 1C това отнема много усилия.

По този начин в 1C се качват само „рафинирани“, изчистени и приведени в правилна форма данни. Разтоварването може да се извършва с известна честота - порционирането ви позволява да отстраните грешките в работата на счетоводния отдел и да избегнете ненужна работа, ако през деня (или по-дълъг период) нещо е било отменено, променено, извършено отново - всички тези неща се случват в работата База данни на MS Access и само „установена“ „Състоянието на нещата се докладва на 1C. Освен това този вид разтоварване може да се синхронизира с операции за архивиране и винаги можете да сте сигурни, че текущото състояние на базата данни 1C е правилно.

Ясно е, че документите пристигат без автоматично публикуване (въпреки че това може да се конфигурира). Между другото самата база данни на MS Access проверява наличността на необходимите стоки в склада - за изписване за експедиция (дилемата е да се уверите, че фактурата може да бъде издадена текуща датаче всички артикули, необходими за отписване, са в склада - т.е. закупени или произведени - трябва... да осчетоводите документа в 1C. Очевидно не трябва да се доверявате на мениджърите - или счетоводен служител винаги трябва да стои зад раменете на мениджъра)

Сега за изпълнението. Програмите 1C поддържат интерфейс за обмен на данни чрез механизма ADO. От страна на 1C се използва стандартният софтуерен интерфейсза създаване на елементи от директории и документи, така че работата на този механизъм да не зависи от вътрешните детайли на внедряването на 1C, които могат да се променят от версия на версия и от актуализация на актуализация. От друга страна, основният лозунг на разработката беше „да се използват максимално възможностите на 1C, където е възможно“. Следователно, при окончателното внедряване на пакета, само името и TIN на контрагента бяха заредени от MS Access - данните бяха „изтеглени“ от Единния държавен регистър на юридическите лица и индивидуалните предприемачи с помощта на механизма, вграден в 1C ( същото важи и за банкови данни– те се актуализират чрез BIC).

Бяха създадени заявки във външна база данни на MS Access, която подготвя всички необходими данни за зареждане в 1C - вземете ги и ги подредете в документи и полета.

Схемата за разтоварване се състои от два етапа. Първо се зареждат нови позиции в директориите на контрагенти и позиции. GUID, присвоени на 1C, се връщат в MS Access, така че при качване на всички документи на втория етап да могат да бъдат зададени правилните препратки към директории. Изглежда така

Вярваме, че такава идеология на строителството информационни системиможе да се вземе като основа не само в онези компании, където има наследени системи, различни от 1C, но и при организиране на работата на нови юридически лица, тъй като имаме много опит с MS Access. Предимствата на този подход са описани по-горе.

В тази статия ще говорим за настройката на правата за потребителски достъп до системните обекти на 1C.

В 1C 8, за да се контролира достъпът на потребителите, се използва отделен обект на метаданни, който се нарича Роли.

Обърнете внимание! Тази статия е написана в помощ на програмистите. Настройката на правата в потребителски режим с помощта на примера на 1C Accounting е разгледана в.

Ролята определя набора от права, които потребителят има. Механизмът на ролите е много подобен на механизмите за права на Windows Активна директория. За всеки от обектите (директории, документи) разработчикът задава свой собствен набор от права - четене / писане / добавяне / промяна / ...

Набор от налични права - събирането на всички разрешения в потребителските роли.

Ако отворим обекта с метаданни на ролята, можем да видим следната картина:

Обектът има два раздела - Права и Шаблони за ограничения. Права - основен раздел, Шаблони - раздел за настройка на права на ниво запис в 1C ( RLS). Това е много важна тема, която ще се опитам да опиша в следващите статии.

Ще разгледаме само раздела права.

  • Обекти— списък, за който ще се задават права.
  • права— списък с възможни настройки за права за настройка.
  • Ограничаване на достъпа до данни— ролеви полета за персонализиране

Моля, обърнете внимание на квадратчетата за отметка в долната част:

  • Задайте права за нови обекти— ако флагът е зададен за ролята, разрешаващите права ще бъдат автоматично зададени за нови обекти с метаданни. Препоръчвам да го инсталирате, ако често забравяте да зададете права за нови обекти.
  • Задайте права за подробности и таблични частипо подразбиране— флаг, когато е зададен, детайлите и табличните части ще наследят правата на собственика (директория, документ и т.н.)
  • Самостоятелни права на подчинени обекти— ако флагът е зададен, тогава системата ще вземе предвид правата върху родителския обект, когато определя правата за конфигурационен обект

Настройки на разрешения за цялата конфигурация

Ако отворим ролята и щракнете върху корена на конфигурацията, ще видим следните настройки:

Повече подробности за всеки права върху цялата конфигурация:

Вземете безплатно 267 видео урока за 1C:

  • Администрация— администрация информационна база(изисква право „Администриране на данни“)
  • Администриране на данни— право на административни действия върху данни
  • Актуализиране на конфигурацията на базата данни- правото на
  • Монополен режим— използване на изключителен режим
  • Активни потребители— преглед на списъка с активни потребители
  • — дневник
  • - стартиране надясно тънък клиент
  • - право на стартиране на уеб клиент
  • Дебел клиент— право на ролята на стартиране на дебелия клиент
  • Външно присъединяване— право на стартиране на външна връзка
  • Автоматизация— право на използване на автоматизация
  • Режим на всички функции— в режим на управлявано приложение
  • Запазване на потребителски данни— разрешение или забрана за запазване на потребителски данни (настройки, любими, история). Това важи особено за 1C управляваните форми.
  • Интерактивно откриване външни лечения — отваряне на външна обработка
  • Интерактивно отваряне на външни справки— отваряне на външни отчети
  • Заключение— отпечатване, запис и копиране в клипборда

Настройка на правата на 1C 8.2 за други обекти с метаданни

За други основни обекти (директории, константи, документи, регистри...), наборът от права за ролята е съвсем стандартен:

  • Четене- четене (софтуер)
  • Допълнение- добавяне (софтуер)
  • промяна- промяна (софтуер)
  • Премахване- премахване (софтуер)
  • Преглед— изглед
  • Интерактивно допълнение- интерактивно допълнение
  • Редактиране— редактиране
  • Интерактивен флаг за изтриване— интерактивен знак за изтриване
  • Интерактивно демаркирайте изтриването— демаркиране за изтриване
  • Интерактивно премахване на маркирани— изтриване на маркирани обекти
  • Линеен вход— използване на редов режим на въвеждане
  • Интерактивно премахване— директно изтриване (shift +del)

Права само за документи:

  • Интерактивно провеждане— извършване
  • Анулиране— анулиране на документи
  • Интерактивно провеждане неоперативно— задържане (със стандартни команди на формуляра) на документ в неоперативен режим
  • Интерактивно анулиране— интерактивно анулиране
  • Интерактивна промяна на разхода— редактиране на публикувания документ. Ако правото на ролята не е зададено, потребителят не може да изтрие публикуван документ, да зададе флаг за изтриване, да го изпрати отново или да го направи непубликуван. Формата на такъв документ се отваря в режим на преглед

P.S.Ако все още не можете да разберете потребителските роли, можете да поръчате.
Видео с пример за настройка на права в 1C Accounting 3.0:

Споделете