xUnitFor1C icon indicating copy to clipboard operation
xUnitFor1C copied to clipboard

Повторная загрузка не проведенного документа, при наличии проведенного.

Open binexekb opened this issue 8 years ago • 8 comments

Функционал Повторная загрузка не проведенного документа
   Я хочу Что бы при повторной загрузке не проведенного документа, движений по нему не было.

Сценарий Перезапись документа без движений
  Допустим В базе имеется документ с ГУИД "00000000-0000-0000-0000-000000000001"
  И документ проведен
  И документ имеет движения по регистру ОстаткиТоваров
  И в табличных данных имеется документ с ГУИД "00000000-0000-0000-0000-000000000001"
  И документ в табличных данных имеет значение Проведен = ЛОЖЬ
  Когда Я через СериализаторMXL загружаю данные из табличного документа
  Тогда у документа в базе не должно быть движений по регистру ОстаткиТоваров

binexekb avatar May 12 '17 06:05 binexekb

1 В табличных данных для документа указан Режим или поле Режим пусто? Если указан Режим - "Проведение", то документ однозначно проводится с удалением движений. Если режим не указан, то документ только записывается и движения не перезаписываются.

2 Используется ли режим ОбменДанными.Загрузка?

3 возможно, у тебя в коде модуля документа при записи документа сразу удаляются движения?

artbear avatar May 12 '17 06:05 artbear

  1. В табличных данных не указан Режим. Есть режим "ОтменаПроведения"? Думаю в этом режиме документ должен записываться если в базе Ссылка.Проведен = Истина и ЗагружаемыйОбъект.Проведен = Ложь.
  2. соответственно режим ОбменДанными не указан.
  3. В свойствах документа стоит "удаление движений автоматически". А как влияет удаление движение программно?

binexekb avatar May 12 '17 06:05 binexekb

Думаю нужно изменить этот код:

На

РежимЗаписи = Неопределено;
Если ЭтоДокумент И Не ПротоОбъект.Режимы.Объект Тогда
	РежимЗаписи = РежимЗаписиДокумента.Запись;
	Если ПротоОбъект.Режимы.Проведение Тогда
		РежимЗаписи = РежимЗаписиДокумента.Проведение;
	//!!+ binex (12.05.2017 11:40:41)
	ИначеЕсли Объект.Ссылка.Проведен Тогда  
		РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
	//!!- binex	
	КонецЕсли;
	
КонецЕсли;
Результат = ЗаписатьОбъектПриНеобходимости(Объект, ПротоОбъект, ПредставлениеМенеджера, Истина, РежимЗаписи);

binexekb avatar May 12 '17 06:05 binexekb

Не согласен. Указанный код просто записывает документ, если не указан режим проведения. Запись документа не равно отмене проведения документа.

при обычной записи документа в режиме обменДанными.Загрузка не происходит сброса движений. посмотри свой код.

или добавь ОбменДанными.Загрузка

artbear avatar May 12 '17 07:05 artbear

Как не сбрасывать, я понимаю. Как сбрасывать?

binexekb avatar May 12 '17 07:05 binexekb

ИМХО нужно добавить отдельный режим ОтменаПроведения. В итоге для документов будет 2 режима: Проведение и ОтменаПроведения

artbear avatar May 12 '17 07:05 artbear

Дак а какой смысл в этом режиме, когда нужно отменять проведение или нет, определяется только при загрузке данных. В это и суть правки.

binexekb avatar May 12 '17 07:05 binexekb

Потому что нужно явно указывать, чего хочешь достичь - например, загрузить непроведенный документ с отменой проведения. А не использовать неявное поведение - загрузка с Проведен = Ложь отменяет проведение.

у меня в некоторых сценариях как раз не нужно удалять движения, а только загрузить документ

artbear avatar May 12 '17 07:05 artbear