Добавил:
sora.alai.102@gmail.com Делаю работы на заказ. Какие именно? Пишите. Или регайтесь на бирже, где я работаю: https://vsesdal.com/promo?ref=748568 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013)

.pdf
Скачиваний:
2185
Добавлен:
25.11.2018
Размер:
31.3 Mб
Скачать

Рис. 3.65. Вывод остатков товарно-материальных ценностей в разрезе субконто «Номенклатура» и «Склады»

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

Листинг 3.56. Вывод остатков товарно-материальных ценностей с отбором по значению субконто

В данном запросе в условии отбора в предложении ГДЕ применяется конструкция ВЫБОР КОГДА … ИНАЧЕ … КОНЕЦ. В результате условие отбора по значению второго субконто применяется только для счета товаров.

Выберем в обработке Субконто в качестве товара Паркер, а в качестве склада Филиал и получим следующий результат (рис. 3.66).

Рис. 3.66. Вывод остатков товарно-материальных ценностей с отбором по значению субконто

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

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

В нашей демонстрационной конфигурации журнал проводок по счету Касса за июнь 2013 года содержит четыре проводки за первое и второе июня по 10 рублей каждая. Входящий остаток составил 15 рублей, исходящий остаток – 55 рублей (табл. 3.3).

Таблица 3.3. Проводки по счету «Касса» за июнь 2013

Период

Счет дебета

Счет кредита

Сумма

Текущий остаток

 

 

 

 

 

Остаток 31.05.2013

 

 

 

15,00

01.06.2013 12:00:00

Касса

Покупатели

10.00

25,00

 

 

 

 

 

01.06.2013 23:59:59

Касса

Покупатели

10.00

35,00

 

 

 

 

 

Остаток 01.06.2013

 

 

 

35,00

 

 

 

 

 

02.06.2013 0:00:00

Касса

Покупатели

10.00

45,00

 

 

 

 

 

02.06.2013 12:00:00

Касса

Покупатели

10.00

55,00

 

 

 

 

 

Остаток 02.06.2013

 

 

 

55,00

 

 

 

 

 

Для анализа остатка мы воспользуемся функцией, которая получает остаток на счете Касса при помощи следующего запроса (листинг 3.57).

Листинг 3.57. Пример получения остатков регистра бухгалтерии

В запросе получается остаток по счету Касса на тот момент времени, который мы будем передавать ему в качестве параметра. Наша задача – получить остаток на счете Касса, который там сформировался к концу 1 июня (или, другими словами, к началу дня 2 июня).

Для этого установим значение поля ввода Дата обработки Работа с виртуальными таблицами как 01.06.2013 и рассмотрим следующие варианты:

1.Сначала установим значение параметра запроса Момент равным дате (листинг

3.58).

Листинг 3.58. Первый вариант установки параметра запроса

Поскольку дата в системе «1С:Предприятие» включает в свой состав время, то значение параметра Момент станет равным 01.06.2013 00:00:00.

1.Установим значение параметра запроса Момент равным концу дня указанной даты

(листинг 3.59).

Листинг 3.59. Второй вариант установки параметра запроса

Значение параметра Момент станет равным 01.06.2013 23:59:59.

1.Установим значение параметра запроса Момент равным началу следующего дня от указанной даты (листинг 3.60).

Листинг 3.60. Третий вариант установки параметра запроса

Значение параметра Момент станет равным 02.06.2013 00:00:00.

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

Листинг 3.61. Четвертый вариант установки параметра запроса

Значение параметра Момент станет равным 01.06.2013 23:59:59, включая движения документа, проведенного в последнюю секунду этого дня.

Результаты различных вариантов установки момента времени при получении остатков приведены в следующей таблице (табл. 3.4).

Таблица 3.4. Сводная таблица полученных результатов

Метод

Момент

Остаток

Комментарий

1

 

01.06.10

15,00

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

 

0:00:00

начало дня

 

 

 

 

 

 

 

 

 

Конец

01.06.10

 

Получили остаток на конец дня, но в остатки не

2

текущего

25,00

23:59:59

попала последняя проводка, сделанная в 23:59:59

 

дня

 

 

 

 

 

 

 

 

 

 

 

Начало

02.06.10

 

 

3

следующего

0:00:00

35,00

Правильно!

 

дня

 

 

 

 

 

 

 

 

4

Граница

Граница

35,00

Правильно!

(включая)

 

 

 

 

 

 

 

 

 

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

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

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

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

Получение оборотов

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

Виртуальная таблица Обороты имеет следующий состав полей:

<Имя измерения> – поле, содержащее значения измерения регистра, в разрезе которого посчитан оборот. Количество таких полей равно количеству измерений, определенных для регистра как объекта конфигурации; <Имя измерения>Кор – поле, содержащее значения корреспондирующего

небалансового измерения регистра, в разрезе которого посчитан оборот; <Имя общего реквизита> – поле, содержащее значения общего реквизита с именем,

заданным в конфигурации. Такие поля создаются для общих реквизитов, являющихся разделителями (режим разделения данных – Разделять) с режимом использования разделяемых данных НезависимоИСовместно, в которых участвует данный регистр;

<Имя ресурса>Оборот – поле, содержащее оборот ресурса регистра по именам ресурсов, как они заданы в конфигураторе, с добавлением слова Оборот. Содержит разницу оборотов (оборот дебета минус оборот кредита); <Имя ресурса>ОборотДт – поле, содержащее дебетовый оборот ресурса регистра

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

ОборотДт;

<Имя ресурса>ОборотКт – поле, содержащее кредитовый оборот ресурса регистра по именам ресурсов, как они заданы в конфигураторе, с добавлением слова

ОборотКт;

<Имя ресурса>КорОборот – поле, содержащее оборот небалансового ресурса регистра корреспондирующих счетов, по именам ресурсов, как они заданы в конфигураторе, с добавлением слова КорОборот. Содержит разницу оборотов (кор оборот дебета минус кор оборот кредита); <Имя ресурса>КорОборотДт – поле, содержащее дебетовый оборот

небалансового ресурса регистра корреспондирующих счетов, по именам ресурсов, как они заданы в конфигураторе, с добавлением слова КорОборотДт; <Имя ресурса>КорОборотКт – поле, содержащее кредитовый оборот

небалансового ресурса регистра корреспондирующих счетов, по именам ресурсов, как они заданы в конфигураторе, с добавлением слова КорОборотКт; Счет – имеет тип ПланСчетовСсылка.<имя>. Содержит счет, в разрезе которого посчитан оборот;

КорСчет – имеет тип ПланСчетовСсылка.<имя>. Содержит корреспондирующий счет, в разрезе которого посчитан оборот;

Субконто<Номер субконто> – имеет тип Характеристика.<имя>. Содержит значение субконто, в разрезе которого посчитан оборот. Количество полей Субконто зависит от максимального количества субконто на счете плана счетов. Номер субконто начинается с 1. Набор и порядок субконто определяются параметром

Субконто; КорСубконто<Номер субконто> – имеет тип Характеристика.<имя>. Содержит

значение корреспондирующего субконто, в разрезе которого посчитан оборот. Количество полей Субконто зависит от максимального количества субконто на счете плана счетов. Номер субконто начинается с 1. Набор и порядок субконто определяются параметром КорСубконто; НомерСтроки – имеет тип Число. Существует только в случаях, если указано

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

параметра виртуальной таблицы оборотов Периодичность: Год, Полугодие,

Квартал, Месяц, Декада, Неделя, День, Секунда, Минута, Час, Регистратор или

Запись. Данное поле содержит начальную дату и время периода, к которому относится оборот регистра; Регистратор – имеет тип ДокументСсылка.<имя>. Существует только в случаях,

если указано значение параметра виртуальной таблицы оборотов Периодичность:

Регистратор или Запись. Данное поле содержит ссылку на документ-регистратор, к которому относится оборот регистра.

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

НачалоПериода, КонецПериода – имеет тип Дата, МоментВремени или Граница.

Период времени, за который будут получены обороты. Если параметры не заданы, то будут получены все обороты регистра; Периодичность – содержит конструкцию языка запросов. Позволяет задать

дополнительную группировку данных по стандартным периодам. Возможные значения: Период, Год, Полугодие, Квартал, Месяц, Декада, Неделя, День, Час,

Минута, Секунда, Регистратор, Запись. Если периодичность не задана или задана как Период, дополнительной группировки не выполняется; УсловиеСчета – содержит конструкцию языка запросов. Позволяет установить

фильтр по счету или счетам. Как правило, содержит следующие условия: Счет = (В

ИЕРАРХИИ, В) &Счет; Субконто – имеет тип ПланВидовХарактеристикСсылка.<имя> или содержит

массив значений этого типа. Задает набор и порядок субконто, которыми можно оперировать в запросе. А также служит для отбора оборотов регистра по видам субконто. Если параметр задан, то будут выбираться данные только по тем счетам, у которых определены все указанные виды субконто. Если параметр не задан, то ограничений по видам субконто нет. Субконто определяются позиционно по соответствующему счету; Условие – содержит конструкцию языка запросов. Позволяет устанавливать отбор

данных виртуальной таблицей по значениям субконто и измерений регистра бухгалтерии; УсловиеКорСчета – содержит конструкцию языка запросов. Позволяет установить

фильтр по корреспондирующему счету или счетам. Как правило, содержит следующие условия: КорСчет = (В ИЕРАРХИИ, В) &КорСчет; КорСубконто – имеет тип ПланВидовХарактеристикСсылка.<имя> или содержит

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

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

Пример 1

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

Также нужно узнать с какого корреспондирующего счета (субконто корреспондирующего счета) были получены те или иные товары. Для этого нужно получить обороты в разрезе поля КорСчет и КорСубконто (листинг 3.62).

Листинг 3.62. Поступление и списание товаров со счета «Товары»

Взапрос в качестве параметра передается условие по счету, где СчетТоваров – ссылка на предопределенный счет Товары плана счетов.

Врезультате мы видим, какой именно товар (Субконто1) с какого корреспондирующего счета был получен (КорСчет), от какого контрагента (КорСубконто1) и в каком количестве был получен (рис. 3.67).

Рис. 3.67. Поступление и списание товаров со счета «Товары»

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

Чтобы проанализировать, из какого количества авторучек Паркер какое количество Комплектов было собрано, нам потребуется использовать в запросе поле с постфиксом КорОборот. Наглядно представить эту информацию можно с помощью следующего запроса (листинг 3.63).

Листинг 3.63. Корреспонденция счета «Товары» с самим собой. Комплектация товаров

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

Рис. 3.68. Корреспонденция счета «Товары» с самим собой. Комплектация товаров

Пример 2

Рассмотрим следующую задачу. Предположим, необходимо получить оборот между счетами, отражающий объем выручки, полученной в кассу от покупателей. Для этого нужно получить обороты за период в дебет счета Касса с кредита счета Покупатели в разрезе контрагентов (субконто Контрагенты прикреплено к счету Покупатели плана счетов). Также нужно получить сумму возвращенных покупателям средств из кассы и разницу между выручкой и возвратами. Это можно сделать с помощью следующего запроса (листинг 3.64).

Листинг 3.64. Обороты между счетами «Касса» и «Покупатели»

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

(СуммаОборот).

Результат выполнения запроса представлен на рис. 3.69.

Рис. 3.69. Обороты между счетами «Касса» и «Покупатели»

Особенности использования периодов и моментов времени при получении оборотов

Параметр Период виртуальной таблицы оборотов может принимать значения типа Дата, МоментВремени или Граница. Рассмотрим особенности использования этих объектов при получении оборотов.

В нашей демонстрационной конфигурации журнал проводок по счету Касса за июнь 2013 года содержит четыре проводки за первое и второе июня по 10 рублей каждая (табл. 3.5).

Таблица 3.5. Проводки по счету «Касса» за июнь 2013

Период

Счет дебета

Счет кредита

Сумма

01.06.2013 12:00:00

Касса

Покупатели

10.00

 

 

 

 

01.06.2013 23:59:59

Касса

Покупатели

10.00

 

 

 

 

Оборот за 01.06.2013

 

 

20,00

 

 

 

 

02.06.2013 0:00:00

Касса

Покупатели

10.00

 

 

 

 

02.06.2013 12:00:00

Касса

Покупатели

10.00

 

 

 

 

Оборот за 02.06.2013

 

 

20,00

 

 

 

 

Для анализа оборотов мы воспользуемся функцией, которая получает обороты на счете Касса за период с НачПериода по КонПериода при помощи следующего запроса (листинг

3.65).