Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
23 Май 2017, 17:45
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Платформа 7.7 (7.70.025) Доработка процедуры  (Прочитано 1047 раз)

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

Оффлайн Neologism

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-01-25
  • Сайт: 
  • Профессия: Ученик 1С
Добрый день! Имеется процедура создания документа:
Процедура ПриВыбореДоговора()      
If Договор.ПометкаУдаления()=1 Then
Message("Договор "+TrimAll(Договор)+" - помечен на удаление","!!!");
    Return;
EndIf;


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

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

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

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>


Оффлайн meNTor

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 6
  • КПД: 35%
  • Регистрация: 2016-01-24
  • Сайт: 
  • Профессия: Программист 1С
Я так понимаю, данная процедура отрабатывается интерактивно в открытом документе при выборе договора. Т.е. один документ у нас уже вроде как есть.
Тогда можно так попробовать:
- Сделать в цикле перебор счетов затрат.
- На первый счет: заполняем реквизиты данного документа
- Если счетов более одного: программно создаем документы

Оффлайн Neologism

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

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

КонецПроцедуры // Множественные
Правильно ли я уловил Вашу идею?

Оффлайн meNTor

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 6
  • КПД: 35%
  • Регистрация: 2016-01-24
  • Сайт: 
  • Профессия: Программист 1С
Не совсем понятно в каком виде в справочнике "Договоры" реализованы "Счета затрат", но в общем правильно.
Но у вас была фраза в первом сообщении "более одного счета затрат создавать два и более (по числу заполненных счетов) документа", которая предполагает вероятность множественного наличия счетов. В таком случае правильнее через цикл (счетов затрат) делать, и создание документа вывести в отдельную процедуру.
Добавлено: 25 Янв 2016, 15:24

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

Оффлайн Neologism

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-01-25
  • Сайт: 
  • Профессия: Ученик 1С
Обычным перечислением реквизита реализовано ... т.е. в справочнике заполнены или не заполнены реквизиты СчетДебет,СчетДебет1, СчетДебет2, СчетДебет3, СчетДебет4....
хотелось бы одной процедурой обойтись, но видимо не получится. :dfbsdfbsdf:  А у документа только один реквизит СчетДебет.

Оффлайн meNTor

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 6
  • КПД: 35%
  • Регистрация: 2016-01-24
  • Сайт: 
  • Профессия: Программист 1С
Можно и одной процедурой обойтись.
Можно СчетаДебета в отдельный справочник вынести (подчиненный Договорам).
Много чего можно...

Оффлайн Neologism

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-01-25
  • Сайт: 
  • Профессия: Ученик 1С
Добавил к процедуре условие проверки на наличие второго счета, но в табличной части ничего не меняется - всё так же одна строка... 
	           Если Договор.СчетДебет1.Код <> "" Тогда    
НоваяСтрока();
АктивизироватьСтроку();
Сумма = Договор.СуммаПоСчету1.Получить(ДатаДок);
НДС = Договор.СтавкаНДС.Получить(ДатаДок).Ставка*Сумма/(Договор.СтавкаНДС.Получить(ДатаДок).Ставка+100);
     СуммаБезНДС = Сумма - НДС; 
СчетДебет = Договор.СчетДебет1;
КонецЕсли;

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

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

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

Последний раз редактировалось: Neologism; 29 Янв 2016, 10:05. Причина: Объединение сообщений

Оффлайн meNTor

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 6
  • КПД: 35%
  • Регистрация: 2016-01-24
  • Сайт: 
  • Профессия: Программист 1С
Скинь MD файл, а то уже совсем ничего не поняьно...

Оффлайн Neologism

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2016-01-25
  • Сайт: 
  • Профессия: Ученик 1С
Во вложении md файл
Добавлено: 01 Фев 2016, 08:19


Последний раз редактировалось: Neologism; 01 Фев 2016, 08:19. Причина: Объединение сообщений


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


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
96 Сообщений
Dethmontt Dethmontt
71 Сообщений
alex0402
69 Сообщений
MuI_I_Ika MuI_I_Ika
61 Сообщений
wise wise
50 Сообщений
Сергей Федоров Сергей Федоров
41 Сообщений
ilyay ilyay
39 Сообщений
BuhRust
22 Сообщений
ilnur75
20 Сообщений
magnifico61
20 Сообщений

* Кто онлайн

  • Точка Гостей: 674
  • Точка Скрытых: 0
  • Точка Пользователей: 12
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal