1с 8 добавить данные

Обновлено: 05.07.2024

Внешние источники данных, появившиеся в 8.2.14 был отличным шагом навстречу интеграции с другими приложениями. Сейчас на дворе 8.3 и таблицы внешних источников данных:

Почти не имеют ограничений в запросах (помещение во временные таблицы, соединения с 1С таблицами);
Могут стать объектными данными (ссылку на внешнюю таблицу можно указывать как тип в реквизитах внешних таблиц и располагать на форме).
Однако, как и 3 года назад, изменять данные во внешних источниках мы могли только через ADO

Но, в 8.3.4 мы получаем Функции внешних источников данных

Внешние источники данных, появившиеся в 8.2.14 был отличным шагом навстречу интеграции с другими приложениями. Сейчас на дворе 8.3 и таблицы внешних источников данных:

  1. Почти не имеют ограничений в запросах (помещение во временные таблицы, соединения с 1С таблицами);
  2. Могут стать объектными данными (ссылку на внешнюю таблицу можно указывать как тип в реквизитах внешних таблиц и располагать на форме).
Однако, как и 3 года назад, изменять данные во внешних источниках мы могли только через ADO хотя и сушествуют такие соблазнительные коллекции как ВнешнийИсточникДанныхТаблицаНаборЗаписей и ВнешнийИсточникДанныхТаблицаЗапись Но, в 8.3.4 мы получаем Функции внешних источников данных

При работе с внешними источниками данных реализована возможность использования функций, описанных во внешних источниках данных. Функция может возвращать одно значение, таблицу или не возвращать значений вовсе. Реализована возможность указывать вид таблицы внешнего источника данных - таблица или выражение (для описания функций, возвращающих таблицу).
Для обращения к функциям внешнего источника данных из языка запросов используется один из синтаксисов:
ВнешнийИсточникДанных..Таблица.(. );
ВнешнийИсточникДанных..(. );
Обращение к функциям с помощью объектной модели возможно с помощью менеджера внешнего источника данных или менеджера таблицы внешнего источника данных.


В функции мы можем передать параметры (в том числе ссылки из объектных таблиц внешних источников данных) ну и как водится вернуть 1 значение. Все идет по плану до тех пор вы не решаетесь поместить в код функции DML (Data Manipulation Language) операторы (INSERT, UPDATE, DELETE) В MSSQL это по понятным причинам запрещено, исхитрится через динамический SQL тоже не получится, поскольку он тоже запрещен в функциях, до линковки сервера самого на себя я не дошел поскольку переключился на ORACLE В ORACLE DML разрешен в функциях если функция будет выполнятся в автономной транзакции: Теперь мы по настоящему, штатными средствами изменяем данные во внешних источниках данных в том числе и на Linux!

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Вот так начали за здравие а пьем за упокой. Все на оракл. или всех на оракл. как правильно послать то туда?
Герман а чёто ты на оракл переметнулся? И когда в интеграторе кофеварка появится? :)


Дак тяжелые времена, кризис. Кофеварка в работе

(2) Что я вижу. PL/SQL :))). Мы не одиноки во вселенной? :). Скоро и EI будет под Oracle такими темпами, да? :).

(0) Герман, а в MySQL и postgre базы что-то пробовали записать? Во многих случаях они могут быть вполне достаточны.. Для создания/обновления записей во внешнем источнике MSSQL можно использовать хранимые процедуры на стороне сервера. На mssql 2008 все получилось.

(0)
как то все по хакерски в 1С получается.
Не знаешь почему пошли по такому пути - создали очередной костыль.

Могли бы просто "цивилизованно" интегрировать платформу 1С с той же ADO:
1. например могли бы допилить СКД для работы с другими источниками данных.
Это как бы предпологалось при ее появлении, но все осталось как было:
Имеется единственный источник данных в СКД - это локальная база 1С.

2. могли бы сделать встроенную функцию для преобразования объекта
ADODB.RecordSet в таблицу значений.

и было бы тогда счастье!
;)))

(6)
ЗЫ
А под 8.3 эти внешние источники данных научили работать через OLEDB
или все используется только ODBC, который вроде считается устаревшим? (7) Rothschild, эээ а разве OLEDB это не "примочка сверху" над ODBC, а ADO соответственно над OLEDB.

(9) comol,
насколько я знаю (могу конечно ошибаться ;) ):

ODBC - одна технология доступа к данным, хронологически более ранняя.
OLEDB - другая технология, более поздняя.

а ADO - это програмный интерфейс (если угодно - "примочка" для приложений),
которая может работать с источниками данных, используя обе технологии.

Сама 1С-ка с СУДБ в серверных базах, думаю работает именно через ADO.
А в файловом режиме - используется какой-то свойский самопал.

(0) Герман, ты же уже в курсе, что 1С облегчил тебе работу, да ? :) (16) Работает. И вполне. Только надо всем полям присваивать значения, и есть косяк (((, после записи не выдает ИД созданного объекта (((.

Господа а подскажите, в tSQL не силен (говорю сразу =) ),
есть две функции
MyITVFunc возвращает таблицу (в параметре сколько строк вывести (Select TOP (@Parameters). )

MyITVFunc_2 другая возвращает просто число ( return 1111)


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

собственно вопрос к функции которая возвращает таблицу мы доступ не имеем.

Да, еще я столкнулся с тем что при возвращении например ID типа Number какого-либо объекта, приходится в Oracle преобразовывать его в строку и уже на стороне 1с обратно. Хотя может это зависит от драйвера ODBC.

С функциями всё понятно и без мануала (в MSSQL это хранимая процедура), а как работать с Таблицами вида Выражение (в MSSQL это функция, возращающая табличное значение) у которой так же как и у функции задано Выражение в источнике данных с параметром, например dbo.ft_OrgAddress(&1) ?

Есть таблица dbo_t_Organization, Вид таблицы=Таблица, Имя в источнике данных=dbo.t_Organization. Открываем форму списка, которую платформа генерирует в польз. режиме и видим все записи таблицы.
Есть в MSSQL функция, возращающая табличное значение dbo.ft_OrgAddress (по ID_Organization выдает таблицу адресов). Во ВнешИстДанных 1С добавляется в Таблицы, а не Функции, Вид таблицы=Выражение, Имя в источнике данных=dbo.ft_OrgAddress(&1). Открываем форму списка, которую платформа генерирует в польз. режиме и видим ошибку:

Ошибка при выполнении запроса. Ошибка при выполнении запроса.
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "НаборДанныхДинамическогоСписка"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
<(27, 2)>: Неверные параметры "ВнешнийИсточникДанных.ЦБ.Таблица.dbo_ft_OrgAddress"
<<?>>ВнешнийИсточникДанных.ЦБ.Таблица.dbo_ft_OrgAddress КАК ВнешнийИсточникДанныхЦБТаблицаdbo_ft_OrgAddress

Где и каким образом задать параметр &1 и какие вообще возможности работы с этим объектом?

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

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

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

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

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

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

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

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

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

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

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

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

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

    • id (РазрешитьNull = Истина);
    • name (РазрешитьNull = Истина);

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

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

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

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

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

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

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

    Транзакции

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

    Блокировки

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

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


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

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


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

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

    Создание таблицы значений

    Как и большинство объектов встроенного языка, новая таблица значений может быть создана с помощью оператора Новый :

    Колонки таблицы значений

    Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:

    Доступ к колонкам производится через свойство Колонки объекта ТаблицаЗначений . Для добавления новой колонки используется метод Добавить():

    Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():

    Перебор колонок выполняется следующим образом:

    Для удаления колонки используется метод Удалить():

    Свойства колонки таблицы значений

    Имя Тип Описание
    Имя Строка символьный идентификатор колонки, по которому к ней можно обращаться из кода
    Заголовок Строка строковое представление колонки на форме
    ТипЗначения ОписаниеТипов свойство органичивает пространство доступных значений, которые можно указать в данной колонке
    Ширина Число ширина колонки на форме (выражается в количестве символов)

    Методы коллекции колонок таблицы значений

    Вставить() Вставляет новую колонку в указанную позицию коллекции
    Добавить() Добавляет новую колонку в конец коллекции
    Количество() Возвращает количество колонок в коллекции
    Найти() Ищет колонку в коллекции по имени
    Очистить() Удаляет все колонки из коллекции
    Сдвинуть() Сдвигает колонку влево или вправо
    Удалить() Удаляет колонку из коллекции

    Строки таблицы значений

    С колонками разобрались. Давайте теперь разберемся со строками. Строки таблицы значений можно программно добавлять и удалять, перемещать и сортировать, а также выполнять операции поиска и отбора.

    Добавление и удаление строк

    Для добавления новой строки используется метод Добавить() объекта ТаблицаЗначений . Метод возвращает объект СтрокаТаблицыЗначений , с которым доступны дальнейшие манипуляции:

    И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:

    Обратите внимание, что каждая СтрокаТаблицыЗначений ссылается на таблицу значений с помощью метода Владелец():

    Для удаления строки используется метод Удалить() объекта ТаблицаЗначений . Строку можно удалить либо передав методу непосредственно строку, либо ее индекс:

    Перебор строк таблицы значений

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

    Поиск строк

    Все методы таблицы значений:

    Вставить() Вставляет строку на указанное место
    ВыбратьСтроку() Позволяет интерактивно выбрать строку в диалоговом окне
    ВыгрузитьКолонку() Выгружает значения ячеек указанной колонки в массив значений
    Добавить() Добавлет новую строку в таблицу значений
    ЗагрузитьКолонку() Загружает значения в ячейки указанной колонки из массива
    ЗаполнитьЗначения() Заполняет ячейки указанных колонок определенным значением
    Индекс() Возвращает индекс строки таблицы значений
    Итог() Возвращает просуммированный итог по колонке таблицы значений
    Количество() Возвращает количество строк в таблице значений
    Найти() Выполняет поиск строки по значению
    НайтиСтроки() Выполняет поиск строк по указанным параметрам
    Очистить() Очищает строки таблицы значений
    Получить() Возвращает строку по ее индексу
    Свернуть() Выполняет сжатие строк и колонок таблицы значений
    Сдвинуть() Сдвигает строку вверх или вниз по таблице
    Скопировать() Создает новую таблицу значений копированием текущей
    СкопироватьКолонки() Создает новую пустую таблицу значений путем копирования колонок текущей таблицы
    Сортировать() Выполняет сортировку строк таблицы значений по указанным колонкам
    Удалить() Удаляет строку таблицы значений

    Иерархию свойств и типов значений, связанных с таблицей значений, схематически можно представить в виде дерева:

    Разработчики 1С:Предприятие 8.3 добавляют все больше возможностей для изменения, совершенствования и модификации конфигурации силами пользователя без привлечения программиста. Если вам не хватает реквизита в каком-либо объекте программы, вы можете добавить дополнительную строку в большинство документов и карточек, не используя конфигуратор 1С. Это легко и безопасно – вы избежите любых возможных проблем с будущими обновлениями программы.

    Дополнительное поле может понадобиться, чтобы лучше оптимизировать программу к различным особенностям рынка и бизнеса, для совершенствования возможностей аналитики, и просто для удобства работы сотрудников. На примере программы 1С:Бухгалтерия 8 (ред. 3.0) мы модифицируем карточку контрагента, добавив к ней новый реквизит.

    Чтобы добавить новое поле в нужную карточку, во-первых, зайдите в программу 1С с правами администратора. В административном разделе откройте Общие настройки.

    добавить поле реквизита в 1С через административный раздел

    Раскройте пункт Дополнительные реквизиты и сведения. Чтобы иметь возможность добавлять дополнительные реквизиты, поставьте соответствующий флаг. Затем нажмите на ссылку Дополнительные реквизиты, чтобы перейти на следующий шаг.

    создать дополнительный реквизит контрагента 1С

    Теперь выберите объект, которому вы хотите добавить дополнительный реквизит. В данном случае мы выбрали объект Контрагенты. Теперь нажмите кнопку Добавить в левом верхнем углу, Новый, чтобы создать реквизит (кнопка Из другого набора позволит вам скопировать раннее созданный реквизит из другого объекта в текущий).

    создать новую строчку в карточке в 1С бухгалтерии 8.3

    В данном примере мы создадим реквизит с названием Надежный. Реквизит может принимать одно из двух значений – да или нет, которым соответствует установленный или отсутствующий флаг. Такой тип данных, который задается установкой флага, называется Буллево. Вы можете выбрать этот, или любой другой тип данных в поле Тип значения.

    настройка нового поля реквизита в 1С бухгалтерии 8.3

    Помимо Буллево, расскажем о некоторых других самых распространенных типах значений для нового реквизита:

    • Дата – реквизит, содержащий дату и время. Можно использовать, например, чтобы сохранять какие-либо значимые даты, связанные с объектами.
    • Строка – произвольный набор символов, как правило слово или фраза. Подойдет, если вам нужно дополнительное поле с комментарием, или если вам не нужна избыточная функциональность.
    • Число – то же, что и строка, но могут использоваться только числовые символы.
    • Дополнительное значение – вы можете настроить перечень возможных значений реквизита, система создаст под этот реквизит отдельный справочник. Дополнительное значение (иерархия) – то же самое, но перечень значений можно сделать иерархическим.
    • Другой реквизит – вы можете выбрать какой-либо элемент справочника или документ в качестве реквизита. Например, добавив к карточке контрагента реквизит с типом значения Физическое лицо, можно указать ответственного за работу с компанией.
    • Составной тип данных – позволит выбрать сразу несколько типов данных и даст возможность заполнять реквизит любым из них.

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

    • Активировать установку реквизита по гиперссылке (стандартно реквизита можно заполнить сразу в карточке или документе)
    • Настроить видимость и доступность реквизита в соответствии с любыми условиями
    • Указать обязательность заполнения реквизита
    • Добавить всплывающую подсказку; заголовок, который отображается при добавлении нового значения реквизита; заголовок окна со списком возможных значений; комментарий
    • Указать стандартное значение, которое будет использоваться по умолчанию
    • Добавить варианты значений в соответствующей вкладке.

    Обратите внимание, что некоторые из этих настроек могут быть недоступны для разных типов значений.

    настройка нового поля реквизита в 1С бухгалтерии 8.3

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

    Читайте также: