Внешние источники данных. Примеры (добавление, изменение, удаление). Реализовано в версии 8.3.5.1068 и позднее

19.04.17

Интеграция - Внешние источники данных

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

Внешние источники данных (добавление, изменение, удаление) на примерах

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

Для того, чтобы запись во внешние источники стала возможной, компания 1С добавила новые свойства таблицам данных и полям внешних источников:

  • Для всей таблицы - свойство ТолькоЧтениеТолькоЧтение = Истина означает, что изменение данных в этой таблице невозможно;
  • Для отдельных полей таблицы - свойства ТолькоЧтениеРазрешитьNull и ЗначениеЗаполнения:
    • ТолькоЧтение = Истина означает, что изменение данных в этом поле невозможно;
    • РазрешитьNull = Истина означает, что в данное поле может быть записано значение NULL;
    • ЗначениеЗаполнения содержит стандартное значение этого поля (если такое существует).

Эти свойства вы (при описании таблиц вручную) или платформа (при создании таблиц конструктором) можете использовать следующим образом.

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

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

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

Соответственно у объектов ВнешнийИсточникДанныхТаблицаНаборЗаписей и ВнешнийИсточникДанныхТаблицаОбъектпоявились новые методы Записать() и Удалить().

Добавление данных

При добавлении данных во внешний источник вы создаёте объект (или набор записей), устанавливаете значения полей и записываете. При этом есть некоторые особенности, о которых полезно знать.

Например, при попытке установить значение поля, у которого ТолькоЧтение = Истина, будет выдана ошибка. А при непосредственной записи в базу данных в выражении INSERT такие поля будут пропущены. В остальные поля записываются те значения, которые вы им присвоили. Поэтому значения Null и значения по умолчанию нужно присваивать полям в явном виде.

Далее представлен небольшой пример. В нём данные добавляются в объектную таблицу  shop_feature, у которой существует два поля:

  • id (РазрешитьNull = Истина);
  • name (РазрешитьNull = Истина);   
 мХарактеристика = ВнешниеИсточникиДанных.ИМ.Таблицы.shop_feature.СоздатьОбъект();
 мХарактеристика.id = Код;
 мХарактеристика.name = Наименование;
 мХарактеристика.Записать();

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

С ключевым полем таблицы внешнего источника вы можете поступать следующим образом. Если ключевое поле доступно для изменения, то тогда вы «вручную» задаёте его значение перед записью. Если изменение ключевого поля запрещено, то платформа самостоятельно получит ключ в INSERT или непосредственно после. Вы можете вмешаться в этот процесс с помощью метода УстановитьСсылкуНового() до физической записи (в обработчике события ПередЗаписью) или непосредственно после физической записи (в обработчике события ПриЗаписи).

Изменение данных

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

мХарактеристика = ВнешниеИсточникиДанных.ИМ.Таблицы.shop_feature.НайтиПоПолю("id",код);
мОбъект = мХарактеристика.ПолучитьОбъект();
мОбъект.name = Наименование;
мОбъект.Записать();

Если же необходимо записать только некоторые поля, вы можете указать их перечень прямо из встроенного языка с помощью методов УстановитьЗаписываемыеПоля() и ПолучитьЗаписываемыеПоля().

Удаление данных

При удалении данных выполняется непосредственное удаление строки из таблицы базы данных. При этом поиск ссылок на удаляемый объект не выполняется. Если такая функциональность нужна, вы можете запрограммировать её самостоятельно в обработчике события ПередУдалением().

мХарактеристика = ВнешниеИсточникиДанных.ИМ.Таблицы.shop_feature.НайтиПоПолю("id",Код);
мОбъект = мХарактеристика.ПолучитьОбъект();
мОбъект.Удалить();

Транзакции

Чтение данных внешних источников, как и ранее, выполняется вне транзакции, а при записи платформа открывает неявную транзакцию. При этом и чтение, и запись вы можете выполнять и в явных транзакциях с помощью методов объектаВнешнийИсточникДанныхМенеджер:

  • НачатьТранзакцию();
  • ЗафиксироватьТранзакцию();
  • ОтменитьТранзакцию().

Блокировки

Для управления блокировками рекомендуется использовать свойство внешнего источникаРежимУправленияБлокировкойДанных:

  • Автоматический;
  • Управляемый;
  • Автоматический и управляемый.

а также свойство таблицы внешнего источника УровеньИзоляцииТранзакций:

Кроме этого, можно самостоятельно задать уровень блокировок в методе НачатьТранзакцию().

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

внешние источники данных программное добавление во внешний источник данных программное изменение внешнего источника данных программное удаление данных из внешнего источника пример удаления из внешнего источника данных пример изменения внешних источников данных

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22460    19    1    

22

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9217    9    8    

10

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    48712    96    163    

86

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 2.0 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Позволит автоматически и наиболее полно ввести данные в программу для начала работы. 

15600 руб.

08.12.2011    81579    128    123    

147

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

24000 руб.

16.11.2018    30006    20    31    

21

Загрузка спецификаций в УНФ из системы Базис-мебельщик

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

7200 руб.

24.06.2021    19133    52    50    

29
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. McCoy77 5 30.06.17 10:39 Сейчас в теме
Спасибо за статью!

Но есть проблема.
Исходные данные: необъектный внешний источник ExtTable, с таблицей ORDERS с ключевым полем (ID).
Задача: создавать записи в ExtTable.
Решение:
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Товары.Ссылка.Дата КАК CREATE_DATE,
	|	ВЫРАЗИТЬ(Товары.Номенклатура.Наименование КАК СТРОКА(100)) КАК DESCRIPTION
	|ИЗ
	|	Документ.РеализацияТоваровУслуг.Товары КАК Товары
	|ГДЕ
	|	Товары.Ссылка = &Ссылка";

	Запрос.УстановитьПараметр("Ссылка", Реализация);
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
	
		Запись = ВнешниеИсточникиДанных.ExtTable.Таблицы.ORDERS.СоздатьМенеджерЗаписи();
		ЗаполнитьЗначенияСвойств(Запись, Выборка);
		Запись.Записать();
		
	КонецЦикла;
Показать


Получаем ошибку:

{Форма.Форма.Форма(58)}: Ошибка при вызове метода контекста (Записать)
Запись.Записать();
по причине:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 23000
Номер ошибки: 544
Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot ins ert explicit val ue for identity column in table 'ORDERS' when IDENTITY_INSERT is set to OFF.


При создании записи в ID ничего не пишу, однако запись не работает. Подскажите, пожалуйста, что неправильно делаю?
2. Denis_CFO 48 30.06.17 11:20 Сейчас в теме
(1) Ему как раз ключевого значения в ключевой колонке и не хватает, видимо.
3. McCoy77 5 30.06.17 13:54 Сейчас в теме
(2) Ключевое значение открыто только на чтение, в скуле стоит Identity = True (соответственно при Insert() значение должно назначаться автоматически). По умолчанию в запись 1С передает 0. Но скулю это явно не нравится, он ругается (см. выше).
4. Kostiki1 05.02.20 14:48 Сейчас в теме
(3) На реквизите с ключевым полем id в 1С поставьте галочку "Только чтение". Тогда 1С не будет заполнять это поле и SQL будет его заполнять сам автоинкрементом.
timurkhann; KirinaAS; user1239344; shevelyov; +4 Ответить
5. sogesti 14.09.21 11:31 Сейчас в теме
А можно ли установит какой-то таймаут для записи объекта ВИД? Например, если на стороне базы что-то происходит и зависла очередь или что-то такое, чтобы наша операция прекратилась?
6. krokchel 24.11.21 13:09 Сейчас в теме
а как полностью очистить таблицу?
7. GSA3D 21.04.22 13:21 Сейчас в теме
Записи = ВнешниеИсточникиДанных.Сайт22.Таблицы.prices.СоздатьНаборЗаписей();
	Для каждого стр из ТаблицаЦен Цикл
		Запись=Записи.Добавить();
		Запись.from_date=стр.Период;
		...
		Запись.price=стр.Цена;
	Конеццикла;
	Записи.Записать();

Такой код перед изменением удаляет вообще все записи из таблицы.
Как сделать чтобы так не происходило?
10. AlexBar 51 25.08.22 00:14 Сейчас в теме
(7)Вам удалось решить этот вопрос?
13. pbahushevichG 17.04.23 02:39 Сейчас в теме
(10) может не актуально - но вообще если Вы хотите что-то добавить в набор записей, те его надо сначала прочитать, а потом уже добавлять - либо добавлять через менеджер записи.
Записи = ВнешниеИсточникиДанных.Сайт22.Таблицы.prices.СоздатьНаборЗаписей();
Записи.Прочитать()
    Для каждого стр из ТаблицаЦен Цикл
    Запись.from_date=стр.Период;
        ...

8. user1040735 31.05.22 09:34 Сейчас в теме
(7) Вы читаете таблицу целиком, и потом перезаписываете ее новыми записями. Для набора записей "Записи" необходимо установить отбор по ключевым для вас полям (например, период, тип цены), прочитать его, добавить нужные записи и записать. Тогда набор записей перезапишет только те строки таблицы, которые удовлетворяют отбору.
9. AlexBar 51 25.08.22 00:11 Сейчас в теме
(8)Где можно посмотреть примеры реализации таких отборов?
12. pavlo 03.04.23 11:49 Сейчас в теме
(9) Как бы отборы не указывать, Прочитать() читает все что есть
11. pavlo 03.04.23 11:12 Сейчас в теме
(9) Подсказал кто то? а то отбор то только чтение и как его заполнить что то не очень то расписано в справке
user991808; +1 Ответить
14. user991808 27.09.23 10:26 Сейчас в теме
(11) При настройке внешнего источника данных необходимо в конфигураторе в таблице внешнего источника указать поле ключей (для необъектных данных) для отбора.
После эти поля будут доступны в элементах отбора. Profit
Прикрепленные файлы:
15. pavlo 29.09.23 14:11 Сейчас в теме
(14) К сожалению не работает это, проверено много раз

Выбрал то о чем вы и толку нет

Набор = ВнешниеИсточникиДанных.TEST.Таблицы.dbo_test.СоздатьНаборЗаписей()
Набор.Отбор пустые и не установить в итоге только читать всё

Запись = ВнешниеИсточникиДанных.TEST.Таблицы.dbo_test.СоздатьМенеджерЗаписи()
Запись.id = Данные.guid_pack;
Запись.guid_pack = Данные.id;
Запись.Прочитать();

тут ставишь отбор, но в итоге читает все и плевал на отборы, а на скрине выбраны поля которые составляю уникальность, id впринципе уникально так как скулем порядковый номер формируется (IDENTITY).
Прикрепленные файлы:
16. user991808 02.10.23 14:31 Сейчас в теме
(15) Коллега. Все работает. У нас очень много источников данных и SQL не самый сложный в настройке.
Если в таблице есть порядковый номер (IDENTITY) - то это уже объектные данные.
Без этого свойства данные в таблице аналогичны регистру сведений, где поле ключа и будут вашими измерениями.
17. ПодводныйТ 45 04.03.24 17:27 Сейчас в теме
(16) а если есть Таблица - необъектные данные без поля ключа, то как тогда установить отбор по набору записей? Если я добавляю поле ключа, например поле "period", то тогда не открывает эту таблицу с ошибкой, что поле period неуникально (и это на самом деле так - есть несколько записей в таблице с одинаковым периодом).
Оставьте свое сообщение