Transcript
Page 1: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки
Page 2: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

А.П. Габец, Д.И. Гончаров

1С:Предприятие 8.0

Простые примеры

разработки

Москва

ООО «1С-Паблишинг»

2005

Page 3: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

УДК 658.012.011.56:004.42ББК 65.29

Г12

Габец Андрей Петрович, Гончаров Дмитрий ИгоревичГ12 1С:Предприятие 8.0. Простые примеры

М.: ООО «1С-Паблишинг», 2005. - 420 с: ил.

ISBN 5-9677-0056-0

разработки,

Книга представляет собой справочное пособие, иллюстрирующеепростые примеры разработки алгоритмов на платформе«1С:Предприятие 8.0».

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

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

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

Под редакцией М.Г. Радченко.

4 6 0 1 5 4 6 0 2 5 6 1 6

Право тиражированияи распространения книги принадлежитфирме "1С-Паблишинг".Полное или частичное копированиематериалов книги без письменногоразрешения фирмы "1С-Паблишинг"запрещается.

ISBN 5-9677-0056-0 ООО "1С-Па6лишингм, 2005

Page 4: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

ОГЛАВЛЕНИЕ

Введение 16

Как работать с изданием? 17

Примитивные типы, системные функции 18(D Как явно указать нужную дату? 18Как проверить дату на пустое значение? 18Как сравнить две даты (дни)? 19Как прибавить к дате день, месяц? 19Как можно проверить тип значения переменной на равенство

нужному? 20Как очистить реквизит формы, имеющий ссылочный тип? 21Как очистить значение, имеющее тип «Хранилище значения»? 21Как проверить тип значения, помещенного в реквизит

имеющий тип «Хранилище значения»? 21Как сжать данные, помещаемые в хранилище значения? 22Как предоставить пользователю возможность выбора значения

составного типа? 23Как применить округление при работе с вычисляемыми

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

время? 25Как вывести число прописью по-русски, но без дробной части? 25Как вывести число прописью по-русски, с указанием сотых в

дробной части? 26Как вывести прописью число килограммов с указанием дробной

части в граммах? 27Как долларовую сумму вывести прописью по-английски? 27Как загрузить внешнюю компоненту? 27Как выполнить команду операционной системы? 28Как реализовать код процедуры в зависимости от режима

выполнения (на клиенте, на сервере, во внешнемсоединении) ? 29

Как при групповой обработке объектов реализовать стратегию«либо все, либо ничего»? 30

Как посчитать сумму по формуле сложного процента? 31

Универсальные коллекции 32

Массив 32(D В каких ситуациях обычно используются массивы? 32® Как создать массив? 32ф Как создать многомерный массив? 33ф Как добавить элементы в массив? 34

Page 5: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

Ф Как определить размер массива? 34ф Как обратиться к элементу массива? 34® Как перебрать элементы массива? 35ф Как удалить элемент массива? 36ф Как удалить все элементы массива? 37Как удалить повторяющиеся элементы массива? 37Как скопировать массив? 38Как проверить, что два массива идентичны? 39В массив выгружены данные, содержащие наименования

контрагентов. Как их отсортировать? 40Есть массив, в который выгружены значения типа

СправочникСсылка.Номенклатура. Как удалить все пустыезначения массива? 41

Как получить массив номенклатурных позиций, использованныхв табличных частях «Номенклатура» и «Тара» накладной? 42

Есть две таблицы значений. Как получить массив совпадающихимен колонок? 43

Как в запросе сделать отбор по нескольким вариантамзаполнения реквизита типа «ПеречислениеСсылка»? 44

Как из регистра сведений «РасчетчикиЗарплатыОрганизации»получить в виде массива всех расчетчиков зарплатыопределенного подразделения организации? 45

Структура 47Ф В каких ситуациях обычно используются объекты типа

«Структура»? 47ф Как создать структуру? 47ф Как добавить элементы в структуру? 48Ф Как обратиться к элементу структуры? 48ф Как перебрать элементы структуры? 49ф Как удалить элемент структуры? 50Как в структуре установить значение для элемента с

определенным ключом? 50Как получить в структуру многомерные данные? Как собрать

информацию по установленным в форме журнала отборам? 51Как определить, есть ли в структуре элемент с ключом

«Контрагент», и если есть, но содержит пустое значениесправочника или Неопределено — удалить этот элемент? 52

Как из табличной части «Товары» документа получить всестроки, где значение реквизита «Цена» равно нулю, азначение реквизита «СтавкаНДС» равно значению «НДС 18»перечисления «СтавкиНДС»? 53

Как получить данные о текущей учетной политикебухгалтерского учета организации из периодическогорегистра сведений на заданную дату? 53

Как сформировать структуру названий реквизитов табличнойчасти произвольного документа? 55

Как получить запросом данные табличной части документа, имеяструктуру названий реквизитов табличной части? 55

Соответствие 57

Page 6: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

ф В каких ситуациях обычно используются объекты типа«Соответствие»? 57

ф Как создать соответствие? 57ф Как добавить элементы в соответствие? 57ф Как обратиться к элементу соответствия? 58Ф Как перебрать элементы соответствия? 58ф Как удалить элемент соответствия? 59Как получить данные из соответствия? 59Как получить многоуровневое соответствие видов расчетов,

обладающих базовыми видами расчетов? 60

Список значений, таблица значений, дерево значений 63ф В каких ситуациях обычно используются списки значений,

таблицы значений, дерево значений? 63ф Как создать список значений? 64ф Как добавить элементы в список значений? 64ф Как найти элемент списка значений? 65ф Как обратиться к элементу списка значений? 65ф Как перебрать элементы списка значений? 66ф Как удалить элемент списка значений? 66ф Как создать таблицу значений и заполнить ее поля? 67ф Как найти значение в таблице значений? 68® Как перебрать строки таблицы значений? 69ф Как удалить строки (колонки) таблицы значений? 69Как заполнить таблицу значений, если имена колонок

содержатся в переменных? 71Как заполнить всю колонку таблицы значений нужным

значением? 71Как таблицу значений «ТаблицаПолучатель» заполнить данными

таблицы значений «ИсходнаяТаблица»? 72Как добавить колонки к таблице значений «ТаблицаЗначений» с

ограничениями по типу? 74Как изменить тип значения колонки таблицы значений,

полученной выгрузкой из запроса? 75Как самостоятельно заполнить дерево значений? 76

Прикладные объекты 78

Справочники 78Ф Как создать элемент (группу) справочника? 78ф Как найти элемент справочника? 80ф Как удалить элемент справочника? 81ф Как перебрать элементы справочника? 82ф Как выбрать все элементы из определенной группы? 83Ф Как перебрать элементы подчиненного справочника с

помощью запроса? 85Ф Как перебрать элементы подчиненного справочника с

помощью выборки справочника? 86ф Как открыть форму списка (элемента) справочника? 86

Page 7: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

ф Как добавить запись в табличную часть элементасправочника? 87

ф Как удалить строки из табличной части справочника? 87Ф Как перебрать строки табличной части справочника? 88Ф Как создать элемент в нужной группе? 89Как узнать, есть ли у текущего элемента подчиненные? 90Как узнать количество подчиненных элементов у выбранного

элемента справочника? 91Как узнать количество подчиненных элементов у выбранного

элемента справочника, если количество подчиненныхсправочников больше чем один? 93

Как получить всех родителей выбранного элемента справочника? 94Как получить запросом «полный» код элементов справочника,

если тип кода - Строка? 96Как получить все элементы справочника, содержащие в

наименовании определенную подстроку, со всей иерархией, вкоторую они входят? 97

Как найти все элементы справочника, в которых не заполненстроковый реквизит? 98

Как перенести все элементы справочника «Контрагенты» изодной группы в другую? 99

Как организовать программный выбор элемента справочника? 100Как сохранить фотографию сотрудника в справочнике

«Сотрудники»? 102

Документы 104® Как создать новый документ? 104ф Как найти документ? 104Ф Как открыть форму документа? 105ф Как изменить значение реквизита и записать документ? 106Ф Как добавить строку в табличную часть документа, имея

ссылку на документ? 107ф Как удалить строки из табличной части документа? 107ф Как перебрать строки документа? 108ф Как выгрузить табличную часть документа? 108ф Как посчитать итог в табличной части документа? 108ф Как провести документ? 109ф Как перебрать документы? 109ф Как пометить на удаление все приходные накладные? 111ф Как, имея ссылку на документ, создать в базе его копию? 111ф Как, имея ссылку на документ, прочитать его движения по

регистру? 112Как определить, по каким регистрам документ выполнил

движения? 113Как в табличной части документа удалить строки с нулевым

значением реквизита «Количество»? 115Как очистить колонку «СтавкаНДС» в табличном поле

«Товары» уже заполненного документа? 116Как заполнить значения свойств нового документа на основании

существующего? 117

Page 8: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

Как получить перечень приходных накладных, в которых незаполнены номенклатурные позиции? 118

Как на дату расходной накладной определить курс валютыуправленческого учета? Валюта управленческого учетахраниться в периодическом регистре сведений 119

Как из формы документа вызвать его неоперативноепроведение? 120

Как в обработке проведения получить остатки, актуальные напозицию документа? 121

Как определить количество документов и количество разныхзначений реквизита в таблице записей документа? 122

В последовательность «ПартионныйУчет» добавлено измерение«Организация». Как теперь получить данные по границампоследовательности для каждого значения этого измерения? 123

Хранение сведений 124® Как добавить запись в непериодический независимый регистр

сведений? 124ф Как считать содержимое непериодического независимого

регистра сведений? «СобственныеКонтрагенты»? 125Ф Как удалить все записи из независимого регистра сведений? 126ф Как удалить записи независимого регистра сведений с

отбором по конкретной организации? 126ф Как добавить запись в периодический независимый регистр

сведений? 127ф Как прочитать (изменить) записи в периодическом

независимом регистре сведений? 128ф Как удалить записи в периодическом независимом регистре

сведений? 128Как в периодическом независимом регистре сведений

«КурсыВалют» удалить все записи по валютам снаименованиями «EUR» и «USD», период которых меньше01 января 2005 года? 129

Как прочитать данные, актуальные на определенную дату, изрегистра сведений «Курсы валют» с отбором по несколькимвалютам (отбор по измерениям)? 131

Как поменять период у записей периодического независимогорегистра, соответствующих ряду условий? 132

Как «сделать периодическим» реквизит уже заполненногосправочника? 134

ф Как добавить записи в регистр сведений, подчиненныйрегистратору? 137

ф Как прочитать (изменить) записи в регистре сведений,подчиненном регистратору? 138

ф Как удалить записи из регистра сведений, подчиненногорегистратору? 139

Бухгалтерский учет 140Ф Как в регистре бухгалтерии сформировать проводки? 140ф Как получить остаток по счету? 142ф Как получить обороты по счету? 143ф Как получить остатки но счетам? 143

Page 9: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

Ф Как перенести остаток со счета на счет? 144Как найти первый документ, приведший к появлению

кредитового остатка на счете? 145Как выбрать все счета, в аналитике которых присутствуют либо

вид субконто «Контрагент», либо вид субконто «Договор»? 146Как выбрать все счета, в аналитике которых присутствуют как

вид субконто «Контрагент», так и вид субконто«Номенклатура»? 147

Как добавить новый вид субконто к счету? 147Как из регистра бухгалтерии «Хозрасчетный» получить обороты

только по валютным счетам? 149Как выбрать в регистре бухгалтерии «Хозрасчетный» обороты по

«60-ым» счетам, исключив внутренние обороты между ними? 151Как реализовать метод «красного сторно» для регистра

бухгалтерии? 152

Сложные периодические расчеты 154(D Как получить сумму начисления по конкретному виду расчета

указанному сотруднику в указанном периоде? 154(D Как получить сумму всех начислений указанному сотруднику

в указанном периоде? 155Как получить таблицу перерасчетов по перерасчетам нескольких

регистров? 156Как для документа «НачислениеЗарплатыРаботникам»

определить номера строк записей полностью вытесненныхвидов расчета? 157

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

прошлых периодов? 159

Бизнес-процессы 162Как определить бизнес процесс, в котором количество

последовательных этапов определяется индивидуально намомент старта экземпляра процесса? 162

Как при работе с бизнес процессами отказаться от стандартногоспособа формирования задачи и сформировать еепрограммно? 167

Прочие прикладные объекты 169ф Как, не открывая форму внешней обработки, выполнить ее

процедуру для определенного объекта? 169(D Как быстро получить информацию, по всем объектам,

находящимся в компетенции конкретного менеджера(элемент справочника «Пользователи») по продажам? 169

Формы и элементы управления 172

Работа с формами 172(D Как открыть форму документа? 172Ф Как открыть форму внешней обработки? 172(D Как отрыть форму отчета так, чтобы она не перекрывала

собой ту форму, из которой она открыта? 173

Page 10: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

® Как открыть форму отчета на весь экран? 173Как из формы документа открыть форму списка данного

документа, спозиционировавшись на нем же? 174® В документе есть реквизит «Контрагент». Как открыть форму

подчиненного ему справочника «ДоговорыКонтрагентов»? 175ф Как в форме отобразить картинку, сохраненную в реквизите

справочника? 176ф Как в журнале документов «УчетКадров» отобрать только

документы «ПриемНаРаботу»? 176ф Как узнать интервал дат в открытом текущем журнале? 177Как при открытии справочника сделать отбор по контрагентам,

входящим в список? 177Как обеспечить, чтобы для выбора значения покупателя в

расходной накладной справочник контрагенты открывалсясразу с открытой группой «Покупатели»? 178

Табличное поле 181ф Как запретить пользователю изменять порядок следования

колонок в табличном поле? 181Ф Как запретить пользователю изменять любые настройки

колонок табличного поля? 181ф Как вывести информацию о том, какой отбор установлен в

журнале документов? 182ф Как в форме справочника установить курсор на элемент с

известным наименованием? 182ф Как в форме списка сделать отбор по значению реквизита? 183ф Как запретить выдачу сообщения: «Введенные данные не

отображены в списке, так как не соответствуют отбору» придобавлении новых элементов в справочник? 184

ф Как заполнить ячейку табличного поля данными? 185Как изменить цвет фона ячейки табличного поля в зависимости

от значения, выводимого в нее? 186Как в табличное поле «ВыбранныеКонтрагенты» добавить новую

колонку «ОсновнойДоговор», заполнить ее значения и датьвозможность открытия этих значений? 187

Как задать список выбора для колонки «ВидДокумента»табличного поля? 189

Как обеспечить возможность отбора и сортировки данных пореквизитам, не отображаемым в табличном поле формысписка справочника? 190

Как реализовать перетаскивание между элементами управления? 190Как вывести остатки на складах в списке номенклатуры? 193

Другие элементы управления 194® В форме есть панель со страницами. Как разместить картинку

на закладке? 194Ф Как обеспечить, чтобы при открытии формы уже записанного

элемента справочника «Контрагенты» активной былазакладка «СчетаИДоговоры» панели «Панель»? 195

Как организовать выбор из нескольких списков документов дляоткрытия? 195

Как можно организовать подстановку обращения к персоне? 197

Page 11: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

Как в командной панели создать подменю с кнопками? 198Как созданной кнопке назначить «горячие клавиши»? 200Как реализовать заполнение возможных значений поля выбора

«ОбрабатываемаяТабличнаяЧасть» при заполнении поляввода «ОбрабатываемыйДокумент»? 201

ф Если пользователь указал несколько дат в поле календаря -как их перебрать? 202

ф Как организовать работу с индикатором? 203Как у элемента управления сменить источник данных? 205ф Как задать представление даты, отображаемое в поле ввода

по-умолчанию? 206Ф Как вывести текст в поле картинки в том случае, если

картинка не выбрана? 209Ф Как открыть пользователю стандартный диалог выбора цвета? 211Как заполнить список в форме данными запроса? 212ф Как отобразить в форме файл графической схемы? 212

Интерфейсы, стили 213ф Как задать различные стили 1С:Предприятия для различных

категорий пользователей? 213Есть список имен интерфейсов с пометками. Как сделать

помеченные интерфейсы видимыми? 214Как из формы обработки отключить глобальный обработчик

ожиданий? 215

Запросы, отчеты 216

Запросы 216Как получить данные из табличной части документов? 216Как получить данные из табличной части документов и

представить их в иерархическом виде? 217Как подсчитать количество одинаковых элементов в выбираемых

данных? 218Как применять условия для отбора по значениям полей,

вычисленных как результат агрегатной функции? 219Как ограничить выборку из виртуальной таблицы? 220Как просуммировать данные по одинаковым значениям одного

из полей выборки? 221Как получить только те записи, в которых значение

определенного поля превышает указанное значение? 223Как обратиться к подчиненным полям в запросе? 224Как объединить результаты нескольких запросов? 225Как выбрать данные из двух таблиц, удовлетворяющие

определенному условию? 226Как дополнить данные одной таблицы данными, выбранными из

другой таблицы по определенному условию? 227Как объединить данные из двух таблиц по определенному

условию? 228Как вывести некоторое значение вместо NULL в запросе? 231

10

Page 12: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

Как вместе с данными некоторой таблицы получить общие итогииз этой же таблицы? 231

Как получить иерархические итоги по группе справочника? 233Как по состоянию на заданную дату по регистру

«ОстаткиНаСкладе» найти последний документ«ПоступлениеТоваровУслуг», по которому приходиланоменклатура? 235

Как подсчитать количество записей с одинаковым значениемнекоторого поля? 237

Как в итоговых записях вывести количество различных записей? 239Как узнать количество записей в результате запроса? 240Как проверить достаточность остатков товаров на складах,

указанных в документе? 240Как в запросе осуществить отбор по значению перечисления? 243Как получить курсы валют на две интересующие даты? 245Как одним запросом получить таблицу расхождений курсов

взаиморасчетов всех выписанных документов«ЗаказПокупателя» с официальным курсом? 246

Как написать запрос таким образом, чтобы на определенномуровне иерархии запроса считались одни итоговые функции,а на другом уровне другие? 248

Как получить перечень документов, приведших данныеподчиненного периодического регистра сведений копределенному состоянию? 250

Как установить параметры запроса, если текст запроса заранее неизвестен? 252

Анализ данных 253ф Как получить данные о товарах продаваемых вместе? 253(D Как порекомендовать сопутствующие товары? 254(D Как посмотреть, что будет покупаться в дальнейшем? 255

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

Табличный документ, текстовый документ 257Как вывести результат запроса в табличный документ? 257Как вывести данные в табличный документ с возможностью

сворачивания и разворачивания данных по группировкам? 260Как при выводе данных в табличный документ свернуть все

выводимые группировки? 260Как при выводе данных в табличный документ произвольно

определить состав свернутых и развернутых группировок? 261(D Как выгрузить результат запроса с показом иерархии? 261(D Где и как можно увидеть макет, автоматически генерируемый

построителем отчета? 262Ф Как из построителя отчета передать данные в сводную

таблицу? 263Отчет формируется построителем отчета. Как убрать одну из

колонок, поместив ее данные в расшифровку другой? 264

11

Page 13: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

Как сохранить настройки построителя отчета до следующегооткрытия формы отчета? 266

Как организовать показ примечаний в формируемом табличномдокументе? 268

ф Как обеспечить, чтобы при вводе на печать не печаталисьпервая колонка и первая строка табличного документа«ДокументРезультат»? 271

Ф Как обеспечить фиксацию верхней части табличногодокумента, генерируемого построителем отчета, по срезушапки таблицы? 271

ф Табличный документ формируется построителем отчета. Какпри печати табличного документа обеспечить вывод шапкитаблицы на каждой странице? 272

ф Как при выводе на печать «длинного» документа указать вколонтитулах страниц номер документа, дату и номерстраницы? 273

® Табличный документ формируется по макету, автоматическигенерируемому построителем отчета. Как задать ориентациюстраницы при печати? 273

Табличный документ формируется построителем отчета. Как длявсех выводимых числовых показателей установить вывод бездробной части? 274

ф Как для построителя отчета совместить назначение своегомакета и применение одного из стандартных макетовоформления? 276

Как при получении данных из запроса обойти только итоговыезаписи? 276

Как при получении данных из запроса обойти толькоиерархические итоговые записи? 278

ф Как вывести картинку в табличный документ? 279Как вывести картинку в табличный документ без изменения

макета? 280Как работать со сводной таблицей? 280Как программно разместить данные в сводной таблице и

оформить ее? 282Как создать печатную форму посредством текстового шаблона? 283

Диаграммы 287ф Как заполнить диаграмму данными? 287Как заполнить данными измерительную диаграмму? 289ф Как вывести результат запроса в сводную диаграмму? 291ф Как заполнить диаграмму Ганта данными? 293Как связать интервалы диаграммы Ганта? 295Как обработать интерактивное изменение интервалов диаграммы

Ганта? 296Как разместить непериодические метки в диаграмме Ганта? 298Как выделить некоторые интервалы фона диаграммы Ганта? 300

Географическая схема 301ф Как отобразить в форме файл географической схемы? 301ф Как отобразить в форме макет географической схемы? 301ф Как изменить масштаб географической схемы? 301

12

Page 14: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

Как отобразить на географической схеме выбранный город? 302Как использовать таблицу значений в качестве источника

данных географической схемы? 303

Администрирование 305

Запуск 1С:Предприятия из командной строки 305© Как запустить 1С:Предприятие из командной строки? 305Как из командной строки заставить 1С:Предприятие сделать

выгрузку базы данных? 306Как из командной строки обновить изменения текущей

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

базы без проверки ссылочной целостности в автоматическомрежиме? 307

Как выполнить проверку конфигурации в автоматическомрежиме с выводом результатов проверки в файл? 307

Как сократить журнал регистрации программно? 309Как выгрузить модули прикладного решения в виде текстовых

файлов из командной строки? 309Как загрузить в прикладное решение файлы справки,

сохраненные в формате htm? 310

Разное 311ф Как поменять значение рабочей даты? 311Ф Как установить/снять монопольный режим? 311ф Как внести запись в журнал регистрации? 312ф Как получить данные о зарегистрированных пользователях

информационной базы? 313ф Как определить общую системную информацию? 314Как программно добавить пользователя в информационную

базу? 315Как создать собственный лог-файл для записи результатов

работы внешней обработки? 317Как в форме отобразить список пользователей, которые работают

с данной информационной базой? 318Как выгрузить журнал регистрации в XML-формате? 318Как принудительно завершить работу всех пользователей

информационной базы в клиент-серверном варианте работы? 320

Интеграция 321

Текстовый файл 321ф Как выгрузить данные из справочника в текстовый файл? 321ф Как загрузить данные из текстового файла? 322Работа с текстом. Модель последовательного доступа 322

XML 324ф Как из одной базы перенести документ в другую базу? 324

13

Page 15: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

Как можно сформировать XML-документ произвольнойструктуры? 326

Как сформировать XML-документ в строку? 327Как можно обмениваться данными, используя XML-

сериализацию через файлы других форматов? 328Как можно загрузить XML документ произвольной структуры? 329

DBF-файлы 331ф Как можно построить выгрузку-загрузку посредством файлов

DBF? 331

Работа с HTML-документами 332Ф Заполнение HTML-анкет 332

Работа с файлами 335ф Как организовать диалог выбора текстового файла? 335Ф Как прочитать информацию о файле? 336ф Как получить список файлов в указанном каталоге? 336Как переместить файл, выложенный на ftp к себе на локальный

компьютер? 337Как разделить большой файл на несколько файлов

определенного размера? 337Как поместить файлы в архив? 338Как сравнить два текстовых файла? 338Как организовать контроль формирования файла внешним

приложением? 340

ActiveX 341Ф Как использовать элементы управления ActiveX? 341

Макеты Active Document 343Как сформировать новый договор на основании файла Microsoft

Word? 343Работа с Интернет 345

Работа с электронной почтой 345Как организовать работу с электронной почтой через установленногопочтового клиента? 345Как организовать работу с почтой без установленного почтового клиентана компьютере пользователя? 346

Работа с файлами 349Загрузка файлов по FTP 349Выполнение HTTP запроса 350

Работа с СОМ-объектами 351ф Как из одной базы 1С:Предприятие 8.0 перенести остатки

товаров в другую базу, используя СОМ-соединение 351Пример обращения к программе 1С:Предприятие 8.0 из модуля

MS Excel через СОМ-соединение 353ф Как организовать считывание данных из файлов *.xls? 355Как запустить макрос, записанный в книге Microsoft Excel? 356Как создать документ программы Microsoft Excel no

оформлению, приведенному в другом документе? 357ф Как выгрузить прайс-лист в документ программы Microsoft

Word? 359

14

Page 16: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Оглавление

ф Как выполнить запрос к произвольной базе данных SQL? 362

Automation Client/Server (OLE) 363ф Как из одной базы 1С:Предприятие 8.0 интерактивно

заполнить документ в другой базе, используя AutomationClient/Server (OLE)? 363

Как из таблицы Excel загрузить список номенклатуры в1С:Предприятие с возможностью редактирования? 364

Обмен данными 366<Э Как организовать работу удаленных складов? 366Как при создании начального образа управлять тем, какие виды

объектов перегружаются, а какие нет? 369Как просмотреть объекты, для которых зарегистрированы

изменения? 371Как организовать обмен данными между произвольными

конфигурациями 1С:Предприятие 8.0? 372Как принудительно зарегистрировать изменения объектов? 379

WEB-расширение 380ф Как в форме списка номенклатуры отменить все

установленные отборы? 380Как запретить перенос содержимого ячеек в форме списка

расходных накладных? 382Как открыть список расходных накладных с отбором,

установленным по определенному складу? 384Как добавить кнопку для ввода документа на основании? 388

Указатель 389

15

Page 17: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Введение

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

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

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

При подборе примеров мы исходили из того, что спектр навыков изнаний специалистов, которые будут работать с данным изданием, можетбыть очень широк. Поэтому пусть Вас не смущают некоторые особо«бородатые» советы или, наоборот, - отсутствие подробного описания техили иных технологий. А для тех, кто практически не знаком с системой«1С:Предприятие 8.0», материал самых простых примеров, объясняющихазы использования объектов и механизмов системы, помеченспециальным значком ф.

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

Также следует заметить, что мы стремились сделать именно сборникпростых примеров, поэтому некоторые материалы вошли в издание в«разрезанном» виде. То есть вместо сложных и громоздких «сквозных»примеров, мы старались представить отдельные части, «кирпичики», изкоторых впоследствии можно собрать желаемое.

16

Page 18: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Введение

Стиль изложения соответствует цели издания, поэтому материалпредоставляется в форме вопросов и ответов, как, например, вследующем разделе:

Как работать с изданием?Решение данного вопроса - многовариантно.Можно читать классическим способом. От начала до конца, помечая

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

Можно читать выборочно. Любимая поговорка крутыхпрограммистов: «Мануал открывать надо уже в последний момент». Тоесть, проблема возникла - нашли раздел и попытались найти решение,или идею решения по аналогии. Но поговорку, на самом деле, мы совсемне одобряем!

Можно вообще не читать. Не читать комментарии. А рассматриватьиздание как сборник «шпаргалок» кода, решающего те или иныевопросы.

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

17

Page 19: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системныефункции

Как явно указать нужную дату?Для указания нужной даты можно пользоваться:

• литералом вида ТГГГММДДччммсс' встроенного языка;• встроенной функцией преобразования значений Дата();• литералом типа Дата языка запросов.

В таблице ниже приводится ряд возможностей явного указания датыпри помощи встроенного языка:

Выражение

'20050308'Дата(2005, 1,1)Дата(1, 1, 1)Дата(2005, 1, 1, 10, 29, 50)

Значение результата(тип)

08.03.2005 0:00:00 (Дата)01.01.2005 0:00:00 (Дата)01.01.0001 0:00:00 (Дата)01.01.2005 10:29:50 (Дата)

В случае же, если в тексте запроса необходимо жестко указать некуюдату - используется литерал ДАТАВРЕМЯ(). Например, поле созначением '01.01.2005 0:00:00' можно получить так:

Как проверить дату на пустое значение?Значение типа Дата не бывает «пустым». Если в явном виде

значение переменной типа Дата не задано, она будет иметь значение поумолчанию: начало первого дня первого месяца первого года (00 часов00 минут 00 секунд). Поэтому проверку проще сделать так:

18

Page 20: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Как сравнить две даты (дни)?Точность данных типа Дата - до секунды. А сравнивать нужно

именно дни.Тогда проще предварительно для сравниваемых дат воспользоваться

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

Как прибавить к дате день, месяц?Так как тип Дата содержит дату и время с точностью до секунды, то

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

Выражение

ДобавитьМесяц(Дата(2005, 1, 31), 1)ДобавитьМесяц(Дата(2005, 2, 28), -1)КонецМесяца(ДобавитьМесяц(Дата(2005, 2, 28), -1))

Значение результата(тип)

28.02.2005 0:00:00 (Дата)28.01.2005 0:00:00 (Дата)31.01.2005 23:59:59 (Дата)

19

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

• функции работы со значением типа Дата во встроенномязыке;

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

функций встроенного языка:

Page 21: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

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

В тексте запроса используем функцию ДОБАВИТЬКДАТЕ(). Вкачестве параметров ей необходимо передать исходную дату, типдобавляемых периодов (в нашем случае жестко прописали «День») иколичество добавляемых периодов.

Первый и последний параметры передали запросу, считав их изпараметров (заголовка) нашей функции.

Далее запрос выполняется, и из него получаем значение выходногополя по первой (и единственной) строке.

Результаты выполнения вышеприведенной функции будут такими:

ПолучитьДень('20052802', 10) = 10.03.2005 0:00:00ПолучитьДень('20042802', 10) - 09.03.2004 0:00:00, поскольку 2004

год был високосным!

Как можно проверить тип значенияпеременной на равенство нужному?

20

Page 22: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

ТипЗнч() - функция языка, возвращающая по значению его тип.Тип () - функция языка, возвращающая значение типа Тип построковому имени типа.

Как очистить реквизит формы, имеющийссылочный тип?

К примеру, реквизит (имя «Товар») имеет типСправочникСсылка.Номенклатура. Для очистки значения всвязанном с ним элементе управления на форме, необходимо выполнитьстроку кода:

21

То есть необходимо установить значение по умолчанию. А им, вданном случае, будет пустая ссылка на элемент справочника«Номенклатура».

Как очистить значение, имеющее тип«Хранилище значения»?

Очистить значение, записанное в реквизит или ресурс (имя«РеквизитХранилище») можно следующим образом:

Как проверить тип значения, помещенного вреквизит имеющий тип «Хранилищезначения»?

По причинам не связанным с возможностями системы1С:Предприятие 8.0, в реквизит «Фотография» (типХранилищеЗначения) справочника «Сотрудники» помещалась либоСтрока (преобразованная к типу ХранилищеЗначения), либоКартинка (преобразованная к типу ХранилищеЗначения). Какпроверить, что было записано?

Page 23: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Проверку можно осуществить, используя следующие строки кода:

Следует отметить, что в реквизит имеющий типХранилищеЗначения можно поместить только значение, имеющее типХранилищеЗначения. Работа со значением, помещенным в хранилищезначения, может начаться только после его получения (методПолучить()). После получения значение «восстанавливает свой прежнийтип». Если полученное значение равно Неопределено, то это означает,что никакое значение в реквизит не записывалось.

Как сжать данные, помещаемые в хранилищезначения?

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

Вторым параметром конструктора хранилища значения передаетсяобъект СжатиеДанных. Он тоже получен соответствующимконструктором, с указанием максимального уровня сжатия.

22

Page 24: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Как предоставить пользователю возможностьвыбора значения составного типа?

Для реализации этой задачи необходимо воспользоватьсяконструктором объекта ОписаниеТипов. А для него необходимопередавать в качестве параметра массив разрешенных для вводимогозначения типов значения.

Когда конструктором «ОписаниеВозможныхТипов» собрано -применяем функцию для вызова диалога ввода данныхВвестиЗначение().

Первым параметром функции необходимо указать доступную вданном модуле переменную для принятия введенного значения. Вторым- заголовок открываемого окна. Третьим - объект ОписаниеТипов.

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

23

Page 25: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Как применить округление при работе свычисляемыми числовыми полями в запросе?

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

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

В качестве выходных полей берем «Номенклатура» и результатделения значения полей источника «СтоимостьОборот» и«КоличествоОборот». Причем оператором ВЫРАЗИТЬ() тип последнегополя приводится к примитивному типу ЧИСЛО с определеннымформатом (длинна 15, точность 2).

Как вывести многострочное предупреждение?Переменные «Остаток» и «Зарезервировано» содержат значения,

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

СвободныйОстаток = Остаток - Зарезервировано.

Все это может быть выполнено следующим образом:

24

Page 26: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Процедура глобального контекста Предупреждение() выводит наэкран модальное окно предупреждения. Текст предупрежденияпередается первым параметром, вторым - таймаут, содержащий указаниеколичества секунд, через которое окно самостоятельно закроется (еслираньше его не закроет пользователь), третьим - указывается заголовококна.

Многострочность предупреждения в нашем примере осуществляетсяза счет добавления значения ПС (перевод строки) системного наборазначений СИМВОЛЫ в текст предупреждения.

Обратите внимание на вычисление свободного остатка в скобках -для обеспечения корректности выполнения арифметических действий ипреобразования данных к типу Строка.

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

Как при выполнении обработки сообщитьпользователю текущее время?

Метод ТекущаяДата() возвращает системную дату. Тип значения -Дата. В его значение входит и дата и время.

Для получения представления только времени можно применяемфункцию Формат().

Как вывести число прописью по-русски, но бездробной части?

Для этого используется функция ЧислоПрописью(). У нее могутбыть указаны в качестве параметров:

• преобразуемое число;• форматная строка;• параметры предмета исчисления (вид этой форматной

строки определяется значением кода локализации).

25

Page 27: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Все возможные варианты локализаций описаны в файле Locllnfo.txt,входящем в комплект поставки программы.

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

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

Для ВыводимоеЧисло = 234,4 результат будет: «Двести тридцатьчетыре».

Как вывести число прописью по-русски, суказанием сотых в дробной части?

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

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

Для ВыводимоеЧисло - 123,45 результат будет: «Сто двадцать трицелых сорок пять сотых».

26

Page 28: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Как вывести прописью число килограммов суказанием дробной части в граммах?

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

Для ВыводимоеЧисло = 12,345 результат будет: «Двенадцатькилограммов триста сорок пять граммов»

Как долларовую сумму вывести прописью по-английски?

Для ВыводимоеЧисло = 1 232,45 результат будет: «One thousand twohundreds thirty two dollars 45 cents»

Как загрузить внешнюю компоненту?Загрузим компоненту, позволяющую работать со сканером штрих-

кодов:

27

Page 29: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

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

Как выполнить команду операционнойсистемы?

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

следующую строку кода:

Кроме этого, для запуска внешнего приложения (или открытия файлас использованием ассоциированного с ним приложения) может бытьиспользован метод глобального контекста ЗапуститьПриложение(). Вэтом случае запуск приложения будет осуществляться непосредственно,минуя командный интерпретатор. Например:

28

Для просмотра доступных команд можно в командной строкесистемы выполнить команду «help».

Вызвать командную строку, можно выполнив строку кода:

Page 30: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Как реализовать код процедуры в зависимостиот режима выполнения (на клиенте, насервере, во внешнем соединении) ?

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

29

Page 31: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Как при групповой обработке объектовреализовать стратегию «либо все, либоничего»?

Требуется загрузить либо все данные по справочнику «Единицыизмерения», либо, в случае возникновения ошибки, нужно чтобы ни одинэлемент не был записан.

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

Если необходимо но мере накопления каких-либо признаков«искусственно» отменить действия, совершаемые в транзакции, можноиспользовать метод системы:

МО

Page 32: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Примитивные типы, системные функции

Как посчитать сумму по формуле сложногопроцента?

Возведение в степень реализуется функцией Pow(). Первымпараметром передается основание степени, вторым - показатель степени.

Замечание: кроме работы со степенями математический аппаратсистемы позволяет работать с корнями, логарифмами итригонометрическими функциями.

31

Page 33: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Массив

В каких ситуациях обычно используютсямассивы?

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

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

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

Как создать массив?Создание массивов чаще всего происходит посредством оператора

Новый:

В результате в переменной «СозданныйМассив» будет создан массивс десятью значениями. Для такого массива можно потом сразуобращаться к любому из десяти значений (начиная с нулевого подевятое) для записи или для чтения. А при необходимости к такомумассиву можно так же еще добавлять новые элементы. Первый жедобавленный элемент получит индекс «10».

32

где «СозданныйМассив» - имя переменной, которая будет содержатьсозданный объект типа Массив. После создания к массиву можнодобавлять элементы (произвольное количество).

Если же мы хотим создать массив с заранее определеннойразмерностью, это можно сделать так:

Page 34: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Массив

Как создать многомерный массив?Массив является линейной динамической коллекцией с

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

То есть создание массива массивов и решает задачу созданиямногомерного массива.

Это можно делать при использовании конструктора массива:

И в том и в другом случае мы решим задачу создания двумерногомассива размерностью 2x8.

Чтение и запись значений такого массива можно производитьпосредством директивного указания индексов:

или при помощи метода Получить():

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

33

или в процессе добавления очередных элементов к массиву:

Page 35: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Как добавить элементы в массив?Допустим, массив, к которому нужно добавить значение из

переменной «НовоеЗначение», называется «НашМассив».Если нужно просто добавить очередной элемент (с индексом на

единицу больше самого старшего) - действуем следующим образом:

Если нужно, чтобы новые значения добавлялись с определенныминдексом, то можно использовать метод Вставить():

Как определить размер массива?Чтобы определить количество элементов массива «НашМассив»

можно сделать так:

Однако имейте в виду, поскольку индексация элементов массиваначинается с нуля - значение переменной «Размер» будет на единицубольше значения самого старшего индекса.

Как обратиться к элементу массива?При обращении как для записи, так и для чтения элементов массива

лучше пользоваться оператором [ ], указывая индекс элемента. Помните,что индексация начинается с нуля.

Пусть в переменную «ПервоеЗначение» нужно считать значениесамого первого элемента массива, а в элемент массива с индексом «9»записать значение из переменной «ДесятоеЗначение»:

34

Page 36: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Массив

Аналогичных результатов можно добиться при помощи методовПолучить() и Установить():

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

Как перебрать элементы массива?Если перебор элементов массива нужен для чтения данных из

массива - проще всего организовывать посредством цикла перебораколлекции.

Например, чтобы вывести сообщения о каждом числе, найденном вмассиве «МассивЭлементов», достаточно сделать следующее:

Обратите внимание, «ЭлементМассива» - это произвольное имяпеременной, принимающей в себя очередное значение элементаколлекции при выполнении цикла.

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

Например, чтобы обнулить все числовые элементы массива,достаточно сделать следующее:

35

Page 37: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

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

Значение самого большого индекса массива определяетсяпосредством метода ВГраница().

Как удалить элемент массива?Удаление отдельных элементов массива происходит с обязательным

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

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

Кроме того, необходимо учитывать, что удаление элемента «изсередины» массива приведет к уменьшению на единицу индексовэлементов, стоявших «после» удаленного. Массив как бы «сомкнетряды».

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

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

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

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

36

Page 38: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Массив

® Как удалить все элементы массива?Если требуется полное удаление элементов из массива, операция

выполняется гораздо проще:

Для выполнения поставленной задачи организуется два цикла: впервом цикле осуществляется перебор элементов массива и для каждоговыбранного элемента осуществляется вложенный цикл сравнения

37

Как удалить повторяющиеся элементымассива?

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

Page 39: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

текущего элемента с последующими элементами массива. В случаесовпадения значений последующий элемент массива удаляется.

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

Как скопировать массив?

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

Page 40: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Массив

Как проверить, что два массива идентичны?Это можно выполнить при помощи следующей функции. В качестве

параметров ей передаются сами проверяемые массивы «ПервыйМассив»и «ВторойМассив».

Сначала проверяем совпадение наибольших индексов в массивах,если совпадения нет - массивы уже не идентичны. Значит функциявозвращает значение ЛОЖЬ.

Далее необходимо произвести проверку идентичности элементовмассивов с одинаковыми индексами. Поскольку индексация элементовмассива начинается с нулевого значения — выполняем цикл-счетчик отнуля до значения наибольшего индекса массива.

Внутри цикла при выполнении неравенства очередных элементовфункция возвращает значение Ложь.

Если цикл пройден до конца - значения всех элементов содинаковыми индексами совпали.

Значит функция может вернуть значение Истина.

39

Page 41: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

В массив выгружены данные, содержащиенаименования контрагентов. Как ихотсортировать?

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

Создаем список значений.Загружаем значения из массива «МассивНаименований».Сортируем список значений по значениям. Поскольку параметр не

указали, направление сортировки будет - по возрастанию. Если нужнопо убыванию - в качестве параметра надо передать соответствующеезначение системного перечисления НаправлениеСорТИрОВКИ:

40

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

Page 42: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Массив

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

Получаем в виде параметра процедуры массив номенклатурныхпозиций.

Устанавливаем нулевое значение счетчика - переменной «Счетчик».Организуем цикл, который будет выполняться, пока значение

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

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

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

41

Page 43: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Замечание: проверка на пустое значение для разных типов данныхпроводится по-разному. Только для ссылочных типов данных можно ееосуществлять посредством метода Пустая().

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

Имеем ссылку на документ «СсылкаНаДокумент». Номенклатурныепозиции могут быть указаны в колонке «Номенклат}фа» табличной части«Номенклатура» и в колонке «Номенклатура» табличной части «Тара».

Тогда массив номенклатуры из обеих табличных частей можнополучить следующим образом:

Формируем массив «МассивНоменклатуры» посредством выгрузкиколонки «Номенклатура» табличной части «Товары» документа.Аналогично формируем массив «МассивНоменклатурыТара» потабличной части «Тара».

Далее в цикле перебора элементов второго массива добавляем их впервый.

42

Page 44: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Массив

Есть две таблицы значений. Как получитьмассив совпадающих имен колонок?

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

Итак, есть «ТаблицаИсточник» PI «ТаблицаПриемник», требуетсяполучить массив имен совпадающих по имени колонок.

Создаем сначала конструктором «МассивСовпадающихКолонок».Далее выполняем цикл перебора колонок одной из таблиц. Внутри

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

при помощи метода Найти() пытаемся найти такую же по имениколонку. Если поиск успехом не увенчается - метод выдаст значениеНеопределено. А если удалось - добавляем очередной элемент кмассиву «МассивСовпадающихКолонок».

43

Page 45: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Как в запросе сделать отбор по несколькимвариантам заполнения реквизита типа«ПеречислениеСсылка»?

Одним из приемов программирования, использующим массивы,является формирование коллекции возможных значений для заполненияпараметров запроса. Это выполняется, например, когда в запросеиспользуются отборы с операндами В или В ИЕРАРХИИ.

Вот пример решения задачи:

В параметр «МассивПричин» устанавливается значение - массиввозможных причин, набранный из элементов перечисления« ПричиныОтсутствия».

Замечание: для решения подобных задач (с операндами В и ВИЕРАРХИИ) можно передавать не только данные типа Массив, можноеще СписокЗначениЙ или вообще сформировать коллекциювозможных значений вложенным запросом в самом тексте запроса.Вариант выбора заполнения параметра зависит от конкретики самойзадачи.

44

Page 46: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Массив

Как из регистра сведений«РасчетчикиЗарплатыОрганизации» получить ввиде массива всех расчетчиков зарплатыопределенного подразделения организации?

Периодический независимый регистр сведений«РасчетчикиЗарплатыОрганизации» имеет следующую структуру:

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

Пример решения посредством объектной модели:

Создаем набор записей регистра. Устанавливаем отбор по значениюизмерения «ПодразделениеОрганизации».

Читаем данные набора записей.Выгружаем колонку набора записей «Пользователь» в массив.Пример решения задачи посредством запроса:

45

Page 47: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Источником в запросе будет таблица регистра«РегистрСведений.РасчетчикиЗарплатыОрганизации». Накладываемотбор по условию равенства поля «ПодразделениеОрганизации»определенному значению.

В качестве выходных полей выбираем только «Пользователь».После выполнения запроса делаем выборку по результату запроса и в

цикле перебора ее - формируем нужный массив.В данных примерах оба способа возвращают одинаковые результаты

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

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

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

46

Page 48: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Структура

® В каких ситуациях обычно используютсяобъекты типа «Структура»?

Структура является универсальной коллекцией, то есть объектом,предназначенным для работы с не хранящимися в базе данныхсовокупностями значений.

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

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

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

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

Структуры могут создаваться конструктором НОВЫЙ или получатьсяв результате применения методов некоторых объектов. Ввод элементов вструктуру можно осуществлять как посредством параметровконструктора, так и посредством метода Вставить().

Как создать структуру?Создание структуры чаще всего происходит посредством оператора

НОВЫЙ:

47

где «СозданнаяСтруктура» - имя переменной, которая будетсодержать созданный объект типа Структура.

После вышеприведенного создания в структуру можно вставлятьэлементы (произвольное количество).

Page 49: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Если же мы хотим создать структуру с заранее определеннымиэлементами - это можно сделать, например, так:

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

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

Как добавить элементы в структуру?Для добавления элементов в структуру используется метод

Вставить(). Первым параметром указывается ключ, вторым - значениенового элемента.

Замечание: если в составе структуры уже был элемент с подобнымключом - то старый элемент будет замещен новым.

Например:

Как обратиться к элементу структуры?Для чтения значений элементов структуры можно использовать

несколько вариантов написания кода.Для структуры «Оппонент», в составе которой есть элемент с ключом

«Возраст» можно использовать явное указание значения ключа:

18

Page 50: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Структрура

или передачу ключа в переменной:

Также можно использовать метод СвоЙСТВО(), который получаетзначение элемента структуры по указанному ключу:

Для записи значений элементов структуры также можноиспользовать несколько вариантов написания кода.

Если мы хотим изменить значение возраста в структуре извышеописанного примера - можно это сделать так:

Как перебрать элементы структуры?Поскольку структура является коллекцией - перебрать элементы

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

структуры «СтруктураПараметров», можно сделать следующее:

49

или так:

или так:

Page 51: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Как удалить элемент структуры?Чтобы удалить элемент структуры - необходимо знать его ключ.

Например, чтобы удалить из структуры «СтруктураПараметров» элементс ключом «Номенклатура», достаточно сделать следующее:

Как в структуре установить значение дляэлемента с определенным ключом?

Все ключи элементов структуры - уникальны. Поэтому добавлениеновых элементов и замена (установка) значений для «старых» элементоввыполняется одним и тем же методом Вставить^):

Результатом примера выше будет структура, состоящая только изодного элемента: ключ у него - «Цвет», значение - «Синий» изсистемного набора значений \Л/еЬЦвета.

Если же нужно удалить все элементы структуры - применяетсяметод ОЧИСТИТЬ():

Page 52: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Структрура

Как получить в структуру многомерныеданные? Как собрать информацию поустановленным в форме журнала отборам?

Для формы журнала документов установлены некие отборы. Чтобысформировать многомерную структуру всех используемых отборовобъекта «ЖурналДокументовСписок», можно сделать следующее:

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

В цикле перебора коллекции отборов объекта«ЖурналДокументовСписок» сначала проверяем, используется лиданный отбор. Если используется — заполняем структуру параметровданного отбора. Полученную структуру используем в качестве значениядобавляемого элемента объекта «СтруктураОтборов».

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

51

Page 53: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

«СтруктураОтбора», а для каждого из этих элементов - перебратьэлементы ее значения - структуры «ПараметрыОтбора»

Как определить, есть ли в структуре элемент сключом «Контрагент», и если есть, носодержит пустое значение справочника илиНеопределено - удалить этот элемент?

В качестве параметров метода СвоЙСТВО() можно указать ключ ипеременную для получения значения по ключу.

Кроме того, сам метод возвращает Истина, если элемент с даннымключом существует, и Ложь - если нет.

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

Замечание: кроме метода СвоЙСТВО() получить значения элементаструктуры позволяют следующие варианты обращения по ключу:

Структура-Контрагент

или

Структура[ "Контрагент"

Page 54: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Структрура

Как из табличной части «Товары» документаполучить все строки, где значение реквизита«Цена» равно нулю, а значение реквизита«СтавкаНДС» равно значению «НДС18»перечисления «СтавкиНДС»?

Для поиска строк, соответствующих условию определенного отбора,можно сделать следующее:

СтруктураДляПоиска = Новый Структура("Цена, СтавкаНДС",О, Перечисления.СтавкиНДС.НДС 18);

МассивСтрок = Товары. НайтиСтроки(СтруктураДляПоиска);

Сначала создаем структуру для поиска. Далее посредством методаНаЙТиСтр0КИ() из табличной части документа «Товары» получаеммассив строк, соответствующих отбору по структуре поиска.

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

Как получить данные о текущей учетнойполитике бухгалтерского учета организации изпериодического регистра сведений назаданную дату?

Периодический регистр сведений«УчетнаяПолитикаБухгалтерскийУчет» имеет следующую структуру:

53

Тип значения измерения «Организация»СправочникСсылка. Организации.

Ссылка на организацию находится в переменной «ЮрЛицо». Дата, накоторую необходимо получить данные - переменная «ДатаПолучения».

Page 55: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Получение необходимых данных можно организовать посредствомметода ПолучитьПоследнее() менеджера регистра:

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

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

Дату получения и полученную структуру отбора используем вкачестве параметров для метода ПолучитьПоследнее(). Результатомприменения метода к периодическому регистру сведений«УчетнаяПолитикаБухгалтерскийУчет» будет структура. Элементыполученной структуры состоят из названия ресурса в качестве ключа изначения ресурса в качестве значения.

54

Page 56: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Структрура

Как сформировать структуру названийреквизитов табличной части произвольногодокумента?

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

Конструктором создаем структуру« Стру ктураТабл ичнойЧасти Доку мента».

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

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

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

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

55

Page 57: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Функция основана на сборе информации запросом, чей текстсобирается «кусочками» из строковых переменных:

Создаем переменную «ПоляРеквизитов».В цикле перебора элементов структуры имен полей табличной части

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

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

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

Функция возвращает результат выполнения запроса.

56

Page 58: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Соответствие

ф В каких ситуациях обычно используютсяобъекты типа «Соответствие»?

Соответствие является универсальной коллекцией, то есть объектом,предназначенным для работы с не хранящимися в базе данныхсовокупностями значений.

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

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

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

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

Соответствия могут создаваться конструктором НОВЫЙ.

ф Как создать соответствие?

Создание соответствия происходит посредством оператора Новый:

I СозданноеСоответствие = Новый Соответствие();

где «СозданноеСоответствие» - имя переменной, которая будетсодержать созданный объект типа Соответствие.

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

ф Как добавить элементы в соответствие?Допустим к соответствию «ВозрастСотрудников» нужно добавить

новый элемент. В качестве ключа должна выступать ссылка насотрудника (ее можно считать из переменной «Сотрудник»), в качествезначения - возраст сотрудника (его можно считать из переменной«ВозрастСотрудника»).

57

где «СозданноеСоответствие» - имя переменной, которая будетсодержать созданный объект типа Соответствие.

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

ф Как добавить элементы в соответствие?Допустим к соответствию «ВозрастСотрудников» нужно добавить

новый элемент. В качестве ключа должна выступать ссылка насотрудника (ее можно считать из переменной «Сотрудник»), в качествезначения - возраст сотрудника (его можно считать из переменной«ВозрастСотрудника»).

Page 59: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Тогда добавление нового элемента можно произвести так:

или так:

Как обратиться к элементу соответствия?Запись значений элементов соответствия можно выполнять теми же

способами, которые рассмотрены в вопросе «Как добавить элемент всоответствие?» на странице 57.

А чтение значений элементов соответствия можно выполнятьследующим образом:

или так:

В приведенных примерах из соответствия «ВозрастСотрудников» поссылке на сотрудника в качестве ключа будет получено значениеэлемента соответствия.

Как перебрать элементы соответствия?Поскольку соответствие является коллекцией - перебрать элементы

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

соответствия «Замены», можно сделать следующее:

58

Page 60: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Соответствие

Как удалить элемент соответствия?Чтобы удалить элемент соответствия - необходимо знать его ключ.

Например, чтобы удалить из соответствия «Замены» элемент со ссылкойна объект, содержащийся в переменной «УдаляемыйТовар», в качествеключа, достаточно сделать следующее:

Если же нужно удалить все элементы соответствия — применяетсяметод ОЧИСТИТЬ():

Как получить данные из соответствия?В соответствии «КурсыВалютДокумента» в качестве ключа

используется значение валюты, а значениями являются структуры,содержащие «Курс» и «Кратность». Как получить курс и кратностьвалюты «УправленческаяВалюта» ?

Сначала по ключу (ссылке на управленческую валюту) получаемзначение соответствия. Поскольку значением является структура курсавалют - далее получаем значения структуры по их названиям.

59

Page 61: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Как получить многоуровневое соответствиевидов расчетов, обладающих базовымивидами расчетов?

Для плана видов расчетов «ОсновныеНачисления» необходимополучить соответствие «ВидыРасчетов», где в качестве ключей будутиспользоваться виды расчетов, обладающие базовыми. А в качествезначений - соответствия базовых видов расчетов. В качестве ключейпоследних - базовые виды расчета, в качестве значений - структуры,содержащие их свойства «Наименование» и «Предопределенный».

Виды расчета

Ежегодныйотпуск

Надбавка за вредность

Базовые виды расчета

Оклад по дням

Оклад по часам

Оплата по часовому тарифу

Оплата по дневномутарифу

Оплата по произволетвенным нарядам

Оклад по дням

Оклад по часам

Оплата по произволетвенным нарядам

Свойства базового вида расчета"Наименование" - "Оклад по дням""Предопределенный" - Истина"Наименование" - "Оклад по часам""Предопределенный" - Ложь"Наименование" -"Оплата по часовому тарифу"

"Предопределенный" - Ложь"Наименование" -"Оплата по дневному тарифу"

"Предопределенный" - Истина"Наименование" -"Оплата по производственным нарядам"

"Предопределенный" - Истина"Наименование" - "Оклад по дням""Предопределенный" - Истина"Наименование" - "Оклад по часам""Предопределенный" - Ложь"Наименование" -"Оплата по производственным нарядам"

"Предопределенный" - Истина

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

60

Page 62: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Соответствие

Для запроса источником является таблица«ПланВидовРасчета.ОсновныеНачисленияОрганизации.БазовыеВидыРасчета». Выходными полями делаем все, необходимые для решения нашейзадачи.

Кроме того, вводим дополнительные итоги по полю «Ссылка»(ссылка на виды расчета).

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

61

Page 63: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Создаем конструктором три объекта - соответствие «ВидыРасчетов»,в которое будем впоследствии добавлять виды расчетов, обладающиебазовыми; соответствие «БазовыеВидыРасчетов», в которое будемдобавлять базовые виды расчетов для каждого отдельного вида(владельца); структуру «СвойстваВидовРасчетов» для добавленияинформации о свойствах базовых видах расчетов.

В цикле перебора верхнего уровня группировок (по видам расчета)сначала очищаем соответствие «БазовыеВидыРасчета».

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

По окончании вложенного цикла добавляем очередной элемент всоответствие «ВидыРасчетов» с заполнением значения ключа из поля«Ссылка», и заполненным соответствием «БазовыеВидыРасчета» вкачестве значения.

Page 64: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Список значений, таблица значений, деревозначений

® В каких ситуациях обычно используютсясписки значений, таблицы значений, деревозначений?

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

Необходимость в использовании списка значений возникает, когдатребуется работать с временным набором данных для решенияинтерфейсных задач. Дело в том, что в отличие от более простыхуниверсальных коллекций (массива, структуры, соответствия) списокзначений состоит из объектов - ЭлементСпискаЗначениЙ. А элементсписка значений характеризуется следующим набором свойств:

• Значение;• Представление. Содержит строковое пользовательское

представление. То есть именно его пользователь увидит наэкране. По умолчанию - генерируется автоматически;

• Пометка;• Картинка;

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

Таблицы значений позволяют работать с данными сущностей,представимых в виде таблиц, то есть «раскладываемых» на колонки истроки. А ведь с точки зрения многих систем автоматизации вообще«весь мир = совокупность таблиц».

При этом можно добавлять/удалять данные (и колонки, и строки, изначения); искать данные (и колонки, и строки, и значения); сортироватьданные (по любым колонкам); выгружать-загружать данные;подсчитывать итоги по колонкам; сворачивать данные и т.д.

Дерево значений позволяет в добавление к вышеприведеннымоперациям еще вводить уровни иерархии для этих данных и оперироватьв пределах уровней или игнорируя их.

63

Page 65: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

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

Как создать список значений?Список значений можно создать посредством оператора НОВЫЙ:

где «СозданныйСписок» - имя переменной, которая будет содержатьсозданный объект типа СписокЗначении.

Как добавить элементы в список значений?Например, требуется добавить в список значений

«СписокСотрудников» новый элемент со значением ссылки насотрудника (содержится в переменной «ТекущийСотрудник»), ФИОсотрудника в качестве представления (содержится в реквизите «ФИО»объекта «ТекущийСотрудник») и фотографии сотрудника в качествекартинки (содержится в переменной «Фото»):

Если нужно, чтобы новые значения добавлялись с определенныминдексом (переменная «Инд»), то можно использовать методВставить():

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

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

64

Page 66: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Список значений, таблица значений, дерево значений

Как найти элемент списка значений?Например, в списке значений «СписокСотрудников» надо найти

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

Это можно выполнить следующим образом:

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

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

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

Как обратиться к элементу списка значений?Если требуется получить доступ к элементу списка значений с

определенным индексом (пусть содержится в переменной «Инд»), можнопоступить так:

65

или так:

В любом случае - то, что получаем, еще не есть значение, заложенноев этот элемент списка (это еще не сотрудник), а именно объект типаЭлементСпискаЗначений.

Page 67: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Впоследствии с него можно считать значения свойств:

Как перебрать элементы списка значений?Поскольку имеем дело с индексированной коллекцией, то можно

использовать цикл перебора элементов коллекции или «цикл-счетчик».Например, чтобы сообщить значения всех элементов списка значений

«СписокСотрудников», можно использовать следующий код:

То же через «цикл-счетчик»:

Как удалить элемент списка значений?Удаление отдельных элементов списка значений происходит с

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

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

Кроме того, необходимо учитывать, что удаление элемента «изсередины» списка приведет к уменьшению на единицу индексовэлементов, стоявших «после» удаленного. Список значений - «сомкнетряды».

66

Page 68: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Список значений, таблица значений, дерево значений

Решим задачу удаления всех элементов списка значений«СписокОбъектов», содержащих числовые значения:

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

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

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

ф Как создать таблицу значений и заполнитьее поля?

Для создания таблицы значений используется оператор Новый:

Затем можно добавить новую строку и установить значения вколонках таблицы:

67

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

Page 69: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

или так:

Как найти значение в таблице значений?Если требуется найти первую строку таблицы значений

«ТаблицаЗначений», где присутствует «ИскомоеЗначение», можносделать так:

I Найден наяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение);

Если требуется найти первую строку, где «ИскомоеЗначение» можетбыть найдено, например, в колонках «Поставщик» и «Покупатель», то:

Если же нужно найти все строки, где в колонке «Сотрудник»присутствует искомое значение, то это можно выполнить при помощиметода НаЙТиСтроки():

Сначала создаем структуру поиска, каждый элемент которой будетсодержать название колонки таблицы значений в качестве ключа иискомое значение в этой колонке - в качестве значения. Далее структурупоиска передаем в качестве параметра методу НаЙТиСтроки(). Результат- массив строк таблицы значений, соответствующих структуре поиска.

Page 70: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Список значений, таблица значений, дерево значений

Замечание: если в этом примере в структуру поиска добавить поиск-нужного значения, например, еще и в колонке «Ответственный» - то врезультате применения метода НаЙТиСтроки() получим все строки, гдеи «Сотрудник» и «Ответственный» равны искомому значению.

Как перебрать строки таблицы значений?Поскольку имеем дело с индексированной коллекцией, то можно

использовать цикл перебора элементов коллекции или «цикл-счетчик».Например, чтобы сообщить значения колонки «Сотрудник» всех

строк таблицы значений «ТаблицаСотрудников», можно использоватьследующий код:

То же через «цикл-счетчик»:

® Как удалить строки (колонки) таблицызначений?

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

Если нужно удалить строку «УдаляемаяСтрока», входящую втаблицу значений «ТаблицаЗначений»:

69

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

Page 71: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

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

Аналогично и для колонок. Только работать уже надо с коллекциейколонок таблицы значений. Доступ к ней - через свойство КОЛОНКИтаблицы значений.

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

Например, решим задачу удаления всех строк таблицы значений«ТаблицаЗначений», содержащих числовые значения хотя бы в однойколонке:

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

Внутри цикла но строкам делаем цикл-счетчик перебора индексовколонок.

Во вложенном цикле определяем тин значения элементанаходящегося в строке с текущим индексом и в очередной колонке. Если

70

или

Page 72: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Список значений, таблица значений, дерево значений

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

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

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

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

Если имя колонки, для которой требуется установить значение,содержится в переменной, можно использовать оператор [ ]:

В вышеприведенном коде:«ТаблицаЗначений» - имя таблицы значений;«ИмяКолонки» - строковая переменная, содержащая имя колонки,

по которой нужно заполнить значение;«Значение» - переменная, содержащая само заполняемое значение.

Как заполнить всю колонку таблицы значенийнужным значением?

Колонку «ФлагФискального Учета» в таблице значений«ТаблицаЗначений» необходимо заполнить значением Ложь.

Применяем для таблицы значений метод ЗаполнитьЗначения().Первым параметром передаем заполняемое значение. Вторымпараметром - имя заполняемой колонки.

Замечание: если нужно заполнить несколько колонок значением - ихимена указывают через запятую во втором параметре. Если не указатьвторой параметр - значением заполнятся все поля таблицы.

71

Page 73: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Как таблицу значений «ТаблицаПолучатель»заполнить данными таблицы значений«ИсходнаяТаблица»?

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

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

Замечание: если у таблиц не будет колонок с одинаковыми именами- таблица-получатель будет в результате содержать столько же строк спустыми значениями, сколько строк было в таблице-источнике.

Если у каких-то одноименных колонок тип значения данных изтаблицы-источника не попадет в массив разрешенных типов колонкитаблицы-получателя - в таких полях получим пустые значения.

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

72

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

Тогда можно так:

Page 74: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Список значений, таблица значений, дерево значений

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

Поэтому в случае обнаружения в таблице-получателе одноименнойколонки собираем в переменных все свойства для новой колонки. Далееудаляем старую и создаем новую колонку.

Далее выполняем цикл перебора строк исходной таблицы.В цикле добавляем к таблице-получателю новую строку и открываем

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

таблицы получателя данными ячейки таблицы-источника.

73

Page 75: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Как добавить колонки к таблице значений«ТаблицаЗначений» с ограничениями по типу?

При добавлении колонки можно просто указать ее имя, а второйпараметр метода Добавить() - не трогать. В этом случае тип данныхколонки - произвольный.

Можно заполнить значение второго параметра. Туда необходимопередавать описание разрешенного для колонки типа. Само описаниеможно получить при помощи конструктора, передав последнему вкачестве параметра строковое название типа (если много типов - череззапятую) или массив допустимых типов.

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

Аналогичные действия можно осуществлять в отношенииквалификаторов числа и даты.

74

Page 76: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Список значений, таблица значений, дерево значений

Обратите внимание, описание типов можно строить конструкторомкак «с нуля», так и использовать как основу уже существующее описаниетипов.

Как изменить тип значения колонки таблицызначений, полученной выгрузкой из запроса?

Запросом собираются данные по документам«Посту плениеТоваров Услуг» PI выгружаются в таблицу значений«ТаблицаСсылок» (колонка «Ссылка»). Впоследствии к этой таблицезначений будут добавляться еще строки. Как обеспечить возможностьдобавления в полученную таблицу значений в колонку «Ссылка»документов других видов («ОприходованиеТоваров»,« ВозвратОтПокупателя» ) ?

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

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

75

Page 77: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Универсальные коллекции

Создаем пустые ссылки на документы «ОприходованиеТоваров» и«ВозвратОтПокупателя».

Далее в запросе делаем объединение с записями, содержащими этипустые ссылки. Причем в объединяемых запросах по пустым ссылкамприменяем ПЕРВЫЕ 0 для того, чтобы впоследствии не удалять строкис пустыми ссылками из таблицы выгруженного результата запроса

После выполнения и выгрузки запроса в таблицу значений«ТаблицаСсылок» тип значения колонки «Ссылка» будет составным:«NULL, ДокументСсылка ЛоступлениеТоваровУ слуг,ДокументСсылка. ОприходованиеТоваров,ДокументСсылка.ВозвратОтПокупателя».

То есть - то, что и требовалось.

Как самостоятельно заполнить деревозначений?

Для иллюстрации данной возможности создадим обработку, вкоторой определен реквизит «Дерево» (тип ДеревоЗначениЙ). Вдиалоге определено табличное поле, связанное через свойство данные среквизитом «Дерево» (имя элемента управления «Дерево»).

Следующая процедура произведет запись данных в дерево значений.

76

Page 78: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Список значений, таблица значений, дерево значений

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

77

Page 79: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Справочники

© Как создать элемент (группу) справочника?Создание нового элемента в неиерархическом справочнике можно

выполнить при помощи следующего кода:

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

Если требуется создать новую группу в иерархическом справочнике,то для этого следует использовать метод менеджера справочникаСоздать Груп пу (). Если группа должна находиться внутри

78

Page 80: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

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

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

• Для группы• Для группы и элементаЕсли для справочника установлен вид иерархии Иерархия

элементов, то для создания новых элементов следует использоватьметод СоздатьЭлемент() менеджера справочника, а иерархиясоздаваемых элементов будет определяться значением свойстваРодитель объекта справочника:

79

Page 81: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как найти элемент справочника?Для поиска элемента справочника можно использовать несколько

способов. По коду:

При организации поиска по коду обращайте внимание на тип кодасправочника (Число или Строка).

По наименованию:

По реквизиту:

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

80

Page 82: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

Как удалить элемент справочника?Для корректного удаления элемента справочника необходимо

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

Например, в переменной «СсылкаНаУдаляемыйЭлемент» содержитсяссылка на удаляемый элемент справочника:

Для пометки элемента справочника на удаление можно использоватьметод УстановитьПометкуУдаления() объекта справочника:

81

Использование этого метода позволяет установить или снять пометкуна удаление элемента справочника, причем будут инициированы событияПеред записью и При записи объекта справочника, посколькувыполняется сохранение измененного свойства ПометкаУдаленияобъекта справочника.

Page 83: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как перебрать элементы справочника?Для того чтобы перебрать элементы справочника, необходимо

сформировать выборку элементов с нужными параметрами и затемобойти ее в цикле.

Например, для перебора всех элементов справочника«Номенклатура» в иерархическом порядке, можно использоватьследующий код:

Аналогичного результата можно добиться, используя запрос:

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

82

Page 84: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

® Как выбрать все элементы из определеннойгруппы?

Организуем выборку элементов справочника из группы, ссылка накоторую определена в переменной «ПолеВводаРодитель»:

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

83

Page 85: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Если необходимо получить не только дочерние элементы, но и всеэлементы, находящиеся в иерархии выбранного элемента, следует, прииспользовании объектной техники, выполнять методВыбратьИерархически() менеджера справочника:

а при использовании запроса применять условие В ИЕРАРХИИ:

81

Page 86: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

® Как перебрать элементы подчиненногосправочника с помощью запроса?

Справочник «КонтактныеЛица» подчинен справочнику«Контрагенты».

Требуется перебрать всех контактных лиц определенного контрагента.Ссылка на данного контрагента находится в переменной «Контрагент».

Делаем запрос по таблице справочника «Контактные лица» с отборомпо полю «Владелец». В качестве владельца передаем ссылку на элементсправочника «Контрагенты».

85

Page 87: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

® Как перебрать элементы подчиненногосправочника с помощью выборки справочника?

Справочник «КонтактныеЛица» подчинен справочнику«Контрагенты».

Требуется перебрать всех контактных лиц определенного контрагента.Ссылка на данного контрагента находится в переменной «Контрагент».

ф Как открыть форму списка (элемента)справочника?

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

Для того чтобы открыть произвольную форму справочника, можноиспользовать метод ПолучитьФорму() менеджера справочника:

Однако следует помнить, что если методом ПолучитьФорму()выполняется получение формы элемента или группы справочника, тобудет получена форма нового элемента (группы).

Page 88: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

Для того чтобы открыть форму существующего элемента или группысправочника, следует использовать метод ПолучитьФорму() ссылкиили объекта справочника:

® Как добавить запись в табличную частьэлемента справочника?

Имеется ссылка на элемент справочника «Контрагенты». Какдобавить запись в табличную часть «ВидыДеятельности» этого элемента?

Модифицировать можно только объект справочника.Поэтому так:

Получаем объект справочника от ссылки на элемент.Добавляем новую строку к табличной части полученного объекта.Заполняем реквизиты табличной части в данной строке.Записываем измененный элемент справочника.

Как удалить строки из табличной частисправочника?

Для того чтобы полностью очистить табличную часть элементасправочника, можно воспользоваться методом ОЧИСТИТЬ() табличнойчасти справочника:

87

Page 89: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Если требуется выборочное удаление строк табличной части(например, в зависимости от значения их реквизитов), можно сначалаотобрать строки, удовлетворяющие условию, а затем удалить каждую изних методом Удалить() табличной части справочника. В следующемпримере подразумевается, что переменная «ВыбранныйЭлемент»содержит ссылку на обрабатываемый элемент справочника, а переменная«ВыбранныйВидДеятельности» содержит ссылку на вид деятельности,который не должен присутствовать у обрабатываемого элемента:

ф Как перебрать строки табличной частисправочника?

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

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

Page 90: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

® Как создать элемент в нужной группе?Необходимо создать элемент справочника номенклатура, так чтобы

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

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

89

Page 91: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Обратите внимание на тот факт, что механизм работает, только если всправочнике установлен вид иерархии «Иерархия групп и элементов». Впротивном случае код будет выглядеть следующим образом:

Если вид иерархии справочника «Иерархия элементов», то понятиегруппы в нем отсутствует.

Как узнать, есть ли у текущего элементаподчиненные?

Пусть ссылка на текущий элемент справочника содержится впеременной «Владелец». Необходимо узнать, есть ли в справочнике«Единицы измерения» элементы, подчиненные текущему элементу.

Если использовать объектную модель доступа:

90

Page 92: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

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

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

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

Как узнать количество подчиненных элементову выбранного элемента справочника?

Необходимо определить количество элементов в справочнике«ЕдиницыИзмерения» подчиненных элементу справочника, ссылка накоторый находится в переменной «Владелец». С помощью объектноймодели:

91

Page 93: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

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

Если решать задачу с помощью запроса, то решение выглядитследующим образом:

В результате в переменной «КоличествоЗаписей» будет находитьсянужная нам величина.

Page 94: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

Как узнать количество подчиненных элементову выбранного элемента справочника, есликоличество подчиненных справочников большечем один?

Если у справочника есть несколько подчиненных справочников, тозапрос может выглядеть следующим образом:

Данный запрос позволяет получить количество записей в двухподчиненных справочниках. В качестве источника данных в основномзапросе используется подзапрос («ВложенныйЗапрос»). Сам подзапроссостоит из двух запросов (происходит их объединение). Каждый изобъединяемых запросов получает данные о количестве записей в одномиз подчиненных справочников.

В выборке результата запроса (в случае если у элемента справочника,ссылка на который находится в переменной «Владелец», естьподчиненные элементы) будет одна строка, в поле«КоличествоПодчиненныхЭлементов» которой содержится количествоподчиненных элементов.

93

Page 95: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как получить всех родителей выбранногоэлемента справочника?

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

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

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

Результат запроса будет содержать одну «лишнюю» запись, которуюлегко «отсеять» проверкой свойства «ЭтоГруппа».

94

Page 96: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

Однако получение иерархических итогов оптимизированодля построения итогов большого количества записей, и не вполнеэффективно для получения родителей одного элемента. Для болееэффективного получения всех родительских записейэлемента, рекомендуется перебирать в цикле его родителей небольшимипорциями, например, так:

95

Page 97: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

В данном примере в окно служебных сообщений выводятся всеродители для ссылки, записанной в переменную«ЭлементНоменклатура». В цикле выбирается по 5 родителей ссылки.

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

Как получить запросом «полный» кодэлементов справочника, если тип кода -Строка?

Понятие «Полный код» соответствует объектной модели системы.Это свойство объектов «СправочникСсылка» и «СправочникОбъект»,содержащее указание кодов элемента и всех родителей его иерархии.Представляет собой строку, в которой указаны коды всех вышестоящихэлементов иерархии, начиная с самого верхнего уровня и разделяемыесимволом «/» заканчивая кодом самого элемента.

В табличной модели хранения информации никакого поля«ПолныйКод» для таблиц справочника не существует.

Однако можно говорить о значении поля «Родитель» каждой иззаписей таблиц справочников и о значении поля «Код».

Поэтому запрос по трехуровневому справочнику «Контрагенты»будет выглядеть следующим образом:

Источником является таблица справочника. Из нее выбираем поле«Ссылка» и вычисляемое поле «ПолныйКод».

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

96

Page 98: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

Уровень определяем следующим образом: для записей корневогоуровня поле «Родитель» содержит пустую ссылку на элементсправочника, поэтому значение поля «Код» этого «Родителя» будетNULL. Если это условие выполнилось - значит, элемент находится накорневом уровне, и в качестве полного кода достаточно указать код.

Если условие не выполнилось - проверяем аналогичным способомэлемент на принадлежность к первому уровню. В случае выполненияусловия — выводим уже код родителя и код самого элемента через «/».

Таким же образом можно построить «сборку» поля «ПолныйКод»для случаев 4-х, 5-ти и т.д. уровневых справочников.

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

Как получить все элементы справочника,содержащие в наименовании определеннуюподстроку, со всей иерархией, в которую онивходят?

Допустим, речь идет о справочнике «Контрагенты».Лучше всего с данной задачей справится запрос со следующим

текстом:

97

Page 99: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Источником запроса является таблица справочника. Делаем отбор понаименованиям, в составе которых присутствует значение параметра«ЧастьНаименования». Условие отбора обеспечивается посредствомоператора проверки строки на подобие шаблону. В шаблоне служебнымисимволами «%» обозначается, что перед и после части строки, считаннойиз «ПолеВводаПодстрока», может встречаться произвольное количестводругих символов.

Как найти все элементы справочника, вкоторых не заполнен строковый реквизит?

Получить желаемое можно таким запросом:

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

Для того, чтобы «защитить пользователя от самого себя» в подобныхслучаях запрос лучше немножко изменить. Например, для реквизита смаской «999-999-999 99» запрос будет выглядеть таким образом:

Количество пробелов перед и между символами «-» должносоответствовать маске.

Page 100: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

Как перенести все элементы справочника«Контрагенты» из одной группы в другую?

Для этого необходимо перезаполнить значением нового родителяреквизит «Родитель» у элементов, непосредственно являющихся«потомками» исходного родителя.

Итак, пусть переменная «СтарыйРодитель» содержит старого, а«НовыйРодитель» - нового родителя.

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

Источником для запроса является таблица справочника«Контрагенты». Делаем отбор непосредственно по полю «Родитель» иполучаем таблицу ссылок на нужные нам элементы справочника.

Далее:

В цикле обработки результата запроса производим получение объектапо ссылке. Для каждого полученного объекта производим запись новогородителя в реквизит «Родитель» и непосредственную запись объекта сизмененными данными.

99

Page 101: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как организовать программный выборэлемента справочника?

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

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

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

100

Page 102: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

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

Если есть необходимость в использовании собственного алгоритмаобработки выбранного значения, его следует размещать в обработчикесобытия Обработка выбора поля ввода:

101

Page 103: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как сохранить фотографию сотрудника всправочнике «Сотрудники»?

Необходимо создать реквизит справочника «Фотография» иопределить у него тип ХранилИЩеЗначения. Далее в форме элементаопределить кнопку (либо использовать кнопку командной панели), принажатии на которую, будет выполняться следующий обработчиксобытия:

В данной процедуре первоначально создается объектДиалогВыбораФаЙла. Метод Выбрать() открывает данный диалог ив случае выбора возвращает значение Истина.

В приведенном примере в объект ХранилищеЗначения помещаетсяобъект Картинка. Это удобно в том случае, если предполагается, чтопосле извлечения, картинка будет отображаться в элементе управленияПолеКартинки диалога какой-либо формы. .В противном случае вреквизит можно помещать не значение, имеющее тип Картинка, азначение с типом ДвоичныеДанные.

102

Page 104: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Справочники

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

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

103

Page 105: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

© Как создать новый документ?Если создание нового документа должно пройти без участия

пользователя, можно сделать так:

Переменная «НовыйДокумент» в таком случае имеет тип значенияДокументОбъект - мы сразу получаем объект нового документа. Азначит, обращаясь к ней, впоследствии можно заполнить реквизитыдокумента и записать его.

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

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

Как найти документ?Например, нужно найти в 2005 году документ

«РеализацияТоваровУслуг» по номеру «НомерДок» (периодичностьнумерации - «в пределах года»). Тогда так:

104

Page 106: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

Второй параметр метода НаЙТИПоНомеру() используется в случаяхпериодических нумерациый документов и может содержать любую датуиз того периода, в рамках которого нужно искать документ.

Если же поиск нужно выполнять по реквизиту, то можно, конечно,использовать объектную модель работы с данными - методНаЙТиПоРеквизиту() менеджера документа. Однако в результате будетполучен только один из документов с искомым значением реквизита.

Гораздо удобнее для выполнения операций поиска использоватьзапросы. Например, с таким текстом:

Такой запрос позволяет получить все документы«РеализацияТоваровУслуг» по указанному контрагенту, закупавшемутовары из указанной номенклатурной группы ранее 1 января 2005 годаили позже, но с номерами документа менее «100».

Как открыть форму документа?В переменной «ИскомыйДокумент» содержится ссылка на документ.

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

105

Page 107: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Ф Как изменить значение реквизита и записатьдокумент?

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

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

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

106

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

Если необходимо при этом провести документ, то:

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

Если же наоборот, нужно отменить проведение документа, то:

Page 108: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

® Как добавить строку в табличную частьдокумента, имея ссылку на документ?

Допустим переменная «Док» содержит ссылку на документ. Имятабличной части этого документа - «Товары». Тогда:

Сначала получаем объект документа. Потом добавляем новую строкув табличную часть «Товары» документа. Результат метода Добавить() иесть новая строка. Теперь можно заполнить значения ее реквизитов.

В конце нужно не забыть записать документ.

ф Как удалить строки из табличной частидокумента?

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

В данном случае документ записан без проведения. Подробнее озаписи документа с проведением смотри вопрос «Как провестидокумент?» на странице 109.

107

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

Page 109: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как перебрать строки документа?У документа может быть несколько табличных частей.Перебор строк каждой табличной части проще производить в цикле

перебора элементов коллекции или при помощи «цикла-счетчика».Например, чтобы перебрать строки табличной части «Товары»

документа «Документ», можно сделать так:

А можно так:

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

® Как посчитать итог в табличной частидокумента?

Итог по колонке «Сумма» табличной части «Товары» документа«Документ» можно посчитать следующим образом:

108

ф Как выгрузить табличную часть документа?Чтобы выгрузить табличную часть «Товары» документа «Документ»

в таблицу значений, можно сделать так:

Page 110: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

Как провести документ?

Первым параметром метода Записать() следует указание режимазаписи документа. Тип его значения задается системным перечислениемРежимЗаписиДокумента, и может принимать следующие значения:

• Запись;• ОтменаПроведения;• Проведение

В нашем случае - это Проведение. Теперь при выполнении этойкоманды управление будет передано в обработчик события Обработкапроведения записываемого документа.

Обратите внимание - нет отдельной команды на проведение, естьтолько запись документа, с проведением или без.

Как перебрать документы?Для перебора всех документов, например «РеализацияТоваровУслуг»,

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

В теле цикла можно работать с каждым отдельным элементомвыборки.

109

Page 111: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Однако, в случаях, когда требуется перебрать документы,соответствующие ряду условий - гораздо удобнее получать нужныедокументы при помощи запроса:

В данном пример организован перебор всех документов«РеализацияТоваровУслуг» по указанному контрагенту, закупавшемутовары из указанной номенклатурной группы ранее 1 января 2005 годаили позже, но с номерами документа менее «100».

НО

Page 112: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

ф Как пометить на удаление все приходныенакладные?

Выполняем выборку приходных накладных. Обходим ее в цикле.Внутри цикла получаем объект документа по каждой из ссылок нанакладную. Теперь помечаем документ на удаление при помощи методаУстановитьПометкуУдаления(). В результате документ будетпомечен на удаление с вызовом обработчика Перед ЗЭПИСЬЮ.

Замечание: как альтернативный вариант - можно было бы внутрицикла просто присваивать реквизиту «ПометкаУдаления» объектадокумента значение Истина. Но в этом случае пришлось бы ещеобеспечивать и запись документа.

(D Как, имея ссылку на документ, создать вбазе его копию?

При применении метода Скопировать^) все реквизиты новогодокумента получают свои значения из переменной«ИсходныйД оку мент». Исключение составляют значения реквизитов«Дата» и «Проведен».

Поэтому, если копирование документа не сопровождается открытиемего формы, дату нового документа лучше установить самостоятельно.

В нашем примере в качестве значения реквизита «Дата»устанавливаем дату, которую обычно используют для случаев созданияновых документов (получаем из свойства глобального контекстаРабочаяДата).

111

Page 113: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

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

® Как, имея ссылку на документ, прочитать егодвижения по регистру?

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

В запросе выбираем все поля (кроме виртуальных) из таблицырегистра «РегистрНакопления.ОстаткиНоменклатуры» с отбором порегистратору. Значением параметра «Регистратор» нужно будетустановить ссылку на документ.

Если же нужно чтение с последующей модификацией движений -следует воспользоваться объектной моделью представления информации:в свойстве Движения объекта документа обратиться к нужному регистру(в нашем случае это регистр «ОстаткиНоменклатуры») и прочитатьнабор записей регистра:

112

Но если Вам нужно и дату скопировать из документа - источника, тоэта строка должна выглядеть следующим образом:

Page 114: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

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

Например:

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

Далее читаем наборы записей каждой коллекции и открываем циклперебора записей данного набора записей.

Как определить, по каким регистрам документвыполнил движения?

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

113

Page 115: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Для каждого регистра, по которому документ «ВнутрениийЗаказ»может выполнять движения, выполняется получение одной первойзаписи этого регистра, для которой выбранный документ являетсярегистратором (ссылка на выбранный документ должна быть передана впараметр «Регистратор» запроса). В качестве значения выбранного поляполучается строка с названием регистра. Результаты всех запросовобъединяются.

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

114

Page 116: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

Как в табличной части документа удалитьстроки с нулевым значением реквизита«Количество»?

Если у нас есть ссылка на некоторый уже записанный документ,тогда можно поступить следующим образом:

Получаем по ссылке объект документа. Создаем структуру дляпоиска. В качестве ключа указываем название реквизита, в качествезначения - искомое значение. Обращаемся к табличной части «Товары»данного документа. Посредством метода НаЙТиСтроки() получаеммассив строк соответствующих нашей структуре для поиска. В циклеперебираем эти строки и удаляем их из табличной части документа.После выхода из цикла записываем документ-объект с обработаннойтабличной частью.

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

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

115

Page 117: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как очистить колонку «СтавкаНДС» втабличном поле «Товары» уже заполненногодокумента?

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

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

Например, текст процедуры обработчика:

Тогда решение нашей задачи будет выглядеть следующим образом:

Открываем цикл перебора строк табличной части «Товары». В циклеустанавливаем значение «Неопределено» для реквизита «СтавкаНДС».

Теперь необходимо выполнить те же действия, что выполнялобработчик интерактивного изменения ставки НДС. И поскольку однимиз параметров процедуры РассчитатьСуммуНДСТабЧасти() передаетсясвойство Текущие Да иные табличного поля - сначалапозиционируемся на нужной строке табличного поля. Теперь передаемуправление нужной процедуре.

116

Page 118: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

Как заполнить значения свойств новогодокумента на основании существующего?

Для этого можно воспользоваться методом глобального контекстаЗаполнитьЗначенияСвоЙСТВ(), который позволяет копироватьзначения свойств одного объекта в свойства другого объекта:

117

Page 119: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как получить перечень приходных накладных,в которых не заполнены номенклатурныепозиции?

Выполняем запрос по табличной части «Товары» приходныхнакладных. Делаем отбор по равенству поля «Номенклатура» параметру« ПустаяНоменклатура».

В качестве значение параметра устанавливаем пустую ссылкусправочника «Номенклатура».

Результат запроса будет состоять из единственной колонки«Накладные».

Обратите внимание - выбираем не повторяющиеся записи(ВЫБРАТЬ РАЗЛИЧНЫЕ). Это сделано для случая наличиянескольких строк с незаполненной номенклатурой в одном документе.

118

Page 120: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Как на дату расходной накладной определитькурс валюты управленческого учета? Валютауправленческого учета храниться впериодическом регистре сведений.

Информацию о валюте управленческого учета хранит регистрсведений «УчетнаяПолитика» - периодический, с периодичностью год:

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

119

Документы

Регистр сведений «КурсыВалют» - так же периодический, но спериодом «день»:

Данную информацию можно получить посредством запроса:

Page 121: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

«РегистрСведений. Курсы Валют. СрезПоследних». Посколькууправленческих валют - только одна, на выходе запроса получимтаблицу из единственной записи с двумя полями «ВалютаУпр» и«КурсУпр».

Как из формы документа вызвать егонеоперативное проведение?

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

В случае если для проведения документа это никакой роли не играет,и пользователя раздражает подобная «любознательность» системы,можно сделать следующее:

-удалить стандартную кнопку;- создать свою кнопку;- в качестве действия назначить нижеприведенную процедуру.

В процедуре свойству ИспользоватьРежимПроведениярасширения формы документа назначаем значение Неоперативный изсоответствующего системного перечисления.

Далее используем метод ЗаписатьВФорме() расширения формыдокумента. В результате управление последовательно будет передано нанужные обработчики событий, начиная с Перед записью формыдокумента.

Последней командой процедуры форма документа закрывается.

120

Page 122: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

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

Корректно вопрос решается за счет использования параметра«Период» виртуальной таблицы:

Для запроса вида:

он должен устанавливаться следующим образом:

Необходимо обеспечить расчет данных по всем активным записямдокументов, введенных ДО текущего. Именно поэтому в качествепараметра передается момент времени документа, а не дата документа.Точность реквизита «Дата» - дата (минимальная дробность - секунда). Ау момента времени - дата и ссылка.

То есть, если есть несколько документов с одной и той же датойсистема за счет метода МоментВремени() точно определит - кто изних первый, кто второй, кто - следующий.

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

121

Page 123: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как определить количество документов иколичество разных значений реквизита втаблице записей документа?

По данным документа «РегистрацияПростоевВОрганизации»

Источником является таблица документа«РегистрацияПростоевВОргнаизации».

В качестве выходных полей получим значения агрегатной функцииКОЛИЧЕСТВО() по отношению к полям «Ссылка» и «ФизЛицо».Причем подсчитываются только различные значения поля «ФизЛицо».

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

122

Page 124: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Документы

Значения этой строки по каждой из колонок и дадут требуемыеданные.

В последовательность «ПартионныйУчет»добавлено измерение «Организация». Кактеперь получить данные по границампоследовательности для каждого значенияэтого измерения?

Для получения таблицы значений, в первой колонке которой будутуказаны границы последовательности, а в последующих - значенияизмерений - можно применить метод последовательностиПолучитьГраницы():

В качестве параметра методу достаточно передать названиеизмерения (если нужно несколько - можно через запятую).

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

Замечание: если границы нужны не все (по организациям), а тольконаименьшая из них - лучше применять метод ПолучитьГраницу(). Онвозвращает уже не таблицу, а именно - момент времени.

123

Page 125: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Хранение сведений

Ф Как добавить запись в непериодическийнезависимый регистр сведений?

Для непериодического регистра сведений:

Создаем набор записей нашего регистра сведений.Далее применяем отборы по нужным полям. Как правило - по

измерениям, входящим в основной отбор.Создаем новую запись, заполняем ее поля.Записываем новый набор записей с замещением всех записей,

соответствующих отбору. Параметр «Замещение» метода Записать() поумолчанию имеет значение Истина.

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

записи всегда уникальна. Для непериодического независимого регистрасведений ключом записи является конкретная комбинация значенийизмерений.

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

124

Page 126: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Хранение сведений

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

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

заместить все существующие записи регистра. В результате, добавляяновый набор записей с замещением, - мы бы удалили все ранеевведенные записи регистра!

ф Как считать содержимое непериодическогонезависимого регистра сведений?«СобственныеКонтрагенты»?

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

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

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

125

Page 127: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

(D Как удалить все записи из независимогорегистра сведений?

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

Записываем новый набор записей (пустой) с замещением всехпредыдущих записей (по умолчанию параметр «Замещать» методаЗаписать() имеет значение Истина).

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

<Э Как удалить записи независимого регистрасведений с отбором по конкретнойорганизации?

Структура независимого регистра сведений«ОбъектыСтроительстваОрганизаций» следующая:

126

Page 128: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Хранение сведений

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

Далее записываем полученный пустой набор записей с замещением.В результате все записи, соответствовавшие отбору, будут замещены

пустым набором записей.Замечание: данная задача не может решаться без комплексного

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

© Как добавить запись в периодическийнезависимый регистр сведений?

Для периодического независимого регистра сведений так жеактуально все сказанное про непериодический регистр сведений (см.вопрос «Как добавить запись в непериодический независимый регистрсведений?» на странице 124). Только по другому строится ключ записи -добавляем еще один отбор по полю «Период».

127

Page 129: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

ф Как прочитать (изменить) записи впериодическом независимом регистресведений?

Отличие технологии чтения (изменения) записей периодическогорегистра сведений от непериодического только в работе с полем«Период».

В примере ниже представлен вариант чтения данных периодическогорегистра сведений «Валюты» на дату «ДатаЗаписи», сообщение данныхполей каждой записи и обнуление значения курса попавших в отборзаписей:

ф Как удалить записи в периодическомнезависимом регистре сведений?

Удаление всех записей периодического независимого регистрасведений выполняется так же, как и для непериодического независимогорегистра сведений:

128

Page 130: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Хранение сведений

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

Записываем новый набор записей (пустой) с замещением всехпредыдущих записей (по умолчанию параметр «Замещать» методаЗаписать() имеет значение Истина).

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

Как в периодическом независимом регистресведений «КурсыВалют» удалить все записи повалютам с наименованиями «EUR» и «USD»,период которых меньше 01 января 2005 года?

Один великий скульптор на вопрос «Как вам удалось создать такойшедевр?» ответил: «Отсек все лишнее!».

Примем на вооружение метод, но... перевернем его. В данной задаче унас просят отсечь все лишнее, а решить ее можно - оставив все нужное.

Поэтому сначала получим таблицу записей, которые необходимооставить. Поскольку условий несколько, да еще и не все они наравенство - оптимальнее это сделать при помощи запроса.

Следующий запрос даст нам желаемое:

Источником данных для запроса послужила таблица записейрегистра.

Были применены отборы, чтобы в результат попали записи, длякоторых период более или равен 01 января 2005 года или наименованияне «USD» и не «EUR». Обратите внимание, при составлении условияпо периоду, чтобы не пользоваться параметром запроса, прямо в тексте

129

Page 131: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

запроса применили литерал даты ДАТАВРЕМЯ(), в котором части датыуказываются в «обратном» порядке: год, месяц, порядковый номер дня вмесяце.

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

Далее запрос выполняем, выгружаем результат в таблицу значений«ТаблицаОставляемыхЗаписей».

Создаем переменную «НаборЗаписей», тип значенияРегистрСведенийНаборЗаписей.КурсыВалют, выгружаем в неетаблицу значений «ТаблицаОставляемыхЗаписей».

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

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

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

130

Page 132: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Хранение сведений

Как прочитать данные, актуальные наопределенную дату, из регистра сведений«Курсы валют» с отбором по несколькимвалютам (отбор по измерениям)?

Для решения данной задачи удобнее всего использовать запрос.Например:

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

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

131

Page 133: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как поменять период у записейпериодического независимого регистра,соответствующих ряду условий?

В периодическом независимом регистре сведений«ОтветственныеЛицаОрганизации» все записи, касающиеся организациис наименованием «Групи-трейдинг», период которых меньше 01 января2005 года необходимо перенести на 01 января 2004 года. Но записи суказанием должностей «Продавец» и «Кладовщик» должны остаться насвоих местах.

Структура регистра следующая:

132

Измерение «СтруктурнаяЕдиница» имеет тип значенияСправочникСсылка.Организации.

Для периодического независимого регистра сведениймодифицировать (и удалять) записи можно только посредством объектаРегистрСведенийНаборЗаписей.<имя> илиРегистрСведенийМенеджерЗаписи.<имя>.

И в том и в другом случае понадобится работать с отборами попериоду (обязательно) и по измерениям (желательно, в зависимости отконтекста задачи).

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

Page 134: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Хранение сведений

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

Источником данных для запроса послужила таблица«РегистрСведений. ОтветственныеЛицаОрганизации».

Были применены отборы так, чтобы в результат попали записи спериодом менее 1 января 2005 года, наименование структурных единиц,в которых - «Групп-трейдинг», а наименования должностей не относятсяк «Продавец» и «Кладовщик». Кроме того, необходимо позаботиться о

133

Page 135: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

случае, когда должность вообще не указана - то есть ее наименованиеимеет значение NULL. Такие записи тоже нужно будет переносить.

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

Далее меняем значение поля «Период» у считанной записи изаписываем ее в регистр.

Как «сделать периодическим» реквизит ужезаполненного справочника?

У справочника «Проекты» есть реквизит «Ответственный» (типзначения - СправочникСсылка. Пользователи). Необходимообеспечить в системе возможность «перезакрепления» проектов заответственными с сохранением истории значений с точностью до дня.

Для хранения истории значений периодических данных в системе«1С:Предприятие 8.0» используют регистры сведений.

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

Создать в системе периодический регистр сведений«ЗакреплениеПроектов».

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

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

Удалить реквизит «Ответственный» из структуры справочника«Проекты».

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

Рассмотрим первые два шага более подробно:

134

Page 136: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Хранение сведений

1) Создание периодического регистра сведений.Если не требуется регистрировать факты

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

Поскольку по каждому проекту в конкретный момент времени будетодин ответственный — то структура регистра будет следующей:

135

Тип значения измерения «Проект» - СправочникСсылка.ПрОбКТЫ.Не забудьте указать для данного измерения свойство «Ведущее», тогдапри удалении проектов будут автоматически удалены и соответствующиеим записи регистра сведений. Тип значения ресурса «Ответственный» -СправочникСсылка. Пользователи.

2) Обработка заполнения регистра по существующим даннымсправочника.

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

Page 137: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

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

Источником данных для него будет таблица «Справочник.Проекты».Применяем вышеописанные условия. Состав и псевдонимы выходныхполей запроса делаем соответствующим составу и именам полей записейрегистра.

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

Результат выполнения запроса выгружаем в таблицу значений«ТаблицаРезул ьтат».

Далее создаем переменную «НаборЗаписей» соответствующего типазначения.

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

Далее записываем заполненный набор записей.Обратите внимание, что в нашем случае набор записей регистра

создавался без отборов и у метода Записать() значение параметра«Замещать» было опущено (значит, по умолчанию равно Истина). Врезультате, даже если какие-то записи существовали в регистре до началавыполнения обработки, - они будут полностью замещены новыми,сформированными обработкой. Подобное действие (замещение всехзаписей регистра) возможно только для регистров сведений с режимомзаписи «Независимый» (то есть, не подчинены регистратору).

136

Page 138: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Хранение сведений

ф Как добавить записи в регистр сведений,подчиненный регистратору?

Если регистр сведений подчинен регистратору, то для добавлениязаписей в такой регистр необходимо создать набор записей этогорегистра с установленным отбором по нужному регистратору, заполнитьэтот набор записей и записать его:

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

Для того чтобы добавить записи к существующим записямрегистратора, необходимо указывать значение ЛОЖЬ параметра методаЗаписать() набора записей. При этом необходимо позаботиться о том,чтобы значения измерений добавляемых записей были уникальны длязаписей данного регистратора в регистре сведений, иначе записьвыполнена не будет:

137

Page 139: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

© Как прочитать (изменить) записи в регистресведений, подчиненном регистратору?

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

В примере ниже представлен вариант чтения данных регистрасведений «ЦеныНоменклатуры» для документа«ВыбранныйРегистратор», сообщение данных полей каждой записи иобнуление процента скидки для записей этого документа в регистресведений:

138

Page 140: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Хранение сведений

ф Как удалить записи из регистра сведений,подчиненного регистратору?

Прежде всего, следует оценить необходимость решения такой задачи. Еслизаписи в регистр попадают при проведении регистраторов, и у документов-регистраторов свойство «Удаление движений» имеет значение«Автоматическое удаление движений» - то достаточно просто отменитьпроведение всех регистраторов - и движения будут удалены из регистра.Именно такая картина наблюдается в большинстве случаев.

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

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

Далее создаем набор записей по данному регистру.В цикле перебора выборки из результата запроса - устанавливаем отборы

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

139

Page 141: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бухгалтерский учет

© Как в регистре бухгалтерии сформироватьпроводки?

Допустим, требуется сформировать следующую проводку дляоперации оплаты поставщику:

Счет дебетаКонтрагентДоговорДокументСчет кредитаБанковский счетСтатья движения денежных средствСуммаСодержаниеНомер журнала

60.01LIGHTОсновной договорДокумент расчета с контрагентами №251р/с завода ИнвестспецбанкОплата за оборудование300 000Оплата поставщикуБК

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

140

Данную задачу можно решить следующим образом:

Page 142: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бухгалтерский учет

141

Page 143: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

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

Итак, сначала создаем новый документ «ОперацияБух», в качествеего даты прописываем, например, текущую дату, записываем данныйдокумент в базу данных. Далее создаем объект набор записей понужному нам регистру. Устанавливаем отбор по созданномурегистратору. После этого добавляем новую запись к набору записей изаполняем ее поля данными. По окончании цикла выполняем записьсформированного набора записей.

Как получить остаток по счету?Получим остатки по счету «Товары на складах» в разрезе

организаций и товаров (Субконто 1). Для этой цели можно использоватьследующий запрос к виртуальной таблице остатков регистра бухгалтерии«Хозрасчетный» :

142

Page 144: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бухгалтерский учет

В качестве параметров запроса устанавливаются необходимый счет(«ТоварыНаСкладах») и дата, на которую надо получить остатки.

Как получить обороты по счету?Получим обороты по счету «Товары на складах» за указанный

интервал дат (переменные «НачПериода» и «КонПериода»).Для этой цели можно использовать следующий запрос к виртуальной

таблице оборотов регистра бухгалтерии «Хозрасчетный» :

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

Как получить остатки по счетам?Необходимо получить данные о валютных активах компании в

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

143

Page 145: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Необходимо определить следующие параметры:

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

Как перенести остаток со счета на счет?Необходимо реализовать механизм, позволяющий списать

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

144

Page 146: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бухгалтерский учет

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

Как найти первый документ, приведший кпоявлению кредитового остатка на счете?

Применение виртуальной таблицы «ОстаткиИ Обороты» ссоответствующим заполнением параметра «Периодичность» позволяетрешить задачу:

Используем виртуальную таблицу«РегистрБухгалтерии.Хозрасчетный.ОстаткиИ Обороты» за

145

Page 147: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

определяемый пользователем период (ДатаН и ДатаК), спериодичностью по регистратору и отбором по указанному счету.

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

важно потому, что по умолчанию таблица упорядочена не будет. Крометого, обратите внимание - первичен в упорядочивании период, и толькопри совпадении периодов дальнейшее упорядочивание идет порегистратору.

Посредством ключевых слов ВЫБРАТЬ ПЕРВЫЕ 1 обеспечиваем,чтобы в результат запроса попала только первая запись.

Как выбрать все счета, в аналитике которыхприсутствуют либо вид субконто «Контрагент»,либо вид субконто «Договор»?

Данную задачу можно решить посредством запроса:

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

146

Page 148: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бухгалтерский учет

Как выбрать все счета, в аналитике которыхприсутствуют как вид субконто «Контрагент»,так и вид субконто «Номенклатура»?

Данную задачу можно решить посредством запроса:

Выполняем внутреннее соединение двух таблиц «ВидыСубконто»плана счетов «Хозрасчетный» по равенству полей «Ссылка».Посредством отбора в запросе останутся только те записи, у которыхполе «Наименование» вида субконто первой таблицы равно«Контрагенты», а второй - «Номенклатура». Выходное поле - «Ссылка».Это ссылки на нужные счета.

Как добавить новый вид субконто к счету?Необходимо к счету с кодом «90.01.1» плана счетов «Хозрасчетный»

добавить новый оборотный вид субконто «Менеджеры»: тип значения -«СправочникСсылка.Пользователи», признак - «Суммовой».

Обычно такая задача решается интерактивными средствами в режиме«1С:Предприяте» или, если счет предопределенный, можно так же врежиме «Конфигуратор».

В любом случае сначала надо убедиться, что в состав свойства Типзначения характеристик плана видов характеристик,предназначенного для хранения видов субконто, входит справочник« Пользователи»:

147

Page 149: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Если же это необходимо все же выполнить именно в обработке,можно сделать и так:

148

Page 150: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бухгалтерский учет

Сначала пытаемся найти в плане видов характеристик«ВидыСубконто» данной конфигурации найти вид «Менеджеры».Причем поиск осуществляем по полному совпадению наименования.

Если такового вида не найдено - создаем новый элемент в планевидов характеристик «ВидыСубконто». Устанавливаем его наименованиеи тип значения. Записываем.

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

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

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

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

Как из регистра бухгалтерии «Хозрасчетный»получить обороты только по валютнымсчетам?

Структура регистра следующая:

149

Page 151: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Чтобы получить такую таблицу:

Организация

МебельСтМебельСтМебельСтМебельСтМебельСтНева ТДНева ТДНева ТДНева ТДНева ТДНева ТДНева ТДНева ТД

Счет

5260.3162.2162.3162.3260.2160.3160.3160.3260.3262.3176.3576.39

Валюта

USDUSDUSDUSDUSDруб.USDEURUSDEURUSDUSDUSD

СуммаОборотДт

7596,16

7596,1665270,122879,10

63000,004463,7850000,00560,113239,85

ВалютнаяСуммаОборот Дт

260,00

260,002269,75100,00

2187,96122,301736,4615,69110,00

СуммаОборотКт

7697,237596,1656716,869163,2459,0082231,814463,7850000,00

2500,00142,252503,24

ВалютнаяСуммаОборотКт

265,00260,001969,75318,2159,002847,00122,30

1736,46

84,775,0085,00

Можно воспользоваться запросом со следующим текстом:

Источником является виртуальная таблица«РегистрБухгалтерии.Хозрасчетный.Обороты» с установленнымиотборами по интервалу дат и признаку счета.

В качестве выходных полей указываем счета, значения измерений,дебетовый и кредитовый обороты ресурсов «Сумма» и« ВалютнаяСумма».

150

Page 152: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бухгалтерский учет

Полученную таблицу упорядочиваем по значению поля«Организация» и возрастанию кодов счетов.

Как выбрать в регистре бухгалтерии«Хозрасчетный» обороты по «60-ым» счетам,исключив внутренние обороты между ними?

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

Решение данной задачи можно построить посредством запроса:

Источником будет виртуальная таблица«РегистрБухгалтерии.Хозрасчетный.Обороты», с установленнымиотборами по интервалу формирования, по счету и по корсчету.

Условием по счету ставим вхождение в иерархию параметра запроса«Счет» (в него потом передадим ссылку на 60-ый счет).

Условием по корсчету ставим НЕ вхождение в иерархию параметразапроса «Счет».

151

Page 153: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как реализовать метод «красного сторно» длярегистра бухгалтерии?

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

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

Далее, например, при проведении документа «Сторно», делаемвыборку записей, связанных со сторнируемым документом и формируемна их основе сторнирующие записи:

152

Page 154: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бухгалтерский учет

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

В цикле перебор этой выборки - формируем новые записи в регистрепосредством свойства «Движения» данного документа.

Поле «Период» в них заполняем значением даты нашего документа.Остальные поля записей заполняем содержимым полей

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

Для числовых значений ресурсов при заполнении проставляем знак«~».

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

153

Page 155: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Сложные периодические расчеты

ф Как получить сумму начисления поконкретному виду расчета указанномусотруднику в указанном периоде?

Получим из регистра расчета «БУОсновныеНачисления» результатначисления (ресурс регистра расчета «Результат») некоторомусотруднику («ФизЛицо») по некоторому виду расчета («ВидРасчета») вуказанном периоде («Период!»):

154

Значение параметров запроса берется из соответствующихпеременных, существующих в контексте модуля.

Page 156: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Сложные периодические расчеты

(D Как получить сумму всех начисленийуказанному сотруднику в указанном периоде?

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

Для решения данной задачи можно использовать текст запроса:

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

155

Page 157: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Как получить таблицу перерасчетов поперерасчетам нескольких регистров?

По данным перерасчета «ПерерасчетОсновныхНачислений» регистра«ОсновныеНачисленияРаботниковОрганизации» и перерасчета« ПерерасчетД ополнительныхНачисл ений» регистра«ДополнительныеНачисленияРаботниковОрганизации» необходимополучить таблицу вида:

Работник В ид Расчета Документ

В обоих перерасчетах присутствует измерение «ФизЛицо».Задачу можно решить посредством объединения запросов по

таблицам перерасчетов регистров:

156

Page 158: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Сложные периодические расчеты

Как для документа«НачислениеЗарплатыРаботникам»определить номера строк записей полностьювытесненных видов расчета?

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

Поиск таких записей можно выполнить посредством следующегозапроса:

В запросе выполняется левое внешнее соединение таблицы регистра«УправленческиеНачисления» и виртуальной таблицы«УправленческиеНачисления.ФактическийПериодДействия».

В параметрах виртуальной таблицы и в условиях запроса указанотбор по данному документу. Соединение строится по равенству полей«НомерСтроки» и «Регистратор».

В результате соединения могут появиться записи, у которых значениеполя «Регистратор» виртуальной таблицы равно NULL. To есть для

157

Page 159: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

данной записи фактический период действия отсутствует. Такие записии есть предмет нашего поиска.

Как сформировать расчетный листоксотрудника?

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

Для решения данной задачи можно использовать следующий текстзапроса (его можно определить в конструкторе выходной формы):

158

Page 160: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Сложные периодические расчеты

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

Как организовать сторнирование ужепроизведенных расчетов прошлых периодов?

Классическим примером является ввод январского больничного вфеврале или т.п.

Допустим, работаем с регистром расчетов «ОсновныеНачисления»:

159

Page 161: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Получить данные тех записей регистра, с которыми конкурируюттекущие записи набора записей регистра, выполненные даннымрегистратором, можно при помощи метода ПолучитьДополнение()менеджера регистра:

Посредством свойства «Движения» документа обращаемся к наборузаписей этого документа по регистру расчета «ОсновныеНачисления».Применяем к этому набору записей метод ПолучитьДополнение().

160

Page 162: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Сложные периодические расчеты

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

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

В каждой новой записи в поле «ПериодРегистрации» пропишемзначение из поля «ПериодРегистрацииСторно» таблицы дополнения. Вполе «ПериодДействияНачало» - «ПериодДействияНачалоСторно», вполе «ПериодДействияКонец» - «ПериодДействияКонецСторно». Далееустанавливаем значение Истина для поля «Сторно». Значения дляостальных полей новой записи, кроме ресурсов, один в один переносимиз полей таблицы «ТаблицаСторноЗаписей».Ресурсы не заполняем потому, что таблица дополнения содержитне готовые данные для сторно-записи, а лишь данные для расчетасторно-записи (на основании того, что расчет ресурсов еще будетвыполняться).

После того, как цикл завершается, выполняем запись новых записей врегистр.

Потом можно приступать к их расчету.

161

Page 163: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бизнес-процессы

Как определить бизнес процесс, в которомколичество последовательных этаповопределяется индивидуально на моментстарта экземпляра процесса?

Требуется реализовать следующий процесс:Каждый день необходимо «объезжать» склады компании. С утра

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

Для реализации задачи создаем задачу «ЭтапыПути».Реквизиты адресации:

• Пользователь (Ссылка на справочник «Пользователи»);• Подразделение.

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

Реквизиты задачи:• ДатаВыполнения (Время выполнения задачи);• Исполнитель (Ссылка на справочник пользователей

системы);• Склад (ссылка на справочник складов).

162

Page 164: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бизнес-процессы

В модуле объекта необходимо разместить процедуру - обработчиксобытия Перед выполнением:

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

Далее необходимо определить бизнес процесс «НаМаршруте». Всвойство «Задачи» выбрать «ЭтапПути». Реквизиты бизнес процесса:

• Водитель (ссылка на соответствующий справочник)• ПоказанияСпидометраНачальные (Число)• ПоказанияСпидометраКонечные (Число)• РасходТоплива (Число)

163

Page 165: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

У точки «Определение маршрута» в группе свойств «Адресация»выбрано подразделение «Менеджеры». Для этого соответствующийэлемент должен быть заведен как предопределенный.

Определен обработчик события Обработка интерактивнойактивации:

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

164

Page 166: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бизнес-процессы

Определен обработчик события При выполнении:

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

У точки условия определен обработчик события Проверка УСЛОВИЯ:

165

Используется функция:

Page 167: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

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

У точки «Точка маршрута» в свойстве «Подразделение» группысвойств «Адресация» выбрано «Диспетчерская» (предопределенныйэлемент справочника «Подразделения»).

Определен обработчик события При СОЗДЭНИИ задач:

В этом обработчике для задачи устанавливается текущий склад (всоответствии с ранее определенным маршрутом). «Формируемые задачи»это параметр, принимаемый данным обработчиком события.

У точки «Путевой лист сдан» в свойстве «Пользователь» группысвойств «Адресация» выбрано «Контролеров» (предопределенныйэлемент справочника «Пользователи»). Можно отказаться от подобногоспособа назначения ответственного за выполнение задачи. Используяобработчик события При СОЗДЭНИИ задач и данные в системе (регистресведений, ответственном за адресацию) ответственного можно назначатьпрограммно (таким же образом как в точке «Точка маршрута»назначается очередной склад).

Определен обработчик события Обработка интерактивнойактивации:

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

Также определен обработчик события При выполнении:

166

Page 168: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Бизнес-процессы

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

Как при работе с бизнес процессамиотказаться от стандартного способаформирования задачи и сформировать еепрограммно?

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

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

Карта маршрута бизнес процесса следующая:

167

Page 169: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

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

«Формируемые задачи» это массив, является параметромобработчика события. В нем содержаться значения имеющие типЗадачаОбъект.ЭтапПути.

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

168

Page 170: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прочие прикладные объекты

ф Как, не открывая форму внешней обработки,выполнить ее процедуру для определенногообъекта?

Имеем ссылку на документ в переменной «Ссылка».Переменная «ИмяФайла» содержит имя файла внешней обработки

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

Перед выполнением данной операции необходимо проконтролироватьналичие указания ключевого слова Экспорт в заголовке процедуры«Печать» модуля объекта обработки и принятие ссылки на печатаемыйдокумент. Поскольку формы обработки задействованы не будут - ссылкабудет передаваться посредством параметра процедуры.

Теперь можно сделать следующее:

Обратите внимание на то, что имя файла внешней обработки должнобыть полным.

ф Как быстро получить информацию, по всемобъектам, находящимся в компетенцииконкретного менеджера (элемент справочника«Пользователи») по продажам?

Если вопрос скорости в данном случае критичен - лучшеиспользовать критерии отбора.

Создаем новый критерий отбора «КомпетенцияМенеджераПродаж».В данных нового критерия отбора указываем тип

« СправочникСсылка. Пользователи».

169

Page 171: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прикладные объекты

Далее заполняем «Состав», указывая все объекты, которые должныпопасть в отбор:

Это могут быть реквизиты элементов справочников, документов и т.д.Чтобы впоследствии получить все объекты, указанные в составе и

заполненные конкретным значением менеджера можно будетиспользовать метод Найти() критерия отбора:

Переменная «Менеджер», переданная в качестве параметра методуНаЙТИ() должна содержать ссылку на конкретного менеджера (т.е. наэлемент справочника «Пользователи»).

Результат метода - массив. Элементы массива можно перебратьстандартным способом.

170

Page 172: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Прочие прикладные объекты

Или можно использовать запрос со следующим текстом:

Параметру запроса «Менеджер» нужно будет установить значениеконкретного менеджера.

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

171

Page 173: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Работа с формами

® Как открыть форму документа?

Методом ПолучитьФорму() обращаемся к основной формедокумента. Если нужно обратиться не к основной, необходимо первымпараметром метода указать название получаемой формы.

Далее открываем полученную форму.

Как открыть форму внешней обработки?Имя файла внешней обработки содержится в переменной

«ИмяФайла».Тогда открытие основной формы обработки выполняется так:

Если бы требовалось открыть определенную форму этой обработкиили форму с определенным ключом уникальности «Ключ» - для этогоможно было бы использовать второй и третий параметры методаПолучитьФорму().

Например, так:

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

172

Page 174: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с формами

(D Как отрыть форму отчета так, чтобы она неперекрывала собой ту форму, из которой онаоткрыта?

Для этого форму отчета нужно открывать как подчиненную даннойформе и устанавливать свойство Положен иеОкна в значениеНеПерекрыватьВладельца:

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

Как открыть форму отчета на весь экран?Для этого следует воспользоваться свойством формы

СпособОтображенияОкна:

Можно также запретить пользователю минимизировать имаксимизировать открытое окно:

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

173

Page 175: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Как из формы документа открыть формусписка данного документа,спозиционировавшись на нем же?

Получаем форму списка через объект ДокументМенеджер.<ИМЯ>по имени нашего документа. Далее свойствуПараметрТбкущаяСтрока расширения формы списка документовприсваиваем ссылку на наш документ. Потом открываем форму.

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

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

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

174

Page 176: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с формами

® В документе есть реквизит «Контрагент».Как открыть форму подчиненного емусправочника «ДоговорыКонтрагентов»?

Сначала проверяем заполнен ли реквизит «Контрагент». Если он неравен пустой ссылке получаем в переменную«ФормаПодчиненныхДоговоров» форму списка справочника«ДоговорыКонтрагентов». По умолчанию получим основную форму, ноесли бы нам потребовалось получить какую-то конкретную - достаточнобыло бы указать имя открываемой формы первым параметром методаПолучитьФормуСписка().

Далее устанавливаем значение «ПараметрОтборПоВлад ельцу»расширения формы списка равным ссылке на нашего контрагента иоткрываем форму.

175

Page 177: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

© Как в форме отобразить картинку,сохраненную в реквизите справочника?

В диалоге формы (например, формы элемента справочника«Сотрудники») необходимо разместить элемент управленияПолеКартинки (его имя «Фото»). В самом справочнике существуетреквизит «Фотография» имеющий тип ХранилищеЗначения (в него изаписывалось значение, перед преобразованием к типуХранилищеЗначения имевшее тип Картинка). В обработчикесобытия При открытии формы разместим следующие строки:

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

<Х> Как в журнале документов «УчетКадров»отобрать только документы«ПриемНаРаботу»?

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

Свойство Отбор данного объекта включает в себя свойствоВидДокумента. Необходимо только установить его значение.

Поскольку нам нужны именно документы «ПриемНаРаботу» - черезметаданные получаем значение для отбора.

176

Page 178: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с формами

ф Как узнать интервал дат в открытомтекущем журнале?

Интервал дат является одним из вариантов отбора для объектов типаЖурналДокументовСписок.<имя>.

Работу необходимо вести с основным реквизитом формы журнала« Журнал ДокументовСписок»:

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

Далее можно просто получить представление элемента отбора сименем «Дата».

Как при открытии справочника сделать отборпо контрагентам, входящим в список?

Для случая, когда необходимо делать отбор по контрагентам,входящим в список значений «СписокКонтрагентов»:

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

Обратите внимание, Отбор - это свойство объектаСправ0ЧНИкСпиС0К.<ИМЯ>, то есть источника данных, а не элементауправления (табличного поля).

177

Page 179: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Как обеспечить, чтобы для выбора значенияпокупателя в расходной накладной справочникконтрагенты открывался сразу с открытойгруппой «Покупатели»?

Поскольку нам необходимо особым образом открыть форму выбораименно из формы документа - сначала пропишем обработчик событияНачало выбора поля ввода «Контрагент» формы документа:

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

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

В переменную «ФормаВыбора» получаем основную форму выборасоответствующего справочника. При этом назначаем параметры:

• владелец создаваемой формы - текущий элемент управления(поле ввода «Контрагент). Впоследствии, когда выборпроизойдет, система вернет выбранное значение в этотэлемент (еще говорят - оповестит о выборе);

178

Page 180: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с формами

Дальше работа идет уже со справочником: находим, какая формауказана в качестве основной для выбора:

В найденной форме создаем реквизит «ВыборПокупателя», имеющийтип Булево. Затем в обработчике события При открытии необходимодобавить код, обеспечивающий установку значения свойстваТекущий Родитель табличного поля «СправочникСписок».

Но сначала желательно обеспечить однозначное толкование понятия«группа Покупатели». Есть несколько вариантов:

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

б) Более надежным вариантом видится создание предопределенногоэлемента справочника с именем «Покупатели». Такому элементу«повредить» пользователю сложнее. Но тут возникнет вопрос:справочник был уже заполнен и в группе «Покупатели» 20000 элементов,как перенести их в другую группу?. Для ответа на этот вопрос внастоящем издании есть пример «Как перенести все элементысправочника «Контрагенты» из одной группы в другую?» на странице 99.

179

Page 181: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

а) если идентификацию группы «Покупатели» делаем по ссылке,которая хранится в константе «ГруппаПокупатели»::

б) если идентификацию группы «Покупатели» делаем попредопределенному элементу:

Сначала проверяем значение реквизита «ВыборПокупателя» текущейформы. Если оно равно Истина - устанавливаем для соответствующеготабличного поля формы свойство расширения табличного поля спискасправочника ИерархическиЙПрОСМОТр, а свойствоТекущий Родитель табличного поля заполняем нужным значением.

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

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

180

Page 182: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличное поле

ф Как запретить пользователю изменятьпорядок следования колонок в табличномполе?

Для этого можно воспользоваться свойством табличного поляИзменятьПозициюКолонок:

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

® Как запретить пользователю изменятьлюбые настройки колонок табличного поля?

Для этого можно воспользоваться свойством табличного поляИзменятьНастройкуКолонок:

181

Если необходимо запретить перемещение только некоторых колонок,тогда следует использовать свойства ИзменятьНастроЙку нужныхколонок:

Page 183: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

ф Как вывести информацию о том, какойотбор установлен в журнале документов?

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

Если требуется более подробная информация обо всех элементахотбора, она может быть получена, например, следующим образом:

ф Как в форме справочника установить курсорна элемент с известным наименованием?

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

182

Page 184: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличное поле

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

В результате и получим требуемое.

ф Как в форме списка сделать отбор позначению реквизита?

У объекта СправочникСписок.<ИМЯ> есть свойство Отбор. В егосостав входят элементы отбора. Именно работая с ними - можно решитьпоставленную задачу.

Если необходимо организовать отбор по единственному значениюреквизита, это можно сделать так:

Методу УСТЗНОВИТЬ() элемента отбора первым параметромпередается значение отбора, вторым - использование. По умолчаниювторой параметр имеет значение Истина.

Можно еще так:

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

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

183

Page 185: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

ф Как запретить выдачу сообщения:«Введенные данные не отображены в списке,так как не соответствуют отбору» придобавлении новых элементов в справочник?

Для этого следует использовать свойство расширения табличногополя списка справочника ПроверкаОтображенияНовойСтроки. Поумолчанию, для табличного поля, отображающего список справочника,включена проверка соответствия новой строки установленному отбору.Отключить эту проверку можно интерактивно, на закладке «Прочее»диалога настройки списка:

Или программно:

184

Page 186: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличное поле

ф Как заполнить ячейку табличного поляданными?

У табличного поля «ТабличноеПолеЗаказов» есть колонки «Заказ»(тип значения - ДокументСсылка.ЗаказПокупателя), «Контрагент»(тип значения - Строка) и «ДатаОтгрузки» (тип значения - Дата):

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

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

В процедуре в переменную «СтрокаТаблицы» получаем строкутабличного поля. Далее работаем с ячейками данной строки. В ячейки«ДатаОтгрузки» и «Контрагент» вносим значения, прочитанные изреквизитов документа, введенного в ячейку «ЗаказПокупателя» даннойстроки.

185

Page 187: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Как изменить цвет фона ячейки табличногополя в зависимости от значения, выводимогов нее?

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

Допустим, нам необходимо в табличном поле «Товары» выделятькрасным цветом ячейки колонки «Остаток», если остаток меньше 10, ижелтым - если больше 100.

Для решения данной задачи используются параметры процедуры -обработчика события При получении данных. Вторым параметромполучаем коллекцию оформлений выводимых строк.

Считывая данные о численном значении остатка, принимаем решениеоб установке цвета фона ячейки «Остаток» в оформлении строки.

Цвет назначаем, подбирая его из системного набора значений\Л/еЬЦвета.

186

Page 188: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличное поле

Как в табличное поле«ВыбранныеКонтрагенты» добавить новуюколонку «ОсновнойДоговор», заполнить еезначения и дать возможность открытия этихзначений?

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

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

Для решения данной задачи необходимо будет передать управлениепроцедуре со следующим текстом:

187

Page 189: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Поскольку в качестве данных табличного поля выступает таблица«ТаблицаКонтрагентов» - проще задача с добавлением колонок решаетсяименно через эту таблицу значений.

Сначала проверим, нет ли уже у объекта «ТаблицаКонтрагентов»колонки «ОсновнойДоговор». Если нет - добавляем.

Если требуется добавить новую колонку именно определенного типа -сначала создаем объект ОписаниеТипов. К нужным типам в нашемслучае пусть относится толькоСправочникСсылка.ДоговорыКонтрагентов.

Далее создаем колонку с этим типом значения.Как Вы понимаете, если потребуется создать колонку с составным

типом значения - достаточно будет к массиву «МассивТипов» добавитьеще несколько элементов с указанием других нужных типов.

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

Далее табличному полю «ВыбранныеКонтрагенты» даем командуСоздатьКолонки(). При ее выполнении система удаляет старыеколонки и загружает новые из источника данных (таблицы значений«ТаблицаКонтрагентов»).

Теперь остается установить свойство КноПКаОткрытия элементауправления колонки «ОсновнойДоговор» в положение Истина.

В результате пользователь при желании сможет ей воспользоваться.

188

Page 190: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличное поле

Как задать список выбора для колонки«ВидДокумента» табличного поля?

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

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

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

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

Например - так:

189

Page 191: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Как обеспечить возможность отбора исортировки данных по реквизитам, неотображаемым в табличном поле формысписка справочника?

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

Как реализовать перетаскивание междуэлементами управления?

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

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

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

190

Page 192: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличное поле

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

191

Page 193: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

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

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

192

Page 194: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличное поле

Как вывести остатки на складах в спискеноменклатуры?

Для этого в табличное поле, отображающее список справочника«Номенклатура» следует добавить колонку (например, с именем«Остаток») и использовать событие При получении данныхтабличного поля, отображающего список номенклатуры:

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

193

Page 195: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

© В форме есть панель со страницами. Какразместить картинку на закладке?

Допустим, имя панели «ОсновнаяПанель», имя страницы«СчетаУчета», картинка уже есть в библиотеке картинок с именем«ДебетКредит». Тогда так:

Если же картинка «свеженарисованная» - необходимопредварительно добавить ее в состав метаданных (раздел «Общиекартинки»).

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

194

Page 196: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

® Как обеспечить, чтобы при открытии формыуже записанного элемента справочника«Контрагенты» активной была закладка«СчетаИДоговоры» панели «Панель»?

В модуле формы элемента используем обработчик событияПри открытии:

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

Как организовать выбор из нескольких списковдокументов для открытия?

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

195

Page 197: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Это можно выполнить следующим способом:

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

метаданных документов конфигурации в качестве значения, и ЛОЖЬ вкачестве значения свойства Пометка (флажок снят).

Порядок заполнения параметров метода Добавить(): Значение,Представление, Пометка, Картинка.

Далее открываем пользователю модальное окно для установкипометок в списке «СписокДокументов».

Если, установив требуемые пометки, пользователь нажмет «ОК» -открываем цикл перебора элементов «СписокДокуменов». В цикле длятех элементов, на которых пометки установлены, выполняем получение иоткрытие основной формы списка документа по имени объектаметаданных.

196

Page 198: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

Как можно организовать подстановкуобращения к персоне?

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

Для решения данной задачи можно поработать с обработчикомсобытия Окончание ввода текста поля ввода:

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

197

Page 199: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Как в командной панели создать подменю скнопками?

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

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

198

Page 200: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

Поскольку к редактируемой командной панели придется обращатьсянеоднократно - «положим» ее в переменную«КнопкиКоманднойПанели».

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

Если такой кнопки нет - индекс имеет значение «-1», длядальнейшего создания нужной кнопки переменной «индекс» присвоим«О». Таким образом, наша кнопка будет первой слева, хотя могли быустановить ее любой другой по порядку.

Если же индекс кнопки «Сформировать» не равен «-1» - онпригодится для удаления кнопки. Удаляем кнопку по индексу.

Теперь можно приступить к созданию подменю «Сформировать».Указываем в качестве параметров индекс, имя, тип и названиесоздаваемой кнопки. Обратите внимание, все элементы объектаКнопкиКоманднойПанели это объектыКнопкаКоманднойПанели. А вот свойство Тип объектаКнопкаКомандноЙПанели уже назначается из системногоперечисления ТипКнопкиКомандноЙПанели. В нашем случае - этоПодменю.

По умолчанию на созданной кнопке отображен только текст. Еслихотим разместить еще картинку - необходимо указать значение свойстваКартинка (передаем картинку из коллекции, хранящейся в библиотекекартинок данной конфигурации). Если будете назначать свою - незабудьте, что размер картинки для кнопки должен быть небольшим(оптимально - 16x16 пикселей). Чтобы картинка не вытеснила текст —устанавливаем свойству Отображение соответствующее значение.

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

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

199

Page 201: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Тело вызываемой процедуры может выглядеть так:

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

Как созданной кнопке назначить «горячиеклавиши»?

Допустим кнопке «СозданнаяКнопка» нужно назначить комбинациюклавиш «Ctrl+Alt+L».

Устанавливаем значение свойству СочетаниеКлавиш значение,полученное конструктором НОВЫЙ. Первым параметром конструкторунужно передать основную клавишу сочетания. Ее значение берем изсистемного перечисления Клавиши.

Остальными параметрами передаем признак участия других клавиш:вторым - «Alt»; третьим - «Ctrl», четвертым - «Shift».

Замечания: горячие клавиши можно назначать только кнопкам стипом «Действие» (не подменю, и не разделитель).

И обратите внимание на значения системного перечисленияКлавиша - русских букв там нет.

200

Page 202: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

Как реализовать заполнение возможныхзначений поля выбора«ОбрабатываемаяТабличнаяЧасть» призаполнении поля ввода«ОбрабатываемыйДокумент»?

Есть поле ввода «ОбрабатываемыйДокумент». В качестве данных -реквизит формы «ОбрабатываемыйДокумент» (тип значения -ДокументСсылка).

Есть поле выбора «ОбрабатываемаяТабличнаяЧасть». В качестведанных - реквизит формы «ОбрабатываемаяТабличнаяЧасть» (типзначения - Строка, имеется в виду представление обрабатываемойтабличной части).

Необходимо обеспечить, чтобы при выборе пользователем значения«ОбрабатываемыйДокумент» заполнялся список выбора поля ввода«ОбрабатываемаяТабличнаяЧасть».

Для решения этой задачи используем обработчик событияПри изменении поля ввода «ОбрабатываемыйДокумент»:

Сначала создаем переменную «СписокВыбора», содержащую списоквыбора поля «ОбрабатываемаяТабличнаяЧасть». Очищаем его, чтобыпри последующих выборах других документов в качествеобрабатываемых - список выбора не разрастался.

201

Page 203: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

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

Через метод Метаданные() определяем коллекцию табличныхчастей документа. В цикле их перебора добавляем значения к спискувыбора поля «ОбрабатываемаяТабличнаяЧасть».

Кроме того, желательно побеспокоится о возможности очисткизначения поля ввода «ОбрабатываемыйДокумент». Скорее всего - естьсмысл при этом очистить и поле выбора«ОбрабатываемаяТабличнаяЧасть».

Этого можно добиться посредством обработчика события Очисткаполя ввода «ОбрабатываемыйДокумент»:

Ф Если пользователь указал несколько дат вполе календаря - как их перебрать?

Если элемент управления ПолеКалендаря имеет режим выделениядаты Множественный, пользователь может выделить несколько дат накалендаре:

202

Page 204: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

Выделенные пользователем даты легко перебрать следующимобразом:

Как видите, свойство поля календаря ВыделенНЫвДаты содержитколлекцию указанных пользователем дат.

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

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

Как организовать работу с индикатором?Допустим, у нас есть «РезультатЗапроса». Работа с перебором его

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

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

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

203

Page 205: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Например, так:

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

Обратите внимание - свойствами индикатора можно управлять исредствами языка:

204

Page 206: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

Как у элемента управления сменить источникданных?

Необходимо у элемента управления менять значение установленное всвойстве Данные.

Предположим, что существует форма, у которой есть два реквизита:• СписокКонтрагентов (тип

СправочникСписок.Контрагенты);• СписокНоменклатуры (тип

СправочникСписок.Номенклатура).В диалоге размещен элемент управления ТабличноеПоле (имя

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

Следующая процедура «переключит» табличное поле в «режим»работы со справочником «Контрагенты».

Следующая процедура «переключит» табличное поле в «режим»работы со справочником «Номенклатура».

205

Page 207: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

ф Как задать представление даты,отображаемое в поле ввода по-умолчанию?

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

Если поле ввода отображает только дату, может использоваться,например, следующее значение:

206

Page 208: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

Если поле ввода отображает только время, может использоваться,например, следующее значение:

207

Page 209: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Если поле ввода отображает и дату, и время, может использоваться,например, следующее значение:

Аналогичного результата можно добиться программным способом:

208

Page 210: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

ф Как вывести текст в поле картинки в томслучае, если картинка не выбрана?

Для этого следует использовать свойствоТекстНевыбраннойКартинки элемента управления ПолеКартинки.Его можно задать при конфигурировании:

или программно:

209

Page 211: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

В результате, в случае, если картинка не выбрана, в поле картинкибудет выведен указанный текст:

210

Page 212: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Другие элементы управления

ф Как открыть пользователю стандартныйдиалог выбора цвета?

Для работы со стандартным диалогом выбора цвета предназначенобъект ДиалогВыбора Цвета. Организовать выбор цвета пользователемможно с помощью следующего кода:

Аналогичным образом организуется и выбор шрифта при помощистандартного диалога (используется объект ДиалогВыбораШрифта):

Следует заметить, что в тех случаях, когда выбор цвета или шрифтапользователь должен выполнять в форме (например, в форме отчета),достаточно просто разместить в этой форме поля ввода ссоответствующими типами значений (Цвет или Шрифт). Тогда принажатии на кнопку выбора в режиме 1С:Предприятие будет открытстандартный диалог выбора цвета (шрифта), а выбранное пользователемзначение сохранено в реквизите формы, связанном с данным полемввода.

211

Page 213: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Как заполнить список в форме даннымизапроса?

Для наиболее быстрого вывода результата запроса в список,расположенный в форме, можно воспользоваться методом глобальногоконтекста ЗаполнитьЗначбНИяСв<ЭЙСТВ(). При этом следует полямзапроса установить псевдонимы, соответствующие свойствам элементасписка значений:

© Как отобразить в форме файл графическойсхемы?

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

212

Page 214: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интерфейсы, стили

Как задать различные стили1С:Предприятия для различных категорийпользователей?

Для этого следует воспользоваться свойством глобального контекстаГлавныйСтиль:

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

213

Page 215: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Формы и элементы управления

Есть список имен интерфейсов с пометками.Как сделать помеченные интерфейсывидимыми?

Создаем строковую переменную «СтрокаИменИнтерфейсов» дляуказания через запятую имен помеченных интерфейсов.

В цикле перебора списка заполняем ее.Посредством свойства глобального контекста Главный Интерфейс

требуем снять видимость всех интерфейсов и включить видимостьтолько тех, чьи имена перечислены в строковой переменной«СтрокаИменИнтерфейсов».

Замечание: для интерфейсов, у которых свойство Переключаемыйбудет иметь значение Ложь - отключение не произойдет. Обычно такоепривилегированное положение занимает некий «базовый» интерфейс,содержащий хотя бы меню «Файл» и «Справка».

214

Page 216: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интерфейсы, стили

Как из формы обработки отключитьглобальный обработчик ожиданий?

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

то отключать его следует тоже из модуля приложения.Например, подключение:

Отключение - в процедуре модуля приложения:

А в форме обработки - вызов процедуры:

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

215

Page 217: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Запросы

Как получить данные из табличной частидокументов?

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

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

В качестве источника указываем табличную часть документов -таблицу «Документ. РеализацияТоваровУслуг.Товары».

Выходным полем объявляем поле «Номенклатура», входящее всостав таблицы источника.

Кроме того, поскольку одна и та же товарная позиция, естественно,могла присутствовать и не один раз в документах - применяемРАЗЛИЧНЫЕ для получения только различных строк в выходнойтаблице запроса.

В результате получим таблицу вида:

216

Page 218: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Как получить данные из табличной частидокументов и представить их в иерархическомвиде?

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

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

В качестве источника указываем табличную часть документов -таблицу «Документ.РеализацияТоваровУслуг.Товары».

Выходным полем объявляем поле «Номенклатура», входящее всостав таблицы источника, применяем РАЗЛИЧНЫЕ для получениятолько различных значений в выходной таблице запроса.

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

Если иерархию результата запроса отображать при помощи отступов,получится следующее:

217

Page 219: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Замечание: при помощи предложения ИТОГИ ПО к результатузапроса добавляются записи с промежуточными итогами. Проще говоря -записей будет больше, нежели без применения данного предложения.

Как подсчитать количество одинаковыхэлементов в выбираемых данных?

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

При решении данной задачи опять же необходимо иметь в виду, чтоодин и тот же товар мог встречаться в документах не один раз. Однакоесли и на этот раз применить РАЗЛИЧНЫЕ, то получим в результатетолько различные строки. То есть один и тот же товар может встречатьсяв комбинациях с разным количеством:

НоменклатураЖенские ботфорты коричневыеЖенские ботфорты коричневыеЖенские ботфорты коричневыеБотинки женские демисезонныеБотинки женские демисезонныеБотинки женские натуральная кожаБотинки женские натуральная кожа

Количество1,000

3,00010,0001,0002,0001,0002,000

Поэтому для решения нашей задачи необходимо воспользоватьсяоперацией СГРУППИРОВАТЬ ПО с вычислением агрегатнойфункцией СУММА() по полю «Количество»:

218

Page 220: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Групповым полем указано поле «Номенклатура». В результатеполучим таблицу вида:

НоменклатураЖенские ботфорты коричневыеБотинки женские демисезонныеБотинки женские натуральная кожаЖенские босоножкиКомбайн кухонный BINATONE FP 67Кофеварка BRAUN KF22R

Количество496619136

Замечание: при помощи СГРУППИРОВАТЬ ПО результат запросасворачивается (сжимается) «вокруг» групповых полей. Просто говоря -записей будет меньше, нежели без применения данного предложения.

Кроме того, для правильного применения СГРУППИРОВАТЬ ПОвсе выходные поля должны быть или групповыми, или результатамивычисления агрегатных функций.

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

Если к вышеприведенному примеру (Как из табличной части«Товары» документов «РеализацияТоваровУслуг» получить всеноменклатурные позиции с суммированием количества?) добавить ещеусловие выводить только те записи, где просуммированное количествобольше 10, тогда текст запроса выглядел бы так:

219

Page 221: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Для реализации условия отбора на значения агрегатных функцияприменяется предложение ИМЕЮЩИЕ. В результате получим таблицувида:

НоменклатураЖенские ботфорты коричневыеЖенские босоножкиКомбайн кухонный BINATONE FP 67

Количество491913

Замечание: не путайте с условием ГДЕ. Это условие налагается наисходные записи. В результате, если бы не было ни одного издокументов, где количество товара в строке больше 10 - результатомзапроса была бы пустая таблица.

Как ограничить выборку из виртуальнойтаблицы?

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

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

Обратите внимание, виртуальная таблица - самогруппируема.Детальность ее записей определяется составом ее же выходных полей.

220

Page 222: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

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

Например, требуется получить информацию о продажах товаров сподведением итогов по объемам продаж подразделениями:

Подразд.

Отдел оптовой продажиОтдел оптовой продажиОтдел оптовой продажиОтдел оптовой продажиОтдел оптовой продажи

Отдел оптовой продажиОтдел оптовой продажиОтдел розничнойпродажиОтдел розничнойпродажиОтдел розничнойпродажиОтдел розничнойпродажи

Номенклатура

Женские ботфорты коричневыеБотинки женские демисезонныеБотинки женские натуральная кожаЖенские босоножки

Комбайн кухонный BINATONE FP 67

Кофеварка BRAUN KF22R

Причуда (вафли)

Принц (печенье)

Сердечко (печенье)

Кол-воОборот

49,000

6,000

6,000

19,000

13,000

6,000

5,000

4,000

5,000

СтоимостьОборот58 167,12

4 430,39

246,69

320,44

1 028,23

5 493,73

4 427,36

632,33

2,36

4,01

3,83

221

Page 223: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Поскольку в оборотном регистре «Продажи» есть измерения«Номенклатура» и «Подразделение», решить задачу можно посредствомследующего запроса:

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

В качестве выходных полей указываем «Подразделение» и«Номенклатура», плюс обороты по нужным ресурсам.

Для того, чтобы добавить промежуточные итоги по полю«Подразделение» используем ИТОГИ ПО. Причем для итоговыхзаписей применяем агрегатную функцию СУММА() для поля«СтоимостьОборот».

222

Page 224: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Как получить только те записи, в которыхзначение определенного поля превышаетуказанное значение?

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

При решении этой задачи для оборотного регистра «Продажи», всоставе которого присутствуют измерения «Номенклатура» и«Подразделение», можно выполнить запрос со следующим текстом:

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

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

223

Page 225: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Как обратиться к подчиненным полям взапросе?

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

Поскольку справочник «Договора» явл5*ется подчиненнымсправочнику «Контрагенты», то по сути дела идет речь о полученииданных в разрезе владельцев договоров, попавших в данные регистра.

В подобных случаях можно пользоваться так называемым«разыменованием» полей, когда к нужному полю можно «добратьсячерез точку»:

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

224

Page 226: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Как объединить результаты несколькихзапросов?

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

В составе документов есть три табличных части «Товары»,«ВозвратнаяТара» и «Услуги». В составе каждой из частей есть реквизит«Номенклатура».

Поскольку данные необходимо собрать со всех таблиц табличныхчастей - данную задачу можно решить посредством объединениязапросов:

Получаем по табличной части «Товары» документа записи сразличными значениями поля «Номенклатура», далее объединяем их саналогично полученными записями по остальным табличным частям. Из-за того, что применили ОБЪЕДИНИТЬ, а не ОБЪЕДИНИТЬ ВСЕ врезультате запроса останутся только разные строки даже в случае, есликакая-то номенклатурная позиция оказалась указанной и в качестветовара и в качестве, например, тары (в нескольких таблицах). То есть,одинаковые строки заменятся одной.

Замечание: объединение приводит, если выразиться проще, кдобавлению строк в результат запроса.

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

225

Page 227: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Как выбрать данные из двух таблиц,удовлетворяющие определенному условию?

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

Данные о товарах, заказанных покупателями, хранятся в регистреостатков « Заказы П оку пате л ей ».

Данные о товарах, заказанных поставщикам, хранятся в регистреостатков «ЗаказыПоставщикам».

Необходимо получить таблицу вида:

Номенклатура

Ботинки женские демисезонныеБотинки женские натуральная кожаЖенские босоножкиКомбайн кухонный BINATONE FP 67Кофеварка BRAUN KF22R

ЗаказаноПокупателями20,00012,00013,0001,0004,000

ЗаказаноПоставщикам180,000120,000140,000150,000150,000

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

Соединение проводим по выполнению условия равенства полей«Номенклатура» обоих источников.

Замечание: Соединение обычно используется, если выразиться проще,для добавления колонок из других источников к результату запроса.

226

Page 228: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

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

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

Данные о товарах, заказанных покупателями, хранятся в регистреостатков «ЗаказыПокупателей».

Данные о товарах, заказанных поставщикам, хранятся в регистреостатков «ЗаказыПоставщикам».

Необходимо получить таблицу вида:

Номенклатура

Женские ботфорты коричневыеБотинки женские демисезонныеБотинки женские натуральная кожаЖенские босоножкиКомбайн кухонный BINATONE FP 67Кофеварка BRAUN KF22RВентилятор оконныйВентилятор OPBHTA,STERLING,Hn.

ЗаказаноПокупателями9,00020,00012,00013,0001,0004,00013,0006,000

ЗаказаноПоставщикам

180,000120,000140,000150,000150,000

Данную задачу можно решить за счет применения левого внешнегосоединения данных источников в запросе:

227

Page 229: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Замечание: по номенклатуре, остатков которой нет в регистре«ЗаказыПоставщикам» в записях результата запроса поле«ЗаказаноПоставщикам» будет содержать значение NULL. He путать снулевым значением! NULL - это не число!

Как объединить данные из двух таблиц поопределенному условию?

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

Данные о товарах, заказанных покупателями, хранятся в регистреостатков «ЗаказыПокупателей».

Данные о товарах, заказанных поставщикам, хранятся в регистреостатков «ЗаказыПоставщикам».

Необходимо получить таблицу вида:

Номенклатура

Женские ботфорты коричневыеБотинки женские демисезонныеБотинки женские натуральная кожаЖенские босоножкиКомбайн кухонный BINATONE FP 67Кофеварка BRAUN KF22RВентилятор оконныйВентилятор OPBHTA,STERLING,Hn.Кроссовки мужские, кожаКофеварка JACOBS (Австрия)Полусапожки на шнурках

ЗаказаноПокупателями9,00020,00012,00013,0001,0004,00013,0006,00010,000

ЗаказаноПоставщикам

180,000120,000140,000150,000150,000

100,000150,000100,000

228

Page 230: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Данную задачу можно решить посредством полного соединения:

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

229

Page 231: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

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

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

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

Чтобы свернуть эту таблицу - делаем запрос по таблице вложенногозапроса и выполняем СГРУППИРОВАТЬ ПО по полю «Номенклатура»,суммируя данные числовых колонок.

230

Page 232: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Как вывести некоторое значение вместо NULLв запросе?

Для этого можно использовать функцию языка запросовECTbNULLQ, которая возвращает значение своего первого параметра вслучае, если он не равен NULL, и значение второго параметра впротивном случае:

АртикулhH-150003

П-130002

18009

Арт-88888

Арт-4444

Арт-8ЭЭЭЭ

Арт-89000

НоменклатураБотинки мужские

Полусапожки на шнурках

Петр!

Сахарный песок

Юбилейное (печенье)

Крупа манная

Крупа гречневая

Инвентарь

Вилы

Услуги

Расходы на рекламу

Расходы на ремонт

Молочные

Как вместе с данными некоторой таблицыполучить общие итоги из этой же таблицы?

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

Необходимо построить отчет следующего вида:

Номенклатура

ЯблокиГрушиБананыМанго-манго

Суммапродаж

500

350

100

50

Процентнаядоля

50

35105

231

Page 233: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

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

Решение данной задачи может быть таким:

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

Эта проблема решается посредством внутреннего соединения двухвиртуальных таблиц «РегистрНакопления.Продажи.Обороты».

Поскольку от второй виртуальной таблицы берем только значениеполя «СуммаОборот» (без разреза по номенклатуре), то совокупныйоборот будет проставляться в соответствие каждой записи из первойвиртуальной таблицы. Причем, поскольку соединение внутренне - то вслучае, если продаж за период не было, не будет выводиться пустаязапись.

Поле «ПроцентнаяДоля» каждой записи заполняется по формуле:Процентная доля = СуммаПродаж/СовокупныйОборот * 100.Далее производится сортировка, чтобы записи расположились по

убыванию процентной доли.

232

Page 234: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Как получить иерархические итоги по группесправочника?

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

Требуется получить данные в виде таблицы следующего вида:Номенклатура

КОЛГОТКИSanpellegrino

Артикул 123456 (черные)Артикул 123457 (капучино)

Sonata+Артикул 773456 (черные)Артикул 774321 (черные)

Остатки наскладе (шт)

1120420120300700700

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

В данном запросе выполняется левое внешнее соединение двухтаблиц.

233

Page 235: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

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

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

Поскольку применяем левое внешнее соединение - результат будетсодержать записи со всеми товарами, входящими в нужную группу.

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

234

Page 236: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Как по состоянию на заданную дату порегистру «ОстаткиНаСкладе» найти последнийдокумент «ПоступлениеТоваровУслуг», покоторому приходила номенклатура?

Сложность решения состоит в том, что из-за возможностей работатьнеоперативно, пользователь может формировать«ПоступлениеТоваровУслуг» задним числом - это раз. Кроме того, вобщем случае платформа позволяет формировать записи регистра спериодом, не совпадающим с датой документа..

Поэтому решать задачу следует ступенчато.Сначала нужно найти по каждой номенклатурной позиции записи,

сделанные документами «ПоступлениеТоваровУслуг» с максимальнымна дату формирования отчета периодом.

Потом нужно будет найти регистраторы, породившие эти записи.

235

Page 237: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

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

Источник - таблица записей регистра, выходные поля —«Номенклатура» и «Период». Применяем отбор по виду регистратора(посредством операнда ССЫЛКА будем брать только те записи, гдерегистратор входит в таблицу «Документ.ПоступлениеТоваровУслуг») ипо периоду, не превышающему «ДатаОтчета». Потом применяемгруппирование по полю «Номенклатура» с определением максимально иззначений поля «Период».

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

Поскольку существует вероятность наличия двух или болеедокументов «ПоступлениеТоваровУслуг» сделавших движения в одном итом же периоде - то выбираем более поздний из них для каждойноменклатурной позиции за счет СГРУППИРОВАТЬ ПО (в общем -«...в живых должен остаться только один»).

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

Если данную задачу необходимо решать за минимальное время - поднее лучше создать периодический регистр сведений «ПоследнийПриход»с измерением «Номенклатура» и ресурсом «ДокументПоступления». Припроведении соответствующих документов делать движения по этомурегистру. А отчет получать срезом последних на нужную дату. Посколькузаписей в таком регистре будет на порядки меньше, нежели в одном изсамых загруженных регистров конфигурации - скорость выполнениязапроса возрастет существенно.

236

Page 238: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Как подсчитать количество записей содинаковым значением некоторого поля?

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

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

Основнойменеджер

покупателяИвановБатовСемашко

Количествозакрепленныхпокупателей

331710

Лучше всего запросом:

Выходными полями таблицы запроса по справочнику «Контрагенты»делаем «ОсновнойМенеджерПокупателя» и «Ссылка».

Для того, чтобы группы не мешали нашей статистике - отбрасываемих. Кроме того, отбрасываем тех контрагентов, у которых не указан

237

Page 239: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

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

238

Поскольку самих контрагентов показывать не нужно - применяемСГРУППИРОВАТЬ ПО. Групповым полем будет« Контрагенты. ОсновнойМенеджерПокупателя», суммируемым«Контрагенты.Ссылка», функция КОЛИЧЕСТВО.

В результате получим уже свернутую (сжатую) по менеджерамтаблицу.

Упорядочиваем ее записи по убыванию.

Page 240: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Как в итоговых записях вывести количестворазличных записей?

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

В отличие от предыдущего примера в результате запроса должныостаться покупатели, но и суммарное количество покупателей нужнотоже показывать:

МенеджерИвановИвановИвановИвановБатовБатов

Покупатель

ООО «Лабан и Ко»ЗАО «Шустер и сыновья»Энигма Инк.

Краски и Лаки

Количество311111

Таблицу можно получить запросом с использованием ИТОГИ ПО.

Источник - таблица «Справочник.Контрагенты». Посредствомусловия отбора отбрасываем записи групп справочника.

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

239

Page 241: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

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

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

Как узнать количество записей в результатезапроса?

Проще всего это сделать посредством выборки результата.

Метод Количество() возвращает количество записей в выборке.

Как проверить достаточность остатков товаровна складах, указанных в документе?

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

Табличная часть «Товары» документа «ВнутреннийЗаказ» можетзаполняться пользователем вручную и иметь следующий вид:

Номенклатура

Минск-Атлант 126Минск-Атлант 712Стинол 101Bosh-675Минск-Атлант 712Минск-Атлант 712

Размещение

Главный складГлавный складГлавный складГлавный складСклад электротоваровГлавный склад

Количество

121

711

Коэффициент

111111

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

КоличествоСписываемогоТовара = Количество* Коэффициент.

240

Page 242: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Регистр «ТоварыНаСкладах» имеет следующую структуру:

Для проверки достаточности остатков желательно получить однимзапросом таблицу вида:

Номенклатура

Минск-Атлант 126Минск-Атлант 712Стинол 101Bosh-675Минск-Атлант 712

Склад

Главный складГлавный складГлавный складГлавный складСклад электротоваров

Количествосписываемое

1

3171

Количествов остатке

10211171

Обратите внимание, в общем случае в табличной части документаможет иметь место неоднократное указание какой-нибудь конкретнойкомбинация «Номенклатура-Склад» (в нашем случае «Минск-Атлант 712- Главный склад»). В выходной таблице данные документа в такихслучаях должны быть свернуты.

Поэтому запрос можно построить левым внешним соединениемвложенного запроса по документу (группирующего данные из документапо номенклатуре и складу) и виртуальной таблицы«РегистрНакопления.ТоварыНаСкладах.Остатки»

241

Page 243: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Немножко подробнее о параметрах виртуальной таблицы« РегистрНакопления.Товары НаСкладах. Остатки»:

Первым параметром должен передаваться момент времени документа.Момент времени - это тип данных, содержащий дату и ссылку надокумент. Именно он позволяет однозначно позиционировать документсреди других, обладающих той же датой (дата ведь,, как известно, имеетточность - только до секунды). В результате мы получим данные обостатках именно на момент времени документа.

Вторым параметром передаем отбор по измерениям.

242

Page 244: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Для измерения «Склад» надо передать таблицу тех складов, которыевстречались в табличной части нашего документа. Получаем еевложенным запросом. Сложность в данном случае заключается в том, чтотип значения реквизита «Размещение» - составной. А нам нужны толькозначения типа СпрЗВОЧНИкСсылка.Склад. Сложность разрешаетсяприменением Выразить(). В результате мы приводим данные кнужному типу значения, а значения NULL, которые «не привелись» -отсекаем условием. Кроме того, выбираем только не повторяющиесязаписи.

Аналогично - для измерения «Номенклатура». В качестве таблицыдля возможных значений отбора передаем таблицу номенклатурныхпозиций, полученную запросом по табличной части нашего жедокумента.

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

Само же соединение осуществляется по полям «Номенклатура»таблиц «ВложенныйЗапрос» и «ТоварыНаСкладахОстатки» и по полям«Размещение» и «Склад».

Как в запросе осуществить отбор по значениюперечисления?

Необходимо отобрать всех работников предприятия, стоящих намомент «ДатаОтчета» на воинском учете. Данные о воинском учетеданные хранятся в периодическом регистре сведений «ВоинскийУчет».

2 4 3

Page 245: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Тип значения ресурса «ОтношениеКВоинскомуУчету»«ПеречислениеСсылка.ОтношениеКВоинскому Учету».

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

Источником является виртуальная таблица«РегистрСведений.ВоинскийУчет.СрезПоследних», рассчитанная на дату,указываемую в параметре «ДатаОтчета».

В результате запроса получим таблицу физических лиц,удовлетворяющих условию отбора. Отбор производится по полю«ОтношениеКВоинскомуУчету».

Сами же значение параметров устанавливается следующим образом:

244

I

Page 246: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

Как получить курсы валют на двеинтересующие даты?

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

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

245

Page 247: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Как одним запросом получить таблицурасхождений курсов взаиморасчетов всехвыписанных документов «ЗаказПокупателя» софициальным курсом?

Необходимо получить таблицу следующего вида:

Документ

Заказ покупателяТК000007 от 05.08.200412:00:01Заказ покупателяТК000003 от 26.07.200411:42:39Заказ покупателяТК000023 от 26.09.200412:00:02

Валютадоговора

USD

руб

EUR

Курсвзаиморасче

тов

31,51

1

33,42

Курсофициальный

30,6691

1

33,1609

Превышение

0,8409

-2,74

В отличие от вышеприведенного примера, дат получения курсов унас очень много (по числу документов).

В таком случае лучше поступить следующим образом:

246

Page 248: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

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

Полученную таблицу внутренним соединением соединяем опять стаблицей регистра сведений «КурсыВалюты». Но теперь уже посовпадению полей «Валюта» и «Период». Из соответствующих этомусовпадению записей получаем выходные поля, согласно требуемому.

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

247

Page 249: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

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

Необходимо получить данные в следующем виде:

НоменклатураБотинки муж.Ботинки муж.Ботинки муж.Ботинки муж.Ботинки жен.Ботинки жен.Ботинки жен.

ХарактеристикаРазмер 45Размер 45Размер 45Размер 45Размер 38Размер 38Размер 38

Остаток1010

55

Заказ

Заказ** 1Заказ №2

Заказ №4

Резерв8

262

2

В самой базе данных данные находятся в регистрах накопленияследующей структуры:

Остатки номенклатуры:

Остатки заказов покупателей:

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

248

Page 250: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

считаться на всех уровнях иерархии запроса. Но постараться добитьсяподобного эффекта можно с помощью запроса:

249

Первым запросам выбираются остатки, в полях соответствующихданным о резерве проставляем NULL и 0. Вторым запросом получаемданные по резервам. Раздел ИТОГИ позволяет внести иерархию врезультат запроса с указанием остатка по позиции и итога по количествузарезервированного товара.

Page 251: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Как получить перечень документов, приведшихданные подчиненного периодическогорегистра сведений к определенномусостоянию?

По данным периодического регистра сведений «КандидатыНаРаботу»

требуется построить таблицу:

ФизЛицоАндреева ЖаннаЮрьевнаАндреева ЖаннаЮрьевнаАндреева ЖаннаЮрьевна

Арефьев ВиталийФедоровичАрефьев ВиталийФедоровичАрефьев ВиталийФедорович

Документ

Регистрация кандидатов 00000001 от 31.01.2004 0:00:00Регистрация собеседования кандидата 00000005 от 09.02.2004 0:00:00

Регистрация кандидатов 00000003 от 28.03.2004 0:00:00Регистрация собеседования кандидата 00000027 от 30.03.2004 0:00:00

СтатусОтложен

Принят к рассмотрениюОтложен

Отложен

Принят к рассмотрениюОтложен

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

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

250

Page 252: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы

В качестве источника будет таблица - результат внутреннегосоединения виртуальной таблицы«РегистрСведений.КандидатыНаРаботу.СрезПоследних», рассчитаннойна момент формирования отчета и реальной таблицы записей регистрасведений «КандидатыНаРаботу» по полю «ФизЛицо».

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

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

251

Данную задачу лучше всего решить посредством запроса соследующим текстом:

Page 253: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

Как установить параметры запроса, если текстзапроса заранее не известен?

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

В этом случае можно воспользоваться методом запросаНаЙТиПараметры(), который возвращает коллекцию объектовОписаниеПараметраЗапроса, содержащих имя и тип значениякаждого параметра:

252

Page 254: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Анализ данных

® Как получить данные о товарахпродаваемых вместе?

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

Рассмотрим следующий фрагмент кода:

253

Page 255: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

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

ф Как порекомендовать сопутствующиетовары?

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

Рассмотрим фрагмент кода:

254

Page 256: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Анализ данных

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

ф Как посмотреть, что будет покупаться вдальнейшем?

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

Рассмотрим следующий фрагмент кода:

255

Page 257: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запросы, отчеты

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

256

Page 258: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Табличный документ, текстовый документ

Как вывести результат запроса в табличныйдокумент?

Наиболее эффективным способом решения этой задачи являетсяиспользование построителя отчета.

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

Предварительно создадим макет (тип макета «Табличный документ»).Внешний вид макета приведен на рисунке. Имя макета: «Макет».

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

257

Page 259: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

258

Page 260: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

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

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

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

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

259

Page 261: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Как вывести данные в табличный документ свозможностью сворачивания и разворачиванияданных по группировкам?

Вывод данных в табличный документ рассмотрен в примере «Каквывести результат запроса в табличный документ?» на странице 257.Рассмотрим особенность организации группировок (в нашем примере:группировок строк, хотя можно группировать и колонки).

Перед выводом данных в табличный документ используется методтабличного документа НачатьАвтогруппировкуСтрок(), которыйавтоматически создает группировки в табличном документе всоответствии со значением уровня строк, задаваемым при их выводевторым параметром метода Вывести().

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

Как при выводе данных в табличный документсвернуть все выводимые группировки?

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

260

I

Page 262: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

В переменной «УровеньГруппировки» определяется уровень, докоторого необходимо раскрыть группировки в табличном документе.

Как при выводе данных в табличный документпроизвольно определить состав свернутых иразвернутых группировок?

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

Установка четвертого параметра метода Выбрать() в значение Ложьприведет к тому, что данная область будет отображаться в свернутомвиде.

ф Как выгрузить результат запроса с показомиерархии?

В форме расположено табличное поле с именем ТП. Тип значениятабличного поля - ДеревоЗначениЙ. Необходимо в табличном полепоказать результат выполнения запроса с показом иерархии данных.

Для реализации этой задачи необходимо написать текст запроса,который в обязательном порядке должен содержать раздел ИТОГИ(именно этот раздел определяет иерархию). В процедуре, отвечающей зазаполнение данными табличного поля необходимо разместитьследующие строки:

261

Page 263: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Метод СоздатьКолонки() элемента управления ТабличноеПолеудаляет ранее существовавшие колонки и создает новые в соответствии сновым источником данных.

® Где и как можно увидеть макет,автоматически генерируемый построителемотчета?

Поскольку тип значения свойства Макет построителя отчета -Табличный Доку мент, то, как и всякий табличный документ, - егоможно вывести на экран при помощи метода Показать():

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

Первая строка кода - с присвоением свойству Макет значенияНеопределено нужно только в тех случаях, когда мы точно хотимполучить именно автоматически генерируемый построителем отчетамакет. Дело в том, что до нашего кода построителю мог быть назначендругой макет, или он был изменен.

262

Page 264: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

ф Как из построителя отчета передать данныев сводную таблицу?

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

После формирования построителя отчета можно сделать следующее:

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

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

263

Page 265: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

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

По документам «РегистрацияСобеседованияКандидата»:

необходимо построить отчет по форме:

КандидатАбрамов Андрей АлексеевичАввакумов Алексей АркадьевичАлексеев Вадим ЮрьевичАндреева Жанна Юрьевна

РезультатОтклоненПредложили работатьОтклоненОтложен

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

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

Данную задачу можно решить посредством следующей процедуры:

264

Page 266: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

265

Page 267: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Используем объект ПостроительОтчета. Текст запроса позволяетполучить из таблицы документов«РегистрацияСобеседованияКандидата» данные о кандидате, результатеи ссылке на документ, в которой были зарегистрированы эти данные.

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

быть две - исправим макет построителя отчета.Для этого считываем на переменную «Макет» макет, автоматический

генерируемый построителем отчета.Далее открываем цикл перебора областей ячеек макета, в которых

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

Далее открываем цикл перебора областей ячеек табличногодокумента «Макет», где присутствует текст «Результат». Если внайденной области еще и параметр установлен, как «Результат» - значитименно в этой области нам нужно установить значение«ПараметрРасшифровки» как «Ссылка». Таким образом, мы обеспечимразмещение содержимого полей «Ссылка» результата построителяотчета в расшифровки ячеек отображения полей «Результат» приформировании табличного документа по исправленному макету.

Остается только назначить построителю отчета исправленный макети вывести построитель отчета.

Как сохранить настройки построителя отчетадо следующего открытия формы отчета?

Допустим, необходимо сохранить настройки построителя отчета«ПостроительОтчета».

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

Первым параметром указано имя сохраняемого значения. Вторым -само сохраняемое значение. Поскольку метод сохраняет значениеиндивидуально для пары «ИнформационнаяБаза - Пользователь», то

266

Page 268: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

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

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

Восстанавливаем (сохраненное при окончании предыдущего сеансаработы с формой) значение настроек - по соответствующему именизначения.

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

267

Page 269: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Как организовать показ примечаний вформируемом табличном документе?

По данным документов «Событие»:

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

Как видите, в колонке «ОписаниеСобытия» в некоторых ячейкахустановлены примечания, содержащие «СодержаниеСобытия»

268

Page 270: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

Для формирования подобного табличного документа потребуетсямакет «Отчет» по следующей форме

Обратите внимание, ячейка, содержащая «ОписаниеСобытия» -поименована («Описание»).

Сам же табличный документ будет формироваться следующейпроцедурой:

269

Page 271: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Выполняем запрос для получения всех необходимых данных позаписям таблицы документа «Событие», которые удовлетворяютусловиям отбора: документы проведены, их дата находится в интервалеформирования отчета и значение реквизита «СостояниеСобытия» равноЗавершено (тип значенияПеречислениеСсылка.СостоянияСобытий).

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

Получаем макет. Из макета получаем необходимые для работыобласти.

Создаем табличный документ «ТабДок». Устанавливаем параметрыобласти «Заголовок» и выводим ее в табличный документ «ТабДок».

Выводим область шапки таблицы.Далее открываем цикл выборки из результата запроса.

270

Page 272: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

Внутри цикла:Заполняем параметры области детальных записей данными из

одноименных полей строки выборки по результату запроса.А в область «Описание» области детальных записей добавляем

примечание. В качестве текста примечания указываем данные из поля«СодержаниеСобытия» выборки результата запроса.

Выводим очередную область детальных записей в «ТабДок».По окончании цикла показываем сформированный табличный

документ пользователю.

ф Как обеспечить, чтобы при вводе на печатьне печатались первая колонка и первая строкатабличного документа «ДокументРезультат»?

Для решения этой задачи лучше всего воспользоваться свойствомтабличного документа ОбластьПечати. После того, как табличныйдокумент «ДокументРезультат» сформирован, пишем:

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

Для определения этой области указываем прямоугольную область,начинающуюся со 2-ой строки, 2-го столбца, и заканчивающуюсяпоследней строкой табличного документа (ее номер определяем изсвойства табличного документа ВысотаТаблицы) и последнимстолбцом (его номер определяем из свойства табличного документаШиринаТаблицы).

ф Как обеспечить фиксацию верхней частитабличного документа, генерируемогопостроителем отчета, по срезу шапки таблицы?

Если макет автоматически генерируется построителем отчета можновоспользоваться тем, что в его составе есть область «ШапкаТаблицы» и

271

Page 273: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

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

Например, построитель отчета называется «ПостроительОтчета», атабличный документ «ДокументРезультат».

Тогда после вывода построителя отчета в табличный документ можносделать следующее:

То есть, устанавливаем значение свойства ФиксацияСверхутабличного документа как номер нижней строки области«ШапкаТаблицы» макета табличного документа.

© Табличный документ формируетсяпостроителем отчета. Как при печатитабличного документа обеспечить вывод шапкитаблицы на каждой странице?

Если табличный документ строится по макету, сгенерированномупостроителем отчета, то в его составе будет область «ШапкаТаблицы».

Если табличный документ называется «ДокументРезультат», апостроитель отчета - «ПостроительОтчета», после вывода построителяотчета в табличный документ можно сделать следующее:

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

В нашем случае данную область определили по координатам области«ШапкаТаблицы» автоматически генерируемого построителем отчетамакета.

272

Page 274: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

ф Как при выводе на печать «длинного»документа указать в колонтитулах страницномер документа, дату и номер страницы?

Работа должна вестись со свойством ВерхниЙКолонитултабличного документа. Тип значения его объектКолонтитул ТабличногоДокумента.

Устанавливаем для нужного колонтитула признак вывода на печать.Далее указываем, что начинать вывод колонтитула следует не с первойстраницы (по умолчанию), а со страницы № 2.

Передаем значения для заполнения свойств ТекстСлева иТекстСправа. Обратите внимание, что типы значений этих свойств -Строка. В текст слева выводим представление и номер документа. Втекст справа выводим номер текущей страницы.

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

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

В данном примере свойству ОриентацияСтраницы табличногодокумента «ДокументРезультат» назначается значение Ландшафтсистемного перечисления ОриентацияСтраницы.

273

Page 275: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Табличный документ формируетсяпостроителем отчета. Как для всех выводимыхчисловых показателей установить вывод бездробной части?

Регистр «ПартииТоваровНаСкладах» имеет ресурсы«Сумма» (точность: 2) и «Количество»(точность: 3). По региструстроится отчет посредством построителя отчета. Внешний видтабличного документа определяется настройками построителя отчета.

Необходимо обеспечить, чтобы все числовые показатели отчетавыводились в формате целых чисел.

Для решения данной задачи лучше всего поработать с областямимакета построителя отчета перед выводом построителя отчета втабличный документ.

Текст областей макета построителя отчета (названия параметров)будет определяться названиями выходных полей запроса.

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

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

Значит, нам достаточно перебрать все области с текстом содержащим«Количество» или «Стоимость», и для каждой из них установить формат"ЧДЦ=0".

Находим в процедуре выведения построителя отчета на табличныйдокумент сам момент выведения и перед ним дописываем:

274

Page 276: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

Сначала в переменную «Макет» получаем макет построителя отчета.Промежуточной переменной «ТекущаяОбласть» назначаем значение

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

тексте которой упоминается слово «Стоимость». На первом витке цикла

275

Page 277: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

это будет первая область от начала макета, на каждом очередном -следующая.

Если не удалось найти такую очередную область (то есть ее значениеНеопрбделено) - прерываем цикл.

Если же удалось, проверяем, есть ли у данной области параметр. Еслиесть - меняем формат выводимых в этой области числовых данных.Форматная строка «ЧДЦ» определяет количество разрядов послезапятой. В нашем случае - ноль. При этом сами данные будут привыводе округляться в соответствии с правилами округления, заданнымидля конфигурации.

Далее аналогичные действия выполняются для слова «Количество».После всех циклов измененный макет отдаем в качестве значения

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

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

ф Как для построителя отчета совместитьназначение своего макета и применениеодного из стандартных макетов оформления?

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

Устанавливаем макету построителя отчета значение макета,созданного вручную и хранимого в составе макетов этого отчета.

Для применения стандартного макета оформления к назначенномумакету - перед выводом табличного документа необходимо использоватьметод ОформитьМакет().

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

Как при получении данных из запроса обойтитолько итоговые записи?

При обходе результата запроса не хотим обходить детальные записи.

276

Page 278: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

277

Page 279: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Как при получении данных из запроса обойтитолько иерархические итоговые записи?

В примере «Как при получении данных из запроса обойти толькоитоговые записи» на странице 276 в методе Выбрать() вместо вариантаобхода ПоГруппировкам необходимо использоватьПоГруппировкамСИерархией.

В результате часть кода изменится:

В результате в табличный документ будут выведены только:• запись общих итогов (она относится к иерархическим)• итоговые записи по группам справочника «Номенклатура»

(иерархические итоговые записи)

278

Page 280: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

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

ф Как вывести картинку в табличныйдокумент?

В макете определим именованную область «ОбластьСКартинкой». Вней разместим элемент управления Картинка (имя «Логотип»), какпоказано на рисунке:

В процедуре, которая будет выполняться при формированиипечатной формы, разместим следующий текст:

279

Page 281: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Как вывести картинку в табличный документбез изменения макета?

Необходимо в шапке отчета (выводимого в поле табличногодокумента) отобразить логотип компании. При этом не нужно менятьмакет данного отчета.

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

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

Как работать со сводной таблицей?Для иллюстрации одного из способов работы со сводной таблицей

создадим обработку. В диалоге основной формы разместим элементуправления ПолеТабличноГОДокумента (имя «ПолеДокумента»). Вданном элементе управления необходимо выделить любуюпрямоугольную область и воспользоваться пунктом главного менюпрограммы «Форма | Встроенные таблицы | Вставить сводную таблицу»:

280

Page 282: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

При этом будет создана сводная таблица с именем« СводнаяТабл ица 1».

В процедуре обработчике нажатия на кнопку «Выполнить» разместимследующие строки:

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

281

Page 283: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Как программно разместить данные в своднойтаблице и оформить ее?

Для того чтобы облегчить чтение сводных таблиц, содержащихбольшое количество данных, можно использовать свойства своднойтаблицы МакетОформения и ОтображатьЛинии, позволяющеезадать режим отображения линий, а для размещения данныхиспользовать свойства сводной таблицы Строки, Колонки и Данные.Например:

282

Page 284: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

Как создать печатную форму посредствомтекстового шаблона?

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

283

Page 285: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Для решения данной задачи создаем сначала макет текстовогодокумента « ЗаявкаНаПропуск».

284

Page 286: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Табличный документ, текстовый документ

Макет сделаем следующего вида:

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

посредством обращения к выводимому полю, далее «# Формат» иформатная строка. Аналогично там же можно производитьвыравнивание, например: «#Выравнивание Лево».

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

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

285

Page 287: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Сам же текстовый документ будет формироваться так:

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

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

В цикле перебора строк табличной части документа«СторонниеЛица» производим заполнение и вывод области «Состав».

В подвале текстового документа выводим ответственного ипоказываем текстовый документ на экране.

286

Page 288: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Диаграммы

ф Как заполнить диаграмму данными?Рассмотрим пример, позволяющий показать данные в круговой

диаграмме. Данная диаграмма имеет одну точку и произвольноеколичество серий.

Первоначально в диалоге необходимо разместить элемент управленияДиаграмма (имя элемента «Диаграмма»). В свойствах элементауправления укажем, что будем работать с круговой диаграммой.

Далее в модуле формы определить текст обработчика нажатия накнопку «Выполнить»:

287

Page 289: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

В результате выполнения этого кода будет сформирована следующаядиаграмма:

288

Page 290: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Диаграммы

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

Как заполнить данными измерительнуюдиаграмму?

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

289

Page 291: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

В результате работы данного кода будут получены данные о продажахза четыре дня августа 2004 года (в другие дни продаж не было), которыеотобразятся в измерительной диаграмме четырьмя стрелками,указывающими на объем продаж:

290

Page 292: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Диаграммы

<D Как вывести результат запроса в своднуюдиаграмму?

Для того чтобы отобразить результат запроса в сводной диаграмме,следует использовать свойство сводной диаграммы ИСТОЧНИКДЗННЫХ, азатем установить нужные значения серий, точек и ресурсов диаграммы:

291

Page 293: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

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

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

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

292

Page 294: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Диаграммы

Как заполнить диаграмму Ганта данными?Создадим обработку. В диалоге основной формы разместим элемент

управления Диаграмма Га НТЭ (имя элемента управления «ДГ»). Вобработчик события нажатия на кнопку «Выполнить» поместимследующие строки:

293

Page 295: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Для того чтобы заполнить диаграмму Ганта, необходимо создатьнужные серии (в нашем случае это виды дежурств), точки (в нашемслучае это сотрудники) и заполнить свойства значений диаграммы длякаждой пары точка - серия. Значение диаграммы представляет собой вобщем случае совокупность нескольких интервалов. В данном примерекаждое значение диаграммы содержит лишь один интервал, для которогозадается начало, конец и текст, выводимый в качестве подсказки принаведении курсора мыши на этот интервал.

В результате работы этого кода будет сформирована следующаядиаграмма:

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

294

Page 296: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Диаграммы

Как связать интервалы диаграммы Ганта?Диаграмма Ганта позволяет устанавливать связи между различными

интервалами диаграммы. Для иллюстрации этой возможностидоработаем пример «Как заполнить диаграмму Ганта данными?» настранице 293.

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

Для добавления связи необходимо выполнить метод Добавить()того интервала диаграммы, который является началом связи. В качествепараметра этого метода необходимо передать интервал диаграммы,

295

Page 297: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

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

В результате будет получена следующая диаграмма:

Как обработать интерактивное изменениеинтервалов диаграммы Ганта?

Для того чтобы пользователь имел возможность интерактивногоизменения интервалов диаграммы Ганта, необходимо свойствуРедактирование нужных интервалов присвоить значение Истина:

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

296

Page 298: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Диаграммы

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

297

Если добавить этот код к примеру «Как связать интервалыдиаграммы Ганта?» на странице 295, то изменение границ интерваловдиаграммы станет возможным с «точностью до дня», а при частичномперекрытии связанных интервалов связь между ними будет отображатьсякэасным цветом.

Page 299: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Как разместить непериодические метки вдиаграмме Ганта?

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

298

Page 300: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Диаграммы

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

В результате будет получена следующая диаграмма:

299

Page 301: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Как выделить некоторые интервалы фонадиаграммы Ганта?

Диаграмма Ганта позволяет выделять цветом фона произвольныеинтервалы. Эта возможность может использоваться, например, для«подсветки» выходных дней.

Для иллюстрации этой возможности к примеру «Как разместитьнепериодические метки в диаграмме Ганта?» на странице 298, можнодобавить код, который выделит выходные дни другим цветом фонадиаграммы:

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

В результате будет получена следующая диаграмма:

3 0 0

Page 302: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Географическая схема

Как отобразить в форме файлгеографической схемы?

Для этого следует разместить в форме поле географической схемы(например, «ГеоСхема») и выполнить метод Пр0ЧИТЗТЬ():

Как отобразить в форме макетгеографической схемы?

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

Как изменить масштаб географическойсхемы?

Для этого следует установить соответствующий режим отображениягеографической схемы (ЗадаетсяМасштабом) и задать требуемыймасштаб:

301

Page 303: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Как отобразить на географической схемевыбранный город?

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

302

Page 304: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Географическая схема

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

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

Для иллюстрации работы географической схемы с произвольнымисточником данных расположим в форме поле географической схемы(например «ГеоСхема») и под ним табличное поле(«ИсточникДанныхГеоСхемы»), связанное с таблицей значений.

В поле географической схемы выведем макет регионов России,содержащий слои «Регионы» и «Города» (такой макет, например,содержится в демонстрационной конфигурации «Географическая схема»ИТС). Затем выполним следующий код, который создаст источникданных типа На Пересечен И И и назначит его географической схеме:

303

Page 305: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

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

Табличное поле «ИсточникДанныхГеоСхемы» иллюстрируетустройство источника данных типа На Пересечен И и. В первой колонкерасположены значения объектов, а во второй - должны находиться тезначения, которые должны быть отображены для этих объектов в серии«Информация». Серия, в которой должны отображаться значения,идентифицируется своим значением, которое указывается в первойстроке источника данных в соответствующем столбце (в нашем случаеэто строка «Информация»). Последняя колонка в источник данныхдобавлена исключительно в «демонстрационных» целях. Этой колонке несоответствует никакая серия в слое Города, поэтому она простоигнорируется географической схемой.

Введя произвольные значения в колонку таблицы«СерияИнформация», можно увидеть, что они будут отображены длясоответствующих объектов слоя «Города».

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

304

Page 306: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Администрирование

Запуск 1С:Предприятия из команднойстроки

ф Как запустить 1С:Предприятие из команднойстроки?

Для запуска 1С:Предприятия в пользовательском режиме, в случаеесли база данных функционирует в файловом варианте.

Для запуска 1С:Предприятие в режиме «Конфигуратор», в случаеесли база данных функционирует в файловом варианте.

Для запуска 1С:Предприятие в пользовательском режиме, в случаеесли система функционирует в клиент-серверном варианте.

Для запуска 1С:Предприятие в режиме «Конфигуратор», в случаеесли система функционирует в клиент-серверном варианте.

305

Page 307: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Администрирование

ENTERPRISE - режим «Предприятие»CONFIG - режим «Конфигуратор»/F Путь к базе, функционирующей в файловом режиме/S ИмяСервера\ИмяБазы, функционирующей в клиент-серверном

режиме/N Имя пользователя/Р Пароль пользователяЗамечание: в этих и последующих примерах командная строка

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

Как из командной строки заставить1С:Предприятие сделать выгрузку базыданных?

В командной строке необходимо прописать следующее:

Как из командной строки обновить изменениятекущей конфигурации в конфигурации базыданных?

В командной строке необходимо прописать следующее:

306

Page 308: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запуск 1С:Предприятия из командной строки

Как выполнить тестирование и исправлениеинформационной базы без проверкиссылочной целостности в автоматическомрежиме?

Для этого следует использовать режим пакетного запускаконфигуратора из командной строки:

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

Как выполнить проверку конфигурации вавтоматическом режиме с выводомрезультатов проверки в файл?

Для этого следует использовать режим пакетного запускаконфигуратора из командной строки:

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

-ClientServer - Работа клиентского приложения в режиме клиент -сервер. Проверка компиляции модулей в режиме эмуляции средыклиентского приложения, выполняемого в режиме клиент - сервер.

307

Page 309: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Администрирование

-Client - Работа клиентского приложения. Проверка компиляциимодулей в режиме эмуляции среды клиентского приложения,выполняемого в файловом режиме.

-ExternalConnectionServer - Работа внешнего соединения.Проверка компиляции модулей в режиме эмуляции среды внешнегосоединения, выполняемого в режиме клиент - сервер..

-Server - Работа сервера 1С:Предприятия. Проверка компиляциимодулей в режиме эмуляции среды сервера 1С:Предприятия.

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

-IncorrectReferences - Поиск некорректных ссылок. Поиск ссылокна удаленные объекты. Выполняется по всей конфигурации, включаяправа, формы, макеты, интерфейсы и т.д. Также осуществляется поисклогически неправильных ссылок.

-Config Logical Integrity - Проверка логической целостностиконфигурации. Стандартная проверка, обычно выполняемая передобновлением базы данных.

-UnreferenceProcedures - Поиск неиспользуемых процедур ифункций. Поиск локальных (не экспортных) процедур и функций, накоторые отсутствуют ссылки. В том числе осуществляется поискнеиспользуемых обработчиков событий.

-HandlersExistence - Проверка существования назначенныхобработчиков. Проверка существования обработчиков событийинтерфейсов, форм и элементов управления.

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

308

Page 310: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Запуск 1С предприятия из командной строки

Как сократить журнал регистрациипрограммно?

Для этого следует использовать режим пакетного запускаконфигуратора из командной строки с параметром/ReduceEventLogSize:

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

Как выгрузить модули прикладного решения ввиде текстовых файлов из командной строки?

Для этого можно использовать режим пакетного запускаконфигуратора из командной строки с параметром /DumpConfigFileS:

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

309

Page 311: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Администрирование

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

Для этого можно использовать режим пакетного запускаконфигуратора из командной строки с параметром /LoadConfigFiles:

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

310

Page 312: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Разное

ф Как поменять значение рабочей даты?Прежде чем устанавливать значение рабочей даты на

«УстанавливаемаяДата», необходимо убедится, что рабочая дата неопределяется системной датой компьютера:

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

Как установить/снять монопольный режим?Установленный монопольный режим позволит пользователю быть

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

Как видите, если применение процедуры работы с информационнойбазой УстановитьМонопольныйРежим() приводит к ошибкеприходится с этим смириться. Хотя если захотите обеспечить выходдругих пользователей из системы - в настоящем издании есть пример

311

Page 313: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Администрирование

того, этого добиться: «Как принудительно завершить работу всехпользователей информационной базы в клиент-серверном вариантеработы?» на странице 320.

Кроме самой установки монопольного режима можно еще, например,убедиться, что в текущий момент работа идет в монопольном режиме:

Или же снять монопольный режим:

Как внести запись в журнал регистрации?Основные события системы (запись, удаление объектов и т.п.) при

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

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

В качестве параметров можно указывать:• событие (строковое описание, допустимо использование «.»);• уровень важности события (будет отображено

соответствующей пиктограммой). Тип значения - элементсистемного перечисления УровеньЖурналаРегистрации;

• объект метаданных. В нашем случае определили егопосредством соответствующего метода;

• данные. Для указания ссылок на объекты, с которымисвязано данное событие. Например, на конкретный документили элемент справочника. В нашем случае - указалипеременную содержащую дату формирования отчета;

• комментарий.

312

Page 314: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Разное

ф Как получить данные о зарегистрированныхпользователях информационной базы?

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

В указанной процедуре работа по получению списка пользователейначинается с обращения к свойству глобального контекстаПользователиИнформационнойБазы. МетодПолучитьПользователейО возвращает массив объектовПользовательИнформационнойБазы, который обходится потом вцикле.

313

Page 315: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Администрирование

(D Как определить общую системнуюинформацию?

Получить подобное предупреждение:

можно посредством такого кода:

Создаем конструктором новый объект СистемнаяИнформация.Считываем из него версию приложения, версию операционной системы,данные об оперативной памяти и процессоре. Данные о конфигурациисчитываем из глобального контекста, объект Метаданные.

314

Page 316: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Разное

Как программно добавить пользователя винформационную базу?

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

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

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

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

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

315

Page 317: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Администрирование

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

Если выполняется попытка добавить нового пользователя садминистративными правами - выдается запрет. Если набор ролейнового пользователя не содержит роль «Администратор» проверяется,является ли текущий пользователь менеджером или администратором -и если это так, то выполняется запись нового пользователя. В противномслучае выдается сообщение об отсутствии прав доступа.

316

Page 318: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Разное

Как создать собственный лог-файл для записирезультатов работы внешней обработки?

Для этого можно использовать объект ЗаписьФаЙЛЗ, которыйпозволяет выводить текстовые строки в указанный файл:

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

317

Page 319: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Администрирование

Как в форме отобразить список пользователей,которые работают с данной информационнойбазой?

Для этого можно расположить в форме табличное поле (например, сименем «Пользователи»), и воспользоваться методом глобальногоконтекста ПолучитьСоединенияИнформационнойБазы(), которыйвозвращает массив, состоящий из описаний соединений с текущейинформационной базой:

Как выгрузить журнал регистрации в XML-формате?

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

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

318

Page 320: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Разное

Если требуется, например, выгрузить только события, связанные сопределенными пользователем (пользователями), можно в формерасположить список (например «СписокПользователей»), заполнить егоимеющимися пользователями:

319

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

Page 321: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Администрирование

Как принудительно завершить работу всехпользователей информационной базы вклиент-серверном варианте работы?

Для этого можно воспользоваться возможностью программногодоступа к серверу 1С:Предприятия. Нужно создать СОМ-коннектор ивыполнить метод ConnectServer(), который позволяет подключиться куказанному серверу 1С:Предприятия.

Затем следует аутентифицироваться с правами администратора ввыбранной информационной базе, получить все клиентские соединенияэтой базы и разорвать их:

320

Page 322: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Текстовый файл

® Как выгрузить данные из справочника втекстовый файл?

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

321

Page 323: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как загрузить данные из текстового файла?

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

Работа с текстом. Модель последовательногодоступа

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

Запись данных в файл:

322

Page 324: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Текстовый файл

Чтение данных:

323

Page 325: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

X M L

ф Как из одной базы перенести документ вдругую базу?

Необходимо экземпляр документа «РеализацияТоваровУслуг»(ссылка на который выбирается в диалоге создаваемой обработки)перенести в другую базу данных. Структура конфигураций идентична.Справочники (и другие сопутствующие объекты) синхронизированы позначениям внутренних идентификаторов.

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

При выгрузке создаем элемент «Root» исходя из соображений, что вxml-документе должен быть только один корневой узел, а в общем случае(но не в нашем) выгружаться может не один объект.

324

Page 326: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

XML

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

325

Page 327: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как можно сформировать XML-документпроизвольной структуры?

Путь к формируемому XML-документу указан в переменной«ПутьКФайлу». Используется модель последовательного доступа (работаосуществляется только с одним текущим узлом).

В результате будет получен файл вида (просмотр в Internet Explorer):

<?xml version="l,0" ?><Корневой Справочник=иНомвнклатура||>

с:Элемент Код="6" Артикул="1234">В|д (капилярная)</Э.г<Элемент Код="3" Артикул---" 1235">Паркер "Golg"</3J18M«<Элемент Код="5" Артикул="1236">Шариковая о б ы ч н а я<Элемент Код="7" Артикул=п1237">КоИ!пог м</Элемент>< Э л е м е н т К о д=" 8" А р т и к у л= ! ! 12 3 8" > Ко h i n о г т </Эл емент >< Э л е м ент К од=" 4 й А р т и к у л= i ! 12 3 9" > Ко h i n о г т м </Э л е м е н т ><Элемент Код="14" Артикул="1240">Агс!о TL 1000 ЕХ-1</<Элемент Код="15" Артикул=*1241я>1т1в5Н: WS 105 ТХ</<Элемент Код="11 ! ! Артикул=Н1242Н>ВО8СН KGS 3760 1Е<< Элемент К од="12" ApTSiK'^n="1243">ELECTROLUX ER 900

</Корневой>

3 2 6

Page 328: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

XML

Можно сказать, что XML-документ состоит из набора элементов.Элемент можно упрощенно представить в виде совокупностиструктурных единиц:

< НачалоЭ лементаИмяАтрибута=Значение Имя Атрибута=Значение >Текст

<КонецЭлемента>

Создание XML-документа с помощью объекта 3anMCbXMLпроизводится путем помещения в строгой последовательности (иначебудет нарушена структура) «частей» узлов.

Как сформировать XML-документ в строку?Требуется, чтобы запись XML-документа производилась не в файл, а

в строку. Рассмотрим пример:

327

Page 329: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Для вывода X ML-доку мента в строку после создания объектаЗаписьХМЦ необходимо использовать метод УстановитьСтроку().Только в этом случае метод Закрыть() вернет строку, которая будетсодержать сформированный X ML-доку мент.

Как можно обмениваться данными, используяXML-сериализацию через файлы другихформатов?

Под XML-сериализацией понимается возможность записи или чтенияданных из 1С:Предприятие 8.0 в (из) XML-документ. Но фактическипри выгрузке данных выгружаемое значение агрегатного типа можнопосредством сериал изации преобразовывать в фрагмент XML исохранять в файлах произвольных форматов как строковое.

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

Метод УстановитьСтроку() устанавливает режим вывода данных нев XML-файл, а в строку (строка возвращается при выполнении методаЗакрыть()).

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

328

Page 330: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

XML

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

Как можно загрузить XML документпроизвольной структуры?

Путь к загружаемому X ML-доку менту указан в переменной«ПутьКФайлу». Используется модель последовательного доступа. Вданном примере под загрузкой будет пониматься чтение данных и выводих в окно служебных сообщений. Загружать будем документ,выгруженный в предыдущем примере.

329

Page 331: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Объект ЧтениеХМ1_ производит чтение данных, используя модельпоследовательного доступа. В этой модели обход документапроизводится именно по его структурным элементам последовательно, заисключением узлов атрибутов, для которых необходимо организовыватьвложенный цикл.

Приведем фрагмент данных выводимых в окно служебныхсообщений:

330

Page 332: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

DBF-файлы

® Как можно построить выгрузку-загрузкупосредством файлов DBF?

Не смотря на то, что формат DBF считается уже устаревшим, можетвозникнуть необходимость работы с файлами данного формата.

Выгрузка данных:

Загрузка данных:

331

Page 333: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с HTML-документами

Ф Заполнение HTML-анкетНеобходимо заполнить анкету, реализованную как HTML-документ и

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

Фрагмент HTML-кода анкеты выглядит следующим образом:

Сама анкета в «незаполненном» состоянии будет иметь следующий

вид:

332

Page 334: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с HTML-доку ментам и

В примере используется функциональность элемента управленияПолеНТМЦЦокумента (его имя в примере «ПолеНТМЬ»),расположенного в форме обработки. Также в форме обработкирасположено поле ввода «URL», в котором указывается адрес анкеты.

Для перехода к необходимой интернет-странице в обработчикесобытия При изменении поля ввода «URL» используется строка кода:

Для записи данных следующий код (в данном случае) желательноразмещать в обработчике события Документ сформирован поляHTML-документа.

333

Page 335: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

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

334

Page 336: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с файлами

ф Как организовать диалог выбора текстовогофайла?

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

Указание пути к файлу:

Выбор каталога:

335

Page 337: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как прочитать информацию о файле?При помощи ниже приведенного кода можно дать возможность

пользователю выбрать любой файл и сообщить его параметры:

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

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

Далее на строковую переменную собираем все характеристики исообщаем их пользователю.

ф Как получить список файлов в указанномкаталоге?

Например, требуется получить список xml-файлов, находящихся вуказанном каталоге. Это можно выполнить следующим образом:

336

Page 338: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с файлами

Методу НаЙТИФаЙЛЫ() передается в качестве параметров путь имаска поиска. В результате получим коллекцию найденных файлов.

Замечание: если файлы находятся на ftp-сервере, необходимоуказывать прямые слеши '/', а не обратные '\' в параметре «Путь».

Как переместить файл, выложенный на ftp ксебе на локальный компьютер?

Сначала убеждаемся, что в папке-получателе такого файла несуществует. Если существует - удаляем.

Далее убеждаемся, что нужный файл есть в папке-источнике. Еслиесть - перемещаем.

Обратите внимание на написание слешей при работе с ftp-сервером.

Как разделить большой файл на несколькофайлов определенного размера?

При передаче файлов большого размера может возникнутьнеобходимость в «разделении» файла на более мелкие «части» (если естьограничения на размер писем электронной почты или если, например,необходимо передать файл на дискетах). В этом случае можновоспользоваться методами глобального контекста РазделИТьФаЙЛ() иОбъединитьФайлы().

Метод РазделитьФаЙл() позволяет разделить указанный файл (вданном случае «MyFile.exe») на несколько файлов указанного размера (впримере - 1 Мб), и поместить их в указанный каталог:

337

Page 339: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Метод ОбъединитьФаЙЛЫ() позволяет «собрать» файл изнескольких частей, указывая маску, по которой должны выбиратьсяфайлы, и имя результирующего файла:

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

каталоге, можно использовать объект Запись71РФаЙла:

Для извлечения файлов из ZIP-архива, следует использовать объектЧтение21РФайла:

Как сравнить два текстовых файла?

338

Page 340: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с файлами

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

Даем пользователю выбрать первый файл, потом второй.Далее создаем конструктором объект СравнениеФайлов.

Назначаем имена первого и второго файлов (сравниваемых). Указываемзначения свойств, что нужно игнорировать при сравнении пустоепространство и что способ сравнения будет Текстовый Документ(значение устанавливается из системного перечисленияСпособСравненияФаЙЛОВ). Далее посредством методаПоказатьРазличия() демонстрируем различия в тексте файлов:

Замечание: кроме текста можно сравнивать файлы как таблицы илипобайтно. Для этого нужно установить лишь соответствующее значениесвойства СпособСравнения.

339

Page 341: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как организовать контроль формированияфайла внешним приложением?

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

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

340

Page 342: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

A c t i v e X

(D Как использовать элементы управленияActiveX?

В качестве примера, на котором продемонстрируем возможностьиспользования в диалоге формы элементов управления ActiveX,рассмотрим возможность использования Microsoft Media Player (дляпрослушивания музыкальных файлов, воспроизведения видео файлов).

Для вставки в диалог формы соответствующего элемента управлениянеобходимо воспользоваться пунктом главного меню«Форма | Вставить ActiveX..». В открывшемся диалоге выбора отметимнужный нам объект (как показано на рисунке):

341

Page 343: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Определим имя элемента управления: «WMP». Кроме этогоразместим в диалоге кнопку, при нажатии на которую будет вызыватьсяобработчик события, содержащий ниже приведенный текст:

В указанной процедуре большинство строк кода работают с объектомДиалогВыбораФаЙЛЭ, позволяющим организовывать удобный диалогвыбора файла. Запуск выбранного файла производится с кнопки«Воспроизведение/Play» элемента управления WMP.

342

Page 344: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Макеты ActiveDocument

Как сформировать новый договор наосновании файла Microsoft Word?

Для заключения договоров с контрагентами разработан типовойдоговор («пустышка»). При его оформлении (для реального контрагента)в определенные места документа вставляются данные о контрагенте.Подобные фрагменты определены следующим образом «<ИмяОбласти>»(на практике можно использовать другие способы).

Фрагмент такого договора приведен на ниже следующем рисунке:

Оформленный таким образом документ сохранен в файле, которыйзагружен в качестве макета (при его создании указывается, что типмакета - «Active document»).

3 4 3

Page 345: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Далее в соответствующем обработчике события (например, вобработчике нажатия на кнопку «Создать договор») размещаетсяследующий текст:

344

Page 346: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с Интернет

Работа с электронной почтой

Как организовать работу с электронной почтойчерез установленного почтового клиента?

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

В данном случае прием и отправка писем проходит черезустановленного почтового клиента.

Отправка сообщения:

Прием сообщения:

345

Page 347: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как организовать работу с почтой безустановленного почтового клиента на компьютерепользователя?

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

Отправка сообщения.Текст процедуры, отвечающий за формирование и отправку

сообщения следующий:

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

346

Page 348: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с Интернет

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

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

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

В форме обработки определены два реквизита:• «Позиция» (тип ЧИСЛО). В диалоге формы обработки

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

• «СостояниеПриема» (тип Строка). В реквизит будетзаписываться информация о текущем этапе работыобработки. В диалоге размещается элемент управленияНадпись, связанный через свойство Данные с даннымреквизитом.

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

В модуле формы размещена процедура со следующим текстом:

347

Page 349: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

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

348

Page 350: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с Интернет

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

Работа с файлами

Загрузка файлов по FTPСоздадим обработку, которая позволит просматривать файлы в

каталоге по указанному FTP-адресу. Имя FTP-сервера будетзаписываться в реквизит «FTPServer», файлы будут отображаться в полесписка (с отмеченным свойством «Отображать пометку»).

В модуле для кнопок командной панели необходимо определитьобработчики событий:

349

Page 351: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Выполнение HTTP запросаВ ряде случае существует необходимость получения каких-либо

данных из Интернета. Необходимые данные могут размещаться настраницах html, или они могут формироваться при обращении кисполняемым (с точки зрения WEB-сервера) файлам. Для получениятаких данных можно использовать HTTP запрос.

В переменной «HTTPserver» указывается путь к каталогу ресурса.

350

Page 352: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с СОМ-объектами

© Как из одной базы 1С:Предприятие 8.0перенести остатки товаров в другую базу,используя СОМ-соединение.

Требуется перенести остатки товаров из рабочей базы в новую.Принято решение для этой цели использовать СОМ. Для этой целисоздана обработка, у которой определен реквизит «ДатаПереноса» (накакую дату необходимо смотреть остатки). Считается, что база, вкоторую переносятся данные, функционирует в файловом режиме (впротивном случае по другому оформляется строка подключения к базе).Путь к базе находится в переменной «Путь». В переносимой базесуществует пользователь с именем «Usrl» со сброшенным паролем.Текст соответствующей процедуры:

351

Page 353: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

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

352

Page 354: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с СОМ-объектами

Пример обращения к программе1С:Предприятие 8.0 из модуля MS Excel черезСОМ-соединение

Например, в файле Excel хранится список контрагентов, которыйнужно загрузить в 1С:Предприятие:

Для решения этой задачи в таблице Excel можно создать макрос(Сервис | Макрос | Макросы...), который будет запускать требуемуюинформационную базу 1С:Предприятия в режиме СОМ-соединения ипереносить в нее данные:

353

Page 355: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Этот пример представлен на языке MS Visual Basic. Сначалавыполняется создание и запуск приложения 1С: Предприятие, всправочнике «Контрагенты» создается новая группа ****** Экспорт изExcel ******»? в которую будут помещаться создаваемые элементы.Далее, в цикле обхода таблицы Excel для каждой строки создается новыйэлемент справочника «Контрагенты», заполняются его свойства иэлемент справочника записывается.

354

Page 356: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с СОМ-объектами

ф Как организовать считывание данных изфайлов *.xls?

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

ООО «Торгуем всем»Ботинки муж.Ботинки жен.

10200

На каждой странице в первой строке, первой колонке расположенонаименование контрагента. Со второй строки идет «табличная часть»: вовторой колонке наименование товара, в третьей колонке его цена.

Выполнение последней строки обязательно для корректной работы слюбыми приложениями Microsoft Office.

355

Page 357: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как запустить макрос, записанный в книгеMicrosoft Excel?

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

Следующий текст иллюстрирует такую возможность

356

Page 358: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с СОМ-объектами

Как создать документ программы MicrosoftExcel по оформлению, приведенному в другомдокументе?

Необходимо создать книгу Microsoft Excel с оформлением, примеркоторого приведен в заранее подготовленной книге. Пример оформленияприведен на рисунке.

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

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

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

размещены следующие строки кода:

357

Page 359: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

358

Page 360: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с СОМ-объектами

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

Ф Как выгрузить прайс-лист в документпрограммы Microsoft Word?

Необходимо реализовать возможность выгрузки данных о стоимостиноменклатурных позиций в документ программы «Microsoft Word». Приэтом желательно использовать хотя бы простейшие возможности поформатированию текста в документе.

Для этой цели создадим обработку в обработчике нажатия на кнопку«Выполнить» которой разместим следующий текст:

359

Page 361: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

360

Page 362: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Работа с СОМ-объектами

В первой конструкции «Попытка - Исключение» создаем объект, спомощью которого будем пытаться создавать новый документ. Втораяконструкция «Попытка - Исключение» описана на случай, что если приработе с документом произойдет ошибка, в этом случае созданныйобъект «Word.Application» будет закрыт. В противном случае созданныйдокумент будет открыт в новом окне программы Microsoft Word.

361

Page 363: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

® Как выполнить запрос к произвольной базеданных SQL?

Данный пример иллюстрирует возможность получения данных избазы данных SQL данных, используя механизм «ADODB».

В начале процедуры создается строка подключения, в которойуказывается имя сервера, имя базы, пользователя и пароль. Дляподключения к базе используется объект «Connection». Запрос иполучение данных производится через объект «RS». По окончании обаобъекта закрываются.

362

Page 364: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

A u t o m a t i o n C l i e n t / S e r v e r ( O L E )

(D Как из одной базы 1С:Предприятие 8.0интерактивно заполнить документ в другойбазе, используя Automation Client/Server (OLE)?

Необходимо реализовать механизм, позволяющий пользователямодной базы данных заполнять документы другой базы данных.

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

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

363

Page 365: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как из таблицы Excel загрузить списокноменклатуры в 1С:Предприятие свозможностью редактирования?

Например, в файле Excel хранится список номенклатуры, которыйнужно загрузить в 1С: Предприятие, причем, поскольку в1С:Предприятии уже имеются некоторые номенклатурные позиции, а втаблице Excel указаны не все реквизиты номенклатуры, существующие всправочнике номенклатуры 1С:Предприятия, требуется дополнительноеручное редактирование каждого вновь создаваемого элементаноменклатуры:

364

Page 366: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Automation Client/Server (OLE)

Для решения этой задачи в таблице Excel можно создать макрос(Сервис | Макрос | Макросы...), который будет запускать требуемуюинформационную базу 1С:Предприятия, используя технологиюAutomation, переносить в нее данные и открывать формы созданныхэлементов справочника номенклатуры для редактирования вручную:

Этот пример представлен на языке MS Visual Basic. Сначалавыполняется создание и запуск приложения 1С:Предприятие, всправочнике «Номенклатура» создается новая группа ****** Экспорт изExcel ******», в которую будут помещаться создаваемые элементы.Далее, в цикле обхода таблицы Excel для каждой строки создается новыйэлемент справочника «Номенклатура», заполняются его свойства, иформа элемента открывается модально для того, чтобы пользователь могвнести дополнительные изменения, записать новый элемент справочникаили отказаться от сохранения этого элемента.

365

Page 367: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Обмен данными

ф Как организовать работу удаленныхскладов?

В компании существует несколько территориально удаленныхскладов. Необходимо организовать работу всех подразделений компаниив распределенной базе данных.

При определении состава обмениваемых данных было приняторешение о том, что на каждый склад необходимо выгружать толькодокументы «Реализация товаров» (и все «сопутствующие» объекты). Накаждый из складов необходимо выгружать только «свои» документы.

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

Для реализации данного механизма используем возможностьсоздания распределенных информационных баз. Для созданияраспределенной И Б можно воспользоваться объектом конфигурацииПланОбмена.

Создадим план обмена «НаСклады». Определим у него реквизит«Склад» (тип СправочникСсылка.СкладыКомпании). С помощьюданного реквизита будем «отмечать» принадлежность узла плана обменак складу компании.

366

Page 368: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Обмен данным*

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

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

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

367

Page 369: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

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

Данный обработчик гарантирует, что если из подчиненной базы(складской) приходит измененный документ «Реализация товаров», тоэти изменения безоговорочно принимаются.

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

368

Page 370: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Обмен данным!

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

Предопределенный узел соответствует «текущей» базе, добавляя узлы(с указанием склада) определяем состав распределенной базы данных.

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

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

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

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

Определите у плана обмена реквизит «Не выгружать объекты» (типБулево) и разместите его в форме узла.

369

Page 371: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Поместите в модуль плана обмена следующий обработчик события:

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

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

370

Page 372: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Обмен данными

Как просмотреть объекты, для которыхзарегистрированы изменения?

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

Так как одним из параметров метода НачатьЗапись() являетсязначение типа ЗаписьХМЦ соответствующий объект приходитсясоздавать. Для того, чтобы не «связываться» с файлом используем методУстановитъСтроку(). Этим определяем, что результирующий XML-документ будет выводиться в строку при выполнении метода Закрыть().

В процедуре выполняем всю («почти») последовательность по записисообщения, с той лишь разницей, что обход завершается вызовом методаПрерватьЗапись() (в этом случае считается, что сообщение несформировано).

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

371

Page 373: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как организовать обмен данными междупроизвольными конфигурациями1С:Предприятие 8.0?

Требуется организовать возможность регулярной выгрузки документа«Реализация товаров» с загрузкой в базе-приемнике документа«Поступление товаров».

Для простоты будем считать, что структура «связанных»справочников и других объектов полностью совпадает. В базах данныхучастников обмена используются «единые» справочники.

Базу, из которой производится выгрузка «Реализации товаров»,назовем «Оптовик». Базу, в которую производится загрузка«Поступления товаров», назовем «Розничная точка».

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

В обеих конфигурациях создадим по плану обмена «Поставка». Воптовой базе у созданного плана обмена отметим регистрацию длядокумента «Реализация товаров» и подберем все связанные объекты. Врозничной базе определим регистрацию изменений для документа«Поступление товаров» и также подберем все связанные.

В плане обмена оптовой базы у предопределенного узла запишем код«Опт», и создадим узел с кодом «Marl». В розничной базе определим всенаоборот.

372

Page 374: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Обмен данными

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

373

Page 375: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Выгрузка осуществляется в узел с кодом «Marl» (правильнееговорить, что будем выгружать данные, отмеченные как измененные дляданного узла). Далее по тексту процедуры: получаем выборку объектов,обходим ее. При обходе проверяем тип значения (считается, что всеобъекты, которые могут попасть в выгрузку, имеют одинаковуюструктуру) и если объект это документ «Реализация товаров», то для еговыгрузки вызывается процедура «Выгрузка реализации». В противномслучае используется метод ЗаписатьХМ1_() (метод платформы,позволяющий выгружать «сложные» с точки зрения сериализациизначения в X ML-доку мент). Для выгрузки документа понадобиласьотдельная процедура ввиду того, что загрузка будет вестись в документ«Поступление товаров».

374

Page 376: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Обмен данными

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

Особенностью данной процедуры является выгрузка ссылки. Онавыгружается не как «ДокументСсылка.РеализацияТоваров», а как«Уникальный идентификатор». Это даст нам возможность при загрузкеопределить «такую же» ссылку у документа «Поступление товаров».

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

375

Page 377: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Данная процедура запускает процесс загрузки данных из файлаобмена. Перед чтением очередного узла X ML-доку мента проверяетсявозможность чтения значения из данного узла (функция«ВозможностьЧтения Данных»). Для чтения используется функция«ПрочитатьДанные». Перед записью проверяется необходимость этойзаписи (поведение комплекса в случае возникновения коллизий).

Функция проверяет возможность чтения значения из XML-документа.

В этой функции производиться проверка на тип считываемыхданных, если это «Document Object. ПередачаТовара», то для чтениязначения используется функция «ЧтениеРеализации()>>, в противном

376

Page 378: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Обмен данным1

случае (остальные значения) для чтения используется метод платформыПрочитатьХМЦ).

377

Page 379: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

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

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

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

378

Page 380: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Обмен данными

Как принудительно зарегистрироватьизменения объектов?

Необходимо ряд объектов (либо все) принудительно поместить втаблицу регистрации изменений плана обмена.

Для размещения всех объектов, у которых ведется регистрацияизменений, но только для одного узла плана обмена можно использоватьследующие строки:

Считается что существует узел плана обмена «НаСклады» с кодом«С1».

Если необходимо разместить объекты только определенного вида(например, все элементы справочника «Номенклатура»)

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

Фактически все из приведенных примеров отличаются толькозначением второго параметра метода ЗарегистрироватьИзменения().

379

Page 381: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

WEB-расширение

® Как в форме списка номенклатуры отменитьвсе установленные отборы?

Среди типов кнопок V8CornrnandButtonTyp6 объектаV8CommandPanel не предусмотрено типа кнопки для удаления всехотборов, установленных для объекта V8ListDataSource. Поэтомуотключение установленного отбора необходимо выполнятьпрограммными средствами.

Например, можно добавить новую кнопку «Отключить отбор» впункт «Действия» объекта V8CommandPanel:

Указав также, что это будет кнопка, выполняющая некоторуюпроизвольную команду (свойство CommandTyp© равно Custom), и

380

Page 382: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

WEB-расширение

задав имя выполняемой команды (свойство CommandName равно«ShowAll»).

После этого в обработчике события ItemCommand объектаV8Com ma nd Panel можно написать следующий код:

Сначала выполняется проверка выполняемой команды (имя командыдоступно через свойство CommandName второго параметра «е» этогособытия). Если это «наша» команда - организуется цикл обхода всехфильтров, установленных для источника данных - объектаV8ListDataSource (имя «listDS»), и для каждого из них сбрасываетсяфлаг использования. После этого вызывается обновление данных всамом списке - объекте V8GMd (имя «grid»):

381

Page 383: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как запретить перенос содержимого ячеек вформе списка расходных накладных?

Например, требуется выводить список расходных накладных такимобразом, чтобы текст в ячейках списка не переносился на следующуюстроку в случае, если он целиком не помещается в ячейке:

Для решения этой задачи можно воспользоваться событиемItemDataBound объекта V8Grid:

382

Page 384: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

WEB -расширение

Это событие вызывается для каждой строки выводимого списка.Следует организовать цикл обхода всех выводимых ячеек (коллекцияячеек доступна через свойства Item.Cells второго параметра «е» этогособытия). В цикле для каждой ячейки следует сбросить свойство Wrap.

В результате список расходных накладных будет иметь следующийвид:

383

Page 385: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как открыть список расходных накладных сотбором, установленным по определенномускладу?

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

Предполагается, что в модуле внешнего соединения определенаглобальная экспортная переменная «глТекущийПользователь», в которойхранится элемент справочника «Пользователи», соответствующийтекущему пользователю, работающему с информационной базой.

Кроме этого, в модуле внешнего соединения следует определитьэкспортную функцию, которая будет возвращать значение по умолчаниюуказанной настройки элемента справочника «Пользователи». Например:

384

Page 386: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

WEB-расширение

Тогда в обработчике события PageLoad страницы, являющейсясписком расходных накладных, необходимо разместить следующий код:

385

Page 387: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

При необходимости, следует добавить использование пространстваимен 1C.V8.Data:

Сначала открывается подключение к информационной базе(ListDataSource.Connection.Open()). Затем методом Get() объекта V8выполняется получение значения свойства «глТекущийПользователь»СОМ-соединения. Само СОМ-соединение передается вторымпараметром (ListDataSource.Connection.Connection), а имя нужногосвойства - третьим ("глТекущийПользователь"). После этого методомCall() объекта V8 выполняется вызов метода«ПолучитьЗначениеПоУ молчанию» СОМ-соединения. Само СОМ-соединение передается вторым параметром(ListDataSource.Connection.Connection), имя метода передается третьимпараметром ("ПолучитьЗначениеПоУмолчанию"). За ним следуетперечисление параметров вызываемого метода.

В результате в переменную «mainWH» будет возвращено значениесклада по умолчанию для текущего пользователя.

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

После выполнения перечисленных действий, подключение кинформационной базе закрывается.

386

Page 388: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

WEB-расширение

В результате, при открытии списка расходных накладных, в спискебудут отображены только те расходные накладные, значение свойства«Склад» которых совпадает со значением склада по умолчанию,установленным в настройках текущего пользователя:

387

Page 389: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Интеграция

Как добавить кнопку для ввода документа наосновании?

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

Для этого в коллекцию кнопок командной панели нужно добавитьновую кнопку и задать для нее следующие свойства:

В результате, при нажатии на кнопку будет вызван ввод новойрасходной накладной на основании текущей приходной накладной,отработает процедура Обработка заполнения (если она определена вмодуле объекта ДокументОбъект.РасходнаяНакладная) и формановой расходной накладной будет открыта для редактирования.

388

где «grid» - это имя объекта V8Grid, с которым связана команднаяпанель:

Page 390: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

?(), 56

ВыборкаИзРезультатаЗапроса, 95ДокументыМенеджер, 174, 196Массив, 33, 37, 39, 41СерииДиаграммы, 288Соответствие, 59СтрокаТаблицыЗначений, 71, 73, 187Структура, 52ТаблицаЗначений, 20ТочкиДиаграммы, 287

AddAuthentication() - методIV8ServerConnection, 320

Checked - свойствоV8Filter, 381

Connect() - методV8.Application, 363V8.COMConnector, 351

ConnectServer() - методV8.COMConnector, 320

CreateInfoBaseInfo() - методIV8ServerConnection, 320

Disconnect^) - методIV8ServerConnection, 320

389

Page 391: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

GetIBConnections() - методIV8ServerConnection, 320

ItemCommand - событиеV8CommandPanel, 381

ItemDataBound - событиеV8Grid, 382

Name - свойствоIlnfoBaselnfo, 320

N

Pow(), 31

R

Refresh() - методV8Grid, 381

иШПространстваИмен - свойствоТипДанныхХМЬ, 376

АвтоМаксимальноеЗначение - свойствоДиаграмма, 289

АвтоМинимальноеЗначение - свойствоДиаграмма, 289

АвтоОпределениеПолногоИнтервала - свойствоДиаграммаГанта, 293

АвтоСохранение - свойствоXBase, 331

АВТОУПОРЯДОЧИВАНИЕЯзык запросов, 251

390

Page 392: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

Адрес - свойствоИнтернетПочтовыйАдрес, 346, 348

АдресСервераРОРЗ - свойствоИнтернетПочтовыйПрофиль, 347

AnpecCepBepaSMTP - свойствоИнтернетПочтовыйПрофиль, 346

АутентификацияСтандартная - свойствоПользовательИнформационнойБазы, 315

БазовыйПериодКонец - свойствоРегистрРасчетаЗапись, 160

БазовыйПериодНачало - свойствоРегистрРасчетаЗапись, 160

БиблиотекаКартинок - свойствоГлобальный контекст, 194, 198

БиблиотекаСтилей - свойствоГлобальный контекст, 213

БизнесПроцесс - свойствоЗадачаОбъект, 168

В

вЯзык запросов, 44, 119, 131, 146, 165, 193, 242

В ИЕРАРХИИЯзык запросов, 151, 233, 252

ВвестиЗначениеО - методГлобальный контекст, 23, 252, 301

ВГраница() - методМассив, 39

ВерсияОС - свойствоСистемнаяИнформация, 314

ВерсияПриложения - свойствоСистемнаяИнформация, 314

Верх - свойствоОбластьЯчеекТабличногоДокумента, 272РисунокТабличногоДокумента, 280

ВерхнийКолонтитул - свойствоТабличныйДокумент, 273

Видимость - свойствоСлойГеографическойСхемы, 302, 303ТочечныйОбъектГеографическойСхемы, 302, 304

391

Page 393: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ВидПодписей - свойствоДиаграмма, 287

ВидРасчета - свойствоРегистрРасчетаЗапись, 160

ВидСравнения - свойствоЭлементОтбора, 51, 177, 183

ВидыСубконто - свойствоПланСчетовСсылка, 148

Вложения - свойствоИнтернетПочтовоеСообщение, 346ПочтовоеСообщение, 345

Вложенный запросЯзык запросов, 93, 119, 165, 230, 233, 235, 241, 247

ВНУТРЕННЕЕ СОЕДИНЕНИЕЯзык запросов, 147, 226, 232, 235

ВозможностьЧтенияХМЦ) - методГлобальный контекст, 328, 376

ВремяОжидания - свойствоИнтернетПочтовыйПрофиль, 346, 347

Вставить() - методКнопкиКоманднойПанели, 198КоллекцияКолонокТаблицыЗначений, 73Соответствие, 61, 193Структура, 50, 51, 319, 384

ВстроенныеТаблицы - свойствоТабличныйДокумент, 263, 281, 282

ВторойФайл - свойствоСравнениеФайлов, 339

ВЫБОРЯзык запросов, 96, 229, 246

Выбран() - методРегистрСведенийМенеджерЗаписи, 133

ВЫБРАТЬЯзык запросов, 20, 24, 44, 45, 56, 60, 75, 85, 92, 93, 94, 95, 96, 97, 98, 99, 119,

121, 122, 129, 131, 132, 135, 146, 147, 150, 151, 156, 171, 193, 198, 212, 218,219, 220, 222, 223, 224, 226, 227, 229, 230, 231, 232, 233, 235, 237, 239, 241,244, 245, 246, 249, 251, 252, 253, 254, 255, 257, 261, 264, 269, 277, 281, 282,287,290,291,351,359

ВЫБРАТЬ *Язык запросов, 112, 125

ВЫБРАТЬ ПЕРВЫЕЯзык запросов, 76, 91, 145, 165

ВЫБРАТЬ РАЗЛИЧНЫЕЯзык запросов, 118, 165,216,217,225,242

392

Page 394: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ВЫБРАТЬ РАЗРЕШЕННЫЕЯзык запросов, 157

Выбрать() - методВыборкаИзРезультатаЗапроса, 61, 352ДиалогВыбораФайла, 102, 335, 336, 338, 342ДиалогВыбораЦвета, 211ДиалогВыбораШрифта, 211ДокументМенеджер, 111ИнтернетПочта, 347Почта, 345РезультатЗапроса, 46, 61, 85, 92, 95, 99, 133, 165, 193, 198, 204, 212, 240, 258,

270, 277, 278, 288, 352СправочникМенеджер, 86, 90, 91, 191, 321, 322

ВыбратьИерархически() - методСправочникМенеджер, 326, 327, 331

ВыбратьИзменения() - методПланыОбменаМенеджер, 371, 373

ВыбратьИзСписка() - методФорма, 197

ВыбратьПоРегистраторуО - методРегистрБухгалтерииМенеджер, 152

ВыбратьЭлемент() - методСписокЗначений, 302

Вывести() - методГеографическаяСхема, 301ПостроительОтчета, 265, 273ПостроительОтчетаАнализаДанных, 254, 256ТабличныйДокумент, 258, 260, 261, 270, 277, 278, 279

Выводить - свойствоКолонтитулТабличногоДокумента, 273

Выгрузить() - методРегистрСведенийНаборЗаписей, 125РезультатЗапроса, 20, 76, 130, 135, 262, 290

ВыгрузитьЖурналРегистрации() - методГлобальный контекст, 318, 319

ВыгрузитьЗначения() - методСписокЗначений, 40

ВыгрузитьКолонкуО - методДокументТабличнаяЧасть, 42РегистрСведенийНаборЗаписей, 45

Выделенные Даты - свойствоПолеКалендаря, 203

Выполнить() - методАнализДанных, 253, 255, 256

393

Page 395: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

Запрос, 20, 46, 61, 76, 85, 92, 95, 99, 118, 130, 131, 133, 135, 165, 193, 198,212, 240, 252, 253, 255, 256, 258, 262, 270, 277, 281, 287, 290, 352, 359

МодельПрогнозаПоискАссоциаций, 255МодельПрогнозаПоискПоследовательностей, 256ПостроительОтчета, 265

ВЫРАЗИТЬОЯзык запросов, 24, 242

Высота - свойствоРисунокТабличногоДокумента, 280

ВысотаТаблицы - свойствоТабличныйДокумент, 271

ГДЕЯзык запросов, 44, 46, 56, 85, 91,92, 93, 94, 95, 97,98, 99, 112, 118, 122, 129,

133, 135, 145, 146, 147, 157, 165, 212, 223, 233, 235, 237, 239, 242, 251, 252,269

ГлавныйИнтерфейс - свойствоГлобальный контекст, 214

ГлавныйСтиль - свойствоГлобальный контекст, 213

ДДанные - свойство

Расширение элементов управления, расположенных в форме, 205СводнаяТаблица, 283

ДанныеСтроки - свойствоОформлениеСтроки, 193

Дата - свойствоДокументОбъект, 111, 377ЗадачаОбъект, 168

Дата() - методГлобальный контекст, 18, 135

ДАТАВРЕМЯ()Язык запросов, 18, 129, 133

Добавить() - методXBase, 331ДокументТабличнаяЧасть, 107, 192, 377Записьг1РФайла, 338ЗначениеДиаграммыГанта, 293ИнтервалДиаграммыГанта, 295ИнтервалыФонаДиаграммыГанта, 300

394

Page 396: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ИнтернетПочтовыеАдреса, 346ИнтернетПочтовыеВложения, 346ИнтернетТекстыПочтовогоСообщения, 346КнопкиКоманднойПанели, 198КоллекцияИндексовХВаве, 331КоллекцияКолонокДереваЗначений, 76КоллекцияКолонокТаблицыЗначений, 74, 75, 187, 303КоллекцияПолейХВазе, 331КоллекцияПолейСводнойДиаграммы, 291КоллекцияПолейСводнойТаблицы, 283КоллекцияРисунковТабличногоДокумента, 280КоллекцияСтрокДереваЗначений, 76Массив, 23, 33, 38, 42, 43, 44, 46, 73, 94, 168, 187, 191, 319МеткиЭлементаШкалыВремени, 298ПланСчетовВидыСубконто, 148ПолосыИзмерительнойДиаграммы, 289ПочтовыеАдреса, 345ПочтовыеВложения, 345РегистрБухгалтерииНаборЗаписей, 152РегистрРасчетаНаборЗаписей, 160РегистрСведенийНаборЗаписей, 124, 127РолиПользователя, 315СерииСлояГеографическойСхемы, 303СписокЗначений, 131, 189, 193, 196, 197, 201, 212, 302, 319, 350СправочникТабличнаяЧасть, 87ТаблицаЗначений, 71, 72, 303, 304, 318ЭлементыШкалыВремени, 298

ДОБАВИТЬКДАТЕОЯзык запросов, 20

ДобавитьСтрокуО - методТекстовыйДокумент, 321

Документ - свойствоПолеНТМЬДокумента, 333

Документ сформирован - событиеПолеНТМЬДокумента, 333

Документы - свойствоГлобальный контекст, 348, 352, 363, 377, 379

Доступность - свойствоЭлементУ правленияОтбором, 190ЭлементУправленияПорядком, 190

Е

Единица - свойство

395

Page 397: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ЭлементШкалыВремени, 298ЕСТЬ NULL

Язык запросов, 96, 133, 157, 242, 246ECTbNULL()

Язык запросов, 231

Заголовок - свойствоДиалогВыбораФайла, 102, 335, 338, 342Надпись, 182

Загрузить() - методРегистрСведенийНаборЗаписей, 130, 135

ЗагрузитьЗначения() - методСписокЗначений, 40

ЗакончитьАвтогруппировкуСтрок() - методТабличныйДокумент, 260

ЗакончитьЗапись() - методЗаписьСообщенияОбмена, 373

ЗакончитьЧтениеО - методЧтениеСообщенияОбмена, 375

Закрыть() - методЗаписьХМЬ, 326, 327, 328, 371, 373ЗаписьТекста, 317, 322Форма, 120ЧтениеХМЦ 375Чтение21РФайла, 338

ЗакрытьФайл() - методXBase, 331

Записать() - методДокументОбъект, 106, 107, 109, 111, 115, 348ЗадачаОбъект, 168Запись21РФайла, 338ЗаписьТекста, 317ПланВидовХарактеристикОбъект, 148ПланСчетовОбъект, 148ПользовательИнформационнойБазы, 315РегистрБухгалтерииНаборЗаписей, 152РегистрРасчетаНаборЗаписей, 160РегистрСведенийМенеджерЗаписи, 133РегистрСведенийНаборЗаписей, 124, 126, 127, 128, 130, 135СправочникОбъект, 87, 89, 90, 99, 352ТекстовыйДокумент, 321, 328

3anncaTbXML() - метод

396

Page 398: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

Глобальный контекст, 328, 373, 374ЗаписатьАтрибут() - метод

ЗаписьХМЬ, 326, 327ЗаписатьВФорме() - метод

Расширение формы документа, 120ЗаписатьКомментарий() - метод

ЗаписьХМЬ, 326, 327ЗаписатьКонецЭлемента() - метод

ЗаписьХМЬ, 326, 327, 374ЗаписатьНачалоЭлемента() - метод

ЗаписьХМЬ, 326, 327, 374ЗаписатьОбъявлениеХМЬ() - метод

ЗаписьХМЬ, 326, 327ЗаписатьСтрокуО - метод

ЗаписьТекста, 322ЗаписатьТекст() - метод

ЗаписьХМЬ, 326, 327ЗаписьЖурналаРегистрации() - метод

Глобальный контекст, 312Заполнить() - метод

ПараметрыМакетаТабличногоДокумента, 258, 270, 277, 278ЗаполнитьЗначения() - метод

ТаблицаЗначений, 71ЗаполнитьЗначенияСвойств() - метод

Глобальный контекст, 72, 117, 212ЗаполнитьНастройки() - метод

ПостроительОтчета, 282ЗарегистрироватьИзменения() - метод

ПланыОбменаМенеджер, 379Значение - свойство

ЗначениеСерииСлояГеографическойСхемы, 302Индикатор, 204ОформлениеЯчейки, 186, 193ПараметрыПеретаскивания, 191, 192СерияСлояГеографическойСхемы, 303ТабличноеПоле, 262ТочечныйОбъектГеографическойСхемы, 304ЧтениеХМЬ, 329ЭлементОтбора, 51, 177, 183ЭлементСпискаЗначений, 196, 319, 349

ЗначениеПо - свойствоЭлементОтбора, 51

ЗначениеС - свойствоЭлементОтбора, 51

397

Page 399: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

иИгнорироватьПустоеПространство - свойство

СравнениеФайлов, 339ИерархическийПросмотр - свойство

Расширение табличного поля списка справочника, 180ИЕРАРХИЯ

Язык запросов, 262, 282, 291ИзвлечьВсе() - метод

ЧтениегГРФайла, 338ИзменениеЗарегистрировано() - метод

ПланыОбменаМенеджер, 368, 378ИзмененятьСпособОтображенияОкна - свойство

Форма, 173ИзменятьНастройку - свойство

КолонкаТабличногоПоля, 181ИзменятьНастройкуКолонок - свойство

ТабличноеПоле, 181ИзменятьПозицию - свойство

КолонкаТабличногоПоля, 181ИзменятьПозициюКолонок - свойство

ТабличноеПоле, 181ИМЕЮЩИЕ

Язык запросов, 219Имя - свойство

КГРФайл, 350КолонкаТаблицыЗначений, 43ОписаниеПараметраЗапроса, 252ПользовательИнформационнойБазы, 313, 315Файл, 336ЧтениеХМЬ, 329, 377ЭлементОтбора, 51

ИмяКомпьютера - свойствоСоединениеИнформационнойБазы, 318

ИмяПриложения - свойствоСоединениеИнформационнойБазы, 318

ИмяТипа - свойствоТипДанныхХМЬ, 376

Индекс() - методКнопкиКоманднойПанели, 198КоллекцияКолонокТаблицыЗначений, 73

Индексы - свойствоXBase, 331

ИнтервалыФона - свойство

398

Page 400: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ДиаграммаГанта, 300Использование - свойство

ЭлементОтбора, 51, 177, 182, 183ИспользованиеРабочейДаты - свойство

Глобальный контекст, 311ИспользоватьРежимПроведения - свойство

Расширение формы документа, 120ИсточникДанных - свойство

АнализДанных, 253, 255, 256Диаграмма, 290, 291МодельПрогнозаПоискАссоциаций, 255МодельПрогнозаПоискПоследовательностей, 256СводнаяТаблица, 263, 281, 283СлойГеографическойСхемы, 304

ИТОГИ КОЛИЧЕСТВО0Язык запросов, 239

ИТОГИ МАКСИМУМ()Язык запросов, 251

ИТОГИ ОБЩИЕЯзык запросов, 277, 282, 291, 359

ИТОГИ ПОЯзык запросов, 61, 94, 97, 217, 351

ИТОГИ СУММА()Язык запросов, 222, 233, 249, 258, 261, 277, 281, 282, 291

К

Картинка - свойствоКнопкаКоманднойПанели, 198ПолеКартинки, 176РисунокТабличногоДокумента, 279, 280

КартинкаЗаголовка - свойствоСтраницаПанели, 194

Каталог - свойствоДиалогВыбораФайла, 335

КлючУникальности - свойствоФорма, 180

КнопкаОткрытия - свойствоПолеВвода, 187

КнопкаСпискаВыбора - свойствоПолеВвода, 189

Кнопки - свойствоКнопкаКоманднойПанели, 198КоманднаяПанель, 198

399

Page 401: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

КОГДАЯзык запросов, 96

Код - свойствоСправочникВыборка, 321, 331СправочникОбъект, 89, 90СправочникСсылка, 352

КОЛИЧЕСТВОЯзык запросов, 122

КОЛИЧЕСТВО РАЗЛИЧНЫЕЯзык запросов, 122

КОЛИЧЕСТВО!)Язык запросов, 237

Количество!) - методВыборкаИзРезультатаЗапроса, 240КоллекцияКолонокРезультатаЗапроса, 95Массив, 37,41,348ОбъектыСлояГеографическойСхемы, 302СерииДиаграммы, 288ТочкиМаршрутаБизнесПроцесса, 165

КОЛИЧЕСТВО!*)Язык запросов, 92, 93

КоличествоСерий - свойствоДиаграмма, 287, 288

КоличествоСтрок() - методТекстовыйДокумент, 322

КоличествоТочек - свойствоДиаграмма, 287

Колонки - свойствоКолонкаТаблицыЗначений, 43СводнаяТаблица, 283ТаблицаЗначений, 187, 303, 318ТабличноеПоле, 181, 187, 189

Конец - свойствоИнтервалДиаграммыГанта, 293, 297ПолосаИзмерительнойДиаграммы, 289СвязьДиаграммыГанта, 297

КонецМесяца() - методГлобальный конеткст, 293

Константы - свойствоГлобальный контекст, 346, 347

КонструкторСОМОбъект, 320, 351, 356, 357, 359, 362, 363РТРСоединение, 349, 350НТТРСоединение, 350

400

Page 402: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

XBase, 331АнализДанных, 253, 254, 255ГрафическаяСхема, 212ДвоичныеДанные, 102, 345, 346Действие, 198ДиалогВыбораФайла, 102, 335, 336, 338, 342ДиалогВыбораЦвета, 211ДиалогВыбораШрифта, 211ЗаписьХМЬ, 326, 327, 328, 371, 373Записьг1РФайла, 338ЗаписьТекста, 317, 322Запрос, 20,44,45, 56, 60, 75, 85, 91,92,95, 97, 99, 112, 118, 129, 131, 132,

135, 165, 193, 198, 212, 252, 253, 254, 255, 257, 261, 269, 277, 281, 287, 290,291,351,359

ИнтернетПочта, 346, 347ИнтернетПочтовоеСообщение, 346ИнтернетПочтовыйПрофиль, 346, 347Картинка, 102, 279КвалификаторыСтроки, 74КвалификаторыЧисла, 75Массив, 23, 32, 33, 38, 43, 44, 46, 47, 57, 64, 72, 94, 187, 191, 319ОписаниеТипов, 23, 74, 75, 148, 187, 303ПостроительОтчета, 264, 282ПостроительОтчетаАнализаДанных, 253Почта, 345ПочтовоеСообщение, 345СистемнаяИнформация, 314Соответствие, 61, 193СочетаниеКлавиш, 200СписокЗначений, 40, 131, 189, 193, 196, 197, 302СравнениеФайлов, 339Структура, 50, 51, 53, 54, 61, 115, 319, 384ТабличныйДокумент, 254, 255, 270, 279ТекстовыйДокумент, 321, 322, 328УникальныйИдентификатор, 174, 377Файл, 336, 350ХранилищеЗначения, 102ЧтениеХМЬ, 328, 329, 3754TeHHeZH^amia, 338ЧтениеТекста, 323

лЛево - свойство

401

Page 403: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

РисунокТабличногоДокумента, 280ЛЕВОЕ СОЕДИНЕНИЕ

Язык запросов, 157, 227, 233, 242, 247, 251

мМакет - свойство

ПостроительОтчета, 262, 265, 272, 274ПостроительОтчетаАнализаДанных, 254

МакетОформления - свойствоПостроительОтчета, 276СводнаяТаблица, 283

МаксимальноеЗначение - свойствоДиаграмма, 289Индикатор, 204

МАКСИМУМЯзык запросов, 247

МАКСИМУМ()Язык запросов, 235

МаксимумСерий - свойствоДиаграмма, 287

МаксимумСерийКоличество - свойствоДиаграмма, 287

Массив, 32МЕЖДУ

Язык запросов, 269Метаданные - свойство

Глобальный контекст, 176, 189, 314, 379Метаданные() - метод

ДокументОбъект, 174, 273ДокументСсылка, 201

Метки - свойствоЭлементШкалыВремени, 298

МинимальноеЗначение - свойствоДиаграмма, 289

МножественныйВыбор - свойствоДиалогВыбораФайла, 102, 335

МонопольныйРежим() - методГлобальный контекст, 312

нНаименование - свойство

ЗадачаОбъект, 168

402

Page 404: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ПланВидовХарактеристикОбъект, 148ПочтовоеВложение, 345СправочникВыборка, 321, 331СправочникОбъект, 89, 90

Найти() - методГлобальный контекст, 322КнопкиКоманднойПанели, 198КоллекцияКолонокТаблицыЗначений, 43, 72, 187КоллекцияСтрокДереваЗначений, 77КолонкиАнализаДанных, 256КритерийОтбораМенеджер, 170ПланСчетовВидыСубконто, 148

НайтиПараметры() - методЗапрос, 252

НайтиПоКодуО - методПланОбменаМенеджер, 371, 373, 378, 379ПланСчетовМенеджер, 148СправочникМенеджер, 89, 90, 352

НайтиПоНаименованиюО - методПланВидовХарактеристикМенеджэр, 384ПланВидовХарактристикМенеджер, 148СправочникМенеджер, 182

НайтиПоНомеруО - методДокументМенеджер, 379

НайтиСтроки() - методДокументТабличнаяЧасть, 53, 115

НайтиТекст() - методТабличный Документ, 265, 274

НайтиФайлы() - методРТРСоединение, 350Глобальный контекст, 336, 337, 340

НастройкаКолонок - свойствоАнализДанных, 256

НастройкаОтбора - свойствоРасширение табличного поля списка справочника, 190

НастройкаПорядка - свойствоРасширение табличного поля списка справочника, 190

Начало - свойствоИнтервалДиаграммыГанта, 293, 297ПолосаИзмерительнойДиаграммы, 289СвязьДиаграммыГанта, 297

Начало выбора - событиеПолеВвода, 178

Начало перетаскивания - событие

403

Page 405: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ТабличноеПоле, 190НачалоДня() - метод

Глобальный контекст, 19, 297НачалоМесяцаО - метод

Глобальный контекст, 293НачалоНедели() - метод

Глобальный контекст, 300НачалоСеанса - свойство

СоединениеИнформационнойБазы, 318НачальнаяСтраница - свойство

КолонтитулТабличногоДокумента, 273НачатьАвтогруппировкуСтрок() - метод

ТабличныйДокумент, 260НачатьЗапись() - метод

ЗаписьСообщенияОбмена, 371, 373НачатьЧтение() - метод

ЧтениеСообщенияОбмена, 375Низ - свойство

ОбластьЯчеекТабличногоДокумента, 272НомерСоединения - свойство

СоединениеИнформационнойБазы, 318НомерСообщения - свойство

ЗаписьСообщенияОбмена, 371, 373ЧтениеСообщенияОбмена, 375

оОбласти - свойство

ТабличныйДокумент, 272Область() - метод

ТабличныйДокумент, 265, 270, 271, 272, 274ОбластьЗаголовка - свойство

Диаграмма, 287, 291ДиаграммаГанта, 293

ОбластьПечати - свойствоТабличныйДокумент, 271

ОбластьПостроения - свойствоДиаграммаГанта, 298

Обновление - свойствоГеографическаяСхема, 302, 303Диаграмма, 287, 288

Обработка выбора - событиеФорма, 100

Обработка интерактивной активации - событие

404

Page 406: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ТочкаМаршрутаБизнесПроцессаСсылка, 164, 166Обработка проведения - событие

ДокументОбъект, 152Обход записей

XBase, 331РегистрНаборЗаписей, 112, 113РегистрСведенийНаборЗаписей, 125

Обход строкДокументТабличнаяЧасть, 116, 117, 374ТаблицаЗначений, 72, 73, 123, 160, 187Текстовый Документ, 322

Обход элементовFilter-Collection, 381ВыборкаДанных, 371, 373ВыборкаИзРезультатаЗапроса, 46, 61, 85, 92, 99, 133, 165, 193, 198, 204, 212,

270, 288, 352ДокументВыборка, 111ИнтервалДиаграммыГанта, 297Кол лекцияВыде ленных Дат, 203КоллекцияКолонокТаблицыЗначений, 72Массив, 37, 38, 42, 73, 94, 115, 170, 192, 313, 318, 336, 340, 345, 348, 350ОбъектыСлояГеографическойСхемы, 302, 304ОписаниеПараметровЗапроса, 252Отбор, 51, 182ОформленияСтрок, 186, 193ПочтовыеВложения, 345РегистрБухгалтерииНаборЗаписей, 152РегистрБухгалтерииСубконто, 152РолиПользователя, 313СписокЗначений, 196, 214, 319, 349СправочникВыборка, 86, 91, 191, 321, 322, 326, 327, 331Структура, 56

ОБЪЕДИНИТЬЯзык запросов, 225, 230

ОБЪЕДИНИТЬ ВСЕЯзык запросов, 75, 93, 156, 245, 249

ОбъединитьФайлы() - методГлобальный контекст, 338

Объекты - свойствоСлойГеографическойСхемы, 302

Окончание ввода текста - событиеПолеВвода, 197

Окр() - методГлобальный контекст, 348

405

Page 407: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ОперативнаяПамять - свойствоСистемнаяИнформация, 314

Ориентация - свойствоИндикатор, 204

ОриентацияСтраницы - свойствоТабличный Документ, 273

ОсновнойИнтерфейс - свойствоПользовательИнформационнойБазы, 213, 315

Отбор - свойствоДокументСписок, 177, 182ЖурналДокументовСписок, 176СправочникСписок, 177, 183

ОтключитьОбработчикОжиданияО - методГлобальный контекст, 215

Отключиться() - методИнтернетПочта, 346, 348Почта, 345

Открыть() - методФорма, 100, 104, 117, 164, 172, 173, 174, 175, 178, 196

ОткрытьМодально() - методФорма, 100, 363

ОткрытьФайл() - методXBase, 331ЗаписьХМЬ, 326, 373ЧтениеХМЬ, 329, 375

ОтметитьЭлементы() - методСписокЗначений, 196

ОтображатьЛинии - свойствоСводнаяТаблица, 283

ОтображатьПериодическиеМетки - свойствоЭлементШкалыВремени, 298

ОтображатьПоля - свойствоСводнаяТаблица, 263

ОтображатьПроценты - свойствоИндикатор, 204

Отображение - свойствоКнопкаКоманднойПанели, 198

Отправитель - свойствоИнтернетПочтовоеСообщение, 348

Отправитель - свойствоИнтернетПочтовоеСообщение, 346ЧтениеСообщенияОбмена, 375

ОформитьМакет() - методПостроительОтчета, 276

406

Page 408: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

Очистить() - методДокументТабличнаяЧасть, 377КоллекцияКолонокДереваЗначений, 76Массив, 37Соответствие, 61Структура, 51ТабличныйДокумент, 258, 265, 277

Очистка - событиеПолеВвода, 202

пПараметр - свойство

ОбластьЯчеекТабличногоДокумента, 265, 275ПараметрОтборПоВладельцу - свойство

Расширение формы списка справочника, 175ПараметрРасшифровки - свойство

ОбластьЯчеекТабличногоДокумента, 265ПараметрТекущаяСтрока - свойство

Расширение формы списка документов, 174Параметры - свойство

ТабличныйДокумент, 258, 270, 277, 278ПараметрыСеанса - свойство

Глобальный контекст, 163Пароль - свойство

ИнтернетПочтовыйПрофиль, 346, 347ПользовательИнформационнойБазы, 315

ПарольБМТР - свойствоИнтернетПочтовыйПрофиль, 346

ПарольУстановлен - свойствоПользовательИнформационнойБазы, 313

ПервыйФайл - свойствоСравнениеФайлов, 339

Перед выполнением - событиеБизнесПроцессОбъект, 163

Перед созданием задач - событиеТочкаМаршрутаБизнесПроцессаСсылка, 168

Перейти() - методПолеНТМЬДокумента, 333

ПереключитьИнтерфейс() - методКоллекцияЭлементовУправленияИнтерфейсами, 214

ПереместитьФайл() - методГлобальный контекст, 337

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

407

Page 409: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ТабличноеПоле, 192Перечисления - свойство

Глобальный контекст, 183, 244Период - свойство

РегистрБухгалетрииЗапись, 152ПериодДействияКонец - свойство

РегистрРасчетаЗапись, 160ПериодДействияНачало - свойство

РегистрРасчетаЗапись, 160ПериодРегистрации - свойство

РегистрРасчетаЗапись, 160ПланыВидовХарактеристик - свойство

Глобальный контекст, 384ПланыОбмена - свойство

Глобальный контекст, 371, 373, 375, 378, 379ПовторятьПриПечатиСтроки - свойство

ТабличныйДокумент, 272ПоддержкаМасштаба - свойство

ПолеГеографическойСхемы, 301ПодключитьОбработчикОжидания() - метод

Глобальный контекст, 215, 340ПодключитьсяО - метод

ИнтернетПочта, 346, 347Почта, 345

ПОДОБНОЯзык запросов, 97, 129, 133

Показать() - методТабличныйДокумент, 254, 256, 262, 270, 279

ПоказатьРазличия() - методСравнениеФайлов, 339

ПоказатьУровеньГруппировокСтрок() - методТабличныйДокумент, 260

ПоказыватьВСпискеВыбора - свойствоПользовательИнформационнойБазы, 315

ПОЛНОЕ СОЕДИНЕНИЕЯзык запросов, 229

ПолноеИмя - свойствоБТРФайл, 349ПользовательИнформационнойБазы, 313, 315Файл, 336

ПолноеИмяФайла - свойствоДиалогВыбораФайла, 102, 335, 336, 338, 342

ПоложениеОкна - свойствоФорма, 173

408

Page 410: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ПолосыИзмерительнойДиаграммы - свойствоДиаграмма, 289

Получатели - свойствоИнтернетПочтовоеСообщение, 346, 348ПочтовоеСообщение, 345

Получить() - методРТРСоединение, 349НТТРСоединение, 350ВыборкаДанных, 371, 373КонстантаМенеджер, 346, 347Массив, 33ОболочкаАсйуеВоситегИ:, 344ОбъектыСлояГеографическойСхемы, 302РегистрСведенийМенеджер, 384Соответствие, 59, 193ХранилищеЗначения, 22, 176

ПолучитьСОМОбъект() - методГлобальный контекст, 355

ПолучитьХМЬТип() - методГлобальный контекст, 376

ПолучитьВремяИзменения() - методФайл, 336

ПолучитьГраницы() - методПоследовательностьМенеджер, 123

ПолучитьДополнениеО - методРегистрРасчетаНаборЗаписей, 160

ПолучитьЗначениеО - методДиаграммаГанта, 293, 295, 296СлойГеографическойСхемы, 302, 304

ПолучитьМакет() - методОбработкаОбъект, 344ОтчетОбъект, 258, 270, 276, 277

ПолучитьМакетОформления() - методГлобальный контекст, 276, 283

ПолучитьНевидимость() - методФайл, 336

ПолучитьОбласть() - методТабличныйДокумент, 258, 270, 277, 279, 280

ПолучитьОбщийМакет() - методГлобальный контекст, 301

ПолучитьОбъект() - методДокумент, 111ДокументСсылка, 106, 107, 115, 328, 377ПланСчетовСсылка, 148

409

Page 411: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

СправочникСсылка, 87, 99ПолучитьПользователей() - метод

ПользователиИнформационнойБазы, 313, 319ПолучитьПоследнее() - метод

РегистрСведенийМенеджер, 54ПолучитьСоединенияИнформационнойБазы() - метод

Глобальный контекст, 318ПолучитьСсылкуО - метод

ДокументМенеджер, 377ПолучитьСтрокуО - метод

Текстовый Документ, 322ПолучитьТекст() - метод

Текстовый Доку мент, 328ПолучитьТолькоЧтениеО - метод

Файл, 336ПолучитьФормуО - метод

ДокументОбъект, 117, 363ДокументСсылка, 172МенеджерВнешнихОбработок, 172ОтчетМенеджер, 173

ПолучитьФормуВыбораО - методСправочникМенеджер, 100, 178

ПолучитьФормуНовогоДокумента() - методДокументМенеджер, 104

ПолучитьФормуСписка() - методДокументМенеджер, 174, 196СправочникМенеджер, 175

ПользователиИнформационнойБазы - свойствоГлобальный контекст, 213, 313, 315, 319

Пользователь - свойствоИнтернетПочтовыйПрофиль, 346, 347СоединениеИнформационнойБазы, 318

ПользовательЗМТР - свойствоИнтернетПочтовыйПрофиль, 346

Поля - свойствоXBase, 331

Пометка - свойствоЭлементСпискаЗначений, 196, 214, 319, 349

ПометкаУдаления - свойствоДокументОбъект, 377

ПортРОРЗ - свойствоИнтернетПочтовыйПрофиль, 347

nopTSMTP - свойствоИнтернетПочтовыйПрофиль, 346

410

Page 412: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

Послать() - методИнтернетПочта, 346Почта, 345

Представление - свойствоЭлементОтбора, 51ЭлементСпискаЗначений, 319

ПредставлениеПриложения() - методГлобальный контекст, 318

Предупреждение() - методГлобальный контекст, 24, 311, 314, 351, 363

ПрерватьЗапись() - методЗаписьСообщенияОбмена, 371

При выполнении - событиеТочкаМаршрутаБизнесПроцессаСсылка, 165, 166

При изменении - событиеПолеВвода, 185, 201, 333

При начале работы системы - событиеМодуль приложения, 215

При окончании редактирования интервала - событиеДиаграммаГанта, 296

При открытии - событиеФорма, 177, 189, 195, 340

При отправке данных подчиненному - событиеПланОбменаОбъект, 367, 370

При получении данных - событиеТабличноеПоле, 186, 193

При получении данных от главного - событиеПланОбменаОбъект, 368

При получении данных от подчиненного - событиеПланОбменаОбъект, 368

При создании задач - событиеТочкаМаршрутаБизнесПроцессаСсылка, 166

Примечание - свойствоОбластьЯчеекТабличногоДокумента, 270

Проверка перетаскивания - событиеТабличноеПоле, 191

Проверка условия - событиеТочкаМаршрутаБизнесПроцессаСсылка, 165

ПроверкаОтображенияНовойСтроки - свойствоРасширение табличного поля списка справочника, 184

Процессор - свойствоСистемнаяИнформация, 314

Прочитать() - методГеографическаяСхема, 301

411

Page 413: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ГрафическаяСхема, 212РегистрНаборЗаписей, 112, 113РегистрСведенийМенеджерЗаписи, 133РегистрСведенийНаборЗаписей, 45, 125ТекстовыйДокумент, 322, 328ЧтениеХМЬ, 329, 377

ПрочитатьХМЬ() - методГлобальный контекст, 328, 376, 377

ПрочитатьАтрибут() - методЧтениеХМЬ, 329

ПрочитатьСтрокуО - методЧтениеТекста, 323

Пустая() - методДокументСсылка, 201, 379ПланВидовХарактеристикСсылка, 148ПланСчетовСсылка, 148СправочникСсылка, 41, 52, 89, 90, 94, 175, 178, 352

ПустаяСсылка() - методДокументМенеджер, 75СправочникМенеджер, 21, 95, 118, 166, 238

Пустой() - методРезультатЗапроса, 95

Путь - свойствоФайл, 336

ПутьКДанным - свойствоЭлементОтбора, 51

РабочаяДата - свойствоГлобальный контекст, 111, 311

РазделитьФайл() - методГлобальный контекст, 337

РазмерО - методФайл, 336

РазмерКартинки - свойствоРисунокТабличногоДокумента, 280

Расширение - свойствоФайл, 336

Редактирование - свойствоЗначениеДиаграммыГанта, 296

РежимВыделения - свойствоПолеКалендаря, 203

Ресурсы - свойство

412

Page 414: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

Диаграмма, 291Рисунки - свойство

ТабличныйДокумент, 279, 280Родитель - свойство

СправочникОбъект, 89, 90, 99СправочникСсылка, 94

Роли - свойствоПользовательИнформационнойБазы, 313, 315

Свойство() - методСтруктура, 52

СГРУППИРОВАТЬ ПОЯзык запросов, 218, 219, 224, 230, 235, 237, 242, 247, 258, 281, 282, 287, 291

Серии - свойствоДиаграмма, 288, 291СлойГеографическойСхемы, 302, 303

Символ() - методГлобальный контекст, 321, 322

Системные наборы значений\¥еЬЦвета, 50, 186, 289, 293, 295, 297Символы, 24, 314, 317, 336, 348

Системные перечисленияВариантПоложенияОкна, 173ВариантПроверкиОтображенияНовойСтроки, 184ВариантСпособаОтображенияОкна, 173ВидПодписейКДиаграмме, 287ВидСравнения, 177, 183ДопустимаяДлина, 74ИзменениеСпособаОтображенияОкна, 173ИспользованиеРежимаПроведения, 120КодировкаТекста, 322, 323МаксимумСерий, 287МетодСжатияг1Р, 338НаправлениеСортировки, 40ОбходРезультатаЗапроса, 61, 258, 262, 277, 278, 352ОриентацияСтраницы, 273ОтображениеКнопкиКоманднойПанели, 198ОтправкаЭлементаДанных, 367, 370ПолучениеЭлементаДанных, 368РазмерКартинки, 280РежимВосстановленияПутейФайлов71Р, 338РежимВыделенияДаты, 203

413

Page 415: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

РежимДиалогаВыбораФайла, 102, 335, 336, 338, 342РежимЗаписиДокумента, 106, 109, 120, 352РежимОбработкиПодкаталoroBZIP, 338РежимОтображенияГеографическойСхемы, 301РежимРабочейДаты, 311РежимСохраненияПутей71Р, 338СпособСравненияФайлов, 339СтандартноеОформление, 276, 283ТипДиаграммы, 289ТипЕдиницыШкалыВремени, 298ТипКнопкиКоманднойПанели, 198ТипКолонкиАнализаДанныхГТоискПоследовательносгей, 256ТипОрганизацииИсточникаДанныхГеографическойСхемы, 304ТипОтображенияЛинийСводнойТаблицы, 283ТипОтображенияСерииСлояГеографическойСхемы, 302, 304ТипРисункаТабличногоДокумента, 280ТипУзлаХМЬ, 329УровеньЖурналаРегистрации, 312УровеньСжатия21Р, 338ЧастиДаты, 75

Скопировать() - методДокументОбъект, 111ТаблицаЗначений, 72

Следующая() - методXBase, 331

Следующий() - методВыборкаДанных, 371, 373ВыборкаИзРезультатаЗапроса, 61, 85, 92, 95, 99, 133, 165, 193, 198, 204, 212,

258, 270, 277, 278, 288, 352ДокументВыборка, 111СправочникВыборка, 86, 90, 91, 191, 321, 322, 326, 327, 331

Слои - свойствоГеографическаяСхема, 302, 303, 304

Создать() - методМенеджерВнешнихОбработок, 169

СоздатьГруппуО - методСправочникМенеджер, 89

СоздатьДокумент() - методДокументМенеджер, 104, 117, 348, 352, 363, 377

СоздатьЗадачуО - методЗадачаМенеджер, 168

СоздатьЗаписьСообщения() - методПланыОбменаМенеджер, 371, 373

СоздатьИндексныйФайл() - метод

414

Page 416: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

XBase, 331СоздатьКолонки() - метод

ТабличноеПоле, 77, 187, 205, 255, 256, 262, 304, 318СоздатьМенеджерЗаписи() - метод

РегистрСве денийМене джер ,133СоздатьМодельПрогноза() - метод

РезультатАнализаДанныхПоискАссоциаций, 255РезультатАнализаДанныхПоискПоследовательностей, 256

СоздатьНаборЗаписей() - методРегистрСведенийМенеджер, 45, 125, 126, 127, 128, 130, 135РегистрСве денийНаборЗаписей, 124

СоздатьПользователя() - методПользователиИнформационнойБазы, 315

СоздатьФайл()- мтодXBase, 331

СоздатьЧтениеСообщения() - методПланыОбменаМенеджер, 375

СоздатьЭлемент() - методПланВидовХарактеристикМенеджер, 148СправочникМенеджер, 89, 90, 352

СокрЛП(), 56Сообщить() - метод

Глобальный контекст, 18, 19, 22, 25, 26, 27, 59, 89, 95, 170, 177, 182, 203,311, 312, 322, 323, 329, 331, 336, 337, 340, 344, 345, 357, 359, 371

СортироватьПоЗначению() - методСписокЗначений, 40

СортироватьПоПредставлению() - методСписокЗначений, 302

СочетаниеКлавиш - свойствоКнопкаКоманднойПанели, 200

СписокВыбора - свойствоПолеВвода, 201ПолеВыбора, 189

СпособОтображенияОкна - свойствоФорма, 173

СпособСравнения - свойствоСравнениеФайлов, 339

Справочники - свойствоГлобальный контекст, 321, 322, 326, 327, 331, 352

Сред() - методГлобальный контекст, 322

ССЫЛКАЯзык запросов, 235

Ссылка - свойство

415

Page 417: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ДокументОбъект, 174СправочникВыборка, 191

СтильОтображения - свойствоИндикатор, 204

Сторно - свойствоРегистрРасчетаЗапись, 160

Страницы - свойствоПанель, 194, 195

СтрЗаменить() - методГлобальный контекст, 200, 321, 322

Строка() - методГлобальный контекст, 182, 321, 345

Строки - свойствоСводная Таблица, 283

Структура, 47СубконтоДт - свойство

РегистрБухгалетрииЗапись, 152СубконтоКт - свойство

РегистрБухгалетрииЗапись, 152СУММА()

Язык запросов, 93, 218, 219, 224, 230, 241, 257, 281, 282, 287, 291СчетДт - свойство

РегистрБухгалетрииЗапись, 152СчетКт - свойство

РегистрБухгалетрииЗапись, 152

Текст - свойствоЗапрос, 44, 45, 56, 60, 75, 85, 91,92, 99, 112, 118, 121, 129, 131, 132, 135, 165,

244, 253, 254, 255, 257, 261, 269, 277, 281, 287, 351, 359ИнтервалДиаграммыГанта, 293ИнтернетТекстПочтовогоСообщения, 348МеткаЭлементаШкалыВремени, 298ОбластьЗаголовка, 287, 291ОбластьЗаголовкаДиаграммыГанта, 293ПостроительОтчета, 264, 282ПочтовоеСообщение, 345РисунокТабличногоДокумента, 270Серия Диаграммы, 288ТочкаДиаграммы, 287

ТекстНевыбраннойКартинки - свойствоПолеКартинки, 209

ТекстСлева - свойство

416

Page 418: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

КолонтитулТабличногоДокумента, 273ТекстСправа - свойство

КолонтитулТабличногоДокумента, 273Тексты - свойство

ИнтернетПочтовоеСообщение, 346, 348ТекущаяДата() - метод

Глобальный контекст, 25, 163, 293ТекущаяСтраница - свойство

Панель, 195ТекущаяСтрока - свойство

ТабличноеПоле, 77, 116, 182, 185ТекущиеДанные - свойство

ТабличноеПоле, 116ТекущийИндекс - свойство

XBase, 331ТекущийПользователь() - метод

МенеджерПользователейИнформационнойБазы, 213ТекущийРодитель - свойство

ТабличноеПоле, 180Тема - свойство

ИнтернетПочтовоеСообщение, 346, 348ПочтовоеСообщение, 345

Тип() - методГлобальный контекст, 20, 22, 23, 187, 192, 253, 254, 255, 256, 367, 368, 370,

373, 378ТипАнализа - свойство

АнализДанных, 253, 254, 255ПостроительОтчетаАнализаДанных, 254, 256

ТипДиаграммы - свойствоДиаграмма, 289

ТипЗначения - свойствоОписаниеПараметраЗапроса, 252ПланВидовХарактеристикОбъект, 148ЭлементОтбора, 51

ТипЗнч() - методГлобальный контекст, 20, 22, 192, 348, 367, 368, 370, 373, 378

ТипКолонки - свойствоКолонкаАнализаДанных, 256

ТипОрганизацииИсточникаДанных - свойствоСлойГеографическойСхемы, 304

ТипОтображения - свойствоСерияСлояГеографическойСхемы, 302, 304

ТипУзла - свойствоЧтениеХМЬ, 329

417

Page 419: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ТОЛЬКО ИЕРАРХИЯЯзык запросов, 94, 97, 217, 233

ТочкаМаршрута - свойствоЗадачаОбъект, 168

Точки - свойствоДиаграмма, 291

Удалить() - методДокументТабличнаяЧасть, 115КнопкиКоманднойПанели, 198КоллекцияКолонокТаблицыЗначений, 73Массив, 37, 41Структура, 52

УдалитьРегистрациюИзменений() - методПланыОбменаМенеджер, 375

УдалитьФайлы() - методГлобальный контекст, 337

УПОРЯДОЧИТЬ ПОЯзык запросов, 145, 150, 151, 165, 232, 237, 239, 251, 253, 254, 265, 269, 359

Уровень() - методВыборкаИзРезультатаЗапроса, 260, 261

Установить() - методЭлементОтбора, 45, 124, 126, 127, 176, 183

УстановитьЗначение() - методДаиграмма, 288

УстановитьМонопольныйРежим() - методГлобальный контекст, 311,312

УстановитьНовыйНомерО - методДокументОбъект, 377

УстановитьПараметрО - методЗапрос, 20,44,46,56, 76, 85,91,92,95,97, 99, 112, 118, 121, 131, 135, 165,

193, 212, 244, 252, 253, 254, 256, 258, 262, 269, 277, 281, 290, 351, 359УстановитьПолныйИнтервал() - метод

ДиаграммаГанта, 293УстановитьПометкуУдаления() - метод

ДокументОбъект, 111УстановитьСерию() - метод

ДиаграммаГанта, 293УстановитьСсылкуНового() - метод

ДокументОбъект, 377УстановитьСтрокуО - метод

ЗаписьХМЬ, 327, 328, 371

418

Page 420: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

ЧтениеХМЬ, 328УстановитьСхемуО - метод

ПолеГрафическойСхемы, 212УстановитьТекст() - метод

ТекстовыйДокумент, 328УстановитьТочкуО - метод

ДиаграммаГанта, 293

ФФиксацияСверху - свойство

ТабличныйДокумент, 272Фильтр - свойство

ДиалогВыбораФайла, 102, 335, 338, 342Формат - свойство

ОбластьЯчеекТабличногоДокумента, 275ПолеВвода, 208

Формат() - методГлобальный контекст, 25

Цвет - свойствоДиалогВыбораЦвета, 211СвязьДиаграммыГанта, 295, 297СерияДиаграммыГанта, 293

ЦветЛинии - свойствоМеткаЭлементаШкалыВремени, 298

ЦветТекста - свойствоМеткаЭлементаШкалыВремени, 298

ЦветФона - свойствоОформлениеЯчейки, 186ПолосаИзмерительнойДиаграммы, 289

ЧислоПрописьюО - методГлобальный контекст, 26, 27

шШаг - свойство

Индикатор, 204

419

Page 421: Габец А.П. Гончаров Д.И. 1С Предприятие 8.0. Простые примеры разработки

Указатель

Ширина - свойствоРисунокТабличногоДокумента, 280

ШиринаТаблицы - свойствоТабличный Доку мент, 271

ШкалаВремени - свойствоОбластьПостроенияДиаграммыГанта, 298

Шрифт - свойствоДиалогВыбораШрифта, 211

ЭлементУправления - свойствоКолонкаТабличногоПоля, 187, 189

Элементы - свойствоШкалаВремени, 298

ЭлементыФормы - свойствоФорма, 181, 182, 184, 185, 187, 189, 190, 194, 195, 198, 201, 203, 204, 208,

209, 212, 258, 262, 263, 277, 281, 282, 287, 289, 290, 291, 293, 301, 302, 303,304,318,333,342

ЭтаФорма - свойствоФорма, 173

ЭтоГруппа - свойствоСправочникВыборка, 191, 326, 327СправочникСсылка, 89, 191

ЭтоНовый() - методСправочникОбъект, 195

ЭтоФайл() - методБТРФайл, 350

ЯЯзык - свойство

ПользовательИнформационнойБазы, 315Ячейки - свойство

ОформлениеСтроки, 186, 193

420