Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 6, свеженьких 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> автоматическое создание документа на основании другого документа          
афродита Подменю пользователя
сообщение 18.05.14, 22:19
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 0 раз
Рейтинг: 0

Здравствуйте, у меня возникла вот такая проблема. Мне надо чтобы при создании документа Заявка автоматически создавался документ Счет-фактура с такими же полями что и Заявка. Ввод на основании я уже сделала а что дальше делать незнаю, помогите.

logist Подменю пользователя
сообщение 19.05.14, 7:48
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Команда
Сообщений: 9266
Из: Харьков
Спасибо сказали: 2440 раз
Рейтинг: 1511.1

Вопрос из разряда: Мне надо что бы машина ездила на бензине, бензин я уже залила, что делать дальше...


Signature
Весь комплекс услуг по 1С 8.х. От консультаций до внедрения. ИТС. 1С-Звіт. Интеграция IP-телефонии. Написание конфигураций под требования заказчика, доработка типовых решений. Переход с 7.7 на 8.х.
Пишите в ЛС. Звоните +380 (44) 2227507, (57) 7547700, (98) 5147778, (50) 7147778, (93) 2147778 (участник "САБ")

Vofka Подменю пользователя
сообщение 19.05.14, 7:56
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 12579
Из: Киев
Спасибо сказали: 3760 раз
Рейтинг: 2879.1

афродита, в чем конкретно вопрос/проблема?


Signature
Услуги 1С программиста

афродита Подменю пользователя
сообщение 19.05.14, 21:46
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 0 раз
Рейтинг: 0

Проблема в том что я даже представлений не имею как эту задачу программно написать

Vofka Подменю пользователя
сообщение 20.05.14, 7:54
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 12579
Из: Киев
Спасибо сказали: 3760 раз
Рейтинг: 2879.1

Как вы ввод на основании делали?


Signature
Услуги 1С программиста

Petre Подменю пользователя
сообщение 20.05.14, 8:41
Сообщение #6

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2310
Из: Київ, Україна
Спасибо сказали: 559 раз
Рейтинг: 516.4

Сделать очень просто. Вариантов достаточно. Но в таких задачах есть очень много нюансов, которые напрямую влияют на вариант реализации данного функционала.


Signature
Допрацьовую:
- "Бухгалтерія для України 1.2";
- "Бухгалтерія для України 2.0";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Rayne Подменю пользователя
сообщение 20.05.14, 9:06
Сообщение #7

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 16 раз
Рейтинг: 0

Есть события документов (ПослеЗаписи, ОбработкаПроведения). Есть подписки на события (что гораздо лучше с точки зрения изменения конфигурации). С чем конкретно возникают сложности?


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

афродита Подменю пользователя
сообщение 20.05.14, 10:56
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 0 раз
Рейтинг: 0

Я сделала через конструктор, чтобы Заявка была Основанием для Документа Счет_фактура. В модуле объекта получилось вот что:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Заявка") Тогда
        // Заполнение шапки
        Перевозчик = ДанныеЗаполнения.Грузоотправитель;
        Для Каждого ТекСтрокатовар Из ДанныеЗаполнения.товар Цикл
            НоваяСтрока = товар.Добавить();
            НоваяСтрока.количество = ТекСтрокатовар.Количество;
            НоваяСтрока.наименование = ТекСтрокатовар.наименование_груза;
            НоваяСтрока.ндс = ТекСтрокатовар.ндс;
            НоваяСтрока.заявка = ТекСтрокатовар.ссылка;
            НоваяСтрока.ставка_ндс = ТекСтрокатовар.ставка_ндс;
            НоваяСтрока.сумма = ТекСтрокатовар.Сумма;
            НоваяСтрока.сумма_с_ндс = ТекСтрокатовар.сумма_с_ндс;
            НоваяСтрока.цена = ТекСтрокатовар.Цена;
        КонецЦикла;
    КонецЕсли;
    //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры

В инете нашла вот такой код
&НаСервере
            Процедура ПриЗаписиДокументаПеремещенияПриЗаписи(Источник, Отказ) Экспорт
        // Находим подчиненный документ "Расходный ордер на товары"
    Запрос = Новый Запрос;
    Запрос.Текст =     "ВЫБРАТЬ
    |Счет_фактура.Дата,
    |    Счет_фактура.Заказчик,
    |    Счет_фактура.Номер,
    |    Счет_фактура.товар.(
    |        НомерСтроки,
    |        наименование,
    |        количество,
    |        сумма,
    |       ставка_ндс,
    |        ндс,
    |    сумма_с_ндс)
    |ИЗ
    |    Документ.Заявка КАК Заявка
    |ГДЕ
    |    Заявка.ДокументПередачи = &ДокументПередачи
    |    И Счет_фактура.ВидОперации =
    |        ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСчет_фактура.Перемещение)";                 
    Запрос.УстановитьПараметр("ДокументПередачи", Источник.Ссылка);              
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Источник.ВидОперации
        = Перечисления.ВидыОперацийЗаявка.ТоварПоНаименованию Тогда    
        Если Выборка.Следующий() Тогда         
            СвязанныйДокумент = Выборка.Ссылка.ПолучитьОбъект();          
        Иначе             
            СвязанныйДокумент      = Документы.Счет_фактура.СоздатьДокумент();
            СвязанныйДокумент.Дата = Источник.Дата+1;
            ОбновитьНумерациюОбъектов(Метаданные.Документы.Счет_фактура);
            СвязанныйДокумент.УстановитьНовыйНомер();                 
        КонецЕсли;       
        
        // должны автоматически создаваться другие документы
        // СвязанныйДокумент - объект документа, создаваемого автоматически
        //
        // Перед выполнением дальнейшего алгоритма выполняется поиск связанного
        // документа. Если документ не найден, то создается новый
        //
        Если Источник.Проведен Тогда  
            // Если источник проведен, то зависимый документ перезаполняется
            // на основании источника и проводится
            СвязанныйДокумент.ПометкаУдаления = Ложь;                
            ОбновитьСчет_фактура(СвязанныйДокумент, Источник);
            СвязанныйДокумент.Записать(РежимЗаписиДокумента.Проведение);       
        ИначеЕсли Источник.ПометкаУдаления Тогда     
            // Если источник помечен на удаление, то связанный документ также
            // помечается на удаление. Если он был проведен, то процедура
            // "УстановитьПометкуУдаления" инициирует отмену проведения документа
            Если НЕ СвязанныйДокумент.ЭтоНовый() Тогда
                // Если связанный документ еще не записан в базу, то
                // никакие действия не выполняются
                СвязанныйДокумент.УстановитьПометкуУдаления(Истина);    
            КонецЕсли;
        Иначе // Выполняется запись документа без проведения или установки
            // пометки удаления
            Если СвязанныйДокумент.ЭтоНовый() Тогда
                // Если связанный документ не записан в базу, то заполняем его и
                // выполняем запись документа без проведения
                ОбновитьСчет_фактура(СвязанныйДокумент, Источник);
                СвязанныйДокумент.Записать(РежимЗаписиДокумента.Запись);    
            ИначеЕсли СвязанныйДокумент.Проведен Тогда
                // Если связанный документ был проведен, то выполняем отмену проведения
                СвязанныйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);    
            Иначе
                // В остальных случаях просто записываем зависимый документ
                // Если была установлена пометка удаления - снимаем ее
                СвязанныйДокумент.УстановитьПометкуУдаления(Ложь);    
            КонецЕсли;
        КонецЕсли
    Иначе
        // При смене вида операции "ТоварыПродукцияПоОрдерам" помечаем на удаление
        // зависимый документ расходного ордера
        Если Выборка.Следующий() Тогда         
            СвязанныйДокумент = Выборка.Ссылка.ПолучитьОбъект();
            СвязанныйДокумент.УстановитьПометкуУдаления(Ложь);
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

попыталась реализовать, это все я написала в ПриЗаписи, он у меня ругается что в Процедура с указаным именем не определена: ОбновитьСчет_фактура(СвязанныйДокумент, Источник);
И дальше я в тупике, незнаю че и делать

Rayne Подменю пользователя
сообщение 20.05.14, 11:55
Сообщение #9

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 16 раз
Рейтинг: 0

А процедура ОбновитьСчет_фактура(СвязанныйДокумент, Источник) где-то описывается? Судя по коду, это должна быть процедура, в которой собственно заполняется счет.


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

афродита Подменю пользователя
сообщение 20.05.14, 19:34
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 0 раз
Рейтинг: 0

Да есть такая процедура:
Процедура ОбновитьСчет_фактура(ДокументЗаявка, Источник)
    
    // Заполняем одноименные реквизиты расходной накладной
    // из документа перемещения
    ЗаполнитьЗначенияСвойств(ДокументЗаявка, Источник, , "Номер");
    // Дату расходного ордера увеличиваем на 1 секунду
    // от даты документа перемещения
    ДокументЗаявка.Дата = Источник.Дата + 1;
    ДокументЗаявка.ВидОперации = Перечисления.ВидыОперацийСчет_фактура.Перемещение;
    ДокументЗаявка.ДокументПередачи = Источник.Ссылка;
    // Заполняем таб. часть "Товары" из документа перемещения
    ДокументЗаявка.Товар.Очистить();
    Для Каждого Стр Из Источник.Товар Цикл
        СтрокаТовар = ДокументЗаявка.Товар.Добавить();
        ЗаполнитьЗначенияСвойств(СтрокаТовар,Стр);
    КонецЦикла;    
    
КонецПроцедуры

Я ее вставила в код, 1с даже не поругалась, но при этом ничего не происходит. Когда я создаю/обновляю Заявки Документ Счет_фактура не создается. И как сделать так чтобы на когда я создаю,обновляю Заявку создавалось несколько документов, например счет-фактура и товарная накладная?

Rayne Подменю пользователя
сообщение 21.05.14, 7:27
Сообщение #11

Говорящий
Иконка группы
Группа: Местный
Сообщений: 86
Спасибо сказали: 16 раз
Рейтинг: 0

Что говорит всезнающий отладчик?


Signature
1С - как старый советский конструктор для детей. Вроде и все детали на месте, но без молотка и напильника нифига не собирается. (с) bash.im

хакерок Подменю пользователя
сообщение 17.06.14, 16:04
Сообщение #12

Завсегдатай
****
Группа: Пользователи
Сообщений: 246
Из: Київ
Спасибо сказали: 11 раз
Рейтинг: 11

Цитата(афродита @ 20.05.14, 20:34) *
Я ее вставила в код, 1с даже не поругалась, но при этом ничего не происходит. Когда я создаю/обновляю Заявки Документ Счет_фактура не создается. И как сделать так чтобы на когда я создаю,обновляю Заявку создавалось несколько документов, например счет-фактура и товарная накладная?


Нужно создавать документ после того как записывалась Заявка?

jo_1010 Подменю пользователя
сообщение 27.06.14, 9:59
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

Есть несколько вариантов как решить Авто ввод на основании:

Как я понимаю - проблема именно в вызове процедуры ОбработкаЗаполнения()?

1. Тогда берем, в Вашем случае, модуль формы документа "Заявка".
Т.к. для ввода на основании нам необходима ссылка на док.основание (т.е. на нашу Заявку), то вызывать ОбработкаЗаполнения() мы будем после записи Заявки.
2. Итак, в модуле формы заявки открываем/создаем обработчик ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) и делаем так:
 &НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
    Док = Документы.СчетФактура.СоздатьДокумент();
    
    Док.ОбработкаЗаполнения(Объект.Ссылка, Истина);
    Док.Дата = ТекущаяДата();  //или "= Объект.Дата", или "= любая другая дата"...
    Док.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры


3. ВАЖНО!!! для процедуры ОбработкаЗаполнения() (модуль документа СчетФактура) ОБЯЗАТЕЛЬНО должно быть прописано Экспорт. Вот так:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Экспорт

и пробуем... (делал в 8.3, но в 8.2 тоже должно работать

Спасибо сказали: Vofka,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.18, 13:55
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

Курсы валют: доллар США к гривне Курсы валют: евро к гривне Курсы валют: российский рубль к гривне