|
|||
GhostTM
12.10.11 — 16:04 |
Данные:
Задача: Товар НачОст Пришло Вернули Продали Списали КонОст
При обращении к виртуальной таблице ОстаткиИОбороты не могу получить КодОперации. |
||
Irbis
1 — 12.10.11 — 16:06 |
обращаться к другой таблице |
||
shuhard
2 — 12.10.11 — 16:06 |
(0) обращайся к физическим записям, |
||
MORRoz
3 — 12.10.11 — 16:06 |
Реквизиты можно получить только из реальной таблицы.
Варианты: |
||
GhostTM
4 — 12.10.11 — 16:19 |
Чувствую прийдется делать запрос к остаткам, потом к оборотам связанным с реальной таблицей, а потом два результата вязать между собой |
||
ssh2006
5 — 12.10.11 — 16:21 |
«Чувствую прийдется делать запрос к остаткам» — в вт остатков реквизита ты также не увидишь |
||
shuhard
6 — 12.10.11 — 16:21 |
(4) если Заказчика устроят тормоза — то так, |
||
GhostTM 7 — 12.10.11 — 16:27 |
(6) Оборотный регистр не совсем спасает, все равно прийдется вязать с остатками, ибо нужны начальный и конечный остаток Сейчас попробую сделать так как написал в (4) Если не получится, то буду рисовать оборотный, хотя не хочется дублировать записи |
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
/// Как прочитать записи регистра накопления в 1с 8.3, 8.2 &НаСервере Процедура КакПрочитатьЗаписиРегистраНакопленияНаСервере() // Получим все записи регистра накопления ЗаказыКлиентов // по организации ООО "Ромашка" за 1 квартал 2014 года, // упорядочив их по возрастанию даты. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыКлиентов.Период, | ЗаказыКлиентов.Регистратор, | ЗаказыКлиентов.НомерСтроки, | ЗаказыКлиентов.Активность, | ЗаказыКлиентов.Контрагент, | ЗаказыКлиентов.Номенклатура, | ЗаказыКлиентов.Количество |ИЗ | РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов |ГДЕ | ЗаказыКлиентов.Активность = Истина И | ЗаказыКлиентов.Организация = &ВыбОрганизация И | ЗаказыКлиентов.Период МЕЖДУ &НачДата И &КонДата |УПОРЯДОЧИТЬ ПО | ЗаказыКлиентов.Период"; Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); // начальная дата - 1 января 2014 года Запрос.УстановитьПараметр("НачДата", '20140101000000'); // конечная дата - 31 марта 2014 года 23 часа 59 минут 59 секунд Запрос.УстановитьПараметр("КонДата", '20140331235959'); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "[" + Записи.Период + "] " + Записи.Номенклатура + " " + Записи.Количество + " шт." + " (" + Записи.Регистратор + ")" ); КонецЦикла; КонецПроцедуры /// Как получить обороты по регистру накопления в 1с 8.3, 8.2 &НаСервере Процедура КакПолучитьОборотыПоРегиструНапопленияНаСервере() // За получение оборотов по регистру накопления за произвольный период // с заданной периодичностью в различных разрезах аналитики отвечает // виртуальная таблица Обороты, // у неё есть следующие параметры: // 1. Начало периода (включая) // 2. Конец периода (включая) // 3. Периодичность (например, Период, Запись, Год, Месяц...) // 4. Условие (например, Организация = &ВыбОрганизация) // Пример №1 Сообщить("Пример №1"); // Посчитаем сколько и каких продуктов было заказано за 1 квартал // 2014 года в организации ООО "Ромашка". Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыКлиентовОбороты.Номенклатура, | ЗаказыКлиентовОбороты.Организация, | ЗаказыКлиентовОбороты.КоличествоОборот |ИЗ | РегистрНакопления.ЗаказыКлиентов.Обороты( | ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00), | ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59), | Период, | Организация = &ВыбОрганизация | ) КАК ЗаказыКлиентовОбороты |УПОРЯДОЧИТЬ ПО | ЗаказыКлиентовОбороты.Номенклатура"; Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "За 1 кв. 2014 года заказали " + Записи.КоличествоОборот + " шт. " + Записи.Номенклатура ); КонецЦикла; // Пример №2 Сообщить("Пример №2"); // Посчитаем сколько бананов было заказано за каждый месяц // в 1 квартале 2014 года в организации "Ромашка". Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыКлиентовОбороты.Период, | ЗаказыКлиентовОбороты.Номенклатура, | ЗаказыКлиентовОбороты.Организация, | ЗаказыКлиентовОбороты.КоличествоОборот |ИЗ | РегистрНакопления.ЗаказыКлиентов.Обороты( | &НачПериод, | &КонПериод, | Месяц, | Организация = &ВыбОрганизация И | Номенклатура = &ВыбНоменклатура | ) КАК ЗаказыКлиентовОбороты |УПОРЯДОЧИТЬ ПО | ЗаказыКлиентовОбороты.Период"; Запрос.УстановитьПараметр("НачПериод", '20140101000000'); Запрос.УстановитьПараметр("КонПериод", '20140331235959'); Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); Запрос.УстановитьПараметр("ВыбНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Банан") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "За " + Формат(Записи.Период, "ДФ=ММММ") + " заказали " + Записи.КоличествоОборот + " шт. " + Записи.Номенклатура ); КонецЦикла; КонецПроцедуры /// Как получить остатки по регистру накопления в 1с 8.3, 8.2 &НаСервере Процедура КакПолучитьОстаткиПоРегиструНакопленияНаСервере() // За получение остатков по регистру накопления в разрезе // аналитики отвечает виртуальная таблица Остатки, // у неё есть следующие параметры: // 1. Период, на который считаем остатки, исключая саму дату. // Если нужны остатки на дату включительно - используем // тип Граница (см. пример ниже). // 2. Условие (например, Организация = &ВыбОрганизация) // Получим остатки бананов на основном складе в организации // ООО "Ромашка" на 31 марта 2014 года (включительно) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗапасыЕдыОстатки.Склад, | ЗапасыЕдыОстатки.Номенклатура, | ЗапасыЕдыОстатки.Организация, | ЗапасыЕдыОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ЗапасыЕды.Остатки( | &ВыбДата, | Склад = &ВыбСклад И | Номенклатура = &ВыбНоменклатура | ) КАК ЗапасыЕдыОстатки"; Запрос.УстановитьПараметр("ВыбДата", Новый Граница('20140331235959', ВидГраницы.Включая) ); Запрос.УстановитьПараметр("ВыбСклад", Справочники.Склады.НайтиПоНаименованию("Основной") ); Запрос.УстановитьПараметр("ВыбНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Банан") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "Остатки " + " " + Записи.Номенклатура + " на складе " + Записи.Склад + " на дату " + "31.03.2014 (включительно) " + " составляют " + Записи.КоличествоОстаток + " шт."); КонецЦикла; КонецПроцедуры /// Как получить сразу остатки и обороты по регистру /// накопления в 1с 8.3, 8.2 &НаСервере Процедура КакПолучитьСразуОстаткиИОборотыПоРегиструНакопленияНаСервере() // За получение остатков и оборотов за произвольный период // с заданной периодичностью в разрезе аналитики отвечает // виртуальная таблица ОстаткиИОбороты, у неё есть параметры: // 1. Начало периода (включая) // 2. Конец периода (включая) // 3. Периодичность (например, Период, Год, Месяц...) // 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода) // 5. Условие (например, Организация = &ВыбОрганизация) // Для примера получим начальный остаток, приход, расход и конечный остаток // банана на всех складах за каждый месяц 2014 года для // организация ООО "Ромашка". Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗапасыЕдыОстаткиИОбороты.Период, | ЗапасыЕдыОстаткиИОбороты.Номенклатура, | ЗапасыЕдыОстаткиИОбороты.Организация, | ЗапасыЕдыОстаткиИОбороты.КоличествоНачальныйОстаток, | ЗапасыЕдыОстаткиИОбороты.КоличествоОборот, | ЗапасыЕдыОстаткиИОбороты.КоличествоПриход, | ЗапасыЕдыОстаткиИОбороты.КоличествоРасход, | ЗапасыЕдыОстаткиИОбороты.КоличествоКонечныйОстаток |ИЗ | РегистрНакопления.ЗапасыЕды.ОстаткиИОбороты( | ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00), | ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59), | Месяц, ДвиженияИГраницыПериода, | Организация = &ВыбОрганизация И | Номенклатура = &ВыбНоменклатура | ) КАК ЗапасыЕдыОстаткиИОбороты |УПОРЯДОЧИТЬ ПО | ЗапасыЕдыОстаткиИОбороты.Период"; Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); Запрос.УстановитьПараметр("ВыбНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Банан") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( Формат(Записи.Период, "ДФ=ММММ") + " [" + Записи.Номенклатура + "] " + "нач. остаток " + Записи.КоличествоНачальныйОстаток + " приход " + Записи.КоличествоПриход + ", расход " + Записи.КоличествоРасход + " кон. остаток " + Записи.КоличествоКонечныйОстаток ); КонецЦикла; КонецПроцедуры /// Как найти и изменить программно записи в регистр накопления /// документа (регистратора) в 1с 8.3, 8.2 &НаСервере Процедура КакНайтиИИзменитьЗаписиДокументаНаСервере() // Предположим у нас есть ссылка на проведенный документ // поступления еды № ВМБП-000002 ПоступлениеСсылка = Документы.ПоступлениеЕды.НайтиПоНомеру( "ВМБП-000002", '20141231' ); // Мы значем, что этот документ делает следующие записи // в регистр накопления "ЗапасыЕды": // Приход [Организация, Склад, Номенклатура] [Количество] // Наша задача: найти эти записи и изменить // их (например, удвоим количество поступившего товара) // и записать вместо старых. // Используем объектную технику получения записей, // ведь мы будем их изменять. Поступление = ПоступлениеСсылка.ПолучитьОбъект(); // Получим набор записей этого документа в регистр "ЗапасыЕды". НаборЗаписей = Поступление.Движения.ЗапасыЕды; // Прочитаем записи из базы данных. НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл // Выведем старые значения. Сообщить( "[" + Запись.Организация + ", " + Запись.Склад + ", " + Запись.Номенклатура + "] " + "[" + Запись.Количество + "]" ); // Удвоим количество. Запись.Количество = 2 * Запись.Количество; КонецЦикла; // Добавим новую запись в регистр накопления. НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка"""); НоваяЗапись.Склад = Справочники.Склады.НайтиПоНаименованию("Основной"); НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Банан"); НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Количество = 1000; // Разом запишем набор записей. НаборЗаписей.Записать( Истина // удалим старые записи и запишем вместо них новые ); // Теперь записи регистра ЗапасыЕды по документу № ВМБП-000002, // отличаются от тех, что были записаны документом при проведении. // Чтобы вернуть их к начальному виду - нужно // перепровести документ. КонецПроцедуры /// Как прочитать записи документа в регистр накопления /// запросом в 1с 8.3, 8.2 &НаСервере Процедура КакПрочитатьЗаписиДокументаЗапросомНаСервере() // Этот приём используется, если не требуется изменять // найденные записи. // Предположим у нас есть ссылка на проведенный документ // поступления еды № ВМБП-000002 ПоступлениеСсылка = Документы.ПоступлениеЕды.НайтиПоНомеру( "ВМБП-000002", '20141231' ); // Мы значем, что этот документ делает записи // в регистр накопления "ЗапасыЕды". // Прочитаем эти записи запросом. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗапасыЕды.Период, | ЗапасыЕды.Регистратор, | ЗапасыЕды.НомерСтроки, | ЗапасыЕды.Активность, | ЗапасыЕды.ВидДвижения, | ЗапасыЕды.Склад, | ЗапасыЕды.Номенклатура, | ЗапасыЕды.Организация, | ЗапасыЕды.Количество |ИЗ | РегистрНакопления.ЗапасыЕды КАК ЗапасыЕды |ГДЕ | ЗапасыЕды.Регистратор = &ВыбРегистратор |УПОРЯДОЧИТЬ ПО | ЗапасыЕды.НомерСтроки"; Запрос.УстановитьПараметр( "ВыбРегистратор", ПоступлениеСсылка ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "[" + Записи.Организация + ", " + Записи.Склад + ", " + Записи.Номенклатура + "] " + "[" + Записи.Количество + "]" ); КонецЦикла; КонецПроцедуры /// Как создать записи регистра накопления без привязки /// к документу в 1с 8.3, 8.2 &НаСервере Процедура КакСоздатьЗаписиБезДокументаНаСервере() // В нашей тестовой конфигурации нет документа // "ОперацияБух", который присутствует в бухгалтерской базе. Сообщить("Этот пример нельзя выполнить в этой базе."); Возврат; // Записи регистра накопления обязательно // должны быть привязаны к документу, в данном случае // этим документом будет документ "ОперацияБух", // задуманный как раз для ручных операций. Операция = Документы.ОперацияБух.СоздатьДокумент(); Операция.Дата = ТекущаяДата(); Операция.Организация = Справочники.Организации.НайтиПоНаименованию("Милькин В. В. ИП"); Операция.СуммаОперации = 1000; Операция.Содержание = "Ручная операция по регистру накопления ИПДоходы"; Операция.Записать(РежимЗаписиДокумента.Запись); // Затем получаем его набор записей для регистра ИПДоходы НаборЗаписей = Операция.Движения.ИПДоходы; Запись = НаборЗаписей.Добавить(); Запись.Период = Операция.Дата; Запись.Организация = Операция.Организация; // и т.д. заполняем все нужные поля регистра Запись.Сумма = 1000; НаборЗаписей.Записать(Истина); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере
-
Требуется в запросе получить реквизит регистра накопления:
через выборку его не видит.
Получилось через набор записей с отбором по регистратору, но при наличии одинаковых записей в одном регистраторе выдается последнее.
Помогите или добить набор записей или подскажите другой способ. :unsure: -
Offline
lazy
Модераторы
Команда форума
Модератор- Регистрация:
- 1 сен 2007
- Сообщения:
- 2.127
- Симпатии:
- 4
- Баллы:
- 29
Физически не ощущаю проблемы.
ВЫБРАТЬ ТоварыНаСкладах.КодОперации, ТоварыНаСкладах.Склад, ТоварыНаСкладах.Номенклатура, ТоварыНаСкладах.ХарактеристикаНоменклатуры, ТоварыНаСкладах.СерияНоменклатуры, ТоварыНаСкладах.Качество, ТоварыНаСкладах.Количество ИЗ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
Здесь КодОперации — реквизит регистра накопления ТоварыНаСкладах. Успешно выдается при выполнении запроса…
-
Забыл уточнить: регистр накопления обороты)
-
Offline
lazy
Модераторы
Команда форума
Модератор- Регистрация:
- 1 сен 2007
- Сообщения:
- 2.127
- Симпатии:
- 4
- Баллы:
- 29
Хм, не интересовался таким делом, но подозреваю, что тебе придется расчитывать все это дело через группировки.
Т.е. обращаемся непосредственно к таблице регистра, и группируем по интересующим нас измерениям и реквизитам. Через виртуальные таблицы это кажется сделать не поулчится. Т.е. нечто вроде:ВЫБРАТЬ Затраты.Подразделение, Затраты.СтатьяЗатрат КАК СтатьяЗатрат, Затраты.КодОперации, СУММА(Затраты.Сумма) КАК Сумма, Затраты.СписаниеПартий ИЗ РегистрНакопления.Затраты КАК Затраты ГДЕ Затраты.Период МЕЖДУ &ДатаНач И &ДатаКон СГРУППИРОВАТЬ ПО Затраты.Подразделение, Затраты.СтатьяЗатрат, Затраты.КодОперации, Затраты.СписаниеПартий УПОРЯДОЧИТЬ ПО СтатьяЗатрат
-
Лана. Пока забыли. Есть запрос
"ВЫБРАТЬ | ВнеоборотныеАктивыОстаткиИОбороты.ВнеоборотныйАктив КАК ВнеоборотныйАктив, | ВнеоборотныеАктивыОстаткиИОбороты.ЭлементыЗатрат, | ВнеоборотныеАктивыОстаткиИОбороты.Организация, | ВнеоборотныеАктивыОстаткиИОбороты.СчетКВ, | ВнеоборотныеАктивыОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток, | ВнеоборотныеАктивыОстаткиИОбороты.НДСНачальныйОстаток КАК НДСНачальныйОстаток, | ВнеоборотныеАктивыОстаткиИОбороты.СуммаПриход КАК СуммаПриход, | ВнеоборотныеАктивыОстаткиИОбороты.НДСПриход КАК НДСПриход, | ВнеоборотныеАктивыОстаткиИОбороты.СуммаРасход КАК СуммаРасход, | ВнеоборотныеАктивыОстаткиИОбороты.НДСРасход КАК НДСРасход, | ВнеоборотныеАктивыОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток, | ВнеоборотныеАктивыОстаткиИОбороты.НДСКонечныйОстаток КАК НДСКонечныйОстаток, | ВнеоборотныеАктивыОстаткиИОбороты.Регистратор, | ВнеоборотныеАктивыОстаткиИОбороты.НомерСтроки |ИЗ | РегистрНакопления.ВнеоборотныеАктивы.ОстаткиИОбороты(&НачДата, &КонДата, Запись, , | "+?(пусто(Организация),"","Организация = &Организация И ")+" | "+?(пусто(Капвлож),"","ВнеоборотныйАктив = &Капвлож И ")+"СчетКВ в Иерархии (&СчетКВ) ) | КАК ВнеоборотныеАктивыОстаткиИОбороты | |УПОРЯДОЧИТЬ ПО | ВнеоборотныйАктив |ИТОГИ | СУММА(СуммаНачальныйОстаток), | СУММА(НДСНачальныйОстаток), | СУММА(СуммаПриход), | СУММА(НДСПриход), | СУММА(СуммаРасход), | СУММА(НДСРасход), | СУММА(СуммаКонечныйОстаток), | СУММА(НДСКонечныйОстаток) |ПО | ОБЩИЕ, | ВнеоборотныйАктив";
Этот запрос выбирает из регистра записи по условиям (даты, организация, счет).
Вопрос: Почему он выдает кроме строк подходящих по условию еще и другие строки, которые не подходят. Неправильные строки он выдает пустыми т.е. в отчет добавляется пустая строка. Анализ показал что количество пустых строк вроде как равно всем не попавшим в условие + группирвки какието по ходу.
Написал сам не пойму что, но может кто подскажет что. -
Offline
LordKim
Опытный в 1С- Регистрация:
- 11 мар 2008
- Сообщения:
- 118
- Симпатии:
- 0
- Баллы:
- 26
Это:|ИЗ | РегистрНакопления.ВнеоборотныеАктивы.ОстаткиИОбороты(&НачДата, &КонДата, Запись, , "+?(пусто(Организация),"","Организация = &Организация И ")+" | "+?(пусто(Капвлож),"","ВнеоборотныйАктив = &Капвлож И ")+"СчетКВ в Иерархии (&СчетКВ) ) КАК ВнеоборотныеАктивыОстаткиИОбороты
Попробуй заменить на это:
|ИЗ | РегистрНакопления.ВнеоборотныеАктивы.ОстаткиИОбороты(&НачДата, &КонДата, Запись) |ГДЕ | СчетКВ в Иерархии (&СчетКВ) | "+?(пусто(Капвлож), "", "И ВнеоборотныйАктив = &Капвлож")+" | "+?(пусто(Организация), "", "И Организация = &Организация")+" КАК ВнеоборотныеАктивыОстаткиИОбороты
-
Спасибо, но нет. От того что вынесли условие ниче не изменилось, да и так делать не рекомендуют. Что то другое…
-
Offline
LordKim
Опытный в 1С- Регистрация:
- 11 мар 2008
- Сообщения:
- 118
- Симпатии:
- 0
- Баллы:
- 26
Не рекомендуют?)
Кто? Где? Можно почитать рекомендации? -
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
LordKim,
Использование условий в ГДЕ и в параметрах вирт таблиц — это разные вещи. В 99,9% случаев нужно использовать условия в параметрах. -
Offline
LordKim
Опытный в 1С- Регистрация:
- 11 мар 2008
- Сообщения:
- 118
- Симпатии:
- 0
- Баллы:
- 26
Почему?
Дай тему или параметры для поиска, почитаю) -
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
Первый запрос:
"ВЫБРАТЬ ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки"
Второй запрос:
"ВЫБРАТЬ ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки ГДЕ ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура"
В первом варианте накладывается фильтр на таблицу остатков, после чего выдается остаток по фильтру.
Во втором варианте сначала выбирается ВСЯ таблица остатков и только потом накладывается фильтр и получается остаток.В случае больших таблиц разница во времени исполнения может достигать несколько ДЕСЯТКОВ порядков. В частности, я сталкивался со случаями, когда первый запрос выполнялся за 0.02 секунды, когда второй выполнялся за 18…
PS. Также, в связи с этой особенностью, иногда могут получаться различные результаты работы запросов.
PPS. На ИТС, вроде, было описание… -
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
:unsure:
Akuji,
Сорри за оффтоп -
Offline
LordKim
Опытный в 1С- Регистрация:
- 11 мар 2008
- Сообщения:
- 118
- Симпатии:
- 0
- Баллы:
- 26
Данные: Есть регистр накопления Измерения: Склад, Товар Ресурсы: Количество, Сумма Задача: Надо построить отчет по складу, что бы в строках был товар, а в колонках коды операций, т.е. таблица типа: Товар НачОст Пришло Вернули Продали Списали КонОст При обращении к виртуальной таблице ОстаткиИОбороты не могу получить КодОперации. Нужен совет как реализовать отчет.
обращаться к другой таблице
обращайся к физическим записям, в виртуальных таблицах реквизитов нет
Реквизиты можно получить только из реальной таблицы. Варианты: 1. Отчет по реальной таблице 2. Изменять структуру регистров. (например добавить оборотный, у которого КодОперации будет измерением) — и делать отчет по нему
Чувствую прийдется делать запрос к остаткам, потом к оборотам связанным с реальной таблицей, а потом два результата вязать между собой
«Чувствую прийдется делать запрос к остаткам» — в вт остатков реквизита ты также не увидишь
если Заказчика устроят тормоза — то так, если нет срочно клепать оборотный Рг
Оборотный регистр не совсем спасает, все равно прийдется вязать с остатками, ибо нужны начальный и конечный остаток Сейчас попробую сделать так как написал в Если не получится, то буду рисовать оборотный, хотя не хочется дублировать записи
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Реквизиты доступны только для конкретной записи, следовательно и выборку надо делать до движений, тогда реквизиты можно будет выбирать.
Настройцки выборки в конструкторе под шестеренкой, чтоб она стала доступна, нужно выбрать регистр в списке «таблицы».
Ответ: Никак!
Или доступны итоги ресурсов по измерениям, или физические записи без итогов, но с реквизитами.
Если реквизиты нужны в таблице итогов, то это ошибка — реквизит нужно переделать в измерение.
Комментировать
Для отражения в программах на базе 1С:Предприятие различных хозяйственных операций пользователи используют документы. Из них можно получить все необходимые данные, например, по остаткам денежных средств на счетах фирмы, количеству проданных товаров за определенный период времени.
В процессе работы таких документов может быть довольно большое количество. Здесь речь может идти не о сотнях документов, а о тысячах и десятках тысяч. Естественно, построение отчетов и прочих данных из такого количества документов является очень долгим, трудоемким и неэффективным.
Только представьте себе, что при оформлении продажи какого-либо товара бухгалтер сидит и ждет, пока программа проверит ранее внесенные документы и рассчитает, хватает ли остатка на складе для списания.
Для решения таких задач в 1С существует специальные объекты конфигурации – регистры накопления. При проведении документы делают в них записи, а уже потом из этих регистров можно быстро получить все нужные данные, включая остатки и обороты. То есть, регистры накопления не просто хранят данные, но и позволяют быстро их обработать.
Содержание
- Вид регистра накопления
- Данные регистров накопления
- Измерения
- Свойства измерений
- Ресурсы
- Реквизиты
- Стандартные реквизиты
- Агрегаты
- Измерения
- Движения по регистрам накопления
Вид регистра накопления
Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!
Как было сказано ранее, регистры накопления могут позволять быстро получать остатки и обороты. На этот функционал непосредственно вид регистра. Его можно изменить на вкладке «Основные» формы редактирования конкретного регистра.
- Оборотные регистры накопления позволяют получить только обороты за какой-то определенный промежуток времени. Получение остатков в таком случае не представляется возможным. Регистр накопления с видом «Обороты» создает в системе только одну виртуальную таблицу – оборотов.
- Регистры накопления с видом «Остатки» дают возможность разработчику получить и остатки и обороты. В данном случае будут создаваться уже три виртуальные таблицы: остатков, оборотов, остатков и оборотов. Примером такого регистра может выступать регистр остатков ТМЦ на складах, движения денежных средств по расчетным счетам организации.
Обратите внимание, что, несмотря на универсальность регистра остатков в получении и остатков и оборотов, он имеет и свои недостатки. При получении оборотов в регистре остатков производительность значительно снижается. В связи с этим крайне не рекомендуется использовать регистр остатков в тех случаях, если вам нужны только обороты (например, оборот продаж). Не стоит устанавливать для регистра тип остатки «на всякий случай», ведь регистры предназначены для ускорения работы программы, а так вы наоборот этот процесс затормозите.
Данные регистров накопления
Измерения
Под измерениями регистров накопления подразумеваются некие разрезы, в которых в дальнейшем вы сможете получить информацию. В нашем случае в качестве измерений регистра «ВыпускПродукции» являются: организация, заказ, спецификация, подразделение и другие.
В любой момент мы сможем получить остатки, например, по всей организации в целом, по конкретному заказу.
Свойства измерений
У каждого измерения есть свой набор свойств, который может значительно повлиять на работу регистра в целом. Похожие свойства так же присутствуют и у ресурсов с реквизитами.
В том случае, если вы планируете в дальнейшем устанавливать отбор по какому-либо измерению достаточно часто. В нашем случае для организации индексирование мы применять не будем.
Так же здесь можно указать, является ли измерение обязательным для заполнения, должен ли использоваться полнотекстовый поиск и другие настройки.
Ресурсы
В качестве ресурсов выступают числовые данные, которые и хранят некую информацию. Именно ее в дальнейшем мы будем получать в различных разрезах. Например, в регистре накопления «Выпуск продукции» ресурсом будет выступать только количество. В таком случае мы сможем получить количество выпущенной продукции на какой-то определенный момент времени, например, по определенному подразделению.
Еще один простой пример. Предположим, что все операции по кассе мы проводим по регистру накопления. В качестве ресурсов будет выступать сумма денежных средств, которая либо поступила (приход), либо выдана (расход) из кассы. В качестве измерения может быть, например, контрагент/подотчетное лицо. В итоге мы сможем получить данные по остаткам и оборотам как кассы в целом, так и по отдельным контрагентам.
Реквизиты
В отличие от измерений и ресурсов реквизиты используются не так часто. В них хранятся те данные, которые нужны для информативного дополнения регистра (примечание). Данные будут использованы в качестве реквизитов, если они не являются ни ресурсом, ни измерением.
Стандартные реквизиты
Кроме обычных реквизитов, которые разработчик может добавить самостоятельно, существуют так же и стандартные реквизиты. Удалить и добавить новые в этот список нельзя. Перейти к стандартным реквизитам вы моете по одноименной кнопке на вкладке «Данные».
Агрегаты
Агрегаты доступны только в регистрах накопления с видом «Обороты». Перейти к ним можно с вкладки «Данные». Агрегаты применяются в базах с большим количеством данных для ускорения формирования отчетов. Мы не будем рассматривать этот механизм подробно, так как это достаточно обширная тема.
Движения по регистрам накопления
У любого регистра накопления может быть один и несколько регистраторов. В качестве регистратора выступает документ, при проведении которого формируется соответствующая запись в регистре накопления.
Просмотреть список регистраторов накопления можно на одноименной вкладке формы самого регистра. В данном примере движения по регистру «ВыпускПродукции» могут формироваться при проведении четырех различных документов.
В самих документах, которые являются регистраторами, список регистров, по которым они совершают движения, расположен на вкладке «Движения». Здесь так же доступен конструктор движений, который поможет в создании таких процедур (проведения и отмены проведения). Сопоставление данных документа и регистра производятся на сравнении типов данных.