Что значит идентификатор строки

Данные строки 1С — метод таблицы формы

ДанныеСтроки — метод таблицы формы, возвращающий структуру данных строки. Строка передается в параметр метода. Возвращает значение одного из трех типов (в зависимости от источника таблицы формы): ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции, ДанныеФормыЭлементДерева. В общем случае использование метода Данные строки 1с выглядит следующим образом:


Вся информация, представленная в статье, относится только к управляемому приложению. Особенности использования метода ДанныеСтроки:

  • Является клиентским, его нельзя использовать на сервере. Структуру данных, полученную в результате его использования также нельзя передать на сервер;
  • Содержит данные реквизитов добавленных на форму, а также данные реквизитов с установленным флагом Использовать всегда. Остальные реквизиты отсутствуют в коллекции;
  • Возвращает данные аналогичные свойству ТекущиеДанные таблицы формы. Разница лишь в том, что при помощи метода ДанныеСтроки можно получить структуру данных любой строки таблицы, а не только текущей;
  • Идентификатор строки, передаваемый в параметре может быть разных типов, в зависимости от источника таблицы формы. Для источников ТаблицаЗначений , ДеревоЗначений , СписокЗначений , ТабличнаяЧасть идентификатор строки числовой. Для ДинамическогоСписка это обычно Ссылка , которая является ключом строки списка. Идентификатор текущей строки содержится в свойстве таблицы формы ТекущаяСтрока .

Таким образом для таблицы формы ТаблицаТоваров следующие действия будут идентичны (приведут к получению данных текущей строки):

Получение идентификаторов строк

Так как параметром метода ДанныеСтроки является идентификатор, важно знать откуда его можно получить:

  • Для текущей строки таблицы формы идентификатор хранится в свойстве ТекущаяСтрока;
  • Идентификаторы выделенных строк таблицы формы можно получить при помощи свойства ВыделенныеСтроки. В нем содержится массив идентификаторов.
  • Идентификатор можно получить непосредственно из строки источника таблицы формы. Для этого используется метод ПолучитьИдентификатор(). Его можно применять и на клиенте и на сервере.
Читайте также:  Qbittorrent что значит с ошибкой

Данные строки 1С — пример использования

Рассмотрим пример получения данных выделенных строк таблицы формы при нажатии кнопки.

Источник

Является ли строка идентификатором

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

При решении задачи следует проверить:

  1. Принадлежит ли первый символ слова множеству английских букв, или является символом подчеркивания?
  2. Принадлежат ли все остальные символы слова множеству английских букв или множеству символов цифр или являются символами подчеркивания?

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

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

Pascal

В Паскале есть тип данных «множество» (set), которое легко задается. В данном случае множество ch содержит буквы в обоих регистрах и знак подчеркивания, а множество n — символы цифр.

Сначала проверяется первый символ на принадлежность множеству ch. Если он ему не принадлежит, то программа завершается на этом этапе.

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

Если все символы прошли проверку, то, значит, введенное слово — идентификатор.

Язык Си

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

Python

Метод lower() приводит символ к нижнему регистру.

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

КуМир

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

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

var
ch, n: set of char;
str: string;
i: byte;
begin
ch := [‘a’..’z’,’A’..’Z’,’_’];
n := [‘0’..’9′];
readln(str);
if str = » then exit;
if not (str[1] in ch) then begin
writeln(‘No’);
exit;
end;
for i:=2 to length(str) do
if not ((str[i] in ch) or (str[i] in n)) then begin
writeln(‘No’);
exit;
end;
writeln(‘Yes’);
end.

В Паскале есть тип данных «множество» (set), которое легко задается. В данном случае множество ch содержит буквы в обоих регистрах и знак подчеркивания, а множество n — символы цифр.

Сначала проверяется первый символ на принадлежность множеству ch. Если он ему не принадлежит, то программа завершается на этом этапе.

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

Если все символы прошли проверку, то, значит, введенное слово — идентификатор.

#include
#include
main() <
char s[100];
short i, f;
scanf(«%s», s);
f = 1;

Источник

Уникальный идентификатор в 1С

ДанныеСтроки – метод таблицы формы, возвращающий данные строки 1с в виде структуры. Идентификатор нужной строки передается в параметре.

Получение идентификаторов строк

Так как параметром метода ДанныеСтроки является идентификатор, важно знать откуда его можно получить:

  • Для текущей строки таблицы формы идентификатор хранится в свойстве ТекущаяСтрока;ТекущаяСтрока = Элементы.ТаблицаТоваров.ТекущаяСтрока;
  • Идентификаторы выделенных строк таблицы формы можно получить при помощи свойства ВыделенныеСтроки. В нем содержится массив идентификаторов.ВыделенныеСтроки = Элементы.ТаблицаТоваров.ВыделенныеСтроки;
  • Идентификатор можно получить непосредственно из строки источника таблицы формы. Для этого используется метод ПолучитьИдентификатор(). Его можно применять и на клиенте и на сервере.Для Каждого СтрокаИсточника Из ТаблицаТоваров Цикл Идентификатор = СтрокаИсточника.ПолучитьИдентификатор();КонецЦикла;

Синтаксис

Метод НайтиПоИдентификатору() имеет следующий синтаксис:

А также альтернативный англоязычный синтаксис:

Табличная часть

Многие объекты метаданных в 1С могут иметь табличную часть. У одного объекта может быть создано неограниченное количество табличных частей.

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

Строка табличной части не является отдельным объектом. К строке можно обратиться только по индексу строки в табличной части.

Программно нельзя создать табличную часть через конструктор. Можно только получить к ней доступ через основной объект:

НовыйДок = Документы . РасходТовара . СоздатьДокумент ( ) ;

//через объект получаем доступ к табличной части СписокУслуг

ТабЧастьДока = НовыйДок . СписокУслуг ;

Уникальность

Разговор про уникальность необходимо начинать с того, что такое GUID (Globally Unique Identifier) и как этот GUID формируется.

Событие, состоящее в выпадение двух абсолютно одинаковых чисел из последовательности, максимальный член которой имеет порядок 10 в 38 степени, очевидно, является маловероятным. Именно на этом и основан принцип глобального уникального идентификатора.

Каждый идентификатор содержит 128 бит информации, записанный в виде шестнадцатиричного числа ( в 1С имеет вид a96ca0cd-b164-11e6-80c2-00155d001fe4). Простенький код (Рис.1) позволяет получить УИ любого элемента базы данных.

Рис.1

Конечно, полностью гарантировать уникальность отдельно взятого значения невозможно. Однако, шансы на то, что при работе приложений и сервис возникнут два разных объекта с одинаковым GUID крайне малы.

Строка табличной части

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

//добавление строки табличной части

СтрокаТабличнойЧасти = НовыйДок . СписокУслуг . Добавить ( ) ;

СтрокаТабличнойЧасти . Услуга = СсылкаНаУслугу ;

СтрокаТабличнойЧасти . СуммаУслуги = 900 ;

//для метода Вставить нужно указать индекс строки

СтрокаТабличнойЧасти = НовыйДок . СписокУслуг . Вставить ( 1 ) ;

СтрокаТабличнойЧасти . Услуга = СсылкаНаУслугу ;

СтрокаТабличнойЧасти . СуммаУслуги = 800 ;

//у строки есть предопределенная колонка НомерСтроки

Сообщить ( СтрокаТабличнойЧасти . НомерСтроки ) ; //2

//в отличии от индексов номера строк начинаются с 1

Параметры

Описание параметров метода НайтиПоИдентификатору() :

Источник

Есть ли у строки в ТЧ документа уникальныйИдентификатор?

(12)
Ага. С одной стороны, строка — полноценный объект и самостоятельная сущность. Причем, чуть ли не из самого сердца БД.

С другой стороны, по мнению drShad — «нафиг платформе не нужны».

Тогда как можно предположить, даже не залезая в саму БД — что GUID-ы строк там есть, просто платформа не даёт к ним доступ.

(19)
Делаю синхронизацию с внешней системой.

Да ладно, парни, я всё понял.

(26)
«2) 1С переписывает те строки ТЧ, которые менялись
3) 1С переписывает все строки ТЧ, если изменился порядок строк.»

Если удаляем одну строку из 500-ста, значит — изменился порядок строк, значит перезаписываем всю ТЧ.

И конечно же из этого следует, что UID строке не нужен.

Совсем 1С мозги проела?

(29)
Да меня как бы не совсем взолновывает, как это было у 1С.
И внешний UID завести совсем не проблема.

Меня удивляют, высказывания «некоторых», которые считают, что UID строке — нафиг не нужен.

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

Так системы не проектируют, как бы.

Я больше смирюсь с необходимостью закатать на сервере полторы тыщи строк , чем раздуть каждую еще на 32 байта.

Записать в базу полторы тыщи строк — это пустяк.

(36)
Э-э-э-э.
Ну как бы, если речь идет о работе в локалке — тогда да.

А вот если гонять 1500 тыщи строк между сервером и каким-нибудь мобильным терминалом, да еще и в XML — то поневоле захочется «добавить 32-байта».

для SQL у строки ДОЛЖЕН быть идентификатор, только не в виде гуида а в виде индекса строки в таблице (не путать с номером в табличной части), без этого кластеризованый индекс не построить.

только этот идентификатор в 1с недоступен 🙂 это уровень базы данных

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

По этому не нужно связывать 1с и SQL это «красный» и «теплый»

(42)
Ну, тутошнему люду UID у строки «и нафиг не нужен».
Звучит весомо.

А как насчет редактирования одного документа несколькими людьми?

А разрешение коллизий в разных узлах ИБ на уровне строк?

Один оператор в одном городе меняет одну строку, другой оператор — другую.

Все изменения будут приняты?

(43) вполне нормальным будет решение документ+РегистрСведений, при этом ты все свои вопросы решаешь, да и устроки РС есть идентификатор доступный внутри 1с.

просто идеология 1с — «объект не делим» это относится к документу в целом, если тебя это не устраивает — вместо ТЧ используй РС.

зы
только зачем изобретать велосипед? и наступать на грабли? уверяю что если у тебя возникают траблы типа (43) — значит ты не правильно спроектировал документы (сделал вместо 10 документОв один мега докУмент)

(44)
» значит ты не правильно спроектировал документы «

Увы, есть варианты, когда бизнес-процессы утверждаются сверху.

Могу привести примеры.

Торговые представители работают с контрагентами. С одним контрагентом могут работать неограниченное количество торговых.

У каждого свой тип товара, каждый работает только в своей зоне.

Все это решалось договорами и различными привязками к этим договорам.

Но иной клиент хочет всё в ОДНОЙ накладной + вести взаиморасчеты по этой накладной.

То есть — все типы товара физически находятся в одном документе.

Но торговый всё также должен иметь/влиять только на свою зону отвественности.

Ну вот и всё. Документ по сути могут реадктировать несколько людей, причем значительно разнесенных в пространстве.

отлично. Давайте теперь каждый обновляльщик типовых выдумает «похожую» задачу и что-нибудь здесь пропищит. Сводные документы уже вход пошли.

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

(56) пойми, что в 1с документ это и есть неделимая сущность! и у документа есть свой UID.

просто ты по недопонимаю патаешся решить свою задачу одной сущностью, а это не правильно в корне.

твоя задача — это бизнесс-процесс, а документ — это отражение одной хоз операции.

Да все я понимаю. Не понимает только торговый, который добавляет на своем терминале +50 строк, а оператор в офисе — удаляет одну; и все +50 строк улетают в бездну, так сервер видите ли WINS.

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

Меня упертость отдельных лиц восхищает, которые согласны на сервер посылать ВСЕ строки в принципе, ради одной удаленной или добавленной.

(62)
«ну, эта ситуация встречается в одном случае из 50 миллионов»

Дедушка, какая ситуация? Ты уверен, что правильно буквы понял?

«если в 99,9% случаев никто никаких строчек не удаляет и порядок строк не меняет?»

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

Подумать только, редактирование документа — странная ситуация.

«Ты думаешь на самом деле в 1С полные придурки сидят»
На заданный вопрос отвечаю — думаю, что придурки сидят в другом месте.

Очень редко возникает ситуация, когда юзеры меняют состав строк в ТЧ.

Удаление строки — это смена состава строк?

Очень редко возникает ситуация, когда юзеры удаляют строку.

Мда. Чоткие у вас юзеры, чо.

(71) Решение задачи в лоб. Не лучшее в данном случае решение.
А если так:
1. Торговые представители оформляют заявки от покупателя.
2. На складе, в логистике, выписавают на основаниии заявок один документ отгрузки. который отправляетс заказчику.

Это типовой метод, как ни странно.

вообще самое логичное решение конкретной задачи:

1. менеджеры создают N предворителельных документов
2. ответсвенный за выдачу генерит на основании одну накладную
3. при необходимости изменения данных менеджерами они создают сторнирующие документы

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

(79)
1. и 2. Звучат здраво. Так и было когда-то — решили уйти.
3. же — редактирование путем сторнировок в оперативном режиме — чревато геммороем.

Ты городишь костыли вокруг очевидного факта. Если ЕСТЬ документ ( как его не назови) то его рано или поздно кто то захочет изменить. Рано или поздно его захотят изменить двое людей. И разрешать коллизии на уровне строк — абсолютно нормальный подход для любой вменяемой системы. Не нравится — откажись. Но присутствовать то это должно.

У 1С ноги растут из «одна база на одно рабочее место». Кто то будет с этим спорить?

Если подавляющему большинству нормальная распределенка вообще не впилась (они себе вообще её слабо представляют), то это не значит, что её вообще не должно быть.

Кстати, для объекта — строки таб.части 1С хранит идентификатор строки.
Например, такой код даст ошибку:

Источник

Оцените статью