Как атоматически закрыть документ открытый с помощью процедуры "ОткрытьФорму" ?
02.09.2008
12:58
#1
"Всем добрый день !!!
Люди добрые, помогите пожалуйста, если это не трудно !!!
1.Предистория:
Наша компания ведёт складской учёт в программе 1с 77 Аналит: Фармация. Бухгалтерию же ведёт
в 1С 77 Буххгалтерский учёт. Особенность в том, что есть товары со ставками 18%, 10% и без НДС.
Чтоб не мучится со 100000 номеклатурой ещё и в бухгалтерии, я использую там вссего 3 наименования:
товар 10%, товар 18% и товар без НДС. Документы прихода и отгрузги товара прегружаютя соосветственно из складской базы в бухгалтерию со всей номенклатурой. Чтоб руками не обрабатывать в бухгалтерии опять все документы, т.е для автоматизации этого процесса, в процедурах
"При открытии" документов ПоступлениеТоваров и РасходнаяНакладная дописал весчи смысл которых такой: При открытии документов он обсчитывает сначала в табличной части, сколько товара по какой ставке и сумме пришло или ушло. Затем удаляет табличную часть и создаёт новую с нужной мне номенклатурой. Сводится соответственно всё к тому что надо открыть документ и нажать кнопку ОК.
2. Суть проблемы:
Так как документов за налоговый период очень много пытаюсь автоматизировать этот процесс написав документ (обработку) смысл которого сводится к тому, что он должен выбрать к примеру документы
(непроведённые) ПоступлениеТоваров в определённом периоде, автоматически открыть их
чтоб вступили изменения описанные в пункте 1, и провести их.
Форма документа:
С даты ...... по .......
Кнопки выполнить и закрыть.
Модуль документа:
Процедура Выполнить()
Перем БИ;
Если Дата1 <= Константа.ДатаЗапретаРедактирования Тогда
Предупреждение("Нельзя обрабатывать документы с датой, более ранней, чем дата запрета редактирования документов!");
Возврат;
КонецЕсли;
Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы(Дата1,Дата2);
Пока Док.ПолучитьДокумент() = 1 Цикл
Состояние("Обработка "+Док.ДатаДок);
Если Док.Вид() = "ПоступлениеТоваров" Тогда
Докум = Док.ТекущийДокумент();
ОткрытьФорму(Докум);
Если ОткрытьФорму(Докум) = 1 Тогда
Сообщить ("Форма открыта: " + Докум);
Форма.Закрыть();
//Вот сдесь он закрывает у меня форму документа который используется т.е. обработку,
//А НУЖНО ЧТОБ ЗАКРЫЛ И ПРОВЁЛ ДОКУМЕНТ ПОСТУПЛЕНИ ТОВАРОВ !!!!!!!!!!
//Докум.Закрыть();
//Докум.Форма.Закрыть();
глПриПроведении(Докум);
ИначеЕсли ОткрытьФорму(Докум) = 0 Тогда
Сообщить ("Форма не открыта !!!: " + Докум);
Конецесли;
Док.Записать();
// СДЕСЬ ОН ПИШЕТ ЧТО ДОКУМЕНТ ЗАБЛОКИРОВАН т.к. ОТКРЫТ !!!!
// КАК ЕГО ЗАКРЫТЬ ????????????????????????????????
//Если Док.ПометкаУдаления() = 1 Тогда
//Иначе
// Сообщить("Проведение "+Док);
// Если Док.Провести() = 0 Тогда
// Возврат;
// КонецЕсли;
//КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//________________________________ _____________________________________________
Процеду ра ПриОткрытии()
Дата1 = НачалоПериодаБИ();
Дата2 = КонецПериодаБИ();
КонецПроцедуры
КАК ЗАКРЫТЬ ДОКУМЕНТ ПОСТУПЛЕНИЕ ТОВАРОВ ОТКРЫТЫЙ С ПОМОЩЬЮ ПРОЦЕДУРЫ
"ОткрытьФорму(Текущий документ)" ????????????????????????
ПОЖАЛУЙСТА ПОМОГИТЕ !!!!!!
"
Люди добрые, помогите пожалуйста, если это не трудно !!!
1.Предистория:
Наша компания ведёт складской учёт в программе 1с 77 Аналит: Фармация. Бухгалтерию же ведёт
в 1С 77 Буххгалтерский учёт. Особенность в том, что есть товары со ставками 18%, 10% и без НДС.
Чтоб не мучится со 100000 номеклатурой ещё и в бухгалтерии, я использую там вссего 3 наименования:
товар 10%, товар 18% и товар без НДС. Документы прихода и отгрузги товара прегружаютя соосветственно из складской базы в бухгалтерию со всей номенклатурой. Чтоб руками не обрабатывать в бухгалтерии опять все документы, т.е для автоматизации этого процесса, в процедурах
"При открытии" документов ПоступлениеТоваров и РасходнаяНакладная дописал весчи смысл которых такой: При открытии документов он обсчитывает сначала в табличной части, сколько товара по какой ставке и сумме пришло или ушло. Затем удаляет табличную часть и создаёт новую с нужной мне номенклатурой. Сводится соответственно всё к тому что надо открыть документ и нажать кнопку ОК.
2. Суть проблемы:
Так как документов за налоговый период очень много пытаюсь автоматизировать этот процесс написав документ (обработку) смысл которого сводится к тому, что он должен выбрать к примеру документы
(непроведённые) ПоступлениеТоваров в определённом периоде, автоматически открыть их
чтоб вступили изменения описанные в пункте 1, и провести их.
Форма документа:
С даты ...... по .......
Кнопки выполнить и закрыть.
Модуль документа:
Процедура Выполнить()
Перем БИ;
Если Дата1 <= Константа.ДатаЗапретаРедактирования Тогда
Предупреждение("Нельзя обрабатывать документы с датой, более ранней, чем дата запрета редактирования документов!");
Возврат;
КонецЕсли;
Док = СоздатьОбъект("Документ");
Док.ВыбратьДокументы(Дата1,Дата2);
Пока Док.ПолучитьДокумент() = 1 Цикл
Состояние("Обработка "+Док.ДатаДок);
Если Док.Вид() = "ПоступлениеТоваров" Тогда
Докум = Док.ТекущийДокумент();
ОткрытьФорму(Докум);
Если ОткрытьФорму(Докум) = 1 Тогда
Сообщить ("Форма открыта: " + Докум);
Форма.Закрыть();
//Вот сдесь он закрывает у меня форму документа который используется т.е. обработку,
//А НУЖНО ЧТОБ ЗАКРЫЛ И ПРОВЁЛ ДОКУМЕНТ ПОСТУПЛЕНИ ТОВАРОВ !!!!!!!!!!
//Докум.Закрыть();
//Докум.Форма.Закрыть();
глПриПроведении(Докум);
ИначеЕсли ОткрытьФорму(Докум) = 0 Тогда
Сообщить ("Форма не открыта !!!: " + Докум);
Конецесли;
Док.Записать();
// СДЕСЬ ОН ПИШЕТ ЧТО ДОКУМЕНТ ЗАБЛОКИРОВАН т.к. ОТКРЫТ !!!!
// КАК ЕГО ЗАКРЫТЬ ????????????????????????????????
//Если Док.ПометкаУдаления() = 1 Тогда
//Иначе
// Сообщить("Проведение "+Док);
// Если Док.Провести() = 0 Тогда
// Возврат;
// КонецЕсли;
//КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//________________________________
Процеду
Дата1 = НачалоПериодаБИ();
Дата2 = КонецПериодаБИ();
КонецПроцедуры
КАК ЗАКРЫТЬ ДОКУМЕНТ ПОСТУПЛЕНИЕ ТОВАРОВ ОТКРЫТЫЙ С ПОМОЩЬЮ ПРОЦЕДУРЫ
"ОткрытьФорму(Текущий документ)" ????????????????????????
ПОЖАЛУЙСТА ПОМОГИТЕ !!!!!!
"
02.09.2008
13:10
#2
"Зачем открывать и закрывать документы???
Делайте обработку табличной части в обработке.
После Докум = Док.ТекущийДокумент();
//Создайте ТЗ для временного хранения данных
Делайте Докум.ВыбратьСтроки();
Пока Докум.ПолучитьСтроку()>0 Цикл
//Здесь обсчет табличной части и заполнение временной ТЗ необходимыми данные
КонецЦикла;
Докум.УдалитьСтроки();
//И далее заново заполнение табличной части необходимыми значениями из временной ТЗ
Приблизительно так.
А открывать, закрывать документ это через (_!_)"
Делайте обработку табличной части в обработке.
После Докум = Док.ТекущийДокумент();
//Создайте ТЗ для временного хранения данных
Делайте Докум.ВыбратьСтроки();
Пока Докум.ПолучитьСтроку()>0 Цикл
//Здесь обсчет табличной части и заполнение временной ТЗ необходимыми данные
КонецЦикла;
Докум.УдалитьСтроки();
//И далее заново заполнение табличной части необходимыми значениями из временной ТЗ
Приблизительно так.
А открывать, закрывать документ это через (_!_)"
02.09.2008
13:34
#3
Большое спасибо !!!
А вообще в принципе возможно закрыть документ из модуля друго документа,
как в этом случае ??????
С Уважением,
Дмитрий.
А вообще в принципе возможно закрыть документ из модуля друго документа,
как в этом случае ??????
С Уважением,
Дмитрий.
02.09.2008
15:53
#4
"Процедура ОткрытьЗакрытьДокумент()
Док=СоздатьОбъект("Документ");
Док.Выбрать("Выберите документ","""");
ОткрДок=Док.ТекущийДокумент();
Конт="""";
ОткрытьФорму(ОткрДок,Конт);
Сообщить(СокрЛП(Конт.Вид())+" № "+СокрЛП(Конт.НомерДок)+" от " +Строка(Конт.ДатаДок));
Конт.Форма.Закрыть();
КонецПроцедуры
"
Док=СоздатьОбъект("Документ");
Док.Выбрать("Выберите документ","""");
ОткрДок=Док.ТекущийДокумент();
Конт="""";
ОткрытьФорму(ОткрДок,Конт);
Сообщить(СокрЛП(Конт.Вид())+" № "+СокрЛП(Конт.НомерДок)+" от " +Строка(Конт.ДатаДок));
Конт.Форма.Закрыть();
КонецПроцедуры
"
03.09.2008
11:23
#5
"Лучше сделать так :
открываем документ... ОткрытьФорма(...,"Параметр_Открытия_Документа")
в модуле формы документа
//...
Процедура ПриОткрытии()
//..
Если ПустоеЗначение(Форма.Парамет)=0 Тогда
Если Форма.Параметр = "Параметр_Открытия_Документа" Тогда
Выполнить();
Записать();
Провести();
СтатусВозврата(0);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//...
"
открываем документ... ОткрытьФорма(...,"Параметр_Открытия_Документа")
в модуле формы документа
//...
Процедура ПриОткрытии()
//..
Если ПустоеЗначение(Форма.Парамет)=0 Тогда
Если Форма.Параметр = "Параметр_Открытия_Документа" Тогда
Выполнить();
Записать();
Провести();
СтатусВозврата(0);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//...
"
Читают тему
(гостей: 2)