@Vladik180

1с как подтянуть данные из старого договора в новый кодом?

Вообщем задача достаточно интересна, необходимо сделать так что бы из формы на скриншоте, номер договора и кол-во дней подкинулись в новый договор, при этом из уже существующего договора, который мы продлеваем, в новый подтянуть данные номенклатуры и клиента Контр-та. Может кто помочь разобраться? Заранее спасибо!

Прием товара :
&НаСервереБезКонтекста
Функция ПриемТовараНаСервере(ТекущийМагазин)
	       	Запрос = Новый Запрос;
			Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
		|	Поокупка.Ссылка
		|ИЗ
		|	Документ.Покупка КАК Продажа
		|ГДЕ
		|	Продажа.Дата >= &Дата
		|	И Покупка.Магазин = &Магазин";
		
	Запрос.УстановитьПараметр("Дата", НачалоДня(ТекущаяДата()));
	Запрос.УстановитьПараметр("Магазин", ТекущийМагазин);
	
		
	лДокумент = Документы.Покупка.СоздатьДокумент();
	лДокумент.Дата = ТекущаяДата();
	лДокумент.Магазин = ТекущийМагазин;
	лДокумент.Записать(РежимЗаписиДокумента.Запись);
	                              
	Возврат лДокумент.Ссылка;
	
КонецФункции

&НаКлиенте
Процедура ПриемТовара(Команда)
	 ОткрытьФорму("Документ.Покупка.Форма.ФормаДокумента", Новый Структура("Ключ", ПредопределенноеЗначение("Документ.Покупка.ПустаяСсылка")));
КонецПроцедуры


Выдача товара:
&НаСервереБезКонтекста
Функция ПродажаТовараНаСервере(ТекущийМагазин)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
		|	Продажа.Ссылка
		|ИЗ
		|	Документ.Продажа КАК Продажа
		|ГДЕ
		|	Продажа.Дата >= &Дата
		|	И Продажа.Магазин = &Магазин";
	
	Запрос.УстановитьПараметр("Дата", НачалоДня(ТекущаяДата()));
	Запрос.УстановитьПараметр("Магазин", ТекущийМагазин);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Возврат ВыборкаДетальныеЗаписи.Ссылка;
	КонецЦикла;
	
	лДокумент = Документы.Продажа.СоздатьДокумент();
	лДокумент.Дата = ТекущаяДата();
	лДокумент.Магазин = ТекущийМагазин;
	лДокумент.Записать(РежимЗаписиДокумента.Запись);
	Возврат лДокумент.Ссылка;
	
КонецФункции

&НаКлиенте
Процедура ПродажаТовара(Команда)
	ОткрытьФорму("Документ.Продажа.Форма.ФормаДокумента", Новый Структура("Ключ", ПредопределенноеЗначение("Документ.Продажа.ПустаяСсылка")));
КонецПроцедуры


5eed1dd05cdac289620296.jpeg

&НаСервере
Процедура ПролонгацияДоговораНаСервере()
	
	ДокументПокупки = Неопределено;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
		|	Покупка.Ссылка
		|ИЗ
		|	Документ.Покупка КАК Покупка
		|ГДЕ
		|	Покупка.Дата >= &Дата
		|	И Покупка.Магазин = &Магазин";
	
	Запрос.УстановитьПараметр("Дата", НачалоДня(ТекущаяДата()));
	Запрос.УстановитьПараметр("Магазин", ТекущийМагазин);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		ДокументПокупки = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
	КонецЦикла;
	
	
	Если ДокументПокупки = Неопределено Тогда
		ДокументПокупки = Документы.Покупка.СоздатьДокумент();
		ДокументПокупки.Дата = ТекущаяДата();
		ДокументПокупки.Магазин = ТекущийМагазин;
		ДокументПокупки.Записать(РежимЗаписиДокумента.Запись);
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДоговорыКонтрагентовСписокНоменклатуры.Количество,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Цена,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Ссылка.Владелец КАК Контрагент,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.Наименование КАК Наименование,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.КомиссияКоличествоДней КАК КомиссияКоличествоДней,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.ПроцентнаяСтавка КАК ПроцентнаяСтавка,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.СерийныйНомер КАК СерийныйНомер,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.ПланируемаяСуммаПродажи КАК ПланируемаяСуммаПродажи,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.ПробаДрагоценныхМеталлов КАК ПробаДрагоценныхМеталлов,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.МассаЮвелирногоИзделия КАК МассаЮвелирногоИзделия,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.МассаДрагоценныхМеталлов КАК МассаДрагоценныхМеталлов,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.Описание КАК Описание,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.Комплектация КАК Комплектация,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.СтранаПроизводитель КАК СтранаПроизводитель,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.Комментарий КАК Комментарий,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.НедостаткиТовара КАК НедостаткиТовара,
		|	ДоговорыКонтрагентовСписокНоменклатуры.Номенклатура.Фотография КАК Фотография
		|ИЗ
		|	Справочник.ДоговорыКонтрагентов.СписокНоменклатуры КАК ДоговорыКонтрагентовСписокНоменклатуры
		|ГДЕ
		|	ДоговорыКонтрагентовСписокНоменклатуры.Ссылка.Код = &Код";
	
	Запрос.УстановитьПараметр("Код", НомерДоговора);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
		ЗаполнитьЗначенияСвойств(НоваяНоменклатура, ВыборкаДетальныеЗаписи);
		//НоваяНоменклатура.Фотография = ВыборкаДетальныеЗаписи.Фотография;
		Если ЗначениеЗаполнено(СрокПролонгации) Тогда
			НоваяНоменклатура.КомиссияКоличествоДней = СрокПролонгации;
		КонецЕсли;
		
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ПроцентныеСтавкиРегионовСрезПоследних.КоличествоДней,
		|	МИНИМУМ(ПроцентныеСтавкиРегионовСрезПоследних.ПроцентнаяСтавка) КАК ПроцентнаяСтавка
		|ИЗ
		|	РегистрСведений.ПроцентныеСтавкиМагазинов.СрезПоследних(
		|			&ТекущаяДата,
		|			Магазин = &Магазин
		|				И (ДатаОкончания >= &ТекущаяДата
		|					ИЛИ ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1))) КАК ПроцентныеСтавкиРегионовСрезПоследних
		|ГДЕ
		|	ПроцентныеСтавкиРегионовСрезПоследних.КоличествоДней = &КоличествоДней
		|
		|СГРУППИРОВАТЬ ПО
		|	ПроцентныеСтавкиРегионовСрезПоследних.КоличествоДней";
		
		Запрос.УстановитьПараметр("Магазин", ПараметрыСеанса.ТекущийМагазин);
		Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
		Запрос.УстановитьПараметр("КоличествоДней", НоваяНоменклатура.КомиссияКоличествоДней);
		
		РезультатЗапроса = Запрос.Выполнить();
		
		Если РезультатЗапроса.Пустой() Тогда
			Если РольДоступна("Магазин") Тогда
				Сообщить("В данном регионе не настроены условия Комиссии.");
			КонецЕсли;
			Возврат;
		Иначе
			ВыборкаПроцентнаяСтавка = РезультатЗапроса.Выбрать();
			ВыборкаПроцентнаяСтавка.Следующий();
			НоваяНоменклатура.ПроцентнаяСтавка = ВыборкаПроцентнаяСтавка.ПроцентнаяСтавка;
		КонецЕсли;
		
		НоваяНоменклатура.Записать();
		НоваяСтрокаПокупки = ДокументПокупки.СписокНоменклатуры.Добавить();
		НоваяСтрокаПокупки.Номенклатура = НоваяНоменклатура.Ссылка;
		НоваяСтрокаПокупки.Количество = ВыборкаДетальныеЗаписи.Количество;
		НоваяСтрокаПокупки.Цена = ВыборкаДетальныеЗаписи.Цена;
		НоваяСтрокаПокупки.Контрагент = ВыборкаДетальныеЗаписи.Контрагент;
		НоваяСтрокаПокупки.Сотрудник = ТекущийСотрудник;
		НоваяСтрокаПокупки.Сумма = ВыборкаДетальныеЗаписи.Количество * ВыборкаДетальныеЗаписи.Цена;
	КонецЦикла;
	
	ДокументПокупки.Записать(РежимЗаписиДокумента.Проведение);
	
КонецПроцедуры

&НаКлиенте
Процедура ПролонгацияДоговора(Команда)
	ПролонгацияДоговораНаСервере();
КонецПроцедуры
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 2
@hl_code
Dev 1C, Java, JS, C#, Python
Как всё сложно.

Не проще воспользоваться функцией ЗаполнитьЗначенияСвойств ?
Таблицу значений так вообще можно Выгрузить() и Загрузить()
Ответ написан
Комментировать
fosihas
@fosihas
Автоматизации учета на 1С.
яБы...
1. условия договора вывел в отдельную сущность. Итого ее можно было а) не копировать, б) менять на любой момент содержимое.
2. вариант у договора поставил РС срок действия и статус изменения (действующий/продлен/закрыт).
3. вариант в договор реквизит Договор Основание.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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