1С скд остатки и обороты

Сворачивал ИБ УТ 11.3 на 31.12.2016, сформировались корректные документы ВНО, но отчеты показывали движения за май 2016 года. Необходим пересчет итогов!

Пересчет итогов

Обычно в такой ситуации помогает пересчет итогов:

  • в режиме 1С:Предприятия. «Администрирование — Поддержка и обслуживание — Регламентные операции — Управление итогами и агрегатами» или «Все функции — Стандартные — Управление итогами», в обоих случаях можно установить период рассчитанных итогов;
  • в режиме Конфигуратора. «Администрирование — Тестирование и исправление» в появившемся окне оставляем галку «Пересчет итогов»(остальные убираем) и нажимаем кнопку «Выполнить».

Но сейчас должного эффекта операция не произвела, отключение и включение итогов по регистрам тоже не подействовало.

Решение

Путем формирования отчетов было выявлено, что движения есть по РН.ТоварыНаСкладах на 31.05.2016 23:59:59, и видны в отчетах если в период отчета попадает эта дата. Если построить отчет после этого периода, то движений нет!

Для исправления воспользуемся методом регистра накопления ПересчитатьИтогиЗаПериод() указав нужный период

&НаСервере Процедура ПересчитатьИтоги(Период) РегистрыНакопления.ТоварыНаСкладах.ПересчитатьИтогиЗаПериод( , КонецДня(Период)); КонецПроцедуры

После выполнения приведенного кода на 31.05.2016, итоги пересчитались и отчеты начали отображать верные данные!

Так же можно ознакомиться со статьей 1С. Исправление неверной нумерации

Доброго дня!
Понимаю, что вопрос избитый (и уже давно), но четкого ответа на него найти не могу. Поэтому вопрос все-таки поставлю.
Имеем регистр накопления вида: Измерение1, Измерение2, Измерение3, Ресурс. Строим отчет на СКД по виртуальной таблице остатков и оборотов этого регистра (периодичность — Авто, Регистратор и ПериодСекунда — в выборке присутствуют).
Настройки варианта:
Выбранные поля:
Измерение1, Измерение2, Измерение3, Регистратор, РесурсНачальныйОстаток, РесурсПриход, РесурсРасход, РесурсКонечныйОстаток
Группировки:
Измерение1
Измерение2
Измерение3
<ДетальныеЗаписи>
При этом получаем корректные данные, но имеем проблемы с оформлением этих данных:
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»));
ВывестиРезультат(Запрос.Выполнить());
Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(&МомВрем, Физлицо = &Физик) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки»;
МомВрем = Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру(«00012″,»31.12.2009 23:59:59»);
Запрос.УстановитьПараметр(«МомВрем», Новый Граница(МомВрем.МоментВремени(), ВидГраницы.Исключая));
// или так: Запрос.УстановитьПараметр(«МомВрем», МомВрем.МоментВремени());
Запрос.УстановитьПараметр(«Физик», Справочники.ФизическиеЛица.НайтиПоКоду(«365»));
ВывестиРезультат(Запрос.Выполнить());

Потребовалось в УТ быстро удалить все движения по банку, дело вроде легкое — отменить проведение всех поступлений и списаний безналичных денежных средств, но не тут то было…

При попытке отмены проведения выполнялись проверки на условия оплаты по заказу и документ ни как не отменял проведения

Ну не может типовым способом, заставим не типовым: Через запрос делаем выбору необходимых нам документов и в обработке результата пишем:

Код 1C v 8.3 Для Каждого СтрокаРезультата Из РезультатТаблица Цикл
//алгоритм обработки строки результата — начало
ДокОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект();
Для Каждого Движение ИЗ ДокОбъект.Движения Цикл
Если Движение.Количество() > 0 Тогда
Точка = Найти(Строка(Движение), «.»);
ВидРегистра = Лев(Строка(Движение), Точка — 13);
РегистрИмя = СокрП(Сред(Строка(Движение), Точка + 1));
Если ВидРегистра = «РегистрНакопления» Тогда
НаборЗаписей = РегистрыНакопления.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = «РегистрБухгалтерии» Тогда
НаборЗаписей = РегистрыБухгалтерии.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = «РегистрСведений» Тогда
НаборЗаписей = РегистрыСведений.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = «РегистрРасчета» Тогда
НаборЗаписей = РегистрыРасчета.СоздатьНаборЗаписей();
КонецЕсли;
НаборЗаписей.Отбор.Регистратор.Установить(ДокОбъект.Ссылка);
Иначе
НаборЗаписей = Движение;
КонецЕсли;
Попытка
НаборЗаписей.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
ДокОбъект.Проведен = Ложь;
//ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Записать(режимзаписидокумента.запись);
//алгоритм обработки строки результата — конец
КонецЦикла;

Готовая функция для использования в своих обработках или общем модуле:

Код 1C v 8.3 Процедура УдалитьДвиженияДокумента(Документ)
ДокОбъект = Документ.ПолучитьОбъект();
Для Каждого Движение ИЗ ДокОбъект.Движения Цикл
Если Движение.Количество() > 0 Тогда
Точка = Найти(Строка(Движение), «.»);
ВидРегистра = Лев(Строка(Движение), Точка — 13);
РегистрИмя = СокрП(Сред(Строка(Движение), Точка + 1));
Если ВидРегистра = «РегистрНакопления» Тогда
НаборЗаписей = РегистрыНакопления.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = «РегистрБухгалтерии» Тогда
НаборЗаписей = РегистрыБухгалтерии.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = «РегистрСведений» Тогда
НаборЗаписей = РегистрыСведений.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = «РегистрРасчета» Тогда
НаборЗаписей = РегистрыРасчета.СоздатьНаборЗаписей();
КонецЕсли;
НаборЗаписей.Отбор.Регистратор.Установить(ДокОбъект.Ссылка);
Иначе
НаборЗаписей = Движение;
КонецЕсли;
Попытка
НаборЗаписей.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецПроцедуры