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

СМОТРЕТЬ >>

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

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

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

Оффлайн Neologism

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


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

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

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


Оффлайн 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 ученик 
 


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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

alex0402
91 Сообщений
oleg-x
83 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
67 Сообщений
Golickoff Golickoff
51 Сообщений
ilyay ilyay
44 Сообщений
AIFrame
42 Сообщений
Амал
30 Сообщений
Dethmontt Dethmontt
22 Сообщений
lansy
22 Сообщений
xproh
21 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal