11 июля 2015 г.

1С УТ 10.3 (Обычное приложение) создать кнопку "Новый счет договор"

В конфигурации УТ 10.3 нет кнопки новый счет договор как в конфигурации БП 2.0/3.0
Все приведенное ниже создавалось и проверялось на "Управление торговлей", редакция 10.3 (10.3.31.3)
Ниже представлен кусок кода, который добавляет такой функционал.
Для его использования необходимо создать кнопку на форме и привязать ее к процедуре "НовыйСДНажатие"


Это привязка, дабы кнопка не попортила интерфейс :-)

Наименование договора завязано на номере и дате документа, т.о. новый договор можно создать только для записанного документа (Счет на оплату покупателю/Заказ покупателя)
Новый договор будет иметь такое название (пример):
Счет №1 034 от 29.10.2015
В процедуру добавлена проверка на невнимательность менеджера:

  1. Менеджер открыл форму создания Счета на оплату
  2. Записал его с контрагентом РогаИКопыта
  3. Создал счет договор
  4. А потом ему вздумалось сменить контрагента
  5. 1С автоматом сменит договор
  6. И догадался создать  новый договор
    До добавления проверки, код не создавал новый СД, а просто подставлял существующий
//НачалоМОдификации+
//Новый СЧЕТ-ДОГОВОР НАЧАЛО
Процедура НовыйСДНажатие(Элемент)
 //Проверяем новый документ?
 Если ЗначениеЗАполнено(ЭтотОбъект.Номер) Тогда
  НовыйСДСоздать(); 
 Иначе
  Результат=Вопрос("Для выполнения операции необходимо записать документ!"+Символы.ПС+"Записать документ?",
    РежимДиалогаВопрос.ДаНетОтмена,0,КодВозвратаДиалога.Да,"Записать документ?");
  
  Если Результат=КодВозвратаДиалога.Да Тогда
   ЭтотОбъект.Дата=ТекущаяДата();
   Попытка
           ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись,);
      Исключение
           Сообщить(ОписаниеОшибки());
     КонецПопытки;
   НовыйСДСоздать();
  Иначе
   Возврат;
  КонецЕсли;
      
 КонецЕсли;
КонецПроцедуры
Процедура НовыйСДСоздать()
 //Создаем новый документ
 //Форматируем номер документа - удаляем лидирующие нули
     НомерСнаОП=Формат(Число(Прав(ЭтотОбъект.Номер,9)),"ЧЦ=;ЧВН=");
 //Создаем новое имя для элемента справочника 
  ИмяНовогоСД=Строка("Счет №"+НомерСнаОП+" от "+Формат(ЭтотОбъект.Дата,"ДФ=дд.ММ.гггг")+"");
 //Пытаемся найти договор в справочнике
  НайтиДоговор=Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(ИмяНовогоСД,истина);
  Если НЕ НайтиДоговор.Пустая() Тогда
   //Проверка на соответствие владельца договора и контрагентом в текущем документе, в случае совпадения наименований
   //Если не совпадает, перенумеровываем документ
   Если НЕ НайтиДоговор.Владелец=ЭтотОбъект.Контрагент Тогда
    ЭтотОбъект.УстановитьНовыйНомер("УТ");
    ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись,);
    НомерСнаОП=Формат(Число(Прав(ЭтотОбъект.Номер,9)),"ЧЦ=;ЧВН=");
    ИмяНовогоСД=Строка("Счет №"+НомерСнаОП+" от "+Формат(ЭтотОбъект.Дата,"ДФ=дд.ММ.гггг")+"");
   Иначе
   //Зачем создавать новый, если у нас уже есть договор с таким именем?
    ЭтотОбъект.ДоговорКонтрагента=НайтиДоговор.Ссылка;
    Возврат;
   КонецЕсли;
   Сообщить("Документ перенумерован!");

  КонецЕсли;
  НовыйСчетДоговор=Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
  НоваяСсылка=Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(Новый УникальныйИдентификатор);
  НовыйСчетДоговор.УстановитьСсылкуНового(НоваяСсылка);
  НовыйСчетДоговор.Организация=ЭтотОбъект.Организация;
  НовыйСчетДоговор.Наименование=ИмяНовогоСД;
  НовыйСчетДоговор.Владелец=ЭтотОбъект.Контрагент;
  НовыйСчетДоговор.ВидДоговора=Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
  НовыйСчетДоговор.ВалютаВзаиморасчетов=ЭтотОбъект.ВалютаДокумента.Ссылка;
  НовыйСчетДоговор.ВедениеВзаиморасчетов=перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
  НовыйСчетДоговор.ВестиПоДокументамРасчетовСКонтрагентом=Истина; //необязательно
  Попытка
   НовыйСчетДоговор.Записать();
  Исключение
   Сообщить(ОписаниеОшибки());
  КонецПопытки;
  //Возвращаем ссылку на форму счета
  ЭтотОбъект.ДоговорКонтрагента=НоваяСсылка;

 КонецПроцедуры 
 //Новый СЧЕТ-ДОГОВОР КОНЕЦ

Комментариев нет:

Отправить комментарий