Новый граница 1с 8.3. Момент времени и граница, назначение, примеры использования. Обороты Дебет Кретит

; Виртуальные таблицы; Вложенные запросы (в разработке).

Задача 1: Получить остатки номенклатуры на указанном складе на конец месяца.

Задача 2: Получить актуальную цену на конец месяца по указанной номенклатуре и типу цен.

Новые механизмы: заполнение параметров виртуальных таблиц.

Теоретическая часть урока №6

У некоторых объектов метаданных помимо основной таблицы в базе данных присутствуют виртуальные таблицы. Они облегчают доступ к некоторой информации содержащейся в основной таблице. Использовать данные виртуальных таблиц можно при помощи запросов, либо при помощи специальных методов встроенного языка 1с 8.

Рассмотрим основные виды виртуальных таблиц 1с для различных объектов метаданных:

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

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

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

СрезПоследних и СрезПервых


Остатки в регистре накопления

  • Период . В данном поле необходимо задать параметр, в который будет передана дата или граница, на которую будет осуществляться получение остатков. У таблицы Остатки существует небольшая особенность, если вам необходимо получить остаток на определенную дату, то передать в параметр необходимо эту дату плюс одну секунду, либо границу с типом границы Включая ;Пример 1 Дата = ТекущаяДата(); Запрос.УстановитьПараметр("Период", Дата + 1);

    Дата = ТекущаяДата(); Граница = Новый Граница(Дата, ВидГраницы.Включая); Запрос.УстановитьПараметр("Период", Граница);

Остатки в регистре бухгалтерии

  • УсловиеСчета Счет виртуальной таблицы. В отличии поля Условия , для создания условий доступно только измерение Счет;
  • Субконто . В данном поле задается параметр, содержащий массив видов субконто, которые должны анализироваться в данной виртуальной таблице. Например, если вы хотите получить остатки по 41 счету бухгалтерского учета, но вам не нужен разрез по складам, то в данный параметр можно передать массив состоящий из одного элемента: Номенклатура из плана видов характеристик ВидыСубконтоХозрасчетные . Ном = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура; Субконто = Новый Массив; Субконто.Добавить(Ном); Запрос.УстановитьПараметр("Субконто", Субконто);

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

Обороты в регистре накопления

  • НачалоПериода . Параметр в котором хранится дата начала периода, за который будут браться обороты;
  • КонецПериода . Параметр в котором хранится дата окончания периода, за который будут браться обороты;
  • Периодичность . Определяет группировку по периоду в виртуальной таблице. Если, например, указана периодичность Месяц , то данные в таблице будут сгруппированы по всем измерениям и месяцу, в полях таблицы появится поле Период , в котором будет хранится первый день месяца, в котором было сделано движение регистра. Если оставить поле Периодичность пустым, то периода в полях виртуальной таблицы не будет. Помимо периодичности связанной с временными промежутками есть еще несколько ее типов:
    • Запись . Данные будут выбираться по отдельным записям регистра, точно также как в полной таблице. В полях появляются Период и Регистратор (документ который сделал данное движение);
    • Регистратор . Данные будут сгруппированы по документу сделавшему движения в регистре. Данная группировка удобна как раз тогда, когда вам необходимо иметь разрез по документам. В полях появляются Период и Регистратор;
    • Период . Данные группируются по измерениям регистра за весь период оборота;
    • Авто. Данные группируются до секунды, в полях появляются Регистратор , ПериодСекунда , …. ПериодГод .
Обороты в регистре бухгалтерии

  • УсловиеКорСчета . В данном поле задается условие на поле корреспондирующий счет проводки. В отличии поля Условия , для создания условий доступно только измерение КорСчет;
  • КорСубконто . В данном поле задается параметр, содержащий массив видов субконто корреспондирующего счета, работает аналогично параметру Субконто , см. раздел «Остатки в регистре бухгалтерии».
Остатки и обороты в регистре накопления

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

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

Обороты Дебет Кретит

  • УсловиеСчетаДт . В данном поле задается условие на поле СчетДт виртуальной таблицы, это счет левой части бухгалтерской проводки;
  • УсловиеСчетаКт . В данном поле задается условие на поле СчетКт виртуальной таблицы, это счет правой части бухгалтерской проводки;
  • СубконтоДт . В данном поле задается параметр, содержащий массив видов субконто, которые должны анализироваться для левой (дебетовой) части проводки;
  • СубконтоКт . В данном поле задается параметр, содержащий массив видов субконто, которые должны анализироваться для правой (кредитовой) части проводки;
Движения с субконто

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

Практическая часть урока №6

В данном разделе нам предстоит решить две задачи по пройденной теме.

Задача 1

Получить остатки номенклатуры на указанном складе на конец месяца.

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


В итоге у нас получится запрос со следующим текстом:

Запрос = Новый Запрос; Ном = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура; Склады = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады; Субконто = Новый Массив; Субконто.Добавить(Склады); Субконто.Добавить(Ном); Граница = Новый Граница(ТекущаяДата(),ВидГраницы.Включая); Счет41 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41"); Запрос.УстановитьПараметр("Субконто" , Субконто); Запрос.УстановитьПараметр("ДатаОстатков", Граница); Запрос.УстановитьПараметр("Склад" , Склад); Запрос.УстановитьПараметр("Счет41" , Счет41); Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстатки.Субконто1 КАК Склад, | ХозрасчетныйОстатки.Субконто2 КАК Номенклатура, | ХозрасчетныйОстатки.КоличествоОстаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОстатков, | Счет В ИЕРАРХИИ (&Счет41), | &Субконто, | Субконто1 = &Склад) КАК ХозрасчетныйОстатки";

Задача 2

Получить актуальную цену на конец месяца по указанной номенклатуре и типу цен.

  • Создадим новый запрос;
  • Запустим конструктор запросов;
  • В раздел Таблицы перетащим таблицу ЦеныНоменклатуры.СрезПоследних ;
  • Выделим данную таблицу и нажмем кнопку Параметры виртуальной таблицы ;
  • В поле Период впишем параметр, в который будет передаваться дата на которую будет браться срез последних;
  • В поле Условие вручную или используя редактор произвольных выражений наложим отбор на поля ТипЦен и Номенклатура;
  • В раздел Поля перетащим ресурс Цена ;
  • Запрос готов, нажимаем кнопку «ОК» в нижней части окна конструктора.

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

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

МоментВремени() - это момент непосредственно ПЕРЕД позицией документа (аналог РассчитатьРегистрыНа(ТекущийДокумент() в 7-рке), а если необходимо получить момент непосредственно после позиции документа, то используйте объект Граница
Код 1C v 8.х МоментСразуПослеДокумента = Новый Граница(ДокументСсылка,ВидГраницы.Включая)

Код 1C v 8.х // Пример создает момент времени по дате и ссылке на объект в базе данных.
Момент = Новый МоментВремени(ТекДокумент.Дата, ТекДокумент.Ссылка);

При получение остатков:
"Момент времени" - виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя ДАТУ и ССЫЛКУ НА ДОКУМЕНТ)
<Виртуальная> таблица остатков не хранится в БД, а строится в момент обращения к ней.
1. подбирается больший или равный значению ПАРАМЕТР момент времени, на который РАССЧИТАНЫ остатки
2. на этот момент получаются остатки из таблицы итогов
3. если момент времени, на который считаются остатки, не совпадает с моментом времени итогов, то остатки ДОСЧИТЫВАЮТСЯ по движениям.

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

ВидГраницы - Определяет набор видов границ по отношению к граничному значению:
ВидГраницы.Включая - Граница включает граничное значение.
ВидГраницы.Исключая - Граница исключает граничное значение.
Код 1C v 8.х Граница = Новый Граница(Дата, ВидГраницы.Включая);
Запрос.УстановитьПараметр("КонГраница", Граница);

Пример получения остатков на дату документа, включая его движения
Запрос.Текст =
"ВЫБРАТЬ

|ИЗ

Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Включая));

Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру("00012","31.12.2009 23:59:59");
Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Исключая));
// или так: Запрос.УстановитьПараметр("МомВрем", МомВрем.МоментВремени());
Запрос.УстановитьПараметр("Физик", Справочники.ФизическиеЛица.НайтиПоКоду("365"));
ВывестиРезультат(Запрос.Выполнить());

Информация взята с сайта

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

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

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

Если поставка будет иметь место в порту назначения, на борту судна, либо на пристани, то следует применять термины DES или DEQ.


А. ОБЯЗАННОСТИ ПРОДАВЦА

Б. ОБЯЗАННОСТИ ПОКУПАТЕЛЯ

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

Б.1. Уплата цены
Покупатель обязан уплатить предусмотренную договором купли-продажи цену товара.

А.2. Лицензии, свидетельства и иные формальности
Продавец обязан за свой счет и на свой риск получить любую экспортную лицензию или другое официальное свидетельство, требуемое для предоставления товара в распоряжение покупателя.
Продавец обязан выполнить, если это потребуется,* все таможенные формальности для экспорта товара в названное место поставки на границе и для его транзитной перевозки через третьи страны.

Б.2. Лицензии, свидетельства и иные формальности
Покупатель обязан за свой счет и на свой риск получить любую импортную лицензию или другое официальное свидетельство, а также выполнить, если это потребуется,* все таможенные формальности, требуемые для импорта товара и для его последующей перевозки.

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

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

МоментВремени() - это момент непосредственно ПЕРЕД позицией документа (аналог РассчитатьРегистрыНа(ТекущийДокумент() в 7-рке), а если необходимо получить момент непосредственно после позиции документа, то используйте объект Граница
Код 1C v 8.х МоментСразуПослеДокумента = Новый Граница(ДокументСсылка,ВидГраницы.Включая)

Код 1C v 8.х // Пример создает момент времени по дате и ссылке на объект в базе данных.
Момент = Новый МоментВремени(ТекДокумент.Дата, ТекДокумент.Ссылка);

При получение остатков:
"Момент времени" - виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя ДАТУ и ССЫЛКУ НА ДОКУМЕНТ)
<Виртуальная> таблица остатков не хранится в БД, а строится в момент обращения к ней.
1. подбирается больший или равный значению ПАРАМЕТР момент времени, на который РАССЧИТАНЫ остатки
2. на этот момент получаются остатки из таблицы итогов
3. если момент времени, на который считаются остатки, не совпадает с моментом времени итогов, то остатки ДОСЧИТЫВАЮТСЯ по движениям.

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

ВидГраницы - Определяет набор видов границ по отношению к граничному значению:
ВидГраницы.Включая - Граница включает граничное значение.
ВидГраницы.Исключая - Граница исключает граничное значение.
Код 1C v 8.х Граница = Новый Граница(Дата, ВидГраницы.Включая);
Запрос.УстановитьПараметр("КонГраница", Граница);

Пример получения остатков на дату документа, включая его движения

Запрос.Текст =
"ВЫБРАТЬ


|ИЗ


Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Включая));
ВывестиРезультат(Запрос.Выполнить());

Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру("00012","31.12.2009 23:59:59");
Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Исключая));
// или так: Запрос.УстановитьПараметр("МомВрем", МомВрем.МоментВремени());
Запрос.УстановитьПараметр("Физик", Справочники.ФизическиеЛица.НайтиПоКоду("365"));
ВывестиРезультат(Запрос.Выполнить());



Просмотров