Зовнішні джерела даних 1С 8.3 Excel. Зовнішні джерела даних

Працювати з ними у списках у режимі 1С Підприємство.

Однак у роботі часто складається ситуація, коли частина даних зберігається десь ще.

  • Інтернет магазин (зберігає дані зазвичай у зовнішній MySQL/SQL базі)
  • Інша основа.

Для роботи з даними, які зберігаються в інших базах даних, потрібно розробляти спеціальні механізми.

У версії 1С 8.2.14 з'явився новий під назвою Зовнішні джерела даних 1С, які полегшують роботу програміста, так як:

  • тепер спеціальні механізми отримання даних створювати не потрібно
  • до таких даних можна звертатися звичайним
  • такі дані можна переглядати у списках 1С.
    • Зовнішнє джерело даних 1С – зовнішня база SQL

      Допустимо, у нас є база SQL, в якій зберігаються потрібні нам дані. Спробуємо прочитати дані із неї за допомогою механізму Зовнішнє джерело даних 1С.

      Додамо зовнішнє джерело даних 1С. Потрібно зайти до конфігуратора, зовнішні джерела даних знаходяться у вікні конфігурації, в самому низу дерева.

      1. Підключення

      Додамо нове зовнішнє джерело даних 1С, назвемо довільно.

      База даних складається із таблиць. Нам потрібно додати їх усередині доданого зовнішнього джерела даних. Натисніть на ньому правою кнопкою миші та виберіть Додати таблицю.

      Вперше він запропонує вказати рядок підключення. Її можна ввести вручну, або сформувати, навіщо потрібно натиснути кнопку «…».

      Як драйвер у нашому конкретному випадку виберемо «SQL Server»

      Заповнимо основні параметри підключення до SQL. Ім'я сервера можна вписати або вибрати зі списку.

      1С здійснить з'єднання з SQL і запропонує вибрати зі списку конкретну базу даних.

      Після цього 1С відобразить список таблиць у цій базі даних та їх колонок. Потрібно вибрати галочками необхідні таблиці.

      Таблиці та колонки будуть додані. Назви будуть такі, як визначено у віддаленій базі. У 1С Ви можете перейменувати їх (у властивостях).

      Ось приклад доданої таблиці:

      Ось приклад доданої колонки:

      Щоб платформа 1С працювала із зовнішньою таблицею також, як вона робить із довідниками 1С, у таблиці можна вказати додаткові параметри:

      • В якості Поле ключа – вказати одну з колонок, яка забезпечуватиме унікальну ідентифікацію рядка; якщо унікальність забезпечують кілька рядків – то цей спосіб не працює (аналог поля Код)
      • В якості Поле уявлення – вказати одну з колонок, яка забезпечуватиме коротке уявлення рядка (аналог поля Найменування)
      • У властивості Тип даних таблиці – вказати Об'єктні дані.

      2. Перегляд

      З'єднання з віддаленою базою не здійснюється автоматично. Щоб підключитись, потрібно вибрати типове меню .

      У гілці Стандартні розташована спеціальна команда Управління зовнішніми джерелами даних, яка дозволяє вказувати параметри з'єднання (свої для режиму 1С Підприємства) та проводити підключення.

      Спочатку потрібно зазначити параметри з'єднання з базою.

      Коли ви робили налаштування в конфігураторі, він в результаті показав рядок з'єднання. Ви можете повторно побачити її, ще раз натиснувши Додати таблицю в конфігураторі.

      Скопіюйте рядок з'єднання та вкажіть його у режимі 1С Підприємство.

      Після цього необхідно здійснити власне підключення.

      Після того, як здійснено підключення, можна працювати зі списками.

      3. Використання у мові 1С

      Підключення можна робити і з коду програми мовою 1С.

      Параметри підключення вказуються так:
      ПараметриЗ'єднання = ЗовнішніДжерелаДаних.Ім'яДжерелаКонфігураторі.Отримати ЗагальніПараметриЗ'єднання();

      Параметри З'єднання. Аутентифікація Стандартна = Істина;
      Параметри З'єднання. Ім'я Користувача = «sa»;
      ПараметриСполуки.Пароль = «пароль»;
      Параметри З'єднання.Рядок З'єднання = «рядок з'єднання з конфігуратора»;
      Параметри З'єднання. СУБД = «MSSQLServer»;

      ЗовнішніДжерелаДаних.Ім'яДжерелаКонфігураторе.ВстановитиЗагальніПараметриЗ'єднання(ПараметриЗ'єднання);
      ЗовнішніДжерелаДаних.Ім'яДжерелаКонфігураторі.ВстановитиПараметриЗ'єднанняКористувача(Ім'яКористувача(), Параметри);
      ЗовнішніДжерелаДаних.Ім'яДжерелаКонфігураторе.ВстановитиПараметриЗ'єднанняСеансу(Параметри);
      ЗовнішніДжерелаДаних.Ім'яДжерелаКонфігураторе.ВстановитиСполука();

      Запитати дані з бази даних можна за допомогою звичайного. Приклад тексту запиту для зовнішнього джерела НашЗовнішнійДжерело та таблиці ТаблицяЗовнішньогоДжерела:

      ВИБРАТИ
      ТаблицяЗовнішньогоДжерела.Ім'яПоля
      З
      ЗовнішнійДжерелоДаних.НашЗовнішнійДжерело.Таблиця.ТаблицяЗовнішньогоДжерела»

      Зовнішнє джерело даних 1С - робота з файлом Excel

      Спробуємо інший варіант – роботу із файлом Excel через зовнішнє джерело даних 1С.

      Створимо найпростіший файл Excel.

      Додамо зовнішнє джерело, назвемо довільно Файл Excel. До нього додамо таблицю «Лист1$». Як неважко помітити – це ім'я аркуша Excel з додаванням символу «$».

      Як і у випадку із SQL, додамо колонки. Їх можна додати вручну. Важливо стежити за відповідністю типів колонок, що додаються, інакше пізніше можна отримати помилку виду «Невідповідність типів даних».

      Для колонки потрібно вказувати ім'я 1С та ім'я в джерелі даних.

      Для Excel існує особливість (помилка виду «Занадто мало параметрів. Потрібно 3»):

      • Якщо у першому рядку таблиці Excel розташовані назви колонок, потрібно вказувати просто ім'я цієї колонки, наприклад «Код».
      • Інакше потрібно вказувати повне ім'я з ім'ям таблиці "Лист1$.Код", але в параметрах додати "HDR = NO;".

      Параметри з'єднання для файлу Excel виглядають так:

      • Файли XLSX (версія Office 2007 та вище)
        Driver=(Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\ФайлExcel.xlsx;
      • Файли XLS (раніше)
        Driver=(Microsoft Excel Driver (*.xls)); DriverID=790; DBQ=D:\ФайлExcel.xls;
        Ім'я та шлях до файлу потрібно вказати власні.

У платформі, починаючи з версії 8.3.5, реалізована можливість запису даних у таблиці зовнішніх джерел даних. У статті розглянуто цю функціональність, що розширює існуючі можливості щодо інтеграції конфігурації зі сторонніми системами.

Застосовність

Стаття розглядає платформу 1C 8.3.5. Матеріал є актуальним і для поточних релізів платформи.

Запис у зовнішні джерела даних у «1С:Підприємство 8»

У платформі 8.2.14 у дерево метаданих було додано новий об'єкт – зовнішні джерела даних. Призначення цього механізму – отримання даних із зовнішніх баз стосовно 1С.

З виходами нових релізів платформи зовнішні джерела даних розвивалися, наприклад, стало можливим поміщення в часові таблиці, виконання з'єднань зі звичайними таблицями.

У статті ми розглянемо, які інструменти мають розробник для здійснення запису в зовнішні джерела даних.

Усі дії виконувались на СКБД Microsoft SQL Server 2008 R2.

У платформі 8.3.4 було реалізовано можливість використання функцій, описаних у зовнішніх джерелах даних.

Ця можливість дозволяє запускати збережені процедури на боці SQL Server, а за допомогою їх звертатися до даних зовнішніх джерел, у тому числі і на запис.

Розберемо приклад. Створимо за допомогою SQL Management Studio нову базу даних під назвою kurzy_test. Усі подальші експерименти виконуватимуться у ньому.

У цій базі створимо таблицю nomenklatura, для цього напишемо скрипт такого змісту:

USE [kurius_test]
GO
CREATE TABLE [dbo]. [nomenklatura] (
[ id ] [ int ] NOT NULL ,
[ description ] [ nvarchar ](150 ) NOT NULL ,
[ price ] [ numeric ](15 , 2 ) NULL ,
CONSTRAINT [PK_id] PRIMARY KEY ([id])
GO

В результаті виконання буде створено таблицю наступної структури:

Тепер нам потрібно створити дві процедури, що зберігаються, за допомогою яких і буде виконуватися модифікація даних.

Першу процедуру назвемо insert_nomenklatura. Вона буде призначена для додавання нового рядка до таблиці. Скрипт для її створення виглядатиме так:

USE [kurius_test]
GO
CREATE PROCEDURE insert_nomenklatura
@id int ,
@description nvarchar (150 ),
@price numeric (15 , 2 )
AS
BEGIN
INSERT INTO [kurius_test] .dbo. [nomenklatura] ([id], [description], [price])
VALUES (@id, @description, @price)
END
GO

Друга процедура з ім'ям update_nomenklatura буде виконувати оновлення вже існуючого в таблиці запису. Щоб її створити, було запущено такий скрипт:

В Оглядачі об'єктів створена таблиця і дві процедури, що зберігаються, виглядають наступним чином:

Всі підготовчі дії на боці Microsoft SQL Server ми виконали, тепер переходимо до конфігуратора “1С:Підприємство 8”.

Створюємо нове зовнішнє джерело даних з ім'ям Nomenklatura. Під час створення нової таблиці в цьому джерелі даних вказуємо наступні параметри підключення до джерела даних:

Рядок з'єднання вкажемо наступне:

Driver = (SQL Server); Server = (local); Database = kurzy_test; User Id = sa; Password =;

За наявності пароля користувача sa його необхідно вказати в параметрі Password рядка з'єднання.

Якщо всі параметри підключення вказані коректно, при натисканні на кнопку ОК відкриється вікно, що містить таблиці, доступні в джерелі даних:

Відзначаємо галочками поля таблиці, що цікавлять нас. При натисканні кнопки Готовоу зовнішньому джерелі даних Nomenklatura буде створено таблицю dbo_nomenklatura:

Тепер перемикаємось на закладку “Функції” нашого джерела даних.

За допомогою аналогічного майстра виконуємо додавання двох процедур, що зберігаються:

Отримуємо наступний зовнішній вигляд закладки "Функції":

Тепер запрограмуємо інтерфейс користувача для роботи із зовнішнім джерелом даних.

У формі списку на командній панелі розташуємо кнопку "Додати" з наступним обробником:

&На Клієнті
Процедура Додати ()
Оповіщення = Новий Опис Оповіщення("Відкрити ТаблицюЗавершення", Цей об'єкт);
ВідкритиФорму (
"ЗовнішнійДжерелоДаних.Nomenklatura.Таблиця.dbo_nomenklatura.ФормаОб'єкта"
, , , , , ,
Оповіщення РежимВідкриттяВікнаФорми.БлокуватиВесьІнтерфейс);
КінецьПроцедури

&На Клієнті
Процедура Зберегти (Команда)
ЗберегтиНа Сервері();
КінецьПроцедури &На Сервері
Процедура ЗберегтиНа Сервері()
Якщо Об'єкт.Посилання.Порожня() Тоді
ЗовнішніджерелаДаних.Nomenklatura.dbo_insert_nomenklatura
Інакше
ЗовнішніДжерелаДаних.Nomenklatura.dbo_update_nomenklatura
(Об'єкт.id, Об'єкт.description, Об'єкт.price);
КінецьЯкщо ;
КінецьПроцедури

У режимі підприємства форма списку виглядає так:

Форма об'єкта представлена ​​нижче:

Щоб збільшити, натисніть на зображення.

Таким чином, за допомогою процедур, що зберігаються, ми реалізували запис у зовнішні джерела даних.

У платформі 8.3.5 з'явилася нова можливість – запис у зовнішні джерела даних безпосередньо, минаючи розібраний вище механізм процедур, що зберігаються.

Дані можна редагувати як програмно, і інтерактивно. І для нашого прикладу вдаватися до конфігурування не доведеться.

У командних панелях та в меню "Ще" можна побачити стандартні кнопки, такі як "Створити", "Скопіювати", "Змінити" і т.д.

Щоб збільшити, натисніть на зображення.

А у формі об'єкта з'явилися кнопки “Записати” та “Записати та закрити”:

Як видно, тепер робота із зовнішніми джерелами схожа на роботу із довідниками, документами тощо.

Розглянемо, які зміни були зроблені на рівні метаданих, щоб уможливити запис у зовнішні джерела даних.

У таблиці даних додано нову властивість ТількиЧитання(Тип - Булев).

Якщо ця властивість встановлена ​​в Істина, запис даних у цю таблицю засобами платформи неможливий.

Поле таблиці даних має тепер властивості:

  • ТількиЧитання(тип – булево) – чи можлива зміна даних у цьому полі;
  • ДозволитиNull(тип – булево) – чи можна в даному полі зберігати значення NULL.

Властивість Тільки читанняслід встановлювати значення Істинадля полів бази даних з автоматичною зміною, автоматично формуються ключові поля, обчислюваних полів і т.д.

Додавати, змінювати та видаляти дані у зовнішніх джерелах можна за допомогою вбудованої мови.

Для цього біля об'єктів ЗовнішнійДжерелоДанихТаблицяНабірЗаписіві ЗовнішнійДжерелоДанихТаблицяОб'єктбули реалізовані нові методи Записати()і Видалити().

Розглянемо приклад програмного додавання нового запису зовнішнього джерела даних, розглянутого вище.

&На Клієнті
Процедура СтворитиПрограмно(Команда)
СтворитиПрограмноНа Сервері();
КінецьПроцедури &На Сервері

Процедура СтворитиПрограмноНа Сервері()
Об'єкт, що записується=
ЗовнішніДжерелаДаних.Nomenklatura.Таблиці.dbo_nomenklatura.СтворитиОб'єкт();
ЗаписуванийОб'єкт.id= 5 ;
Об'єкт, що записується.description= "Шафа";
Об'єкт, що записується.price= 5000 ;
Об'єкт, що записується.();
КінецьПроцедури

У модулі об'єкта таблиці зовнішнього джерела даних тепер можна задати обробники подій, що виникають під час запису, такі як ПередЗаписом(), Записи()і т.д.:

У цій статті було розглянуто два варіанти запису даних у зовнішні джерела даних – за допомогою збережених процедур та за допомогою нових механізмів платформи 8.3.5.

Таким чином, у платформі тепер реалізовано механізми для повноцінної інтеграції із зовнішніми програмами.

У редакції 8.3.6 описаний вище функціонал був розширений за допомогою нових спеціальних методів Отримати Змінювані Поля () та Встановити Змінювані Полі (). За допомогою них надано можливість виконувати операцію запису в поля таблиці ВІД, які позначені в конфігураторі як доступні тільки для читання. Завдяки цьому стало можливим реалізувати такий сценарій, при якому запис в окремі поля таблиці ВІД можливий тільки в тих випадках, коли це необхідно відповідно до бізнес-логіки програми.

У редакції 8.3.7 був доопрацьований механізм, який визначає які поля таблиць ВІД можуть містити значення NULL. До цього моменту всі таблиці ВИГ могли приймати це значення. Така зміна пов'язана зі збільшенням швидкості сортування в динамічних списках цих полів.

У редакції 8.3.8 нарешті стало можливим визначення того факту, що зовнішнє джерело даних перебуває у стані транзакції. Ця функціональність представлена ​​новим методом ЗовнішнійДжерелоДанихМенеджер.

Наприкінці зазначимо, що з зовнішніх джерел даних, як було показано вище, описуються таблиці даних із класичної реляційної моделі. Платформа ж використовує іншу парадигму роботи з даними, пропонуючи розробнику певний набір типів прикладних об'єктів (довідники, документи, регістри тощо.). Саме тому система під час роботи з таблицями зовнішніх джерел даних не підтримує більшу частину функціональності, яка властива її “рідним” об'єктам. Тому рекомендується утриматися від розробки якоїсь бізнес-логіки, з урахуванням використання таблиць ВІД, якщо це не пов'язано із завданнями інтеграції з існуючими системами. Або, говорячи просто, потрібно намагатися уникати зберігати дані, які активно використовуються у вашому додатку, в якійсь іншій таблиці зовнішньої системи, якщо вони цією системою не використовуються.

У наступній статті ми розглянемо логічне продовження використання технології зовнішніх джерел даних у системі «1С:Підприємство».

Реліз 8.2.14.533 - нарешті більш-менш стабільний варіант 14-го релізу платформи. Нарешті випала нагода випробувати у справі чудову можливість - "зовнішні джерела даних".

Чому ця можливість викликає такий інтерес? Будь-яка людина, яка програмувала в 1С при цьому досить непогано знайома з SQL і хоча б загалом знайома з архітектурою і принципами розробки інших технологічних платформ для бізнес додатків з твердою впевненістю скаже вам - що їй подобається найбільше в 1С. Звичайно конструктор запитів - найзручніший і найпродуманіший механізм написання запитів для отримання даних з реляційних структур, який я особисто коли-небудь зустрічав. А тепер 1С нам надали таку чудову нагоду використовувати його не тільки з 1С, але й з будь-якими іншими таблицями. Ось тільки в цю "бочку меду" насипано купу "ложок дьогтю". Про все по порядку:

1) Налаштування та використання - без "танців з бубном" не вийде

A) Додаєте зовнішнє джерело даних - начебто нічого складного
б) ставте галочку "Вибрати зі списку" - обов'язково - це потрібно щоб перевірити працездатність вже на початку і позбавить зайвих проблем
в)
(IMG: http://pics.livejournal.com/comol/pic/0000cr1r.png)
- обов'язково натискаємо "..." - підключення саме ODBC. Чи не OLEDB як ми всі звикли, а на рівень нижче

А ось тут будьте ДУЖЕ УВАЖНІ.

Це драйвер ODBC - у разі використання клієнт-серверної версії він має обов'язково бути на сервері. Якщо ви ведете розробку на одній системі, а робоча версія на іншій (як це зазвичай буває) переконайтеся, що на вас не чекають сюрпризи. Дивна рекомендація, але вибирайте найстаріший або найзагальніший драйвер у випадку якщо вас не особливо турбує швидкість і за межі можливостей стандарту SQL92 ви виходити не збираєтеся. Це забезпечить вам найкращу сумісність. Наприклад для SQL Server 2008 найкращим драйвером буде SQL Server Native Client 11, але рекомендую вибирати просто SQL Server, інакше цей самий native client доведеться встановлювати або на сервер, або на всі клієнтські машини (у разі використання файлової версії), а виграшу особливого для простих завдань він не дасть.

Д) Стандартні діалоги вибору Сервера

Ж) Вибираєте таблицю і реквізити ... чудова можливість - її можна відразу ж перейменувати так як вам подобається (і реквізити теж), при цьому у властивостях у вас будуть відображатися назви полів джерела даних

З) А тепер запускаєте, відкриваєте конструктор запитів – вибираєте тупо всі записи з таблиці та ОПА – помилка. Що робити? Якщо у вас керований інтерфейс – заглянути в меню сервіс, а якщо звичайний...
Я особисто використав такий код:

Параметри = ЗовнішніДжерелаДаних.DAX.ОтриматиЗагальніПараметриЗ'єднання();
Параметри. Аутентифікація Стандартна = Істина;
Параметри.Ім'я Користувача = "sa";
Параметри.Пароль = "pas";
Параметри.РядокЗ'єднання = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Параметри.СУБД = "MSSQLServer";

ЗовнішніДжерелаДаних.DAX.УстановитиЗагальніПараметриЗ'єднання(Параметри);
ЗовнішніДжерелаДаних.DAX.УстановитиПараметриЗ'єднанняКористувача(Ім'яКористувача(), Параметри);
ЗовнішніДжерелаДаних.DAX.ВстановитиПараметриЗ'єднанняСеансу(Параметри);

ЗовнішніджерелаДаних.DAX.УстановитиСполука();

Може, якихось шматків і не потрібно, але це працює. Виконати код потрібно ОДИН РАЗ. Після чого буде нормально підключатися ... містика звичайно - навіщо це потрібно було не зрозуміло ...

2) Джерела даних лише для читання
Так, чудес не буває... але іноді так хочеться.

3) НЕ МОЖНА ЇХ КОРИСТУВАТИ РАЗОМ З ВНУТРІШНІМИ ДЖЕРЕЛАМИ ДАНИХ
Мене особисто цей факт убив наповал

Як же так .... то чого так чекали і вже представляли і облизувалися як ми зараз в одному запиті з'єднаємо наші дані з 1С-кой згорнемо - згрупуємо, вставимо у звіт, а не тут було...

Але природно досвідчених людей це не зупиняє... яка думка спала на думку? Правильно – тимчасові таблиці:

4) НЕ МОЖНА ЇХ ВИКОРИСТОВУВАТИ РАЗОМ З ТИМЧАСОВИМИ ТАБЛИЦЯМИ

А ось це вже не схоже на технологічні труднощі, а дуже схоже на те, що нам хочуть "щоб життя раєм не здавалося" зробити (IMG:).

5) Можна використовувати лише у з'єднаннях СКД

Для тих, хто не знає - це в СКД на вкладці "Зв'язки наборів даних". Чи часто ви ними користуєтеся? Зручно? Мабуть, так нас хочуть примусити до використання їх частіше. Ось тільки там є колонка "Умова зв'язку" та "Параметр зв'язку". У жодній типовій конфігурації не знайшов прикладу їх використання, в документації і в Хрустальової теж якось не прозоро. Хтось зможе мені пояснити, як працює "умова зв'язку". Якщо там написати РеквізитДжерела = РевізитПриймача це не працює. Звичайно, умову можна записати в полі "Вираз" - в більшості випадків цього вистачає... ось тільки якось не дуже просто виходить.

Разом раніше це завдання вирішувалося десь так:

Функція ІніціалізуватиДжерелоДаних()

ДатаНач = КомпонувальникНалаштувань.Налаштування.ПараметриДаних.Елементи.Значення;
ДатаКон = КомпонувальникНалаштувань.Налаштування.ПараметриДаних.Елементи.Значення;
Якщо ДатаКон > "20100101" Тоді
ДатаКон = "20100101";
КінецьЯкщо;

КЧ = Новий КваліфікаториЧисла (15,2);
КС = Новий Кваліфікатор Рядки(255);

МасивЧисло = Новий Масив();
МасивЧисло.Додати(Тип("Число"));

МасивРядок = Новий Масив();
МасивРядок.Додати(Тип("Рядок"));

МасивДата = Новий Масив();
МасивДата.Додати(Тип("Дата"));

//У таблицю заповнюватимемо бухгалтерську собівартість
Тип Число = Новий Опис Типів (Масив Число, КЧ);
ТипРядок = Новий ОписТипів(МасивРядок,КС);
ТипДата = Новий ОписТипів(МасивДата);

//таблиця для завантаження даних із SQL
ТЗ = Новий ТаблицяЗначень();
ТЗ.Колонки.Додати("НоменклатураКод", ТипРядку);
ТЗ.Колонки.Додати("Qnty", ТипЧисло);
ТЗ.Колонки.Додати("Період", ТипДата);

ТЗ.Індекси.Додати("Період");

//Підключаємося до 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 Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=Reports";
Connection = Новий COMОб'єкт ("ADODB.Connection");
Command = Новий COMОб'єкт ("ADODB.Command");
RecordSet = Новий COMОб'єкт ("ADODB.RecordSet");
Дата = "";
Спроба
Connection.Open (СокрЛП (Рядок Підключення));
Command.ActiveConnection = Connection;
Command.CommandText = "Select * від PH where period >= "" + Рядок(Формат(ДатаНач, "ДФ=ггггММдд")) + "" and period RecordSet = Command.Execute();
RecordSet.MoveFirst();
Виняток
Повернення ТЗ;
КінецьСпроби;

Поки RecordSet.EOF = Брехня Цикл
Рядок = ТЗ.Додати();
Рядок.НоменклатураКод = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Рядок.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Рядок.Період = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
КінецьЦикл;

Запит = Новий Запит();
ВрТаблиця = Новий Менеджер Тимчасових Таблиць ();
Запит.ВстановитиПараметр("врТаблицяДаних", ТЗ);
Запит.ВстановитиПараметр("ДатаНач", ДатаНач);
Запит.ВстановитиПараметр("ДатаКон", ДатаКон);
Запит.Текст = "ВИБРАТИ
| врТаблицяДаних.НоменклатураКод,
| врТаблицяДаних.Qnty,
| врТаблицяДаних.Період
|ПОМІСТИТИ ТаблицяДаних

| &врТаблицяДаних ЯК врТаблицяДаних
|ДЕ
| врТаблицяДаних.Період >= &ДатаНач
| І в ТаблицяДаних.Період Запит.Виконати();
ТЗ = невизначено;

Запит = Новий Запит;
Запрос.МенеджерТимчасовихТаблиць = ВрТаблиця;
Запрос.Текст = "Тут запит за участю вірменної таблиці";

Результат = Запит.Виконати();
Повернення Результат;

КінецьФункції

Зовнішній набір = Ініціалізувати Джерело Даних ();
НабірДаних = Новий Структура();
НабірДаних.Вставити("ТаблицяSQL", Зовнішнійнабір);
Типові Звіти.

Власне рядків коду небагато і вони досить стандартні... при цьому можна користуватися повним функціоналом конструктора запитів, а в СКД віддати тільки функцію КОМПАНІВКИ ДАНИХ

Але на вигляд звичайно не так красиво ... та й вивантаження в таблицю значень щоразу потрібно код писати і перевіряти чи не помилився в назві реквізитів ... а то що нам дали в 1С виглядає якось половинчасто. Я ще не визначився, чим зручніше користуватися. Ви вирішуйте і пишіть про ваші рішення, і що вас до них підштовхнуло.

[необхідно зареєструватися для перегляду посилання]

У версії платформи 8.3.5.1068 (і пізніше) з'явилася можливість додавання, зміни та видалення даних у зовнішніх джерелах програмними засобами 1С. Приклади даної можливості представлені у цій статті.

Для того, щоб запис у зовнішні джерела став можливим, компанія 1С додала нові властивості таблицям даних та полям зовнішніх джерел:

  • Для всієї таблиці – властивість ТількиЧитання. ТількиЧитання = Істинаозначає, що зміна даних у цій таблиці неможлива;
  • Для окремих полів таблиці – властивості ТількиЧитання, ДозволитиNullі ЗначенняЗаповнення:
    • ТількиЧитання = Істинаозначає, що зміна даних у цьому полі неможлива;
    • ДозволитиNull = Істинаозначає, що це поле може бути записано значення NULL;
    • ЗначенняЗаповненнямістить стандартне значення цього поля (якщо таке існує).

Ці властивості ви (при описі таблиць вручну) або платформа (при створенні таблиць конструктором) можете використовувати в такий спосіб.

  • ТількиЧитання = Істинавстановлювати, наприклад, для уявлень (view), таблиць, одержуваних з урахуванням висловлювання (результат функції) тощо. Дані в таблицях змінювати не можна;
  • ТількиЧитання = Істинавказувати для полів, що встановлюються автоматично ( AUTOINCREMENT), обчислюваних полів та подібних. Дані у таких полях змінювати не можна;
  • ДозволитиNull = Істинавстановлювати для всіх полів, крім ключових, та тих, які у зовнішньому джерелі описані як NOT NULL;
  • ЗначенняЗаповненняполя встановлювати у разі, коли у зовнішньому джерелі вказано стандартне значення цього поля (значення DEFAULT).

Додавати, змінювати та видаляти дані у зовнішніх джерелах можна за допомогою вбудованої мови або інтерактивно. У вбудованій мові при цьому використовуються такі методи менеджера таблиці:

  • СтворитиНабірЗаписів()- для необ'єктних таблиць;
  • Новий метод Створити Об'єкт()- Для об'єктних таблиць.

Відповідно у об'єктів ЗовнішнійДжерелоДанихТаблицяНабірЗаписіві ЗовнішнійДжерелоДанихТаблицяОб'єктз'явилися нові методи Записати()і Видалити().

Додавання даних

При додаванні даних до зовнішнього джерела ви створюєте об'єкт (або набір записів), встановлюєте значення полів та записуєте. При цьому є деякі особливості, які корисно знати.

Наприклад, при спробі встановити значення поля, у якого ТількиЧитання = Істина, буде видано помилку. А при безпосередньому записі до бази даних у виразі INSERTтакі поля будуть пропущені. В інші поля записуються ті значення, які ви їм надали. Тому значення Nullі значення за замовчуванням потрібно надавати полям у явному вигляді.

  • id(ДозволитиNull = Істина);
  • name(ДозволитиNull = Істина);
мХарактеристика = ЗовнішніДжерелаДаних.ІМ.Таблиці.shop_feature.СтворитиОб'єкт(); мХарактеристика.id = Код; мХарактеристика.name = Найменування; мХарактеристика.Записати();

Виконання оператора Записати()призведе до того, що спочатку буде викликаний обробник події ПередЗаписом, потім виконано фізичний запис до таблиці зовнішнього джерела ( INSERT), потім буде викликаний обробник події ПріЗаписи.

З ключовим полем таблиці зовнішнього джерела ви можете чинити так. Якщо ключове поле доступне для зміни, тоді ви вручну задаєте його значення перед записом. Якщо зміна ключового поля заборонена, то платформа самостійно отримає ключ у INSERTчи безпосередньо після. Ви можете втрутитися в цей процес за допомогою методу ВстановитиПосиланняНового()до фізичного запису (в обробнику події ПередЗаписом) або безпосередньо після фізичного запису (в обробнику події ПріЗаписи).

Зміна даних

При зміні даних оновлюються значення всіх полів таблиці, які мають ТількиЧитання = Брехня.

МХарактеристика = Зовнішні Джерела Даних. ІМ. Таблиці. shop_feature. мОбъект = мХарактеристика.ОтриматиОбъект(); мОбъект.name = Найменування; мОб'єкт.Записати();

Якщо необхідно записати лише деякі поля, ви можете вказати їх перелік прямо з вбудованої мови за допомогою методів ВстановитиЗаписуваніПоля()і ОтриматиЗаписуваніПоля().

Видалення даних

У разі видалення даних виконується безпосереднє видалення рядка з таблиці бази даних. При цьому пошук посилань на об'єкт, що видаляється, не виконується. Якщо така функціональність потрібна, ви можете запрограмувати її самостійно в обробнику події ПередВидаленням().

МХарактеристика = Зовнішні Джерела Даних. ІМ. Таблиці. shop_feature. мОбъект = мХарактеристика.ОтриматиОбъект(); мОбъект.Выдалить();

Транзакції

Читання зовнішніх джерел, як і раніше, виконується поза транзакцією, а при записі платформа відкриває неявну транзакцію. При цьому і читання, і запис можна виконувати і в явних транзакціях за допомогою методів об'єкта ЗовнішнійДжерелоДанихМенеджер:

  • Розпочати транзакцію();
  • ЗафіксуватиТранзакцію();
  • СкасуватиТранзакцію().

Блокування

  • Автоматичний;
  • Керований;
  • Автоматичний та керований.

а також властивість таблиці зовнішнього джерела РівеньІзоляціїТранзакцій:

Крім цього, можна самостійно задати рівень блокувань у методі Розпочати транзакцію().

Доповнив типову статтю прикладами) Буде більше часу – додам більше прикладів.