Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 апр 2024, 05:18

Платформа 7.7 (7.70.025) Доработка процедуры

Автор Neologism, 25 янв 2016, 09:16

0 Пользователей и 1 гость просматривают эту тему.

Neologism

Добрый день! Имеется процедура создания документа:

Процедура ПриВыбореДоговора()     
If Договор.ПометкаУдаления()=1 Then
Message("Договор "+TrimAll(Договор)+" - помечен на удаление","!!!");
    Return;
EndIf;


СчетПлательщика = Договор.СчетДебет;
СчетПолучателя = Договор.РСПлательщика;
СчетНДС = Договор.СчетНДС;
Получатель = Договор.Организация; 
ОрганизацияДляСФ = ?(ПустоеЗначение(Договор.ОрганизацияДляСФ)=1,Договор.Организация,Договор.ОрганизацияДляСФ);
СчетБанкаПолучателя = Фирма.КоррСчет;
КорСчетПлательщика = Фирма.КоррСчет;
СтавкаНДС = Договор.СтавкаНДС.Получить(ДатаДок); 
СчетБанкаПлательщика = Фирма.КоррСчет;
БИКБанкаПлательщика = Фирма.БИК;
БИКБанкаПолучателя = Фирма.БИК;
// Тут должна быть бесполезная муть)   
Сумма = Договор.СуммаЕжемесячногоПлатежа.Получить(ДатаДок);
НДС = Договор.СтавкаНДС.Получить(ДатаДок).Ставка*Сумма/(Договор.СтавкаНДС.Получить(ДатаДок).Ставка+100);
СуммаБезНДС = Сумма - НДС;
НачДата = НачМесяца(ДатаДок);
КонДата = КонМесяца(ДатаДок);
Если Договор.СрокПлатежа.СледМесяц=0 Тогда
Если СокрЛП(Договор.СтрокаДляМО)="" Тогда
Если Договор.ВидДоговора = Перечисление.ВидыДоговоров.ДоговорАренды Тогда
НазначениеПлатежа = "Расходы за аренду помещения за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.КоммунальныеПлатежи Тогда
НазначениеПлатежа = "Расходы коммунальные платежи за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Охрана Тогда
НазначениеПлатежа = "Расходы по охране за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Связь Тогда
НазначениеПлатежа = "Расходы за связь за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Хранения Тогда
НазначениеПлатежа = "Расходы за хранение "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
КонецЕсли;
Иначе
НазначениеПлатежа = Договор.СтрокаДляМО+" за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора;
конецесли;
Если Договор.ДоговорСНДС=1 Тогда
СчетНДС = Договор.СчетНДС;
НазначениеПлатежаНДС = Договор.СтрокаДляНДС+" за "+ПериодСтр(НачДата,КонДата)+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора;
КонецЕсли;

Иначе     
Если СокрЛП(Договор.СтрокаДляМО)="" Тогда
Если Договор.ВидДоговора = Перечисление.ВидыДоговоров.ДоговорАренды Тогда
НазначениеПлатежа = "Начисление платы за аренду помещения за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.КоммунальныеПлатежи Тогда
НазначениеПлатежа = "Расходы за коммунальные платежи за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Охрана Тогда
НазначениеПлатежа = "Расходы по охране за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Связь Тогда
НазначениеПлатежа = "Расходы за связь за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Хранения Тогда
НазначениеПлатежа = "Расходы за хранение "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
КонецЕсли;   
Иначе
НазначениеПлатежа = Договор.СтрокаДляМО+" за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора;
конецесли;
Если Договор.ДоговорСНДС=1 Тогда
СчетНДС = Договор.СчетНДС;
НазначениеПлатежаНДС = Договор.СтрокаДляНДС+" за "+ПериодСтр(НачДата,КонДата)+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора;
КонецЕсли;
КонецЕсли;
          Если Договор.СчетДебет1.Код <> 0 Тогда

  СчетДебет = Договор.СчетДебет1;
  КонецЕсли;
 
КонецПроцедуры   // ПриВыбореДоговора() 

т.е. на основании данных справочника Договоры создается документ. Возможно ли модифицировать
процедуру следующим образом: если в справочнике указано более одного счета затрат создавать два и более
(по числу заполненных счетов) документа?

meNTor

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

Neologism


Процедура Множественные()
Если Договор.СчетДебет1.Код = 0 Тогда
                СчетПлательщика = Договор.СчетДебет;
СчетПолучателя = Договор.РСПлательщика;
СчетНДС = Договор.СчетНДС;
Получатель = Договор.Организация; 
ОрганизацияДляСФ = ?(ПустоеЗначение(Договор.ОрганизацияДляСФ)=1,Договор.Организация,Договор.ОрганизацияДляСФ);
СчетБанкаПолучателя = Фирма.КоррСчет;
КорСчетПлательщика = Фирма.КоррСчет;
СтавкаНДС = Договор.СтавкаНДС.Получить(ДатаДок); 
СчетБанкаПлательщика = Фирма.КоррСчет;
БИКБанкаПлательщика = Фирма.БИК;
БИКБанкаПолучателя = Фирма.БИК;
Сумма = Договор.СуммаЕжемесячногоПлатежа.Получить(ДатаДок);;
НДС = Договор.СтавкаНДС.Получить(ДатаДок).Ставка*Сумма/(Договор.СтавкаНДС.Получить(ДатаДок).Ставка+100);
СуммаБезНДС = Сумма - НДС;
НачДата = НачМесяца(ДатаДок);
КонДата = КонМесяца(ДатаДок);
Если Договор.СрокПлатежа.СледМесяц=0 Тогда
Если СокрЛП(Договор.СтрокаДляМО)="" Тогда
Если Договор.ВидДоговора = Перечисление.ВидыДоговоров.ДоговорАренды Тогда
НазначениеПлатежа = "Расходы за аренду помещения за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.КоммунальныеПлатежи Тогда
НазначениеПлатежа = "Расходы коммунальные платежи за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Охрана Тогда
НазначениеПлатежа = "Расходы по охране за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Связь Тогда
НазначениеПлатежа = "Расходы за связь за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Хранения Тогда
НазначениеПлатежа = "Расходы за хранение "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
КонецЕсли;
Иначе
НазначениеПлатежа = Договор.СтрокаДляМО+" за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора;
конецесли;
Если Договор.ДоговорСНДС=1 Тогда
СчетНДС = Договор.СчетНДС;
НазначениеПлатежаНДС = Договор.СтрокаДляНДС+" за "+ПериодСтр(НачДата,КонДата)+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора;
КонецЕсли;

Иначе     
Если СокрЛП(Договор.СтрокаДляМО)="" Тогда
Если Договор.ВидДоговора = Перечисление.ВидыДоговоров.ДоговорАренды Тогда
НазначениеПлатежа = "Начисление платы за аренду помещения за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.КоммунальныеПлатежи Тогда
НазначениеПлатежа = "Расходы за коммунальные платежи за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Охрана Тогда
НазначениеПлатежа = "Расходы по охране за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Связь Тогда
НазначениеПлатежа = "Расходы за связь за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
ИначеЕсли Договор.ВидДоговора = Перечисление.ВидыДоговоров.Хранения Тогда
НазначениеПлатежа = "Расходы за хранение "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора+" "+"";
КонецЕсли;   
Иначе
НазначениеПлатежа = Договор.СтрокаДляМО+" за "+Формат(НачДата,"Д ММММГГГГ")+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора;
конецесли;
Если Договор.ДоговорСНДС=1 Тогда
СчетНДС = Договор.СчетНДС;
НазначениеПлатежаНДС = Договор.СтрокаДляНДС+" за "+ПериодСтр(НачДата,КонДата)+" по договору № "+СокрЛП(Договор.НомерДоговора)+" от "+Договор.ДатаНачалаДоговора;
КонецЕсли;
КонецЕсли;
 
КонецЕсли; 
                   Если Договор.СчетДебет1.Код <> 0 Тогда
               Док = СоздатьОбъект ("Документы.ЗакрытиеМесяца");
   Док.НоваяСтрока();
   Док.Договор =  ...
 
КонецЕсли;

КонецПроцедуры // Множественные

Правильно ли я уловил Вашу идею?

meNTor

Не совсем понятно в каком виде в справочнике "Договоры" реализованы "Счета затрат", но в общем правильно.
Но у вас была фраза в первом сообщении "более одного счета затрат создавать два и более (по числу заполненных счетов) документа", которая предполагает вероятность множественного наличия счетов. В таком случае правильнее через цикл (счетов затрат) делать, и создание документа вывести в отдельную процедуру.
Добавлено: 25 янв 2016, 15:24


Что то вроде:
Для й = 1 по КоличествоСчетов Цикл
    Если й = 1 Тогда
        //заполняем реквизиты
    Иначе
        СоздатьДокумент(); //процедура создания документа, в которую нужно передавать счет затрат и т.п.
    КонецЕсли;
КонецЦикла;

Neologism

Обычным перечислением реквизита реализовано ... т.е. в справочнике заполнены или не заполнены реквизиты СчетДебет,СчетДебет1, СчетДебет2, СчетДебет3, СчетДебет4....
хотелось бы одной процедурой обойтись, но видимо не получится. :dfbsdfbsdf:  А у документа только один реквизит СчетДебет.

meNTor

Можно и одной процедурой обойтись.
Можно СчетаДебета в отдельный справочник вынести (подчиненный Договорам).
Много чего можно...

Neologism

Добавил к процедуре условие проверки на наличие второго счета, но в табличной части ничего не меняется - всё так же одна строка... 

           Если Договор.СчетДебет1.Код <> "" Тогда   
НоваяСтрока();
АктивизироватьСтроку();
Сумма = Договор.СуммаПоСчету1.Получить(ДатаДок);
НДС = Договор.СтавкаНДС.Получить(ДатаДок).Ставка*Сумма/(Договор.СтавкаНДС.Получить(ДатаДок).Ставка+100);
     СуммаБезНДС = Сумма - НДС; 
СчетДебет = Договор.СчетДебет1;
КонецЕсли;


Добавлено: 29 янв 2016, 10:05


Цитата: meNTor от 25 янв 2016, 15:20
Не совсем понятно в каком виде в справочнике "Договоры" реализованы "Счета затрат", но в общем правильно.
Но у вас была фраза в первом сообщении "более одного счета затрат создавать два и более (по числу заполненных счетов) документа", которая предполагает вероятность множественного наличия счетов. В таком случае правильнее через цикл (счетов затрат) делать, и создание документа вывести в отдельную процедуру.
Добавлено: 25 янв 2016, 15:24


Что то вроде:
Для й = 1 по КоличествоСчетов Цикл
    Если й = 1 Тогда
        //заполняем реквизиты
    Иначе
        СоздатьДокумент(); //процедура создания документа, в которую нужно передавать счет затрат и т.п.
    КонецЕсли;
КонецЦикла;
Всё таки не правильно изначально объяснил ... документ создавать не нужно - нужно отразить в табличной части счет затрат и сумму по счету .....

meNTor

Скинь MD файл, а то уже совсем ничего не поняьно...

Neologism

Во вложении md файл
Добавлено: 01 фев 2016, 08:19



Теги: 1С 7.7 ученик 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск