Не записывает новые данные в документ

1. user87385463 25.05.23 17:32 Сейчас в теме
Всем привет, УПП.
Суть такая: на основании документа А делаю другой Б. И мне надо при проведении Б сравнить ТЧ А и Б,и перезаписать А если там есть какие-то изменения.
Подскажите, что не так делаю? не записывает элементы в документ. Нет ошибок, но ничего и не меняется.
Это в процедуре ПередЗаписью() документа Б
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
3. Sashares 34 25.05.23 18:23 Сейчас в теме
(1)Если документ новый, то в ПередЗаписью ссылки еще нет, поэтому запрос вернет не корректный результат.
4. schweigen 26.05.23 06:01 Сейчас в теме
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ОбновитьДокументОснование();
	
КонецПроцедуры

Процедура ОбновитьДокументОснование()
	
	Текст = 
	"ВЫБРАТЬ
	|	ПТУТовары.Номенклатура КАК Номенклатура,
	|	ПТУТовары.Количество КАК Количество,
	|	ПТУТовары.Коэффициент КАК Коэффициент,
	|	ПТУТовары.фто_МаркаТехники КАК фто_МаркаТехники,
	|	ПТУТовары.фто_Ячейка КАК фто_Ячейка
	|ПОМЕСТИТЬ втПТУТовары
	|ИЗ
	|	&ПТУТовары КАК ПТУТовары
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Товары.НомерСтроки КАК НомерСтроки,
	|	Товары.Номенклатура КАК Номенклатура,
	|	Товары.Количество КАК Количество,
	|	Товары.Коэффициент КАК Коэффициент,
	|	Товары.МаркаТехники КАК МаркаТехники,
	|	Товары.Ячейка КАК Ячейка
	|ПОМЕСТИТЬ втПоступлениеТовары
	|ИЗ
	|	Документ.ПоступлениеЗапчастей.Товары КАК Товары
	|ГДЕ
	|	Товары.Ссылка = &СсылкаПоступлениеЗапчастей
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	втПоступлениеТовары.НомерСтроки КАК НомерСтроки,
	|	втПоступлениеТовары.Номенклатура КАК Номенклатура,
	|	ЕСТЬNULL(втПТУТовары.Количество, втПоступлениеТовары.Количество) КАК Количество,
	|	ЕСТЬNULL(втПТУТовары.Коэффициент, втПоступлениеТовары.Коэффициент) КАК Коэффициент,
	|	ЕСТЬNULL(втПТУТовары.фто_МаркаТехники, втПоступлениеТовары.МаркаТехники) КАК МаркаТехники,
	|	ЕСТЬNULL(втПТУТовары.фто_Ячейка, втПоступлениеТовары.Ячейка) КАК Ячейка
	|ИЗ
	|	втПоступлениеТовары КАК втПоступлениеТовары
	|		ЛЕВОЕ СОЕДИНЕНИЕ втПТУТовары КАК втПТУТовары
	|		ПО втПоступлениеТовары.Номенклатура = втПТУТовары.Номенклатура
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ 
	|	втПоступлениеТовары.НомерСтроки КАК НомерСтроки,
	|	втПоступлениеТовары.Номенклатура КАК Номенклатура
	|ИЗ
	|	втПоступлениеТовары КАК втПоступлениеТовары
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПТУТовары КАК втПТУТовары
	|		ПО втПоступлениеТовары.Номенклатура = втПТУТовары.Номенклатура
	|ГДЕ
	|	(втПоступлениеТовары.Количество <> втПТУТовары.Количество
	|			ИЛИ втПоступлениеТовары.Коэффициент <> втПТУТовары.Коэффициент
	|			ИЛИ втПоступлениеТовары.МаркаТехники <> втПТУТовары.фто_МаркаТехники
	|			ИЛИ втПоступлениеТовары.Ячейка <> втПТУТовары.фто_Ячейка)
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки";
	
	Запрос = новый Запрос(Текст);
	Запрос.УстановитьПараметр("СсылкаПоступлениеЗапчастей", бит_ДокументОснование);
	Запрос.УстановитьПараметр("ПТУТовары", ЭтотОбъект.Товары.Выгрузить());
	Пакет = Запрос.ВыполнитьПакет();
	ТЧПоступления 		= Пакет[2].Выгрузить();
	ИзмененныеСтроки 	= Пакет[3].Выгрузить();
	
	Если ИзмененныеСтроки.Количество() > 0 Тогда
		ПоступлениеЗапчастейОбъект = бит_ДокументОснование.ПолучитьОбъект();
		ПоступлениеЗапчастейОбъект.Товары.Загрузить(ТЧПоступления);
		ПоступлениеЗапчастейОбъект.Записать();
	КонецЕсли;	
	
КонецПроцедуры
Показать

наверно. хз.
вопросы на засыпку:
- че делать при отмене проведения документа Б?
- че будет, если создать два документа Б на одну и туже номенклатуру с разными данными в строке, а затем второй отменить? либо провести еще раз первый?
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. пользователь 25.05.23 17:48
Сообщение было скрыто модератором.
...
3. Sashares 34 25.05.23 18:23 Сейчас в теме
(1)Если документ новый, то в ПередЗаписью ссылки еще нет, поэтому запрос вернет не корректный результат.
5. booksfill 26.05.23 09:40 Сейчас в теме
(1)
Суть такая: на основании документа А делаю другой Б. И мне надо при проведении Б сравнить ТЧ А и Б,и перезаписать А если там есть какие-то изменения.


Если я верно понял, то вы хотите иметь одинаковую таб. часть в обоих документах.
Тогда не нужна таб. часть ни в одном из этих документов, а надо общие данные хранить где-то еще, например в регистре сведений. На форму же обоих документов выводится табл. значений, которая при создании формы заполняется данными РС, а изменения переносятся обратно в РС, согласно вашим бизнес-правилам.
На всякий случай - если вам нужно нечто экзотическое - типа "до проведения таб. части могут различаться", то это решается также.

А то, что вы пытаетесь сделать, по-моему, - серьезная архитектурная ошибка.
4. schweigen 26.05.23 06:01 Сейчас в теме
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ОбновитьДокументОснование();
	
КонецПроцедуры

Процедура ОбновитьДокументОснование()
	
	Текст = 
	"ВЫБРАТЬ
	|	ПТУТовары.Номенклатура КАК Номенклатура,
	|	ПТУТовары.Количество КАК Количество,
	|	ПТУТовары.Коэффициент КАК Коэффициент,
	|	ПТУТовары.фто_МаркаТехники КАК фто_МаркаТехники,
	|	ПТУТовары.фто_Ячейка КАК фто_Ячейка
	|ПОМЕСТИТЬ втПТУТовары
	|ИЗ
	|	&ПТУТовары КАК ПТУТовары
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Товары.НомерСтроки КАК НомерСтроки,
	|	Товары.Номенклатура КАК Номенклатура,
	|	Товары.Количество КАК Количество,
	|	Товары.Коэффициент КАК Коэффициент,
	|	Товары.МаркаТехники КАК МаркаТехники,
	|	Товары.Ячейка КАК Ячейка
	|ПОМЕСТИТЬ втПоступлениеТовары
	|ИЗ
	|	Документ.ПоступлениеЗапчастей.Товары КАК Товары
	|ГДЕ
	|	Товары.Ссылка = &СсылкаПоступлениеЗапчастей
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	втПоступлениеТовары.НомерСтроки КАК НомерСтроки,
	|	втПоступлениеТовары.Номенклатура КАК Номенклатура,
	|	ЕСТЬNULL(втПТУТовары.Количество, втПоступлениеТовары.Количество) КАК Количество,
	|	ЕСТЬNULL(втПТУТовары.Коэффициент, втПоступлениеТовары.Коэффициент) КАК Коэффициент,
	|	ЕСТЬNULL(втПТУТовары.фто_МаркаТехники, втПоступлениеТовары.МаркаТехники) КАК МаркаТехники,
	|	ЕСТЬNULL(втПТУТовары.фто_Ячейка, втПоступлениеТовары.Ячейка) КАК Ячейка
	|ИЗ
	|	втПоступлениеТовары КАК втПоступлениеТовары
	|		ЛЕВОЕ СОЕДИНЕНИЕ втПТУТовары КАК втПТУТовары
	|		ПО втПоступлениеТовары.Номенклатура = втПТУТовары.Номенклатура
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ 
	|	втПоступлениеТовары.НомерСтроки КАК НомерСтроки,
	|	втПоступлениеТовары.Номенклатура КАК Номенклатура
	|ИЗ
	|	втПоступлениеТовары КАК втПоступлениеТовары
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПТУТовары КАК втПТУТовары
	|		ПО втПоступлениеТовары.Номенклатура = втПТУТовары.Номенклатура
	|ГДЕ
	|	(втПоступлениеТовары.Количество <> втПТУТовары.Количество
	|			ИЛИ втПоступлениеТовары.Коэффициент <> втПТУТовары.Коэффициент
	|			ИЛИ втПоступлениеТовары.МаркаТехники <> втПТУТовары.фто_МаркаТехники
	|			ИЛИ втПоступлениеТовары.Ячейка <> втПТУТовары.фто_Ячейка)
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки";
	
	Запрос = новый Запрос(Текст);
	Запрос.УстановитьПараметр("СсылкаПоступлениеЗапчастей", бит_ДокументОснование);
	Запрос.УстановитьПараметр("ПТУТовары", ЭтотОбъект.Товары.Выгрузить());
	Пакет = Запрос.ВыполнитьПакет();
	ТЧПоступления 		= Пакет[2].Выгрузить();
	ИзмененныеСтроки 	= Пакет[3].Выгрузить();
	
	Если ИзмененныеСтроки.Количество() > 0 Тогда
		ПоступлениеЗапчастейОбъект = бит_ДокументОснование.ПолучитьОбъект();
		ПоступлениеЗапчастейОбъект.Товары.Загрузить(ТЧПоступления);
		ПоступлениеЗапчастейОбъект.Записать();
	КонецЕсли;	
	
КонецПроцедуры
Показать

наверно. хз.
вопросы на засыпку:
- че делать при отмене проведения документа Б?
- че будет, если создать два документа Б на одну и туже номенклатуру с разными данными в строке, а затем второй отменить? либо провести еще раз первый?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот