V
V
Vladik1802020-06-19 23:19:33
1C
Vladik180, 2020-06-19 23:19:33

1c how to pull data from the old contract into a new one with a code?

In general, the task is quite interesting, it is necessary to make it so that from the form in the screenshot, the contract number and the number of days are thrown into the new contract, while from the existing contract, which we are renewing, into the new one, pull up the data of the nomenclature and the client of the Contract. Can anyone help figure it out? Thanks in advance!

Receipt of goods:

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

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


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

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


5eed1dd05cdac289620296.jpeg

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

&НаКлиенте
Процедура ПролонгацияДоговора(Команда)
  ПролонгацияДоговораНаСервере();
КонецПроцедуры

Answer the question

In order to leave comments, you need to log in

2 answer(s)
H
hl_code, 2020-06-21
@hl_code

How difficult it is.
Isn't it easier to use the FillPropertyValues ​​function ?
The table of values ​​can generally be Unloaded () and Loaded ()

K
Konstantin, 2020-06-22
@fosihas

yaBy...
1. brought the terms of the contract into a separate entity. In total, it could a) not be copied, b) change the content at any time.
2. The option at the contract set RS the validity period and the status of the change (valid/extended/closed).
3. Option in the contract requisite Contract Basis.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question