Создание документов на основании обработкой.
Доброго времени суток.
Помогите решить одну задачку, может хоть на какую то дельную мысль натолкнете.
Собственно о возникшей проблеме: Существуют расходные накладные за год, на основании их вводятся приходно-кассовые ордера, но за год они не вводились. Теперь стоит задача программно создать ордера на основании расходных накладных за весь год. Что то не нашел я в системе простого решения этой задачи, решил сделать через процедуру ОткрытьФорму с созданием нового документа.
Вот здесь возникло много вопросов:
- каким образом внести изменения в открытой форме (соответственно программно), в частности изменить дату документа на дату расходной накладной и внести комментарий;
- как записать документ (не могу получить ссылку на документ из контекста формы, оно то логично, пока документ не записан у него нет свойства ТекущийДокумент);
- ну и еще одна проблема закрыть форму (стандартная процедура срабатывает только после завершения выполнения процедуры), вроде как решилось использовав компоненту 1с++ (Система.ЗакрытьФорму(Контекст,0)).
Забыл указать, из расходной накладной необходимо взять значение реквизита и записать его в сумму ордера.
Заранее спасибо за все полезные ответы.
PS: Для предлагающих написать за какое то вознаграждение, просьба не беспокоить, хочу разобраться сам.
Помогите решить одну задачку, может хоть на какую то дельную мысль натолкнете.
Собственно о возникшей проблеме: Существуют расходные накладные за год, на основании их вводятся приходно-кассовые ордера, но за год они не вводились. Теперь стоит задача программно создать ордера на основании расходных накладных за весь год. Что то не нашел я в системе простого решения этой задачи, решил сделать через процедуру ОткрытьФорму с созданием нового документа.
Вот здесь возникло много вопросов:
- каким образом внести изменения в открытой форме (соответственно программно), в частности изменить дату документа на дату расходной накладной и внести комментарий;
- как записать документ (не могу получить ссылку на документ из контекста формы, оно то логично, пока документ не записан у него нет свойства ТекущийДокумент);
- ну и еще одна проблема закрыть форму (стандартная процедура срабатывает только после завершения выполнения процедуры), вроде как решилось использовав компоненту 1с++ (Система.ЗакрытьФорму(Контекст,0)).
Забыл указать, из расходной накладной необходимо взять значение реквизита и записать его в сумму ордера.
Заранее спасибо за все полезные ответы.
PS: Для предлагающих написать за какое то вознаграждение, просьба не беспокоить, хочу разобраться сам.
По теме из базы знаний
- Создание документов Требование-накладная по документам Поступление (акты, накладные) (БП 3.0)
- Создание документов реализации (акты, накладные) на основании Счетов покупателю (БП 3.0)
- Создание документов Установка цен номенклатуры на основании документов Поступление товаров и услуг (УТ 10.3, КА 1.1, УПП 1.3)
- Создание документов Комплектация номенклатуры (УТ 10.3)
- Создание документов Заказ покупателя на основании Реализаций товаров (для 1С: Розница 2.3)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Кстати нашел, Документ ПКО не становился на основании РН, т.к. существовал еще один реквизит "ДокументЗаказ" кроме реквизита "Заказ", не отображался на форме, но в него передавалось значение реквизита "Заказ" при записи, странно, но при записи программно он и не заполняется, в коде было прописано на это условие.
Всем еще раз спасибо за помощь.
PS: Код!
Всем еще раз спасибо за помощь.
PS: Код!
Перем ЧЧ, ММ, СС;
//*******************************************
Процедура Сформировать()
// перебираем расходные за период
Док=СоздатьОбъект("Документ.РасходнаяНакладная");
Док.ВыбратьДокументы(ДатаНач,ДатаКон);
Пока Док.ПолучитьДокумент()=1 Цикл
Если Док.СумОпл>0 Тогда
ДокНа = СоздатьОбъект("Документ.ПриходныйКассовый");
ДокНа.Новый();
ДокНа.ДатаДок=Док.ДатаДок;
// устанавливаем время ПКО +1 сек.
Док.ПолучитьВремя(ЧЧ,ММ,СС);
ДокНа.УстановитьВремя(ЧЧ,ММ,СС+1);
ДокНа.РСчет=Константа.БазРасчСчет;
ДокНа.ВидНДС=Константа.БазНДС;
ДокНа.ДоходИздержка=Перечисление.ПлюсМинусНичего.Ничего;
ДокНа.СубконтоВалДохРасх=Константа.НиДоходНиРасход;
ДокНа.Кассир=Константа.Кассир;
ДокНа.Счет=СчетПоКоду("361");
ДокНа.НазначитьТип("Субконто",ДокНа.Счет.ВидСубконто(1));
ДокНа.НазначитьТип("Заказ",ДокНа.Счет.ВидСубконто(2));
ДокНа.ВидПриходаДенег = Перечисление.ВидыПриходаДенег.ВыручкаОтРеализации;
ДокНа.Субконто=Док.Контрагент;
ДокНа.Заказ=Док.ТекущийДокумент();
ДокНа.ДокументЗаказ = ДокНа.Заказ; // вот здесь и была основная проблема
ДокНа.СуммаВал=Док.СумОпл;
ДокНа.НомерПО=ДокНа.РСчет.ПоследнийПрихДок + 1;
ДокНа.Склад=Док.МестоХранения;
ДокНа.Примечание="Залито программно на основании РН.";
// записываем ПКО
ДокНа.Записать();
ДокНа.Провести();
КонецЕсли;
КонецЦикла;
Предупреждение("Выполнение обработки завершено.",0);
КонецПроцедуры
Процедура ПриОткрытии()
ДатаНач=ТекущаяДата();
ДатаКон=ТекущаяДата();
КонецПроцедуры
Показать
без проблем созаем обработку
проверяем документ на педмет что уже есть ссылки
получаем.объктоснование
НовДок=СоздатьОбъект("Твой документ");
НовДок.Новый();
НовДок.Дата= дата1;
НовДок.УстановитьНовыйНомер();
НовДок.УстановитьВремя();
НовДок.ДокументОснование=основание;
если типД=0 тогда
НовДок.Касса=Основание.СтруктурнаяЕдиница;
НовДок.ОтражатьВУправленческомУчете = Истина;
иначе
НовДок.СчетОрганизации=Основание.СтруктурнаяЕдиница;
конецесли;
НовДок.Оплачено=Истина;
НовДок.ОтраженоВОперУчете=Истина;
НовДок.Контрагент = Основание.Контрагент;
НовДок.Организация=основание.организация;
НовДок.СуммаДокумента=сумма;
ну и т.д
в конце
НовДок.Записать(РежимЗаписиДокумента.Проведение);
проверяем документ на педмет что уже есть ссылки
получаем.объктоснование
НовДок=СоздатьОбъект("Твой документ");
НовДок.Новый();
НовДок.Дата= дата1;
НовДок.УстановитьНовыйНомер();
НовДок.УстановитьВремя();
НовДок.ДокументОснование=основание;
если типД=0 тогда
НовДок.Касса=Основание.СтруктурнаяЕдиница;
НовДок.ОтражатьВУправленческомУчете = Истина;
иначе
НовДок.СчетОрганизации=Основание.СтруктурнаяЕдиница;
конецесли;
НовДок.Оплачено=Истина;
НовДок.ОтраженоВОперУчете=Истина;
НовДок.Контрагент = Основание.Контрагент;
НовДок.Организация=основание.организация;
НовДок.СуммаДокумента=сумма;
ну и т.д
в конце
НовДок.Записать(РежимЗаписиДокумента.Проведение);
Как вариант. У меня создаются счет-фактуры на основании расходных накладных.
ДокСчетФактура = СоздатьОбъект("Документ.СчетФактура");
ДокРеализация = СоздатьОбъект("Документ.РеализацияПродукции");
ДокРеализация.ВыбратьДокументы(НачДата,КонДата);
Пока ДокРеализация.ПолучитьДокумент() = 1 Цикл
Если ДокРеализация.Проведен() = 0 Тогда
Продолжить;
КонецЕсли;
Сообщить("Формируем счёт-фактуру по реализации №"+ДокРеализация.НомерДок + " от " + ДокРеализация.ДатаДок);
ДокСчетФактура.Новый();
глЗаполнитьШапкуНаОсн(ДокСчетФактура, ДокРеализация);
ДокСчетФактура.ДокументОснование = ДокРеализация.ТекущийДокумент();
...................
КонецЦикла;
Показать
(10) ЛиСиЦин,
Конф-ия бухгалтерия очень старая. В глобальном модуле нет процедуры глЗаполнитьШапкуНаОсн. В документе приходно-кассовый ордер нет реквизита ДокументОснование. При создании нового документа привязать на основании, по моему мнению, возможно только используя функцию ОткрытьФорму("Документ.ПриходныйКассовый",Контекст,Док.ТекущийДокумент()), где Док.ТекущийДокумент() - расходная накладная на основании которой он и создается. Но тут как раз у меня и возникают некоторые сложности которые и описаны в первом посте.
На счет кода, то какой нужно выложить конкретнее?
Конф-ия бухгалтерия очень старая. В глобальном модуле нет процедуры глЗаполнитьШапкуНаОсн. В документе приходно-кассовый ордер нет реквизита ДокументОснование. При создании нового документа привязать на основании, по моему мнению, возможно только используя функцию ОткрытьФорму("Документ.ПриходныйКассовый",Контекст,Док.ТекущийДокумент()), где Док.ТекущийДокумент() - расходная накладная на основании которой он и создается. Но тут как раз у меня и возникают некоторые сложности которые и описаны в первом посте.
На счет кода, то какой нужно выложить конкретнее?
(11) У вас как-то все малопонятно сформулировано. Если обработка создает приходные ордера на основании расходных - тогда зачем вам нужно ОткрытьФорму()? Или вы каждый документ вручную правите? Почему нельзя просто создавать документ и записывать его?
Такой код почему не подходит?
Док = СоздатьОбъект("Документ.ПриходныйОрдер");
Док1 = СоздатьОбъект("Документ.РасходнаяНакладная");
Док1.ВыбратьДокументы(НачДата, КонДата);
Пока Док1.ПолучитьДокумент()=1 Цикл
Док.Новый;
Док.ДатаДок = Док1.ДатаДок;
Док.УстановитьНовыйНомер();
Док.ДокументПоставки = Док1.ТекущийДокумент();
//...........................
//заполняете остальные реквизиты
//...........................
Док.Записать();
КонецЦикла;
ПоказатьТакой код почему не подходит?
(13) не путай тёплое с мягким.
Ввод на основании и подчиненность документов - это две разные разницы.
Первое - это просто механизм заполнения реквизитов документа из документа-источника.
Второе - это связь через реквизит с типом "Документ".
Документ может быть подчинен другому и вовсе не обязан быть заполнен из документа-основания, и наоборот - заполненный из документа-основания документ не обязан иметь ссылку на документ-основание для связи подчинения.
Ввод на основании и подчиненность документов - это две разные разницы.
Первое - это просто механизм заполнения реквизитов документа из документа-источника.
Второе - это связь через реквизит с типом "Документ".
Документ может быть подчинен другому и вовсе не обязан быть заполнен из документа-основания, и наоборот - заполненный из документа-основания документ не обязан иметь ссылку на документ-основание для связи подчинения.
(17) grey82,
ответ Вам дан в (4) , (10) , (12) , (14).
Задача сводиться к тому, чтобы:
1) Создать документ программно и заполнить его на основании существующего
2) Прописать ссылку на ДокОснование
1. внимательно читаем (12).
2. ищем реквизит аналогичный "ДокОснование" в ПКО и заполняем.
Если, на созданных вручную, структура "отрабатывает" - значит программно можно прописать ссылку. Пункт ДокОснование (или аналогичный) присутствовать должен. Нужно внимательно изучить реквизиты вашего ПКО...
Открыть форму тут лишнее.
ответ Вам дан в (4) , (10) , (12) , (14).
Задача сводиться к тому, чтобы:
1) Создать документ программно и заполнить его на основании существующего
2) Прописать ссылку на ДокОснование
1. внимательно читаем (12).
2. ищем реквизит аналогичный "ДокОснование" в ПКО и заполняем.
Если, на созданных вручную, структура "отрабатывает" - значит программно можно прописать ссылку. Пункт ДокОснование (или аналогичный) присутствовать должен. Нужно внимательно изучить реквизиты вашего ПКО...
Открыть форму тут лишнее.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот