Имя: Пароль:
1C
1С v8
Ввод на основании
0 hasan-rusel
 
04.07.14
09:12
Ввожу новый документ на основании следующим образом:

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


КонецЕсли;


Т.е. если в табличной части документа 1 строка, то открывается 1 форма заполненная, тут все ок, но если в ТЧ N строк, то открывается N заполненных форм + 1 пустая, как этого избежать ?
Заранее спасибо !
1 Azverin
 
04.07.14
09:20
(0) ты чего сказать то хотел? что нужно?
2 hasan-rusel
 
04.07.14
09:23
(1) как избежать открытия еще одной пустой формы, когда строк ТЧ N ?
3 Hans
 
04.07.14
09:26
зачем это все
НовыйДокумент = Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();
      Форма = НовыйДокумент.ПолучитьФорму();
      Форма.Сотрудник = Выборка.Сотрудник;
      Форма.ДатаНачалаСобытия = Выборка.ДатаНачала;
      Форма.ДатаНачалаОсновногоОтпуска = Выборка.ДатаНачала;
      Форма.ДатаОкончанияОсновногоОтпуска = Выборка.ДатаОкончания;
      Форма.РабочийГодС = Выборка.РабочийГодС;
      Форма.РабочийГодПо = Выборка.РабочийГодПо;
       Форма.КоличествоДнейОсновногоОтпуска = Выборка.КоличествоДней;
      Форма.Открыть();
4 Hans
 
04.07.14
09:26
Зачем новый документ создавать и открывать форму в обработке заполнения?
5 Hans
 
04.07.14
09:27
Пиши в сам объект он откроется сам скорее всего.
6 Azverin
 
04.07.14
09:27
(4) я вот тоже прибалдел от кода. пойду-ка я отсюдова...
7 hasan-rusel
 
04.07.14
09:31
(4) а как ? Нужно при вводе на основании, из документа отпуска организации, ввести документ начисление отпуска по количеству строк в документе отпуска.
8 barrgand
 
04.07.14
09:32
(2) Убрать пустую строку из документа ОтпускаОрганизаций?
9 hasan-rusel
 
04.07.14
09:40
(8) ее нет.
например в ТЧ 2 строки, Выборка.количество = 2
а открывается 2 формы заполненные + 1 пустая.
10 barrgand
 
04.07.14
09:43
(9) Ну тогда в (0) не весь код
11 rincewind
 
04.07.14
09:44
(9) только православный отладчик поможет в таком случае
12 hhhh
 
04.07.14
09:46
(10) не, всё правильно Форма.Открыть(); - это открываются 2 формы, но вы забыли, что ввод на основании тоже открывает форму. Вот это она и есть, пустая.
13 hasan-rusel
 
04.07.14
09:50
(12) а как сделать так, чтобы ввод на основании не открывал "свою" форму ?
14 hhhh
 
04.07.14
10:05
(13) думаю, в ПередОткрытием вставить Отказ = Истина
15 hasan-rusel
 
04.07.14
10:12
(14) нужно условие какое-то, иначе он вообще не открывается.)
16 Defender aka LINN
 
04.07.14
10:15
(0) Молодец. Теперь твой говнокод не даст документу работать ни в одном режиме кроме клиентского.
17 hasan-rusel
 
04.07.14
10:18
(16) в другом и не надо.
18 Крошка Ру
 
04.07.14
10:20
(0) Я чего-то не понимаю?

Если уж так хочется открыть только одну форму, открывай её ПЕРЕД циклом.
19 hasan-rusel
 
04.07.14
10:23
(18) нужно открыть ее столько раз, сколько строк в ТЧ, а он открывает сколько строк в Тч +1.
20 Defender aka LINN
 
04.07.14
10:24
(17) Это тебе не надо. Точнее ты так думаешь.
21 Defender aka LINN
 
04.07.14
10:25
(19) Вот скажи, какая религия лично тебе запрещает сделать *кнопку*, которая вот это вот выполнять будет?
22 Крошка Ру
 
04.07.14
10:25
(19) Кстати, а вот это внутри цикла зачем?

Если Выборка.Количество() > 1 Тогда
23 hasan-rusel
 
04.07.14
10:28
(22) потому что то, что после Иначе он выполняет норм, найду решение, исправлю)
24 hasan-rusel
 
04.07.14
10:29
(21) ТЗ за религию сойдёт ?
25 Крошка Ру
 
04.07.14
10:29
(19) И ещё, кстати, вангую, что где-то ещё у тебя форма этого документа открывается.
Куда и идут данные, заполняемые в ветке "Иначе".
А когда Выборка.Количество()>1, то эти данные пустые и соответственно, форма открывается пустая
26 Крошка Ру
 
04.07.14
10:30
(23) Да нет, зачем это ВНУТРИ цикла?
27 Defender aka LINN
 
04.07.14
10:32
(24) В ТЗ написано сделать это в обработке заполнения?
1. Не свисти.
2. Если риальне не свистишь (вероятность КРАЙНЕ МАЛА) - постановщик ТЗ долбоклюй, конечно, но ты тоже, раз такое делаешь.
28 Borteg
 
04.07.14
10:37
(0) в обработке заполнения только заполнение,передавай туда например строку тз в структуре.
выводишь кнопку
массивдляоткрытия = новый массив()4
для каждого строка из моей тз
Документ = Мойдокумент.создатьдокумент();
Документ.Заполнить(Строка)
Документ.Записать()
массивдляоткрытия.добавить(документ.ссылка);
конецЕсли;

потом можно все это пооткрывать если сильно хочется тоже циклом например
Для каждого строка из массивдляоткрытия цикл

конеццикла