Название: Автоматизированный бухгалтерский учет в программном комплексе «1С-М52 Предприятие» (Меркулова Т.А)

Жанр: Информационные системы и технологии

Просмотров: 1286


5.4. работа с регистрами

Регистры - это специфический инструмент системы "1С ТОРГОВЛЯ", средство накопления сводной информации. Регистры являются внутренним инструментом конфигурации, к которым нет непосредственного доступа через интерфейс пользователя. Информация о результатах хозяйственных операций, которая появляется при оформлении Документов, накапливается в Регистрах при "проведении" Документов, а отображение информации, содержащейся в Регистрах, осуществляется при помощи формирования отчетов. Информация из Регистров используется для анализа хозяйственной деятельности за прошедший период.

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

Например: предположим, что создан Регистр "Товарныезапасы", который должен содержать сведения об остатке и стоимости каждого товара на каждом складе. В дальнейшем предполагается получать информацию такого типа: «остаток конкретного товара на конкретном складе», «остаток конкретного товара всего», «стоимость всех товаров на конкретном складе». При использовании системы 1 С ТОРГОВЛЯ такой Регистр представляет прямоугольную систему координат, на осях {Измерениях) которого находятся склады и товары, а на пересечении конкретного склада и конкретного товара находятся Ресурсы ~ значения остатков и стоимости товара.

Структура каждого конкретного вида Регистр определяется при его создании в конфигураторе. Измерения и Ресурсы Регистров определяются в конфигураторе конкретно для каждого создаваемого вида Регистра.

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

В идеологии" 1С Торговля, Регистры и Документы тесно связаны между собой в том смысле, что "проведение" нового Документа порождает движение (приращение) Регистров (этот алгоритм прописывается в предопределенной процедуре ЗапнсьДвижеиийРегистров для каждого вида Документа). Далее, если Документ редактируется или удаляется, то система автоматически отслеживает влияние изменений Документа на состояние Регистров.

Переменные типа Регистр используются для:

Получений текущих ресурсов по Регистру, или ресурсов на определенный момент.

Обращения к существующим записям движений Регистров Документов.

Формирования движений Регистров Документов.

Замечание: Формирование движений Регистров Документов доступно только в предопределенной пропедуре ЗапнсьДвижеиийРегистров модуля движений Регистров Документов.

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

 

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

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

Регистр.ХХХХХХХ, где XX XXX XX - вид Регистра, объявленный в

конфигураторе.

Пример:

Рег=СоздатьОбъект{"Регистр.ТовЗап");

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

Пример:

Флаг=Регистр.ОстаткиТовара.Приход;

Атрибуты Регистров •  Приход — флаг движения регистра "приход".

Атрибут Приход содержит значение флага записи движения регистра и используется только при обращении к существующим записям движений регистров. Данный атрибут - только для чтения. Атрибут Приход имеет численное значение; 1 — если текущее движение Регистра — приход, 0 — если иет. Пример:

Рег1=СозцатьОбъект{"Регистр.Взаиморасчеты"); Если Режим—Т1одробно" Тогда

Perl .УстаиовнтьФильтрСКлиент);

Per 1 .ВыбратьДвижения(ДатаНачало);

Пока Perl .ПолучнтьДвижеиие{)>0 Цикл

Если Число(Рег1.Клиент.Код)оЧисло(Запрос.Клиент.Код) Тогда

Продолжить; КоиецЕсли; Док=Рег1 .ТекущийДокумент(); Дв_Баз Сум=Рег1.СуммаБазовая; Дв_Вал Сум РеН.СуммаВалютдая; Если Рег1.Приход=1 Тогда

Таб.ВывестиСекцию("Приход");

Иначе

Таб.ВывестиСекцию("Расход"); КонецЕслн; КонецЦнкла; КонецЕслн;

Расход   флаг движения регистра «расход».

Атрибут Расход содержит флаги запнсн движения регистра и используется только при обращении к существующим записям движения регистров. Данный атрибут только для чтения. Атрибут Расход имеет численное значение 1- если текущее движение Регистра — расход, 0 - если нет.

<Измерение> - установить значение поля <Измерение>.

Атрибут <Измерение> задает значение поля <Измерение> выбранного Регистра, В тексте программного модуля под термином <Измерение> понимается имя конкретного Измерения Регистра, созданного в конфигураторе-Пример;

Процедура ЗапнсьДвнженийРегнстров()

// В регистре «ТовЗап» измерения являются "Склад" и "Товар" // ресурсами являются "Количество" и "Стоимость". Регистр.ТовЗап.Склад=Склад; ВыбратьСгроки(); Пока (ПолучнтьСтроку()>0) Цикл

Регистр.ПривязатьСтроку(НомерСтроки); Регистр.ТовЗап.Товар=Товар; Регистр.ТовЗап.Количество=Количество; Регистр. ТовЗап. Стоимость=Стоимость;

Регистр.ТовЗап.ДвижениеРасходВыполиить(); j КонецЦикла;

КоиецПроцедуры '

<Ресурс> ~ установить значение поля <Pecvrjc>. 1

Атрибут <Ресурс> задает значение поля <Ресурс> выбранного Регистра. В тексте   программного  модуля   под  термином   <Ресурс>   понимается имя конкретного параметра Ресурс Регистра, созданного в конфигураторе. Пример;

 

Процедура ЗаписьДвиженийРегистров()

// В регистре "ТовЗап*' измерениями являются "Склад" и "Товар" // ресурсами являются "Количество" и "Стоимость" Регистр. ТовЗал. Склад=Склад; ВыбратьСтроки(); Пока (ПолучитьСтроку()>0) Цикл

Регистр.ПривязыватьСтроку(НомерСтроки); Регистр.ТовЗап.Товар=Товар; Регистр.ТовЗап.Количество=Количество; Регистр.ТовЗап. Стоимостъ=Стоимость; Регистр.ТовЗап.ДвижеииеРасходВыполнить(); КонецЦнкла; КоиецПроцедуры

Функции работы с Регистрами

ОстятокЩзмерение!. Измерение!..., ИдентификаторРесурса) — возвратить один ресурс но Регистру.

Функция Остаток возвращает один ресурс по Регистру. Данная функция никак

не использует и не изменяет атрибуты Регистра.

Пример;

Процедура ПолучитьОстаток(Товар, Склад, Ост, Стоим) Ост==Регистр.УчетТовара.Остаток(Товар, Склад/'ОстаткиТовара"); Стоим=Регнстр.УчетТовара.Остаток(Товар, Склад,"СтоимостьТовара"); КоиецПроцедуры

СводныйОстаток(ИзмерениеК Измерение2..., ИдентификаторРесурса) — возвратить один сводный ресурс по Регистру.

Функция СводныйОстаток возвращает один ресурс по Регистру. Функция

работает аналогично функции Остаток, однако здесь могут быть заданы не все

измерения, а несколько, но обязательно только подряд — первое неуказанное

значение (просто запятая) означают конец описания фильтра.

Данная функция никак не использует и не изменяет атрибуты Регистра.

Пример:

Процедура ПолучитьСводныйОстаток^Товар, Ост) Ост=Регистр.УчстТовара.СводиыйОстаток(Товар, "ОстатокТовара"); КоиецПроцедуры

ПолучитьДвижеииеО - выбрать очередное движение Регистра.

Функция ПолучитъДвижеиие выбирает очередное движение после процедур

ВыбратьДвижениеДокумента     или  ВыбратьДвнження или

ВыбратьДвижеиииСОстатками. Возвращает численное значение :1 если есть,

О - если нет. После выполнения данной функции все атрибуты Измерений, Ресурсов, приход и Расход содержат значения текущей записи регистра. Пример:

Per 1 *ОздатьОбъект("Регистр.Взаиморасчеты"); Если Режим="Подробно" Тогда

Perl .УстаиовитьФильтр(Клиент);

// Открывает выборку

Per 1 .ВыбратьДвижения(ДатаНачало,);

//Цикл выбора движений по регистру

Пока Рег1.ПолучитьДвижение()>0 Цикл

Если Строка(Рег1.Клиент.Код)оСтрока(Запрос.Клиент.Код) Тогда

Продолжить; КонецЕслн;

Док=Рег1 .ТекущийДокумент(); Дв_Баз_Сум=Рег1 .СуммаБазовая; Дв_Баз_Сум-Рег1 .СуммаВалютная; Если Perl.Расход-1 Тогда

Таб. ВывестиСекцию("Расход21');

Иначе

Таб.ВывестиСекцию("Приход2"); КонецЕслн; КонецЦикла; КонецЕслн;

•  ПолучитьИтогО — выбрать очередной остаток по Регистру. Функция ПолучитьИтог выбирает очередной остаток по Регистру после процедуры ВыбиратьИтоги. Возврашает численное значение *.1 если есть, 0 --если нет.

Данная функция - позволяет перебрать текущие или временные (см. ВремениыЙРасчет) остатки по Регистру. При этом используется фильтр, если он установлен (см. УстановитьФильтр). Итоги с нулевыми остатками не выдаются. Порядок выдачи для измерений типа Справочник и Документ не определен.

После выполнения данной функции все атрибуты Измерений, Ресурсов, Приход и Расход содержат значения очередной записи остатков Регистра. Пример:

Процедура ВыбратьКредит()

Список=СоздатьОбъект("СписокЗиачеиий");

Рег=СоздатьОбъект("Регистр.ТоварныйКредит");

Рег.УстановитьФильтр(Клиент);

Ном=0;

Рег.ВыбратьИтоги(): Пока Рег.ПолучитьИтогО=1 Цикл Док—Рег.Документ;

Список.ДобавитьЗначение(Док,""+Док+"-Остаток—"+Рег.Долг);

Если Ном=0 Тогда ВыбДок^Док;

КоиецЕсли;

Ном=Ном+1; КонецЦикла; Если Ном>0 Тогда

Если Список.ВыбратьЗначеиие(ВыбДок,"Выберите кредит")=1

Тогда

ДокКредит=ВыбДок;

КоиецЕсли; КоиецЕсли; Возврат;

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

•  ТекущийДокументО - возврвтить значение Документа движения Регастра. Функция Теку щийДокумент возвращает значение, которое содержит значение Документа, который задал движение Регистра. Функция используется после получения очередного движения Регистра (см. функции ПолучитьДвижеиие и ПолучитьИтог).

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

функций СоздатьОбъект.

Пример:

Рег=СоздатьОбъект{"Регистр.Взаиморасчеты");

Рег.ВременныйРасчет();

Рег.УстановитьФильтр(Клиент);

РассчитатьРегнстрыНа(ДататНачать);

Рег.ВыбратьДвиженияСОстатками(ДатаКонца);

Пока Рег.ПолучитьДвижеиие{)^1 Цикл

Прих=0;

Расх=0;

Если Рег.Приход=1 Тогда

Прих=Рег.Долг; Иначе

Расх=Рег.Долг; КоиецЕсли;

ТекущееСальдо-Рег.Остаток(Клйент,"Задолжность"); f Док—Рег.ТекущийДокумент();

 

Таб.ВывестиСекцию(" Документ"); КонецЦнкла;

Процедуры работы с Регистрами

Остатки (Измерение!, Измерение!...)- извлечь все ресурсы по регистру. Процедура  Остатки   извлекает  по   переданным   в   качестве параметров измерениям все ресурсы по Регистру. Полученные ресурсы затем можно считывать из атрибутов Регистра.

Пример:

Процедура ПолучнтьОстатки(Товар, Склад, ОстатокТовара, Стоимость)

Регистр.УчетТовара.Остатки(Товар, Склад);

ОстатокТовара=Регистр.УчетТовара.ОстаткиТовара;

Стоимость-Регистр.УчетТовара.СтоимостьТовара; КонецПроцедуры

•    СводныеОстаткиШзлгербгше/, Измерение!...)- извлечь сводные ресурсы по регистру.

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

Например, для регистра с изменениями Товар, Склад, МОЛ запись Per. СводныеОстаткн(Тов1„);

означает, что ресурсы будут получены только по одному товару (Тов1), но по

всем Складам и всем МОЛам.

Пример:

Процедура

Получить СводныеОстатки(Товар, ОстатокТовара, Стоимость)

Регистр.УчетТовара.СводныеОстатки(Товар,);

ОстатокТовара=Регистр.УчетТовара.ОстаткиТовара;

Стоимость=Регистр.УчетТовара.СтоимостъТовара; КонецПроцедуры

ОстаткиПолучнтьО - получить все ресурсы по^егистру.

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

Регистр.Взаиморасчеты.Клиент=Конт.Клиент; Регистр.Взаиморасчеты.ОстаткиПолучить();

Сообщить("Долг клиента по

взаиморасчетам="+СокрЛ(Регистр.Взаиморасчеты.СуммаВалютная));

ВыбратьДвижеиия (ДатаНачатъ, ДатаКонца)- выбрать все движения Регистра по датам.

Процедура ВыбратьДвижеиия инициирует выбор всех движений Регистра в указанном интервале дат. До вызова данной процедуры может быть установлен фильтр (см. УстановитьФильтр), ограничивающий выборку значений из Регистра. Если ДатаКонца не указана или равна 0, то концом временного интервала выбора движений Регистра считается ТА. Собственно выбор первого и последующих движений Регистра осуществляется функцией ПолучитьДвижение. Пример:

Per 1 =СоздатьОбъект("Регистр.Взаиморасчетьг''); Если Режим-'Подробно" Тогда

Perl .УстановитьФильтр(Клиент); Perl .ВыбратьДвижения(ДатаНачало,); Пока Рег1.ПолучитьДвижение()>0 Цикл

Если Строка(Рег1.Клиент.Код)<>Строка(Запрос.Клиент.Код) Тогда

Продолжить; КонецЕсли; Док=Рег1 .ТекущийДокумент(); Дв Баз_Сум=Рег1.СуммаБазовая; Дв_Баз_Сум=Рег1 .СуммаВалютная; Если Рег1.Расход=1 Тогда

Таб.ВывестиСекцию("Расход2");

Иначе

Таб.ВывестиСекцию("Приход2"); КонецЕсли; | КонецЦнкла;

КонецЕсли; [

ВыбратьДшженияДокументаГЛоку.меиш'Ьвыбрать все движения Регистра по Локументу.

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

Процедура Взаиморасчеты(ВыбКлиент, ДатаНачало, ДатаКонец) // Создание Таблицы для выходного отчета Заг="Неизвестно."; Таб=СоздатьОбъект{"Табли ца");

 

Клн=СоздатьОбъект{"Справочник.Клиенты"); Клн. ИспользоватьДату( ДатаКонец); Док=СоздатьОбъект{"Документ"); Рег=СоздатьОбъект("Регистр.Взаиморасчеты''); Рег1=СоздатьОбъект("Регистр.Взаиморасчеты "); Рег.ВремениыйРасчет(); РассчитатьРегистрыНа (ДатаКонец); Если ВыбКлиенг.Выбраи()=0 Тогда

// Без условий

Заг="По всем клиентам."; ИначеЕслн ВыбКлиент.ЭтотГруппа()^1 Тогда

Клн.ВключатьПодчииеииые(ВыбКлиент);

Клн.ИспользоватьРодителя(ВыбКлиент);

Заг='ТТо клиентам группы"+ВыбКлиент.Наименование; Иначе

Предупреждеиие("Выберите группу клиентов'"); Возврат; КонецЕслн;

Таб.ВывестиСекци ю("Отчет"); Клн. ВыбратьЭл емеиты(); Пока Клн.ПолучитьЭлемент()>0 Цикл ЕслиКлн.ЭтоГруппа()=1 Тогда

Таб.ВывестиСекцию('Труппа"); Иначе

Рег.Клиент=Клн.ТекущнйЭлемент(); Рег.ОстаткиПолучить();

Баз_сум=Рег.СуммаБазовая; Вал сум=Рег.СуммаВалютная; Таб.ВывестиСекцию("Клиент"); // цикл по всем документам

Док.ВыбратьДокументы(ДатаНачало, ДатаКонец);

Пока Док.ПолучитьДокумеит()>0 Пнкл

// отфильтруем документы

Если (Док.Вид()="Перемещение") ИЛИ

(Док.Вид()="Списание") ИЛИ

(Док.Вид()='ТучноеИзмОстатка") Тогда

// Эти Документы не изменяют Взаиморасчеты

Продолжить; КонецЕслн;

// выберем все движения регистра но документу

Рег1.ВыбратъДвиженияДокумента(Док.ТекушийДокумеит()); Пока Perl .ПолучитьДвиженне()>0 Цнкл

Если Строка(Рег1.Клиент.Код)<>Строка(Клн.Код) Тогда // не тот клиент Продолжить; КонецЕсли;

Дв_Баз_Сум=Рег1 .СуммаБазовая; Дв_Баз_Сум=Рег 1 .СуммаВалютная; Если Рег1.Приход=1 Тогда

Таб.ВывестиСекцию("Приход");

Иначе

Таб.ВывестиСекцню("Расход"); КоиецЕслн; КонецЦикла; КонецЦикла; КонецЕсли; КонецЦикла;

// Вызов выходного отчета в окно просмотра и редактирования

Таб.ТолькоПросмотр( 1);

Таб.Опцни(0Д4,0);

Таб.Показать("Взаиморасчеты с клиентами","");

ВыбКлиент^О;

КоиепПронедуры

•  ВыбратьДвижеиняСОстатками (ДатаКонеи) -   выбрать   все движения

регистра по Документу. Процедура ВыбратьДвижеиияСОстаткамн инициирует выбор всех движений Регистра в указанном интервале дат. До вызова данной процедуры может быть установлен фильтр (см. УстановнтьФнльтр), ограничивающий выборку значений Регистра, если ЦатаКоица не указана или равна 0, значение временного интервала выбора движений Регистра считается. j Данная процедура отличается от процедуры ВыбратьДвиження тем, что после получения очередного движения функции Остаток будет выдавать актуальные значения остатков для этого Регистра. Но для этого перед вызовом процедуры ВыбратьДвнженияСОстатками Регистру должен быть установлен признак ВременногоРасчета (см. ВременныйРасчет) и должен быть выполнен временный расчет (см. РассчитатьРегнстрыНа и РассчнтатьРегистрыПо) — его дата и будет являться начальной датой выбираемых движений Регистра.

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

•  ВыбратьИтогнО- выбрать все остатки Регистра.

Процедура ВыбратьИтоги инициирует перебор текущих (или временных) (см. ВременныйРасчет) осуществляетсятатков по Регистру при этом используется фильтр если он установлен (см. УстановнтьФильтр). Собственно выбор первого и последующих итогов Регистра осуществляется функцией ПолучитьИтог. Пример:

Процедура ВыбратьКредит()

Список=СоздатьОбъект("СинсокЗиачеиий");

Рег=СоздатьОбъект{"Регнстр.ТоварныйКредит");

Рег.УстаиовитьФильтр(Клиент,);

Рег.ВыбратьИ

тогнО;

Ном=0;

Пока Рег.ПолучнтьИтог()=1 Цикл

Док—Рег.Документ;

Список.ДобавитьЗначеиие(Док,""+Док+"-Остаток="+Рег.Долг);

Если Ном=0 Тогда ВыбДок=Док;

КоиецЕсли;

Ном=Ном+1; КоиецЦикла; Если Ном>0 Тогда

Если Список.ВыбратьЗначение(ВыбДок,"Выберите кредит")=1 Тогда ДокКредита=ВыбДок;

КоиецЕсли; КоиецЕсли; Возврат;

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

Следующие процедуры и функции доступны только в предопределенной процедуре алгоритма обработки Документа ЗаписьДвиженнйРегистров. • ДвиженнеПрнход{Измерение!, Измерение!..., Ресурс!, Ресурс2...) — }

выполнить запись прихода в регистр по параметрам. Процедура ДвижениеПриход выполняет запись  прихода  в  Регистр для текущего Документа. Измерения Регистра, по которым записывается приход

передаются параметрами Измерение!, Измерение2   Величина приращений

приходуемых ресурсов Регистра передаются параметрами Ресурс!, Ресурс2....

 

Данная процедура доступна только в модуле движения регистров Документа в предопределенной процедуре ЗапнсьДвиженнйРегистров — "Модуль движения регистров"

Замечание   Данную   процедуру   можно   применять   только   к Регистрам, непосредственно   доступным   в   локальном   контексте   модуля движения регистров, т.е. нельзя создать объект типа Регистр с помощью функции СоздатьОбъект и к нему применять данную процедуру. Пример:

Процедура ЗаписьДвижеинйРегистров() Регистр.ТовЗап.Склад=Склад; ВыбратьСтроки(); Пока (ПолучнтьСтроку()>0) Цикл

Регистр.ТовЗап.ПривязыватьСтрокуШомерСтрокн); Регистр.ТовЗап.ДвижениеПриход(Склад,      Товар, Количество, Стоимость);

КонецЦикла; КоиецПроцедуры

• ДвижениеРасход(Измерение1, Измерение2..., Ресурс 1, Ресурс2...)~

выполнить запись расхода в регистр по параметрам. Процедура ДвижениеРасход выполняет запись расхода в Регистр для текущего Документа. Измерения Регистра, по которым записывается расход^ передаются параметрами Измерение!. Измерение!.... Величина приращений расходуемых ресурсов Регистра передаются параметрами Ресурс!, Ресурс!....

Данная процедура доступна только в модуле движения регистров Документа в предопределенной процедуре ЗаписьДвиженийРегистров — "модуль движения регистров"

Замечание.  Данную  процедуру  можно  применять  только   к Регистрам, непосредственно   доступным   в   локальном   контексте   модуля движения регистров, т.е. нельзя создать объект типа Регистр с помощью функции СоздатьОбъект и к нему применять данную процедуру. Пример:

Процедура ЗаписьДвижеинйРегистров()

Регистр.ТовЗап.Склад=Склад;

ВыбратьСтроки();

Пока (ПолучитьСтроку()>0) Цикл

Регистр.ТовЗап.ДвижениеРасход(Склад,      Товар, Количество, Стоимость);

КонецЦикла; КоиецПроцедуры,

• ДвижеииеПрнходВыполиитьО - выполнить запись прихода в регистр по дтрибутам.

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

Данная процедура доступна только в модуле движения регистров Документа в непосредственной процедуре ЗаписьДвиженийРегистров - "модуль движения регистров"

Замечание.   Данную   процедуру  можно   применять  только   к Регистрам, непосредственно   доступным   в   локальном   контексте   модуля движения регистров, т.е. нельзя создать объект типа Регистр с помощью функции СоздатьОбъект и к нему применять данную процедуру. Пример:

Процедура ЗапнсьДвиженийРегистров() Регистр. ТовЗап. Склад=Склад; ВыбратьСтроки(); Пока (ПолучитьСтроку()>0) Цикл

Регистр.ТовЗап.ПривязыватьСтроку(НомерСтроки);

Регнстр.ТовЗап.Товар=Товар;

Регнстр.ТовЗап.Количество^Количество;

Регнстр.ТовЗап.Стоимость=Стоимость;

Регистр.ТовЗап.ДвижениеПриходВыполнить(); КонецЦнкла; КоиецПроцедуры

• ДвиженисРасходВыполннтьО — выполнить запись расхода в регистр по атрибутам.

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

Данная процедура доступна только в модуле движения регистров Документа в предопределенной процедуре ЗаписьДвиженийРегистров — "модуль движения регистров" ■ Замечание. Данную процедуру можно применять только к Регистрам, непосредственного доступным в локальном контексте модуля движения регистров, т.е. нельзя создать объект типа Регистр с помощью функции СоздатьОбъект и к нему применять данную процедуру.

 

Пример:

Процедура ЗаписьДвиженнйРегнстров() Регнстр.ТовЗап.Склад=Склад; ВыбратьСтроки(); Пока (ПолучнтьСтроку()>0) Цнкл

Регнстр.ТовЗап.ПривязыватьСтроку(НомерСтроки);

Регистр.ТовЗап.Товар—Товар;

Регнстр.ТовЗап.Количество=Количество;

Регистр.ТовЗап.Стоимость=Стоимость;

Регистр.ТовЗап.ДвижеииеРасходВыполинть{); КонецЦнкла; КонецПроцедуры

ПривязыватьСтроку(/7амерОиррк») — указывать  строку  Документа в движении регистра.

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

Данная процедура доступна только в модуле движения регистров Документа в предопределенной процедуре ЗаписьДвиженнйРегистров -"модуль движения регистров"

Замечание.Данную   процедуру   можно   применять   только   к Регистрам, непосредственного доступа в локальном контексте модуля движения регистров, т.е. нельзя создать объект типа Регистр с помощью функции СоздатьОбъект и к нему применять данную процедуру. Пример: - см.раньше.

НеПроводитьДокументО — не приводить Документ. j

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

Данная  процедура  доступна  только   в  модуле  движения регистров Документа в  предопределенной  процедуре  ЗаписьДвиженнйРегистров — "модуль движения регистров" Пример:

Процедура ЗапнсьДвиженнйРегистров()

Если Число(Клиент.Выбраи())>0 Тогда

ДвижениеРегистраРеализации(); Иначе

Предупреждеиие{"Не выбран клиент по реализации!!! Документ не проводиться!!");

НеПриводитьДокумент();

Возврат: КонецЕсли; КоиецПроцедуры

ВременныйРасчетО - установить флаг участи я^етистра во временном расчете.

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

// если итоги не актуальны, то стоимости берем из временного расчета // Регистра УчетРеализацяи

Рег=СоздатьОбъект("Регистр.УчетРеализации"); Рег.ВремеиныйРасчетО,'

РассчитатьРегистрыНа(ТекущийДокумент());

Рег.Товар=Товар;

Рег.Клиент=Клиент;

Рег.ОстаткиПолучнть();

ТекОстаток=Рег.ОстатокТовара; |

ТекСтоимость=Рег.Стоимость;

ТекПродСтоимость=Рег.ПродСтоимость;

УстановитьФнльтр( измерение!, измереине2...), ,

Процедура УстановнтьФильтр назначает фильтр для оптимизации расчетов. В качестве фильтра задаются значения измерений регистра. Могут быть заданы не все измерения, а несколько, но обязательно только подряд — первое неуказанное значение (просто запятая) означают конец описания фильтра.

Например, для регистра с измерениями Товар, Склад, МОЛ запись Рег.УстановитьФильтр (Тов1„);

означает, что расчеты будут проводиться только по одному товару (Тов1...), но по всем складам и МОЛам. Данная процедура разрешена к применению для

Регистров, у которых установлен флаг участия во временном расчете (см. ВременныйРасчет).

Пример:

Рег=СоздатьОбьект|«Регистр.Взаиморасчеты»); Рег.ВремеииыйРасчет(); Рег.УстановнтьФильтр(Клиеит); РассчитатьРегистрыНа(ДатаНачала);

Рег.ВыбратьДвиженияСОстатками(ДатаКонца); Пока Рег.ПолучитьДвижение()=1 Цнкл

Прих=0;

Расх=0;

Если Рег.Прнход— 1 Тогда Прих=Рег.Долг; Пока Рег.ПолучитьДвижение()—1 Цнкл

Прих=0; Расх=0; Если Рег.Приход=1 Тогда Прих=Рег.Долг; Иначе

Расх=Рег.Долг; КонецЕсли;

ТекущееСальбо==Рег.Остаток(Клиент, «Задолженность»);

Док=Рег. ТекущиЙДокумент(); Таб.ВывестиСекцню(«Докумеит»); КонецЦикла;

Глобальные процедуры работы с регистрами

Нижеследующие процедуры РассчитатьРегнстрыНа и

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

Процедура РассчитатьРегнстрыНа рассчитывает Регистр ^ у которых устновлен флаг участия во временном расчете (см. Временный Расчет) на начало даты или документа.

 

Пример:

// если итоги ие актуальны, то стоимости берем из временного расчета // регистра УчетРеализации

Рег=СоздатьОбьект{«Регистр.УчетРеализации»); Рег.ВременныйРасчет();

РассчитыватьРегнстрыНа(ТекущнйДокумент());

Рег.Товар=Товар;

Рег.Клиент=Клиент;

Рег.ОстанкиПолучнть();

ТекОстаток=Рег.ОстатокТовара;

ТекСтоимость^Рег.Стоимость;

ТекПродСтонмость=Рег.ПродСтоимость;

РассчитатъРегнстры11о(Гран1{цаРасчета)

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

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

// если итоги не актуальны, то стоимости берем из временного расчета // Регистра УчетРеализации

Рег=СоздатьОбъект(«Регнстр.УчетРеализации>>); Рег.ВременныйРасчетО;

РасчтнтатьРегнстрыПо(ТекушийДокумент()); Per.Товара Товар; Рег.Клиент= Клиент; Per. ОстаикиПолучить();

Тек.Остаток=Рег.ОстатокТовара; Тек.Стоимость-Рег.Стоимость;

Тек.Прод.Стоимость= Per. Прод. Стоимость; j