@24LID

Как сделать проверку, чтоб при изменение реквизитов в одном документе менялись данные в другом?

При записи отредактированного реквизита в документе номенклатурная группа, номенклатура нужно чтоб данные так же менялись в другом документе . Удалось мне поправить если пользователь изменяет дату в одном документе – дата меняется в другом. Тоже самое и по полю договор контрагента. Номенклатурную группу отловить не могу знаний нахватать.
Процедура СоздатьОбновитьДоговорКонтрагента(ДоговорПоСделке)
	
	Если ЗначениеЗаполнено(ДоговорПоСделке.УД_ДоговорКонтрагента) Тогда
		ДоговорКонтрагента_ = ДоговорПоСделке.УД_ДоговорКонтрагента;
	Иначе 	
		ЗапросДоговоры= Новый Запрос;
		ЗапросДоговоры.УстановитьПараметр("Организация", ДоговорПоСделке.Организация);
		ЗапросДоговоры.УстановитьПараметр("Контрагент", ДоговорПоСделке.Сделка.ОсновнойКлиент.Контрагент);
		ЗапросДоговоры.УстановитьПараметр("Номер", ДоговорПоСделке.НомерДоговора);
		ЗапросДоговоры.УстановитьПараметр("Дата", ДоговорПоСделке.ДатаДоговора);
		ЗапросДоговоры.Текст=
		"ВЫБРАТЬ
		|	Договор.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.ДоговорыКонтрагентов КАК Договор
		|ГДЕ
		|	Договор.Организация = &Организация
		|	И Договор.Владелец = &Контрагент
		|	И Договор.Номер = &Номер
		|	И Договор.Дата = &Дата";
		
		ДоговорКонтрагента_= "";
		
		ВыборкаДоговоры= ЗапросДоговоры.Выполнить().Выбрать();
		Если ВыборкаДоговоры.Следующий() тогда
			ДоговорКонтрагента_= ВыборкаДоговоры.Ссылка;	
		КонецЕсли; 
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(ДоговорКонтрагента_) тогда
		
		ДоговорКонтрагента_Объект= Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
		ДоговорКонтрагента_Объект.Номер= ДоговорПоСделке.НомерДоговора;
		ДоговорКонтрагента_Объект.Дата= ДоговорПоСделке.ДатаДоговора;
		ДоговорКонтрагента_Объект.Владелец= ОсновнойКлиент.Контрагент;
		ДоговорКонтрагента_Объект.Организация= Организация;
				
		//
		//ДоговорВДокументОбъект.Наименование= "ДДУ " + СокрЛП(ДоговорПоСделке.НомерДоговора) + " от " + Формат(ДоговорПоСделке.ДатаДоговора, "ДФ=dd.MM.yyyy");
		//ДоговорВДокументОбъект.ВидДоговора= Перечисления.ВидыДоговоровКонтрагентов.Прочее;
		// -------- заменено на:
		Если СтрНайти(ЭтотОбъект.ТипДоговораПоСделке.Наименование, "ДКП") > 0 Тогда
			ДоговорКонтрагента_Объект.Наименование= "ДКП " + СокрЛП(ДоговорПоСделке.НомерДоговора) + " от " + Формат(ДоговорПоСделке.ДатаДоговора, "ДФ=dd.MM.yyyy");
			ДоговорКонтрагента_Объект.ВидДоговора= Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
		Иначе			
			ДоговорКонтрагента_Объект.Наименование= "ДДУ " + СокрЛП(ДоговорПоСделке.НомерДоговора) + " от " + Формат(ДоговорПоСделке.ДатаДоговора, "ДФ=dd.MM.yyyy");
			ДоговорКонтрагента_Объект.ВидДоговора= Перечисления.ВидыДоговоровКонтрагентов.Прочее;
		КонецЕсли;
		//*/ 
		
		
		//TO DO
		
		НоменклатурнаяГруппа= "";
	Если Помещения.Количество() > 0 тогда
		НоменклатурнаяГруппа= Помещения[0].НоменклатурнаяГруппа;	
	КонецЕсли;
		

		ДоговорКонтрагента_Объект.ВалютаВзаиморасчетов= Константы.ВалютаРегламентированногоУчета.Получить();
		ДоговорКонтрагента_Объект.бит_стр_ЭтоДоговорФинансированияСтроительстваИлиКуплиПродажиНедвижимости= Истина;
		ДоговорКонтрагента_Объект.бит_ЦФО= Справочники.Подразделения.НайтиПоКоду("БП-000004");
		Если ЗначениеЗаполнено(НоменклатурнаяГруппа) тогда
			ДоговорКонтрагента_Объект.бит_Проект= НоменклатурнаяГруппа.бит_стр_Проект;
		КонецЕсли;
		
		ДоговорКонтрагента_Объект.бит_СуммаДоговора= Сумма;
		ДоговорКонтрагента_Объект.СрокДействия= '20220630';
		ДоговорКонтрагента_Объект.бит_ПредметДоговора= СокрЛП(ДоговорПоСделке.НомерДоговора);
		ДоговорКонтрагента_Объект.бит_стр_ТипДоговораРеализацииНедвижимости= ДоговорПоСделке.ТипДоговора;
		ДоговорКонтрагента_Объект.бит_стр_Строительство= НоменклатурнаяГруппа;
		ДоговорКонтрагента_Объект.СпособВыставленияДокументов= Перечисления.СпособыВыставленияДокументов.Автоматически;
		ДоговорКонтрагента_Объект.Записать();
		
		ДоговорКонтрагента_= ДоговорКонтрагента_Объект.Ссылка;
		
		ДоговорПоСделкеОбъект = ДоговорПоСделке.ПолучитьОбъект();
		ДоговорПоСделкеОбъект.УД_ДоговорКонтрагента = ДоговорКонтрагента_;
		ДоговорПоСделкеОбъект.Записать();
	Иначе // Обновляем реквизиты договора контрагента, т.к. часто документ изменяют в течение первых нескольких дней
			
		
		
		Если ЭтотОбъект.ДополнительныеСвойства.ДатаДоговора <> ДоговорПоСделке.ДатаДоговора Тогда 
			ДоговорКонтрагента_Объект= ДоговорКонтрагента_.ПолучитьОбъект(); 
			
			ДоговорКонтрагента_Объект.Номер= ДоговорПоСделке.НомерДоговора;
			ДоговорКонтрагента_Объект.Дата= ДоговорПоСделке.ДатаДоговора;
			//ДоговорКонтрагента_Объект.Помещения.НоменклатурнаяГруппа= ДоговорПоСделке.НоменклатурнаяГруппа.Наименование;   //Поиск группы    
			//ДоговорКонтрагента_Объект.Помещения.Номенклатура = ДоговорПоСделке.НоменклатурнаяГруппа; 
					НоменклатурнаяГруппа= "";
	Если Помещения.Количество() > 0 тогда
		НоменклатурнаяГруппа= Помещения[0].НоменклатурнаяГруппа;	
	КонецЕсли;
			
			
			Если СтрНайти(ЭтотОбъект.ТипДоговораПоСделке.Наименование, "ДКП") > 0 Тогда
			ДоговорКонтрагента_Объект.Наименование= "ДКП " + СокрЛП(ДоговорПоСделке.НомерДоговора) + " от " + Формат(ЭтотОбъект.ДополнительныеСвойства.ДатаДоговора, "ДФ=dd.MM.yyyy");
			
		Иначе			
			ДоговорКонтрагента_Объект.Наименование= "ДДУ " + СокрЛП(ДоговорПоСделке.НомерДоговора) + " от " + Формат(ЭтотОбъект.ДополнительныеСвойства.ДатаДоговора, "ДФ=dd.MM.yyyy");
			КонецЕсли;

			ДоговорКонтрагента_Объект.Записать();
		КонецЕсли;
		
	КонецЕсли;
	// Временное решение, пока не определимся как надо отражать корерктно в учете

	
КонецПроцедуры
  • Вопрос задан
  • 266 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Dementor
программист, архитектор, аналитик
1) В вопросе про документы, а листинг про справочники.
2) Глаз цепляет, что номенклатурная группа берется только из первого помещения. Варианты, что в первой строке ее нет и/или в других строках указаны другие группы, не учтены.

Чтобы сказать почему код не работает, нужно знать цель его написания. Сейчас текст вопроса и код живут двумя жизнями, которые не имеют связи.

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

При редактировании или при записи отредактированного? Если при редактировании, то второй документ тоже открыт и есть возможность отказаться от изменений как в первом документе, или происходит непосредственная запись второго документа; если второе, то что планируется, если пользователь передумает сохранять первый документ?

Скорее смысл в том, чтобы доуточнить данные более раннего документа по данным более позднего, которые связаны по реквизиту типа ДокументОснование. Скорее всего это тот случай, когда вводится поступление на базе счета на оплату и нужно изменить номенклатурные группы, которые подтянулись из товаров на какие-то другие возможно для параллельного финансового учета. Тогда при записи накладной нужно по реквизиту ДокументОснование проверить строки первого документа (если в конфигурации нет поля Ключ, которое мигрирует между документами и предназначено для связи строк табличных частей, то можно сделать поиск по товару или товару+цене, или товару+цена+количество - зависит от специфики предметной области и постановки задачи) и если есть различие, то получить объект счета и перезаписать с правильной аналитикой.
Ответ написан
fosihas
@fosihas
Автоматизации учета на 1С.
При записи отредактированного реквизита в документе номенклатурная группа,

добавит тикет реквизит, "МенялПользователя" Ложь/Истина. Устанавливать если было изменение. Далее при Записи запускать изменение где надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы