Габец А. П. - 1С Предприятие 8.0. Простые примеры разработки

Книга представляет собой справочное пособие, иллюстрирующее простые примеры разработки алгоритмов на платформе «1С:Предприятие 8.0».
Издание будет полезно начинающим разработчикам, администраторам, у которых на предприятии внедряется система, и продвинутым пользователям, которые хотят самостоятельно дорабатывать прикладные решения.
Книга содержит большое количество практических примеров, сгруппированных по тематике использования. Кроме этого книга содержит подробный указатель на используемые в примерах свойства, методы и события встроенного языка.
Данная книга дополняет, но не заменяет штатную документацию к программному продукту, входящую в комплект поставки, и позволяет более эффективно использовать возможности программы.
Введение
Идея написать эту книгу возникла у нас не случайно. Платформа системы «1С: Предприятие 8.0» специально ориентирована на то, что ее будут использовать не только как средство разработки, но и как инструмент быстрой доработки «на месте». В таких случаях специалисту важно в сжатые сроки решить конкретную задачу без долгого изучения всех возможностей системы.
Как преподаватели учебного центра - мы, разумеется, только за то, чтобы специалист был изначально методологически и всесторонне «подкован». Но как практикующие разработчики, кроме всего прочего, зачастую и сами с большей радостью используем описанные примеры решения тех или иных задач, нежели пытаемся воссоздать их по памяти или по методическим материалам.
Собственно говоря, именно с целью помочь в подобных ситуациях, и была написана эта книга. Основой ее создания послужил опыт преподавания «программистских курсов» по системе, работа на конкретных внедрениях и активное общение в форумах, посвященных данному кругу проблем. Фактически книга составлена в результате анализа того, какие задачи приходится решать чаще всего как начинающим, так и продвинутым разработчикам.
При подборе примеров мы исходили из того, что спектр навыков и знаний специалистов, которые будут работать с данным изданием, может быть очень широк. Поэтому пусть Вас не смущают некоторые особо «бородатые» советы или, наоборот, - отсутствие подробного описания тех или иных технологий. А для тех, кто практически не знаком с системой «1С:Предприятие 8.0», материал самых простых примеров, объясняющих азы использования объектов и механизмов системы, помечен специальным значком ф.
Кроме этого, поскольку работа с настоящим изданием не требует досконального чтения всего материала, по тексту намеренно вставлены повторы некоторых приемов или предостережений в тех случаях, когда это имеет смысл.
Также следует заметить, что мы стремились сделать именно сборник простых примеров, поэтому некоторые материалы вошли в издание в «разрезанном» виде. То есть вместо сложных и громоздких «сквозных» примеров, мы старались представить отдельные части, «кирпичики», из которых впоследствии можно собрать желаемое.
Стиль изложения соответствует цели издания, поэтому материал предоставляется в форме вопросов и ответов, как, например, в следующем разделе:
Как работать с изданием?
Решение данного вопроса - многовариантно.
Можно читать классическим способом. От начала до конца, помечая или закладывая понравившиеся места. Впоследствии, при возникновении конкретных вопросов, зрительная память или закладки помогут найти нужное решение.
Можно читать выборочно. Любимая поговорка крутых программистов: «Мануал открывать надо уже в последний момент». То есть, проблема возникла - нашли раздел и попытались найти решение, или идею решения по аналогии. Но поговорку, на самом деле, мы совсем не одобряем!
Можно вообще не читать. Не читать комментарии. А рассматривать издание как сборник «шпаргалок» кода, решающего те или иные вопросы.
Остальные варианты использования издания или не очень нравятся авторам, или достаточно опасны. Например, не надо рассматривать эту книжку как замену полноценного обучения или работы с методическими материалами.
Примитивные типы, системные функции
Как явно указать нужную дату?
Для указания нужной даты можно пользоваться:
• литералом вида ТГГГММДДччммсс' встроенного языка;
• встроенной функцией преобразования значений Дата();
• литералом типа Дата языка запросов.
В таблице ниже приводится ряд возможностей явного указания даты при помощи встроенного языка:
Выражение |
Значение результата (тип) |
'20050308' |
08.03.2005 0:00:00 (Дата) |
Дата(2005, 1,1) |
01.01.2005 0:00:00 (Дата) |
Дата(1, 1, 1) |
01.01.0001 0:00:00 (Дата) |
Дата(2005, 1, 1, 10, 29, 50) |
01.01.2005 10:29:50 (Дата) |
В случае же, если в тексте запроса необходимо жестко указать некую дату - используется литерал ДАТАВРЕМЯ(). Например, поле со значением '01.01.2005 0:00:00' можно получить так:
ДАТАВРЕМЯ(2(Ю5,01.01)
Как проверить дату на пустое значение?
Значение типа Дата не бывает «пустым». Если в явном виде значение переменной типа Дата не задано, она будет иметь значение по умолчанию: начало первого дня первого месяца первого года (00 часов 00 минут 00 секунд). Поэтому проверку проще сделать так:
Если ДатаПроверяемая = Дата(I, I, 1)Тогда Сообщить("Пустая дата!");
КонецЕсли;
Как сравнить две даты (дни)?
Точность данных типа Дата - до секунды. А сравнивать нужно именно дни.
Тогда проще предварительно для сравниваемых дат воспользоваться функцией, которая возвращает, например, дату начала дня. А потом уже сравнивать полученные значения.
Если НачалоДня(Дата 1) = НачалоДня(Дата2) Тогда СообщитьСДни совпадают!");
КонецЕсли;
Как прибавить к дате день, месяц?
Так как тип Дата содержит дату и время с точностью до секунды, то для того чтобы к некоторой дате прибавить один день, нужно увеличить ее значение на количество секунд, содержащихся в одном дне:
СледующийДень = ТекущаяДатаО + 60 * 60 * 24:
Для увеличения или уменьшения даты на некоторое количество месяцев, можно использовать:
• функции работы со значением типа Дата во встроенном языке;
• функции работы со значением типа Дата в запросах.
В таблице ниже приводится ряд возможностей использования функций встроенного языка:
Выражение |
Значение результата (тип) |
ДобавитьМесяц(Дата(2005, 1, 31), 1) |
28.02.2005 0:00:00 (Дата) |
ДобавитьМесяц(Дата(2005, 2, 28), -1) |
28.01.2005 0:00:00 (Дата) |
КонецМесяца(ДобавитьМесяц(Дата(2005, 2, 28), -1)) |
31.01.2005 23:59:59 (Дата) |
А вот пример функции, добавляющей количество дней к исходной дате при помощи запроса:
Функция ПолучитьДень(ИсходнаяДата, Количсс і воПрибавлясмыхДнсй)
Запрос = Новый Запрос("
ІВЫБРАТЬ
I ДОБАВИТЬКДАТЕ(&ИсходнаяДата. ДЕНЬ, &Количсство) как Дата");
Запрос.УстановитьПараметрС'ИсходнаяДата", Исходная Дата); Запрос.Установиі(.Параметре"Количество", КоличествоПрибавляемыхДней):
Возврат Запрос.Выполннть().Выгрузить()[0].Дата;
КонецФункции
В тексте запроса используем функцию ДОБАВИТЬКДАТЕ(). В качестве параметров ей необходимо передать исходную дату, тип добавляемых периодов (в нашем случае жестко прописали «День») и количество добавляемых периодов.
Первый и последний параметры передали запросу, считав их из параметров (заголовка) нашей функции.
Далее запрос выполняется, и из него получаем значение выходного поля по первой (и единственной) строке.
Результаты выполнения вышеприведенной функции будут такими:
ПолучитьДень('20052802', 10) = 10.03.2005 0:00:00
ПолучтъДень(
,20042802', 10) - 09.03.2004 0:00:00, поскольку 2004 год был високосным!
Как можно проверить тип значения переменной на равенство нужному?
ИмяНужногоТипа = "ДокументСсылка.РеализацияТоваров";
Если ТипЗнч(ОбрабатываемыйДокумент) = Тии(ИмяНужногоТипа) Тогда //Строки кода, выполняемые при истинности условия.
КонецЕсли;
ТипЗнч() - функция языка, возвращающая по значению его тип. Тип () - функция языка, возвращающая значение типа Тип по
строковому имени типа.
Как очистить реквизит формы, имеющий ссылочныйтип?
К примеру, реквизит (имя «Товар») имеет тип СправочникСсылка.Номенклатура. Для очистки значения в связанном с ним элементе управления на форме, необходимо выполнить строку кода:
Товар = Справочники. Номенклатура. ПустаяСсылкаО;
То есть необходимо установить значение по умолчанию. А им, в данном случае, будет пустая ссылка на элемент справочника «Номенклатура».
Как очистить значение, имеющее тип «Хранилище значения»?
Очистить значение, записанное в реквизит или ресурс (имя «РеквизитХранилище») можно следующим образом:
РеквизитХранилише = Неопределено:
Как проверить тип значения, помещенного в реквизит имеющий тип «Хранилище значения»?
По причинам не связанным с возможностями системы 1С:Предприятие 8.0, в реквизит «Фотография» (тип ХранилищеЗначения) справочника «Сотрудники» помещалась либо Строка (преобразованная к типу ХранилищеЗначения), либо Картинка (преобразованная к типу ХранилищеЗначения). Как проверить, что было записано?
Проверку можно осуществить, используя следующие строки кода:
Значение = Фотография.ПолучитьО:
Если Значение о Неопрсделено Тогда Если ТипЗнч(Значение) = ТипГСтрока") Тогда // Обработать строку.
ИначеЕсли ТипЗнч(Значение) = ТнпСКартинка”) Тоі да
// Обработать картинку.
Сообщить(" Картинка");
КонецЕсли;
КонецЕели;
Следует отметить, что в реквизит имеющий тип ХранилищеЗначения можно поместить только значение, имеющее тип ХранилищеЗначения. Работа со значением, помещенным в хранилище значения, может начаться только после его получения (метод Получить()). После получения значение «восстанавливает свой прежний тип». Если полученное значение равно Неопределено, то это означает, что никакое значение в реквизит не записывалось.
Как сжать данные, помещаемые в хранилище значения?
Допустим, в реквизит «СопроводительнаяИнформация» (тип значения - Хранилище значения) помещается значение переменной «ПомещаемоеЗначение». Нужно обеспечить максимальное сжатие данных закладываемого значения.

Вторым параметром конструктора хранилища значения передается объект СжатиеДанных. Он тоже получен соответствующим конструктором, с указанием максимального уровня сжатия.
Как предоставить пользователю возможность выбора значения составного типа?
МассивТипов = Новый Массив;
МассивТ ипов.Добавить(Тип("С'правочникСсыакаФи'іЛица")) // Добавить другие типы.
ОписамисВозможныхТипов = Новый ОписаниеТипов(МассивТипов); ПолученноеЗначение = Неопредслено; ВвестиЗначеииеШолученноеЗначение,
"Выберите значение:",
ОпнсаниеВозможныхТипов);
Для реализации этой задачи необходимо воспользоваться конструктором объекта ОписаниеТипов. А для него необходимо передавать в качестве параметра массив разрешенных для вводимого значения типов значения.
Когда конструктором «ОписаниеВозможныхТипов» собрано -применяем функцию для вызова диалога ввода данных ВвестиЗначениеО.
Первым параметром функции необходимо указать доступную в данном модуле переменную для принятия введенного значения. Вторым - заголовок открываемого окна. Третьим - объект ОписаниеТипов.
После ввода значения пользователем можно считать значение с переменной, переданной первым параметром.
Как применить округление при работе с вычисляемыми числовыми полями в запросе?
Например, составляется запрос для оценок средней цены продажи по данным регистра «Продажи». Для получения данных с точностью до двух знаков после запятой текст запроса может выглядеть следующим образом:
ВЫБРАТЬ |
|
ПродажиОбороты. Номенклатура.
ВЫРАЗИТЫ |
|
П родажиОбороты. Стой мостьОборотЯ 1 родажиОбороты. Кол и чсствоОборот |
|
КАК ЧИСЛО(15, 2)) |
КАК СредняяЦенаПродажи |
|
ИЗ |
|
РегистрНакоплення.Продажи.Обороты(&ДатаНач. &ДатаКон) |
КАК ПродажиОбороты |
|
Источником для запроса является виртуальная таблица «РегистрНакопления.Продажи.Обороты», построенная по данным регистра в интервале между «ДатаНач» и «ДатаКон».
В качестве выходных полей берем «Номенклатура» и результат деления значения полей источника «СтоимостьОборот» и «КоличествоОборот». Причем оператором ВЫРАЗИТЬ() тип последнего поля приводится к примитивному типу ЧИСЛО с определенным форматом (длинна 15, точность 2).
Как вывести многострочное предупреждение?
Переменные «Остаток» и «Зарезервировано» содержат значения, которые необходимо вывести в виде предупреждения. Кроме того, нужно еще вывести свободный остаток, вычисляемый по формуле:
СвободныйОстаток = Остаток - Зарезервировано.
Все это может быть выполнено следующим образом:
Предупреждениер'На складе: ” + Остаток + Снмволы.ПС +
"В речерве : " + Зарезервировано + Символы.ПС + "Свободный остаток:" + (Остаток - Зарезервировано), 20,
"Состояние остатков''):
Процедура глобального контекста Предупреждение() выводит на экран модальное окно предупреждения. Текст предупреждения передается первым параметром, вторым - таймаут, содержащий указание количества секунд, через которое окно самостоятельно закроется (если раньше его не закроет пользователь), третьим - указывается заголовок окна.
Многострочность предупреждения в нашем примере осуществляется за счет добавления значения ПС (перевод строки) системного набора значений СИМВОЛЫ в текст предупреждения.
Обратите внимание на вычисление свободного остатка в скобках -для обеспечения корректности выполнения арифметических действий и преобразования данных к типу Строка.
Кроме того, хотелось бы предупредить об опасности попыток применения процедуры Предупреждение() в ходе проведения документов. Проведение документов выполняется в транзакции, поэтому использование каких либо интерфейсных решений, останавливающих работу системы, является совершенно неприемлемым. В подобных случаях лучше информировать пользователей посредством Сообщить().
Какпри выполнении обработки сообщить пользователю текущее время?
ТекущееВрсмя = Формат(ТекушаяДата(), "ДЛФ=В"); Сообщить(ТекущссВремя);
Метод ТекущаяДата() возвращает системную дату. Тип значения -Дата. В его значение входит и дата и время.
Для получения представления только времени можно применяем функцию Формат().
Как вывести число прописью по-русски, но без дробной части?
Для этого используется функция ЧислоПрописью(). У нее могут быть указаны в качестве параметров:
• преобразуемое число;
• форматная строка;
• параметры предмета исчисления (вид этой форматной строки определяется значением кода локализации).
Все возможные варианты локализаций описаны в файле Locllnfo.txt, входящем в комплект поставки программы.
Для решения нашей задачи можно использовать следующий текст:
ФорматнаяСтрока = "JI=ru_RU”; ПарамстрыПредметаИсчисления = О";
С ообщить(ЧислоПрописью( ВыводимоеЧисло, ФорматнаяСтрока, ПараметрыПредмстаИсчисления)):
В форматной строке указываем код локализации - Русский(Россия). В параметрах предмета исчисления показываем, что дробная часть не должна содержать ни одного разряда.
Для ВыводимоеЧисло = 234,4 результат будет: «Двести тридцать четыре».
Как вывести число прописью по-русски, с указанием сотых в дробной части?
ПарамстрыПредметаИсчисления = |
|
"целая, целых, целых. |
к, сотая, сотой, сотых, ж. 2": |
ФорматнаяСтрока = "JI=ru_RU; ДП=Истина"; |
|
Сообщить! ЧислоПрописью(ВыводимоеЧисло. |
|
ФорматнаяСтрока, |
|
ПарамстрыПредметаИсчисления)); |
В параметрах предмета исчисления указываем возможные спряжения и склонения слов «целая» и «сотая», а так же количество разрядов дробной части, которые будут выводиться прописью.
В форматной строке указываются код языка локализации и необходимость вывода дробной части прописью.
Для ВыводимоеЧисло - 123,45 результат будет: «Сто двадцать три целых сорок пять сотых».
Как вывести прописью число килограммов с указанием дробной части в граммах?
ПараметрыПредметаИсчисления - "килограмм, килограмма, килограммов, м,
|грамм, грамма, граммов, м, 3"; ФорматнаяСтрока = ”JI=ni_RU; ДП=Истина";
Сообщи гь(ЧислоПрописью(ВыводимоеЧисло,
ФорматнаяСтрока. ПараметрыПредметаИсчисления));
В отличие от вышеприведенного примера здесь предметами исчисления являются килограммы и граммы, а количество разрядов дробной части - три.
Для ВыводимоеЧисло = 12,345 результат будет: «Двенадцать
килограммов триста сорок пять граммов»
Как долларовую сумму вывести прописью по-английски?
ФорматнаяСтрока = "JI=en_US";
ПараметрыПредметаИсчисления ="do!lar, dollars, cent, cents, 2"
Сообщить(ЧислоПрописыо(Сумма,
ФорматнаяСтрока,
ПараметрыПредметаИсчисления)):
Для ВыводимоеЧисло = 1 232,45 результат будет: «One thousand two hundreds thirty two dollars 45 cents»
Как загрузитьвнешнюю компоненту?
Загрузим компоненту, позволяющую работать со сканером штрихкодов:
Попытка
ЗагручитьВнешнююКомпонентуІ’’scanopos.dll") Исключение
СообщитьГОшибка загрузки внешней компоненты!");

В случае ошибки загрузки компоненты или создания объекта возникает исключительная ситуация, которую рекомендуется отрабатывать с помощью конструкции Попытка.
Как выполнить команду операционной системы?
К примеру, требуется удалить все файлы из указанного каталога.
Для реализации данной возможности достаточно выполнить следующую строку кода:
КомаіідаСистсмы("Де1 *.* /q", "c:\temp"): |
|
|
|
Для просмотра доступных команд можно в командной строке системы выполнить команду «help».
Вызвать командную строку, можно выполнив строку кода:
КомандаСистемы("сіжГ):
Кроме этого, для запуска внешнего приложения (или открытия файла с использованием ассоциированного с ним приложения) может быть использован метод глобального контекста ЗапуститьПриложение(). В этом случае запуск приложения будет осуществляться непосредственно, минуя командный интерпретатор. Например:
ЗапуститьПриложение("ШаблонДоговора.(1ос"):
Как реализовать код процедуры в зависимости от режима выполнения (на клиенте, на сервере, во внешнем соединении) ?
Если алгоритм должен выполняться по-разному в зависимости от места выполнения процедуры, то можно воспользоваться инструкциями препроцессора:
#Если ВнешнееСоедннение Тогда
// Фрагмент кода, который должен выполняться в сессии внешнего соединения. #КонецЕсли #Еслн Клиент Тогда
// Фрагмент кода, который должен выполняться на сервере.
#КонецЕсли #Если Сервер Тогда
// Фрагмент кода, который должен выполняться на клиентском месте.
#КонецЕсли
Как при групповой обработке объектов реализовать стратегию «либо все, либо ничего»?
Требуется загрузить либо все данные по справочнику «Единицы измерения», либо, в случае возникновения ошибки, нужно чтобы ни один элемент не был записан.
Для реализации стратегии «либо все, либо ничего» можно использовать следующий фрагмент кода:
НачатьТранзакцию(); |
|
// В переменной "ВыборкаДанных" содержатся данные дл Пока ВыборкаДанных.СледующийО Цикл |
записи в справочник. |
Элемсн іОбъект - Справочники.ЕдиницыМзмерения.СоздатьЭлсментО; |
ЭлементОбьект.Код = Выборка.Код:
ЭлементОбъект.Наименование = Выборка.Наименовани |
|
// Остальные реквизиты |
|
ЭлемснтОбъект.ЗаписатьО;
Конец Цикл а; |
|
Зафиксировать! рантакцнюО; |
|
Если необходимо но мере накопления каких-либо признаков «искусственно» отменить действия, совершаемые в транзакции, можно использовать метод системы:
ОтмснитьТрантакциюО;
Как посчитать сумму по формуле сложного процента?
Пусть первоначальная сумма долга равна Р, тогда через один год
/>(1 + і)
сумма долга с присоединенными процентами составит
? 7, через п
Р(і + і)
п.
лет -
? 7
Таким образом, получаем формулу наращения для сложных процентов:
S = p{l + i)
n,
где S - наращенная сумма, і - годовая ставка сложных процентов, п - срок ссуды,
Для вычисления можно использовать функции работы со значениями типа «число»:
Функция СложныйІ1роцент(Креднт, Ставка. Срок = 1) Возврат Креднт*Ро\?( I + Ставка/100, Срок); КонецФункции
Возведение в степень реализуется функцией Pow(). Первым параметром передается основание степени, вторым - показатель степени.
Замечание: кроме работы со степенями математический аппарат системы позволяет работать с корнями, логарифмами и тригонометрическими функциями.
Универсальные коллекции
Массив
(!) В каких ситуациях обычно используются массивы?
Массив является универсальной коллекцией, то есть объектом, предназначенным для работы с временными наборами данных в течение сеанса работы пользователя.
Необходимость в его использовании возникает, когда требуется работать с временным набором данных. Чаще всего это промежуточные операции обработки информации: подготовка отборов, реализация поиска, подготовка группирования, передача параметров и проч.
Массивы могут создаваться оператором Новый или получаться в результате применения методов некоторых объектов.
(D Как создать массив?
Создание массивов чаще всего происходит посредством оператора
Новый:
СозданныйМассив = Новый Массив ();
где «СозданныйМассив» - имя переменной, которая будет содержать созданный объект типа Массив. После создания к массиву можно добавлять элементы (произвольное количество).
Если же мы хотим создать массив с заранее определенной размерностью, это можно сделать так:
СозданныйМассив = Новый Массив (10):
В результате в переменной «СозданныйМассив» будет создан массив с десятью значениями. Для такого массива можно потом сразу обращаться к любому из десяти значений (начиная с нулевого по девятое) для записи или для чтения. А при необходимости к такому массиву можно так же еще добавлять новые элементы. Первый же добавленный элемент получит индекс «10».
Как создать многомерный массив?
Массив является линейной динамической коллекцией с произвольным типом значений. Поэтому значениями массива могут выступать другие массивы.
То есть создание массива массивов и решает задачу создания многомерного массива.
Это можно делать при использовании конструктора массива:
ДвумерныйМассив = Новый Массив (2, 8):
или в процессе добавления очередных элементов к массиву:
ДвумерныйМассив = Новый Массив;
МассивВторогоПорядка = Новый Массив (8):
ДвумерныйМассив.Добавить(МассивВторогоПорядка): Дву мерныйМассив. Добавить! МассивВторогоПорядка):
И в том и в другом случае мы решим задачу создания двумерного массива размерностью 2x8.
Чтение и запись значений такого массива можно производить посредством директивного указания индексов:
Значение = ДвумерныйМассив[21[5);
или при помощи метода Получить():
Значение = ДвумерныйМассив.Получить(2).Получить(5);
Хотелось бы еще раз отметить, что создание массива определенной размерности конструктором ограничивает только количество возможных к заполнению значений массива, но не препятствует добавлению новых значений (в качестве которых могут выступать массивы произвольной размерности).
Как добавить элементы в массив?
Допустим, массив, к которому нужно добавить значение из переменной «НовоеЗначение», называется «НашМассив».
Если нужно просто добавить очередной элемент (с индексом на единицу больше самого старшего) - действуем следующим образом:
ІІашМассив.Добавить(НовоеЗначение)
Если нужно, чтобы новые значения добавлялись с определенным индексом, то можно использовать метод Вставить():
Массив = Новый Массив;
Массив.Вставить(5, "ООО ""Лабан......);_ •
Как определить размер массива?
Чтобы определить количество элементов массива «НашМассив» можно сделать так:
Рачмер = НашМассив. Количествен:
Однако имейте в виду, поскольку индексация элементов массива начинается с нуля - значение переменной «Размер» будет на единицу больше значения самого старшего индекса.
Как обратиться к элементу массива?
При обращении как для записи, так и для чтения элементов массива лучше пользоваться оператором [ ], указывая индекс элемента. Помните, что индексация начинается с нуля.
Пусть в переменную «ПервоеЗначение» нужно считать значение самого первого элемента массива, а в элемент массива с индексом «9» записать значение из переменной «ДесятоеЗначение»:
ПервосЗначение = НашМассив[0]; НашМассив|9| = ДесятоеЗначенис:
Аналогичных результатов можно добиться при помощи методов
Получить() и Установить():
ПервосЗначение = НашМасспв.Получнть(О); НашМасснв.Установить(9, ДесягоеЗначение):
Замечание: в любом случае, чтобы иметь возможность обратиться к элементу массива, он должен уже существовать. Иначе получим ошибку с сообщением о том, что индекс находится за границами массива.
Как перебрать элементы массива?
Если перебор элементов массива нужен для чтения данных из массива - проще всего организовывать посредством цикла перебора коллекции.
Например, чтобы вывести сообщения о каждом числе, найденном в массиве «МассивЭлементов», достаточно сделать следующее:

Обратите внимание, «ЭлементМассива» - это произвольное имя переменной, принимающей в себя очередное значение элемента коллекции при выполнении цикла.
Если же при переборе элементов массива нужно их редактировать, то для этого нужно работать еще и с индексами элементов. Лучше тогда использовать так называемый «цикл-счетчик».
Например, чтобы обнулить все числовые элементы массива, достаточно сделать следующее:
Для Сч = 0 по МассивЭлементов.ВГраннцаО Цикл
Если ТипЗнч(МассивЭлементов[Сч|) = ТипСЧисло") Тогда МассивЭлементов[Сч) = 0;
КонецЕсли;
КоиецЦикла;
«Сч» - это переменная, принимающее очередное значение счетчика на каждом выполнении цикла. Именно из нее и будем считывать значение индекса очередного элемента массива.
Значение самого большого индекса массива определяется посредством метода ВГраница().
Как удалить элемент массива?
Удаление отдельных элементов массива происходит с обязательным указанием индекса удаляемого элемента. Так, например, будет удален первый элемент массива:
МассивЭлементов.Удалить(О);
Естественно, если указанный индекс будет выходить за границы массива - получим сообщение об ошибке.
Кроме того, необходимо учитывать, что удаление элемента «из середины» массива приведет к уменьшению на единицу индексов элементов, стоявших «после» удаленного. Массив как бы «сомкнет ряды».
Поэтому, например, один из наиболее простых вариантов удаления всех числовых элементов массива может выглядеть так:

Сначала определяем самый старший индекс элементов массива. Цикл проверок и удалений чисел будет выполняться, пока очередное значение индекса не окажется меньше нуля.
В цикле определяем тип значения элемента с текущим индексом. Если это число - удаляем данный элемент. Кроме того, в любом случае уменьшаем на единицу значение переменной «Индекс».
В результате, поскольку перебор элементов массива проводится с конца, эффект «смыкания рядов» будет производиться только для уже проверенных элементов.
® Как удалить все элементы массива?
Если требуется полное удаление элементов из массива, операция выполняется гораздо проще:
Массив.ОчиститьО;
Как удалить повторяющиеся элементы массива?
Поскольку объект «массив» является одной из самых простых универсальных коллекций, методами поиска по значению он не обладает. Поэтому для того, чтобы удалить повторяющиеся элементы, следует перебрать все элементы массива и проверить их значения.

Для выполнения поставленной задачи организуется два цикла: в первом цикле осуществляется перебор элементов массива и для каждого выбранного элемента осуществляется вложенный цикл сравнения текущего элемента с последующими элементами массива. В случае совпадения значений последующий элемент массива удаляется.
Когда для очередного элемента с индексом «ТекущийИндекс» завершился вложенный цикл проверки с последующими - увеличиваем значение «ТекущийИндекс» на единицу с тем, чтобы следующий по индексу элемент попал в положение проверяемого.
Как скопировать массив?

Для получения копии массива в другом объекте (массиве) необходимо создать новый массив (массив-копию) конструктором. Далее в цикле перебора элементов исходного массива добавлять эти элементы в массив-копию.
Как проверить, что два массива идентичны?
Это можно выполнить при помощи следующей функции. В качестве параметров ей передаются сами проверяемые массивы «ПервыйМассив» и «ВторойМассив».
Функция ПроверитьИдснтичностьМассивовН ІервыйМассив. ВторойМассив)
НаибольшийИндекс = ПервыйМассив.ВГраницаО;
Если НаибольшийИндекс о ВторойМассив.ВГраница () Тогда Возврат Ложь;
КонецЕсли:
Для Счетчик = 0 По НаибольшийИндекс Цикл
Если ПервыйМассив[Счетчнк] о ВторойМассив[Счегчик] Тогда Возврат Ложь;
КонецЕсли;
КонсцЦикла;
Возврат Истина;
КонсцФункции
Сначала проверяем совпадение наибольших индексов в массивах, если совпадения нет - массивы уже не идентичны. Значит функция возвращает значение ЛОЖЬ
Далее необходимо произвести проверку идентичности элементов массивов с одинаковыми индексами. Поскольку индексация элементов массива начинается с нулевого значения — выполняем цикл-счетчик от нуля до значения наибольшего индекса массива.
Внутри цикла при выполнении неравенства очередных элементов функция возвращает значение Ложь.
Если цикл пройден до конца - значения всех элементов с одинаковыми индексами совпали.
Значит функция может вернуть значение Истина.
В массив выгружены данные, содержащие наименования контрагентов. Как их отсортировать?
Список значений позволяет выполнять сортировки по представлению или по значению и, кроме того, обладает возможностями загрузки данных из массива и выгрузки в массив. Поэтому один из вариантов решения данной задачи может быть таким:
СписокЗначений = Новый СписокЗначений;
СннеокЗначений.ЗагруіитьЗначения(МассивНаименований);
СписокЗначений.СортироватьПоЗначениюО;
МассивНаименовашій = СписокЗначений. ВыгручитьЗначенияО:
Создаем список значений.
Загружаем значения из массива «МассивНаименований».
Сортируем список значений по значениям. Поскольку параметр не указали, направление сортировки будет - по возрастанию. Если нужно по убыванию - в качестве параметра надо передать соответствующее значение системного перечисления НаправлениеСорТИрОВКИ:
СписокЗначений. СортироватьГІоЗначениюШаправ.іенпеСортировки. Убыв!
После выполнения сортировки значений в массив.
выгружаем значения
из
списка
Есть массив, в который выгружены значения типа СправочникСсылка.Номенклатура. Как удалить все пустые значения массива?
Процедура УдалитьПустыеЭлементы(МассивНоменклатуры) Счетчик = О:
КоличествоЭлемснтов = МассивНомснклатуры.Количество!);
Пока Счетчик < КоличествоЭлемснтов Цикл
Если МассивНомснклатуры [Счетчик].ПустаяО Тогда МассивНоменклатуры.Удалить(Счетчик); КоличествоЭлемснтов = КоличествоЭлементов - 1;
Иначе
Счетчик = Счетчик + 1;
КонецЕсли:
КонецЦикла;
КонецПроцедуры
Получаем в виде параметра процедуры массив номенклатурных позиций.
Устанавливаем нулевое значение счетчика - переменной «Счетчик».
Организуем цикл, который будет выполняться, пока значение переменной «Счетчик» меньше количества элементов массива. Поскольку индексы элементов массива начинаются с нулевого значения, то наш цикл прервется в момент, когда значения индекса («Счетчик») и количества элементов совпадут.
Внутри цикла проверяется условие, является ли ссылка, содержащаяся в очередном элементе массива - пустой. Если это так -текущий элемент массива удаляется. В результате у следующих за ним элементов автоматически на единицу уменьшаться индексы. Кроме того, необходимо уменьшить на единицу значение переменной, отслеживающей количество элементов в массиве.
Если же ссылка не пустая - увеличивается на единицу значение «Счетчик» с тем, чтобы на следующем ходе цикла работать уже со следующим элементом.
Замечание: проверка на пустое значение для разных типов данных проводится по-разному. Только для ссылочных типов данных можно ее осуществлять посредством метода Пустая().
Как получить массив номенклатурных позиций, использованных в табличных частях «Номенклатура» и «Тара» накладной?
Имеем ссылку на документ «СсылкаНаДокумент». Номенклатурные позиции могут быть указаны в колонке «Номенклат}фа» табличной части «Номенклатура» и в колонке «Номенклатура» табличной части «Тара».
Тогда массив номенклатуры из обеих табличных частей можно получить следующим образом:
МассивНоменклатуры = |
|
СсылкаНаДокумент.Номснклатура.ВыгруэитьКолонкуС’Номенклатура”): |
МассивНоменклатурыТара = |
|
СсылкаНаДокумент. ВозвратнаяТара.ВыірузитьК |
олонку(" Номенклатура”); |
Для Каждого ЭлементМассиваТара Из МассивНоменклатурыТара Цикл |
МассивНоменклатуры.Добавить( ЭлементМассиваТара); КонецЦикла; |
|
Формируем массив «МассивНоменклатуры» посредством выгрузки колонки «Номенклатура» табличной части «Товары» документа. Аналогично формируем массив «МассивНоменклатурыТара» по табличной части «Тара».
Далее в цикле перебора элементов второго массива добавляем их в первый.
Есть две таблицы значений. Как получить массив совпадающих имен колонок?
Данная операция может применяться для вспомогательного контроля перед загрузкой таблицы значений в таблицу записей регистра.
Итак, есть «ТаблицаИсточник» PI «ТаблицаПриемник», требуется получить массив имен совпадающих по имени колонок.
МассивСовпадающихКолонок = Новый Массив():
Для Каждого Колонка Из ТаблицаПриемник.Колонки Цикл МмяКолонкиПрисмника = Колонка.Имя:
Если ТаблицаИсточник.Колонки.Найти(ИмяКолонкиПриемника) о Неопределено Тогда
МассивСовпадающихКолонок.Добавить(ИмяКолонкиПрисмника):
КонецЕсли;
КонецЦикла;
Создаем сначала конструктором «МассивСовпадающихКолонок».
Далее выполняем цикл перебора колонок одной из таблиц. Внутри цикла в переменную «ИмяКолонки» получаем имя очередной колонки.
Далее обращаемся к коллекции колонок другой таблицы значений и при помощи метода Найти() пытаемся найти такую же по имени колонку. Если поиск успехом не увенчается - метод выдаст значение Неопределено. А если удалось - добавляем очередной элемент к массиву «МассивСовпадающихКолонок».
Как в запросе сделать отбор по нескольким вариантам заполнения реквизита типа «ПеречислениеСсылка»?
Одним из приемов программирования, использующим массивы, является формирование коллекции возможных значений для заполнения параметров запроса. Это выполняется, например, когда в запросе используются отборы с операндами В или В ИЕРАРХИИ.
Вот пример решения задачи:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
I ОтпускаОрганизацииРаботникиОрганизации.ФнзЛицо,
I ОтпускаОрганизацииРаботникиОрганизации.ДатаНачала.
I ОтпускаОрганизацииРаботникиОрганизации.ДатаОкончания |ИЗ
I Документ.ОтпускаОрганизации.РаботникиОрганизации КАК ОтпускаОрганизацииРаботникиОрганизации
|ГДЕ
I ОтпускаОрганизацииРаботннкиОрганизацни.ПричинаОгсутствия
В (&МассивПричин)'
МассивПрпчин = Новый Массив;
МассивПричин.ДобавитЫ Перечисления
.ПричиныОтсутствияНаРаботеВОрганизации
.ОтпускБезСохраненияЗарплаты);
МассивПричин.Добавить(Перечисления
.ПричиныОтсутствияНаРаботеВОрганизапии
.ОтпускУчебный);
Запрос.УстановитьПараметр("МассивПрпчин". МасснвПричин);
В параметр «МассивПричин» устанавливается значение - массив возможных причин, набранный из элементов перечисления « ПричиныОтсутствия».
Замечание: для решения подобных задач (с операндами В и В ИЕРАРХИИ) можно передавать не только данные типа Массив, можно еще СписокЗначениЙ или вообще сформировать коллекцию возможных значений вложенным запросом в самом тексте запроса. Вариант выбора заполнения параметра зависит от конкретики самой задачи.
Как из регистра сведений
«РасчетчикиЗарплатыОрганизации» получитьв виде массива всех расчетчиков зарплаты определенного подразделения организации?
Периодический независимый регистр сведений
«РасчетчикиЗарплатыОрганизации» имеет следующую структуру:
-ф РасчетчжиЗерплвтыОрганизеции Э - Измерения
М ¦ Паареэаелемие0рге»«43?ці*і В-f
m Ресурсы ! По/»>эомтель
}-§ Реквизиты
Данную задачу можно решить посредством применения методов объектной модели или запросом.
Пример решения посредством объектной модели:
Функция ПолучитьМассивРасчетчиков(Подразделение)
НаборЗаписей = РегистрыСведений
. Расчетч и киЗарплатыОрганизаци и .СоздатьНаборЗаписейО;
НаборЗаписей. Отбор. ПодразделениеОрганизации.Установить(Подразделение); НаборЗаписей. Прочитать));
МассивРасчетчиков = НаборЗаписей.ВыгрузитьКолонкуС'Пользователь”); Возврат МассивРасчетчиков;
КонецФункции
Создаем набор записей регистра. Устанавливаем отбор по значению измерения «ПодразделениеОрганизации».
Читаем данные набора записей.
Выгружаем колонку набора записей «Пользователь» в массив.
Пример решения задачи посредством запроса:
Функция ПолучитьМассивРасчетчиков(Подразделение)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
I РасчетчикиЗарплатыОрі анизацни.Пользователь КАК Расчетчик |ИЗ_
I РепістрСведенин.РасчетчикиЗарплатыОріанизацііи I КАК РасчетчикнЗарплатыОрганизации
ГДЕ
I РасчетчикиЗарплатыОрганизации.ПодразделениеОрі анизации =
&Подразделение'
Запрос.УстановитьПарамегрС'Подразделение". Подразделение);
Результат = Запрос.ВыиолнитьО;
Выборка = Результат.ВыбратьО:
МасснвРасчетчиков = Новый Массив;
Пока Выборка.Следующий() Цикл МассивРасчетчиков.Добавить(Выборка.Расчетчик);
КонецЦикла:
Возврат МасснвРасчетчиков;
КонсцФункции
Источником в запросе будет таблица регистра «РегистрСведений.РасчетчикиЗарплатыОрганизации». Накладываем отбор по условию равенства поля «ПодразделениеОрганизации» определенному значению.
В качестве выходных полей выбираем только «Пользователь».
После выполнения запроса делаем выборку по результату запроса и в цикле перебора ее - формируем нужный массив.
В данных примерах оба способа возвращают одинаковые результаты примерно за одинаковое время потому, что никаких дополнительных действий в процессе получения информации не требуется.
Второй способ на первый взгляд кажется более длинным в отношении написания кода.
Но если нам понадобится произвести отбор более чем по одному условию, или получить массив неповторяющихся значений — то вторым способом получить такие данные будет значительно легче и быстрее с точки зрения скорости исполнения.
Структура
® В каких ситуациях обычно используются объекты типа «Структура»?
Структура является универсальной коллекцией, то есть объектом, предназначенным для работы с не хранящимися в базе данных совокупностями значений.
Необходимость в ее использовании возникает, когда требуется работать с временным набором данных с чуть более сложной природой, нежели в массиве.
Если элемент массива можно было характеризовать только числовым индексом и значением произвольного типа, то элемент структуры характеризуется строковым ключом и значением произвольного типа.
Чаще всего структуры применяют в ситуациях, когда необходимо узнать или использовать имена реквизитов, свойств, полей, подчиненных объектов для тех или иных объектов; узнать или использовать значения реквизитов, свойств, полей, подчиненных объектов по их именам для тех или иных объектов.
Кроме того, структуры удобно использовать для передачи параметров при работе с различными объектами.
Структуры могут создаваться конструктором НОВЫЙ или получаться в результате применения методов некоторых объектов. Ввод элементов в структуру можно осуществлять как посредством параметров конструктора, так и посредством метода Вставить().
Как создать структуру?
Создание структуры чаще всего происходит посредством оператора
НОВЫЙ:
СозданнаяСтруктура = Новый Структура:
где «СозданнаяСтруктура» - имя переменной, которая будет содержать созданный объект типа Структура.
После вышеприведенного создания в структуру можно вставлять элементы (произвольное количество).
Если же мы хотим создать структуру с заранее определенными элементами - это можно сделать, например, так:
Оппонент = Новый Структура ("Фамилия, Имя, Отчество, Возрасг
"Иванов". "Иван”, "Иванович", 7);
Первым параметром передается строка, в которой через запятую перечисляются ключи элементов структуры. Остальные параметры содержат значения для элементов структуры в том же порядке, в котором были перечислены ключи.
Для такой структуры впоследствии можно обращаться к любому из элементов для записи или для чтения значения. А так же, при необходимости, к этой структуре можно еще добавлять новые элементы.
Как добавить элементы в структуру?
Для добавления элементов в структуру используется метод Вставить(). Первым параметром указывается ключ, вторым - значение нового элемента.
Замечание: если в составе структуры уже был элемент с подобным ключом - то старый элемент будет замещен новым.
Например:
Оппонент = Новый Структура ("Фамилия. Имя, Отчестве |
. Возраст", |
"Иванов", "Иван". "Иванович", 7); |
Оппонент.ВставитМ"Обращение", "Господин"); Оппонент.ВставитьС'Возраст", 25); |
|
Как обратиться к элементу структуры?
Для чтения значений элементов структуры можно использовать несколько вариантов написания кода.
Для структуры «Оппонент», в составе которой есть элемент с ключом «Возраст» можно использовать явное указание значения ключа:
ТекущийВозраст = Оппонет.Возраст:
или передачу ключа в переменной:
КлючСтруктуры = "Возраст";
Текущий Возраст = Опионет|КлючСтруктуры|
Также можно использовать метод СвоЙСТВО(), который получает значение элемента структуры по указанному ключу:
ТекушийВозраст = Неопределено; Опионет.СвойствоІ "Возраст". ТекушийВозраст)
Для записи значений элементов структуры также можно использовать несколько вариантов написания кода.
Если мы хотим изменить значение возраста в структуре из вышеописанного примера - можно это сделать так:
Оппонет. Возраст = 32
или так:
ОппонетІ"Возраст"! - 32:
или так:
Оппонент.Вставить("Возраст". 32):
Как перебрать элементы структуры?
Поскольку структура является коллекцией - перебрать элементы структуры можно посредством цикла перебора коллекции.
Например, чтобы сообщить обо всех ключах и значениях элементов структуры «СтруктураПараметров», можно сделать следующее:
Для Каждого Элемент из СтруктураПараметров Цикл СообщитьОлемент.Ключ + " + Элемент.Значение);
КонецЦикла;_
Как удалить элемент структуры?
Чтобы удалить элемент структуры - необходимо знать его ключ. Например, чтобы удалить из структуры «СтруктураПараметров» элемент с ключом «Номенклатура», достаточно сделать следующее:
СтруктураПарачетров.Удалить("Номенклатура''):
Если же нужно удалить все элементы структуры - применяется метод ОЧИСТИТЬ):
СтруктураПараметров. ОчиститьО;
Как в структуре установить значение для элемента с определенным ключом?
Все ключи элементов структуры - уникальны. Поэтому добавление новых элементов и замена (установка) значений для «старых» элементов выполняется одним и тем же методом Вставить
л):
|
|
Структура = Новый Структура:
// Добавить новый элемент.
Структура.ВставитЫ"Цвет". У?еЬЦвста.Белый);
// Установить значение для элемента с ключом "Цвет". Струкгура.ВставитьС'Цвег", ??еЬЦвега.Синий); |
|
Результатом примера выше будет структура, состоящая только из одного элемента: ключ у него - «Цвет», значение - «Синий» из системного набора значений \Л/еЬЦвета.
Как получить в структуру многомерные данные? Как собрать информацию по установленным в форме журнала отборам?
Для формы журнала документов установлены некие отборы. Чтобы сформировать многомерную структуру всех используемых отборов объекта «ЖурналДокументовСписок», можно сделать следующее:
СтруктураОтборов = Новый Структура:
СтрукгураПараметровОтбора = Новый Структура;
Для Каждого ЭлементОтбора из ЖурналДокументовСписок.Отбор Цикл Если ЭлементОтбора.Использованне Тогда СтруктураПараметровОтбора.ОчиститьО;
СтруктураПараметровОтбора.ВставитьС'Имя", ЭлементОтбора.Имя); СтруктураПараметровОтбора.ВставитьС'ВидС равнения”.
ЭлементОтбора.ВидСравнення);
СтруктураПараметровОтбора.Вставить) "Значение", ЭлементОгбора.Значение): СтруктураПараметровОтбора.ВставитьСЗначениеПо",
ЭлементОтбора.ЗначениеПо);
СтруктураПараметровОтбора.Вставить) "ЗначениеС". ЭлементОтбора.ЗначениеС); СтруктураПарамстровОтбора.ВставитьС'Представление".
ЭлементОтбора.Представление);
СтруктураПараметровОтбора.ВсгавитьС'ПутьКДаиным",
ЭлементОтбора.ПутьКДанным); СтрукгураПараметровОтбора. Вставить) "Т ипЗначения".
ЭлементОтбора.ТипЗначения);
СтруктураОтборов.ВставитыЭлементОтбора.Имя, СтрукгураІІараметровОгбора):
КонецЕсли:
КонецЦикла:
Создаем конструкторами две структуры. Структура «СтруктураОтборов» впоследствии будет содержать элементы, где в качестве ключа будет указано название отбора, а в качестве значения -« СтрукгураПараметровОтбора».
В цикле перебора коллекции отборов объекта «ЖурналДокументовСписок» сначала проверяем, используется ли данный отбор. Если используется — заполняем структуру параметров данного отбора. Полученную структуру используем в качестве значения добавляемого элемента объекта «СтруктураОтборов».
Впоследствии, если нам потребуется информация из полученной структуры, можно будет, например, перебрать элементы
«СтруктураОтбора», а для каждого из этих элементов - перебрать элементы ее значения - структуры «ПараметрыОтбора»
Как определить, есть ли в структуре элемент с ключом «Контрагент», и если есть, но содержит пустое значение справочника или Неопределено - удалить этот элемент?
Если Структура.СвойствоСКонтрагент". ЗначениеЭлемента) Тогда Если ЗначениеЭлемента = Неопределено или ЗначениеЭлсмеита.Пустая() Тогда Структура.УдалитьСКонтрагент");
КонецЕсли;
КонецЕсли;
В качестве параметров метода СВоЙСТВО() можно указать ключ и переменную для получения значения по ключу.
Кроме того, сам метод возвращает Истина, если элемент с данным ключом существует, и Ложь - если нет.
Получив значение и проверив его на требуемые условия, удаляем элемент с указанным ключом из структуры.
Замечание: кроме метода СВоЙСТВО() получить значения элемента структуры позволяют следующие варианты обращения по ключу:
Структура-Контрагент или
Структура[ "Контрагент"
Как из табличной части «Товары» документа получить все строки, где значение реквизита «Цена» равно нулю, а значение реквизита «СтавкаНДС» равно значению «НДС18» перечисления «СтавкиНДС»?
Для поиска строк, соответствующих условию определенного отбора, можно сделать следующее:
СтруктураДляПоиска = Новый Структура(”Цена, СтавкаНДС”,
О, Перечисления.СтавкиНДС.НДС18); МассивСтрок = Товары. НайтиСтроки(СтруктураДляПоиска);
Сначала создаем структуру для поиска. Далее посредством метода НаЙТиСтр0КИ() из табличной части документа «Товары» получаем массив строк, соответствующих отбору по структуре поиска.
Обратите внимание, в данном примере был показан вариант добавления и заполнения элементов структуры непосредственно в конструкторе.
Как получить данные о текущей учетной политике бухгалтерского учета организации из периодического регистра сведений на заданную дату?
Периодический регистр сведений
«УчетнаяПолитикаБухгалтерскийУчет» имеет следующую структуру:
У^наяЛо/мтикаБухга/тгерскийУ-Й \ ¦ Измерения
¦ Организация й _ Ресурсы
і СпособО ценкиМ П 3 ¦— J ДфектКостинг s Реквизиты
Тип значения измерения «Организация»
СправочникСсылка. Организации.
Ссылка на организацию находится в переменной «ЮрЛицо». Дата, на которую необходимо получить данные - переменная «ДатаПолучения».
Получение необходимых данных можно организовать посредством метода ПолучитьПоследнее() менеджера регистра:
// Подготовить отбор но измерению "Организация".
СтруктураОтбора = Новый Структура("Организация". ЮрЛицо);
// Получить данные, актуальные на указанную дату.
СтруктураДанных = РегистрыСведений
.УчетнаяПолитикаБухгалтсрскийУчет .ПолучитьПоследнее(ДатаПолученіія. СтруктураОтбора):
// Прочитать данные из структуры данных.
СпособОцснкиМнзЮрЛица = СтруктураДанных.СнособОцснкиМПЗ: ДиректКоетингЮрЛица - СтруктураДанных.ДиректКосгнт;_
Метод предназначен для получения данных наиболее поздней записи регистра, соответствующей указанным периоду и значениям измерений регистра.
Значения измерений регистра должны предаваться в виде структуры. Каждый элемент структуры в качестве ключа должен использовать имя измерения. В качестве значения элемента структуры передаем значение отбора по этому измерению.
Дату получения и полученную структуру отбора используем в качестве параметров для метода ПолучитьПоследнее(). Результатом применения метода к периодическому регистру сведений «УчетнаяПолитикаБухгалтерскийУчет» будет структура. Элементы полученной структуры состоят из названия ресурса в качестве ключа и значения ресурса в качестве значения.
Каксформировать структуруназваний реквизитов табличной части произвольного документа?
Пример функции, решающую данную задачу - ниже. В качестве параметров необходимо передать ссылку на документ и имя табличной части документа.
Функция СформировагьСтрукгуруТаблнчнойЧастиДокумента(Документ,
ИмяТабличнойЧасти)
СтруктураТабличмойЧастиДокумента = Новый Структура;
Для Каждого Реквизит из Документ
.МстаданнысО
.ТабличныеЧасти[ИмяТабличнойЧасти1 .Реквизиты Цикл
С трукгураТабличнойЧастиДокумента. Вставить) Реквизит. Имя, Реквизит.Имя); КонецЦикла;
Возврат СтруктураТабличнойЧастиДокумента;
КонецФункции
Конструктором создаем структуру
« Стру ктураТабл ичнойЧастиДокумента».
В цикле перебора реквизитов нужной табличной части полученного документа вставляем в структуру элементы с названиями полученных реквизитов.
Замечание: значения элементам структуры можно было и не указывать - все зависит от того, как в дальнейшем собираемся использовать полученную структуру.
Как получить запросом данные табличной части документа, имея структуру названий реквизитов табличной части?
Пример функции, решающей данную задачу - ниже. В качестве параметров необходимо передать ссылку на документ или объект документа, имя табличной части и структуру названий реквизитов этой табличной части.
Функция основана на сборе информации запросом, чей текст собирается «кусочками» из строковых переменных:
Функция СформироватьЗапросПоТабличнойЧасти(Документ.
ИмяТабличнойЧасти, СтруктураПолей) Экспорт
ПоляРеквизитов =
Для Каждого Реквизит Из СтруктураПолей Цикл
ПоляРеквизитов = Поля Реквизитов 4 ",
ІДок.” 4 Реквизит.Значение 4
?(ЗначенисНсЗаполнено(Рсквизиі.Ключ), " КАК " 4 СокрЛП(Реквизит.Ключ));
КоиецЦикла:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ I Док.НомерСтроки ” 4 ПоляРеквизитов 4 "
|ИЗ
I Документ."
4 Документ.МетаданныеО.Имя 4 ".”4 СокрЛП(ИмяТабличнойЧасти) 4 " КАК Док
ГДЕ Док.Ссылка = &ДокументСсылка":
// Установить параметры запроса.
Запрос.УстановитьПараметрС'ДокументСсылка", Доку мент.Ссылка) Возврат Запрос.ВыполнитьО:
КонецФункции
Создаем переменную «ПоляРеквизитов».
В цикле перебора элементов структуры имен полей табличной части добавляем к переменной «ПоляРеквизитов» «по кусочкам» будущие имена выходных полей запроса. Добавляются они через запятую.
Далее формируем запрос, к тексту которого добавляем строку имен выходных полей запроса.
Источником указываем таблицу нужной табличной части нужного документа. Кроме того, накладываем отбор по полю «Ссылка».
Функция возвращает результат выполнения запроса.
Соответствие
ф В каких ситуациях обычно используются объекты типа «Соответствие»?
Соответствие является универсальной коллекцией, то есть объектом, предназначенным для работы с не хранящимися в базе данных совокупностями значений.
Необходимость в его использовании возникает, когда требуется работать с временным набором данных с чуть более сложной природой, нежели в структуре.
Если элемент структуры можно было характеризовать только строковым ключом и значением произвольного типа, то элемент соответствия характеризуется ключом произвольного типа и значением произвольного типа.
Чаще всего соответствия применяют в ситуациях, когда необходимо хранить в оперативной памяти для последующей обработки данные с ключами произвольного типа.
Кроме того, соответствия удобно использовать для передачи параметров при работе с различными объектами.
Соответствия могут создаваться конструктором НОВЫЙ.
ф Как создать соответствие?
Создание соответствия происходит посредством оператора Новый: |
г ?оз іаннос?оотвеіствие = Цовыц ^oibcicibmcQ
I С .ло. )дап н ?те? Сол V 1 веЗс 1 КПе 1 І?овТ>йГ С-А/оІИетс івТТеі |
|
|
|
|
где «СозданноеСоотвелствие» - имя переменной, которая будет содержать созданный объект типа Соответствие.
После вышеприведенного создания в соответствие можно вставлять элементты ((произвольное жопиввслво).
ф Как добавить элементы в соответствие?
Допустим к соответствию «ВозрастСотрудников»- нужно добавить новый элемент. В качестве ключа должна выступать ссылка на сотрудника (ее можно считать из переменной «Сотрудник»), в качестве значения - возраст сотрудника (его можно считать из переменной «ВозраслСощрудшиі&ві»).
Тогда добавление нового элемента можно произвести так: ВозрастСотрудников.ВставитьіСозрудник, ВозрастСотрудника);
или так:
ВозрастСотрудннков [Сотрудник] = ВозрастСотрудника;
Как обратиться к элементу соответствия?
Запись значений элементов соответствия можно выполнять теми же способами, которые рассмотрены в вопросе «Как добавить элемент в соответствие?» на странице 57.
А чтение значений элементов соответствия можно выполнять следующим образом:
ВозрастСотрудника = ВозрастСотрудников.Получнті.(Сотрудник);
или так:
ВозрастСотрудника = ВозрастСотрудннков [Сотрудник]
В приведенных примерах из соответствия «ВозрастСотрудников» по ссылке на сотрудника в качестве ключа будет получено значение элемента соответствия.
Как перебрать элементы соответствия?
Поскольку соответствие является коллекцией - перебрать элементы соответствия можно посредством цикла перебора коллекции.
Например, чтобы сообщить обо всех ключах и значениях элементов соответствия «Замены», можно сделать следующее:
Для Каждого Элемент из Замены Цикл СообщитЦЭлемент.Ключ + " -" + Элемент.Значение) КонецЦикла;
Как удалить элемент соответствия?
Чтобы удалить элемент соответствия - необходимо знать его ключ. Например, чтобы удалить из соответствия «Замены» элемент со ссылкой на объект, содержащийся в переменной «УдаляемыйТовар», в качестве ключа, достаточно сделать следующее:
Замены.Удал ит ь(УлаляемыйТовар):
Если же нужно удалить все элементы соответствия — применяется метод ОЧИСТИТЬ):
Замены. ОчиститьО;
Как получить данные из соответствия?
В соответствии «КурсыВалютДокумента» в качестве ключа используется значение валюты, а значениями являются структуры, содержащие «Курс» и «Кратность». Как получить курс и кратность валюты «УправленческаяВалюта» ?
Значение = КурсыВалютДокумента. Получить! У правленческая Валюта)
Если Значение = Неопределено Тогда Сообщить!"Данпая валюта в соответствии отсутствует");
Иначе
Курс = Значение["Курс"];
Кратность = Значение("Кратность"];
КонецЕсли;
Сначала по ключу (ссылке на управленческую валюту) получаем значение соответствия. Поскольку значением является структура курса валют - далее получаем значения структуры по их названиям.
Как получить многоуровневое соответствие видов расчетов, обладающих базовыми видами расчетов?
Для плана видов расчетов «ОсновныеНачисления» необходимо получить соответствие «ВидыРасчетов», где в качестве ключей будут использоваться виды расчетов, обладающие базовыми. А в качестве значений - соответствия базовых видов расчетов. В качестве ключей последних - базовые виды расчета, в качестве значений - структуры, содержащие их свойства «Наименование» и «Предопределенный».
Виды расчета |
Базовые виды расчета |
Свойства базового вида расчета |
|
Оклад по дням |
"Наименование" - "Оклад по дням" |
|
"Предопределенный" - Истина |
|
Оклад по часам |
"Наименование" - "Оклад по часам" |
|
"Предопределенный" - Ложь |
Ежегодный
отпуск |
Оплата по часовому т арифу |
"Наименование" -"Оплата по часовому тарифу" |
"Предопределенный" - Ложь |
Оплата по дневному тарифу |
"Наименование" -"Оплата по дневному тарифу" |
|
"Предопределенный" - Истина |
|
Оплата по произволе твенным нарядам |
"Наименование" -
"Оплата по производственным нарядам" |
|
"Предопределенный" - Истина |
|
Оклад по дням |
"Наименование" - "Оклад по дням" |
|
"Предопределенный" - Истина |
Надбавка за в редность |
Оклад по часам |
"Наименование" - "Оклад по часам" |
"Предопределенный" - Ложь |
Оплата по произволе твенным нарядам |
"Наименование" -
"Оплата по производственным нарядам" |
|
"Предопределенный" - Истина |
Первичный сбор информации удобнее осуществить при помощи запроса с использованием итогов. Последующий перебор группировок результат запроса даст возможность сформировать необходимые объекты:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
I ОсновныеНачисленияОрганіпацинБа-ювыеВидыРасчета.Ссылка КАК Ссылка,
I ОсновныеНачисленняОріаничацииБаювыеВидыРасчета.ВидРасчега, |ОсновныеНачисленияОрганизацииБачовыеВидыРасчеіа.ВидРасчета. Наименование.
I ОсновнысНачисленияОрганизацииБазовыеВилыРасчета.Предопределенный |ИЗ
I ПланВидовРасчета.ОсновныеНачисленияОрганизации.БазовыеВидыРасчета КАК ОсновныеНачисленияОрганизацииБазовыеВидыРасчега
ІИТОГИ ПО
Ссылка":
Результат = Запрос.ВыполнитьО;
ВыборкаВидовРасчета = Результат
. Выбрать(ОбходРезульта таЗапроса. ПоГру ппировкам): ВидыРасчета = Новый Соответствие;
БазовыеВидаРасчета = Новый Соответствие;
СвойстваВидаРасчега = Новый СтруктураС'Наименование, Предопределенный"):
// Цикл по видам расчета, обладающим базовыми.
Пока ВыборкаВндовРасчета.СледующийО Цикл БазовыеВидаРасчета.ОчиститъО;
ВыборкаБазовых = ВыборкаВидовРасчета
.Выбрать(ОбходРезультатаЗапроеа.ПоГруппнровкам);
// Цикл по базовым видам расчета.
Пока ВыборкаБазовых.СледующийО Цикл
И Заполненить значения структуры "СвойстваВидаРасчета". СвойстваВндаРасчета.Наименование = ВыборкаБазовых.Наименование: СвойстваВидаРасчета.Предопределенный = ВыборкаБазовых
.Предопределенный;
// Заполненить соответствие "БазовыеВидАРасчета”. БазовыеВидаРасчета. Вставить(Выборка Базовых. ВидРасчета.
СвойстваВидаРасчета);
КонецЦикла:
// Заполнить соответствие "ВидыРасчета".
ВіиыРасчета.Вставить! ВыборкаВидовРасчста.Ссылка. БазовыеВидаРасчета); КонецЦикла;
Для запроса источником является таблица
«ПланВидовРасчета.ОсновныеНачисленияОрганизации.БазовыеВидыРас чета». Выходными полями делаем все, необходимые для решения нашей задачи.
Кроме того, вводим дополнительные итоги по полю «Ссылка» (ссылка на виды расчета).
После выполнения запроса делаем выборку по верхнему уровню группировок результата запроса.
Создаем конструктором три объекта - соответствие «ВидыРасчетов», в которое будем впоследствии добавлять виды расчетов, обладающие базовыми; соответствие «БазовыеВидыРасчетов», в которое будем добавлять базовые виды расчетов для каждого отдельного вида (владельца); структуру «СвойстваВидовРасчетов» для добавления информации о свойствах базовых видах расчетов.
В цикле перебора верхнего уровня группировок (по видам расчета) сначала очищаем соответствие «БазовыеВидыРасчета».
Далее открываем цикл перебора записей второго уровня группировки результата запроса (то есть уже по базовым видам расчетов определенного владельца). В этом цикле заполняем значения структуры «СвойстваВидовРасчетов» по ключам - названиям свойств. Далее добавляем сформированные структуры в качестве значений соответствия «БазовыеВидыРасчета» с конкретным базовым видом расчета в качестве ключа.
По окончании вложенного цикла добавляем очередной элемент в соответствие «ВидыРасчетов» с заполнением значения ключа из поля «Ссылка», и заполненным соответствием «БазовыеВидыРасчета» в качестве значения.
Список значений, таблица значений, дерево значений
® В каких ситуациях обычно используются списки значений, таблицы значений, дерево значений?
Все эти объекты являются универсальными коллекциями, то есть объектами, предназначенным для работы с не хранящимися в базе данных совокупностями значений.
Необходимость в использовании списка значений возникает, когда требуется работать с временным набором данных для решения интерфейсных задач. Дело в том, что в отличие от более простых универсальных коллекций (массива, структуры, соответствия) список значений состоит из объектов - ЭлементСпискаЗначениЙ. А элемент списка значений характеризуется следующим набором свойств:
• Значение;
• Представление. Содержит строковое пользовательское представление. То есть именно его пользователь увидит на экране. По умолчанию - генерируется автоматически;
• Пометка;
• Картинка;
Применение списков значений для обычных задач универсальных коллекций, но не связанных с интерфейсными действиями, как правило - излишне. Обычно с этой функциональностью справляются объекты «попроще»: Массив, Структура, Соответствие.
Таблицы значений позволяют работать с данными сущностей, представимых в виде таблиц, то есть «раскладываемых» на колонки и строки. А ведь с точки зрения многих систем автоматизации вообще «весь мир = совокупность таблиц».
При этом можно добавлять/удалять данные (и колонки, и строки, и значения); искать данные (и колонки, и строки, и значения); сортировать данные (по любым колонкам); выгружать-загружать данные; подсчитывать итоги по колонкам; сворачивать данные и т.д.
Дерево значений позволяет в добавление к вышеприведенным операциям еще вводить уровни иерархии для этих данных и оперировать в пределах уровней или игнорируя их.
Подобный набор возможностей помогает решать самый широкий спектр задач промежуточной обработки данных произвольного типа.
Как создать список значений?
Список значений можно создать посредством оператора НОВЫЙ:
СотданныйСиисок = Новый СписокЗначений:
где «СозданныйСписок» - имя переменной, которая будет содержать созданный объект типа СписокЗначении.
Как добавить элементы в список значений?
Например, требуется добавить в список значений «СписокСотрудников» новый элемент со значением ссылки на сотрудника (содержится в переменной «ТекущийСотрудник»), ФИО сотрудника в качестве представления (содержится в реквизите «ФИО» объекта «ТекущийСотрудник») и фотографии сотрудника в качестве картинки (содержится в переменной «Фото»):
СписокСотрудников.Добавить(ТекущийСотрудник.
ТекущийСотрудник.ФИО.
Фото):
Если нужно, чтобы новые значения добавлялись с определенным индексом (переменная «Инд»), то можно использовать метод
Вставить():
СписокСотрудников. Вставить(Инд,
ТекущийСотрудник.
ТекушийСотрудник.ФИО
Фото);
Если при этом в списке значений уже был элемент с таким индексом, то старый элемент получит индекс на единицу больше предыдущего; аналогично сдвинуться индексы у всех последующих.
Если при использовании метода Вставить() указать индекс, выходящий за границы списка, - получим сообщение об ошибке.
Как найти элемент списка значений?
Например, в списке значений «СписокСотрудников» надо найти элемент, в котором в качестве значения указан сотрудник, на которого ссылается переменная «ИскомыйСотрудник». Затем нужно сообщить индекс найденного элемента.
Это можно выполнить следующим образом:
ЭлементСписка = СішсокСотрудников.НайтиПоЗначению(ИскомыйСотрудннк);
Если ЭлементСписка о Неопределено Тогда Сообшить(СписокСотрудннков.Индекс(ЭлементСписка));
КонецЕсли;
Замечание: если искомое значение в списке может встретиться несколько раз - при таком подходе найдем только первый элемент, где оно содержится.
Поэтому смотрите по ситуации. Поскольку список значения - объект, предназначенный, прежде всего для визуализации возможностей выбора пользователем, обычно при его заполнении уже сразу предотвращают возможность повторов.
Если же такая возможность осмыслена, то получить все элементы списка значений, содержащие определенное значение можно, например, в цикле перебора элементов списка значений.
Как обратиться к элементу списка значений?
Если требуется получить доступ к элементу списка значений с определенным индексом (пусть содержится в переменной «Инд»), можно поступить так:
ЭлементСписка = СписокСотрудников! Инд]
или так:
ЭлементСписка = СписокСотрудников.Получить(Инд):
В любом случае - то, что получаем, еще не есть значение, заложенное в этот элемент списка (это еще не сотрудник), а именно объект типа ЭлементСпискаЗначений.
Впоследствии с него можно считать значения свойств:
Сотрудник = ЭлемснтСписка.Значение; Представление = ЭлеменчСписка.Представление: Пометка = ЭлементСпнска.Пометка;
Картинка = ЭлементСписка.Картинка:
Как перебрать элементы списка значений?
Поскольку имеем дело с индексированной коллекцией, то можно использовать цикл перебора элементов коллекции или «цикл-счетчик».
Например, чтобы сообщить значения всех элементов списка значений «СписокСотрудников», можно использовать следующий код:
Для Каждого ЭлементСписка Из СписокСотрудников Цикл Сообщить(ЭлементСписка.Значение):
КонсцЦикла;
То же через «цикл-счетчик»:
Старшин Индекс = СписокСотрудников.Количество!) - 1
Для Сч = 0 по СтаршийИндекс Цикл Сообщить(СписокСотрудннков[Сч].Значение): КонецЦикла;
Как удалить элемент списка значений?
Удаление отдельных элементов списка значений происходит с обязательным указанием индекса удаляемого элемента. Так, например, будет удален первый элемент массива:
СписокСотрудников.Удалить(О);
Естественно, если указанный индекс будет выходить за границу индексов списка - получим сообщение об ошибке.
Кроме того, необходимо учитывать, что удаление элемента «из середины» списка приведет к уменьшению на единицу индексов элементов, стоявших «после» удаленного. Список значений - «сомкнет ряды».
Решим задачу удаления всех элементов списка значений «СписокОбъектов», содержащих числовые значения:

Сначала определяем самый старший индекс элементов списка значений. Цикл проверок и удалений элементов будет выполняться, пока очередное значение индекса не окажется меньше нуля.
В цикле определяем тип значения элемента с текущим индексом. Если это число - удаляем данный элемент. Кроме того, в любом случае уменьшаем на единицу значение переменной «Индекс».
В результате, поскольку перебор элементов списка значений производится с конца, то эффект «смыкания рядов» будет актуален только для уже проверенных элементов.
ф Как создать таблицу значений и заполнить ее поля?
Для создания таблицы значений используется оператор Новый:
Табл и цаЗначс н и н = Новым Табл ицаЗначс ним
После этого молено создать колонки таблицы (при необходимости можно задать допустимые типы значений для колонки, заголовок и ширину колонки в символах).
И Создать нужные колонки. ТаблицаЗначений.Колонки.ДобавитьС'Фамилия") ТаблішаЗначсний. Колонки. ДобавитьС Возраст"):
Затем можно добавить новую строку и установить значения в колонках таблицы:
II Добавить новую строку и задать значения в колонках таблицы НоваяСтрока = ТаблицаЗначений.ДобавитьО; НоваяСтрока.Фамилия = "Иванов";
НоваяСтрока.Возраст = 23;
или так:
// Добавить новую строку и задать значения в колонках таблицы НоваяСтрока = ТаблицаЗначений.ДобавитМ);
НоваяСтрока| "Фамилия"] = "Иванов":
НоваяСтрока[”Возраст"] = 23;
Как найти значение в таблице значений?
Если требуется найти первую строку таблицы значений «ТаблицаЗначений», где присутствует «ИскомоеЗначение», можно сделать так:
I Навдгн наяСтрока = ТаблинаЗначенийНаши(ИскомоеЗначение);
Если требуется найти первую строку, где «ИскомоеЗначение» может быть найдено, например, в колонках «Поставщик» и «Покупатель», то:
НайденнаяСтрока = ТаблицаЗначений.Найти! ИскомоеЗначение,
"Поставщик, Покупатель");
Если же нужно найти все строки, где в колонке «Сотрудник» присутствует искомое значение, то это можно выполнить при помощи метода НаЙТиСтроки():
// Сформировать структуру отбора.
СтруктураПоиска = СтруктураС'Сотрудннк". ИскомоеЗначение);
// Найти строки.
МассивНайденныхСтрок = ТаблицаЗначений.НайтиСтроки(СтруктураПоиска);
Сначала создаем структуру поиска, каждый элемент которой будет содержать название колонки таблицы значений в качестве ключа и искомое значение в этой колонке - в качестве значения. Далее структуру поиска передаем в качестве параметра методу НаЙТиСтроки(). Результат - массив строк таблицы значений, соответствующих структуре поиска.
Замечание: если в этом примере в структуру поиска добавить поиск-нужного значения, например, еще и в колонке «Ответственный» - то в результате применения метода НаЙТиСтроки() получим все строки, где и «Сотрудник» и «Ответственный» равны искомому значению.
Как перебрать строки таблицы значений?
Поскольку имеем дело с индексированной коллекцией, то можно использовать цикл перебора элементов коллекции или «цикл-счетчик».
Например, чтобы сообщить значения колонки «Сотрудник» всех строк таблицы значений «ТаблицаСотрудников», можно использовать следующий код:
Для Каждого ТекущаяСтрока Из ТаблицаСотрудников Цикл Сообщить) ТекущаяС і рока.Сотрудник);
КонецЦикла:
То же через «цикл-счетчик»:
СтаршийИндекс = ТаблицаСотрудников.КоличествоО - 1
Для Сч = О по СтаршийИндекс Цикл Сообщить(СпнсокСотрудников[Сч].Сотрудник); КонецЦикла;
® Какудалить строки (колонки)таблицы значений?
Удаление отдельных строк таблицы значений происходит с обязательным указанием удаляемой строки или индекса удаляемой строки.
Если нужно удалить строку «УдаляемаяСтрока», входящую в таблицу значений «ТаблицаЗначений»:
ТаблицаЗначеннй.Удалить(УдаляемаяСтрока):
А так, например, будет удалена первая строка таблицы значений:
ТаблнцаЗначсннй.Удалнть(О):
Естественно, если указанный индекс будет выходить за границу индексов строк таблицы значений - получим сообщение об ошибке.
Аналогично и для колонок. Только работать уже надо с коллекцией колонок таблицы значений. Доступ к ней - через свойство КОЛОНКИ таблицы значений.
ТаблицаЗначений.Колонки. Удалить! Удаляемая Колонка)
или
ТаблицаЗначений.Колоики.Удалить(О);
Кроме того необходимо учитывать, что удаление строки (или колонки) «из середины» таблицы значений приведет к уменьшению на единицу индексов строк, стоявших «после» удаленной (эффект «смыкания рядов», вернее -«смыкание строк»).
Например, решим задачу удаления всех строк таблицы значений «ТаблицаЗначений», содержащих числовые значения хотя бы в одной колонке:
СтаршийИндексКолонок = ТаблицаЗначений.Копонки.КодичествоО - 1; Индекс = ТаблицаЗначений.Количество!) - 1;
Пока Индекс >= 0 Цикл
Для Сч = 0 По СтаршийИндексКолонок Цикл Если ТипЗнч(ТаблицаЗначений|Индскс][Счр = Тип('Число") Тогда ТаблицаЗначений. Удалить! Индекс);
Прервать;
КонецЕсли:
КонсцЦикла;
Индекс = Индекс - 1;
КонсцЦикла;
Сначала определяем самые старшие индексы строк и колонок таблицы значений. Цикл проверок и удалений строк будет выполняться, пока очередное значение индекса строки не окажется меньше нуля.
Внутри цикла но строкам делаем цикл-счетчик перебора индексов колонок.
Во вложенном цикле определяем тин значения элемента находящегося в строке с текущим индексом и в очередной колонке. Если это число - удаляем строку таблицы значений и прерываем вложенный цикл.
Кроме того, в любом случае на каждом шаге внешнего цикла уменьшаем на единицу значение переменной «Индекс».
В результате, поскольку перебор строк таблицы значений производится с конца, то эффект «смыкания рядов» будет актуален только для уже проверенных элементов.
Какзаполнитьтаблицузначений,если имена колонок содержатся в переменных?
Если имя колонки, для которой требуется установить значение, содержится в переменной, можно использовать оператор [ ]:
НоваяСтрока = Таблица'Значений Добавит ь(); НоваяСтрока|ИмяКолонкм] = Значение;
В вышеприведенном коде:
«ТаблицаЗначений» - имя таблицы значений;
«ИмяКолонки» - строковая переменная, содержащая имя колонки, по которой нужно заполнить значение;
«Значение» - переменная, содержащая само заполняемое значение.
Как заполнить всю колонку таблицы значений нужным значением?
Колонку «ФлагФискального Учета» в таблице значений
«ТаблицаЗначений» необходимо заполнить значением Ложь.
ТаблицаЗначений.ЗанолнитьЗначенияСЛожь. "ФлагФискальногоУчета"):
Применяем для таблицы значений метод ЗаполнитьЗначения(). Первым параметром передаем заполняемое значение. Вторым параметром - имя заполняемой колонки.
Содержание раздела