Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1C_ПрикладноеПрограммирование8.doc
Скачиваний:
42
Добавлен:
22.09.2019
Размер:
51.67 Mб
Скачать

2.5.1.1 Проведение документа по нескольким регистрам

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

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

2.5.1.2 Регистр «Остатки номенклатуры»

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

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

Откроем в конфигураторе нашу учебную конфигурацию и создадим новый объект конфигурации Регистр накопления. Зададим имя регистра - «ОстаткиНоменклатуры», его вид – «остатки». Нажмем «Далее» и перейдем к созданию структуры регистра.

Рис. 123 Создание регистра «ОстаткиНоменклатуры»

Определите у него два измерения: «Номенклатура» типа «СправочникСсылка.Номенклатура» и «Склад» типа «СправочникСсылка.Склады», два ресурса «Количество» типа «Число(15,3)» - неотрицательное, и «Сумма» типа «Число(15,2)» - неотрицательное, настройте формы списка.

Рис. 124 Задание измерений и реквизитов регистра

Если вы сейчас попытаетесь запустить 1С:Предприятие в режиме отладки, то система выдаст сообщение об ошибке: «РегистрНакопления.ОстаткиНоменклатуры: Ни один из документов не является регистратором для регистра». Это сообщение еще раз подтверждает тот факт, что назначение регистра накопления в том, чтобы аккумулировать данные, поставляемые различными документами.

Движения документа - это записи в регистрах, которые создаются в процессе проведения документа и отражают изменения, производимые документом. Перейдем на закладку «Регистраторы» и там отметим документы, которые могут выполнять движения данного регистра.

Рис. 125 Задание регистраторов регистра

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

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

Рис. 126 Задание движений регистра в документе

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

Рис. 127 Предупреждение о замещении процедуры

Рис. 128 Добавление регистра накопления

В списке «Реквизиты документа» должны находиться исходные данные для создания движений. А в таблице «Поле – Выражение» должны быть заданы формулы, по которым будут вычисляться значения измерений и реквизитов регистра при записи движений. Обратите внимание, что по умолчанию конструктор предлагает нам создавать движения прихода (символ «+» рядом с названием регистра) по регистру «ОстаткиНоменклатуры». Это нас вполне устраивает, ведь документ «ПриходнаяНакладная» и должен приходовать материалы.

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

Рис. 129 Результат работы конструктора движений

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

Рис. 130 Окончательный текст процедуры «ОбработкаПроведения()»

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

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

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

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

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

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

Посмотрим, как это работает. Запустим 1С:Предприятие в режиме отладки и откроем одновременно два окна: список документов «ПриходнаяНакладная» и список регистра накопления «ОстаткиНоменклатуры». Откроем Приходную накладную №1 и нажмем «ОК». Обратите внимание, что при проведении приходной накладной появляются соответствующие записи в регистрах накопления, которые можно посмотреть, щелкнув по кнопке «Перейти» формы списка или формы элемента, и выбрав там соответствующий регистр.

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

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