Получить значение реквизита из табличной части документа |
Я |
05.06.18 — 01:37
Доброй ночи, подскажите пожалуйста.
Получить значение не из табличной части Документ[реквизит.имя], а как например, если есть табличная часть «тест» со своими реквизитами ?
1 — 05.06.18 — 03:18
(0) Документ[табличнаячасть.имя][0][реквизит.имя]
это если из первой строки табличной части
Если например 100-я строка табличной части, то
Документ[табличнаячасть.имя][99][реквизит.имя]
2 — 05.06.18 — 12:25
(1) А можно еще вопрос, получается если хочу обойти все данные из документа, мне надо обойти все его реквизиты, а также все реквизиты табличной части и получается все её строки ?
Немного не понимаю этих моментов. Задача была вывести документ в текстовый формат(csv, txt) с помощью метаданных (только вот документ любой).
3 — 05.06.18 — 12:28
(2) ну конечно в текстовый файл ты все строки должен добавить. Это не обсуждается.
4 — 05.06.18 — 12:29
(2) используй Для Каждого…
5 — 05.06.18 — 12:31
(3) (4) ДокументДляВыгрузкиСсылка = ЭтаФорма.ЭлементыФормы.ДокументСсылка.Значение.Ссылка;
РеквизитыДокумента = ДокументДляВыгрузкиСсылка.Метаданные().Реквизиты;
Текст = Новый ТекстовыйДокумент;
Для Каждого РеквизитДокумента Из РеквизитыДокумента Цикл
Текст.ДобавитьСтроку(«» + РеквизитДокумента.Имя + «:» + ДокументДляВыгрузкиСсылка[РеквизитДокумента.Имя] );
КонецЦикла;
ТЧДокумента = ДокументДляВыгрузкиСсылка.Метаданные().ТабличныеЧасти;
Для Каждого ТекТЧДокумента Из ТЧДокумента Цикл
СсылкаТЧ = ДокументДляВыгрузкиСсылка[ТекТЧДокумента.Имя];
Для каждого строкаТЧ Из ТекТЧДокумента.Реквизиты цикл
Текст.ДобавитьСтроку(«» + строкаТЧ.Имя + «:» + ???СсылкаТЧ[0].[строкаТЧ.Имя]??????);
КонецЦикла;
КонецЦикла;
Текст.Записать(ИмяФайла);
Я это сделал, вот теперь вопрос как проверить сколько строк в табличной части или я что-то не поянл
6 — 05.06.18 — 12:37
См (4):
Для каждого ТекСтрока Из ДокументДляВыгрузкиСсылка[ТекТЧДокумента.Имя] Цикл
7 — 05.06.18 — 12:38
(5)
Для каждого строкаТЧ Из ТекТЧДокумента.Реквизиты цикл
Для Каждого СтрокаТЧ ИЗ СсылкаТЧ Цикл
Текст.ДобавитьСтроку(«» + строкаТЧ.Имя + «:» + СтрокаТЧ[строкаТЧ.Имя]);
Как-то так
8 — 05.06.18 — 12:38
Для каждого стр Из СсылкаТЧ цикл
Для каждого строкаТЧ Из ТекТЧДокумента.Реквизиты цикл
Текст.ДобавитьСтроку(«» + строкаТЧ.Имя + «:» + стр[строкаТЧ.Имя]);
КонецЦикла;
КонецЦикла;
9 — 05.06.18 — 12:38
(7) ох, блин. Не читай (7)
10 — 05.06.18 — 12:38
еще номер строки тч надо по идее
11 — 05.06.18 — 12:42
(10) (6) (9) Спасибо большое, постараюсь разобраться. Меньше недели в 1С, до этого опыт был с другими языками. Уже и 1С разонравился, но просто «спортивный интерес» закончить начатое.
12 — 05.06.18 — 12:53
(10) ТЧДокумента = ДокументДляВыгрузкиСсылка.Метаданные().ТабличныеЧасти;
Для Каждого ТекТЧДокумента Из ТЧДокумента Цикл
СсылкаТЧ = ДокументДляВыгрузкиСсылка[ТекТЧДокумента.Имя];
Для каждого стр Из СсылкаТЧ цикл
Для каждого строкаТЧ Из ТекТЧДокумента.Реквизиты цикл
Текст.ДобавитьСтроку(«» + строкаТЧ.Имя + «:» + стр[строкаТЧ.Имя]);
КонецЦикла;
КонецЦикла;
КонецЦикла;
Сделал так, теперь читает только реквизиты документа, а в табличной части не читает.
Что — то не так пошло
13 — 05.06.18 — 12:56
(11) «1С разонравился»
Зря вы это написали )
14 — 05.06.18 — 13:03
(13) Да не привычно все как-то, задание дали сразу такое, поэтому кроме негатива пока ничего нет, может когда результат будет изменю свое мнение
15 — 05.06.18 — 13:48
(14) Кроме 1С есть опыт с языками программирования?
16 — 05.06.18 — 13:52
(15) C#, js, C++
1Сергей
17 — 05.06.18 — 14:09
(16) тогда будешь плеваться на 1С. Это неизбежно
-
09.06.2019, 15:59
#1
Гость форума
Получение значения реквизита табличной части. 1С:Предприятие 8.3
Здравствуйте! Подскажите, пожалуйста, как получить значение реквизита табличной части (в справочнике)? У меня есть таб.часть «Образование», в ней есть реквизит «ВидОбразования» (ссылается на перечисление видов образования). Как получить значение данного реквизита?
-
06.07.2019, 20:53
#2
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:// Пусть СсылкаНаТЗ это ссылка на владельца ТЧ Образование
ТаблОбразование = СсылкаНаТЗ.Образование.Выг рузить(); // это таблица значений
Для Каждого Обр из ТаблОбразование Цикл
Сообщить(Обр.ВидОбразовани я);
КонецЦикла;// Или
Номер = 0;
Пока Номер < ТаблОбразование.Количеств� �() Цикл
Сообщить(ТаблОбразование[Номер].ВидОбразования);
Номер = Номер + 1;
КонецЦикла;
-
06.07.2019, 20:59
#3
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Какая-то ерунда с сообщением — половина стерлась через несколько минут.
И как отредактировать не понимаю…Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:// Пусть СсылкаНаТЗ это ссылка на владельца ТЧ Образование
ТаблОбразование = СсылкаНаТЗ.Образование.Выр узить(); // это таблица значений
Для Каждого Обр из ТаблОбразование Цикл
Сообщить(Обр.ВидОбразовани я);
КонецЦикла;// Или
Номер = 0;
Пока Номер < ТаблОбразование.Количеств� �() Цикл
Сообщить(ТаблОбразование[Номер].ВидОбразования);
Номер = Номер + 1;
КонецЦикла;
-
06.07.2019, 21:02
#4
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Попытка 3. Расширенный режим. Почему сообщения так корежит?
Какая-то ерунда с сообщением — половина стерлась через несколько минут.
И как отредактировать не понимаю…Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:// Пусть СсылкаНаТЗ это ссылка на владельца ТЧ Образование
ТаблОбразование = СсылкаНаТЗ.Образование.Выг рузить(); // это таблица значений
Для Каждого Обр из ТаблОбразование Цикл
Сообщить(Обр.ВидОбразовани я);
КонецЦикла;// Или
Номер = 0;
Пока Номер < ТаблОбразование.Количеств� �() Цикл
Сообщить(ТаблОбразование[Номер].ВидОбразования);
Номер = Номер + 1;
КонецЦикла;
-
06.07.2019, 21:05
#5
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Попробую картинкой
Screenshot_1.jpg
-
09.07.2019, 11:44
#6
Гордость форума PRO
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Сообщение от iLex
Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:Никто не ответил потому как вопрос дурацкий.
табличная часть она потому и табличная, что в ней (по умолчанию) много в строк и в каждой строке значение данного реквизита возможно разное.
если знаешь номер строки (например первая) то обращение будет Образование[0].ВидОбразования
Как получить доступ к реквизитам формы?
Если реквизит объекта «вытащен» на форму, то реквизит формы можно получить через объект ЭлементыФормы, который содержит коллекцию элементов формы, сканируя ее в цикле:
ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); ФормаОбъекта = ДокОбъект.ПолучитьФорму(); Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Сообщить(Элемент); КонецЦикла;
Этот цикл позволяет просмотреть имена а так же типы всех реквизитов формы, в том числе такие реквизиты как надписи, командные панели и тд.
Реквизиты формы могут быть различных типов. Поставив фильтр в виде типа реквизита мы можем просмотреть реквизиты определенного типа.
Если реквизит формы имеет тип «ТабличноеПоле», то можно такой элемент просканировать во вложенном цикле и узнать имена колонок таблицы:
Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Сообщить(Элемент.Имя); Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда Сообщить(" Это табличное поле! " + Элемент.Имя ); Для Каждого Колонка Из Элемент.Колонки Цикл ИмяКолонки = Колонка.Имя; Сообщить(ИмяКолонки); КонецЦикла; КонецЕсли; КонецЦикла;
Как получить значение отдельного реквизита формы?
Чаще требуется получать не массив реквизитов формы, а значение отдельных конкретных реквизитов формы. Например реквизиты «Шапки» или «Подвала» формы документа.
Пример:
ФормаОбъекта = ДокОбъект.ПолучитьФорму("ФормаДокумента"); Поставщик = ФормаОбъекта.ЭлементыФормы.Поставщик; Поставщик = ФормаОбъекта.ЭлементыФормы.Получатель; Сообщить(ФормаОбъекта.ЭлементыФормы.ТаблПоле.Колонки.Количество());
Реквизиты шапки могут иметь различные типы: Дата, СправочникСсылка, ЧекБокс, элемент раскрывающегося списка и др.
Как получить значение элементов табличной части формы?
Доступ к табличной части формы через объект
Доступ к табличной части формы (например: Товары) можно получить через объект:
ДокОбъект = Док.ПолучитьОбъект(); //здесь Док - ссылка на объект //просканируем построчно таб часть документа Для Каждого Стр из ДокОбъект.Товары Цикл Номенклатура = Стр.Номенклатура; Стр.Коэффициент = 1; КонецЦикла;
Здесь ДокОбъект.Товары — это табличная часть «Товары» объекта. Далее в цикле табличная часть построчно сканируется!
В каждой итерации цикла можно получить доступ к любому полю строки указав через точку имя этого поля:
Номенклатура = Стр.Номенклатура;
Доступ к табличной части формы через ЭлементыФормы
Табличная часть объекта и табличная часть формы объекта — это не одно и то же!
Для того, чтобы код работал правильно, надо чтобы колонка формы табчасти объекта в свойстве данные ссылалась на реквизит табличной части объекта. Этим определяется тип колонки таб части формы.
То есть должна быть установлена связь между реквизитом табчасти объекта и реквизитом табчасти формы. Форм у объекта метаданных может быть много мы знаем. Табличную часть формы объекта можно получить через объект ЭлементыФормы:
Объект ЭлементыФормы используется для доступа к элементам управления, расположенным на форме, в частности к таб части документа.
ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); ФормаОбъекта = ДокОбъект.ПолучитьФорму(); Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда //элемент формы - табличное поле Если Элемент.Имя = "Товары" Тогда Сообщить("Это табличное поле!! " + Элемент.Имя ); //ТабПоле = ФормаОбъекта.ЭлементыФормы.Товары.Значение; ТабПоле = Элемент.Значение; Колво = ТабПоле.Количество(); Сообщить("Количество строк: " + Колво); Для Каждого ТекущаяСтрока Из ТабПоле Цикл Имя = ТекущаяСтрока.Номенклатура; Сообщить(Имя); КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла;
Результат для документа Авансовый отчет:
Это табличное поле!! Товары
Количество строк: 4
Женские ботфорты коричневые
Ботинки женские демисезонные
Ботинки женские натуральная кожа
Женские босоножки
Если надо получить значение всех колонок всех строк, то организуем дважды вложенный цикл:
Во внешнем цикле сканируются строки, во внутреннем — колонки:
ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); ФормаОбъекта = ДокОбъект.ПолучитьФорму("ФормаДокумента"); Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда Если Элемент.Имя = "ВыданныеАвансы" Тогда //таб часть объекта Сообщить(" Это табличное поле!! " + Элемент.Имя ); ТабПоле = Элемент.Значение; Индекс = 0; Для Каждого ТекущаяСтрока Из ТабПоле Цикл Сообщить("======================="); Для Каждого Колонка Из Элемент.Колонки Цикл ИмяКолонки = Строка(Колонка.Имя); Сообщить(ИмяКолонки); Имя = ТекущаяСтрока[ИмяКолонки];//сработает только если есть такое поле таб части объекта Сообщить("=== " + Имя); КонецЦикла; Индекс = Индекс + 1; Если Индекс > 0 Тогда break КонецЕсли; //только первая строка КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла;
Результат для документа Авансовый отчет:
Это табличное поле!! ВыданныеАвансы
=======================
НомерСтроки 1
ДокументАванса Расходный кассовый ордер ТК000000004 от 15.02.2007 19:24:03
СуммаДокументаАванса 300
ВалютаДокументаАванса USD
Выдано 300
Сумма 174
Такое двойное сканирование удобно использовать для быстрой проверки того, что все колонки таб части формы имеют связь с реквизитами таб части объекта. Если такой связи у какой-либо колонки нет, система сгенерирует ошибку.
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||
1 |
||||
Получить данные из табличной части документа, как?10.05.2016, 10:24. Показов 44181. Ответов 10 Метки нет (Все метки)
Доброго времени суток!
0 |
SpiRUS 11 / 11 / 5 Регистрация: 23.06.2015 Сообщений: 74 |
||||||||
10.05.2016, 10:44 |
2 |
|||||||
Если имеется в виду получить количество позиций в табличной части «Товары», то
А если сообщить значение каждой строки из колонки «количество» то
1 |
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||
10.05.2016, 11:47 [ТС] |
3 |
|||
Ссылка на документ — как правильно получить?
Товары — это табличная часть бокумента, может я как то не так ссылаюсь на эту таб. часть?
0 |
SpiRUS 11 / 11 / 5 Регистрация: 23.06.2015 Сообщений: 74 |
||||
10.05.2016, 12:01 |
4 |
|||
Ссылка на документ — как правильно получить? Способов то много. Можно запросом, можно на форму вынести поле ввода. Можно просто:
0 |
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||||||
10.05.2016, 13:51 [ТС] |
5 |
|||||||
нет как мне обратиться к табличной части документа?
так получается.//сделал для проверки.
— не получается!
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
10.05.2016, 14:24 |
6 |
|||
Сообщение было отмечено Granfury как решение РешениеGranfury, Количество — это реквизит табличной части Товары? Надо получать конкретную строку тогда: обходить циклом, по индексу(если заранее знаете количество строк ТЧ):
2 |
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||
10.05.2016, 15:32 [ТС] |
7 |
|||
GreenkA, Спасибо! Добавлено через 56 минут
Результат:
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||||||
10.05.2016, 15:38 |
8 |
|||||||
Granfury, можно конечно обойти табличную часть и
или сразу:
0 |
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||
10.05.2016, 18:38 [ТС] |
9 |
|||
GreenkA, «Поле обьекта не обнаружено «ПриказНаОтгрузку»»
Что не так?
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
10.05.2016, 18:40 |
10 |
Granfury, а что содержится в Ссылка? Вы же уже делали вывод Количества и все было нормально, что изменили?
1 |
9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
|
11.05.2016, 13:03 [ТС] |
11 |
пытаюсь разобраться Добавлено через 18 часов 7 минут
0 |
Для примера, рассмотрим ситуацию, когда требуется получить все номенклатурные позиции, указанные в табличной части Товары документов РеализацияТоваровУслуг.
Для этого можно воспользоваться запросом со следующим текстом:
ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
В качестве источника указываем табличную часть документов — таблицу Документ.РеализацияТоваровУслуг.Товары. Выходным полем объявляем поле Номенклатура, входящее в состав таблицы источника. Кроме этого, поскольку одна и та же товарная позиция, естественно, могла присутствовать и не один раз в документах, применяем РАЗЛИЧНЫЕ для получения только различных строк в выходной таблице запроса.
Для примера создадим обработку СписокТоваров, где выбирается документ РеализацияТоваровУслуг, и нажатием на соответствующую кнопку в окно сообщений выводится список неповторяющихся позиций номенклатуры, содержащейся в табличной части этого документа.
Для того, чтобы ограничить выборку номеклатуры только номенклатурой из табличной части конкретного документа используем параметр Ссылка в условии в запросе (ГДЕ …):
ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Ссылка
Почему я просил подсказать метод. через который следует решаить это дело, потому как опыту — пару книжек … и всё, а как дело дошло до боевой эксплуатации — …(
Первый вариант:
&НаСервереБезКонтекста
Функция ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение)
Возврат ВыбранноеЗначение.Изделия;
КонецФункции
&НаКлиенте
Процедура ИзделиеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Изделия = ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение);
КонецПроцедуры
И получил сообщение следуюющего содержания:
{Документ.Акт.Форма.ФормаАкта.Форма(43)}: Ошибка при вызове метода контекста (ПолучитьРеквизитВыбранногоЗначения)
Изделия = ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘ret’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}ret
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘СправочникТабличнаяЧасть.ПроизводственныеЗаказы.Изделия’
По этой ошибке ничего найти не смог, хотя пти все верные
За тем попытался через запрос:
Функция ОпределитьНаименованиеИзделия(ОбознИзд)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ПроизводственныеЗаказы.Ссылка,
| ПроизводственныеЗаказы.Наименование,
| ПроизводственныеЗаказы.Изделия.(
| ОбознИзд),
|ИЗ
| Справочник.ПроизводственныеЗаказы КАК ПроизводственныеЗаказы
|ГДЕ
| (ПроизводственныеЗаказы.Наименование = &Наименование)
| И (НазваниеСправочника.Изделия = &Изделия)
|
|СГРУППИРОВАТЬ ПО
| ПроизводственныеЗаказы.Ссылка,
| ПроизводственныеЗаказы.Наименование,
| ПроизводственныеЗаказы.Изделия.(
| ОбознИзд),
|»;
Запрос=Новый Запрос(Запрос.Текст);
Запрос.Параметры.Вставить(«ОбознИзд», ОбознИзд);
Выборка=Запрос.Выполнить().Выбрать();
КонецФункции
&НаКлиенте
Процедура ИзделиеПриИзменении(Элемент)
ОбознИзд = ОпределитьНаименованиеИзделия(ОбознИзд)
КонецПроцедуры
И получил ошибку
{Документ.Акт.Форма.ФормаАкта.Форма(57)}: Ошибка при вызове метода контекста (Выполнить): {(6, 1)}: Синтаксическая ошибка «ИЗ»
<<?>>ИЗ
Выборка=Запрос.Выполнить().Выбрать();
по причине:
{(6, 1)}: Синтаксическая ошибка «ИЗ»
<<?>>ИЗ
Ещё пытался через динамический Список — и там не смог получить доступа до табличной части справочника.
В аттачах — form.png — форма документа АКТ. form_pr_zak.png — форма справочника «ПроизводственныеЗаказы» — основа для получения значений Полей «Номер производственного заказа» заполняется из справочника производственных заказов реквизит «Наименование», а поле изделие … по идее должно получаться из справочника «ПроизводственныеЗаказы», но из табличного поля (изделия) колонки «Обозначение Изделия» (ОбознИзд). Вот в почледний пункт — мне его и не получить.
Часть2. Универсальные коллекции
Массив
Как создать массив?
СозданныйМассив = Новый Массив ();
СозданныйМассив = Новый Массив (10);
Как создать многомерный массив?
ДвумерныйМассив = Новый Массив (2, 8);
ДвумерныйМассив = Новый Массив;
МассивВторогоПорядка = Новый Массив(8);
ДвумерныйМассив.Добавить(МассивВторогоПорядка);
ДвумерныйМассив.Добавить(МассивВторогоПорядка);
Значение = ДвумерныйМассив[2][5];
Значение = ДвумерныйМассив.Получить(2).Получить(5);
Как добавить элементы в массив?
НашМассив.Добавить(НовоеЗначение);
Массив = Новый Массив;
Массив.Вставить(5, "ООО ""Лабан""");
Как определить размер массива?
Размер = НашМассив.Количество();
Как обратиться к элементу массива?
ПервоеЗначение = НашМассив[0];
НашМассив[9] = ДесятоеЗначение;
ПервоеЗначение = НашМассив.Получить(0);
НашМассив.Установить(9, ДесятоеЗначение);
Как перебрать элементы массива?
Для Каждого ЭлементМассива Из МассивЭлементов Цикл
Если ТипЗнч(ЭлементМассива) = Тип("Число") Тогда
Сообщить(ЭлементМассива);
КонецЕсли;
КонецЦикла;
Для Сч = 0 по МассивЭлементов.ВГраница() Цикл
Если ТипЗнч(МассивЭлементов[Сч]) = Тип("Число") Тогда
МассивЭлементов[Сч] = 0;
КонецЕсли;
КонецЦикла;
Как удалить элемент массива?
МассивЭлементов.Удалить(0);
Индекс = МассивЭлементов.ВГраница();
Пока Индекс >= 0 Цикл
Если ТипЗнч(МассивЭлементов[Индекс]) = Тип("Число") Тогда
МассивЭлементов.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Как удалить все элементы массива?
Массив.Очистить();
Как удалить повторяющиеся элементы массива?
Процедура УдалитьПовторяющиесяЭлементы(Массив)
ТекущийИндекс = 0;
ВсегоЭлементов = Массив.Количество();
Пока ТекущийИндекс < ВсегоЭлементов Цикл
Индекс2 = ТекущийИндекс + 1;
Пока Индекс2 < ВсегоЭлементов Цикл
Если Массив[Индекс2] = Массив[ТекущийИндекс] Тогда
Массив.Удалить(Индекс2);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
Индекс2 = Индекс2 + 1;
КонецЕсли;
КонецЦикла;
ТекущийИндекс = ТекущийИндекс + 1;
КонецЦикла;
КонецПроцедуры
Как скопировать массив?
Функция СкопироватьМассив(ИсходныйМассив)
МассивКопия = Новый Массив;
Для Каждого Элемент Из ИсходныйМассив Цикл
МассивКопия.Добавить(Элемент);
КонецЦикла;
Возврат МассивКопия;
КонецФункции
Как проверить, что два массива идентичны?
Функция ПроверитьИдентичностьМассивов(ПервыйМассив, ВторойМассив)
НаибольшийИндекс = ПервыйМассив.ВГраница();
Если НаибольшийИндекс > ВторойМассив.ВГраница () Тогда
Возврат Ложь;
КонецЕсли;
Для Счетчик = 0 По НаибольшийИндекс Цикл
Если ПервыйМассив[Счетчик] <> ВторойМассив[Счетчик] Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
В массив выгружены данные, содержащие наименования контрагентов. Как их отсортировать?
СписокЗначений = Новый СписокЗначений;
СписокЗначений.ЗагрузитьЗначения(МассивНаименований);
СписокЗначений.СортироватьПоЗначению();
МассивНаименований = СписокЗначений.ВыгрузитьЗначения();
СписокЗначений.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
Есть массив, в который выгружены значения типа СправочникСсылка.Номенклатура. Как удалить все пустые значения массива?
Процедура УдалитьПустыеЭлементы(МассивНоменклатуры)
Счетчик = 0;
КоличествоЭлементов = МассивНоменклатуры.Количество();
Пока Счетчик < КоличествоЭлементов Цикл
Если МассивНоменклатуры [Счетчик].Пустая() Тогда
МассивНоменклатуры.Удалить(Счетчик);
КоличествоЭлементов = КоличествоЭлементов - 1;
Иначе
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как получить массив номенклатурных позиций, использованных в табличных частях «Номенклатура» и «Тара» накладной?
МассивНоменклатуры = СсылкаНаДокумент.Товары.ВыгрузитьКолонку("Номенклатура");
МассивНоменклатурыТара = СсылкаНаДокумент.ВозвратнаяТара.ВыгрузитьКолонку("Номенклатура");
Для Каждого ЭлементМассиваТара Из МассивНоменклатурыТара Цикл
МассивНоменклатуры.Добавить(ЭлементМассиваТара);
КонецЦикла;
Есть две таблицы значений. Как получить массив совпадающих имен колонок?
МассивСовпадающихКолонок = Новый Массив();
Для Каждого Колонка Из ТаблицаПриемник.Колонки Цикл
ИмяКолонкиПриемника = Колонка.Имя;
Если ТаблицаИсточник.Колонки.Найти(ИмяКолонкиПриемника) <> Неопределено Тогда
МассивСовпадающихКолонок.Добавить(ИмяКолонкиПриемника);
КонецЕсли;
КонецЦикла;
Как в запросе сделать отбор по нескольким вариантам заполнения реквизита типа «ПеречислениеСсылка»?
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ОтпускаОрганизацииРаботникиОрганизации.ФизЛицо,
| ОтпускаОрганизацииРаботникиОрганизации.ДатаНачала,
| ОтпускаОрганизацииРаботникиОрганизации.ДатаОкончания
|ИЗ
| Документ.ОтпускаОрганизации.РаботникиОрганизации КАК ОтпускаОрганизацииРаботникиОрганизации
|ГДЕ
| ОтпускаОрганизацииРаботникиОрганизации.ПричинаОтсутствия В (&МассивПричин)";
МассивПричин = Новый Массив;
МассивПричин.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускБезСохраненияЗарплаты);
МассивПричин.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускУчебный);
Запрос.УстановитьПараметр("МассивПричин", МассивПричин);
Как из регистра сведений «РасчетчикиЗарплатыОрганизации» получить в виде массива всех расчетчиков зарплаты определенного подразделения организации?
Функция ПолучитьМассивРасчетчиков(Подразделение)
НаборЗаписей = РегистрыСведений.РасчетчикиЗарплатыОрганизации.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ПодразделениеОрганизации.Установить(Подразделение);
НаборЗаписей.Прочитать();
МассивРасчетчиков = НаборЗаписей.ВыгрузитьКолонку("Пользователь");
Возврат МассивРасчетчиков;
КонецФункции
Функция ПолучитьМассивРасчетчиков(Подразделение)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| РасчетчикиЗарплатыОрганизации.Пользователь КАК Расчетчик
|ИЗ
| РегистрСведений.РасчетчикиЗарплатыОрганизации КАК РасчетчикиЗарплатыОрганизации
|ГДЕ
| РасчетчикиЗарплатыОрганизации.ПодразделениеОрганизации = &Подразделение";
Запрос.УстановитьПараметр("Подразделение", Подразделение);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
МассивРасчетчиков = Новый Массив;
Пока Выборка.Следующий() Цикл
МассивРасчетчиков.Добавить(Выборка.Расчетчик);
КонецЦикла;
Возврат МассивРасчетчиков;
КонецФункции
Структура
Как создать структуру?
СозданнаяСтруктура = Новый Структура;
Оппонент = Новый Структура ("Фамилия, Имя, Отчество, Возраст"
, "Иванов"
, "Иван"
, "Иванович"
, 7);
Как добавить элементы в структуру?
Оппонент = Новый Структура ("Фамилия, Имя, Отчество, Возраст",
"Иванов", "Иван", "Иванович", 30);
Оппонент.Вставить("Обращение", "Господин");
Оппонент.Вставить("Возраст", 32);
Как обратиться к элементу структуры?
ТекущийВозраст = Оппонет.Возраст;
КлючСтруктуры = "Возраст";
ТекущийВозраст = Оппонет[КлючСтруктуры];
ТекущийВозраст = Неопределено;
Оппонет.Свойство("Возраст", ТекущийВозраст);
Оппонет.Возраст = 32;
Оппонет["Возраст"] = 32;
Оппонент.Вставить("Возраст", 32);
Как перебрать элементы структуры?
Для Каждого Элемент из СтруктураПараметров Цикл
Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
КонецЦикла;
Как удалить элемент структуры?
СтруктураПараметров.Удалить("Номенклатура");
СтруктураПараметров. Очистить();
Как в структуре установить значение для элемента с определенным ключом?
Структура = Новый Структура;
// Добавить новый элемент.
Структура.Вставить("Цвет", WebЦвета.Белый);
// Установить значение для элемента с ключом "Цвет".
Структура.Вставить("Цвет", WebЦвета.Синий);
Как получить в структуру многомерные данные? Как собрать информацию по установленным в форме журнала отборам?
СтруктураОтборов = Новый Структура;
СтруктураПараметровОтбора = Новый Структура;
Для Каждого ЭлементОтбора из ЖурналДокументовСписок.Отбор Цикл
Если ЭлементОтбора.Использование Тогда
СтруктураПараметровОтбора.Очистить();
СтруктураПараметровОтбора.Вставить("Имя", ЭлементОтбора.Имя);
СтруктураПараметровОтбора.Вставить("ВидСравнения",
ЭлементОтбора.ВидСравнения);
СтруктураПараметровОтбора.Вставить("Значение",
ЭлементОтбора.Значение);
СтруктураПараметровОтбора.Вставить("ЗначениеПо",
ЭлементОтбора.ЗначениеПо);
СтруктураПараметровОтбора.Вставить("ЗначениеС",
ЭлементОтбора.ЗначениеС);
СтруктураПараметровОтбора.Вставить("Представление",
ЭлементОтбора.Представление);
СтруктураПараметровОтбора.Вставить("ПутьКДанным",
ЭлементОтбора.ПутьКДанным);
СтруктураПараметровОтбора.Вставить("ТипЗначения",
ЭлементОтбора.ТипЗначения);
СтруктураОтборов.Вставить(ЭлементОтбора.Имя, СтруктураПараметровОтбора);
КонецЕсли;
КонецЦикла;
Как определить, есть ли в структуре элемент с ключом «Контрагент», и если есть, но содержит пустое значение справочника или Неопределено — удалить этот элемент?
Если Структура.Свойство("Контрагент", ЗначениеЭлемента) Тогда
Если ЗначениеЭлемента = Неопределено ИЛИ ЗначениеЭлемента.Пустая() Тогда
Структура.Удалить("Контрагент");
КонецЕсли;
КонецЕсли;
Структура.Контрагент
Структура["Контрагент"]
Как из табличной части «Товары» документа получить все строки, где значение реквизита «Цена» равно нулю, а значение реквизита «СтавкаНДС» равно значению «НДС18» перечисления «СтавкиНДС»?
СтруктураДляПоиска = Новый Структура("Цена, СтавкаНДС", 0,
Перечисления.СтавкиНДС.НДС18);
МассивСтрок = Товары.НайтиСтроки(СтруктураДляПоиска);
Как получить данные о текущей учетной политике бухгалтерского учета организации из периодического регистра сведений на заданную дату?
// Подготовить отбор по измерению "Организация".
СтруктураОтбора = Новый Структура("Организация", ЮрЛицо);
// Получить данные, актуальные на указанную дату.
СтруктураДанных =
РегистрыСведений.УчетнаяПолитикаБухгалтерскийУчет.ПолучитьПоследнее(ДатаПолучения,
СтруктураОтбора);
// Прочитать данные из структуры данных.
СпособОценкиМпзЮрЛица = СтруктураДанных.СпособОценкиМПЗ;
ДиректКостингЮрЛица = СтруктураДанных.ДиректКостинг;
Как сформировать структуру названий реквизитов табличной части произвольного документа?
Функция СформироватьСтруктуруТабличнойЧастиДокумента(Документ, ИмяТабличнойЧасти)
СтруктураТабличнойЧастиДокумента = Новый Структура;
Для Каждого Реквизит из
Документ.Метаданные().ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты Цикл
СтруктураТабличнойЧастиДокумента.Вставить(Реквизит.Имя, Реквизит.Имя);
КонецЦикла;
Возврат СтруктураТабличнойЧастиДокумента;
КонецФункции
Как получить запросом данные табличной части документа, имея структуру названий реквизитов табличной части?
Функция СформироватьЗапросПоТабличнойЧасти(Документ, ИмяТабличнойЧасти, СтруктураПолей) Экспорт
ПоляРеквизитов = "";
Для Каждого Реквизит Из СтруктураПолей Цикл
ПоляРеквизитов = ПоляРеквизитов + ", Док." + Реквизит.Значение + ?(ЗначениеНеЗаполнено(Реквизит.Ключ), "", " КАК " + СокрЛП(Реквизит.Ключ));
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Док.НомерСтроки " + ПоляРеквизитов + "
|ИЗ
| Документ." + Документ.Метаданные().Имя + "." + СокрЛП(ИмяТабличнойЧасти) + " КАК Док
|ГДЕ
| Док.Ссылка = &ДокументСсылка";
// Установить параметры запроса.
Запрос.УстановитьПараметр("ДокументСсылка", Документ.Ссылка);
Возврат Запрос.Выполнить();
КонецФункции
Соответствие
Как создать соответствие?
СозданноеСоответствие = Новый Соответствие();
Как добавить элементы в соответствие?
ВозрастСотрудников.Вставить(Сотрудник, ВозрастСотрудника);
ВозрастСотрудников[Сотрудник] = ВозрастСотрудника;
Как обратиться к элементу соответствия?
ВозрастСотрудника = ВозрастСотрудников.Получить(Сотрудник);
ВозрастСотрудника = ВозрастСотрудников [Сотрудник];
Как перебрать элементы соответствия?
Для Каждого Элемент из Замены Цикл
Сообщить(Элемент.Ключ + " - " + Элемент.Значение);
КонецЦикла;
Как удалить элемент соответствия?
Замены.Удалить(УдаляемыйТовар);
Замены.Очистить();
Как получить данные из соответствия?
Значение = КурсыВалютДокумента.Получить(УправленческаяВалюта);
Если Значение = Неопределено Тогда
Сообщить("Данная валюта в соответствии отсутствует");
Иначе
Курс = Значение["Курс"];
Кратность = Значение["Кратность"];
КонецЕсли;
Как получить многоуровневое соответствие видов расчетов, обладающих базовыми видами расчетов?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Ссылка КАК Ссылка,
| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета,
| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета.Наименование,
| ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Предопределенный
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизации.БазовыеВидыРасчета КАК ОсновныеНачисленияОрганизацииБазовыеВидыРасчета
|ИТОГИ ПО
| Ссылка";
Результат = Запрос.Выполнить();
ВыборкаВидовРасчета = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВидыРасчета = Новый Соответствие;
БазовыеВидаРасчета = Новый Соответствие;
СвойстваВидаРасчета = Новый Структура("Наименование, Предопределенный");
// Цикл по видам расчета, обладающим базовыми.
Пока ВыборкаВидовРасчета.Следующий() Цикл
БазовыеВидаРасчета.Очистить();
ВыборкаБазовых = ВыборкаВидовРасчета.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
// Цикл по базовым видам расчета.
Пока ВыборкаБазовых.Следующий() Цикл
// Заполненить значения структуры "СвойстваВидаРасчета".
СвойстваВидаРасчета.Наименование = ВыборкаБазовых.Наименование;
СвойстваВидаРасчета.Предопределенный = ВыборкаБазовых.Предопределенный;
// Заполненить соответствие "БазовыеВидАРасчета".
БазовыеВидаРасчета.Вставить(ВыборкаБазовых.ВидРасчета, СвойстваВидаРасчета);
КонецЦикла;
// Заполнить соответствие "ВидыРасчета".
ВидыРасчета.Вставить(ВыборкаВидовРасчета.Ссылка, БазовыеВидаРасчета);
КонецЦикла;
You have no rights to post comments