1С:8.1 Примеры разработки
Примитивные типы, системные функции
Как явно указать нужную дату?
'20050308' Дата(2005, 1, 1) Дата(1, 1, 1) Дата(2005, 1, 1, 10, 29, 50) ДАТАВРЕМЯ(2005, 01, 01)
Как проверить дату на пустое значение?
Если ДатаПроверяемая = Дата(1, 1, 1) Тогда Сообщить("Пустая дата!"); КонецЕсли;
Как сравнить две даты (дни)?
Если НачалоДня(Дата1) = НачалоДня(Дата2) Тогда Сообщить("Дни совпадают!"); КонецЕсли;
Как прибавить к дате день, месяц?
СледующийДень = ТекущаяДата() + 60 * 60 * 24;
ДобавитьМесяц(Дата(2005, 1, 31), 1) ДобавитьМесяц(Дата(2005, 2, 28), -1) КонецМесяца(ДобавитьМесяц(Дата(2005, 2, 28), -1))
ФункцияПолучитьДень(ИсходнаяДата, КоличествоПрибавляемыхДней) Запрос = НовыйЗапрос(" |ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(&ИсходнаяДата, ДЕНЬ, &Количество) как Дата"; Запрос.УстановитьПараметр("ИсходнаяДата", ИсходнаяДата); Запрос.УстановитьПараметр("Количество", КоличествоПрибавляемыхДней); ВозвратЗапрос.Выполнить().Выгрузить()[0].Дата; КонецФункции
Как можно проверить тип значения переменной на равенство нужному?
ИмяНужногоТипа = "ДокументСсылка.РеализацияТоваров"; Если ТипЗнч(ОбрабатываемыйДокумент) = Тип(ИмяНужногоТипа) Тогда // Строки кода, выполняемые при истинности условия. КонецЕсли;
Как очистить реквизит формы, имеющий ссылочный тип?
Товар = Справочники.Номенклатура.ПустаяСсылка();
Как очистить значение, имеющее тип "Хранилище значения"?
РеквизитХранилище = Неопределено;
Как проверить тип значения, помещенного в реквизит имеющий тип "Хранилище значения"?
Значение = Фотография.Получить(); Если Значение <> Неопределено Тогда Если ТипЗнч(Значение) = Тип("Строка") Тогда // Обработать строку. ИначеЕсли ТипЗнч(Значение) = Тип("Картинка") Тогда // Обработать картинку. Сообщить("Картинка"); КонецЕсли; КонецЕсли;
Как сжать данные, помещаемые в хранилище значения?
СопроводительнаяИнформация = Новый ХранилищеЗначения(ПомещаемоеЗначение, Новый СжатиеДанных(9));
Как предоставить пользователю возможность выбора значения составного типа?
МассивТипов = Новый Массив; МассивТипов.Добавить(Тип("СправочникСсылка.ФизЛица")); // Добавить другие типы.
ОписаниеВозможныхТипов = Новый ОписаниеТипов(МассивТипов);
ПолученноеЗначение = Неопределено; ВвестиЗначение(ПолученноеЗначение, "Выберите значение:", ОписаниеВозможныхТипов);
Как применить округление при работе с вычисляемыми числовыми полями в запросе?
ВЫБРАТЬ ПродажиОбороты.Номенклатура, ВЫРАЗИТЬ(ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК ЧИСЛО(15, 2)) КАК СредняяЦенаПродажи ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон) КАК ПродажиОбороты
Как вывести многострочное предупреждение?
Предупреждение("На складе: " + Остаток + Символы.ПС + "В резерве : " + Зарезервировано + Символы.ПС + "Свободный остаток: " + (Остаток - Зарезервировано), 20, "Состояние остатков");
Как при выполнении обработки сообщить пользователю текущее время?
ТекущееВремя = Формат(ТекущаяДата(), "ДЛФ=В"); Сообщить(ТекущееВремя);
Как вывести число прописью по-русски, но без дробной части?
ФорматнаяСтрока = "Л=ru_RU"; ПараметрыПредметаИсчисления = " , , , , , , , , 0"; Сообщить(ЧислоПрописью(ВыводимоеЧисло, ФорматнаяСтрока, ПараметрыПредметаИсчисления));
Как вывести число прописью по-русски, с указанием сотых в дробной части?
ПараметрыПредметаИсчисления = "целая, целых, целых, ж, сотая, сотой, сотых, ж, 2" ФорматнаяСтрока = "Л=ru_RU; ДП=Истина"; Сообщить(ЧислоПрописью(ВыводимоеЧисло, ФорматнаяСтрока, ПараметрыПредметаИсчисления));
Как вывести прописью число килограммов с указанием дробной части в граммах?
ПараметрыПредметаИсчисления = "килограмм, килограмма, килограммов, м, грамм, грамма, граммов, м, 3"; ФорматнаяСтрока = "Л=ru_RU; ДП=Истина"; Сообщить(ЧислоПрописью(ВыводимоеЧисло, ФорматнаяСтрока, ПараметрыПредметаИсчисления));
Как долларовую сумму вывести прописью по-английски?
ФорматнаяСтрока = "Л=en_US"; ПараметрыПредметаИсчисления = "dollar, dollars, cent, cents, 2"; Сообщить(ЧислоПрописью(Сумма, ФорматнаяСтрока, ПараметрыПредметаИсчисления));
Как загрузить внешнюю компоненту?
Попытка ЗагрузитьВнешнююКомпоненту("scanopos.dll") Исключение Сообщить("Ошибка загрузки внешней компоненты!"); КонецПопытки;
Попытка // Получить объект компоненты. Объект = Новый("AddIn.Scanner"); Исключение Сообщить("Не удалось создать объект внешней компоненты"); КонецПопытки;
Как выполнить команду операционной системы?
КомандаСистемы("del *.* /q", "c:\temp");
КомандаСистемы("cmd");
ЗапуститьПриложение("ШаблонДоговора.doc");
Как реализовать код процедуры в зависимости от режима выполнения (на клиенте, на сервере, во внешнем соединении) ?
#Если ВнешнееСоединениеТогда // Фрагмент кода, который должен выполняться в сессии внешнего соединения. #КонецЕсли
#Если Клиент Тогда // Фрагмент кода, который должен выполняться на клиентском месте. #КонецЕсли
#Если Сервер Тогда // Фрагмент кода, который должен выполняться на сервере. #КонецЕсли
Как при групповой обработке объектов реализовать стратегию "либо все, либо ничего"?
НачатьТранзакцию(); // В переменной "ВыборкаДанных" содержатся данные для записи в справочник. Пока ВыборкаДанных.Следующий() Цикл ЭлементОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); ЭлементОбъект.Код = Выборка.Код; ЭлементОбъект.Наименование = Выборка.Наименование; // Остальные реквизиты ЭлементОбъект.Записать(); КонецЦикла; ЗафиксироватьТранзакцию(); ОтменитьТранзакцию();
Как посчитать сумму по формуле сложного процента?
Функция СложныйПроцент(Кредит, Ставка, Срок = 1) Возврат Кредит*Pow(1 + Ставка/100, Срок); КонецФункции
Универсальные коллекции
Массив
В каких ситуациях обычно используются массивы?
СозданныйМассив = Новый Массив ();
СозданныйМассив = Новый Массив (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);
Как добавить элементы в структуру?
Оппонент = Новый Структура ("Фамилия, Имя, Отчество, Возраст", "Иванов", "Иван", "Иванович", 7); Оппонент.Вставить("Обращение", "Господин"); Оппонент.Вставить("Возраст", 25);
Как обратиться к элементу структуры?
ТекущийВозраст = Оппонет.Возраст; КлючСтруктуры = "Возраст"; ТекущийВозраст = Оппонет[КлючСтруктуры]; ТекущийВозраст = Неопределено; Оппонет.Свойство("Возраст", ТекущийВозраст); Оппонет.Возраст = 32; Оппонет["Возраст"] = 32; Оппонент.Вставить("Возраст", 32);
Как перебрать элементы структуры?
Для Каждого Элемент из СтруктураПараметров Цикл Сообщить(Элемент.Ключ + ": " + Элемент.Значение); КонецЦикла;
Как удалить элемент структуры?
СтруктураПараметров.Удалить("Номенклатура"); СтруктураПараметров. Очистить();
Как в структуре установить значение для элемента с определенным ключом?
Структура = Новый Структура; // Добавить новый элемент. Структура.Вставить("Цвет", WebЦвета.Белый); // Установить значение для элемента с ключом "Цвет". Структура.Вставить("Цвет", WebЦвета.Синий);
Как получить в структуру многомерные данные? Как собрать информацию по установленным в форме журнала отборам?
СтруктураОтборов = Новый Структура; СтруктураПараметровОтбора = Новый Структура; Для Каждого ЭлементОтбора из ЖурналДокументовСписок.Отбор Цикл Если ЭлементОтбора.Использование Тогда СтруктураПараметровОтбора.Очистить(); СтруктураПараметровОтбора.Вставить("Имя", ЭлементОтбора.Имя); СтруктураПараметровОтбора.Вставить("ВидСравнения", ЭлементОтбора.ВидСравнения); СтруктураПараметровОтбора.Вставить("Значение", ЭлементОтбора.Значение); СтруктураПараметровОтбора.Вставить("ЗначениеПо", ЭлементОтбора.ЗначениеПо); СтруктураПараметровОтбора.Вставить("ЗначениеС", ЭлементОтбора.ЗначениеС); СтруктураПараметровОтбора.Вставить("Представление", ЭлементОтбора.Представление); СтруктураПараметровОтбора.Вставить("ПутьКДанным", ЭлементОтбора.ПутьКДанным); СтруктураПараметровОтбора.Вставить("ТипЗначения", ЭлементОтбора.ТипЗначения); СтруктураОтборов.Вставить(ЭлементОтбора.Имя, СтруктураПараметровОтбора); КонецЕсли; КонецЦикла;
Как определить, есть ли в структуре элемент с ключом "Контрагент", и если есть, но содержит пустое значение справочника или Неопределено - удалить этот элемент?
Если Структура.Свойство("Контрагент", ЗначениеЭлемента) Тогда Если ЗначениеЭлемента = Неопределено ИЛИ ЗначениеЭлемента.Пустая() Тогда Структура.Удалить("Контрагент"); КонецЕсли; КонецЕсли; Структура.Контрагент Структура["Контрагент"]
Как из табличной части "Товары" документа получить все строки, где значение реквизита "Цена" равно нулю, а значение реквизита "СтавкаНДС" равно значению "НДС18" перечисления "СтавкиНДС"?
СтруктураДляПоиска = Новый Структура("Цена, СтавкаНДС", 0, Перечисления.СтавкиНДС.НДС18); МассивСтрок = Товары.НайтиСтроки(СтруктураДляПоиска);
Как получить данные о текущей учетной политике бухгалтерского учета организации из периодического регистра сведений на заданную дату?
// Подготовить отбор по измерению "Организация". СтруктураОтбора = Новый Структура("Организация", ЮрЛицо); // Получить данные, актуальные на указанную дату. СтруктураДанных = РегистрыСведений.УчетнаяПолитикаБухгалтерскийУчет.ПолучитьПоследнее(ДатаПолучения, СтруктураОтбора); // Прочитать данные из структуры данных. СпособОценкиМпзЮрЛица = СтруктураДанных.СпособОценкиМПЗ; ДиректКостингЮрЛица = СтруктураДанных.ДиректКостинг;
Как сформировать структуру названий реквизитов табличной части произвольного документа?
Функция СформироватьСтруктуруТабличнойЧастиДокумента(Документ, ИмяТабличнойЧасти) СтруктураТабличнойЧастиДокумента = Новый Структура; Для Каждого Реквизит из Документ.Метаданные().ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты Цикл СтруктураТабличнойЧастиДокумента.Вставить(Реквизит.Имя, Реквизит.Имя); КонецЦикла; Возврат СтруктураТабличнойЧастиДокумента; КонецФункции
Как получить запросом данные табличной части документа, имея структуру названий реквизитов табличной части?
Функция СформироватьЗапросПоТабличнойЧасти(Документ, ИмяТабличнойЧасти, СтруктураПолей) Экспорт ПоляРеквизитов = ""; Для Каждого Реквизит Из СтруктураПолей Цикл ПоляРеквизитов = ПоляРеквизитов + ", Док." + Реквизит.Значение + ?(ЗначениеНеЗаполнено(Реквизит.Ключ), "", " КАК " + СокрЛП(Реквизит.Ключ)); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Док.НомерСтроки " + ПоляРеквизитов + " |ИЗ | Документ." + Документ.Метаданные().Имя + "." + СокрЛП(ИмяТабличнойЧасти) + " КАК Док |ГДЕ | Док.Ссылка = &ДокументСсылка"; // Установить параметры запроса. Запрос.УстановитьПараметр("ДокументСсылка", Документ.Ссылка); Возврат Запрос.Выполнить(); КонецФункции
Соответствие
В каких ситуациях обычно используются объекты типа "Соответствие"?
Как создать соответствие?
СозданноеСоответствие = Новый Соответствие();
Как добавить элементы в соответствие?
ВозрастСотрудников.Вставить(Сотрудник, ВозрастСотрудника); ВозрастСотрудников [Сотрудник] = ВозрастСотрудника;
Как обратиться к элементу соответствия?
ВозрастСотрудника = ВозрастСотрудников.Получить(Сотрудник); ВозрастСотрудника = ВозрастСотрудников [Сотрудник];
Как перебрать элементы соответствия?
Для Каждого Элемент из Замены Цикл Сообщить(Элемент.Ключ + " - " + Элемент.Значение); КонецЦикла;
Как удалить элемент соответствия?
Замены.Удалить(УдаляемыйТовар); Замены. Очистить();
Как получить данные из соответствия?
Значение = КурсыВалютДокумента.Получить(УправленческаяВалюта); Если Значение = Неопределено Тогда Сообщить("Данная валюта в соответствии отсутствует"); Иначе Курс = Значение["Курс"]; Кратность = Значение["Кратность"]; КонецЕсли;
Как получить многоуровневое соответствие видов расчетов, обладающих базовыми видами расчетов?
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Ссылка КАК Ссылка, | ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета, | ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.ВидРасчета.Наименование, | ОсновныеНачисленияОрганизацииБазовыеВидыРасчета.Предопределенный |ИЗ | ПланВидовРасчета.ОсновныеНачисленияОрганизации.БазовыеВидыРасчета КАК ОсновныеНачисленияОрганизацииБазовыеВидыРасчета |ИТОГИ ПО | Ссылка"; Результат = Запрос.Выполнить(); ВыборкаВидовРасчета = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ВидыРасчета = Новый Соответствие; БазовыеВидаРасчета = Новый Соответствие; СвойстваВидаРасчета = Новый Структура("Наименование, Предопределенный"); // Цикл по видам расчета, обладающим базовыми. Пока ВыборкаВидовРасчета.Следующий() Цикл БазовыеВидаРасчета.Очистить(); ВыборкаБазовых = ВыборкаВидовРасчета.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // Цикл по базовым видам расчета. Пока ВыборкаБазовых.Следующий() Цикл // Заполненить значения структуры "СвойстваВидаРасчета". СвойстваВидаРасчета.Наименование = ВыборкаБазовых.Наименование; СвойстваВидаРасчета.Предопределенный = ВыборкаБазовых.Предопределенный; // Заполненить соответствие "БазовыеВидАРасчета". БазовыеВидаРасчета.Вставить(ВыборкаБазовых.ВидРасчета, СвойстваВидаРасчета); КонецЦикла; // Заполнить соответствие "ВидыРасчета". ВидыРасчета.Вставить(ВыборкаВидовРасчета.Ссылка, БазовыеВидаРасчета); КонецЦикла;
Список значений, таблица значений, дерево значений
В каких ситуациях обычно используются списки значений, таблицы значений, дерево значений?
Как создать список значений?
СозданныйСписок = Новый СписокЗначений;
Как добавить элементы в список значений?
СписокСотрудников.Добавить(ТекущийСотрудник, ТекущийСотрудник.ФИО, , Фото); СписокСотрудников.Вставить(Инд, ТекущийСотрудник, ТекущийСотрудник.ФИО, , Фото);
Как найти элемент списка значений?
ЭлементСписка = СписокСотрудников.НайтиПоЗначению(ИскомыйСотрудник); Если ЭлементСписка <> Неопределено Тогда Сообщить(СписокСотрудников.Индекс(ЭлементСписка)); КонецЕсли;
Как обратиться к элементу списка значений?
ЭлементСписка = СписокСотрудников[Инд]; ЭлементСписка = СписокСотрудников.Получить(Инд); Сотрудник = ЭлементСписка.Значение; Представление = ЭлементСписка.Представление; Пометка = ЭлементСписка.Пометка; Картинка = ЭлементСписка.Картинка;
Как перебрать элементы списка значений?
Для Каждого ЭлементСписка Из СписокСотрудников Цикл Сообщить(ЭлементСписка.Значение); КонецЦикла;
СтаршийИндекс = СписокСотрудников.Количество() - 1; Для Сч = 0 по СтаршийИндекс Цикл Сообщить(СписокСотрудников[Сч].Значение); КонецЦикла;
Как удалить элемент списка значений?
СписокСотрудников.Удалить(0);
Индекс = СписокОбъектов.Количество() - 1; Пока Индекс >= 0 Цикл Если ТипЗнч(СписокОбъектов[Индекс].Значение) = Тип("Число") Тогда СписокОбъектов.Удалить(Индекс); КонецЕсли; Индекс = Индекс - 1; КонецЦикла;
Как создать таблицу значений и заполнить ее поля?
ТаблицаЗначений = Новый ТаблицаЗначений; // Создать нужные колонки. ТаблицаЗначений.Колонки.Добавить("Фамилия"); ТаблицаЗначений.Колонки.Добавить("Возраст"); // Добавить новую строку и задать значения в колонках таблицы. НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока.Фамилия = "Иванов"; НоваяСтрока.Возраст = 23; // Добавить новую строку и задать значения в колонках таблицы. НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока["Фамилия"] = "Иванов"; НоваяСтрока["Возраст"] = 23;
Как найти значение в таблице значений?
НайденнаяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение); НайденнаяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение, "Поставщик, Покупатель"); // Сформировать структуру отбора. СтруктураПоиска = Структура("Сотрудник", ИскомоеЗначение); // Найти строки. МассивНайденныхСтрок = ТаблицаЗначений.НайтиСтроки(СтруктураПоиска);
Как перебрать строки таблицы значений?
Для Каждого ТекущаяСтрока Из ТаблицаСотрудников Цикл Сообщить(ТекущаяСтрока.Сотрудник); КонецЦикла; СтаршийИндекс = ТаблицаСотрудников.Количество() - 1; Для Сч = 0 по СтаршийИндекс Цикл Сообщить(СписокСотрудников[Сч].Сотрудник); КонецЦикла;
Как удалить строки (колонки) таблицы значений?
ТаблицаЗначений.Удалить(УдаляемаяСтрока); ТаблицаЗначений.Удалить(0); ТаблицаЗначений.Колонки.Удалить(УдаляемаяКолонка); ТаблицаЗначений.Колонки.Удалить(0); СтаршийИндексКолонок = ТаблицаЗначений.Колонки.Количество() - 1; Индекс = ТаблицаЗначений.Количество() - 1; Пока Индекс > = 0 Цикл Для Сч = 0 По СтаршийИндексКолонок Цикл Если ТипЗнч(ТаблицаЗначений[Индекс][Сч]) = Тип("Число") Тогда ТаблицаЗначений.Удалить(Индекс); Прервать; КонецЕсли; КонецЦикла; Индекс = Индекс - 1; КонецЦикла;
Как заполнить таблицу значений, если имена колонок содержатся в переменных?
НоваяСтрока = ТаблицаЗначений.Добавить(); НоваяСтрока[ИмяКолонки] = Значение;
Как заполнить всю колонку таблицы значений нужным значением?
ТаблицаЗначений.ЗаполнитьЗначения(Ложь, "ФлагФискальногоУчета");
Как таблицу значений "ТаблицаПолучатель" заполнить данными таблицы значений "ИсходнаяТаблица"?
ТаблицаПолучатель = ТаблицаИсходная.Скопировать();
Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл НоваяСтрока = ТаблицаПолучатель.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсходнойТаблицы); КонецЦикла;
ОдноименныеКолонки = Новый Массив(); Для Каждого Колонка Из ИсходнаяТаблица.Колонки Цикл СовпадающаяКолонка = ТаблицаПолучатель.Колонки.Найти(Колонка.Имя); Если СовпадающаяКолонка <> Неопределено Тогда // Получить свойства колонки. Индекс = ТаблицаПолучатель.Колонки.Индекс(СовпадающаяКолонка); Имя = Колонка.Имя; ТипЗначения = Колонка.ТипЗначения; Заголовок = Колонка.Заголовок; Ширина = Колонка.Ширина; // Заменить колонки в таблице-получаетеле. ТаблицаПолучатель.Колонки.Удалить(Индекс); ТаблицаПолучатель.Колонки.Вставить(Индекс, Имя, ТипЗначения, Заголовок, Ширина); // Добавить очередное имя совпадающих колонок в массив. ОдноименныеКолонки.Добавить(Колонка.Имя); КонецЕсли; КонецЦикла; // Цикл перебора строк исходной таблицы. Для Каждого СтрокаИсходнойТаблицы Из ИсходнаяТаблица Цикл // Добавить новую строку в таблицу-получатель. НоваяСтрока = ТаблицаПолучатель.Добавить(); // Заполнить значения в совпадающих ячейках. Для Каждого ИмяКолонки Из ОдноименныеКолонки Цикл НоваяСтрока[ИмяКолонки] = СтрокаИсходнойТаблицы[ИмяКолонки]; КонецЦикла; КонецЦикла;
Как добавить колонки к таблице значений "ТаблицаЗначений" с ограничениями по типу?
// Добавить колонку без ограничений по типу. ТаблицаЗначений.Колонки.Добавить("Объект");
// Ограничения по типам данных колонки: // Только элементы справочника "Контрагенты". ТаблицаЗначений.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
// Подготовка и установка ограничений для данных типа Строка. КвалификаторыСтроки = Новый КвалификаторыСтроки(20, ДопустимаяДлина.Переменная); ДопустимыеТипы = Новый ОписаниеТипов("Строка", , КвалификаторыСтроки); ТаблицаЗначений.Колонки.Добавить("ПримечаниеСтроковоеКороткое", ДопустимыеТипы);
// Расширение уже использованного ранее описания типов. КвалификаторыЧисла = Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Неотрицательный); КвалификаторыДаты = Новый КвалификаторыДаты(ЧастиДаты.Дата); РасширенныеДопустимыеТипы = Новый ОписаниеТипов(ДопустимыеТипы, "Число, Дата", , КвалификаторыЧисла, , КвалификаторыДаты); ТаблицаЗначений.Колонки.Добавить("Примечание", РасширенныеДопустимыеТипы);
Как изменить тип значения колонки таблицы значений, полученной выгрузкой из запроса?
// Создать пустые ссылки. ПустоеОприходование = Документы.ОприходованиеТоваров.ПустаяСсылка(); ПустойВозврат = Документы.ВозвратТоваровОтПокупателя.ПустаяСсылка(); // Выполнить запрос. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Ссылка |ИЗ | Документ.ПоступлениеТоваровУслуг | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ ПЕРВЫЕ 0 | &ПустойДокументОприходование | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ ПЕРВЫЕ 0 | &ПустойДокументВозврат |"; Запрос.УстановитьПараметр("ПустойДокументОприходование", ПустоеОприходование); Запрос.УстановитьПараметр("ПустойДокументВозврат", ПустойВозврат); // Выгрузить в таблицу значений. ТаблицаСсылок = Запрос.Выполнить().Выгрузить();
Как самостоятельно заполнить дерево значений?
Процедура ЗаполнениеДерева(Кнопка) Дерево.Колонки.Очистить(); Дерево.Колонки.Добавить("ИмяКолонки"); // Создать первую строку. Правильнее сказать создать элемент // коллекции. Он помещается в переменную "СтрокаВерхнегоУровня". СтрокаВерхнегоУровня = Дерево.Строки.Добавить(); // В колонку "ИмяКолонки" записать значение "Старшая". СтрокаВерхнегоУровня.ИмяКолонки = "Старшая"; // Создать строку подчиненную "Старшей". ПодчиненнаяСтрока =СтрокаВерхнегоУровня.Строки.Добавить(); ПодчиненнаяСтрока.ИмяКолонки = "Первая подчиненная"; ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить(); ПодчиненнаяВторогоУровня.ИмяКолонки = "Первая нижняя"; ПодчиненнаяВторогоУровня = ПодчиненнаяСтрока.Строки.Добавить(); ПодчиненнаяВторогоУровня.ИмяКолонки = "Вторая нижняя"; ПодчиненнаяСтрока = СтрокаВерхнегоУровня.Строки.Добавить(); ПодчиненнаяСтрока.ИмяКолонки = "Вторая подчиненная"; // Использование метода позволит увидеть результат работы // с деревом значений в табличном поле. ЭлементыФормы.Дерево.СоздатьКолонки(); КонецПроцедуры
Процедура ОткрытиеВетки(Кнопка) // Сделать текущим именно элемент коллекции "Строки". РезультатПоиска = Дерево.Строки.Найти("Первая нижняя", "ИмяКолонки", Истина); Если РезультатПоиска <> Неопределено Тогда ЭлементыФормы.Дерево.ТекущаяСтрока = РезультатПоиска; КонецЕсли; КонецПроцедуры
Прикладные объекты
Справочники
Как создать элемент (группу) справочника?
НовыйЭлемент = Справочники.ДокументыУдостоверяющиеЛичность.СоздатьЭлемент(); НовыйЭлемент.Наименование = "военный билет"; // Установить другие реквизиты. НовыйЭлемент.Записать();
НовыйЭлемент = Справочники.Банки.СоздатьЭлемент(); // Получить ссылку на группу, в которой будет находиться новый элемент. Родитель = Справочники.Банки.НайтиПоКоду("000000001"); НовыйЭлемент.Наименование = "АКБ"; НовыйЭлемент.Код = "000000011"; НовыйЭлемент.Родитель = Родитель; // Установить другие реквизиты. НовыйЭлемент.Записать();
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); // Получить ссылку на группу, в которой должна находиться создаваемая группа. Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Обувь", Истина); НоваяГруппа.Наименование = "Модельная обувь"; НоваяГруппа.Родитель = Родитель; // Установить другие реквизиты. НоваяГруппа.Записать();
// Создать новый элемент в корне справочника. НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); НовыйЭлемент.Наименование = "IT отдел"; НовыйЭлемент.Записать(); // Получить ссылку на родителя добавляемых элементов. Родитель = НовыйЭлемент.Ссылка; // Создать дочерний элемент. НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); НовыйЭлемент.Наименование = "Группа разработки"; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Записать();
Как найти элемент справочника?
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030"); Если РезультатПоиска.Пустая() Тогда // Выполнить действия, предусмотренные в случае, когда элемент не найден. КонецЕсли;
РезультатПоиска = Справочники.Номенклатура.НайтиПоНаименованию("Кроссовки");
РезультатПоиска = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "К-120002");
Как удалить элемент справочника?
// Найти ссылки на удаляемый элемент. МассивСсылок = Новый Массив; МассивСсылок.Добавить(СсылкаНаУдаляемыйЭлемент); НайденныеСсылки = НайтиПоСсылкам(МассивСсылок); Если НайденныеСсылки.Количество() > 0 Тогда Сообщить("Нельзя удалять элемент, на него имеются ссылки"); Иначе УдаляемыйЭлемент = СсылкаНаУдаляемыйЭлемент.ПолучитьОбъект(); УдаляемыйЭлемент.Удалить(); КонецЕсли;
УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);
Как перебрать элементы справочника?
Выборка = Справочники.Номенклатура.ВыбратьИерархически(); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; // Обращение к другим данным справочника. КонецЦикла;
Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |АВТОУПОРЯДОЧИВАНИЕ"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;
Как выбрать все элементы из определенной группы?
Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; КонецЦикла;
Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |ГДЕ | Родитель = &Родитель |АВТОУПОРЯДОЧИВАНИЕ"); Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;
Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель); Пока Выборка.Следующий() Цикл Наименование = Выборка.Наименование; КонецЦикла; Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка, | Наименование |ИЗ | Справочник.Номенклатура |ГДЕ | Родитель В ИЕРАРХИИ(&Родитель) |АВТОУПОРЯДОЧИВАНИЕ"); Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Наименование = Результат.Наименование; КонецЦикла;
Как перебрать элементы подчиненного справочника с помощью запроса?
Процедура ПереборПодчиненыхЭлементов(Контрагент) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактныеЛица.Ссылка |ИЗ | Справочник.КонтактныеЛица КАК КонтактныеЛица |ГДЕ | КонтактныеЛица.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Контрагент); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; КонецПроцедуры
Как перебрать элементы подчиненного справочника с помощью выборки справочника?
Процедура ПереборПодчиненыхЭлементов(Контрагент) // Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; КонецПроцедуры
Как открыть форму списка (элемента) справочника?
Форма = Справочники.Номенклатура.ПолучитьФормуСписка(); Форма.Открыть();
Форма = Справочники.ХранилищеДополнительнойИнформации.ПолучитьФорму("ФормаСпискаФайловИИзобр ажений"); Форма.Открыть();
Элемент = Справочники.Номенклатура.НайтиПоКоду("00030"); Форма = Элемент.ПолучитьФорму(); Форма.Открыть();
Как добавить запись в табличную часть элемента справочника?
ЭлементОбъект = СсылкаКонтрагент.ПолучитьОбъект(); НоваяСтрока = ЭлементОбъект.ВидыДеятельности.Добавить(); // Заполнить реквизиты. НоваяСтрока.ВидДеятельности = ПолеВводаВидДеятельности; ЭлементОбъект.Записать();
Как удалить строки из табличной части справочника?
ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект(); ОбъектСправочника.ВидыДеятельности.Очистить(); ОбъектСправочника.Записать();
Вступайте в нашу телеграмм-группу Инфостарт