Здравствуйте, у меня возникла вот такая проблема. Мне надо чтобы при создании документа Заявка автоматически создавался документ Счет-фактура с такими же полями что и Заявка. Ввод на основании я уже сделала а что дальше делать незнаю, помогите.
Живет на форуме
Группа: Местный
Сообщений: 2920
Из: Київ, Україна
Спасибо сказали: 1239 раз
Рейтинг: 1345.6
Сделать очень просто. Вариантов достаточно. Но в таких задачах есть очень много нюансов, которые напрямую влияют на вариант реализации данного функционала.
Допрацьовую: - "Бухгалтерія для України 2.1"; - "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".
Есть события документов (ПослеЗаписи, ОбработкаПроведения). Есть подписки на события (что гораздо лучше с точки зрения изменения конфигурации). С чем конкретно возникают сложности?
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im
Я сделала через конструктор, чтобы Заявка была Основанием для Документа Счет_фактура. В модуле объекта получилось вот что:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)//{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ// Данный фрагмент построен конструктором.// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Заявка") Тогда// Заполнение шапки
Перевозчик = ДанныеЗаполнения.Грузоотправитель;
ДляКаждого ТекСтрокатовар Из ДанныеЗаполнения.товар Цикл
НоваяСтрока = товар.Добавить();
НоваяСтрока.количество = ТекСтрокатовар.Количество;
НоваяСтрока.наименование = ТекСтрокатовар.наименование_груза;
НоваяСтрока.ндс = ТекСтрокатовар.ндс;
НоваяСтрока.заявка = ТекСтрокатовар.ссылка;
НоваяСтрока.ставка_ндс = ТекСтрокатовар.ставка_ндс;
НоваяСтрока.сумма = ТекСтрокатовар.Сумма;
НоваяСтрока.сумма_с_ндс = ТекСтрокатовар.сумма_с_ндс;
НоваяСтрока.цена = ТекСтрокатовар.Цена;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИКонецПроцедуры
В инете нашла вот такой код
&НаСервереПроцедура ПриЗаписиДокументаПеремещенияПриЗаписи(Источник, Отказ)Экспорт// Находим подчиненный документ "Расходный ордер на товары"
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|Счет_фактура.Дата,
| Счет_фактура.Заказчик,
| Счет_фактура.Номер,
| Счет_фактура.товар.(
| НомерСтроки,
| наименование,
| количество,
| сумма,
| ставка_ндс,
| ндс,
| сумма_с_ндс)
|ИЗ
| Документ.Заявка КАК Заявка
|ГДЕ
| Заявка.ДокументПередачи = &ДокументПередачи
| И Счет_фактура.ВидОперации =
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСчет_фактура.Перемещение)";
Запрос.УстановитьПараметр("ДокументПередачи", Источник.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Источник.ВидОперации
= Перечисления.ВидыОперацийЗаявка.ТоварПоНаименованию ТогдаЕсли Выборка.Следующий() Тогда
СвязанныйДокумент = Выборка.Ссылка.ПолучитьОбъект();
Иначе
СвязанныйДокумент = Документы.Счет_фактура.СоздатьДокумент();
СвязанныйДокумент.Дата = Источник.Дата+1;
ОбновитьНумерациюОбъектов(Метаданные.Документы.Счет_фактура);
СвязанныйДокумент.УстановитьНовыйНомер();
КонецЕсли;
// должны автоматически создаваться другие документы// СвязанныйДокумент - объект документа, создаваемого автоматически//// Перед выполнением дальнейшего алгоритма выполняется поиск связанного // документа. Если документ не найден, то создается новый//Если Источник.Проведен Тогда// Если источник проведен, то зависимый документ перезаполняется// на основании источника и проводится
СвязанныйДокумент.ПометкаУдаления = Ложь;
ОбновитьСчет_фактура(СвязанныйДокумент, Источник);
СвязанныйДокумент.Записать(РежимЗаписиДокумента.Проведение);
ИначеЕсли Источник.ПометкаУдаления Тогда// Если источник помечен на удаление, то связанный документ также// помечается на удаление. Если он был проведен, то процедура// "УстановитьПометкуУдаления" инициирует отмену проведения документаЕслиНЕ СвязанныйДокумент.ЭтоНовый() Тогда// Если связанный документ еще не записан в базу, то// никакие действия не выполняются
СвязанныйДокумент.УстановитьПометкуУдаления(Истина);
КонецЕсли;
Иначе// Выполняется запись документа без проведения или установки// пометки удаления Если СвязанныйДокумент.ЭтоНовый() Тогда// Если связанный документ не записан в базу, то заполняем его и// выполняем запись документа без проведения
ОбновитьСчет_фактура(СвязанныйДокумент, Источник);
СвязанныйДокумент.Записать(РежимЗаписиДокумента.Запись);
ИначеЕсли СвязанныйДокумент.Проведен Тогда// Если связанный документ был проведен, то выполняем отмену проведения
СвязанныйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Иначе// В остальных случаях просто записываем зависимый документ// Если была установлена пометка удаления - снимаем ее
СвязанныйДокумент.УстановитьПометкуУдаления(Ложь);
КонецЕсли;
КонецЕслиИначе// При смене вида операции "ТоварыПродукцияПоОрдерам" помечаем на удаление// зависимый документ расходного ордераЕсли Выборка.Следующий() Тогда
СвязанныйДокумент = Выборка.Ссылка.ПолучитьОбъект();
СвязанныйДокумент.УстановитьПометкуУдаления(Ложь);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
попыталась реализовать, это все я написала в ПриЗаписи, он у меня ругается что в Процедура с указаным именем не определена: ОбновитьСчет_фактура(СвязанныйДокумент, Источник); И дальше я в тупике, незнаю че и делать
А процедура ОбновитьСчет_фактура(СвязанныйДокумент, Источник) где-то описывается? Судя по коду, это должна быть процедура, в которой собственно заполняется счет.
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im
Процедура ОбновитьСчет_фактура(ДокументЗаявка, Источник)// Заполняем одноименные реквизиты расходной накладной// из документа перемещения
ЗаполнитьЗначенияСвойств(ДокументЗаявка, Источник, , "Номер");
// Дату расходного ордера увеличиваем на 1 секунду // от даты документа перемещения
ДокументЗаявка.Дата = Источник.Дата + 1;
ДокументЗаявка.ВидОперации = Перечисления.ВидыОперацийСчет_фактура.Перемещение;
ДокументЗаявка.ДокументПередачи = Источник.Ссылка;
// Заполняем таб. часть "Товары" из документа перемещения
ДокументЗаявка.Товар.Очистить();
ДляКаждого Стр Из Источник.Товар Цикл
СтрокаТовар = ДокументЗаявка.Товар.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТовар,Стр);
КонецЦикла;
КонецПроцедуры
Я ее вставила в код, 1с даже не поругалась, но при этом ничего не происходит. Когда я создаю/обновляю Заявки Документ Счет_фактура не создается. И как сделать так чтобы на когда я создаю,обновляю Заявку создавалось несколько документов, например счет-фактура и товарная накладная?
Оратор
Группа: Пользователи
Сообщений: 258
Из: Київ
Спасибо сказали: 12 раз
Рейтинг: 0
Цитата(афродита @ 20.05.14, 20:34)
Я ее вставила в код, 1с даже не поругалась, но при этом ничего не происходит. Когда я создаю/обновляю Заявки Документ Счет_фактура не создается. И как сделать так чтобы на когда я создаю,обновляю Заявку создавалось несколько документов, например счет-фактура и товарная накладная?
Нужно создавать документ после того как записывалась Заявка?
Есть несколько вариантов как решить Авто ввод на основании:
Как я понимаю - проблема именно в вызове процедуры ОбработкаЗаполнения()?
1. Тогда берем, в Вашем случае, модуль формы документа "Заявка". Т.к. для ввода на основании нам необходима ссылка на док.основание (т.е. на нашу Заявку), то вызывать ОбработкаЗаполнения() мы будем после записи Заявки. 2. Итак, в модуле формы заявки открываем/создаем обработчик ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) и делаем так:
&НаСервереПроцедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Док = Документы.СчетФактура.СоздатьДокумент();
Док.ОбработкаЗаполнения(Объект.Ссылка, Истина);
Док.Дата = ТекущаяДата(); //или "= Объект.Дата", или "= любая другая дата"...
Док.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры
3. ВАЖНО!!! для процедуры ОбработкаЗаполнения() (модуль документа СчетФактура) ОБЯЗАТЕЛЬНО должно быть прописано Экспорт. Вот так:
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!