1с перебор списка значений.

В данном юните мы познакомимся с новым типом данных языка 1С, который называется СпысокЗначений.

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

// создали список значений

Список.Добавить(23);

Пока все очень похоже на массив, не правда ли? Но идем дальше. Чтобы теперь вывести эти числа пользователю, напишем:

// пробежимся циклом по каждому элементу списка Для Каждого Элемент Из Список Цикл Сообщить(Элемент.Значение);

// выводим значение элемента КонецЦикла;

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

Рассмотрим некоторые дополнительные возможностиСяис/ся Значений.

Умеет сортировать

К, примеру, мы легко можем отсортировать список значений. Список это умеет делать сам:

Список.СортироватьПоЗначению(НаправлениеСортировки.Возр); В случае с обычным массивом нам пришлось бы реализовывать один из алгоритмов сортировки (например, "пузырек").

Умеет искать

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

ВвестиЧисло(Число); // ввели число от пользователя НайденныйЭлемент = Список. НайтиПоЗначению(Число);

Если НайденныйЭлемент = Неопределено Тогда ОткрытьЗначение("Число " + Число + " в списке не найдено!"); Иначе

ОткрытьЗначение("Число " + Число + " присутствует в списке. Вот оно:" + НайденныйЭлемент.Значение);

КонецЕсли; СписокЗначений

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

Список значений, также как и массив, поддерживает вставку и удаление элементов:

Список. Вставить(0, 1000);

// вставляем тысячу в самое начало списка Список.Удалить(О); // и тут же удаляем ее из списка Список. Вставить(Список.Количество(), 13);

// вставляем 13 в конец списка Сообщить(Список[Список.Количество() - 1]);

// выводим последний элемент списка (13)

Поддерживает квадратные скобки

Как вы уже поняли, нумерация элементов списка также идет с нуля, и мы можем обратиться к любому элементу по его индексу, используя квадратные скобки:

Сообщить(Список.Значение); // вывели второй элемент списка Таким образом, мы можем пробежаться по всем элементам списка еще и так:

Для А = 0 По Список.Количество() - 1 Цикл Сообщить(Список[А].Значение);

КонецЦикла;

Умеет создавать свою копию

У списка значений есть просто шикарная возможность - он умеет сам создавать свою копию:

КопияСписка = Список.Скопировать();

// сделали копию списка // теперь можем смело менять КопияСписка // при этом исходный список меняться не будет КопияСписка. Значение = 123456;

Умеет превращаться в массив

Ну и, наконец, вы можете в любой момент легко выгрузить все элементы списка в массив:

МассивЧисел = Список. ВыгрузитьЗначения();

// выгрузили в массив

Для А = 0 По МассивЧисел.Количество() - 1 Цикл

Сообщить(МассивЧисел[А]); // не нужно указывать // опцию Значение

КонецЦикла;

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

Необходимо ввести от пользователя 5 чисел, найти наибольшее и наименьшее из них и вывести их пользователю. В решении должен использоваться список значений.

Решение

Список = Новый СписокЗначений;

// создали список значений Для А = 1 По 5 Цикл Число = 0;

ВвестиЧисло(Число); // введем число от пользователя Список.Добавить(Число); // и добавим его в список КонецЦикла; // и так 5 раз

// сделаем сортировку списка чисел

Список. Сортировать ПоЗначению(НаправлениеСортировки. Возр);

// после сортировки первый элемент списка - это и есть // наименьший элемент, а последний - наибольший ОткрытьЗначение("Самый маленький элемент" + Список +

", а самый большой " + Список[Список.Количество() - 1]);

Полный синтаксис (нажмите, чтобы раскрыть)

СписокЗначений

Описание:

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

Элементы коллекции: ЭлементСпискаЗначений

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл . При обходе выбираются элементы коллекции.

Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс элемента (нумерация с 0 ).

Свойства:

Методы:

Вставить (Индекс, Значение, Представление, Пометка, Картинка)Вставляет новый элемент в список значений на позицию с указанным индексом. ВыбратьЭлемент (Заголовок, Элемент)Вызывает окно для интерактивного выбора одного из элементов, входящих в список значений. Элемент - элемент, на который следует изначально спозиционировать список значений при интерактивном выборе. Если значением параметра не является элемент списка значений, входящий в данный список, позиционирования не произойдет. ВыгрузитьЗначения ()Создает массив и копирует в него значения элементов списка значений. Добавить (Значение, Представление, Пометка, Картинка)Добавляет новый элемент в конец списка значений. ЗагрузитьЗначения (МассивЗначений)Загружает список значений значениями из переданного массива. При этом все прежние элементы списка удаляются. ЗаполнитьПометки (Пометка)Устанавливает пометку у всех элементов списка значений. Индекс (Элемент)Получает индекс элемента в списке значений. Если не найдено, то возвращается -1. Количество ()Получает количество элементов списка значений. НайтиПоЗначению (ИскомоеЗначение)Осуществляет поиск значения элемента списка значений. Если ни один элемент не хранит значения, равного искомому, то возвращается значение Неопределено . НайтиПоИдентификатору (Идентификатор)Получает элемент списка значений по идентификатору. Если элемент не найден, то возвращается Неопределено . ОтметитьЭлементы (Заголовок)Устанавливает или снимает (интерактивно) пометки у элементов списка значений. Возвращает Истина , если в диалоге нажата кнопка "ОК", Ложь - в противном случае. Очистить ()Очищает список значений, удаляя из него все элементы. ПоказатьВыборЭлемента (ОписаниеОповещенияОЗакрытии, Заголовок, Элемент)Вызывает окно для интерактивного выбора одного из элементов, входящих в список значений. ПоказатьОтметкуЭлементов (ОписаниеОповещенияОЗакрытии, Заголовок)Предназначен для интерактивной установки состояний пометок у элементов списка значений. Получить (Индекс)Получает значение по индексу. Работает аналогично оператору . Сдвинуть (Элемент, Смещение)Сдвигает элемент списка значений на заданное количество позиций вперед или назад. Скопировать ()Создает копию списка значений. СортироватьПоЗначению (Направление)Сортирует список значений в порядке возрастания или убывания хранимых элементами значений. См. пример ниже. СортироватьПоПредставлению (Направление)Сортирует список значений по возрастанию или по убыванию в алфавитном порядке представлений входящих в состав списка значений элементов. См. пример ниже. Удалить (Элемент)Удаляет элемент из списка значений, где Элемент - индекс удаляемого элемента, либо сам элемент.

Конструкторы:

Новый СписокЗначений
&НаКлиенте Процедура ВыполнитьКод(Команда) /// Как создать список значений в 1с 8.3, 8.2 Список = Новый СписокЗначений; /// Как добавить элемент в список значений в 1с 8.3, 8.2 // параметры метода добавить: // - значение // - представление // - отметка (необ.) // - картинка (необ.) Список. Добавить( 1980 , // значение элемента "Год рождения Васи" // представление ) ; Список. Добавить(1985 , "Год рождения Юли" ) ; // значения могут быть разных типов Список. Добавить("Полина" , "Имя ребёнка" ) ; /// Как вставить элемент в список значений в 1с 8.3, 8.2 // вставляем в позицию №2 (элементы нумеруются с 0) // элемент со значением 2010 и представлением // "Год рождения их совместной дочки" Список. Вставить(2 , 2010 , "Год рождения их совместной дочки" ) ; /// Как обойти элементы списка значений в 1с 8.3, 8.2 Для Каждого Элемент Из Список Цикл Сообщить( Элемент. Представление + ": " + Строка(Элемент. Значение) ) ; КонецЦикла ; /// Как очистить список значений в 1с 8.3, 8.2 Список. Очистить() ; Список. Добавить("Понедельник" ) ; Список. Добавить("Вторник" ) ; Список. Добавить("Среда" ) ; /// Как узнать количество элементов списка значений, а также /// получить элемент списка по его индексу в 1с 8.3, 8.2 // нумерация с нуля Для Индекс = 0 По Список. Количество() - 1 Цикл Сообщить(Список[ Индекс] ) ; КонецЦикла ; /// Как найти элемент списка по его значению в 1с 8.3, 8.2 ЗначВторник = Список. НайтиПоЗначению("Вторник" ) ; /// Как узнать индекс элемента в списке в 1с 8.3, 8.2 Сообщить(Список. Индекс(ЗначВторник) ) ; // 1, так как нумерация с нуля /// Как отсортировать список по его значениям в 1с 8.3, 8.2 // было: понедельник, вторник, среда Список. СортироватьПоЗначению(НаправлениеСортировки. Убыв) ; // стало: среда, понедельник, вторник /// Как удалить элемент из списка значений в 1с 8.3, 8.2 // удаляем первый элемент // параметр: элемент списка // или индекс элемента // можно так Список. Удалить(Список[ 0 ] ) ; // или так // Список.Удалить(0); /// Как сдвинуть элемент списка значений в 1с 8.3, 8.2 // сдвигаем нулевой элемент на одну позицию вперёд // было: понедельник вторник Список. Сдвинуть(0 , 1 ) ; // стало: вторник понедельник /// Как сделать копию списка в 1с 8 КопияСписка = Список. Скопировать() ; Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; /// Как выгрузить значения списка в массив в 1с 8.3, 8.2 МассивЦветов = Цвета. ВыгрузитьЗначения() ; /// Как загрузить значения списка из массива в 1с 8.3, 8.2 Цвета. ЗагрузитьЗначения(МассивЦветов) ; КонецПроцедуры /// Как сделать немодальный выбор значения из списка /// значений в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьНемодальныйВыборЗначения(Команда) Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; // процедура ПослеВыбораЭлемента определена чуть ниже ОповещениеПослеВыбораЭлемента = Новый ОписаниеОповещения( "ПослеВыбораЭлемента" , ЭтотОбъект ) ; Цвета. ПоказатьВыборЭлемента( ОповещениеПослеВыбораЭлемента, "Выберите любимый цвет" ) ; КонецПроцедуры &НаКлиенте Процедура ПослеВыбораЭлемента(Элемент, Параметры) Экспорт Если Элемент <> Неопределено Тогда Сообщить(Элемент. Значение) ; КонецЕсли ; КонецПроцедуры /// Как сделать немодальную отметку значений из списка /// значений в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьНемодальнуюОтметкуЗначений(Команда) Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; // процедура ПослеОтметкиЭлементов определена чуть ниже ОповещениеПослеОтметкиЭлементов = Новый ОписаниеОповещения( "ПослеОтметкиЭлементов" , ЭтотОбъект ) ; Цвета. ПоказатьОтметкуЭлементов( ОповещениеПослеОтметкиЭлементов, "Выберите любимые цвета" ) ; Цвета. ЗаполнитьПометки(Истина ) ; КонецПроцедуры &НаКлиенте Процедура ПослеОтметкиЭлементов(Элементы, Параметры) Экспорт Если Элементы <> Неопределено Тогда Для Каждого Цвет Из Элементы Цикл Если Цвет. Пометка Тогда Сообщить(Цвет. Значение) ; КонецЕсли ; КонецЦикла ; КонецЕсли ; КонецПроцедуры /// Как сделать модальный выбор значения из списка в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьМодальныйВыборЗначения(Команда) Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; ВыбЦвет = Цвета. ВыбратьЭлемент("Выберите любимый цвет" ) ; Если ВыбЦвет <> Неопределено Тогда Сообщить(ВыбЦвет. Значение) ; КонецЕсли ; КонецПроцедуры /// Как сделать модальную отметку значений из списка /// значений в 1с 8.3, 8.2 &НаКлиенте Процедура КакСделатьМодальнуюОтметкуЗначений(Команда) Цвета = Новый СписокЗначений; Цвета. Добавить("Красный" ) ; Цвета. Добавить("Зелёный" ) ; Цвета. Добавить("Синий" ) ; Если Цвета. ОтметитьЭлементы("Выберите любимые цвета" ) Тогда Для Каждого Цвет Из Цвета Цикл Если Цвет. Пометка Тогда Сообщить(Цвет. Значение) ; КонецЕсли ; КонецЦикла ; КонецЕсли ; // а вот так можно разом установить все отметки // списка в определенное значение Цвета. ЗаполнитьПометки(Истина ) ; КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере

Под номенклатурой в 1С 8.3 подразумеваются материалы, полуфабрикаты, оборудование, услуги, возвратная тара, спецодежда и пр. Все эти данные хранятся в справочнике «Номенклатура». Попасть в него можно из раздела «Справочники», подраздел «Товары и услуги», пункт «Номенклатура»

Перед вами откроется список позиций справочника, имеющий многоуровневую иерархическую структуру.

В этой статье мы пошагово рассмотрим всю инструкцию по начальному заполнению номенклатуры в 1С 8.3 на примере

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

Создадим новую группу. В форме списка справочника «Номенклатура» нажмите на кнопку «Создать группу».

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

Как видно на рисунке ниже, созданная нами группа поместилась в «Материалы». Если ее необходимо переместить в иную группу или в корень, откройте контекстное меню и выберите пункт «Переместить в группу». Откроется окно, где будет необходимо указать новое место расположения.

Создание новой номенклатурной позиции

Перейдем к добавлению самой номенклатуры. Для этого в форме списка справочника нажмите на кнопку «Создать». Перед вами откроется карточка новой номенклатуры.

Заполните поле «Наименование». Значение в поле «Полное наименование» подставится автоматически. Обратите внимание, что полное наименование выводится в отчеты, печатные формы документов, ценники и т. п. Поле «Наименование» служит для удобного поиска номенклатуры в программе.

При необходимости заполните остальные реквизиты:

  • Поля «Вид номенклатуры» и «Входит в группу» заполняются автоматически из данных той группы, в которой создается новая номенклатурная позиция. При необходимости их можно изменить.
  • Значение в поле «Единица» является единицей хранения остатков данной номенклатуры.
  • Налоговая ставка, указанная в реквизите «% НДС» при необходимости может быть изменена уже при формировании документов.
  • «Цена продажи» по умолчанию указывается в документах продажи. Данную настройку можно изменить, нажав на гиперссылку «?» рядом с данным полем.
  • В разделе «Производство» можно указать статью затрат данной номенклатурной позиции, и ее спецификацию (для готовой продукции), проще говоря состав.
  • В зависимости от особенностей номенклатуры, заполняются остальные разделы, такие как «Алкогольная продукция» и «Импортный товар».

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

Что такое вид номенклатуры в 1С 8.3 и как их настроить

Для того чтобы настроить виды номенклатуры, нажмите на соответствующую гиперссылку в форме списка справочника «Номенклатура».

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

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

Счета учета номенклатуры в 1С 8.3

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

В стандартной конфигурации 1С Бухгалтерия 3.0 данный регистр уже заполнен. Но при необходимости его можно скорректировать вручную.

Счета учета можно настроить:

  • по конкретной номенклатурной позиции;
  • по номенклатурной группе;
  • по виду номенклатуры;
  • по складу;
  • по типу склада;
  • по организации;
  • по всей номенклатуре, указав в качестве значения, пустую ссылку.

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

Установка цен номенклатуры

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

Зайдите в карточку элемента справочника «Номенклатура» и перейдите по гиперссылке «Цены».

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

Смотрите также видео про номенклатуру:

Статья продолжает цикл «Первые шаги в разработке на 1С».

В конфигурации на платформе «1С:Предприятие» при выводе информации наиболее часто используются таблицы, которые отображают различные информационные списки. Работа с такими списками может происходить как в форме списка, так и в форме элемента (обработки).

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

Применимость

В статье рассматривается Управляемый интерфейс в варианте «Версии 8.2» конфигурации, разработанной на платформе 1C 8.3.4.482.

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

Если же вы работаете в новом интерфейсе «Такси», то названия некоторых команд настройки, а также общая последовательность действий может несколько отличаться.

Кроме того, в актуальной версии платформы добавились новые возможности поиска в списках.

Настройка форм и возможности работы со списками

Для элементов управляемых форм существует возможность изменять видимость и некоторые другие свойства. Для этих целей в управляемой форме в меню Все действия служит пункт Изменить форму .

После нажатия данной команды появится окно «Настройка формы».

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

Можно изменять порядок реквизитов. Добавлять новую группу и помещать в нее некоторые реквизиты (элементы), определяя вариант их группировки (горизонтальная, вертикальная).

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

Можно определять реквизит, который будет активизироваться при открытии формы.

Важным свойством является возможность добавления на форму новых полей. Это становится возможным через реквизиты ссылочного типа.

Например, имея на форме реквизит ссылочного типа Контрагент , можно добавить Контактное лицо , если данный реквизит присутствует в справочнике «Контрагенты».

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

Для возврата к стандартным настройкам в окне «Настройка формы» в меню Все действия следует выбрать пункт Установить стандартные настройки .

Кроме настройки форм в управляемом интерфейсе существует возможность настройки списков (элементов справочников, документов).

В форме списка в меню Все действия содержится специальная команда Настроить список .

Откроется окно «Настройка списка». В данном окне можно производить отбор, сортировку, определять условное оформление и группировку.

На рисунке представлена форма для редактирования отбора.

Отбор можно производить по нескольким полям. В этом случае по умолчанию отбор будет работать по условию И. Можно также использовать условия ИЛИ и НЕ.

Для использования условия ИЛИ (НЕ) нужно с помощью команды Сгруппировать условия добавить соответствующую группу (Группу ИЛИ, Группу НЕ).

На рисунке представлена форма для определения полей сортировки.

Возможна настройка группировки. На рисунке в качестве поля для группировки выбран Контрагент .

На очередном рисунке представлено, как будет выполняться группировка.

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

На рисунке представлен результат условного оформления фоном поля Сумма .
Когда сумма > 100000.

Следует отметить, что существует возможность просмотра справочников в режиме иерархии.

Иерархический просмотр справочников возможно настраивать через пункт Режим просмотра в меню Все действия . Можно выбрать один из вариантов: Иерархический список , Список , Дерево .

Также имеется возможность настраивать собственную группировку элементов справочников по некоторым реквизитам.

Например, можно сгруппировать номенклатуру по поставщику. Пример аналогичен тому, где мы рассматривали группировку документов «Реализация товаров и услуг» по контрагентам.

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

Выделение объектов в списке осуществляется с удержанием клавиши Shift или Ctrl .

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

Для поиска по значению в текущей колонке достаточно спозиционировать курсор на нужной колонке и нажать на кнопку Найти в командной панели. Появится окно, в котором следует также нажать на кнопку Найти .

Для повышения конкретизации поиска можно использовать флажок Искать в найденном .

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

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