Выполнение этапа работ и формирование счетов-фактур
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
По формированию счетов-фактур у меня есть такой файл, можно его переделать под "выполнение этапа работ"?
Прикрепленные файлы:
ФормированиеСФ.ert
В строке 113 "СчетФактура" заменяем на "ВыполнениеЭтапаРабот"
Далее нужно переработать процедуру Заполнить(ДокОсн), чтобы обрабатывались реквизиты документа ВыполнениеЭтапаРабот.
Например Товар нужно заменить на Работа
Справишься?
Далее нужно переработать процедуру Заполнить(ДокОсн), чтобы обрабатывались реквизиты документа ВыполнениеЭтапаРабот.
Например Товар нужно заменить на Работа
Справишься?
Да.
Нужно скопировать твою обработку с друрим именем( Напр. ФормированиеЭтапаработ)
Открыть конфигуратор, . в конфигураторе открыть эту обработку, перейти на закладку модуль
Открыть конфигурацию, - Документы - ВыполнениеЭтапаРабот, чтобы видеть. какие там есть реквизиты. Вот их тебе и нужно заполнить из реализации.
потом так же можешь перенисать вторую обработку для услуг сторонних организаций. Количество и сумму можешь умножать на коэффициентик.
Экспериментируй сначала в копии базы.
Нужно скопировать твою обработку с друрим именем( Напр. ФормированиеЭтапаработ)
Открыть конфигуратор, . в конфигураторе открыть эту обработку, перейти на закладку модуль
Открыть конфигурацию, - Документы - ВыполнениеЭтапаРабот, чтобы видеть. какие там есть реквизиты. Вот их тебе и нужно заполнить из реализации.
потом так же можешь перенисать вторую обработку для услуг сторонних организаций. Количество и сумму можешь умножать на коэффициентик.
Экспериментируй сначала в копии базы.
Вот что получилось. И вот такое ругательство - ФОРМИРОВАНИЕСФ_СТРОЙКА.ERT(19)}: Поле агрегатного объекта не обнаружено (Работа)? где косячок?
Прикрепленные файлы:
ФормированиеСФ_стройка.ert
А, вот в чем дело. У документа ФормированиеЭтапаработ в табличной части есть РАБОТА, а у накладной ТОВАР
Вот так должно быть
НовДок.Работа=ДокОсн.Товар;
НовДок - реквизиты, какие есть у создаваемого документа, а ДокОсн - с которого копируем, у него ничего не трогай.
Вот так должно быть
НовДок.Работа=ДокОсн.Товар;
НовДок - реквизиты, какие есть у создаваемого документа, а ДокОсн - с которого копируем, у него ничего не трогай.
(16) JUJA,
Тьфу ты... Конечно не то...
Меня что-йто заклинило формировать Выполнение этапа работ. Извиняюсь, перегрелся...
Значит немного не так. Сейчас сориентируюсь.
вот кусок кода с 19 строки, проверил, формирует.
// НовДок.Работа = ДокОсн.Работа;
НовДок.ВерсияОбъекта=Константа.НомерРелиза;
// Заполнение грузополучателя и грузоотправителя
НовДок.Грузополучатель=ДокОсн.Контрагент;
// Если ПустоеЗначение(ДокОсн.Грузополучатель) = 0 Тогда
// НовДок.Грузополучатель = ДокОсн.Грузополучатель;
// КонецЕсли;
// Если ПустоеЗначение(ДокОсн.Грузоотправитель) = 0 Тогда
НовДок.ВариантОтправки = 1;
// НовДок.Грузоотправитель = ДокОсн.Грузоотправитель;
// КонецЕсли;
// НовДок.Аванс = 0;
НовДок.ВидОперации = Перечисление.ВидыОперацийСчетаФактурыВыданного.Реализация;
ДокОсн.ВыбратьСтроки();
Пока ДокОсн.ПолучитьСтроку()=1 Цикл
НовДок.НоваяСтрока();
НовДок.НазначитьТип("Товар", "Справочник.Номенклатура");
//СтранаПроисхождения = Работа.СтранаПроисхождения;
НовДок.Товар=ДокОсн.Работа;
Тьфу ты... Конечно не то...
Меня что-йто заклинило формировать Выполнение этапа работ. Извиняюсь, перегрелся...
Значит немного не так. Сейчас сориентируюсь.
вот кусок кода с 19 строки, проверил, формирует.
// НовДок.Работа = ДокОсн.Работа;
НовДок.ВерсияОбъекта=Константа.НомерРелиза;
// Заполнение грузополучателя и грузоотправителя
НовДок.Грузополучатель=ДокОсн.Контрагент;
// Если ПустоеЗначение(ДокОсн.Грузополучатель) = 0 Тогда
// НовДок.Грузополучатель = ДокОсн.Грузополучатель;
// КонецЕсли;
// Если ПустоеЗначение(ДокОсн.Грузоотправитель) = 0 Тогда
НовДок.ВариантОтправки = 1;
// НовДок.Грузоотправитель = ДокОсн.Грузоотправитель;
// КонецЕсли;
// НовДок.Аванс = 0;
НовДок.ВидОперации = Перечисление.ВидыОперацийСчетаФактурыВыданного.Реализация;
ДокОсн.ВыбратьСтроки();
Пока ДокОсн.ПолучитьСтроку()=1 Цикл
НовДок.НоваяСтрока();
НовДок.НазначитьТип("Товар", "Справочник.Номенклатура");
//СтранаПроисхождения = Работа.СтранаПроисхождения;
НовДок.Товар=ДокОсн.Работа;
Перем НовДок;
Перем КолНовДок;
//=============================================================================
Функция Заполнить(ДокОсн)
НовДок.Новый();
НовДок.ДатаДок=ДокОсн.ДатаДок;
Если СокрЛП(НачНомер)=0 Тогда
//НовДок.УстановитьНовыйНомер();
Иначе
ааа = Строка(Число(НачНомер) + КолНовДок - 1) + СокрЛП(БуквОк);
Пока СтрДлина(ааа)<8 Цикл
ааа = "0"+ааа;
КонецЦикла;
НовДок.НомерДок = ааа;
КонецЕсли;
НовДок.Договор = ДокОсн.Договор;
НовДок.Контрагент=ДокОсн.Контрагент;
НовДок.ТипЦен = ДокОсн.ТипЦен;
НовДок.Работа = ДокОсн.Работа;
НовДок.ВерсияОбъекта=Константа.НомерРелиза;
// Заполнение грузополучателя и грузоотправителя
НовДок.Грузополучатель=ДокОсн.Контрагент;
Если ПустоеЗначение(ДокОсн.Грузополучатель) = 0 Тогда
НовДок.Грузополучатель = ДокОсн.Грузополучатель;
КонецЕсли;
Если ПустоеЗначение(ДокОсн.Грузоотправитель) = 0 Тогда
НовДок.ВариантОтправки = 1;
НовДок.Грузоотправитель = ДокОсн.Грузоотправитель;
КонецЕсли;
НовДок.Аванс = 0;
НовДок.ВидОперации = Перечисление.ВидыОперацийСчетаФактурыВыданного.Реализация;
ДокОсн.ВыбратьСтроки();
Пока ДокОсн.ПолучитьСтроку()=1 Цикл
НовДок.НоваяСтрока();
НовДок.НазначитьТип("Товар", "Справочник.Номенклатура");
//СтранаПроисхождения = Работа.СтранаПроисхождения;
НовДок.Товар=ДокОсн.Работа;
НовДок.Количество=ДокОсн.Количество;
НовДок.СтавкаНДС = глСтавкаНалога(ДокОсн, "НДС");
НовДок.Количество = ?(НовДок.Количество = 0, 1, НовДок.Количество);
Если (Цел(НовДок.СтавкаНДС.Ставка) = НовДок.СтавкаНДС.Ставка) или (ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНДС = 0) Тогда
Если ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНП = 1 Тогда
Если ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНДС = 0 Тогда
НовДок.Цена = (ДокОсн.Всего - ДокОсн.НП)/НовДок.Количество;
Иначе
НовДок.Цена = (ДокОсн.Всего - ДокОсн.НДС - ДокОсн.НП)/НовДок.Количество;
КонецЕсли;
Иначе
Если ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНДС = 0 Тогда
НовДок.Цена = ДокОсн.Цена;
Иначе
НовДок.Цена = (ДокОсн.Всего - ДокОсн.НДС)/НовДок.Количество;
КонецЕсли;
КонецЕсли;
НовДок.Сумма = ДокОсн.Всего - ДокОсн.НДС - ДокОсн.НП;
Иначе
НовДок.Цена = (ДокОсн.Всего - ДокОсн.НП)/НовДок.Количество;
НовДок.Сумма = ДокОсн.Всего - ДокОсн.НП;
КонецЕсли;
НовДок.НДС=ДокОсн.НДС;
НовДок.Счет = СчетПоКоду("90.3");
Если Цел(НовДок.СтавкаНДС.Ставка) = НовДок.СтавкаНДС.Ставка Тогда
НовДок.Всего=НовДок.Сумма+НовДок.НДС;
Иначе
НовДок.Всего=НовДок.Сумма;
КонецЕсли;
КонецЦикла ;
НовДок.ДокументОснование = ДокОсн;
НовДок.СчетНДС = 1;
НовДок.Записать();
Если Проводить=1 Тогда
НовДок.Провести();
КонецЕсли;
Сообщить("Создана Счет Фактура"+НовДок.ТекущийДокумент()+" на основании "+ДокОсн);
КонецФункции
//==========================================================================================
Процедура Сформировать()
Перем Док,ДокСФ,НаличиеСФ;
КолНовДок = 0;
Док=СоздатьОбъект("Документ.РасходнаяНакладная");
ДокСФ=СоздатьОбъект("Документ");
Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если ФормироватьТолькоПоПроведенным=1 Тогда
Если Док.Проведен()=0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Если (ВыбКонтрагент.Выбран()=1) И (ВыбКонтрагент<>Док.Контрагент) И (Док.Контрагент.ПринадлежитГруппе(ВыбКонтрагент)=0) Тогда
Продолжить;
КонецЕсли;
Если (ВыбДоговор.Выбран()=1) И (ВыбДоговор<>Док.Договор) И (Док.Договор.ПринадлежитГруппе(ВыбДоговор)=0) Тогда
Продолжить;
КонецЕсли;
НаличиеСФ=0 ;
Если ДокСФ.ВыбратьПодчиненныеДокументы(,,Док.ТекущийДокумент())=1 Тогда
Пока ДокСФ.ПолучитьДокумент()=1 Цикл
Если ДокСФ.ПометкаУдаления()=0 Тогда
Если ДокСФ.Вид()="СчетФактура" Тогда
Сообщить("Существует "+ДокСФ.ТекущийДокумент()+" на основании "+Док.ТекущийДокумент(),"i");
НаличиеСФ=1 ;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НаличиеСФ=0 Тогда
КолНовДок = КолНовДок + 1;
Заполнить(Док.ТекущийДокумент());
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//=====================================================================================
Процедура ПриОткрытии()
НовДок=СоздатьОбъект("Документ.СчетФактура");
КонецПроцедуры
//=====================================================================================
Я скопировала весь модуль - что мне здесь поменять?
Перем КолНовДок;
//==========================================================
Функция Заполнить(ДокОсн)
НовДок.Новый();
НовДок.ДатаДок=ДокОсн.ДатаДок;
Если СокрЛП(НачНомер)=0 Тогда
//НовДок.УстановитьНовыйНомер();
Иначе
ааа = Строка(Число(НачНомер) + КолНовДок - 1) + СокрЛП(БуквОк);
Пока СтрДлина(ааа)<8 Цикл
ааа = "0"+ааа;
КонецЦикла;
НовДок.НомерДок = ааа;
КонецЕсли;
НовДок.Договор = ДокОсн.Договор;
НовДок.Контрагент=ДокОсн.Контрагент;
НовДок.ТипЦен = ДокОсн.ТипЦен;
НовДок.Работа = ДокОсн.Работа;
НовДок.ВерсияОбъекта=Константа.НомерРелиза;
// Заполнение грузополучателя и грузоотправителя
НовДок.Грузополучатель=ДокОсн.Контрагент;
Если ПустоеЗначение(ДокОсн.Грузополучатель) = 0 Тогда
НовДок.Грузополучатель = ДокОсн.Грузополучатель;
КонецЕсли;
Если ПустоеЗначение(ДокОсн.Грузоотправитель) = 0 Тогда
НовДок.ВариантОтправки = 1;
НовДок.Грузоотправитель = ДокОсн.Грузоотправитель;
КонецЕсли;
НовДок.Аванс = 0;
НовДок.ВидОперации = Перечисление.ВидыОперацийСчетаФактурыВыданного.Реализация;
ДокОсн.ВыбратьСтроки();
Пока ДокОсн.ПолучитьСтроку()=1 Цикл
НовДок.НоваяСтрока();
НовДок.НазначитьТип("Товар", "Справочник.Номенклатура");
//СтранаПроисхождения = Работа.СтранаПроисхождения;
НовДок.Товар=ДокОсн.Работа;
НовДок.Количество=ДокОсн.Количество;
НовДок.СтавкаНДС = глСтавкаНалога(ДокОсн, "НДС");
НовДок.Количество = ?(НовДок.Количество = 0, 1, НовДок.Количество);
Если (Цел(НовДок.СтавкаНДС.Ставка) = НовДок.СтавкаНДС.Ставка) или (ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНДС = 0) Тогда
Если ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНП = 1 Тогда
Если ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНДС = 0 Тогда
НовДок.Цена = (ДокОсн.Всего - ДокОсн.НП)/НовДок.Количество;
Иначе
НовДок.Цена = (ДокОсн.Всего - ДокОсн.НДС - ДокОсн.НП)/НовДок.Количество;
КонецЕсли;
Иначе
Если ДокОсн.ВариантРасчетаНалогов.СуммаВключаетНДС = 0 Тогда
НовДок.Цена = ДокОсн.Цена;
Иначе
НовДок.Цена = (ДокОсн.Всего - ДокОсн.НДС)/НовДок.Количество;
КонецЕсли;
КонецЕсли;
НовДок.Сумма = ДокОсн.Всего - ДокОсн.НДС - ДокОсн.НП;
Иначе
НовДок.Цена = (ДокОсн.Всего - ДокОсн.НП)/НовДок.Количество;
НовДок.Сумма = ДокОсн.Всего - ДокОсн.НП;
КонецЕсли;
НовДок.НДС=ДокОсн.НДС;
НовДок.Счет = СчетПоКоду("90.3");
Если Цел(НовДок.СтавкаНДС.Ставка) = НовДок.СтавкаНДС.Ставка Тогда
НовДок.Всего=НовДок.Сумма+НовДок.НДС;
Иначе
НовДок.Всего=НовДок.Сумма;
КонецЕсли;
КонецЦикла ;
НовДок.ДокументОснование = ДокОсн;
НовДок.СчетНДС = 1;
НовДок.Записать();
Если Проводить=1 Тогда
НовДок.Провести();
КонецЕсли;
Сообщить("Создана Счет Фактура"+НовДок.ТекущийДокумент()+" на основании "+ДокОсн);
КонецФункции
//==========================================================
Процедура Сформировать()
Перем Док,ДокСФ,НаличиеСФ;
КолНовДок = 0;
Док=СоздатьОбъект("Документ.РасходнаяНакладная");
ДокСФ=СоздатьОбъект("Документ");
Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если ФормироватьТолькоПоПроведенным=1 Тогда
Если Док.Проведен()=0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Если (ВыбКонтрагент.Выбран()=1) И (ВыбКонтрагент<>Док.Контрагент) И (Док.Контрагент.ПринадлежитГруппе(ВыбКонтрагент)=0) Тогда
Продолжить;
КонецЕсли;
Если (ВыбДоговор.Выбран()=1) И (ВыбДоговор<>Док.Договор) И (Док.Договор.ПринадлежитГруппе(ВыбДоговор)=0) Тогда
Продолжить;
КонецЕсли;
НаличиеСФ=0 ;
Если ДокСФ.ВыбратьПодчиненныеДокументы(,,Док.ТекущийДокумент())=1 Тогда
Пока ДокСФ.ПолучитьДокумент()=1 Цикл
Если ДокСФ.ПометкаУдаления()=0 Тогда
Если ДокСФ.Вид()="СчетФактура" Тогда
Сообщить("Существует "+ДокСФ.ТекущийДокумент()+" на основании "+Док.ТекущийДокумент(),"i");
НаличиеСФ=1 ;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НаличиеСФ=0 Тогда
КолНовДок = КолНовДок + 1;
Заполнить(Док.ТекущийДокумент());
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//==========================================================
Процедура ПриОткрытии()
НовДок=СоздатьОбъект("Документ.СчетФактура");
КонецПроцедуры
//==========================================================
Я скопировала весь модуль - что мне здесь поменять?
НовДок.Работа = ДокОсн.Работа;
\ФОРМИРОВАНИЕСФ_СТРОЙКА_ДУБЛЬ2.ERT(19)}: Поле агрегатного объекта не обнаружено (Работа) Опять ругается!!!
\ФОРМИРОВАНИЕСФ_СТРОЙКА_ДУБЛЬ2.ERT(19)}: Поле агрегатного объекта не обнаружено (Работа) Опять ругается!!!
Прикрепленные файлы:
ФормированиеСФ_стройка_дубль2.ert
Да. Но не только
Комментируем строку 19 // НовДок.Работа = ДокОсн.Работа;
Пока не начали выбирать строки, нас значения реквизитов строк не интересуют
Строки, где Грузополучатель и Грузоотправитель тоже (некуда нам их записать).
Оставляем только НовДок.ВариантОтправки = 1;
Ну и меняем Товар на Работа в 42-й строке
В процедуре Сформировать() строка 94
Док=СоздатьОбъект("Документ.ВыполнениеЭтапаРабот"); ты же уже исправляла эту строку, делала правильно.
Комментируем строку 19 // НовДок.Работа = ДокОсн.Работа;
Пока не начали выбирать строки, нас значения реквизитов строк не интересуют
Строки, где Грузополучатель и Грузоотправитель тоже (некуда нам их записать).
Оставляем только НовДок.ВариантОтправки = 1;
Ну и меняем Товар на Работа в 42-й строке
В процедуре Сформировать() строка 94
Док=СоздатьОбъект("Документ.ВыполнениеЭтапаРабот"); ты же уже исправляла эту строку, делала правильно.
(24) JUJA,
Ты можешь ВНИМАТЕЛЬНО, посмотреть на тот кусок, который я тебе прислал в (17)?
И в (20) тоже напомнил, что ЭТОНАДОЗАКОММЕНТИРОВАТЬ!!!! Ну повнимательней, пожалуйста. Сверь построчно модули, все сразу увидишь.
Две черточки в начале строки превращают строчку из программы в комментарий, т.е. она ПЕРЕСТАЕТ ВЫПОЛНЯТЬСЯ
Ты можешь ВНИМАТЕЛЬНО, посмотреть на тот кусок, который я тебе прислал в (17)?
И в (20) тоже напомнил, что ЭТОНАДОЗАКОММЕНТИРОВАТЬ!!!! Ну повнимательней, пожалуйста. Сверь построчно модули, все сразу увидишь.
Две черточки в начале строки превращают строчку из программы в комментарий, т.е. она ПЕРЕСТАЕТ ВЫПОЛНЯТЬСЯ
УРРРРРРРРРРРРРРРРРРРА!!!!!!Получилось!!!!!!!!!!!!!!!!!!!!!!!Другой вопрос - т.к. это работы - то грузоотправитель и грузополучатель в счетах-фактурах не должны указываться, как бы их убрать? чтобы прочерки вместо них были?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот