Как в запросе задать условие на параметр? Параметр может быть задан или нет, а запрос выполняется! Код 1C v 8.х Запрос = Новый Запрос("
|ВЫБРАТЬ
| ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента,
| ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом,
| ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток,
| ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Сделка
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(
| &Кон,
| ВЫБОР
| КОГДА &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ Организация = &Организация
| КОНЕЦ
| И ВЫБОР
| КОГДА &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ Контрагент = &Контрагент
| КОНЕЦ
| И Учет = ЗНАЧЕНИЕ(Перечисление.ВидыУчета.Общий)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
|ГДЕ
| ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток > 0
|
|УПОРЯДОЧИТЬ ПО
| ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата");
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Контрагент", ПолеВводаКонтрагент);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Более грамотный вариант:
Код 1C v 8.х (Организация В ИЕРАРХИИ (&Организация) ИЛИ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))
еще пример:
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ДоговорыКонтрагентов.Ссылка
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ВЫБОР
| КОГДА &Владелец ССЫЛКА Справочник.Контрагенты
| ТОГДА ДоговорыКонтрагентов.Владелец = &Владелец
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ВЫБОР
| КОГДА &Владелец ССЫЛКА Справочник.Контрагенты
| ТОГДА ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И ДоговорыКонтрагентов.Наименование = &Наименование
| И ДоговорыКонтрагентов.Организация = &Организация";
Запрос.УстановитьПараметр("Владелец", Контрагент);
Запрос.УстановитьПараметр("Наименование", Наименование);
Запрос.УстановитьПараметр("ВидДоговора", ВидДоговора);
Запрос.УстановитьПараметр("Организация", Организация);
Результат = Запрос.Выполнить();
Категория:
Запросы Как выгрузить результат запроса с отбором по регистратору в табличную часть, табличное поле? Выгрузка результата запроса в табличную часть документа, справочника
Код 1C v 8.х Запрос=Новый Запрос;
// Получим суммы начисленные документами НачислениеЗарплатыРаботникамОрганизаций в ПериодВзаиморасчетов
Запрос.Текст="
|ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизаций.Период,
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор,
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизаций.Организация,
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов = &ПериодВзаиморасчетов
| И ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций
|";
Запрос.УстановитьПараметр("ПериодВзаиморасчетов",Дата("01.09.2009 0:00:00"));
Результат = Запрос.Выполнить();
// Выгрузим Результат Запроса в ТЗ
ТзВрем = Результат.Выгрузить();
Для Каждого стр Из Тзврем Цикл
// ТаблЧастьДокРезультат - Табличная часть на форме, создаем в ней новую строку
НовСтр=ТаблЧастьДокРезультат.Добавить();
// Заполняем значения новой строки значениями результат запроса:
ЗаполнитьЗначенияСвойств(новстр, стр);
//ВНИМАНИЕ!!! ЗаполнитьЗначенияСвойств( - работает только когда имена колонок табл части и результата запроса совпадают!
//Если не совпадают, то обычным способом:
НовСтр.Дата = стр.ПериодВзаиморасчетов;
НовСтр.Сумма = стр.СуммаВзаиморасчетов;
КонецЦикла;
Выгрузка результата запроса в табличное поле с типом данных Таблица Значений
Код 1C v 8.х Запрос=Новый Запрос;
// Получим суммы начисленные документами НачислениеЗарплатыРаботникамОрганизаций в ПериодВзаиморасчетов
Запрос.Текст="
|ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизаций.Период,
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор,
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизаций.Организация,
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов = &ПериодВзаиморасчетов
| И ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций
|";
Запрос.УстановитьПараметр("ПериодВзаиморасчетов",Дата("01.09.2009 0:00:00"));
Результат = Запрос.Выполнить();
// Выгрузим Результат Запроса в ТЗ
ТзВрем = Результат.Выгрузить();
// ТЗРезультат - это Табличное Поле на Форме, присваиваем ему таблицу значений
ТЗРезультат=ТзВрем;
//Создаем колонки в табличном поле, после чего видим в поле тз
ЭлементыФормы.ТЗРезультат.СоздатьКолонки();
Категория:
Запросы Временные таблицы в отчетах СКД Нужно в отчете СКД Связать Данные из Регистра Накопления ВзаиморасчетыСРаботниками и Табличной Части Документа ЗарплатаКВыплате по Ссылке на Документ и ФизЛицу! И вывести полученные данные за указанный Период(с ДатаН по ДатаК) - Запрос будет такой:
Код 1C v 8.х ВЫБРАТЬ
ВзаиморасчетыСРаботникамиОрганизаций.Период,
ВзаиморасчетыСРаботникамиОрганизаций.Физлицо,
ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов,
ВзаиморасчетыСРаботникамиОрганизаций.Организация,
ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов,
ВзаиморасчетыСРаботникамиОрганизаций.Регистратор
ПОМЕСТИТЬ РегВзаимРасч
ИЗ
РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
ГДЕ
ВзаиморасчетыСРаботникамиОрганизаций.Период МЕЖДУ &ДатаН И &ДатаК
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо,
ЗарплатаКВыплатеОрганизацийЗарплата.Сумма,
ЗарплатаКВыплатеОрганизацийЗарплата.ВыплаченностьЗарплаты,
ЗарплатаКВыплатеОрганизацийЗарплата.КомпенсацияЗаЗадержкуЗарплаты,
ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка
ПОМЕСТИТЬ ДокумЗарплКВыпл
ИЗ
Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата
ГДЕ
ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РегВзаимРасч.Период,
РегВзаимРасч.Физлицо,
РегВзаимРасч.СуммаВзаиморасчетов,
ДокумЗарплКВыпл.Сумма,
ДокумЗарплКВыпл.ВыплаченностьЗарплаты,
ДокумЗарплКВыпл.КомпенсацияЗаЗадержкуЗарплаты
ИЗ
РегВзаимРасч КАК РегВзаимРасч
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДокумЗарплКВыпл КАК ДокумЗарплКВыпл
ПО РегВзаимРасч.Регистратор = ДокумЗарплКВыпл.Ссылка
И РегВзаимРасч.Физлицо = ДокумЗарплКВыпл.Физлицо
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ РегВзаимРасч
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ДокумЗарплКВыпл
Категория:
Схема Компоновки Данных Временные таблицы, что из себя представляют и как с ними работать? Временные таблицы - хранятся на сервере и позволяют писать более простые запросы.
Временные таблицы хранятся в объекте типа
МенеджерВременныхТаблиц . Когда этот объект уничтожается, уничтожаются и временные таблицы.
Чтобы создать временную таблицу, используется ключевое слово "
ПОМЕСТИТЬ В ", например:
Код 1C v 8.х |ВЫБРАТЬ * ИЗ Справочник.Номенклатура ПОМЕСТИТЬ В ВТТовары
Временная таблица создается при выполнении запроса, если повторно выполнить запрос, то выдастся ошибка, что таблица уже существует.
Описания временных таблиц хранятся в свойстве запроса МенеджерВременныхТаблиц. К сожалению, нельзя получить список временных таблиц, которые хранятся в запросе.
Пример 1: Как можно выгрузить временную таблицу в таблицу значений и как использовать менеджер временных таблиц:
Код 1C v 8.х Запрос=Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Номенклатура ПОМЕСТИТЬ В ВТТовары");
Запрос.Выполнить(); //Создалась таблица ВТТовары
ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ ВТТовары");
ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц; //Копируем ссылку на временные таблицы
ТЗ=ЗапросТМП.Выполнить().Выгрузить(); //Получаем временную таблицу в таблице значений
Готовую таблицу значений из памяти можно выгружать в менеджер временных таблиц запроса. Единственное условие - колонки таблицы значений должны быть типизированными, т.е. иметь тип. Вот пример, демонстрирующий это:
ТЗ=Новый ТаблицаЗначений();
//Колонки должны быть типизированы
ТЗ.Колонки.Добавить("А", Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("Б", Новый ОписаниеТипов("Строка"));
//Заполняем таблицу данными
Стр=ТЗ.Добавить();
Стр.А="А";
Стр.Б="Б";
Стр=ТЗ.Добавить();
Стр.А="А1";
Стр.Б="Б1";
//Загружаем таблицу значений в менеджер временных таблиц запроса
Запрос=Новый Запрос("Выбрать Т.А, Т.Б ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
//Вариант: Запрос=Новый Запрос("Выбрать * ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Таб",ТЗ);
Запрос.Выполнить();
//Получаем таблицу из менеджера временных таблиц запроса
ЗапросТМП=Новый Запрос("ВЫБРАТЬ * ИЗ ВТТаб");
ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;
ТЗ1=ЗапросТМП.Выполнить().Выгрузить();
ТЗ1.ВыбратьСтроку(); //Показываем полученную таблицу
Вместо перечисления списка полей можно использовать "ВЫБРАТЬ * ".
Если есть ТЗ, в каждой колонке которой значения всего одного типа, для типизации колонок, можно воспользоваться функцией:
Код 1C v 8.х Процедура ТипизацияТЗ(ТЗ) Экспорт
РезультатТЗ = новый ТаблицаЗначений;
Для Каждого Колонка из ТЗ.Колонки Цикл
Имя = Колонка.Имя;
МассивТипов = новый Массив(1);
МассивТипов[0] = ТипЗнч(ТЗ[0][Имя]);
Описатель = новый ОписаниеТипов(МассивТипов);
РезультатТЗ.Колонки.Добавить(Имя, Описатель);
КонецЦикла;
Для каждого Строка из ТЗ Цикл
СтрокаРез = РезультатТЗ.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРез, Строка);
КонецЦикла;
ТЗ = РезультатТЗ.Скопировать();
КонецПроцедуры
Пример 2: Нужно в отчете СКД Связать Данные из Регистра Накопления ВзаиморасчетыСРаботниками и Табличной Части Документа ЗарплатаКВыплате по Ссылке на Документ и ФизЛицу! И вывести полученные данные за указанный Период(с ДатаН по ДатаК) - Запрос будет такой:
Код 1C v 8.х ВЫБРАТЬ
ВзаиморасчетыСРаботникамиОрганизаций.Период,
ВзаиморасчетыСРаботникамиОрганизаций.Физлицо,
ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов,
ВзаиморасчетыСРаботникамиОрганизаций.Организация,
ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов,
ВзаиморасчетыСРаботникамиОрганизаций.Регистратор
ПОМЕСТИТЬ РегВзаимРасч
ИЗ
РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
ГДЕ
ВзаиморасчетыСРаботникамиОрганизаций.Период МЕЖДУ &ДатаН И &ДатаК
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо,
ЗарплатаКВыплатеОрганизацийЗарплата.Сумма,
ЗарплатаКВыплатеОрганизацийЗарплата.ВыплаченностьЗарплаты,
ЗарплатаКВыплатеОрганизацийЗарплата.КомпенсацияЗаЗадержкуЗарплаты,
ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка
ПОМЕСТИТЬ ДокумЗарплКВыпл
ИЗ
Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата
ГДЕ
ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РегВзаимРасч.Период,
РегВзаимРасч.Физлицо,
РегВзаимРасч.СуммаВзаиморасчетов,
ДокумЗарплКВыпл.Сумма,
ДокумЗарплКВыпл.ВыплаченностьЗарплаты,
ДокумЗарплКВыпл.КомпенсацияЗаЗадержкуЗарплаты
ИЗ
РегВзаимРасч КАК РегВзаимРасч
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДокумЗарплКВыпл КАК ДокумЗарплКВыпл
ПО РегВзаимРасч.Регистратор = ДокумЗарплКВыпл.Ссылка
И РегВзаимРасч.Физлицо = ДокумЗарплКВыпл.Физлицо
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ РегВзаимРасч
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ДокумЗарплКВыпл
Категория:
Запросы Выгрузить результат запроса в Дерево Значений, Дерево Значений на форме Код 1C v 8.х // Вывод результата запроса в Табличное Поле - Дерево значений
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.ПериодВзаиморасчетов КАК ЗаМесяц,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо КАК Работник,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(, ) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток < 5
| И ВзаиморасчетыСРаботникамиОрганизацийОстатки.ПериодВзаиморасчетов > ДАТАВРЕМЯ(2011, 1, 1, 0, 0, 0)
|
|УПОРЯДОЧИТЬ ПО
| ЗаМесяц,
| Работник
|ИТОГИ
| СУММА(Остаток)
|ПО
| ЗаМесяц
|АВТОУПОРЯДОЧИВАНИЕ";
//Выгрузим результат запроса в Табличное Поле с Типом значения Дерево значений
ЭлементыФормы.Долги.Значение = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
//Создадим колонки для вывода данных
ЭлементыФормы.Долги.СоздатьКолонки();
//Настроим ширину колонок табличного поля
ЭлементыФормы.Долги.Колонки.Работник.Ширина=23;
ЭлементыФормы.Долги.Колонки.ЗаМесяц.Ширина=17;
ЭлементыФормы.Долги.Колонки.Остаток.Ширина=11;
еще пример:
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Наименование ИЕРАРХИЯ";
Результат = Запрос.Выполнить();
Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЭлементыФормы.Дерево.СоздатьКолонки();
Категория:
Запросы МоментВремени, получение остатков до и после проведения "Момент времени" - виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя дату и ССЫЛКУ НА ДОКУМЕНТ)
В 7.7 было понятие ПозицияДокумента, а в 8.x Момент времени
Для получения Остатков, Движений:
МоментВремени - это момент непосредственно
перед позицией документа!
Если Вам необходимо получить момент непосредственно после позиции документа, то через объект Граница:
Код 1C v 8.х МоментСразуПослеДокумента = Новый Граница(ДокументСсылка,ВидГраницы.Включая);
Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру("00012","31.12.2009 23:59:59");
Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Включая));
Запрос.УстановитьПараметр("Физик", Справочники.ФизическиеЛица.НайтиПоКоду("365"));
ВывестиРезультат(Запрос.Выполнить());
Пример получения остатков на дату документа, включая его движения
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру("00012","31.12.2009 23:59:59");
Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Исключая));
// или так: Запрос.УстановитьПараметр("МомВрем", МомВрем.МоментВремени());
Запрос.УстановитьПараметр("Физик", Справочники.ФизическиеЛица.НайтиПоКоду("365"));
ВывестиРезультат(Запрос.Выполнить());
Категория:
Встроенные Функции Как в запросе получить Вид (тип) Документа? Столкнулся с задачей, нужно было выбрать все документы по выплате и сгруппировать их по типу документа!
Перелистав все ЖКК и интернет, понял что простого способа получить Вид документа в запросе нет
Пришлось сделать так:
Код 1C v 8.х
Запрос = Новый Запрос;
Запрос.Текст ="
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.РасходныйКассовыйОрдер
| ТОГДА ""Расходный кассовый ордер""
| ИНАЧЕ ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
| ТОГДА ""Платежное поручение исходящее""
| ИНАЧЕ ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.ДепонированиеОрганизаций
| ТОГДА ""Депонирование""
| ИНАЧЕ ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер
| ТОГДА ""Приходный кассовый ордер""
| ИНАЧЕ """"
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ КАК ВидДокумента,
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор КАК Регистратор,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор.Дата МЕЖДУ &ДатаН И &ДатаК
| И ВзаиморасчетыСРаботникамиОрганизаций.ВидДвижения = &ВидДвижения
|ИТОГИ
| СУММА(СуммаВзаиморасчетов)
|ПО
| ВидДокумента
|";
Запрос.УстановитьПараметр("ВидДвижения",ВидДвиженияНакопления.Расход);
Запрос.УстановитьПараметр("ДатаК",Дата("28.02.2010 23:59:59"));
Запрос.УстановитьПараметр("ДатаН",Дата("01.02.2010 0:00:00"));
Результат = Запрос.Выполнить();
Результат = Результат.Выбрать();
Пока Результат.Следующий() Цикл
// ... код обработки...
КонецЦикла;
В 8.2.какой-то версии добавили определение ТИПА
Код 1C v 8.х ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.ВидДокумента)
Категория:
Запросы Почему при получении остатков или оборотов на дату, попадают не все движения(документы)? При указании конечной даты, указывайте на просто Дату, а Границу!
Например, если нужно получить на конец дня, то указывайте так:
Код 1C v 8.х ГраницаКНД = Новый Граница(КонецДня(Дата), ВидГраницы.Включая);
Запрос.УстановитьПараметр("КонГраница", ГраницаКНД );
Если вы хотите получить остатки до определенного документа или после, то используйте:
Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру("00012","31.12.2009 23:59:59");
Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Включая));
Запрос.УстановитьПараметр("Физик", Справочники.ФизическиеЛица.НайтиПоКоду("365"));
ВывестиРезультат(Запрос.Выполнить());
Пример получения остатков на дату документа, включая его движения
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру("00012","31.12.2009 23:59:59");
Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Исключая));
// или так: Запрос.УстановитьПараметр("МомВрем", МомВрем.МоментВремени());
Запрос.УстановитьПараметр("Физик", Справочники.ФизическиеЛица.НайтиПоКоду("365"));
ВывестиРезультат(Запрос.Выполнить());
Категория:
Регистры накопления Момент Времени и Граница, назначение, примеры использования Момент времени:
Фирма 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"));
ВывестиРезультат(Запрос.Выполнить());
Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки";
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру("00012","31.12.2009 23:59:59");
Запрос.УстановитьПараметр("МомВрем", Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Исключая));
// или так: Запрос.УстановитьПараметр("МомВрем", МомВрем.МоментВремени());
Запрос.УстановитьПараметр("Физик", Справочники.ФизическиеЛица.НайтиПоКоду("365"));
ВывестиРезультат(Запрос.Выполнить());
Категория:
Работа с Датами (Временем) Пример разработки простого отчета - Схема Компоновки Данных В статье описан пример создания отчета с использованием системы компоновки данных 1С:Предприятия 8.1. Схема компоновки данных - это описание отчета, при помощи которого платформа позволит вводить настройки и получать результат.
Рассмотрим пример создания отчета по взаиморасчетам с работниками (ЗУП 2.5):
1. Файл - Новый - Внешний отчет Для открытия и создания схемы компоновки нажмем кнопку "Открыть схему компоновки данных".
2. Система предложит создать новую схему компоновки данных. Схема компоновки данных является макетом, и будет записана в макеты. Укажите название схемы и нажмите "Готово"
3. Открывается окно конструктора схемы компановки данных:
Вкладка редактирования наборов данных. Здесь можно создавать или редактировать источники данных, в моем примере в качестве источника данных может выступать только текущая информационная база и он будет создаваться автоматически при добавлении первого набора данных.
В качестве набора данных может выступать:
Запрос - в этом случае получение данных описывается с помощью терминов языка запросов "1С: Предприятия 8.1" + инструкции специального расширения языка запросов для системы компоновки данных;
Объект - произвольный источник данных - например, таблица значений, сформированная и заполненная программно;
Объединение предназначено для описания наборов данных, входящих в объединение. Механизм объединения аналогичен объединению запросов средствами языка запросов;
4. Для нашего примера получим данные при помощи запроса, поэтому добавим набор данных - запрос. Для этого нажмем на кнопку "Добавить набор данных", которая расположена в командной панели на закладке "Наборы данных". В открывшемся меню выберем пункт "Добавить набор данных - запрос":
5. Будет создан набор данных. Теперь создадим запрос при помощи конструктора запросов, нажмем кнопку "Конструктор запроса"
6. Отчет, который мы создаем, будет получать данные из регистра накопления "ВзаиморасчетыСРаботникамиОрганизаций". Нас интересуют остатки, и текст запроса следующий:
Код 1C v 8.х ВЫБРАТЬ
ВзаиморасчетыСРаботникамиОрганизацийОстатки.Организация,
ВзаиморасчетыСРаботникамиОрганизацийОстатки.ПериодВзаиморасчетов,
ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
ИЗ
РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки
7. После закрытия конструктора запроса, конструктор схемы компановки Обратите внимание, что доступные поля для текущего набора данных будут сформированы системой автоматически только в том случае, если в конструкторе схемы компоновки данных стоит флаг
Автозаполнение . Источником информации служит текст запроса. Система заполнила следующие поля:
Поле - имя поля набора данных, для которого делается описание. В нашем случае определяется именем поля в тексте запроса. Обратите внимание, по этому имени к полю нельзя будет обратиться в дальнейшем. Редактированию не подлежит
Путь - имя поля набора данных, под которым можно будет обратиться к полю в других разделах конструктора схемы компоновки данных. Может быть назначено разработчиком конфигурации самостоятельно
Заголовок - имя поля набора данных, под которым поле будет фигурировать в настройках в режиме 1С:Предприятие, а также в названии данного поля в шапке самого отчета. Может быть назначено разработчиком конфигурации самостоятельно. В качестве примера изменим Заголовок у поля Физлицо на Сотрудник
Роль - показывает, каким образом иоле будет использовано в дальнейшем в системе компоновки данных. Информация о том, что иоле является измерением, используется при расчете итогов по полям остатка.
8. Далее необходимо указать ресурсы. Ресурсы - это поля набора данных, по которым будет происходить агрегация значений.
Необходимо рассчитать суммы по полю "СуммаВзаиморасчетовОстаток". Найдем это поле в списке доступных полей и дважды щелкнем по нему. В правом табличном поле появится строка, содержащая формулу для расчета итога по полю "СуммаВзаиморасчетовОстаток". В нашем случае это "Сумма(СуммаВзаиморасчетовОстаток)". Эта формула означает, что для итоговых записей отчета значение поля "СуммаВзаиморасчетовОстаток" будет вычисляться как сумма поля "СуммаВзаиморасчетовОстаток" для всех строк участвующих в данной итоговой записи.
9. Этих введеных данных, нам хватит для вывода простого отчета. Перейдем на вкладку "Настройки" и откроем "Конструктор настроек"
10. Так как пока мы создаем простой отчет, выберем "Список", нажимая далее укажем выводимые поля:
11. После нажатия на "ОК" в конструкторе настроек, получаем следующее:
12. Закрываем схему компановки, сохраняем отчет в файл и запускаем в режиме 1С:Предприятия 8.1. Получаем:
Автор:
Мигачев Евгений Категория:
Схема Компоновки Данных Корректировка регистров накопления через документ Часто возникает ситуация, когда программно нужно внести какие либо корректировки в регистры накопления и чтобы потом эти корректировки можно было легко поменять!
В типовых конфигурациях присутсвует документ "Корректировка Записей Регистров Накопления", который предназначен для ручной корректировки записей регистров накопления и для ввода остатков.
С помощью ниже следующего кода можно программно создать и заполнить движениями этот документ:
Код 1C v 8.х
// ТЗрез - это Таблица значений содержащая столбец "FizL" - ФизЛицо и "RUB" Сумма корректировки
НовДок = Документы.КорректировкаЗаписейРегистровНакопления.ПолучитьФормуНовогоДокумента();
НовДок.Дата=ТекущаяДата();
НовДок.Комментарий="Корректировка регистра ВзаиморасчетыСРаботникамиОрганизаций";
// Создадим табличную часть движений регистра
НоваяСтрока = НовДок.ТаблицаРегистровНакопления.Добавить();
НоваяСтрока.Имя = Метаданные.регистрынакопления.ВзаиморасчетыСРаботникамиОрганизаций.имя;
НоваяСтрока.Представление = Метаданные.регистрынакопления.ВзаиморасчетыСРаботникамиОрганизаций.синоним;
// Создадим движения
Для Каждого СтрДвиж из ТЗрез Цикл
НовДвиж = НовДок.Движения.ВзаиморасчетыСРаботникамиОрганизаций.ДобавитьПриход();
НовДвиж.ФизЛицо=СтрДвиж.FizL;
НовДвиж.Организация=Организация;
НовДвиж.ПериодВзаиморасчетов=ВыбДокНачисл.ПериодРегистрации;
НовДвиж.СуммаВзаиморасчетов = СтрДвиж.RUB;
КонецЦикла;
//НовДок.Записать(); //Пока не записываем
НовДок.Открыть(); //Покажем документ пользователю
Категория:
Регистры накопления Пример загрузки остатков в документ 1С из DBF файла Код 1C v 8.х ФайлОстатков = Новый XBase;
ФайлОстатков.Кодировка = КодировкаXBase.OEM;
ФайлОстатков.ОткрытьФайл(ПутьКТаблицеОстатков);
ФайлОстатков.Первая();
Пока Не ФайлОстатков.ВКонце() Цикл
КодКонтрагента = СокрЛП(ФайлОстатков.ПолучитьЗначениеПоля("ZKPO"));
Если КодКонтрагента = "" Тогда
КодКонтрагента = СокрЛП(ФайлОстатков.ПолучитьЗначениеПоля("IDENKOD"));
КонецЕсли;
НаименованиеКонтрагента = СокрЛП(СтрЗаменить(ФайлОстатков.ПолучитьЗначениеПоля("NAME"),"?","і"));
Контрагент = ПолучитьКонтрагента(КодКонтрагента,НаименованиеКонтрагента);
СимволСчета = СокрЛП(ФайлОстатков.ПолучитьЗначениеПоля("SYMBOL"));
ОстатокДебет = ФайлОстатков.ПолучитьЗначениеПоля("DB_PP");
ОстатокКредит = ФайлОстатков.ПолучитьЗначениеПоля("KR_PP");
Документ = Документы.КорректировкаДолга.СоздатьДокумент();
Документ.Организация = Организация;
Документ.Дата = "20090630235959";
Документ.ВидОперации = Перечисления.ВидыОперацийКорректировкаДолга.ВводНачальныхОстатков;
Если ОстатокДебет > 0 Тогда
Документ.КонтрагентДебитор = Контрагент;
Документ.СуммыДолга.Очистить();
СтрокаСуммыДолга = Документ.СуммыДолга.Добавить();
СтрокаСуммыДолга.ВидЗадолженности = Перечисления.ВидыЗадолженности.Дебиторская;
СтрокаСуммыДолга.ДоговорКонтрагента = ПолучитьДоговор(Документ.КонтрагентДебитор);
Если Лев(СимволСчета,3) = "361" Тогда
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Покупатель;
Иначе
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Поставщик;
КонецЕсли;
СтрокаСуммыДолга.КратностьВзаиморасчетов = 1.00;
СтрокаСуммыДолга.КурсВзаиморасчетов = 1.00;
СтрокаСуммыДолга.Сумма = ОстатокДебет;
СтрокаСуммыДолга.СуммаВзаиморасчетов = ОстатокДебет;
СтрокаСуммыДолга.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
СтрокаСуммыДолга.СчетУчетаРасчетов = ПланыСчетов.Хозрасчетный.НайтиПоКоду(СимволСчета);
Иначе
Документ.КонтрагентДебитор = Контрагент;
Документ.СуммыДолга.Очистить();
СтрокаСуммыДолга = Документ.СуммыДолга.Добавить();
СтрокаСуммыДолга.ВидЗадолженности = Перечисления.ВидыЗадолженности.Кредиторская;
СтрокаСуммыДолга.ДоговорКонтрагента = ПолучитьДоговор(Документ.КонтрагентДебитор);
Если Лев(СимволСчета,3) = "361" Тогда
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Покупатель;
Иначе
СтрокаСуммыДолга.ТипКонтрагента = Перечисления.СтатусыКонтрагентов.Поставщик;
КонецЕсли;
СтрокаСуммыДолга.КратностьВзаиморасчетов = 1.00;
СтрокаСуммыДолга.КурсВзаиморасчетов = 1.00;
СтрокаСуммыДолга.Сумма = ОстатокКредит;
СтрокаСуммыДолга.СуммаВзаиморасчетов = ОстатокКредит;
СтрокаСуммыДолга.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
СтрокаСуммыДолга.СчетУчетаРасчетов = ПланыСчетов.Хозрасчетный.НайтиПоКоду(СимволСчета);
КонецЕсли;
Документ.ВалютаДокумента = Валюта;
Документ.СчетДт = ПланыСчетов.Хозрасчетный.Вспомогательный;
Документ.СчетКт = ПланыСчетов.Хозрасчетный.Вспомогательный;
Документ.Записать(РежимЗаписиДокумента.Проведение);
ФайлОстатков.Следующая();
КонецЦикла;
ФайлОстатков.ЗакрытьФайл();
Категория:
XML, DBF, TXT, CSV Получить начисленные суммы по документу НачислениеЗаработной платы Код 1C v 8.х // Получим суммы начисленные по ФизЛицу документом НачислениеЗарплатыРаботникамОрганизаций
// (отбор по Документ.НачислениеЗарплатыРаботникамОрганизаций)
Запрос=новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизаций.Период,
| ВзаиморасчетыСРаботникамиОрганизаций.Регистратор,
| ВзаиморасчетыСРаботникамиОрганизаций.НомерСтроки,
| ВзаиморасчетыСРаботникамиОрганизаций.Активность,
| ВзаиморасчетыСРаботникамиОрганизаций.ВидДвижения,
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизаций.Организация,
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов,
| ВзаиморасчетыСРаботникамиОрганизаций.ВидРасчета,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВUSD
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо = &Физлицо
| И ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов = &ПериодВзаиморасчетов
| И ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций
|
|";
Запрос.УстановитьПараметр("ПериодВзаиморасчетов",Дата("01.09.2009 0:00:00"));
Запрос.УстановитьПараметр("Физлицо",Справочники.ФизическиеЛица.НайтиПоКоду("00000054"));
Результат = Запрос.Выполнить();
Результат = Результат.Выбрать();
Пока Результат.Следующий() Цикл
// обработка результата
КонецЦикла;
//Пример 2
Запрос=новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо КАК Физлицо,
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов КАК ПериодВзаиморасчетов,
| СУММА(ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.ВидРасчета В (&VidUSD)
| ТОГДА ВзаиморасчетыСРаботникамиОрганизаций.СуммаВUSD
| ИНАЧЕ 0
| КОНЕЦ) КАК USD,
| СУММА(ВЫБОР
| КОГДА (НЕ ВзаиморасчетыСРаботникамиОрганизаций.ВидРасчета В (&VidUSD))
| ТОГДА ВЫБОР
| КОГДА (НЕ ВзаиморасчетыСРаботникамиОрганизаций.ВидРасчета = НЕОПРЕДЕЛЕНО)
| ИЛИ ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.НачислениеОтпускаРаботникамОрганизаций
| ТОГДА ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ) КАК RUB,
| СУММА(ВЫБОР
| КОГДА ВзаиморасчетыСРаботникамиОрганизаций.ВидРасчета = НЕОПРЕДЕЛЕНО
| И ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций
| ТОГДА ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов * -1
| ИНАЧЕ 0
| КОНЕЦ) КАК NDFL
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо = &Физлицо
| И ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов = &ПериодВзаиморасчетов
| И (ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций
| ИЛИ ВзаиморасчетыСРаботникамиОрганизаций.Регистратор ССЫЛКА Документ.НачислениеОтпускаРаботникамОрганизаций)
|
|СГРУППИРОВАТЬ ПО
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов
|";
Категория:
Запросы Выбрать движения, получить выборку записей регистра накопления Пример 1 :
Код 1C v 8.х
//Взаиморасчеты за период, хотя, это лучше выбирать запросом , он в примере 3
Отбор = Новый Структура("Организация", Организация);
НаборЗаписей = РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Выбрать(ПериодРегистрации, КонецМесяца(ПериодРегистрации), Отбор);
Пока Выборка.Следующий() Цикл
// код обработки например:
Сум=Сум+Выборка.СуммаВзаиморасчетов;
КонецЦикла;
Пример 2 :
Код 1C v 8.х
// Посчитаем, сколько отгружено с начала года
УчетНоменклатуры = РегистрыНакопления.УчетНоменклатуры;
ОтборПоТовару = Новый Структура("Номенклатура");
ОтборПоТовару.Номенклатура = ВыбТовар;
НачДата = НачалоГода(ТекущаяДата());
КонДата = ТекущаяДата();
Выборка = УчетНоменклатуры.Выбрать(НачДата,КонДата,ОтборПоТовару);
Расход =0;
Пока Выборка.Следующий() Цикл
Если Выборка.ВидДвижения = ВидДвиженияНакопления.Расход Тогда
Расход = Расход + Выборка.Количество;
КонецЕсли;
КонецЦикла;
Предупреждение("Отгружено с начала года """ + СокрЛП(ВыбТовар) + """ = "+ Расход + " шт.");
Пример 3 :
Код 1C v 8.х
Запрос=новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВзаиморасчетов,
| ВзаиморасчетыСРаботникамиОрганизаций.СуммаВUSD,
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК ВзаиморасчетыСРаботникамиОрганизаций
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизаций.Физлицо = &Физлицо
| И ВзаиморасчетыСРаботникамиОрганизаций.ПериодВзаиморасчетов = &ПериодВзаиморасчетов
| И ВзаиморасчетыСРаботникамиОрганизаций.Организация = &Организация
| И ВзаиморасчетыСРаботникамиОрганизаций.ХарактерВыплаты = &ХарактерВыплаты
|";
Запрос.УстановитьПараметр("Организация",Организация);
Запрос.УстановитьПараметр("ПериодВзаиморасчетов",ПериодРегистрации);
Запрос.УстановитьПараметр("Физлицо",ТекущаяСтрока.Физлицо);
Запрос.УстановитьПараметр("ХарактерВыплаты",Перечисления.ХарактерВыплатыЗарплаты.ПлановыйАванс);
Результат = Запрос.Выполнить();
Результат = Результат.Выбрать();
Пока Результат.Следующий() Цикл
// код обработки например:
СумАванс=СумАванс+Результат.СуммаВзаиморасчетов;
КонецЦикла;
Категория:
Регистры накопления