КонецПроцедуры

 

 

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

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

Поясним текст процедуры обработчика:

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

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

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

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

Внутри обработчика расположен цикл Для Каждого ... Из ... Цикл. Он предназначен для перебора строк табличной части нашего документа.

В цикле обращение к табличной части документа происходит по имени (Материалы). Переменная ТекСтрокаМатериалы содержит объект с данными текущей строки табличной части документа. Эта переменная создается в начале цикла и меняется по мере его прохождения.

В первой строке тела цикла, используя метод Добавить(), мы добавляем к набору записей, который создает наш документ в регистре, новую запись. Тем самым мы создаем объект РегистрНакопленияЗапись и сохраняем его в переменной Движение.

Используя этот объект, мы можем обратиться к полям этой записи, указав имя поля через точку от этой переменной (например, Движение.Количество).

Причем Движение.Материал, Движение.Склад - это измерения регистра, Движение.Количество - это ресурс регистра, а Движение.ВидДвижения и Движение.Период - стандартные реквизиты регистра, которые создаются автоматически.

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

Заметим, что Склад - это реквизит шапки документа, а Дата - стандартный реквизит документа, который создается автоматически. Причем в цикле меняются только значения полей табличной части документа - ТекСтрокаМатериалы.Материал и ТекСтрокаМатериалы.Количество. Остальные поля не меняются, так как относятся к документу в целом и не зависят от текущей строки табличной части документа.

ВидДвиженияНакопления.Приход - это значение системного перечисления, которое определяет вид движения регистра накопления как Приход.

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

Еслимы теперь откроем окно редактирования объекта конфигурации Регистр накопления Остатки Материалов и перейдем на закладку Регистраторы, то в списке документов, созданных в конфигурации, мы увидим отмеченный документ ПриходнаяНакладная, так как мы задали в модуле этого документа формирование движений в регистре ОстаткиМатериалов (рисунок 3.4).

Рисунок 3.4 - Регистраторы регистра «ОстаткиМатериалов»

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

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

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

В открывшемся окне слева в списке Подсистемы выделим подсистему УчетМатериалов.

Справа в списке Командный интерфейс отразятся все команды выбранной подсистемы.

В группе Панель навигации.Обычное включим видимость у команды Остатки материалов и мышью перетащим ее в группу Панель навигации. См.также (рисунок 3.5).

 

Рисунок 3.5 – Настройка командного интерфейса подсистем

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

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

Запустим 1С:Предприятие в режиме отладки и протестируем внесенные нами изменения.

В открывшемся окне 1С:Предприятия видим, что в панели навигации в группе См.также разделов Бухгалтерия, Оказание услуг и Учет материалов появилась команда для открытия списка регистра Остатки материалов (рисунок 3.6).

 

Рисунок 3.6 – Список регистра накопления «ОстаткиMатериалов»

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

Откроем Приходную накладную № 1 и нажмем Провести и закрыть, то есть перепроведем ее. То же самое сделаем для Приходной накладной № 2.

Перепровести документы можно и не открывая документов. Для этого нужно выделить нужный документ в списке (или выделить мышью группу документов, удерживая клавишу Ctrl), нажать кнопку Все действия в командной панели формы списка и выбрать пункт Провести (рисунок 3.7).

Рисунок 3.7 – Проведение документа

Далее выполним команду Остатки материалов и откроем список нашего регистра накопления (рисунок 3.8).

Рисунок 3.8 – Список регистра накопления «ОстаткиМатериалов»

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

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

Заголовок формы списка записей регистра соответствует заданному нами в свойстве Расширенное представление списка для этого регистра.

Команда перехода к движениям в форме документа

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

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

1. В конфигураторе откроем форму документа ПриходнаяНакладная.

2. В левом верхнем окне перейдем на закладку Командный интерфейс.

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

4. Установим свойство Видимость для этой команды (рисунок 3.9).

Рисунок 3.9 – Настройка командного интерфейса формы документа

Запустим 1С:Предприятие в режиме отладки и откроем Приходную накладную № 2 (рисунок 3.10).

Рисунок 3.10 – Панель навигации документа «Приходная накладная»

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

Рисунок 3.11 – Переход к регистру накопления из формы документа

Обратите внимание, что до этого панель навигации в форме приходной накладной была не видна, так как в ней не было отображено ни одной команды.

Движения документа «ОказаниеУслуги»

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

1. В режиме Конфигуратороткроем окно редактирования объекта конфигурации Документ ОказаниеУслуги.

2. Перейдем на закладку Движения и в списке регистров конфигурации отметим регистр накопления ОстаткиМатериалов.

3. Нажмем кнопку Конструктор движений.

4. В открывшемся окне конструктора изменим тип движения регистра на Расход, так как документ ОказаниеУслуги должен расходовать материалы. Пиктограмма слева от названия регистра изменится на знак - .

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

6. Нажмем кнопку Заполнить выражения. В нижнем окне сформируется соответствие полей (измерений и ресурсов) регистра и выражений для их расчета. Однако при автоматическом заполнении поле Материал не заполнится.

Так происходит потому, что имя поля табличной части - Номенклатура не совпадает с именем измерения регистра - Материал. Если оставим это так, как есть, то в регистре накопления в строках с типом Движение регистра - расход номенклатура фиксироваться не будет.

7. Чтобы избежать этого, надо выделить поле регистра Материал и в окне Реквизиты документа дважды щелкнуть по строке ТекСтрокаПереченьНомеклатуры.Номенклатура.

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

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

8. Нажмем кнопку ОК. Конструктор создал обработчик события ОбработкаПроведения объекта конфигурации Документ ОказаниеУслуги и поместил его в модуль объекта.

 

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

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

// регистр ОстаткиМатериалов Расход

Движения.ОстаткиМатериалов.Записывать = Истина;

Для Каждого ТекСтрокаПереченьНоменклатуры ИзПереченьНоменклатуры Цикл

Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал=ТекСтрокаПереченьНоменклатуры.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ