3. Табличный шаблон, в котором мы создаем, если это необходимо, шаблон
печатной формы данного объекта.
Упражнение 6. Самостоятельно создайте Форму списка для подбора элементов справочника Оборудование,которая будет содержать дерево групп, а в таблице атрибуты код и наименование.
Чтобы можно было установить вручную нужную ширину колонок многострочной части, следует сначала отключить режим автоматического определения ширины колонок (в 7.7 этот режим по умолчанию отключен). Автоматическое определение ширины колонок отключается в палитре свойств многострочной части документа, для этого нужно дважды щелкнуть мышью в многострочную часть. В палитре свойств следует щелкнуть мышью флажок Автоматическая настройка ширины колонок и нажать кнопку ОК, чтобы подтвердить произведенные изменения. После этого можно перетаскиванием вертикальных границ колонок табличной части установить для них желаемую Ширину. Для перетаскивания границ колонок необходимо поместить указатель Мыши над линией, разделяющей колонки в табличной части, чтобы курсор мыши принял соответствующую форму, затем нажать правую кнопу мыши и, не опуская ее, перетащить разделитель колонок в новое место.
70 1С:Предприятие. Практика программирования на платформе V7
Если все колонки не помещаются в видимой области табличной части, то, для прокрутки колонок по горизонтали, следует щелкать мышью в левую или правую стрелку горизонтальной полосы прокрутки у нижней границы табличной части.
Можно изменить порядок следования колонок, перетаскивая их в пределах табличной части. Для перетаскивания колонки её следует выделить, щелкнув мышью в ее заголовок, и переместить указатель мыши, при нажатой левой кнопке, в то место, где должна располагаться колонка, при этом выделенной, т.е. редактируемой, колонкой останется та же колонка по номеру позиции; например, была выделена 5-я колонка и перемещена в 3-ю позицию, но выделенной станет колонка в 5-ой позиции, то есть та, которая была 4-ой.
Упражнение 7. Создайте диалоговую Форму для элементов справочника Оборудование.
Редактирование формы в основном выполняется мышью. Основным приемом работы является перетаскивание. При перетаскивании щелкают левой кнопкой мыши в элемент, который нужно перетащить и, не отпуская левую кнопку, ведут указатель мыши к тому месту, куда перетаскивается элемент, а затем кнопка мыши отпускается. Все элементы диалога размещаются в пределах шаблона окна диалога. Также можно поместить элемент и вне шаблона, но тогда при работе с диалогом этот элемент будет невиден и недоступен. Сначала отодвинем вниз нижнюю границу диалога. Щелкните мышью в пустое серое пространство диалога (в любое место). При этом граница формы будет выделена пунктирной линией, на которой будут размещены маркеры. Эта линия показывает тот элемент диалога, над которым будут выполняться какие-либо действия. Для изменения вертикального размера диалога нужно перетащить мышью маркер на пунктирной линии обозначающей нижнюю границу диалога. При этом в нижней части диалога образуется пустое место. Теперь нужно перетащить ближе к нижней границе две кнопки: ОК и Закрыть. Кнопки можно перетащить по одной, а можно выделить их обе и перетащить две одновременно. Для выделения кнопок щелкните мышью од-ну кнопку, затем нажмите клавишу Shift и, не отпуская ее, щелкните мышью другую кнопку. Вокруг каждой кнопки будет нарисована синяя пунктирная линия с маркерами. Перетащить такую группу элементов можно, перетаскивая любой элемент. Выделять элементы диалога можно также, просто обводя их мышью - границу выделяемой области будет показывать тонкая пунктирная линия. Но таким образом можно выделять только элементы, расположенные рядом. Выделенные элементы можно отформатировать по шаблону. Для выбора
VIl. Справочники 71
шаблона, нажав клавишу Ctrl, щелкните левой кнопкой мыши нужный элемент формы диалога.
В форме элемента желательно увидеть, к какой группе справочника принадлежит данный элемент. Причем, элемент может находиться на верхнем (первом) уровне справочника и не иметь родительской группы. Создадим в форме реквизит с соответствующим текстом. Выберем в меню Вставить или в панели инструментов инструмент Текст и наметим курсором место в форме, куда мы поместим реквизит формы. Для этого нужно поместить курсор в левый верхний угол предполагаемой области формы диалога, в которую предполагается их поместить, нажать левую кнопку мыши, не отпуская ее, переместить курсор к правому нижнему углу предполагаемой области размещения реквизита, и отпустить кнопку мыши. Так как текст в реквизите мы будем выводить с помощью выражения на встроенном языке в поле Формула на закладке Дополнительные, то текст заголовка реквизита надо удалить.
72 1С:Предприятие. Практика программирования на платформе V7
Запишем выражение в поле Формула свойств текста, используя, оператор конкатенации строк:
Метод ?(Логич_выраж,Выраж1,Выраж2) возвращает значение первого выражения, если условие истинно, иначе - значение второго выражения.
Метод Выбран( ) возвращает флаг выбора элемента справочника; 1 - если элемент справочника выбран, О - если не выбран.
Шрифт отредактирован на закладке Шрифт текстового реквизита.
Создадим предопределенную процедуру ВводНового() в модуле формы элемента справочника, в которой будем вводить значение цены по группе справочника в реквизит элемента Цена по умолчанию. Форму элемента справочника мы открываем для просмотра и редактирования существующих записей справочника, а также для создания новых записей в справочнике.
Метод Уровень() возвращает номер уровня записанного в базу данных текущего элемента справочника.
В последнем случае во время работы в форме элемент ещё не записан, поэтому метод Уровень() вернет значение 0. Поэтому для определения принадлежности элемента группе справочника используем знакомый нам метод Выбран() для атрибута Родитель.
VII. Справочники 73_
Процедура ВводНового()
Если Родитель.Выбран()=1 Тогда
Цена=Родитель.ГрЦена; КонецЕсли;
КонецПроцедуры
Предопределенная процедура при интерактивном вводе нового элемента справочника
ВводНового(ПризнКопирования,ОбъектКопирования).
Параметры:ПризнКопирования - признак того, что объект введен копированием. Число: 1 - объект
введен копированием, 0 - просто новый объект. Данный признак может быть использован для анализа
необходимости инициализации реквизитов нового объекта.ОбъектКопирования - объект, который
был скопирован.
При копировании записей справочника копируются все реквизиты, кроме кода записи справочника. Отредактируем принудительно атрибут элемента Наименование, используя параметры предопределенной процедуры ВводНового() и метод ВвестиСтроку().
Метод ВвестиСтроку(Строка,Подсказка,ДлинаСтроки,Признак,Таймаут) Вызывает окно
интерактивного диалога для ввода строки. Возвращает:
1 - если в диалоге нажата кнопка ОК;
О - если нажата кнопка Отмена;
-1 - если закончилось время ожидания ответа.
Параметры: Строка - имя переменной, объявленной в модуле для приема вводимого значения;
Подсказка - текст заголовка окна диалога ввода; ДлинаСтроки - длина вводимой строки;
Признак - если 0 или опущен - ввод одной строки, если 1 - ввод многострочного текста с
Разделителями строк; Таймаут - число секунд времени ожидания ответа (если опущен илP 0, то без
ограничения).
Процедура ВводНового(признак,копируемый)
Если признак=1 Тогда
ВвестиСтроку(Наименование,”Введите наименование”,25);
КонецЕсли;
Если Родитель.Выбран()=1 Тогда Цена=Родитель.ГрЦена;
КонецЕсли; КонецПроцедуры
Запишем аналогичный алгоритм в форме списка справочника. В этом контексте свой список предопределенных процедур. Для ввода цены по Умолчанию используем предопределенную процедуру ПриРедактированииНовойСтроки(). Проверить операцию копирования в форме списка мы не можем.
Процедура ПриРедактированииНовойСтроки () Если Родитель.Выбран()=1 Тогда
Цена=Родитель.ГрЦена; КонецЕсли;
КонецПроцедуры
74 1С:Предприятив. Практика программирования на платформе V7
Упражнение 8. Создайте справочник Единицы. В окне редактирования справочника Единицы установите подчинение (в поле ввода Подчинен) справочнику Оборудование и создайте реквизит Коэффициент, в который будут записываться значения коэффициентов пересчета соответствующие единицам измерений. В форме элемента и в форме списка справочника в текстовом реквизите формы покажите владельца элемента справочника.
Для вставки в табличную часть формы списка текстового реквизита щелкнем мышью кнопку с синей буквой Т в панели элементов диалога или соответствующую строку в меню Вставить, установим его на табличную часть, курсор мыши при этом примет специальный вид, и ещё раз щелкнем левой кнопкой мыши. Появится дополнительная колонка без названия в самой правой позиции табличной части формы, чтобы её увидеть, как правило, надо прокрутить табличную часть стрелкой вправо. Для ввода формулы нужно активизировать свойства колонки. Сначала щелчком мыши в табличную часть мы должны активизировать табличную часть, а затем двойным щелчком в заголовок колонки активизировать свойства этой колонки. При этом появляется палитра свойств колонки. Зададим колонке название в поле Заголовок, а в поле Формула напишем — Владелец.
7.3. Использование подчиненных справочников
При создании конкретных конфигураций довольно часто возникают задачи, когда надо реализовать для каждого конкретного элемента справочника -список относящихся к нему объектов (отношение один-ко-многим). В нашем примере имеется справочник оборудования, и каждый элемент справочника может иметь произвольный список единиц измерения данного оборудования. Для того чтобы ввести новый или отредактировать существующий элемент справочника Единицы, сначала откройте форму списка справочника владельца Оборудование, выберите в нем курсором нужный элемент. Затем откройте форму списка подчиненного справочника Единицы, он будет отображать список единиц измерения данного оборудования. Теперь можно добавлять, редактировать или удалять записи в справочнике Единицы. Выбор элементов подчиненного справочника, в форме, при условии, что в форме существует элемент диалога, в котором выбран элемент справочника владельца, для которого производится выбор, реализуется в конфигурации при помощи указания в палитре свойств реквизита формы, предназначенного для выбора элемента подчиненного справочника, параметра Связан с. В нем вводится имя идентификатора реквизита формы, который содержит элемент родительского справочника. В этом случае при выборе элемента подчиненного справочника автоматически будет производиться выбор из элементов, подчиненных выбранному элементу справочника-родителя. Другим способом установки элемента справочника владельца, по значению которого должен выполняться выбор подчиненного справочника является вызов метода ИспользоватьВладельца(?) для объекта подчиненного
VII. Справочники 75
справочника. Это позволяет определить выбор подчиненного справочника даже в том случае, когда в форме нет элемента диалога имеющего тип справочника - владельца. Для выборки элементов подчиненного справочника по владельцу, после метода ИсполъзоватьВладельца( ?) надо вызвать метод ВыбратьЭлементы() и далее методы ПолучитьЭлемент() или НайтиЭлемент( ?), НайтиПоКоду( ?), НайтиПоНаименованию( ?).
Упражнение 9. (Необязательное) Создайте в форме элемента и форме списка справочника Оборудование алгоритм, позволяющий при создании нового элемента программно создавать подчиненный элемент в справочнике Единицы с Наименованием шт. и Коэффициентом равным 1.
Опишем для этого предопределенные процедуры ПриЗакрытии() в модуле формы и в модуле формы списка справочника Оборудование, потому что последовательность директив в кнопке ОК в форме следующая: #3аписать? Закрыть.
Метод ТекущийЭлемент() возвращает значение записанного в базу данных позиционированного текущего элемента справочника.
В модуле формы:
Перем ФлагНового;
Процедура ВводНового(признак,копируемый)
Если признак=1 Тогда
ВвестиСтроку(Наименование,"Введите наименование",25);
КонецЕсли;
Если Родитель.Выбран()=1 Тогда
Цена=Родитель.ГрЦена;
КонецЕсли;
ФлагНового-1;
КонецПроцедуры
Процедура ПриЗакрытии()
Если ФлагНового=1 Тогда
Ед=Создать0бъект("Справочник.Единицы");
Ед.ИспользоватьВладельца(ТекущийЭлемент());
Ед.Новый();
Ед.Наименование="шт.";
Ед.Коэффициент=1;
Ед.Записать();
КонецЕсли;
76 1C:Предприятие. Практика программирования на платформе V7
КонецПроцедуры ФлагНового=0;
В модуле формы списка мы можем создать несколько элементов, поэтому создадим список значений новых значений.
Метод РазмерСписка( ) возвращает число элементов в списке значений.
Метод ПолучитьЗначение(Позиция,Строка) позволяет получить значение из указанной
позиции списка. Возвращает значение из списка.
Позиция - номер позиции в списке, из которой возвращается значение (изменяется от 1 до
РазмерСписка); Строка - идентификатор переменной, в которой возвращается символьное
представление получаемого значения.
Метод НаЙтиПоКоду(Код,ФлагПоиска) позволяет найти элемент справочника по коду.
Возвращает: 1 - если действие выполнено;
О - если действие не выполнено (элемент не найден).
Код - выражение со значением искомого кода,
флагПоиска - флаг поиска (необязателен):
О - если код уникален во всем справочнике; 2 - если код уникален только'в группе. Его можно использовать только для объектов, созданных функцией СоздатьОбъект.
Перем СписокНовых;
Процедура ПриРедактированииНовойСтроки ()
Если Родитель.Выбран()=1 Тогда
Цена=Родитель.ГрЦена;
КонецЕсли;
СписокНовых.ДобавитьЗначение(Код,Наименование);
КонецПроцедуры
Процедура ПриЗакрытии()
Перем Стр;
Если СписокНовых.РазмерСписка()0 Тогда
Новый=СоздатьОбъект("Справочник.Оборудование");
Для i=1 по СписокНовых.РазмерСписка() Цикл
Если Новый.НайтиПоКоду (СписокНовых.ПолучитьЗначение (i, Стр),0) =1 Тогда
Ед=СоздатьОбъект("Справочник.Единицы"); Ед.ИспользоватьВладельца(Новый.ТекущийЭлемент());
Ед.Новый();
Ед.Наименование="шт.";
Ед.Коэффициент = 1;
Ед.Записать();
КонецЕсли;
VII. Справочники 77
КонецЦикла;//
КонецЕсли;
КонецПроцедуры СписокНовых=Создать0бъект("СписокЗначений");
На приведенном ниже рисунке показано, как выглядят формы списков обоих справочников и форма элемента справочника Единицы. В форме списка справочника Единицы отключен режим иерархии, но благодаря текстовому реквизиту Владелец можно различить единицы измерения с одинаковыми наименованиями и кодами , принадлежащие разным владельцам, в форме списка.
7.4.Использование периодических реквизитов справочников
Использование периодических реквизитов существенно облегчает реализацию многих прикладных моментов конфигурации, однако, использование периодических реквизитов требует при конфигурировании особого внимания. Во-первых, не следует злоупотреблять этим свойством. Установка свойства периодический для каждого реквизита должна быть обоснованным и хорошо продуманным шагом, иначе это просто усложнит работу пользователей со справочниками, но не даст большого выигрыша. Во-вторых, при конфигурировании следует всегда помнить, что для использования значения периодического реквизита справочника необходимо обязательно указывать дату, на которую потребуется выбрать или
78 1С:Предприятие. Практика программирования на платформе V7
записать значение. Установка даты использования периодических реквизитов
задается либо методом ИспользоватьДату ( [Дата] ) , либо методами
Получить([Дату])и Установить ([Дата] , [Значение]) (через точку
после самого реквизита). Одновременно использовать оба эти способа задания
даты для одного и того же объекта типа Справочник нельзя. Если метод
ИспользоватьДату! [Дата] ) не вызывался, то к периодическому реквизиту
справочника следует обращаться с помощью методов Получить ( [Дату] ) и
Установить ( [Дата] , [Значение] ). Если метод
ИспользоватьДату ( [Дата] ) был вызван, то можно обращаться только непосредственно к значениям реквизитов.
На платформе 7.7 можно не указывать значение даты для метода Получить(), по умолчанию устанавливаются следующие значения: значение точки актуальности - если используется компонента "Оперативный учет", или Рабочая дата - если компонента "Оперативный учет"не используется.
Вызов метода ИспользоватьДату([Дата]) должен располагаться обязательно до позиционирования объекта на определенный элемент.
Примером, целесообразного использования метода ИспользоватьДату ( [Дата] ) может являться печать справочника с большим количеством периодических реквизитов. В этом случае, один раз вызвав в самом начале этот метод, Вы сможете получать значения всех реквизитов непосредственно, без вызова метода Получить ( [Дату] ).
Форма элемента справочника открывается с определенной датой. Если элемент открывается из списка справочника, то дата берется из списка. Если список в свою очередь открыт для выбора реквизита документа, то его дата будет совпадать с датой документа. Даты в формах списка и элемента справочника выводятся в заголовке окна и используются только для вывода и записи периодических реквизитов. По умолчанию это Рабочая дата, но её можно изменить из встроенного языка в модуле формы списка или элемента (группы). При записи элемента редактируемого в форме, если существуют периодические реквизиты, то выдается специальный запрос, в котором пользователь отмечает какие значения периодических реквизитов нужно установить на дату формы, вызов и вид запроса можно откорректировать методом модуля формы элемента справочника СохранениеПериодическихРеквизитов().
При интерактивном редактировании формы элемента (группы) или формы списка справочника периодические реквизиты могут записываться или не записываться на дату формы, но не могут быть записаны на другую дату.
По умолчанию изменения реквизитов выставляются на основании сравнения значений со значениями, записанными на ближайшую предыдущую дату. Данный запрос выдается только для реквизитов, непосредственно
VII. Справочники 79
включаемых в форму. Если некоторый периодически реквизит непосредственно в форму не включен, а изменяется из встроенного языка, то он не будет выдаваться в этом запросе и сохраняться. Для того, чтобы в реквизит участвовал в запросе о записи периодических реквизитов можно вставить его в форму, установив ему признак Сделать невидимым. Периодические реквизиты содержат значения только начиная с даты первой записи истории значений реквизита, однако и в историю реквизита можно записать пустое значение на какую-либо дату. Например, если самая первая запись периодического реквизита Цена отмечена датой '02.12.94' со значением 48.00, а мы в программном модуле запросили значение этого реквизита на '30.11.94', то система вам вернет пустое значение, т.е. ноль; если пустое значение установлено на дату '04.12.94', а следующее не пустое значение на '14.12.94', то с 04 по 13.12.94 система также вернет вам пустое значение.
Пример записи значения периодического реквизита справочника:
Словарь = СоздатьОбъект(Справочник.Оборудование);
Если Словарь.НайтиЭлемент(Элемент) = 1 Тогда
Периодич = СоздатьОбъект(Периодический);
Периодич.ИспользоватьОбъект(Цена, Словарь.ТекущийЭлемент());
Периодич.Значение= 2 5;
Периодич.ДатаЗнач = '17.05.00';
Периодич.Записать();
КонецЕсли;
Здесь Элемент - переменная или реквизит объекта с типом значения Справочник. Оборудование.
7.5. Работа со слоями и закладками
Закладки позволяют, не перегружая видимую часть формы объекта, расположить в ней максимальное число элементов формы.
Упражнение 10. В форме справочника Оборудование разместите реквизиты формы справочника по слоям, создайте закладки и алгоритм управления формой.
Разделим форму по слоям. Для этого (при активном окне формы диалога объекта) выберем пункт главного меню Диалог, а в нём пункт Слои. В
появившемся окне Слои мы увидим один слой Основной, создаваемый
по умолчанию.
Нажмём кнопку Изменить, в появившемся окне Слой изменим
80 1С:Предприятие. Практика программирования на платформе V7
идентификатор слоя на А. Создадим новый слой, для этого нажмём кнопку Новый в окне Слои и зададим ему идентификатор В.
Новый слой автоматически становится Видимым и Активным, слой А при этом станет только Видимым.
Нажмём кнопку Закрыть, чтобы закончить редактирование слоев. Выделим реквизиты формы диалога,
VII. Справочники 81
в пункте главного меню Диалог выберем пункт Поместить и поместим выбранные элементы диалога в слой В.
Используя окна управления слоями, описанные выше, можно посмотреть, как расположились элементы формы диалога по слоям.
Для управления слоями используется метод формы
Форма. ИспользоватьСлой(Имя_Слоя,Режим)
ИмяСлоя - строковое выражение - название слоя формы, как оно задано в конфигураторе. Параметр может быть составным (указывать несколько слоев). В этом случае имена слоев перечисляются в строке через запятую.
Режим - необязательный параметр. Числовое выражение:
Значение по умолчанию - 2. Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
Чтобы посмотреть, как переключаются слои можно создать кнопку для переключения слоев и поместить в неё вызов процедуры Переключить(). В качестве параметра переключения можно использовать значение текущего заголовка кнопки. Обратите внимание на свойства метода реквизитов формы Заголовок(): он работает как процедура , и как функция.
Метод Заголовок(Название) устанавливает заголовок элемента диалога. Возвращает текущий заголовок элемента диалога. Название - строковое выражение - новый заголовок колонки многострочной части формы, кнопки, рамки группы, текста, флажка, переключателя. Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
Чтобы к реквизиту формы можно было бы обратиться, его надо назвать, задать ему идентификатор. Зададим кнопке идентификатор - Переключение и Начальный заголовок — Только А. Создадим в модуле формы справочника процедуру Переключить()
//Вызов процедуры в кнопке -
Переключить(Форма.Переключение.Заголовок())
82 1С:Предприятие. Практика программирования на платформе V7
Процедура Переключить(ТекущийЗаголовок)
Если ТекущийЗаголовок="Только А" Тогда
Форма.ИспользоватьСлой("А",2) ;
Форма.Переключение.Заголовок("А и В");
Иначе
Форма.ИспользоватьСлой("А,В",2);
Форма.Переключение.Заголовок("Только А") ;
КонецЕсли;
КонецПроцедуры
В Предприятии слои будут переключаться по кнопке.
Как правило для переключения по слоям в форме создают закладки. Интерактивное действие — выбор закладки обрабатывается в предопределенной процедуре модуля формы ПриВыбореЗакладки (), которая запускается в момент выбора закладки пользователем.
ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки):
НомерЗакладки - числовое значение – номер выбранной закладки формы.
3начение3акладки - значение выбранной закладки формы.
Чтобы сделать закладки в форме доступными надо установить флаг использования закладок.
VII. Справочники 83
Упражнение 11. В форме элемента справочника Оборудование создайте закладки и алгоритм управления слоями.
Напишем в модуле формы процедуры для управления Закладками и Слоями. Атрибут формы Закладки имеет тип СписокЗначений, поэтому для него доступны все методы этого объекта. Мы будем использовать метод форма.Закладки.Добавить3начение(3начение3акладки, НазваниеЗакладки).
//*******************************************
Процедура ПриВыбореЗакладки (НомерЗакладки,ЗначениеЗакладки)
Если НомерЗакладки =1 Тогда
Форма. Использовать Слой (А, 2);
ИначеЕсли НомерЗакладки =2 Тогда
Форма. Использовать Слой (В, 2);
Конецесли;
КонецПроцедуры
//*******************************************
Форма. ИспользоватьЗакладки (1);
Форма. Закладки. ДобавитьЗначение (, А);
Форма. Закладки. ДобавитьЗначение (, В);
Упражнение 12. (Необязательное) В форме элемента справочника Оборудование создайте закладку и Слой Единицы, алгоритм переключения между слоями, реквизит формы ТаблицаЗначений с идентификатором ТаблицаЕдиниц на слое Единицы и алгоритм редактирования подчиненных элементов справочника Единицы из формы элемента справочника владельца.(Аналогичный алгоритм мы создали в Упражнении 3)
84 1С:Предприятие. Практика программирования на платформе V7
В поле Формула таблицы значений вызывается процедура Редактироовать(ТаблицаЕдиниц.ТекущаяСтрока()), в параметр которой передается номер выбранной строки.
Метод ТекущаяСтрока(Строка) устанавливает или определяет текущую строку таблицы в элементе
диалога типа "ТаблицаЗначений". Возвращает число, соответствующее индексу текущей строки поля
диалога (до его изменения), или 0, если текущей строки нет. Строка - необязательный параметр.
Числовое выражение с задаваемым индексом строки для элемента диалога типа "ТаблицаЗначений", на
которую требуется установить курсор. Если параметр не задан, то положение курсора в поле диалога не
меняется."
Метод ПолучитьСтрокуПоНомеру(Номер) устанавливает в качестве текущей строки строку с
заданным номером.
Возвращает:
1 - если действие выполнено;
О - если действие не выполнено.
Номер - номер строки.
Метод Видимость(Режим) устанавливает режим отображения элемента диалога. Возвращает:
текущее числовое значение режима отображения элемента диалога (на момент до исполнения метода).
Режим - число: 1 - поле диалога отображается, 0 - поле диалога скрыто.
Доступ к методу возможен только в контексте Модуля формы через атрибут форма. Использование
данного метода для колонки табличной части формы не может изменять видимость отдельно для
совмещенных и многострочных колонок."
Метод ВвестиСтроку(Строка,Подсказка,ДлинаСтроки,Признак,Таймаут) вызывает
диалог для ввода строки.
Возвращает:
1 - если в диалоге нажата кнопка ОК;
0 - если нHжата кнопка Отмена;
-1 - если закончилось время ожидания ответа.
Строка - имя переменной, объявленной в модуле для приема вводимого значения; Подсказка -
текст заголовка окна диалога ввода; ДлинаСтроки - длина вводимой строки;Признак - если 0 или
опущен - ввод одной строки, если 1 - ввод многострочного текста с разделителями строк; Таймаут -
число секунд времени ожидания ответа (если опущен или 0, то без ограничения).
Метод ВвестиЧисло(Число,Подсказка,Длина,Точность,Таймаут) вызывает диалог для
ввода числа.
Возвращает:
1 - если в диалоге нажата кнопка 'ОК';
О - если нажата кнопка 'Отмена';
-1 - если закончилось время ожидания ответа.
Число - имя переменной, объявленной в модуле для приема вводимого значения;Подсказка - текст
заголовка окна диалога ввода;Длина - длина вводимого числа;Точность - число знаков после
десятичной точки;Таймаут - число секунд времени ожидания ответа (если опущен или 0, то без
ограничения).
Предложенный ниже алгоритм можно перенести в модуль формы справочника Оборудование соблюдая структуру модуля. Методы реквизитов формы, в частности метод Видимость(), в предопределенной процедуре ПриВыбореЗакладки(,) работают иногда странно. Процедуру ИзменитьЕд(ЗначениеЕдиницы) предлагается написать самостоятельно.
Перем ФлагНового, Ед;
Процедура ЗагрузкаТаблицыЕдиниц()
Форма.Переключение.Видимость(0);
ТаблицаЕдиниц.УдалитьСтроки();
Если ФлагНового=1 Тогда
Записать();
VII. Справочники 85_
КонецЕсли;
Ед.ИспользоватьВладельца(ТекущийЭлемент());
Ед.ВыбратьЭлементы();
Пока Ед.ПолучитьЭлемент()=1 Цикл
ТаблицаЕдиниц.НоваяСтрока();
ТаблицаЕдиниц.Наим=Ед.ТекущийЭлемент();
ТаблицаЕдиниц.К=Ед.Коэффициент;
КонецЦикла;
КонецПроцедуры
Процедура УдалитьЕд(ЗначениеЕдиницы)
ТаблицаЕдиниц.ПолучитьСтрокуПоНомеру(ЗначениеЕдиницы);
Ед.НайтиЭлемент(ТаблицаЕдиниц.Наим);
Ед.Удалить();
ЗагрузкаТаблицыЕдиниц();
КонецПроцедуры
Процедура ДобавитьЕд()
Перем Стр,К;
Ед . Новый ( ) ;
ВвестиСтроку(Стр,"Введите наименование",25);
Ед.Наименование=Стр;
ВвестиЧисло(К,"Введите коэффициент",7,0);
Ед. Коэффициент= К;
Ед.Записать();
ЗагрузкаТаблицыЕдиниц();
КонецПроцедуры
//В поле Формула таблицы значений вызывается процедура
//Редактировать(ТаблицаЕдиниц.ТекущаяСтрока())
Процедура Редактировать(НомерСтрокиТаблицыЗначений)
Перем Зн,Поз;
СпЗн=СоздатьОбъект("СписокЗначений");
СпЗн.ДобавитьЗначение("","Удалить");
СпЗн.ДобавитьЗначение("","Добавить");
СпЗн.ДобавитьЗначение("","Изменить");
СпЗн.ВыбратьЗначение(Зн,"Выберите действие",Поз,,1);
86_ 1С:Предприятие. Практика программирования на платформе V7
Если Поз=1 Тогда
УдалитьЕд(НомерСтрокиТаблицыЗначений);
КначеЕсли Поз = 2 Тогда
ДобавитьЕд();
Иначе
ИзменитьЕд(НомерСтрокиТаблицыЗначений);
КонецЕсли;
КонецПроцедуры
Процедура ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки)
Если НомерЗакладки=1 Тогда
Форма.ИспользоватьСлой("А,В",2);
Иначе
Форма.ИспользоватьСлой("А,Единицы",2);
ТаблицаЕдиниц.Очистить();
ТаблицаЕдиниц.НоваяКолонка("Наим",,,,"Единица",10,,);
ТаблицаЕдиниц.НоваяКолонка("К",,,,"Коэф.",10,,);
ЗагрузкаТаблицыЕдиниц{);
КонецЕсли;
КонецПроцедуры
//____________________________________________
Форма.ИспользоватьЗакладки(1);
Форма. Закладки. ДобавитьЗначение ("", "Реквизиты");
Форма. Закладки. ДобавитьЗначение ("", "Единицы");
Форма.ИспользоватьСлой("А,В",2);
Ед=Создать0бъект("Справочник.Единицы");
ФлагНового=0;
Режим выборки групп в форме списка справочника.
По умолчанию, выборка элементов справочников для полей диалога в формах документов, журналов и формах списков справочников установлена без выбора групп, а в форме отчета с выбором групп. Если Вы хотите изменить режим выборки групп, используйте метод ВыборГруппы(?).
Методы определения префиксов авто нумерации
Префиксы авто нумерации создаются для удобства отбора или поиска записей в базе данных. В Предприятии есть два типа методов для определения
префиксов aвто нумерации. Метод ПрефиксАвтоНумерации (ИмяВида, Префикс)
\/II Справочники 87
располагают, как правило, в глобальном модуле. Он позволяет установить префикс для автоматического создания новых номеров.Параметры: ИмяВида - строковое выражение с полным названием справочника или документа конфигурации. Для установки префикса сразу всем документам или справочникам используется символ "*" вместо идентификатора вида документа/справочника; Префикс - строковое выражение, задающее префикс номеров документов или кодов элементов справочника.
Методы описанные ниже вызывают обычно в предопределенных процедурах ВводНового() в модуле формы и ПриРедактированииНовойСтроки() в модуле формы списка справочника.
Метод ПрефиксКода(Префикс) позволяет установить текущий префикс кода для справочника. Возвращает строковое значение текущего префикса кодов элементов справочника (на момент до исполнения метода).
Метод УстановитьНовыйКод(Префикс) позволяет установить новый код элемента справочника с заданным префиксом. Префикс - строка с префиксом кода элемента справочника.
Вопросы для самоконтроля
Как задается область определения реквизитов справочников?
Для каких справочников определены атрибуты Владелец и Родитель?
Какое основное отличие в использовании и обращении к подчиненным и обычным справочникам?
Какие формы можно создать для интерактивного редактирования справочников?
В чем отличие конфигурирования периодических реквизитов справочников от конфигурирования периодических констант?
В чем отличие реквизитов формы и реквизитов объекта, как формата хранения данных?
Можно ли редактировать данные объекта, не открывая его интерактивную форму?
Можно ли управлять слоями в форме, не используя предопределенную процедуру ПриВыбореЗакладки()?
88_ 1С:Предприятие. Практика программирования на платформе V7
VIII. Документы и журналы документов
Документы - предназначены для регистрации, корректировки и просмотра актов хозяйственной деятельности предприятия. В конфигураторе системы мы создаем форму документа, которая используется для ввода информации. При проведении документа создаются записи в учетных базах: движения по регистрам, бухгалтерские операции и проводки, записи журналов расчетов.
У документа существуют характеристики - дата и время, которые устанавливают строго определенную единую последовательность документов, которая должна отражать фактическую последовательность хозяйственных операций на предприятии, для обеспечения возможности корректного исправления и ввода новых документов задним числом. Для привязки документа к моменту времени при сохранении документа формируется его позиция на оси времени. Позиция сохраненного документа уникальна. В момент ввода нового документа для программы он не имеет позиции, так как ещё не сохранен.
Сохраненный документ, в свою очередь может быть проведенным или не проведенным. При проведении документа выполняются действия, описанные в модуле документа.
Документы, в отличие от справочников, не имеют формы списка и помещаются в определенный журнал документов, а также в журнал Полный, содержащий все виды документов. Информация заносится в документ при заполнении реквизитов, которые могут находиться в шапке (заголовочной части) документа (относиться ко всему документу в целом) или в табличной части документа (перечень строк с однотипной информацией).
Атрибуты документов
Дня документов любого вида характерны атрибуты, например: дата и номер. Ввод атрибутов обеспечивается системой автоматически, наименования идентификаторов атрибутов не изменяются.
НомерДок и ДатаДок — это атрибуты шапки любого Документа. Тип ДатаДок — Дата. Тип НомерДок можно задать — число или строка.
НомерСтроки — это атрибут типа число многострочной части документа.
VIII. Документы и журналы документов 89
Атрибут Операция определен только для документов Бухгалтерского учета и возвращает ссылку на операцию созданную по документу.
Атрибут Операция определен только для документов Бухгалтерского учета и возвращает ссылку на операцию созданную по документу.
Реквизиты это дополнительные свойства документа, создаваемые при конфигурировании. Реквизиты можно создавать в шапке и в многострочной части документа.
8.1. Предопределенные процедуры модуля формы документа
Для модуля формы документа существует перечень предопределенных процедур:
ВводНового - процедура, которая отрабатывает в момент начала ввода пользователем нового документа.
ВводНаОсновании - процедура, которая отрабатывает в момент начала ввода пользователем данного документа на основании другого документа.
ПриЗаписи - процедура, которая отрабатывает в момент записи документа.
ПриНачалеРедактированияСтроки - процедура, которая отрабатывает в момент начала редактирования существующей строки в табличной части документа.
ПриВводеСтроки - процедура, которая отрабатывает в момент ввода пользователем новой строки табличной части документа.
ПриРедактированииНовойСтроки - процедура, которая отрабатывает в момент начала редактирования новой строки табличной части документа (после процедуры ПриВводеСтроки}.
ПриУдаленииСтроки - процедура, которая отрабатывает в момент удаления пользователем одной из строк табличной части документа.
8.2. Подчиненные документы
Система 1С:Предприятие позволяет устанавливать между документами отношения подчиненности типа много ко многим. Использование механизма подчиненности дает пользователю возможность автоматически Формировать список документов, подчиненных выбранному документу. Кроме того, к списку подчиненных документов можно обращаться на встроенного
90_ 1С:Предприятие. Практика программирования на платформе \/7
языка системы 1С:Предприятие.
Чтобы сделать какой-либо документ (назовем его условно Документ2) подчиненным другому документу (Документ 1), необходимо:
• при конфигурировании в структуре документа Документ2 создать
реквизит типа документ, указав конкретный вид документов или документ вообще;
• при использовании конфигурации при вводе документа Документ2 в
качестве значения этого реквизита выбрать документ Документ1.
Говорят, что Документ2 подчинен Документу 1, если Документ1 упомянут в каком-либо реквизите Документа2.
Для работы со списком документов, подчиненных какому-либо документу, используется журнал специального типа - журнал подчиненных документов.
8.3. Создание нового вида документов
Упражнение 13. Создадим документ Приход (Приходная накладная), который будет отражать хозяйственную операцию оприходования оборудования. В дальнейшем при проведении он будет изменять состояние регистра остатков и бухгалтерских итогов, а также формировать записи журнала расчетов,.
VIII Документы и журналы документов 91
Выберем пункт Новый элемент из меню Действия главного меню Конфигуратора. Если снят флаг использования конструкторов (см. рис.) на экране появляется окно с заголовком Документ Новый 1.
Как и в других окнах с полями ввода, в данном окне можно переме-щатьYя с помощью мышки или клавиш Tab и Shift+Tab.
Свойства документа
Прежде всего, для нового вида документов нужно указать идентификатор. Идентификатором объекта является некоторая уникальная последовательность символов. Если введенный Вами идентификатор совпадет с идентификатором уже существующего документа, то программа сама предупредит вас об этом. Зададим нашему документу идентификатор Приход и синоним - Приходная накладная. Далее можно посмотреть на различные свойства документа, установленные системой при его создании и изменить те из них, которые Вас не устраивают. Необходимо отнести Документы данного вида к определенному журналу. Щелкнув мышью в по-ле выбора Журнал, Вы можете выбрать один из существующих журналов. Это означает, что документы дан-ного вида будут вводиться и просматриваться в этом журнале. В процессе конфигурирования можно создавать и новые Журналы. Если Вы работаете на платформе V7.5 и хотите для вновь созданного Документа определить соответствующий новый журнал, то сначала создайте этот журнал (пустой) или выберите для вновь созданного документа журнал Прочие, создайте новый журнал и переопределите журнал в документе, на платформе V7.7. с помощью конструктора документов можно создать новый
92 1С: Предприятие.Практика программирования на платформе V7
журнал в процессе создания нового документа. Создадим журнал Оборудование для данного типа документа.
Нумерация документов
Для документа можно установить несколько свойств, относящихся к его нумерации. Большинство из них уже сразу имеют значения, подходящие для создаваемого документа. Свойство периодичности номеров определяет, через какой период система начнет автоматически нумерацию документов данного вида с единицы. При создании нового типа документов в данном поле стоит значение По всем данного вида. Это значит, что номера документов данного вида все время будут расти. Если щелкнуть мышкой в поле выбора Периодичность и выбрать вариант В пределах года, то документы, введенные в новом году, система автоматически начнет нумеровать с единицы. Так же как и для справочников, для документов можно определить или изменить префикс авто нумерации методом ПрефиксАвтоНумерации (?,""), а также с помощью следующих методов документа:
ПрефиксНомера(Префикс) позволяет установить новый префикс номера для документа.
Возвращает строковое значение текущего префикса документа (на момент до исполнения метода).
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
УстановитьНовыйНомер(Префикс) позволяет установить новый номер документа с заданным
префиксом.
Префикс - строка с префиксом номера документа.
Для сквозного контроля уникальности номеров документов разных видов можно создать Нумератор в дереве Документы, в котором, на закладке Нумератор, задаются свойства нумерации документов.
Контроль уникальности. Если эта опция включена, то при вводе нового документа его номер проверяется на уникальность в пределах, установленных в реквизите Периодичность. После завершения периода, установленного в реквизите периодичность, нумерация документов начнется с 1.
Упражнение 14. Создадим нумератор - ПоОборудованию, для нумерации документов, участвующих в движении оборудования, и зададим контроль уникальности в нумераторе, чтобы наши документы имели единую нумерацию.
VIII Документы и журналы документов 93
После этого можно определить нумерацию документа по нумератору, указав его в поле нумератор свойств документа.
Проведение документов
Признак Разрешить проведение указывает системе, что данный документ можно не только сохранить в электронном виде и распечатать, но и создать документом записи в учетных базах. Если признак не установлен, то у документа не будет модуля документа, в котором описывается алгоритм его проведения.
Признак Оперативный учет указывает системе, что данный документ может создать записи движений по регистрам, в которых ведётся оперативный учёт в различных разрезах: товаров, мат. ценностей, взаиморасчётов, учёт партий товаров. Алгоритм движений по документу описывается в модуле документа в предопределённой процедуре ОбработкаПроведения().
Признак Бухгалтерский учет, который становится доступным, если системе установлена компонента Бухгалтерский учет и создан хотя бы пустой объект типа ПланСчетов, указывает системе, что данный документ может иметь бухгалтерскую операцию, запи-сывать проводки, и, таким образом, отражать в бухгалтерском учете, ту хозяйственную операцию, которую введенный документ описывает. При этом в нижней части окна редактирования становится доступен признак Создавать Операцию по документу. Для простых документов рекомендуется оставить предложенное значение Всегда. В этом случае документы данного вида всегда будут иметь операцию. Другие значения признака Создавать Операцию по документу позволяют регулировать создание бухгалтерской операции по документу. Например, если установить значение Только при проведении, бухгалтерская операция будет записываться по документу только в процессе проведения документа. Эти возможности используются при большом количестве документов и в сложных Конфигурациях. Алгоритм бухгалтерской операции также описывается в модуле документа в предопределённой процедуре ОбработкаПроведения(). Само по себе, включение документа в журнал операций влияет только на возможность просмотра журнала.
Если установлен признак Расчет,- документы данного вида смогут создавать записи журнала расчётов в процессе проведения документа.
Создание структуры Документа
Для того, чтобы документ мог содержать полезную информацию, характерную Именно для данного документа, мы должны определить в окне редактирования
94 1С:Предприятие. Практика программирования на платформе V7
набор реквизитов. Для ввода нового реквизита следует нажать кнопку Новый в группе Реквизиты шапки.
Можно создать несколько общих реквизитов, которые будут характерны для любого вида документов - и существующих, и созданных в последствии.
Упражнение 15. Создадим общий реквизит - Основание, тип значения -Документ, который позволит любой документ сделать подчиненным другому документу.
Для этого откроем дерево метаданных на ветви Документы - Общие реквизиты - меню Действие - Новый элемент. При этом на экране появляется окно палитры свойств - Свойства реквизита. Далее новый общий реквизит документов вводится аналогично реквизиту справочника.
В структуре документа следует отражать только те данные, которые будут использоваться. В окне настройки вида документа расположены два поля: для ввода реквизитов шапки и для ввода реквизитов табличной части.
Реквизиты шапки могут хранить только одно значение, по каждому документу данного типа. В нашем примере, так как реквизиты ДатаДок, НомерДок и Основание вводятся системой автоматически, другие реквизиты шапки нам не потребуются.
Кроме этого, в документе может присутствовать одна табличная часть. Реквизиты табличной части могут хранить множество значений, по каждому документу данного типа вводиться, соответственно, для каждой строки документа.
Если имеется бланк документа (накладной, счета), то из него видно, какие реквизиты будут относиться к табличной части, то есть являться колонками в многострочной части документа.
Ввод нового реквизита табличной части.
Упражнение 16. Создадим реквизиты табличной части - Оборудование, тип значения - Справочник.Оборудование, Ед, тип значения -
V///. Документы и журналы документов 95_
Справочник.Единицы, Количество, НовЦена и Сумма , тип значения - Число. В реквизите Сумма на закладке Дополнительные установите флажок Итог по колонке.
Для ввода нового реквизита в табличную часть следует нажать кнопку Новый в группе Реквизиты табличной части. Ввод реквизита в табличную часть ничем не отличается от ввода других реквизитов. Конфигуратор позволяет вводить новые или редактировать существующие реквизиты в окне Метаданные. Для этого в дереве метаданных щелкните левой кнопкой мыши плюс + слева от нужного документа, появятся две ветви Шапка и Табличная часть, установите курсор на нужную ветвь и щелкните правую кнопку мыши, появится меню, в котором первым пунктом стоит Новый Реквизит.
Щелкнем левой кнопкой мыши пункт меню Новый Реквизит. В появившейся палитре свойств в поле Идентификатор укажем Оборудование. По умолчанию новому реквизиту присваивается тип Строка, выберем тип значения Справочник.Оборудование ниже в списке. Аналогично создадим реквизит Единица типа Справочник. Единицы.
Аналогично введем числовые реквизиты Количество, НовЦена и Сумма -, для реквизита Сумма на закладке Дополнительные палитры свойств установим флаг Итог по колонке.
Только те реквизиты табличной части документа, для которых установлен флаг Итог по колонке, могут быть выбраны для показа в графе журнала документов, также по этим реквизитам можно будет получить итоговую сумму, вызвав метод Итог(Сумма);.
Укажем для числовых реквизитов длину и точность. Цену и Сумму будем вводить с копейками.
96_ 1С:Предприятие. Практика программирования на платформе V7
Редактирование формы документа
Упражнение 17. Создадим Форму для интерактивного редактирования документа аналогично тому, как мы создавали формы для справочников.
Нажмите кноп-ку Форма в окне редактирования документа или установите курсор на нужный документ в Дереве метаданных, щелкните правой кнопкой мыши и, в появившемся меню, выберите пункт Редактировать форму.
Система предложит выбрать из списка с пометками существующие реквизиты документа для ввода в форму,
\/III. Документы и журналы документов 97
после нажатия кнопки Вставить будет открыто окно редактора форм с введенными реквизитами документа.
Справочник Единицы у нас подчиненный, поэтому при выборе его значения необходимо определить значение элемента справочника владельца, для этого на закладке дополнительные панели свойств заполним поле Связан с ссылкой на элемент справочника владельца - Оборудование, который выбирается в строке табличной части документа.
Метод Итог("ИмяРеквизита") возвращает сумму значений реквизита по всем строкам табичной части документа.ИмяРеквизита - имя реквизита табличной части документа (в кавычках).
Метод можно использовать только для реквизитов табличной части документов с установленным свойством 'Итог по колонке'.
98 1С:Предприятие. Практике программирования на платформе V7
Для большинства видов метаданных определены методы, позволяющие установить или получить название (идентификатор) и получить пользовательское представление (синоним) вида метаданных в виде строки, как они заданы в конфигураторе.
Метод Вид(Название) позволяет установить или считать текущее название вида объекта метаданных. Возвращает текущее название вида объекта метаданных.Название - строка с названием вида объекта метаданных. Если параметр не задан - метод просто возвращает текущее название. Метод ПредставлениеВида() позволяет получить пользовательское представление вида объекта метаданных, как оно задано в конфигураторе.Возвращает строковое значение, содержащее пользовательское представление вида объекта метаданных.
Для вставки реквизитов в уже сформированную форму документа в главном меню нужно выбрать последовательно пункты Вставить - Реквизиты. В верхней части диалога выбора реквизитов для вставки (см. рисунок выше) располага-ются реквизиты шапки. Уже вставленные реквизиты отмечены галочкой и серым цветом. Отметьте курсором в списке нужный реквизит. Для этого нужно щелкнуть мышкой в его название, чтобы оно оказалось отмечено выделенным цветом. Целесообразно также отметить, щелкнув мышкой, флажок Вставлять имя, чтобы при вставке реквизита в диалоге автоматически размещалась и подпись реквизита в виде синонима или идентификатора. Теперь нужно щелкнуть мышкой кнопку Вставишь. При этом, диалог закрывается и курсор мыши принимает специальный вид, показывающий, что сейчас будет производиться вставка реквизитов в окно диалога.
Покажем в табличной части документа коэффициент выбранной единицы измерения и цену оборудования на дату документа - реквизиты формы Кф и СтЦена типа Текст. Поместим колонку Кф после реквизита Единица, а СтЦена перед реквизитом НовЦена. Зададим в панели свойств соответствующие заголовки и идентификаторы реквизитам формы.
На закладке Дополнительные панели свойств зададим формулу, по которой будут вычисляться значения в этой колонке.
VIII. Документы и журналы документов 99_
Так как мы задали идентификаторы реквизитам формы, то по этим идентификаторам мы сможем обращаться к значениям этих реквизитов, в контексте формы документа.
Введём алгоритм вычисления реквизита Сумма в формулу реквизита Количество, чтобы после его ввода выполнилась формула расчета суммы. В нашем случае формула будет выглядеть так:
Сумма=Количество*Кф*НовЦена;
Действие этой формулы будет заключаться в том, что в реквизит Сумма будет занесено значение выражения справа от знака равно. После ввода формулы следует нажать кнопку Обновить в палитре свойств, для подтверждения ее ввода.
Эту же формулу можно внести в поля Единица и НовЦена, чтобы при Редактировании этих полей сумма обновлялась автоматически. Для удобства Редактирования строки документа можно в поле Оборудование прописать операторы для ввода значений по умолчанию:
Количество=1; НовЦена=СтЦена;
Теперь, чтобы после ввода новой цены и количества сразу начать вводить новую строку, вызовите палитру свойств для колонки Сумма, дважды Щелкнув в заголовок колонки Сумма, затем перейдите к закладке
100 1С:Предприятие. Практика программирования на платформе V7
Дополнительные и включите флажок Пропускать при вводе, щелкнув по нему мышью, нажмите кнопку ОК палитры свойств, чтобы подтвердить сделанные изменения. Чтобы ввод новой строки в документ начинался после ввода цены в текущую строку и нажатия Enter, откройте палитру свойств табличной части, дважды щелкнув мышью любое ее место, кроме заголовков колонок и включите флажок Автоматический ввод новой строки. (Для этого щелкните мышью этот флажок и нажмите кнопку ОК, чтобы подтвердить сделанные изменения.)
Теперь нам не потребуется вводить значения в ко-лонку Сумма - программа делает это автоматически. Если необходимо отредактировать вычисленные значения, это можно сделать, поместив курсор в требуемую ячейку и нажав кла-вишу Enter. Заметим, что условие Пропускать при вводе срабатывает только при вводе новой строки: если выполняется редактирование существующей строки, то все работает обычным образом: при нажатии Enter ячейка переключается в режим редактирования, повторное нажа-тие Enter выключит режим редактирования, но курсор останется на месте - никакого перехода не будет.
Установим признак Пропускать при вводе для колонки N, содержащей номер строки документа. В этом случае после ввода новой строки колонка N будет пропущена, а в режим редактирования будет переключена следующая ячейка в строке для ввода значения, в этой ячейке автоматически откроется соответствующий справочник, журнал, калькулятор или календарь в зависимости от типа реквизита.
Заметим, что в 7.7 при установленном флажке автонумерации строк в свойствах документа редактировать номер строки вручную нельзя, для этого существуют стрелки на панели инструментов.
Теперь зададим заголовок окна диалога. При создании диалога документа заголовок был оставлен пустым, поэтому при работе с этим документом в режиме запуска 1С:Предприятие заголовок будет формироваться программой автоматически из идентификатора; кроме этого, в заголовок будет добавлен номер документа (или слово Новый, если вводится новый документ). Для задания заголовка окна диалога следует вызвать палитру
VIII. Документы и журналы документов 101
свойств диалога, дважды щелкнув мышью в пустое серое пространство диалога. В поле Заголовок закладки Общие палитры свойств следует ввести текст, который будет выводиться в заголовке окна диалога и нажать кнопку ОК, чтобы подтвердить произведенные изменения.
Сортировка строк документа
В некоторых случаях у пользователей возникает потребность сортировки строк документов по некоторому значению отличному от введенного номера строки.
Кроме того, в модуле формы документа отсутствует возможность изменения номеров строк. Для решения данной задачи можно предложить сортировать строки документа в процессе печати. Для этого целесообразно использовать список значений. (В 7.7 существует метод документов сортироватьстроки (колонки) для сортировки строк документа по значениям некоторых реквизитов табличной части.) Вначале в список значений заносятся в качестве значений номера строк документа. При этом в качестве представлений значений указывается строковое значение, которое будет определять порядок сортировки, например, наименование товара. Далее список значений сортируется представлению штатным методом. После этого организуется цикл печати по списку значений. Причем позиционирование строки документа выполняется по полученному из списка значений номеру.
8.4. Создание печатной формы документа
В Конфигураторе создается не сама печатная форма, а только заготовка для её построения, состоящая из 2-х частей: шаблона печатной формы и алгоритма, описывающего порядок построения формы. Непосредственно сама печатная форма документа создается при работе документа в режиме 1С:Предприятие.
Табличный редактор располагается в закладке Таблица. Для ее активизации нужно щелкнуть в эту закладку. Вообще, форма может иметь несколько табличных редакторов, но при ее создании в форму автоматически включается только один.
Упражнение 18. Создадим табличный шаблон и алгоритм создания печатного Документа по шаблону с помощью конструктора печати.
Конструктор печати документа можно запустить из меню Конструкторы при активном модуле формы документа. Работа с конструктором печати подробно описана во 2 т. Конфигурирования и администрирования 1С:Предприятия 7.7, стр. 201-209.
В результате работы конструктора мы получим текст процедуры печати, Табличный шаблон и кнопку в окне диалога. Конструктор позволяет
отформатировать выражения в ячейках, используя метод Формат (Форматируемое
102 1С:Предприятие. Практика программирования на платформе V7
значением Форматная строка) . Форматную строку в ячейках табличного
шаблона можно задать непосредственно, не используя метод Формат(). Конструктор печати не использует идентификаторы реквизитов формы, в нашем примере — Кф, и не видит у какого числового реквизита табличной части установлен Итог по колонке.
Основные свойства табличного редактора
В системе 1С:Предприятие в глобальном контексте и для объектов имеющих форму предусмотрен редактор таблиц, внешне похожий на Excel, в котором создаются шаблоны печатных форм. Информация, предназначенная для печати, располагается в ячейках шаблона и группируется по горизонтальным (и вертикальным) секциям. Вывод из исходного шаблона таблицы в результирующую таблицу осуществляется программно по секциям шаблона при помощи свойств служебного объекта Таблица. Ячейки шаблона могут выполнять четыре типа преобразований: Текст - воспринимает символы в ячейке как строку текста, Выражение - воспринимает символы в ячейке как текст на встроенном языке, который транслируется и вычисляется, а затем преобразуется в текстовую строку результирующей таблицы, причем все незначащие символы отбрасываются, Шаблон и Фикс.шаблон позволяют в одной ячейке выводить и текст, и значение вычисленного выражения, текст, который должен быть проинтерпретирован как выражение берется в квадратные скобки []. Фиксированный шаблон позволяет задать определенную длину для значения выражения в квадратных скобках равную количеству знакомест между скобками. Для ячейки можно задать ширину столбца и высоту строки. Единицей измерения этих параметров является количество символов шрифта по умолчанию для табличных документов, последний задается в меню Сервис - Параметры -Интерфейс.
VIII. Документы и журналы документов 103
Оформление заголовка печатной формы
Прежде всего, введем заголовок документа. Заголовок будет состоять, очевидно, из названия документа, номера документа и даты документа. Для ввода заголовка щелкните мышью в ячейку в верхней части. Содержимое ячейки может быть оформлено различным образом: изменяются начертание и размер текста, обрамление ячейки, цвет фона и текста. Все эти изменения выполняются при помощи палитры свойств ячейки. Для вызова палитры свойств ячейки выберите пункт Свойства меню Действия главного меню Конфигуратора. Откроем палитру свойств данной ячейки. В появившейся палитре свойств закладке Текст нам нужно изменить значение поля Тип. Щелкнем в него мышкой и выберем строку Шаблон. (Этот тип позволяет совместить в одной ячейке и обычный текст, и одно или несколько выражений. Для того, чтобы выделить выражения в тексте ячейки, нужно просто заключать их в квадратные скобки). Теперь мы указали, что в данной ячейке будет располагаться не обычный текст, а выражение типа Шаблон на встроенном языке. Результат этого выражения при построении печатной формы документа будет выводиться в ячейке вместо самого выражения. Если заголовок документа это просто текст, то номер и дата документа зависят от конкретного документа, то есть они будут меняться. Для отражения данных документа в ячейку должно быть внесено выражение. Как мы уже отмечали, у документа есть два предопределенных реквизита -Дата и Номер, которые мы не вводим при создании вида документа, но они всегда существуют. Они автоматически были внесены в диалог формы ввода документа. Для использования в выражениях для этих реквизитов существуют спе-циальные идентификаторы ДатаДок и НомерДок.
Установите курсор в окно редактирования и наберите на клавиатуре следующую строку:
[ПредставлениеВида()]№ [НомерДок] от [ДатаДок #ДДДММММГГГГ]
и нажмите клавишу Enter, чтобы подтвердить введенный текст. Таким образом, в заголовок документа введены — строка названия документа и, в прямоугольных скобках, выражения, значения которых будут вставлены в символьную строку. Дата документа отформатирована в виде: 2 цифры - число, затем месяц прописью и 4 цифры - номер года (другие возможные значения форматной строки для различных базовых типов данных смотрите в I томе Описания встроенного языка , стр. 80-82 - метод Формат).
Разместим в печатном шаблоне реквизит Основание. Введём поясняющий текст и выражение для вывода значения реквизита. Выберем ячейку (щелкнем в нее мышкой). Наберем на клавиатуре поясняющий текст Основание. Разумеется этот текст может быть произвольным. Закончим ввод текста нажатием клавиши Enter. Теперь активизируем ячейку правее и введем в нее выражение. Для этого вызовем палитру свойств и изменим значение поля Тип. Щелкнем в него мышкой и выберем строку Выражение. В качестве
104 1С:Предприятие. Практика программирования на платформе \/7
выражения введем слово Основание, которое в данном случае является идентификатором общего реквизита (его мы создавали, когда разрабатывали структуру документа) и не может быть другим. Закроем палитру кнопкой ОК.
Создание табличной часZи печатной формы документа
Реквизиты табличной части документа вводятся в таблицу так же, как и реквизиты шапки, с той лишь разницей, что выражение будем размещать не справа от поясняющего текста, а на следующей строке, в другой секции. Фактически, сформирована таблица, которая повторяет табличную часть документа. Заголовки граф этой таблицы схожи с заголовками граф табличной части документа, а содержимое строк - это выражения для вывода реквизитов табличной части документа.
В качестве первого реквизита в форме расположен специальный реквизит, содержащий номер строки. Так же как номер и дата документа, реквизит Номер строки автоматически создается системой в документе, если существует хотя бы один реквизит табличной части. Его имеет смысл расположить в печатной форме, чтобы строки в ней были пронумерованы.
Выберите закладку Положение, щелкнув мышью ее название.
Управляющие элементы этой закладки позволяют задавать вертикальное и горизонтальное выравнивание текста в ячейке. Зададим положение текста в середине ячейки, для этого щелкнем мышью слово Центр в группе По горизонтали и По вертикали.
Изменим размер и атрибуты текста ячейки. Для этого используем закладку Шрифт. Установим в закладке размер шрифта 10 и включим атрибут жирности. Теперь перейдем к закладке Рамка.
V///. Документы и журналы документов 105
Управляющие элементы этой закладки предназначены для создания рамки вокруг ячейки или группы ячеек. На этой закладке выберем стиль рамки, щелкнув мышью нужный образец в группе Стиль. В группе Рамка выберем вид рамки, точнее, вдоль каких границ ячейки будет идти рамка. Если мы щелкнем мышью поле Обвести - рамка будет идти вокруг ячейки.
Расположим следующие поясняющие тексты и выражения:
При установке свойств ячеек не забывайте для выражений устанавливать тип ячейки Выражение, при этом текст в ячейке будет заключен в угловые скобки.
Табличный редактор позволяет легко изменять ширину колонок. Удобнее всего это сделать, перетащив мышью разделитель между колонками таблицы в верхнем заголовке (сером поле с номерами колонок). Похожую операцию мы проделывали, когда создавали диалог для ввода документа.
Очень важно, чтобы реальное содержимое ячейки таблицы соответствовало тому типу, который установлен для ячейки в поле Тип Свойств ячейки, текст, выражение, шаблон. Несоответствие может вызывать различные неприятные эффекты. Например, если для ячейки с выражением установлен тип Текст, то при построении печатной формы выражение будет выведено в форму, как обычный текст. То есть, вместо ожидаемых цифр в форме мы увидим какой-то непонятный текст.
И наоборот: если для текстовой ячейки установлен тип Выражение, то при построении печатной формы программа совершенно логично будет считать текст в такой ячейке выражением и попытается его вычислить. Результатом такого вычисления будет, скорее всего, сообщение об ошибке. К счастью, подобные эффекты легко обнаружить и устранить.
106 1C:Предприятив. Практика программирования на платформе V7
Создание секции
Выберем из меню Таблица пункт Включить секцию.
Для вывода в печатную форму повторяющихся строк предусмотрен механизм секций. То есть вывод на печать табличного документа будет выполняться не сразу, а отдельными секциями.
Секция является частью табличного документа. Секции бывают вертикальные и горизонтальные. Горизонтальная секция является совокупностью нескольких строк; как минимум, секция состоит из одной строки. Фактически, секция нужна только для того, чтобы назвать одну или несколько строк некоторым именем. Для создания секции выделите строки или столбцы табличного шаблона. Выделенные строки закрашиваются инверсным цветом. В главном меню Конфигуратора выберем позицию Таблица пункт Включить в секцию. Появится диалог, в котором нужно указать имя секции. Изменим предложенное имя Секция 1 и нажмем кнопку ОК. В левой части окна появится обозначение выделенной нами секции.
VIII. Документы и журналы документов 107
Описание алгоритма печати документа
Для манипулирования табличным документом в языке существует служебный объект Таблица.
Процедура Печать()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Печать");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0, Таб.ВысотаТабпицы(),0);
ВыбратьСтроки();
Пока ПолучитьСтроку() =1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
// Пропись("*.spl"); // Определение файла прописи
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Печать документа "+ПредставлениеВида()+" "+НомерДок,"");
КонецПроцедуры
Дадим пояснения по строкам.
Строка Таб=СоздатьОбъект (Таблица) создает в модуле объект языка типа Таблица. Он обязательно должен быть присвоен некоторой формальной переменной, которая в дальнейшем и будет использована для управления этим объектом. В отличие от реквизита документа, формальные переменные не хранятся в информационной базе, а живут до окончания процедуры. Использование объекта через создание переменной с некоторым именем позволяет использовать одном модуле несколько однотипных объектов. Итак, мы получили переменную Таб, которая содержит объект типа Таблица.
Теперь мы можем выполнять различные действия над этим объектом, указывая методы этого объекта. Название метода записывается через точку после самого объекта и после него всегда ставятся круглые скобки. В скобках могут Указываться параметры. Опишем те действия, которые производятся с переменной Таб.
Таб.ИсходнаяТаблица(Печать);
В этой строке вызывается метод ИсходнаяТа6лица(...), который назначает исходный табличный документ. Мы уже упоминали, что в форме может быть несколько табличных документов. Например, вдокументе Счет может быть 2 печатные формы: для печати рублевого счета и для печати валютного счета.
108 1С:Првдприятие. Практика программирования на платформе V7
Метод Исходная Таблица(...) позволяет выбрать, какую печатную форму мы будем использовать в данной процедуре. Если в форме объекта всего один табличный документ, то вызов метода ИсходнаяТаблица(...) можно опустить.
Таб.ВывестиСекцию (Шапка) ;
Эта строка выполняет включение в результирующую таблицу подготовленной нами секции. Напомню, что мы выделили в табличном документе: две секции Шапка и Строка.
Таб.Опции(0,0, Таб.ВысотаТаблицы(),0); Таб.ТолькоПросмотр(1);
Таб.Показать("Печать документа "+ПредставлениеВида()+" "+НомерДок,"");
Метод Опции(,,,,) отключает в готовом документе показ сетки ячеек и заголовков строк, определяет количество фиксированных строк и столбцов.
Метод Таб.ВысотаТаблицы() в данном случае устанавливает число фиксированных строк, равное числу строк секции Шапка. Теперь эти строки всегда будут видны на экране, а многострочная часть таблицы, при изменении положения ползунка вертикальной линии прокрутки, будет, как бы, подворачиваться под Шапку.
Метод ТолькоПросмотр( ?) определяет, что печатная форма будет использоваться только для просмотра и печати, а не для редактирования.
Метод Показатъ(?) открывает сформированную форму печатного документа, чтобы ее можно было бы посмотреть и вывести на принтер. Если этот метод не вызывать, то мы при работе с данным документом так и не увидим печатной формы.
Вывод строк документа располагается после вывода шапки, но до вызова метода Показать(?). Метод документа, начинающий обработку строк называется - ВыбратьСтроки().
Для организации обхода (выборки) строк документа используется конструкция встроенного языка
Пока ПолучитьСтроку()=1 Цикл
Таб.ВывестиСекцию(Строка);
КонецЦикла
Таким образом метод ВывестиСекцию( Строка ) будет вызываться для каждой строки документа.
Чтобы привести модуль в порядок, можно воспользоваться следующим приемом: выбрать из меню Действия пункт Выделить все, а затем, из этого
VIII. Документы и журналы документов 109_
же меню, пункт Форматировать блок. В результате все строки модуля будут выровнены в соответствии с принятым стандартом.
Редактирование в документе секции для печати итогов
В нижней части печатной формы документа находится область печати итогов по колонке Сумма. Для записи выражения использован метод документа Итог(Реквизит ) , который предназначен для получения суммы значений числового реквизита документа по всем строкам. В скобках в качестве параметра нужно указать в двойных кавычках идентификатор того реквизита, с установленным флагом Итог по колонке, данные по которому суммируются. При печати денежных величин иногда необходимо выводить их прописью. Для этого используется форматная строка ЧПДС. Если необходимо напечатать величину в альтернативной валюте, используется метод Пропись("Файл прописи.spl") до установки форматной строки ЧПДС.
Режим объединения ячеек табличного шаблона
Разместим по центру заголовок документа. Сначала выделим область в строке, в которой расположен заголовок, начиная с его правой ячейки и до ячейки, расположенной над самой левой колонкой табличной части. Далее выберите из меню Таблица пункт Объединить, чтобы выделенные ячейки воспринимались как одна область для центрирования.
Заголовок будет расположен по центру бланка. Теперь вызовите палитру свойств из меню Действия (пункт Свойства). В ней активизируйте закладку Положение и щелкнем мышью в поле Центр группы По горизонтали, чтобы установить режим центрирования по горизонтали.
При расположении текста в пределах нескольких ячеек, объединяемых командой Объединить, необходимо, чтобы текст размещался в крайней левой ячейке из группы объединяемых ячеек. Если это не так, то при выполнении команды
110 1С:Предприятие. Практика программирования на платформе V7
Объединить текст пропадет. Увидеть пропавший текст можно, если вызвать палитру свойств для ячейки, в которой находится этот текст.
8.5. Включение документа в пользовательское меню
Упражнение 19. Создадим в пользовательском меню пункт в колонке Документы для вызова документа.
Для этого нужно раскрыть соответствующую ветвь в редакторе меню, щелкнув мышью знак + слева от слова Документы. При этом раскрывается список документов в этой ветке.
Добавление в ветку Документы нового пункта меню выполняется двойным щелчком мышкой в элемент новый..., который располагается в самом низу ветки (если вся ветка не умещается в окне, следует воспользоваться вертикальной полосой прокрутки, чтобы увидеть этот элемент), название пункта меню, которое в итоге появится в меню Документы главного меню 1С:Предприятия.
Редактирование свойств пункта меню
Прежде всего, в палитре свойств нужно выполнить выбор поля Объект. Значение в этом поле показывает, с каким объектом метаданных будут выполняться действия при выборе пункта меню. Для выбора объекта нужно щелкнуть мышью в поле Объект, и, используя полосу прокрутки, пролистать окно до строки с наименованием вводимого документа и щелкнуть по нему мышкой. В поле Название будет вставлена строка с наименованием вводимого документа.
Пока это название редактор сформировал сам, но его можно отредактировать. После того, как выбран объект воздействия, необходимо выбрать команду, которую к этому объекту надо будет применить. Для этого следует в поле Команда выбрать строку Документ.наименование вводимого
\/III. Документы и журналы документов 111
документах.Ввести. Состав команд меняется в зависимости от того, какого вида объект выбран в поле Объект. Например, для констант, справочников, журналов документов, отчетов доступна только команда Открыть. Созданный нами пункт меню уже может вводить документ.
Для ввода нового документа можно создать кнопку на панели инструментов. Тогда для ввода нового документа требовалось бы всего лишь нажать кнопку, а не выбирать пункт меню, что заметно дольше. Можно назначить кнопке (и пункту меню) комбинацию горячих клавиш, при нажатии на которые выполнялась бы команда, назначенная кнопке.
Во встроенном языке системы 1С:Предприятие существует метод:
КнопкаПоУмолчанию(). Эта команда позволяет указать, какая кнопка будет
срабатывать при нажатии комбинации клавиш Ctrl+Enter. Если в модуль
формы созданного нами документа ввести строку
КнопкаПоУмолчанию(ОК), то при вводе документа нажатие комбинации клавиш Ctrl+Enter будет равносильно тому, как если бы мы щелкнули мышью кнопку ОК диалога.
8.6. Движения документа. Создание записей периодического реквизита Справочника по документу
Документы в системе 1С:Предприятие являются инструментом для записи движений в учетные базы данных, в которых ведутся записи по различным разрезам учета. Эти записи вводятся только программно в модуле документа в предопределенной процедуре ОбработкаПроведения().
Простейшим примером такой базы является совокупность записей периодических реквизитов справочников, создаваемая документами.
Для записи движений при создании документа необходимо в окне редактирования установить флажок Разрешить проведение документа и определить типы учетных баз, в которых данный документ будет создавать записи: Оперативный учет, Бухгалтерский учет или Расчет.
Модуль документа открывается из окна редактирования документа (не формы Документа) или через контекстное меню документа в дереве метаданных. Следует обратить внимание, что контекст модуля документа не связан с контекстом формы документа, поэтому в контексте модуля документа Доступны только атрибуты (реквизиты) документа.
Если в окне редактирования документа установлен флажок Автоматическое
112______________________ 1С:Предприятие. Практика программирования на платформе V7
удаление движений, то при удалении или пометке к удалению документа движения созданные в учетных базах по данному документу удаляются.
Упражнение 20. Создадим в модуле документа алгоритм формирования записей истории периодического реквизита справочника Оборудование Цена.
Новую цену оборудования мы задаем в приходном документе, определяя значение реквизита ЦенаНов, поэтому создадим в модуле документа записи истории периодического реквизита справочника оборудование по каждой строке документа. Чтобы не записи в истории периодического реквизита справочника не дублировались, нужно проверить была ли изменена цена в документе.
Метод
УстановитьРеквизитСправочника(ОлементСправочника,НазваниеРеквизита,Значение,
ДатаУстановки,ИмяТипа,Длина,Точность) позволяет записать значение периодического
реквизита справочника с привязкой к проведению документа.
ЭлементСправочника - элемент справочника, в который будет запись;
НазваниеРеквизита - название периодического реквизита справочника;
3начение - новое значение периодического реквизита;
ДатаУстановки - дата установки нового значения периодического реквизита. Дата установки имеет
смысл только для не оперативных документов.
ИмяТипа - необязательный параметр. Строковое выражение - название типа данных (или Вид
субконто);
Длина - необязательный параметр. Число - длина числового или строкового значения;
Точность - необязательный параметр. Число знаков после десятичной точки.
Параметры ИмяТипа, Длина и Точность следует указывать при установке значения
периодического реквизита справочника, имеющего неопределенный тип. Метод доступен только в
Модуле документа в предопределенной процедуре ОбработкаПроведения.
Метод ПривязыватьСтроку(НомерСтроки) позволяет записывать номер строки документа в
движениях документа. НомерСтроки - номер строки Документа.
Метод устанавливает номер строки для всех последующих движений регистров, при записи значений
периодических реквизитов справочников с привязкой к документу, а также при записи бухгалтерских
проводок. Метод доступн только в Модуле документа в предопределенной процедуре
ОбработкаПроведения.
Процедура ОбработкаПроведения()
ВыбратьСтроки();
Пока ПолучитьСтроку() =1 Цикл
Если НовЦенаоОборудование.Цена.Получить(ТекущийДокумент()) Тогда
ПривязыватьСтроку(НомерСтроки);
УстановитьРеквизитСправочника (Оборудование , "Цена" , НовЦена) ;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
\/III. Документы и журналы документов 113
8.7. Журналы документов.
Журналы документов - предназначены для просмотра и выбора документов, созданных в системе. Журналы документов могут иметь свои графы, значение которых заполняется из соответствующих реквизитов хранящихся в журналах документов. Это значительно облегчает возможность поиска нужного документа в журнале. Визуальное представление журнала задается в Форме
журнала.
8.7.1. Виды журналов документов
В 1С:Предприятиисуществуют следующие виды журналов документов:
Обычный журнал - в Обычном журнале может быть прописано несколько видов документов, но один и тот же вид документов не может быть прописан в разных Обычных журналах,
Общий журнал для всех документов, позволяет делать отбор по значениям общих реквизитов и граф отбора,
Дополнительный журнал служит для разделения по видам документов, как и обычный журнал, однако может быть прописан в разных Дополнительных журналах, в отличие от Общих журналов не позволяет делать отбор по значениям реквизитов,
Журнал подчиненных документов служит для работы со списком документов, подчиненных выбранному документу, может назначаться в конфигураторе для одного из Общих журналов, в противном случае создается системой автоматически и не редактируется, в пользовательском интерфейсе открывается через меню Действия для выбранного документа,
Полный журнал - общий журнал по умолчанию, может назначаться в конфигураторе для одного из Общих журналов, в противном случае создается системой автоматически и не редактируется,
Журнал Прочие - общий журнал для работы с документами, для которых не созданы свои обычные журналы, создается системой автоматически и не редактируется.
8.7.2. Создание вида документа в журнале документов
Для создания или редактирования журнала документов раскройте ветвь Журналы документов дерева метаданных, создайте нужный журнал, Щелкнув правой кнопкой мыши на любом ранее созданном журнале или на
114 1С:Предприятие. Практика программирования на платформе V7
названии ветви Журналы документов и выбрав пункт Новый журнал в появившемся меню.
Чтобы посмотреть форму созданного журнала нажмите кнопку Формы и далее выберите пункт Форма Списка в появившемся меню.
1С:Предприятие автоматически создает 4 колонки в любом журнале: Дата - дата документа, Время - время документа, Документ -краткое наименование вида документа и Номер - номер документа. Какие-то из этих колонок в форме журнала могут отсутствовать - это значит, что в процессе конфигурирования их удалили из журнала. Кроме этих колонок, журнал может содержать произвольное число дополнительных колонок, называемых графами, для вывода в них любых других реквизитов документов, хранящихся в журнале. Состав этих граф, а также информация, которая будет выводиться в этих графах, полностью определяется в конфигураторе.
Новую графу журнала документов можно создать в окне свойств журнала (кнопка Новый) или через контекстное меню пункт Новая графа.
В существующем журнале, если щелкнуть мышью знак + слева от его идентификатора, откроется список граф журнала. Теперь, если дважды щелкнуть мышью идентификатор самой графы, будет вызвано окно для редактирования состава информации, отображаемой в этой графе. Создадим в нашем журнале графу Сумма, в которой будем отображать итоговую сумму
\/III. Документы и журналы документов 115
по документу Приход. Это возможно благодаря тому, что у этого числового реквизита табличной части документа установлен признак Итог по колонке.
Для редактирования состава дополнительной графы журнала документов используются окна Выбранные Значения и Возможные Зна-чения. В окне Возможные значения в виде дерева выдается список документов, для которых назначен редактируемый журнал. Последним документом в этом списке является последний созданный документ. Прочие документы уже существовали в конфигурации ранее. Если щелкнуть мышью знак + слева от идентификатора документа, а потом раскрыть ветви Шапка и Таблица, мы можем увидеть идентификаторы реквизитов документа, который можно использовать для отображения в редактируемой графе. Окно Выбранные Значения содержит список реквизитов документов, уже назначенных для отображения в данной графе при работе с редактируемым журналом.
Исключить реквизит из показа в графе журнала можно, дважды щелкнув мышью его наименование в окне Выбранные Значения.
Для вызова окна редактирования графы журнала следует дважды щелкнуть мышью ее название в дереве метаданных.
Для помещения реквизита документа в графу журнала дважды щелкнем его мышью в списке возможных значений и закроем окно редактирования графы, нажав кнопку ОК.
116 1С:Предприятие. Практика программирования на платформе V7
Создадим форму списка журнала документв. Это можно сделать, используя контекстное меню нашего журнала или его же окно свойств.
Упражнение 21. Создайте самостоятельно документ Амортизация, с реквизитами многострочной части Оборудование типа Справочник.Оборудование и Результат типа число, максимально до 9 999 999,99. Нумерацию документов этого вида задайте с помощью нумератора ПоОборудованию. Покажите документ в журнале УчетОборудования, итог по колонке Результат должен отображаться в графе Сумма. Создайте форму документа и процедуру печати
\/lll. Документы и журналы документов 117
документа. В форме документа покажите итог по колонке Результат в виде текстового реквизита формы.
8.8. Ввод документов на Основании
Для документов, помимо операции копирования документов одного вида, которая выполняется аналогично копированию элементов справочников, определена операция ввода документов одного вида на основании документов другого вида. Особенность этого метода в различном составе реквизитов документов разных видов. Поэтому сопоставление реквизитов документов при вводе на основании делается программно в предопределенной процедуре модуля формы документа ВводНаОсновании(Документ-основание). Текст этой процедуры можно составить с помощью конструктора, работа с которым описана в 1 т. Конфигурирования и администрирования 1С:Предприятия 7.7, стр.161-163.
Чтобы конструктор работал правильно, желательно сначала отредактировать свойство документов Ввод на основании. Это свойство определяет список видов документов, которые можно вводить на основании выбранного Документа.
118_ 1С:Предприятие. Практика программирования на платформе V7
Нажмем на кнопку Ввод на основании в окне свойств документа Приход или выберем соответствующий пункт в контекстном меню документа.
В списке документов Является основанием для выберем документ Амортизация. Таким образом, мы определили, что документ Амортизация может быть введен на основании документа Приход.
Обратите внимание на флажок в левом верхнем углу окна. Он устанавливается по умолчанию для любого нового документа, что позволяет вводить на основании этого документа любой существующий документ. Мы не будем вводить документ Приход на основании документа Амортизация, поэтому отключите этот флажок в окне Ввод на основании документа Амортизация.
V///. Документы и журналы документов 119
Теперь войдите в модуль формы документа Амортизация и запустите конструктор ввода на основании.
Обратите внимание, что в списке реквизитов текущего документа нет общего реквизита Основание - конструктор не видит общих реквизиZов, поэтому текст, введенный конструктором, мы отредактируем.
Процедура ВводНаОсновании(ДокОснование)
Если ДокОснование.Вид() = "Приход" Тогда
// !!!конструктор не видит общих реквизитов!!!
Основание=ДокОснование;
ДокОснование.ВыбратьСтроки();
Пока ДокОснование.ПолучитьСтроку() = 1 Цикл
НоваяСтрока();
Оборудование = ДокОснование.Оборудование;
Результат = ДокОснование.Сумма*ДокОснование.Оборудование.КоэффАморт*176/100;
// 176 - это количество рабочих часов в месяце (22 р. дня)
// Последнее выражение будет уточнено после конфигурирования Расчета.;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
120 1С:Предприятие. Практика программирования на платформе V7
Упражнение 22. При вводе новых документов в информационную базу, установите префиксы для номеров документов. (Документы могут вводиться копированием и на основании документа другого вида).
8.9. Обращение к позиционированному документу в журнале документов
Обращение к записи журнала документов отличается от аналогичной операции в форме списка справочника, потому что в журнале документов могут располагаться записи различных объектов — видов документов. В каталоге справочника располагаются записи одного объекта. Обращение к записи журнала документов производится с помощью атрибута журнала ТекущийДокумент, который дает доступ к выбранному в журнале документу (только для чтения). Его можно использовать только в локальном контексте Модуля формы журнала документов. Чтобы возвратить значение типа документ по значению атрибута, надо применить метод ТекущийДокумент():
ТекущийДокумент.ТекущийДокумент()
Создадим, для примера, в форме списка журнала документов кнопку, по нажатию на которую будет производиться проведение позиционированного в журнале документа. Используем следующие методы:
НайтиДокумент(Документ) позволяет найти документ по значению типа 'Документ'. Возвращает: 1 - если действие выполнено (документ найден);
О - если действие не выполнено. Документ - выражение со значением типа 'Документ'. Метод можно использовать только для объектов, созданных функцией СоздатьОбъект. Провести(Режим,Знач) позволяет выполнить проведение документа. Возвращает: 1 - если проведение документа выполнено, 0 - иначе.
Режим - необязательный параметр. Число: 0 - проводить документ без сдвига ТА; 1 - проводить непроведенный документ реальным временем (со сдвигом ТА); 2 - перепроводить проведенный документ реальным временем (со сдвигом ТА); 3 - проводить любой (непроведенный, проведенный) документ реальным временем (со сдвигом ТА). Значение по умолчанию - 0. 3нач - выражение произвольного типа, которое передается при запуске предопределенной процедуры ОбработкаПроведения (необязателен, по умолчанию - пусто).
Метод нельзя использовать в теле предопределенной процедуры ОбработкаПроведения. Если этот метод применяется в Модуле формы документа непосредственно к документу локального контекста, то данный метод отрабатывает те же действия, как интерактивное нажатие пользователем кнопки с формулой "#Провести". В этом случае, если параметр Режим опущен, то документ проводится в режиме, соответствующем установкам системы меню Сервис-Параметры.
Обратим внимание, что метод провести работает, как процедура — выполняет действие, и как функция возвращает значение. Воспользуемся этим свойством, чтобы показать пользователю, что документ действительно провёлся или нет. Это удобно особенно при перепроведении уже проведенных документов.
Алгоритм проведения приводится ниже.
Процедура ПровестиДок()
Если ТекущийДокумент.Выбран()=1 Тогда
Док=Создать0бъект("Документ");
VIII. Документы и журналы документов 121
Док.НайтиДокумент(ТекущийДокумент.ТекущийДокумент());
Если Док.Провести()=1 Тогда
Предупреждение("Документ "+ Док + "проведен.");
Иначе
Предупреждение("Документ "+Док+ * НЕ ПРОВЕДЕН!!!!!!!!!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры //ПровестиДок
Различия в использовании Общих реквизитов документов и Граф отбора
Общие реквизиты документов в основном предназначены для упрощения процесса создания нового документа и представляют собой набор реквизитов автоматически встраиваемых в новый документ.
Графы отбора это реквизиты документов, кроме Общих реквизитов - Общий реквизит не может быть Графой отбора, по которым ведётся сортировка и отбор документов. При включении реквизита документа в графу отбора по нему строится индекс в индексном файле, что существенно ускоряет сортировку документов и формирование запроса по этому реквизиту (см. 1 т. Конфигурирование и администрирование 1С:Предприятия 7.7, стр. 186-187).
Вопросы для самоконтроля
Какие отличия в структуре, в упорядочивании и в формах документов по сравнению со справочниками?
122 1С:Предприятие. Практика программирования на платформе V7
С помощью, каких объектов метаданных можно просмотреть существующие документы?
Чем отличается подчинение документов от справочников?
Какие реквизиты формы можно использовать в модуле документа?
Какие реквизиты и переменные можно использовать в шаблоне печатной формы?
Какой метод выводит на экран результирующую печатную форму?
/Х. Основы построения Оперативного учёта в системе 1С:Предприятие 123
IX. Основы построения Оперативного учёта в системе 1С:Предприятие
Регистры, используемые компонентой Оперативный учёт, предназначены для накопления и хранения информации о наличии и движении различных объектов учёта. Регистры оперируют понятиями Измерение, Ресурс, РMквизит и Точка актуальности. Движения регистров записываются в модуле документа в предопределённой процедуре ОбработкаПроведения(). При записи движений регистров происходит накопление численных значений Ресурсов и записи значений Реквизитов в узлах некоторой многомерной таблицы, параметрическими координатами которой являются значения Измерений, причем соблюдается порядок вложенности Измерений.
В системе предусмотрено два типа регистров: оборотные регистры и регистры остатков. Для оборотных регистров характерен параметр Периодичность, который задает период, для выбора итогов методом ИспользоватьПериод(). Для регистров остатков характерны типы движений Приход и Расход, и параметр Период актуальности, задающий период, в течение которого хранятся или восстанавливаются, для временного объекта, созданного методом СоздатьОбъект(), движения регистра. Период актуальности регистров остатков задается и редактируется, в отличие от оборотных регистров, в режиме Предприятие, меню Операции, пункт Управление оперативными итогами....
Оборотные регистры предназначены для хранения и оперативной выборки информации об общем объеме (обороте) учитываемого параметра за определенный период. Можно сказать, что оборотные регистры хранят информацию о том, как накапливались остатки.
Регистры остатков предназначены для хранения и оперативной выборки информации об остатках учитываемого параметра на определенный момент времени.
124 1С:Предприятие. Практика программирования на платформе V7
На платформе V7.7 предусмотрена Быстрая обработка движений, позволяющая ускорить операции чтения из регистров - запросы, временные расчеты итогов, обход движений регистров, однако установка этого признака замедляет запись движений данного регистра.
Точка актуальности, последовательность документов
Точка Актуальности (ТА) — это момент времени, определяемый позицией документа, на который системой по умолчанию выдаются значения остатков и итогов по регистрам, и периодические значения. Позиция документа формируется при его записи и представляет собой метку на оси времени. Если документ проводится после точки актуальности, и нет более поздних проведенных документов, то точка актуальности сдвигается на позицию этого документа. Система предполагает, что все документы оперативного учета вводятся последовательно, в хронологическом порядке.
Нарушение последовательности документов происходит из-за неправильногс вода хозяйственных операций. Если последовательность записи все; документов соответствовала фактической последовательности хозяйственных операций, то ввод Документа5, отражающего реальную хоз. операцию, которая была совершена, но не записана своевременно, не нарушит стройности учета Если же были и другие нарушения записи хоз. операций, например: некоторый приход был введен после того, как часть товаров из него была уже продана, то в промежутке между Документом 5 и ТА может быть обнаружен расходный документ, в котором недостаточно товаров для списания.
Для корректировки последовательности надо перепровести документы за период от введенного с нарушением последовательности документа до ТА:
Меню "Операции" - "Проведение документов".
Точка актуальности, период итогов
На приведенном ниже рисунке показано, как формируются записи остатков или оборотов для регистров остатков или оборотных регистров соответственно. При переходе на следующий период фиксируется запись конечного остатка по периоду для регистра остатков или оборот за период
/X. Основы построения Оперативного учёта в системе 1С:Предприятие 125
оборотного регистра. Имя таблицы (файла) остатков/оборотов имеет префикс RG***.dbf.
В журнале документов ТА отображается красной галочкой с подчеркиванием.
После ТА записи в регистрах недоступны ни для чтения, ни для записи. При попытке рассчитать регистры или провести документ после проведенных документов, расположенных после ТА (они помечены сиреневой галочкой в журнале документов), система выдаст сообщение: Существуют более ранние проведенные документы::....
126 1С:Предприятие. Практика программирования на платформе V7
Структура записей регистра
Записи накапливаемых значений ресурсов группируются по значениям измерений, причем существенен порядок измерений регистров, так как группировка значений ресурсов по второму измерению является вложенной в группировку по первому измерению. Другими словами, множество записей второго измерения является подмножеством множества записей первого измерения.
В нашем примере в регистре Амортизация по каждому элементу справочника Оборудование накапливаются записи по приходным документам, а не наоборот, как в документе. В результате, мы можем получить из регистра, например, количество и стоимость элемента оборудования, или список партий для выбранного элемента справочника Оборудование с ненулевыми значениями количества или стоимости, или текущую стоимость оборудования, оприходованного определенным документом (не путать с итоговой суммой по документу, так как в регистр мы сможем не только приходовать, но и списывать оборудование из регистра).
Создание регистра
При конфигурировании регистра измерения создаются как типизированные объекты, на закладке Дополнительные можно обозначить свойство отбора записей измерений по значению измерения. Для ресурсов определяются параметры числового значения: длина и точность, которые должны соответствовать параметрам реквизитов документов, записывающих в них значения приращений при записи движений.
При создании оборотного регистра обратите внимание на его периодичность. Изменить периодичность оборотного регистра, имеющего записи движений, нельзя.
IX. Основы построения Оперативного учёта в системе 1С:Предприятие 127
Упражнение 23. Создадим Регистр остатков Амортизация с измерениями Оборудование типа Справочник.Оборудование и Партия типа документ.Приход, ресурсами Количество и Стоимость и движение Приход по каждой строке документа Приход.
9.1. Запись движений по документу.
Упражнение 24. В документе Приход сформирйте записи движений по приходу в регистр Амортизация по каждой строке документа, привязывая НомерСтроки документа к каждому движению.
Программирование записей движений регистров производится в модуле Документов оперативного учета в предопределенной процедуре ОбработкаПроведения().
Для того чтобы документ мог создавать записи движений регистров, в свойствах документа необходимо установить флажки Разрешить проведение Документа и Оперативный учет.
128 1С:Предприятие. Практика программирования на платформе V7
В модуле документа Приход алгоритм записи движений регистров можно создать с помощью конструктора движений регистров.
Выберем в конструкторе регистр, по которому будем создавать движения и тип движений по регистру остатков. Чтобы можно было из движения регистра спозиционироваться на строку документа, по значениям реквизитов документа которой были сделаны эти движения, установим признак Привязывать строку.
IX Основы построения Оперативного учёта в системе 1С:Предприятие 129
Определим выражения для значений атрибутов регистра.
130 1С:Предприятие. Практика программирования на платформе V7
Конструктор создал в модуле документа цикл записи движений по строкам документа. В нашем случае это уже второй цикл по строкам, поэтому целесообразно отредактировать модуль документа после работы конструктора.
Процедура ОбработкаПроведения()
ВыбратьСтроки();
Пока ПолучитьСтроку() =1 Цикл
//}}ДВИЖЕНИЯ_РЕГИСТРОВ
Регистр.Амортизация.Оборудование - Оборудование;
Регистр.Амортизация.Партия = ТекущийДокумент();
IX. Основы построения Оперативного учёта в системе 1С:Предприятие 131
Регистр.Амортизация.Количество = Количество * Единица.Коэффициент;
Регистр.Амортизация.Стоимость = Сумма; Регистр.Амортизация.ПривязыватьСтроку(НомерСтроки); Регистр.Амортизация.ДвижениеПриходВыполнить () ;
//}}ДВИЖЕНИЯ_РЕГИСТРОВ
// Запись истории периодического реквизита справочника
Если НовЦенаоОборудование.Цена.Получить(ТекущийДокумент()) Тогда
ПривязыватьСтроку(НомерСтроки);
УстановитьРеквизитСправочника(Оборудование,"Цена", НовЦена);
КонецЕсли;
// Запись истории периодического реквизита справочника
КонецЦикла;
КонецПроцедуры
В Предприятии посмотреть движения регистров можно в журнале документов через контекстное меню документа или меню Действия — пункт Движения документа.
9.2. Временный расчет регистров
Рассмотрим, как можно получить из регистра остатков значения ресурсов на любой момент времени.
132 1С:Предприятие. Практика программирования на платформе V7
По структуре регистры остатков отличаются тем, что помимо таблицы остатков RG*.dbf (оборотов для оборотных регистров) формируют таблицу движений RA*.dbf , в которую записываются положительные или отрицательные значения приращений ресурсов и значения реквизитов регистра, причем, как мы уже отмечали, имеются два типа движений: "приход" и "расход". Записи движений регистров актуальны в течение определённого промежутка времени, называемого периодом актуальности итогов; возможные значения - месяц, пятнадцать дней, декада, пять дней. По умолчанию остатки, накопленные в ресурсах регистров, выдаются на точку актуальности - ТА. Если нужно получить остатки или итоги по регистру до ТА, то выполняется временный расчет регистров. Период актуальности итогов необходим для того, чтобы при каждом обращении к регистрам на момент до точки актуальности не вычислять значения остатков или итогов от начала работы предприятия по движениям. Для расчета остатков или итогов на любой момент времени берется остаток на начало периода и по движениям вычисляется остаток на данный момент времени.
РегП=Создать0бъект("Регистр.Амортизация");
Если НашаДатаПолучитьДатуТА() Тогда
РегП.ВременныйРасчет();
РассчитатьРегистрыНа(НашаДата);
КонецЕсли;
Метод ВременныйРасчет (Флаг) позволяет установить флаг участия регистра во временном расчете Возвращает текущее значение флага участия регистра во временном расчете. Значения параметра флаг: 1 - установить флаг участия регистра во временном расчете; 0 - сбросить флаг участия регистра во временном расчете (необязателен, по умолчанию - 1). Замечание: В один момент времени только по одному объекту регистров каждого вида могут участвовать во временном расчете.
Метод РассчитатьРегистрыНа (ГраницаРасчета,ГрафаОтбора) позволяет рассчитать все регистры с установленным флагом временного расчета на начало события, заданное границей расчета.
IX Основы построения Оперативного учёта в системе 1С:Предприятие 133
9.3. Методы регистров
Обратим внимание на методы регистров, позволяющие организовывать циклы выборки.
Регистр.Амортизация.ОбратныйПорядок();
Регистр.Амортизация.УстановитьФильтр(ЗначениеОборудования);
Метод ОбратныйПорядок(Режим)позволяет установить порядок выборки движений документов. Возвращает:
1 - обратный порядок выборки документов,
О - выборка документов в порядке возрастания даты и времени.
Режим - число: 1 - выбирать движения документов в порядке убывания даты и времени; 0 -выбирать движения документов в порядке возрастания даты и времени, (по умолчанию - 1). Данный метод нельзя применять с методом ВыбратьДвиженияСОстатками. Метод можно использовать как процедуру и как функцию. Как функция метод возвращает значение, соответствующее порядку выборки до вызова.
Метод УстановитьЗначениеФильтра(Идентиф,Значен,Вариант) позволяет установить Фильтр по значению одного атрибута регистра, установить вариант отбора и принадлежность некоторому множеству значений Идентиф - идентификатор измерения или реквизита в кавычках. 3начен - значение или список значений. Вариант - необязательный параметр. Число: