1s 8 външни източници на данни. Външни източници на данни

Във версия на платформата 8.3.5.1068 (и по-нова) стана възможно добавянето, промяната и изтриването на данни във външни източници с помощта на софтуера 1C. Примери за тази функция са представени в тази статия.

За да направи възможно записването към външни източници, компанията 1C добави нови свойства към таблици с данни и полета на външни източници:

  • За цялата маса - имот Само четене. Само за четене = Вярноозначава, че промяната на данните в тази таблица е невъзможна;
  • За отделни таблични полета – свойства Само четене, AllowNullИ Попълнете стойност:
    • Само за четене = Вярноозначава, че промяната на данните в това поле е невъзможна;
    • AllowNull = Вярноозначава, че в това поле може да бъде записана стойност НУЛА;
    • Попълнете стойностсъдържа стойността по подразбиране на това поле (ако съществува).

Вие (когато описвате таблици ръчно) или платформата (когато създавате таблици с помощта на дизайнер) можете да използвате тези свойства, както следва.

  • Само за четене = Вярнонабор, например, за изгледи, таблици, получени въз основа на израз (резултат от функция) и други подобни. Данните в такива таблици не могат да бъдат променяни;
  • Само за четене = Вярнопосочете за полета, които се задават автоматично ( АВТОМАТИЧНО УВЕЛИЧАВАНЕ), изчислени полета и други подобни. Данните в такива полета не могат да бъдат променяни;
  • AllowNull = Вярнозададен за всички полета, с изключение на ключови полета и тези, които са описани във външен източник като НЕ НУЛЕВ;
  • Попълнете стойностполетата трябва да бъдат зададени в случай, че външният източник посочва стандартната стойност на това поле (стойност ПО ПОДРАЗБИРАНЕ).

Можете да добавяте, променяте и изтривате данни във външни източници, като използвате вградения език или интерактивно. Вграденият език използва следните методи за управление на таблици за това:

  • CreateRecordSet()- за необектни маси;
  • Нов метод CreateObject()- за обектни маси.

Съответно обектите ExternalDataSourceTableRecordSetИ ExternalDataSourceTableObjectсе появиха нови методи Напиши()И Изтрий().

Добавяне на данни

Когато добавяте данни към външен източник, създавате обект (или набор от записи), задавате стойности на полета и записвате. Има обаче някои функции, за които е полезно да знаете.

Например, ако се опитате да зададете стойността на поле, което има Само за четене = Вярно, ще бъде изведена грешка. И когато пишете директно в базата данни в израза ВМЪКНЕТЕтакива полета ще бъдат пропуснати. Останалите полета съдържат стойностите, които сте им присвоили. Следователно ценностите Нулаи стойностите по подразбиране трябва да бъдат присвоени изрично на полетата.

  • документ за самоличност(AllowNull = True);
  • име(AllowNull = True);
mFeature = ExternalDataSources.TableIm.shop_feature.CreateObject(); mCharacteristic.id = Код; mCharacteristic.name = Име; mCharacteristic.Write();

Изпълнение на изявление Напиши()ще накара манипулатора на събитието да бъде извикан първо Преди записване, тогава се извършва физически запис във външната таблица източник ( ВМЪКНЕТЕ), тогава ще бъде извикан манипулаторът на събитие Когато се записва.

Можете да направите следното с ключовото поле на таблицата с външен източник. Ако едно ключово поле може да се променя, тогава вие „ръчно“ задавате стойността му преди запис. Ако промяната на полето за ключ е забранена, платформата ще получи независимо ключа ВМЪКНЕТЕили веднага след това. Можете да се намесите в този процес, като използвате метода SetLinkNew()преди физическия запис (в манипулатора на събития Преди записване) или веднага след физическия запис (в манипулатора на събития Когато се записва).

Промяна на данни

Когато данните се променят, стойностите на всички полета на таблицата, които имат Само за четене = невярно.

MFeature = ExternalDataSources.TableIm.shop_feature.FindByField("id",code); mObject = mCharacteristic.GetObject(); mObject.name = Име; mObject.Write();

Ако трябва да запишете само някои полета, можете да посочите списък с тях директно от вградения език, като използвате методите SetWritableFields()И GetWrittenFields().

Изтриване на данни

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

MFeature = ExternalDataSources.TableIm.shop_feature.FindByField("id",Код); mObject = mCharacteristic.GetObject(); mObject.Delete();

Транзакции

Четенето на данни от външни източници, както и преди, се извършва извън транзакция, а при писане платформата отваря имплицитна транзакция. В същото време можете да извършвате както четене, така и писане в изрични транзакции, като използвате обектни методи ExternalDataSourceManager:

  • StartTransaction();
  • CommitTransaction();
  • CancelTransaction().

Брави

  • Автоматичен;
  • Управлявана;
  • Автоматично и контролирано.

както и свойството на външната таблица източник Ниво на изолация на транзакция:

Освен това можете независимо да зададете нивото на заключване в метода StartTransaction().

Добавих примери към стандартната статия) Ако имам повече време, ще добавя още примери.

Защо тази възможност е от такъв интерес? Всеки човек, който е програмирал в 1C и е добре запознат с SQL и поне като цяло е запознат с архитектурата и принципите на разработка на други технологични платформи за бизнес приложения, ще ви каже с твърда увереност какво му харесва най-много в 1C. Разбира се, конструкторът на заявки е най-удобният и обмислен механизъм за писане на заявки за извличане на данни от релационни структури, който лично съм срещал. И сега 1C ни даде такава прекрасна възможност да го използваме не само с 1C, но и с всякакви други таблици. Просто тази „бъчва с мед“ има много „мухи в мехлема“. Първо най-важното:

1) Настройка и използване- без „танцуване с тамбура“ няма да работи
а) Добавете външен източник на данни - не изглежда сложно
б) поставете отметка в квадратчето „Избор от списък“ - задължително - това е необходимо за проверка на функционалността в началото и ще ви спести от ненужни проблеми
в) - задължително натиснете "..." - връзката е ODBC. Не OLEDB, както всички сме свикнали, а едно ниво по-ниско

Г) Но тук бъдете МНОГО ВНИМАТЕЛНИ.

Това е ODBC драйвер - ако използвате версия клиент-сървър, той трябва да е на сървъра. Ако разработвате върху една система и работите върху друга (както обикновено се случва), уверете се, че не ви очакват изненади. Странна препоръка, но изберете най-стария или най-често срещания драйвер, ако не сте особено загрижени за скоростта и не възнамерявате да надхвърляте възможностите на стандарта SQL92. Това ще ви осигури по-добра съвместимост. Например за SQL Server 2008 най-добрият драйвер ще бъде SQL Server Native Client 11, но препоръчвам да изберете само SQL Server, в противен случай този много нативен клиент ще трябва да бъде инсталиран или на сървъра, или на всички клиентски машини (ако използвате файлова версия), а ползата е специална за прости той няма да ви дава никакви задачи.
д) Стандартни диалогови прозорци за избор на сървър

E) Препоръчвам да отговорите с „да“ на въпроса за запазване на паролата, в противен случай няма да можете да започнете този бизнес.
g) Изберете таблицата и подробностите... прекрасна възможност - можете веднага да я преименувате както искате (и детайлите също), а в свойствата ще видите имената на полетата на източника на данни

Z) И сега го стартирате, отваряте дизайнера на заявки - глупаво изберете всички записи от таблицата и OPA - грешка. Какво да правя? Ако имате управляван интерфейс, вижте сервизното меню, а ако обикновен...
Аз лично използвах този код:
Параметри на код 1C v 8.x = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.AuthenticationStandard = True;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=база данни";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Параметри);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Параметри);

ExternalDataSources.DAX.SetConnection();
Някои части може да не са необходими, но работи.
Трябва да стартирате кода ВЕДНЪЖ. След което ще бъде нормално да се свърже... мистика разбира се - защо е необходимо това не е ясно...

2) Източници на данни само за четене- Да, чудеса не стават... но понякога ти се иска...

3) ТЕ НЕ МОГАТ ДА СЕ ИЗПОЛЗВАТ ЗАЕДНО С ВЪТРЕШНИ ИЗТОЧНИЦИ НА ДАННИ
Мен лично този факт ме уби на място.

Как може да бъде това... това, което чакахме и вече си представяхме и облизахме устните си как сега ще комбинираме нашите данни с 1C в една заявка, ще ги свием - групираме, вмъкваме в отчета, но това не е така ...
Но, разбира се, това не спира опитните хора... каква мисъл ми хрумна? Точно така - временни таблици:

4) ТЕ НЕ МОГАТ ДА СЕ ИЗПОЛЗВАТ ЗАЕДНО С ВРЕМЕННИ ТАБЛИЦИ

Но това вече не изглежда като технологични трудности, а много прилича на това, което искат да направим „за да не изглежда животът като рай“ :).

5) Може да се използва само в ACS връзки
За тези, които не знаят, това е в ACS в раздела „Връзки към набор от данни“. Използвате ли ги често? Удобно? Явно искат да ни принудят да ги използваме по-често. Има само колона „Условие на комуникация” и „Параметър на комуникация”. Не намерих пример за използването им в стандартна конфигурация и някак си всичко не е прозрачно в документацията и в работата на Хрусталева. Може ли някой да ми обясни как работи "условието за връзка". Ако там напишете Source Attributes = Receiver Attributes, това не работи. Разбира се, условието може да бъде написано в полето "Израз" - в повечето случаи това е достатъчно... но някак си не се получава много лесно.

Общо взето този проблем беше решен преди това някъде по следния начин:
Код 1C v 8.x Функция InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Ако DataCon > "20100101" Тогава
DataCon = "20100101";
endIf;

CN = Нови квалификационни числа (15,2);
KS = NewStringQualifiers(255);

ArrayNumber = Нов масив();
ArrayNumber.Add(Type("Number"));

ArrayString = Нов масив();
ArrayString.Add(Type("String"));

ArrayData = Нов масив();
ArrayDate.Add(Тип("Дата"));

//Ще попълним счетоводния разход в таблицата
TypeNumber = Нови типове описания (ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = Ново описание на типа(ArrayDate);

//таблица за зареждане на данни от SQL
TZ = Нова таблица със стойности();
TK.Columns.Add("Номенклатурен код", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Период", DateType);

TK.Indices.Add("Период");

//Свързване към SQL
Низ за връзка = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Шифроване за данни=False;Етикет със сортиране на колони, когато е възможно=False;Първоначален каталог=Отчети";
Връзка = Нов COMObject("ADODB.Connection");
Команда = Нов COMObject("ADODB.Command");
RecordSet = Нов COMObject("ADODB.RecordSet");
Дата = "";
опит
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Връзка;
Command.CommandText = "S_elect * fr om PH where period >= "" + String(Format(DateStart, "DF=yyyyMMdd"))) + "" и точка<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Изключение
Връщане на технически спецификации;
EndAttempt;

Докато RecordSet.EOF = False Loop
Линия = TZ.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Row.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Заявка = Нова заявка();
VrTable = Нов TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Начална дата", начална дата);
Request.SetParameter("DataCon", DateCon);
Query.Text = "ИЗБЕРЕТЕ
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|Поставяне на таблица с данни
| ОТ
| &vDataTable КАТО vrDataTable
|КЪДЕ
| vrDataTable.Period >= &DateStart
| И vrDataTable.Period<= &ДатаКон";
Request.Run();
TZ = Недефиниран;

Заявка = Нова заявка;
Query.TemporaryTableManager = VrTable;
Query.Text = "Тук е заявка, включваща таблица с променливи";

Резултат = Query.Run();
Връщане на резултат;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = нова структура();
DataSet.Insert("SQL таблица", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decryption Data, OutputToReportForm, DataSet);

Всъщност няма много редове код и те са доста стандартни... в този случай можете да използвате пълната функционалност на дизайнера на заявки и да дадете само функцията DATA COMPOSICION на ACS

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

Информацията е взета от сайта

Работете с тях в списъци в режим 1C Enterprise.

В работата обаче често има ситуация, при която част от данните се съхраняват някъде другаде.

  • Онлайн магазин (обикновено съхранява данни във външна MySQL/SQL база данни)
  • Друга база.

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

Във версия 1C 8.2.14 се появи нова, наречена 1C външни източници на данни, която значително улеснява работата на програмиста, тъй като:

  • сега няма нужда да се създават специални механизми за получаване на данни
  • такива данни могат да бъдат достъпни по обичайния начин
  • такива данни могат да се видят в списъци на 1C.
    • Външен източник на данни 1C – външна SQL база данни

      Да кажем, че имаме SQL база данни, в която се съхраняват необходимите ни данни. Нека се опитаме да прочетем данни от него, като използваме механизма за външен източник на данни 1C.

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

      1. Връзка

      Нека добавим нов външен източник на данни 1C, наименувайте го произволно.

      Базата данни се състои от таблици. Трябва да ги добавим в добавения външен източник на данни. Щракнете с десния бутон върху него и изберете Добавяне на таблица.

      Първият път ще ви подкани да предоставите низ за връзка. Може да се въведе ръчно или да се генерира чрез щракване върху бутона „…“.

      В нашия конкретен случай ще изберем „SQL Server“ като драйвер

      Нека попълним основните параметри за свързване към SQL. Името на сървъра може да бъде въведено или избрано от списъка.

      1C ще се свърже с SQL и ще предложи да изберете конкретна база данни от списъка.

      След това 1C ще покаже списък с таблици в тази база данни и техните колони. Трябва да поставите отметки в квадратчетата, за да изберете необходимите таблици.

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

      Ето пример за добавената таблица:

      Ето пример за добавена колона:

      За да може платформата 1C да работи с външна таблица по същия начин, както с 1C директории, можете да посочите допълнителни параметри в таблицата:

      • В свойството Key Field посочете една от колоните, които ще предоставят уникална идентификация на реда; ако няколко реда осигуряват уникалност, тогава този метод не работи (аналогично на полето Код)
      • В свойството Поле за представяне посочете една от колоните, които ще предоставят кратко представяне на реда (аналогично на полето Име)
      • В свойството Тип данни на таблицата укажете Данни за обекта.

      2. Изглед

      Връзката с отдалечената база не се осъществява автоматично. За да се свържете, трябва да изберете стандартно меню.

      В стандартния клон има специална команда Управление на външни източници на данни, която ви позволява да зададете параметри на връзката (специфични за режим 1C Enterprise) и да осъществите връзка.

      Първо трябва да посочите параметрите за свързване към базата данни.

      Когато направихте настройките в конфигуратора, той ви показа низа за връзка като резултат. Можете да го видите отново, като щракнете отново върху Добавяне на таблица в конфигуратора.

      Копирайте низа за връзка и го посочете в режим 1C Enterprise.

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

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

      3. Използвайте на езика 1C

      Връзката може да се осъществи и от програмен код на езика 1С.

      Параметрите на връзката са посочени, както следва:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetGeneralConnectionParameters();

      ConnectionParameters.AuthenticationStandard = True;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "парола";
      ConnectionParameters.ConnectionString = “низ за свързване от конфигуратора”;
      ConnectionParameters.DBMS = "MSSQLServer";

      ExternalDataSources.SourceNameConfigurator.SetGeneralConnectionParameters(ConnectionParameters);
      ExternalDataSources.SourceNameConfigurator.SetUserConnectionParameters(UserName(), Parameters);
      ExternalDataSources.SourceNameConfigurator.SetSessionConnectionParameters(Параметри);
      ExternalDataSources.SourceNameConfigurator.SetConnection();

      Можете да правите заявки за данни от база данни, като използвате обикновен . Пример за текст на заявка за външен източник OurExternalSource и таблици ExternalSource Table:

      ИЗБИРАМ
      ExternalSourceTable.FieldName
      ОТ
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Външен източник на данни 1C - работа с Excel файл

      Нека опитаме друга опция - работа с Excel файл чрез външен източник на данни 1C.

      Нека създадем прост Excel файл.

      Нека добавим външен източник, произволно да го наречем FileExcel. Нека добавим към него таблицата “Sheet1$”. Както можете лесно да видите, това е името на листа в Excel с добавянето на символа "$".

      Както в случая с SQL, нека добавим колони. Те могат да се добавят ръчно. Важно е да се уверите, че типовете колони, които добавяте, съвпадат, в противен случай по-късно може да получите грешка като „Несъответствие на типа данни“.

      За колоната трябва да посочите име в 1C и име в източника на данни.

      Има функция за Excel (грешка като „Твърде малко параметри. Необходими са 3“):

      • Ако първият ред на таблица на Excel съдържа имена на колони, тогава трябва просто да посочите името на тази колона, например „Код“.
      • В противен случай трябва да посочите пълното име с името на таблицата „Sheet1$.Code“, но добавете „HDR=NO;“ в параметрите.

      Параметрите на връзката за Excel файла изглеждат така:

      • XLSX файлове (Office 2007 и по-нови)
        Драйвер=(Драйвер на Microsoft Excel (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS файлове (по-рано)
        Драйвер=(драйвер на Microsoft Excel (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Трябва да посочите собственото си име и път до файла.

Версия 8.2.14.533 най-накрая е повече или по-малко стабилна версия на 14-то издание на платформата. Най-накрая се появи възможността да изпробвате една чудесна възможност - „външни източници на данни“.

Защо тази възможност е от такъв интерес? Всеки човек, който е програмирал в 1C и е добре запознат с SQL и поне като цяло е запознат с архитектурата и принципите на разработка на други технологични платформи за бизнес приложения, ще ви каже с твърда увереност какво му харесва най-много в 1C. Разбира се, конструкторът на заявки е най-удобният и обмислен механизъм за писане на заявки за извличане на данни от релационни структури, който лично съм срещал. И сега 1C ни даде такава прекрасна възможност да го използваме не само с 1C, но и с всякакви други таблици. Просто тази „бъчва с мед“ има много „мухи в мехлема“. Първо най-важното:

1) Настройка и използване - без „танцуване с тамбурина“ няма да работи

A) Добавете външен източник на данни - не изглежда сложно
б) поставете отметка в квадратчето „Избор от списък“ - задължително - това е необходимо за проверка на функционалността в началото и ще ви спести от ненужни проблеми
V)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- не забравяйте да щракнете върху "..." - връзката е ODBC. Не OLEDB, както всички сме свикнали, а едно ниво по-ниско

Но бъди тук МНОГО ВНИМАТЕЛНО.

Това е ODBC драйвер - ако използвате версия клиент-сървър, той трябва да е на сървъра. Ако разработвате върху една система и работите върху друга (както обикновено се случва), уверете се, че не ви очакват изненади. Странна препоръка, но изберете най-стария или най-често срещания драйвер, ако не сте особено загрижени за скоростта и не възнамерявате да надхвърляте възможностите на стандарта SQL92. Това ще ви осигури по-добра съвместимост. Например за SQL Server 2008 най-добрият драйвер ще бъде SQL Server Native Client 11, но препоръчвам да изберете само SQL Server, в противен случай този много нативен клиент ще трябва да бъде инсталиран или на сървъра, или на всички клиентски машини (ако използвате файлова версия), а ползата е специална за прости той няма да ви дава никакви задачи.

E) Стандартни диалогови прозорци за избор на сървър

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

Z) И сега го стартирате, отваряте дизайнера на заявки - глупаво изберете всички записи от таблицата и OPA - грешка. Какво да правя? Ако имате управляван интерфейс, вижте сервизното меню, а ако обикновен...
Аз лично използвах този код:

Параметри = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.AuthenticationStandard = True;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=база данни";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Параметри);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Параметри);

ExternalDataSources.DAX.SetConnection();

Някои части може да не са необходими, но работи. Трябва да стартирате кода ВЕДНЪЖ. След което ще бъде нормално да се свърже... мистика разбира се - защо е необходимо това не е ясно...

2) Източници на данни само за четене
Да, чудеса не се случват... но понякога ти се иска така....

3) ТЕ НЕ МОГАТ ДА СЕ ИЗПОЛЗВАТ ЗАЕДНО С ВЪТРЕШНИ ИЗТОЧНИЦИ НА ДАННИ
Мен лично този факт ме уби на място.

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

Но, разбира се, това не спира опитните хора... каква мисъл ми хрумна? Точно така - временни таблици:

4) ТЕ НЕ МОГАТ ДА СЕ ИЗПОЛЗВАТ ЗАЕДНО С ВРЕМЕННИ ТАБЛИЦИ

Но това вече не изглежда като технологични трудности, а много прилича на това, което искат да направим, „за да не изглежда животът като рай“ (IMG:).

5) Може да се използва само в ACS връзки

За тези, които не знаят, това е в ACS в раздела „Връзки към набор от данни“. Използвате ли ги често? Удобно? Явно искат да ни принудят да ги използваме по-често. Има само колона „Условие на комуникация” и „Параметър на комуникация”. Не намерих пример за използването им в стандартна конфигурация и някак си всичко не е прозрачно в документацията и в работата на Хрусталева. Може ли някой да ми обясни как работи "условието за връзка". Ако там напишете Source Attributes = Receiver Attributes, това не работи. Разбира се, условието може да бъде написано в полето "Израз" - в повечето случаи това е достатъчно... но някак си не се получава много лесно.

Общо взето този проблем беше решен преди това някъде по следния начин:

Функция InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Ако DataCon > "20100101" Тогава
DataCon = "20100101";
endIf;

CN = Нови квалификационни числа (15,2);
KS = NewStringQualifiers(255);

ArrayNumber = Нов масив();
ArrayNumber.Add(Type("Number"));

ArrayString = Нов масив();
ArrayString.Add(Type("String"));

ArrayData = Нов масив();
ArrayDate.Add(Тип("Дата"));

//Ще попълним счетоводния разход в таблицата
TypeNumber = Нови типове описания (ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = Ново описание на типа(ArrayDate);

//таблица за зареждане на данни от SQL
TZ = Нова таблица със стойности();
TK.Columns.Add("Номенклатурен код", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Период", DateType);

TK.Indices.Add("Период");

//Свързване към SQL
Низ за връзка = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Шифроване за данни=False;Етикет със сортиране на колони, когато е възможно=False;Първоначален каталог=Отчети";
Връзка = Нов COMObject("ADODB.Connection");
Команда = Нов COMObject("ADODB.Command");
RecordSet = Нов COMObject("ADODB.RecordSet");
Дата = "";
опит
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Връзка;
Command.CommandText = "Изберете * от PH, където период >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" и период RecordSet = Command.Execute();
RecordSet.MoveFirst();
Изключение
Връщане на технически спецификации;
EndAttempt;

Докато RecordSet.EOF = False Loop
Линия = TZ.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Row.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Заявка = Нова заявка();
VrTable = Нов TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Начална дата", начална дата);
Request.SetParameter("DataCon", DateCon);
Query.Text = "ИЗБЕРЕТЕ
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|Поставяне на таблица с данни
| ОТ
| &vDataTable КАТО vrDataTable
|КЪДЕ
| vrDataTable.Period >= &DateStart
| И vrDataTable.Period Query.Execute();
TZ = Недефиниран;

Заявка = Нова заявка;
Query.TemporaryTableManager = VrTable;
Query.Text = "Тук е заявка, включваща таблица с променливи";

Резултат = Query.Run();
Връщане на резултат;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = нова структура();
DataSet.Insert("SQL таблица", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decryption Data, OutputToReportForm, DataSet);

Всъщност няма много редове код и те са доста стандартни... в този случай можете да използвате пълната функционалност на дизайнера на заявки и да дадете само функцията DATA COMPOSICION на ACS

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

[трябва да се регистрирате, за да видите връзката]

Външни източници на данни 1C - сравнително нов обект на метаданни 1C 8.3 и 8.2, с който е възможно да се свържете с 1C външни източници на данни: SQL таблици, Excel, Access, FoxPro (dbf), друга база данни 1C, Oracle, Paradox (db) , - и дори четене от прости txt/csv файлове.

Това дава много възможности с други системи. Нека да разгледаме по-отблизо.

Настройка на външни източници на данни в 1C 8

Настройката на външни източници е индивидуална за всеки тип система. Но като правило общата част от настройката е същата - това е настройката на низа за връзка:

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

Ако низът за свързване е зададен правилно, системата ще ви подкани да изберете желаната таблица от базата данни. В резултат на това ще получим готова таблица, в която можем да посочим ключовото поле (уникално поле) и полето за представяне (как записът ще бъде отразен в 1C):

Използване на външни източници на данни в 1C 8.3

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



Свързани публикации