Создание документов на основании обработкой.

1. grey82 79 08.05.12 17:28 Сейчас в теме
Доброго времени суток.

Помогите решить одну задачку, может хоть на какую то дельную мысль натолкнете.
Собственно о возникшей проблеме: Существуют расходные накладные за год, на основании их вводятся приходно-кассовые ордера, но за год они не вводились. Теперь стоит задача программно создать ордера на основании расходных накладных за весь год. Что то не нашел я в системе простого решения этой задачи, решил сделать через процедуру ОткрытьФорму с созданием нового документа.

Вот здесь возникло много вопросов:
- каким образом внести изменения в открытой форме (соответственно программно), в частности изменить дату документа на дату расходной накладной и внести комментарий;
- как записать документ (не могу получить ссылку на документ из контекста формы, оно то логично, пока документ не записан у него нет свойства ТекущийДокумент);
- ну и еще одна проблема закрыть форму (стандартная процедура срабатывает только после завершения выполнения процедуры), вроде как решилось использовав компоненту 1с++ (Система.ЗакрытьФорму(Контекст,0)).


Забыл указать, из расходной накладной необходимо взять значение реквизита и записать его в сумму ордера.

Заранее спасибо за все полезные ответы.


PS: Для предлагающих написать за какое то вознаграждение, просьба не беспокоить, хочу разобраться сам.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
21. grey82 79 10.05.12 18:32 Сейчас в теме
Кстати нашел, Документ ПКО не становился на основании РН, т.к. существовал еще один реквизит "ДокументЗаказ" кроме реквизита "Заказ", не отображался на форме, но в него передавалось значение реквизита "Заказ" при записи, странно, но при записи программно он и не заполняется, в коде было прописано на это условие.

Всем еще раз спасибо за помощь.

PS: Код!


Перем ЧЧ, ММ, СС;
//*******************************************
Процедура Сформировать()
	// перебираем расходные за период
	Док=СоздатьОбъект("Документ.РасходнаяНакладная");
	Док.ВыбратьДокументы(ДатаНач,ДатаКон);
	Пока Док.ПолучитьДокумент()=1 Цикл
		Если Док.СумОпл>0 Тогда
			
			ДокНа = СоздатьОбъект("Документ.ПриходныйКассовый");
			ДокНа.Новый();
			ДокНа.ДатаДок=Док.ДатаДок;

			// устанавливаем время ПКО +1 сек.
			Док.ПолучитьВремя(ЧЧ,ММ,СС);
			ДокНа.УстановитьВремя(ЧЧ,ММ,СС+1);
			
			ДокНа.РСчет=Константа.БазРасчСчет;
			ДокНа.ВидНДС=Константа.БазНДС;
			ДокНа.ДоходИздержка=Перечисление.ПлюсМинусНичего.Ничего;
			ДокНа.СубконтоВалДохРасх=Константа.НиДоходНиРасход;
			ДокНа.Кассир=Константа.Кассир;
			ДокНа.Счет=СчетПоКоду("361");
			ДокНа.НазначитьТип("Субконто",ДокНа.Счет.ВидСубконто(1));
			ДокНа.НазначитьТип("Заказ",ДокНа.Счет.ВидСубконто(2));
			ДокНа.ВидПриходаДенег = Перечисление.ВидыПриходаДенег.ВыручкаОтРеализации;
			
			ДокНа.Субконто=Док.Контрагент;
			ДокНа.Заказ=Док.ТекущийДокумент();
			ДокНа.ДокументЗаказ = ДокНа.Заказ; // вот здесь и была основная проблема
			ДокНа.СуммаВал=Док.СумОпл;
			ДокНа.НомерПО=ДокНа.РСчет.ПоследнийПрихДок + 1;
			ДокНа.Склад=Док.МестоХранения;
			ДокНа.Примечание="Залито программно на основании РН.";
	        
			// записываем ПКО
			ДокНа.Записать();
			ДокНа.Провести();
		КонецЕсли;
	КонецЦикла;
	Предупреждение("Выполнение обработки завершено.",0);
КонецПроцедуры

Процедура ПриОткрытии()
	ДатаНач=ТекущаяДата();
	ДатаКон=ТекущаяДата();
КонецПроцедуры
Показать
2. zale 19 08.05.12 17:43 Сейчас в теме
Док=СоздатьОбъект("Твой документ");
Док.Новый();
Док.Фирма =фирмы.текущийэлемент();
Док.Записать();
3. grey82 79 08.05.12 17:50 Сейчас в теме
(2) zale, В данном случае создаваемый документ не будет создан на основании расходной накладной.
4. Oleh 08.05.12 18:11 Сейчас в теме
без проблем созаем обработку
проверяем документ на педмет что уже есть ссылки
получаем.объктоснование
НовДок=СоздатьОбъект("Твой документ");
НовДок.Новый();
НовДок.Дата= дата1;
НовДок.УстановитьНовыйНомер();
НовДок.УстановитьВремя();
НовДок.ДокументОснование=основание;
если типД=0 тогда
НовДок.Касса=Основание.СтруктурнаяЕдиница;
НовДок.ОтражатьВУправленческомУчете = Истина;
иначе
НовДок.СчетОрганизации=Основание.СтруктурнаяЕдиница;
конецесли;
НовДок.Оплачено=Истина;
НовДок.ОтраженоВОперУчете=Истина;
НовДок.Контрагент = Основание.Контрагент;
НовДок.Организация=основание.организация;
НовДок.СуммаДокумента=сумма;
ну и т.д
в конце
НовДок.Записать(РежимЗаписиДокумента.Проведение);
7. grey82 79 08.05.12 18:24 Сейчас в теме
(4) Oleh,

НовДок.ДокументОснование=основание;

При этом должен быть реквизит ДокументОснование в документе, даже в таком случае НовДок не будет введен на основании расходной накладной.
5. Oleh 08.05.12 18:12 Сейчас в теме
извините это просто кусочек из моей программы
6. mailrum2004 1 08.05.12 18:19 Сейчас в теме
Может попробовать:
wsh=СоздатьОбъект("WScript.Shell");
wsh.SendKeys("нужные кнопки");
wsh.SendKeys("нужные кнопки");
8. grey82 79 08.05.12 18:27 Сейчас в теме
(6) mailrum2004,

На счет нажатия кнопок возможен как вариант, но тут нужно еще изменить дату документа (к реквизитам создаваемого документа никак не могу получить доступ).
9. MaxDavid 127 08.05.12 20:30 Сейчас в теме
10. ЛиСиЦин 08.05.12 22:07 Сейчас в теме
Как вариант. У меня создаются счет-фактуры на основании расходных накладных.

	ДокСчетФактура	= СоздатьОбъект("Документ.СчетФактура");
	ДокРеализация	= СоздатьОбъект("Документ.РеализацияПродукции");
	
	ДокРеализация.ВыбратьДокументы(НачДата,КонДата);
	Пока ДокРеализация.ПолучитьДокумент() = 1 Цикл
		Если ДокРеализация.Проведен() = 0 Тогда
			Продолжить;
		КонецЕсли;
	Сообщить("Формируем счёт-фактуру по реализации №"+ДокРеализация.НомерДок + " от " + ДокРеализация.ДатаДок);
		ДокСчетФактура.Новый();
		глЗаполнитьШапкуНаОсн(ДокСчетФактура, ДокРеализация);
		ДокСчетФактура.ДокументОснование	= ДокРеализация.ТекущийДокумент();
        ...................
        КонецЦикла;

Показать
11. grey82 79 10.05.12 10:30 Сейчас в теме
(10) ЛиСиЦин,

Конф-ия бухгалтерия очень старая. В глобальном модуле нет процедуры глЗаполнитьШапкуНаОсн. В документе приходно-кассовый ордер нет реквизита ДокументОснование. При создании нового документа привязать на основании, по моему мнению, возможно только используя функцию ОткрытьФорму("Документ.ПриходныйКассовый",Контекст,Док.ТекущийДокумент()), где Док.ТекущийДокумент() - расходная накладная на основании которой он и создается. Но тут как раз у меня и возникают некоторые сложности которые и описаны в первом посте.

На счет кода, то какой нужно выложить конкретнее?
12. MaxDavid 127 10.05.12 11:14 Сейчас в теме
(11) У вас как-то все малопонятно сформулировано. Если обработка создает приходные ордера на основании расходных - тогда зачем вам нужно ОткрытьФорму()? Или вы каждый документ вручную правите? Почему нельзя просто создавать документ и записывать его?
Док = СоздатьОбъект("Документ.ПриходныйОрдер");
Док1 = СоздатьОбъект("Документ.РасходнаяНакладная");
Док1.ВыбратьДокументы(НачДата, КонДата);
Пока Док1.ПолучитьДокумент()=1 Цикл
    Док.Новый;
    Док.ДатаДок = Док1.ДатаДок;
    Док.УстановитьНовыйНомер();
    Док.ДокументПоставки = Док1.ТекущийДокумент();
    //...........................
    //заполняете остальные реквизиты
    //...........................
    Док.Записать();
КонецЦикла;
Показать

Такой код почему не подходит?
13. grey82 79 10.05.12 11:30 Сейчас в теме
(12) MaxDavid,

В примере вашего кода создается новый документ, но не на основании. Необходимо именно создать документ приходно-кассовый ордер на основании расходной накладной, то есть если вы посмотрите подчиненные документы расходной, то его там не будет.
14. Ёпрст 1063 10.05.12 11:58 Сейчас в теме
(13) не путай тёплое с мягким.
Ввод на основании и подчиненность документов - это две разные разницы.
Первое - это просто механизм заполнения реквизитов документа из документа-источника.
Второе - это связь через реквизит с типом "Документ".

Документ может быть подчинен другому и вовсе не обязан быть заполнен из документа-основания, и наоборот - заполненный из документа-основания документ не обязан иметь ссылку на документ-основание для связи подчинения.
15. grey82 79 10.05.12 12:21 Сейчас в теме
(14) Ёпрст,

Согласен, мысль выразил не верно, в моем случае это и то и другое, то есть ПКО подчинен РН, и заполнен данными из нее.
16. MaxDavid 127 10.05.12 16:01 Сейчас в теме
(13) А вы пробовали?
У меня все показывает замечательно. Главное, не забыть ДокументПоставки заполнить.
17. grey82 79 10.05.12 16:12 Сейчас в теме
(16) MaxDavid,

Пробовал, к сожалению этот документ не является введенным на основании (то есть не подчинен расходной накладной).
18. MaxDavid 127 10.05.12 16:46 Сейчас в теме
(17) А чем смотрите, подчинен или нет?
Покажите код заполнения документа, а еще лучше - выложите обработку, я гляну.
19. Jill 17 10.05.12 16:47 Сейчас в теме
(17) grey82,
ответ Вам дан в (4) , (10) , (12) , (14).

Задача сводиться к тому, чтобы:
1) Создать документ программно и заполнить его на основании существующего
2) Прописать ссылку на ДокОснование

1. внимательно читаем (12).
2. ищем реквизит аналогичный "ДокОснование" в ПКО и заполняем.

Если, на созданных вручную, структура "отрабатывает" - значит программно можно прописать ссылку. Пункт ДокОснование (или аналогичный) присутствовать должен. Нужно внимательно изучить реквизиты вашего ПКО...

Открыть форму тут лишнее.
20. grey82 79 10.05.12 17:23 Сейчас в теме
Все вопросы снимаются, проблема решилась на административном уровне.

Всем спасибо за участие в обсуждении.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот