Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 мая 2024, 13:58

програмное открытие документа

Автор Dimon777, 21 сен 2013, 17:13

0 Пользователей и 1 гость просматривают эту тему.

Dimon777

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


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

wise

ДокументСсылка.<Имя документа> (DocumentRef.<Имя документа>)
ПолучитьФорму (GetForm)
Синтаксис:

ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>)
Параметры:

<Форма> (необязательный)

Тип: Строка; ОбъектМетаданных: Форма .
Имя формы, как оно задано в конфигураторе, или объект описания метаданного требуемой формы. Если параметр не указан, то используется основная форма, заданная в конфигураторе.
<Владелец> (необязательный)

Тип: Форма; Элемент управления.
Объект, который будет являться владельцем открываемой формы.
<КлючУникальности> (необязательный)

Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм.
При поиске учитываются значения свойств открытых форм соответствующим значениям параметров метода. Если найдена открытая форма (по совпадению всех параметров), то она будет возвращена вместо новой формы.
Если из некой формы (один и тот же владелец) требуется открывать новые экземпляры другой формы, то при каждом вызове метода значение данного параметра должно быть уникально (в рамках соответствующих значений свойств открытых форм).
Значение параметра присваивается свойству открываемой формы КлючУникальности.
Следует учитывать, что при получении формы из "объекта" система получает форму для конкретного экземпляра объекта с учетом совокупности переданных параметров, в то время как для "ссылки" всегда существует только один объект в базе данных и форма получается одна (для одинаковой совокупности параметров).
Возвращаемое значение:

Тип: Форма.

Описание:

Получает форму документа.

Доступность:

Толстый клиент.
Пример:

ВыбДокумент.ПолучитьФорму().Открыть();


p.s. не дорого продаю Синтаксис Помощник ;-)
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Dimon777

да читал я синтаксис помощник и делал по нему.... вот и не получается, открывает новую форму... хотя она уже есть в базе....
может кто-нибудь пример кинуть хотя бы???

Yura063

Помогли, отблагодари!

Dimon777

вот весь код
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УвольнениеИзОрганизаций.РаботникиОрганизации.(
| Сотрудник,
| ДатаУвольнения
| ) КАК РаботникиОрганизации1,
| УвольнениеИзОрганизаций.Дата КАК Дата1,
| УвольнениеИзОрганизаций.Проведен КАК Проведен1,
| УвольнениеИзОрганизаций.Ссылка КАК Ссылка1
|ИЗ
| Документ.УвольнениеИзОрганизаций КАК УвольнениеИзОрганизаций" ;
   ВыборкаСтрокДокумента = Запрос.Выполнить().Выбрать();
   Пока ВыборкаСтрокДокумента.Следующий() Цикл
     Для Каждого ТекущаяСтрока из РаботникиОрганизации Цикл
Для каждого СтрокаДокумент Из ВыборкаСтрокДокумента.Ссылка1.РаботникиОрганизации Цикл
                  Сотрудник = ТекущаяСтрока.Сотрудник;
  ДатаУвольнения = ТекущаяСтрока.ДатаУвольнения;
  Сотрудник1 = СтрокаДокумент.Сотрудник;
    КонецЦикла;   
      КонецЦикла;
   КонецЦикла;

  Если Сотрудник = Сотрудник1 Тогда
  Если ЗначениеЗаполнено(ДатаУвольнения) Тогда
Документы.УвольнениеИзОрганизаций.ПолучитьФорму("ФормаДокумента");
  Форма.Открыть();

   Иначе   Если ЗначениеЗаполнено(ДатаУвольнения) Тогда

      ДокументОбъект = Документы.УвольнениеИзОрганизаций.СоздатьДокумент();
       ДокументОбъект.Заполнить(РаботникиОрганизации);
       ДокументОбъект.ПолучитьФорму().Открыть();
       Строка = ДокументОбъект.РаботникиОрганизации.Добавить();
      Строка.Сотрудник = ТекущаяСтрока.Сотрудник;
       Строка.ДатаУвольнения = ТекущаяСтрока.ДатаУвольнения;
  КонецЕсли;
  КонецЕсли;
   КонецЕсли;

  Если ТипЗнч(РаботникиОрганизации) = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда
                      Организация = РаботникиОрганизации.Организация;
                     КонецЕсли;

Dethmontt

Документы.УвольнениеИзОрганизаций.ПолучитьФорму("ФормаДокумента");
Форма.Открыть();
//Полная хрень!


ОткрытьЗначение(ВыборкаСтрокДокумента.ссылка1);
//Или
ВыборкаСтрокДокумента.ссылка1.ПолучитьФорму().Открыть();
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dimon777

ссылка1 - это что? т.е. как ее получить...?

Dethmontt

УвольнениеИзОрганизаций.Ссылка КАК Ссылка1
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Yura063

У вас система не виснет, от такого количества циклов? Почему не передавать параметры в запрос? То есть, алгоритм в следующем:
-перебираете строки документа, как только у вас заполнено ваша дата ПО, то запускаете запрос с параметрами сотрудник, дата увольнения;
-смотрите результат, если пустой то создаете новый документ,если не пустой, по возвращаете ссылку;
-Открываете документ;
Мне кажется так будет проще!
Помогли, отблагодари!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск