Имя: Пароль:
1C
1С v8
Операция сторно
0 maurita23
 
11.11.21
10:53
В документе Операция сторно нужно вместо одного документа автоматически выбрать несколько (они копятся на опредеелнном счете) и их автоматически сторникровать. Конфа доработана, много субконто добавлены в счете и не программно тоже.
Выбор, заполнение - всё сдлелано. ЧТобы было видно все субконта использую типовую процедуру СформироватьДвиженияСторноНаСервере, но в табличную часть выводятся только проводки последнего документа.
Очистку я убрала.
Затык в этой процедуре, как я понимаю, ПрочитатьДвиженияДокумента.
АктивностьДвижений = Истина;

Для каждого СтрокаРегистра Из Регистры Цикл

Если ЗначениеЗаполнено(ДокументДвижений)
И ДокументДвижений <> Объект.Ссылка Тогда
Если НЕ СтрокаРегистра.ПравоНаИзменение Тогда
Продолжить;
КонецЕсли;
КонецЕсли;

Если СтрокаРегистра.Отображение Тогда
ИмяРеквизита = СтрокаРегистра.Имя + "НаборЗаписей";
НаборЗаписей = РеквизитФормыВЗначение(ИмяРеквизита);
НаборЗаписей.Отбор.Регистратор.Установить(ДокументДвижений);
НаборЗаписей.Прочитать();
ЗначениеВРеквизитФормы(НаборЗаписей, ИмяРеквизита);
Если ДокументДвижений = Объект.Ссылка Тогда
СтрокаРегистра.Записывать = ЭтотОбъект[ИмяРеквизита].Количество() > 0;
Если СтрокаРегистра.Записывать Тогда
АктивностьДвижений = АктивностьДвижений И ЭтотОбъект[ИмяРеквизита][0].Активность;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Как-то можно сделать, чтобы движения не удалялись, а добавлялись?

Вот процедура
Процедура СформироватьДвиженияСторноНаСервере1(СторДок, Объект)

Если НЕ ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;

//ОчиститьДвижения();
//Объект.ТаблицаРегистровНакопления.Очистить();
//Объект.ТаблицаРегистровСведений.Очистить();

РегистрыИсключения = Новый Структура;
Для каждого Регистр Из Метаданные.РегистрыСведений Цикл
РегистрыИсключения.Вставить(Регистр.Имя); // Регистры сведений не сторнируются
КонецЦикла;
УстановитьПривилегированныйРежим(Истина);
РегистрыСДвижениями = ПроведениеСервер.ПолучитьМассивИспользуемыхРегистров(
СторДок, СторДок.Метаданные().Движения, РегистрыИсключения);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтображениеВТаблицеРегистров(РегистрыСДвижениями);
СоздатьРеквизитыФормы();
ПрочитатьДвиженияДокумента(СторДок);
СторнироватьДвижения();
СоздатьЭлементыФормы();

ПересчитатьСуммуОперации(ЭтотОбъект);
Попытка
Объект.Содержание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сторно документа ""%1""'; en = '""%1"" Document Reversing Entry'"),
Строка(СторДок));
Исключение
КонецПопытки;

ЗаполнитьДобавленныеКолонкиТаблиц();

КонецПроцедуры
1 OldCondom
 
11.11.21
11:03
набор записей перетирается каждый раз по регистратору. В первой процедуре
2 OldCondom
 
11.11.21
11:06
вместо Значениевреквизит формы видимо надо сделать не перезапись, а дополнение таблицы
3 Dmitrii
 
гуру
11.11.21
11:13
(0) Не знаю что у вас за конфа,  но, например в БП 3.0, СторнируемыйДокумент - это реквизит шапки документа Операция. И соответственно нескольких сторнируемых документов у одной Операции быть не может.
Не ипите мозг. Напишите обработку, которая будет создавать и заполнять несколько документов Операция - отдельных для каждого сторнируемого документа.
Там кода - одна страница на всё - подбор нужных документов, создание доков Операция, из заполнение и запись.
4 maurita23
 
12.11.21
14:02
(1) Да, тоже понимаю, что проблема в этом месте.
5 maurita23
 
12.11.21
14:03
(2) не подскажите, какой лучше фукцией воспользоваться? У меня надор записей. Иъ надо в таблицу загнать?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.