Имя: Пароль:
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
для каждого строка из моей тз
Документ = Мойдокумент.создатьдокумент();
Документ.Заполнить(Строка)
Документ.Записать()
массивдляоткрытия.добавить(документ.ссылка);
конецЕсли;

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

конеццикла
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший