Документ видит остатки с учётом своих движений
Мне надо убедиться, что при проведении документа будут положительные остатки не только после проведения документа, но и на "после всех документов".
Это применяется при проведении документов задним числом.
Делаю это следующим образом:
Но если документ уже был проведён - остатки считаются с учётом прошлого проведения.
Как сделать, что документ видел остатки после себя без учёта своих старых движений?
Либо как увидеть, сколько было в этих старых движениях?
Это применяется при проведении документов задним числом.
Делаю это следующим образом:
&Сервер
&Перед("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
ОстаткиТовара=РегистрыБухгалтерии.Хозрасчетный.Остатки(,ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура,ОтборНоменклатуры, ,"Количество");
Если ОстаткиТовара.Количество()>0 Тогда
ОстатокТовара=ОстаткиТовара[0].КоличествоОстатокДт;
Иначе
ОстатокТовара=0;
КонецЕсли;
ПоказатьНо если документ уже был проведён - остатки считаются с учётом прошлого проведения.
Как сделать, что документ видел остатки после себя без учёта своих старых движений?
Либо как увидеть, сколько было в этих старых движениях?
По теме из базы знаний
- Регистрация документов в последовательностях при работе с обменом данными
- [УТ 11.1] Особенности работы с табличной частью «Виды запасов»
- Слияние баз ERP (формирование остатков и перенос данных)
- Анализ движения денежных средств для БП 3.0, УНФ 1.6
- Пример решения задачи по оперативному учету для экзамена (1С: Специалист по платформе 8.3)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Документ должен иметь свойство "Удаление движений - Удалять автоматически".
Процедура вставляется в любой регистр накопления и не дает провести любой документ, если это приведет к отрицательному остатку. Модуль набора записей - ПередЗаписью.
Остаток берется на тот период, который указан в движении.
Измени значение параметра запроса Период, чтобы получить остаток на текущую дату.
Процедура вставляется в любой регистр накопления и не дает провести любой документ, если это приведет к отрицательному остатку. Модуль набора записей - ПередЗаписью.
Остаток берется на тот период, который указан в движении.
Измени значение параметра запроса Период, чтобы получить остаток на текущую дату.
Процедура ПередЗаписью(Отказ, Замещение)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если КонтролироватьОстатки() Тогда
КонтрольОтрицательныхОстатковРегистраНакопления(Отказ, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
Процедура КонтрольОтрицательныхОстатковРегистраНакопления(Отказ, НаборЗаписей, ВыводитьСообщения = Истина, НачалоСообщения = "") Экспорт
Если НаборЗаписей.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если ПустаяСтрока(НачалоСообщения) Тогда
НачалоСообщения = "Превышение остатка по измерениям";
КонецЕсли;
Метаданное = НаборЗаписей.Метаданные();
Измерения = новый Массив;
Ресурсы = новый Массив;
Для каждого Измерение из Метаданное.Измерения Цикл
Измерения.Добавить(Измерение.Имя);
КонецЦикла;
Для каждого Ресурс из Метаданное.Ресурсы Цикл
Ресурсы.Добавить(Ресурс.Имя);
КонецЦикла;
Текст = "ВЫБРАТЬ ";
Разделитель = ", ";
Для каждого Измерение из Измерения Цикл
Текст = Текст + СтрШаблон("НЗ.%1 КАК %1%2", Измерение, Разделитель);
КонецЦикла;
Для каждого Ресурс из Ресурсы Цикл
Текст = Текст + СтрШаблон("НЗ.%1 КАК %1%2", Ресурс, Разделитель);
КонецЦикла;
Текст = Сред(Текст, 1, СтрДлина(Текст)-2);
Текст = Текст + " ПОМЕСТИТЬ втНЗ ИЗ &НЗ КАК НЗ ГДЕ НЗ.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход); ВЫБРАТЬ ";
Для каждого Измерение из Измерения Цикл
Текст = Текст + СтрШаблон("втНЗ.%1 КАК %1%2", Измерение, Разделитель);
КонецЦикла;
Для каждого Ресурс из Ресурсы Цикл
Текст = Текст + СтрШаблон("СУММА(втНЗ.%1) КАК %1%2", Ресурс, Разделитель);
КонецЦикла;
Текст = Сред(Текст, 1, СтрДлина(Текст)-2);
Текст = Текст + " ПОМЕСТИТЬ Т ИЗ втНЗ КАК втНЗ СГРУППИРОВАТЬ ПО ";
Для каждого Измерение из Измерения Цикл
Текст = Текст + СтрШаблон("втНЗ.%1%2", Измерение, Разделитель);
КонецЦикла;
Текст = Сред(Текст, 1, СтрДлина(Текст)-2);
Текст = Текст + СтрШаблон("; ВЫБРАТЬ * ИЗ Т КАК Т ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.%1.Остатки( &Период, ", Метаданное.Имя);
Для каждого Измерение из Измерения Цикл
Текст = Текст + СтрШаблон(" %1 В (ВЫБРАТЬ РАЗЛИЧНЫЕ Т.%1 ИЗ Т КАК Т) И ", Измерение);
КонецЦикла;
Текст = Сред(Текст, 1, СтрДлина(Текст)-2);
Текст = Текст + " ) КАК Остатки ПО ";
Для каждого Измерение из Измерения Цикл
Текст = Текст + СтрШаблон("Т.%1 = Остатки.%1 И ", Измерение);
КонецЦикла;
Текст = Сред(Текст, 1, СтрДлина(Текст)-2);
Текст = Текст + " ГДЕ ( ";
Для каждого Ресурс из Ресурсы Цикл
Текст = Текст + СтрШаблон("Т.%1 > ЕСТЬNULL(Остатки.%1Остаток, 0) ИЛИ ", Ресурс);
КонецЦикла;
Текст = Сред(Текст, 1, СтрДлина(Текст)-4);
Текст = Текст + ") ";
Запрос = новый Запрос(Текст);
Запрос.УстановитьПараметр("Период", новый Граница(НаборЗаписей[0].Период, ВидГраницы.Исключая)); // Период
Запрос.УстановитьПараметр("НЗ", НаборЗаписей.Выгрузить());
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Отказ = Истина;
Если ВыводитьСообщения Тогда
Массив = новый Массив;
Массив.Добавить(НаборЗаписей.Отбор.Регистратор.Значение);
Массив.Добавить(СтрШаблон("%1 - %2:", Метаданное.Синоним, НачалоСообщения));
Для каждого Измерение из Измерения Цикл
Массив.Добавить(СтрШаблон("%1: %2", Измерение, Выборка[Измерение]));
КонецЦикла;
СообщениеОбОшибке(Отказ, НаборЗаписей.Отбор.Регистратор.Значение.ПолучитьОбъект(),, СтрСоединить(Массив, Символы.ПС));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура СообщениеОбОшибке(Отказ, ПутьИлиОбъект, Поле = "", Знач ТекстСообщения = "Поле не заполнено") Экспорт
Отказ = Истина;
Сообщение = новый СообщениеПользователю;
Сообщение.Поле = Поле;
Сообщение.Текст = ТекстСообщения;
Если ТипЗнч(ПутьИлиОбъект) = Тип("Строка") Тогда
Сообщение.ПутьКДанным = ПутьИлиОбъект;
Иначе
Сообщение.УстановитьДанные(ПутьИлиОбъект);
КонецЕсли;
Сообщение.Сообщить();
КонецПроцедуры
Показать
вариант 1
от текущих остатков отнять движения по текущему документу (если это перед обработкой проведения как на скрине)
вариант 2
анализировать сами движения Хозрасчетный (перед и при записи)
p.s. не бойтесь запросов ;))
от текущих остатков отнять движения по текущему документу (если это перед обработкой проведения как на скрине)
вариант 2
анализировать сами движения Хозрасчетный (перед и при записи)
p.s. не бойтесь запросов ;))
(3) Я пытался увидеть движения Хозрасчётный таким кодом:
Не видит движений.
ОборотыТовара=РегистрыБухгалтерии.Хозрасчетный.Обороты(ЭтотОбъект.МоментВремени(),ЭтотОбъект.МоментВремени(),ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура,ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура,ОтборНоменклатуры, ,"Количество");
Если ОборотыТовара.Количество()>0 Тогда
РасходТовара=ОборотыТовара[0].КоличествоКт;
Иначе
РасходТовара=0;
КонецЕсли;
Не видит движений.
(8) как вариант, через дополнительное свойство... если Вы окунетесь в мир какой-то последний конфигурации, то там почти в каждой есть процедуры перед записью и при записи в регистрах накопления... вот что-то можно подобное сотворить и для записей регистра бухгалтери ;))
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот