Процедура ПриОткрытии

ПриЗаписиПерепроводить(1); КонецПроцедуры


Методические материалы обучения партнеров

апрель 2004 г.

72

1C предприятие 7.7. Компонента Оперативный учет

Процедура ^водНового ( Копирование ) Если КопиР°вание=0 Тогда

( )

КурС=1^онстанта. КурсУЕ. Получить (ДатаКурса) КонецЕсли; КонецПроцеЯуры

Процедура

// проверк^ правильности заполнения реквизитов Если покупатель • Выбран ()=0 Тогда

предупреждение ( "Не выбран покупатель! " } ;

КонецЕсл^1'
КонецПроцеЯуры - Г

// Процедур3 пересчета суммы в у. е.

// при изм^нении Даты' на которую получен курс

Процедура Пересчет ( )

Курс=Кон'станта • КУРСУЕ • Получить ( ДатаКурса ) ;

Если Кур^=0 Тогда Сумма/Е=0;

Иначе

КонецЕсл^'

ПосколькУ количество счетов, введенных в систему, может быть достаточно 5олыиим то д/™ облегчения работы с документом выбор счета будем производить только из спис^ка неоплаченных счетов. Чтобы подавить стандартный процесс вы­бора значения> в Модуль формы добавим предопределенную процедуру

ПриНачалеВы^°Ра3начения <) •

Процедура Г^риНачалеВыбораЗначения(Знач1,Флаг) // при выбсЯР6 счета вызовем список неоплаченных счетов Если Зна«1="ПоСчетУ" Тогда

Флаг=0; //отменим стандартный процесс выбора значения

ПриВыб-°РеСчета <) КонецЕсл^1'

Текст сам*0"1 процедуры, которая выводит список неоплаченных счетов, может выглядеть сле^УюЩим образом:

73

Глава 4. Резервирование товаров

//вывод списка неоплаченных счетов. После выбора счета //остальные реквизиты заполняются автоматически Процедура ПриВыбореСчета{) Перем ВыбСтр;

НЕ нашли? Не то? Что вы ищете?

Рег=СоздатьОбъект("Регистр. СостояниеЗаказа");
Ста=СравнитьТА(); *

Если Ста=-2 Тогда //документ еще не записан Если ДатаДок<ПолучитьДатуТА() Тогда Per. ВременныйРасчет(1); РассчитатьРегистрыПо(ДатаДок); КонецЕсли;

ИначеЕсли Ста=-1 Тогда

//дата и время существующего документа меньше даты и времени
// Точки актуальности итогов

Per. ВременныйРасчет{1);

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

ТЗ=СоздатьОбъект("ТаблицаЗначений"); // заполним таблицу значений данными из регистра Per. ВыгрузитьИтоги(ТЗ,,I); ТЗ. УдалитьКолонку("СуммаОтгрузки"); ТЗ. ВыбратьСтроки(); Пока ТЗ. ПолучитьСтроку()=1 Цикл Если ТЗ. СуммаОплаты=0 Тогда

ТЗ. УдалитьСтроку(); КонецЕсли; КОнецЦикла;

ТЗ. УстановитьПараметрыКолонки("Заказ",,,,"Счет",20); ТЗ. УстановитьПараметрыКолонки("СуммаОплаты","Число",

12,2,"Сумма долга",20); // выведем список неоплаченных счетов

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

ПоСчету=ТЗ. ПолучитьЗначение(ВыбСтрг"Заказ"); Покупатель=ПоСчету. Покупатель;

СуммаУЕ=ТЗ. ПолучитьЗначение(ВыбСтр,"СуммаОплаты"); Ч^умма Руб=СуммаУЕ* Кур с; КонецЕсли; КонецЕсли; КонецПроцедуры


Методические материалы обучения партнеров

апрель 2004 г.

74 1С:Предприятие 7.7. Компонента Оперативный учет

Необходимо отметить, что ранее для определения, проводится ли документ в реальном времени или «задним числом», мы использовали метод ИтоГиАктуальны(). Однако он относится к контексту Модуля документа и не мо­жет применяться в Модуле формы. Точно так же, как и метод вспомогательного объекта «Регистры» - Актуальность (). Поэтому в приведенной выше процедуре для тех же целей используется метод документа Сравнить та <). Кроме этого, осо­бое внимание необходимо обратить на использование в тексте системных процедур РассчитатьРегистрыНа() и РассчитатьРегистрыПо{) .

Как следует из Блок-схемы информационных потоков, документ «ПриходДенег» записывает движения в регистры:

В процедуру ОбработкаПроведения () Модуля документа необходимо доба­вить строки:

//По регистру Взаиморасчеты

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

СуммаУЕ,СуммаРуб); //По регистру СостояниеЗаказа Если ПоСчету. Выбран()=1 Тогда

Регистр. СостояниеЗаказа. ДвижениеРасход(ПоСчету,,

СуммаУЕ); КонецЕсли; //Оборотный регистр Регистр. ОборотыКлиента. ДвижениеПриход(Покупатель, СуммаУЕ);

Упражнение №4.4

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

Документ «СнятиеРезерва» предназначен для отмены резервирования това ров, если покупатель отказался их оплатить.

Упражнение №4.5

1. Воспользовавшись Конструктором, создайте документ «Снятие резерва»:

Глава 4. Резервирование товаров

2. Добавьте в документ реквизит шап­ки «ПоСчету», аналогичный одноименному реквизиту документа «ПриходДенег».

документа, диалог)

которой может выглядеть, так как это изо­бражено на рис. 4.3.

Рис.4.3. Форма документа

«Снятие Рез ерва»

4. При выборе счета предусмотрите
тпэттшзггписка" счетотггтго которым" осталсяг
не отгруженный и неоплаченный товар, -В |
этом случае текст Модуля формы может
быть следующим: —--—

Процедура ГТриОткрытим ()

ПриЗаписиПерепроводить(1); Конец11роцедурь1

//вывод списка счетов с неотгруженным и неоплаченным товаром Процедура ПриВыбореСчета()

Перем ВыбСтр;

Рег—'СоздатьОбъект ( "Регистр. СостояниеЗаказа" ) ; Ста^СравнитьТА(};

"Если ста--2 Тогда //документ еще не записан Если ДатаДок<ПолучитьДатуТА() Тогда

--1- Per.

-РасечитатьРегистрыПо(ДатаДок);

"КонецЕсли;

//дачра и время существующего документа меньше //даты и времени Точки актуальности итогов ИначеЕсли Ста=-1 Тогда

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

(ТекущийДокумент () )7

"КонецЕсли;

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

// выведем список счетов, имеющих резерв

Per. ВыОратьИтоги();

Пока Per. ПолучитьИтог 0=1" Цикл СТГТДо^а 1вйтЁГЭна че ни е ТТЗТ 3 а ка ^

.Заказ/Строка (ТЗ. Заказ)' + - ( отгрузка : 'Y 4-Формат (ТЗ."СуъШаОт'трузки,¥'"•) оплата:"+Формат(ТЗ. СуммаОплаты,"410.2")+

~-у>е •'!_[ LJ

-—ПНПёоп л а ч е иные с ч е та

{ВыбСтр,

Тог да

1ЦоСчету=ВыбСтр;


Методические материалы обучения партнеров

апрель 2004 г.


76

1С :Пред приятие 7.7. Компонента Оперативный учет

КонецЕсли; КонецПроцедуры

Процедура ПриНачалеВыбораЗначения{Знач1,Флаг) // при выборе счета вызовем список неоплаченных счетов Если Знач1="ПоСчету" Тогда

Флаг=0; //отменим стандартный процесс выбора значения ПриВыбореСчета() КонецЕсли;; КонецПроцедуры

потоков, документ

Снятие резерва с уменьшением сумм отгрузки и оплаты


5. Как следует из Блок-схемы информационных «СнятиеРезерва» записывает следующие движения:

Добавьте в процедуру Обра бот каПроведения (} Модуля документа следую­щий текст:

Процедура ОбработкаПроведения{) // по регистру РезервыТоваров Рег=СоздатьОбъект{"Регистр. РезервыТоваров");

—-Рег1=СоздатьОбъект("Регистр. СостояниеЗаказа");

—-Если ИтогиАктуальны{) =0 Тогда

-- —Per. ВременныйРасчет{1};

___ Perl. ВременныйРасчет{1);

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

—. Рег. УстановитьФильтр(ПоСчету);

- Пока Per. ПолучитьИтог(}=1 Цикл

__ Регистр. РезервыТоваров. ПоСчету=ПоСчету;

--- Регистр. РезервыТоваров. Товар^Рег. Товар;

--- Регистр. РезервыТоваров. РезервТовара=Рег. РезервТовара;

..__------ Регистр. РезервыТоваров. ДвижениеРасходВыполнить(};

_ .-KG-; ю-^Ц-^кЛхх;-_____ -......... —__________ —_________ —-__ —

- // по регистру СостояниеЗаказа

СумОтгр=Рег1.Остаток(ПоСчету,"СуммаОтгрузки");

СумОпл=Рег1.Остаток(ПоСчету,"СуммаОплаты");

- Если (СумОтгрХ)) или (СумОпл>0) Тогда

--- Регистр. СостояниеЗаказа. ДвижениеРасход(Посчету, СумОтгр,

~-- _ СумОпл) ; ,

-- Ко н е цЕ с л и ;

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

Методические материалы обучения партнеров

77

Глава 4. Резервирование товаров

4.3. Ввод документа «Расходная накладная» на основании документа «Счет»

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

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

1.  В окне редактирования документа нажать на кнопку [Ввод на основа­
нии...] и в открывшемся окне диалога указать: документы каких видов
будут являться основаниями для данного вида документов.

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

Текст этой процедуры должен быть разработан специалистом, осуществляю­щим конфигурирование системы. Для облегчения задачи разработки процедуры ВводиаОсновании () в системе «1С:Предприятие» существует «Конструктор ввода на основании».

По условию задачи нам необходимо обеспечить возможность ввода Расходной накладной на основании Счета.

Упражнение'-№4,6

Идентификатор

Основание

Синоним

Основание

Комментарий

Документ, на основании которого вводится накладная

Тип значения

Документ

Вид

Счет

2.  В окне редактирования свойств документа «Расходная накладная» нажмите
кнопку «Ввод на основании» и в появившемся окне, в разделе «Вводить на основа­
нии:», поставьте «V» в квадрате слева от документа «Счет». Нажмите кнопку «ОК».

3.  С помощью «Конструктора ввода на основании» добавьте одноименную
процедуру в Модуль формы документа «Расходная накладная».

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

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

73_______________ 1С:Предприятие 7.7. Компонента Оперативный учет

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

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

Тогда процедура ВводНаОсновании () для документа «Расходная накладная» примет вид:

Процедура ВводНаОсновании(ДокОснование) Если ДокОснование. Проведен(}=0 Тогда

Предупреждение("Документ """+ДокОснование+

""" не проведен!. Ввод на основании запрещен."); СтатусВозврата(0); Возврат; КонецЕсли;

Рег^СоздатьОбъект("Регистр. РезервыТоваров"); Рег1=СоздатьОбъект("Регистр. ОстаткиТоваров"); Если Per. СводныйОстаток(ДокОснование,,"РезервТовара") =Ц>

Тогда Предупреждение("По счету "+ДокОснование+

" все товары отгружены!"); СтатусВозврата(0); Возврат; КонецЕсли;

// заполним шапку документа Курс = ДокОснование. Курс; ДатаКурса = ДокОснование. ДатаКурса; Покупатель = ДокОснование. Покупатель; Основание = ДокОснование; ВвестиЗначение(Склад,"Выберите склад!"); РежимПровёдения=0; ДокОснование. ВыбратьСтроки(); Пока ДокОснование. ПолучитьСтроку()=1 Цикл

// найдем оставшееся количество зарезервированного товара Ост=Рег. Остаток(ДокОснование,

ДокОснование. Товар,"РезервТовара") Если Ост>0 Тогда

Методические материалы обучения партнеров

79

Глава 4. Резервирование товаров

// заполним табличную часть документа

НоваяСтрока ( ) ; .

Товар=ДокОснование. Товар;

Единица = Товар. ЕдиницаИзмерения; : •

Количество=0ст;

Цена=ДокОснование. Цена;

СуммаУЕ=Цена*Количество;

// проверим количество оставшегося товара на складе

Если Товар. Родитель. ВидНоменклатуры=

Перечисление. ВидНоменклатуры. Товар Тогда Ост=Рег1 .Остаток (Товар, Склад, "Количество") ; Если Ост<Количество Тогда Если Ост<=0 Тогда

Сообщить ("Товар """+Товар-н

отсутствует!"

""" на складе """+Склад+ УдалитьСтроку ( ) ; Иначе

Количество=0ст; Сумма УЕ=Цена* Количество; КонецЕсли; КонецЕсли; КонецЕсли;

Сумма Руб=СуммаУЕ * Курс ; КонецЕсли; КонецЦикла;

Если КоличествоСтрок()=0 Тогда

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

Упражнение №4.7

1. Предусмотрите аналогичное заполнение документа «Расходная накладная» в
случае изменения значения реквизита Основание. Для этого формула в свойствах
этого поля ввода введите имя процедуры ПриВыбореОснования (). Текст этой про-
цедуры может быть следующим:____________________________________________

// при вводе нового документа-основания // заполним реквизиты текущего документа Процедура ПриВыбореОснования()

УдалитьСтроки();

ВводНаОсновании(Основание); КонецПроцедуры

апрель 2004 г.

80 1C предприятие 7.7. Компонента Оперативный учет

2. В Модуле документа «Расходная накладная» добавьте необходимые строки
текста, связанные с движениями регистров «РезервыТоваров» и
«СостояниеЗаказа». После строки:______________________________________

[Регистр. ОстаткиТоваров. ДвижениеРасходВыполнить () ;__________________________ |

добавьте строки текста

//движение регистра РезервыТоваров Если Основание. Проведен()=1 Тогда

Регистр. РезервыТоваров. ДвижениеРасход(

Основание, Товар,Количество); КонецЕсли;

После строк:

Иначе

Сообщить ("На "+ДатаДок+", в строке №"+НомерСтроки4-

" совсем нет товара "+Товар+" !"); КонецЕсли;

строки текста, связанные с движением регистра «РезервыТоваров»

Иначе

//движение регистра РезервыТоваров Если Основание. Проведен()=1 Тогда

Регистр. РезервыТоваров. ДвижениеРасход(Основание,

Товар, Количество) КонецЕсли;

А после строки

Регистр. Взаиморасчеты. ДвижениеПриход{Покупатель,

Итог("СуммаУЕ"),Итог{"СуммаРуб"))

добавьте строки

//движение регистра СостояниеЗаказа Если Основание. Проведен{)=1 Тогда

Регистр. СостояниеЗаказа. ДвижениеРасход(Основание,

Итог("СуммаУЕ"),); КонецЕсли;

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

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

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

81

Глава 4. Резервирование товаров

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

//отменим проведение всех документов, введенных на основании

//данного счета

Процедура ОбработкаУдаленияПроведения()

Докум^СоздатьОбъект("Документ");

Докум, ВыбратьПодчиненныеДокументы(

ДатаДок,,ТекущийДокумент());

Пока Докум. ПолучитьДокумент()=1 Цикл Докум. СделатьНеПроведенным{);

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

Заметим, что в этом случае, если пользователь случайно отменил проведение документа «Счет», который уже в последующих документах упомянут, то тогда будет отменена и вся «цепочка» документов. Это может приводить (при большом числе документов) к ненамеренным ошибкам в учете. Поэтому лучше все же в про­цедуре ОбработкаУдаленияПроведения () контролировать, что по данному доку­менту уже была какая-то работа:

//отменим проведение всех документов, введенных на основании //данного счета

Процедура ОбработкаУдаленияПроведения() Докум=СоздатьОбъект("Документ"); Докум. ВыбратьПодчиненныеДокументы(ДатаДок,,

ТекущийДокумент{)); .

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

Сообщить("Для документа "+ТекущийДокумент()+ " нельзя отменить его проведение, т. к. он имеет "+ " подчиненные проведенные документы! "); .-СтатусВозврата(О) ; КонецЕсли; КонецЦикла; КонецПроцедуры

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


Методические материалы обучения партнеров

апрель 2004 г.

82

Глава 5. Учет партий товаров

5.1. Принципы партионного учета

В учебной задаче предполагается, что учет товаров ведется в разрезе товаров и складов, причем списание проданных товаров осуществляется по методу FJFO или LIFO. Для выбора одного из этих методов в Конфигурацию добавим еще одну кон­станту МетодСписания, типом значения которой будет одноименное перечисление, имеющее следующие значения: lifo, fifo, Средняя.

Метод FIFO основан на предположении, что себестоимость товаров, приобре­тенных в первую очередь, должна быть отнесена к товарам, проданным в первую очередь. Его называют - «метод оценки запасов по ценам первых покупок (first-in, first-out method - FIFO). Эффект от использования метода FIFO заключается в том, что материальные запасы на конец периода оцениваются по ценам последних поку­пок, а в себестоимости реализованной продукции используются цены первых поку­пок товара. В период постоянного роста цен метод FIFO дает наиболее высокий из возможных уровень чистого дохода. Причина в том, что фирма стремится повысить цены реализации при росте текущих цен, не принимая во внимание тот факт, что материальные запасы могли быть приобретены до момента роста цен. Соответст­венно в период снижения цен наблюдается обратный процесс. Поэтому основным недостатком метода FIFO является то, что он увеличивает влияние цикла экономи­ческого развития на показатель дохода.

Метод LIFO базируется на той предпосылке, что себестоимость товаров, при­обретенных последними, используется для определения стоимости товаров, про­данных в первую очередь, а себестоимость запасов на конец периода рассчитывается на основе себестоимости, приобретенных первыми. Его называют -«метод оценки запасов по ценам последних покупок (last-in, first-out method - LIFO). Безусловно, подобное допущение не сочетается с действительным движением това­ров на многих предприятиях. Тем на менее сторонники метода LIFO считают, что наиболее точное определение прибыли возможно лишь при условии соотнесения текущей себестоимости товаров с текущей продажной ценой, не взирая на то, какие именно товары были фактически проданы. При движении цен как вверх, так и вниз метод LIFO предполагает, что себестоимость реализованной продукции отразит издержки в соответствии с уровнем цен на момент продажи. В результате метод LIFO показывает меньшую чистую прибыль в период проявления инфляционных процессов и, соответственно, большую чистую прибыль в период проявления де инфляционных процессов, чем любой другой метод. В качестве критического заме­чания по отношению метода LIFO можно отметить тот факт, что в Балансе матери­альные запасы оценены и отражены по ценам первых покупок, и эта оценка часто не совпадает с реальной стоимостью материальных запасов.

Методические материалы обучения партнеров

83

Глава 5. Учет партий товаров

Для обеспечения возможности партионного учета в регистр ОстаткиТоваров добавим новое измерение Партия со следующими свойствами:

Идентификатор

Партия

Синоним

Комментарий

Тип значения

Документ

Вид

ПриходнаяНакладная

Длина

Точность

Разделять Триады

Отбор движений

Отбор итогов

Необходимо отметить, что следствием введения данного измерения в регистр ОстаткиТовара будет появление в Модуле документа «Приходная накладная»

следующей строки:_________________________________________________________

I_____ Регистр. ОстаткиТоваров. Партия = ТекущийДокумент () ;__________ [

Эта строка расположена перед строкой:________________________________________

I_____ Регистр. ОстаткиТоваров. ДвижениеПриходВыполнить () ;_________ ]

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

Кроме этого, в выражениях на встроенном языке в нашей конфигурации, где использовался метод регистра Остаток (Измерение 1,Измерение2, Ресурс) , его необходимо заменить методом СводныйОстаток (Измерение!,Измерение2, ,Ресурс). Аналогичным образом, в методе регистра ОстаткиТовара СводныйОстаток (Измерение!, , Ресурс) необходимо добавить символ «,»: СводныйОстаток (Измерение!, ,, Ресурс). Теперь осталось организовать списа­ние товара по партиям при проведении документа «Расходная накладная». Реализу­ем эту возможность с помощью существующего в системе «1С:Предприятие» механизма запросов.

5.2. Запросы в системе «1С:Предприятие»

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

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

апрель 2004 г.

84

1С:Предлриятие 7.7. Компонента Оперативный учет

Основная отличительная черта запросов - возможность создания массива дан­ных с произвольными группировками, которые могут не совпадать с группировка­ми, доступными при обработке справочников, документов, регистров и т. д. Более важной причиной использования механизма запросов при программировании моду­лей системы «1C: Пред приятие» является их более быстрая работа при обработке хранящихся в системе данных, чем работа встроенных методов регистров3.

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

•  Создание объекта типа «Запрос» при помощи функции
СоздатьОбъект.

•  Присвоение ссылки на этот объект какой-либо переменной. Дальней­
шее обращение к объекту производится через обращение к этой пере­
менной.

•  Вызов метода Выполнить {), которому в качестве параметра передает­
ся текст запроса, написанный на специальном языке запросов. Метод
Выполнить <) производит анализ текста запроса, выполняет выборку
данных из объектов конфигурации, группирует их и накапливает, если
это необходимо, итоговые значения по каждой из возможных комби­
наций значений группировок.

• Организация циклической обработки выборки.
Вот общая схема использования объекта:

НашЗалрос=СоздатьОбъект("Запрос");

//Создание объекта и присвоение ссылки на него переменной

НашЗапрос

ТекстЗапроса=

"//Далее следует текст запроса, написанный на языке

запросов";

//Если ошибка в запросе, то выход из процедуры

Если НашЗапрос. Выполнить(ТекстЗапроса)=0 тогда

Возврат;

КонецЕсли;

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

Рассмотрим подробнее порядок написания текста запроса. В начале текста за-
проса указывается период, за который будет формироваться запрос:________

{Период с Дата! по Дата2

//Дата! - начало периода формирования запроса

3 Конечно, можно так «плохо» написать запрос, что методы выборки для соответст-

вующего объекта метаданных могут «обогнать» запрос по скорости работы.___________

Методические материалы обучения партнеров

85

Глава 5. Учет партий товаров

|7/Дага2 - конец периода формирования запроса

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

После указания периода запросов следует объявление внутренних переменных:

Переменная, которая включает в выборку всех клиентов, встречающихся во

всех документах вида ПриходнаяНакладная за период запроса. _____

|Переменная1= Документ. ПриходнаяНакладная. Поставщик;

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

|Переменная2=Справочник. Контрагенты. ТекущийЭлемент;______

Переменная, которая включает в выборку все товары, встречающиеся в регист-

ре ОстаткиТоваров за период запроса._______________________________

I | ПеременнаяЗ = Регистр„ОстаткиТоваров. Товар;______________________ ]

Переменная, которая включает в выборку все остатки товаров за период запро­
са^________________________________________________________________________

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12