7.7 Как из одного документа запустить процедуру модуля формы другого

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем M a x i m, 21 окт 2009.

  1. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    Добрый день
    собссно нужно у подчиненного документа очистить строки (а УдалитьСтроки() работает только в контексте текущего открытого документа) и заполнить их заново на основании дока-родителя.
  2. ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Код:
    //Док - подчиненный документ
    Док = СоздатьОбъект("Документ.Реализация");
    Док.ВыбратьПодчиненныеДокументы(,,ТекущийДокумент());
    Пока Док.ПолучитьДокумент() = 1 Цикл
    //устанавливаешь вид подчиненного документа
    Док.УдалитьСтроки();
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    Док.НоваяСтрока();
    Док.Номенклатура = Номенклатура;
    Док.КОличество = Количество;
    .......
    Док.Записать();
    //если необходимо перепровести
    //Док.Провести();
    КонецЦикла;
    КонецЦикла;
    
    
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Код:
    Док = СоздатьОбъект("Документ");
    Док.ВыбратьПодчиненныеДокументы(,,ТекущийДокумент());
    Пока Док.ПолучитьДокумент() = 1 Цикл
    //устанавливаешь вид подчиненного документа
    Если Док.Вид() <> "НужныйДокумент" Тогда
    Продолжить;
    КонецЕсли;
    
    Док.УдалитьСтроки();
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    
    Док.НоваяСтрока();
    Док.Номенклатура = Номенклатура;
    Док.КОличество = Количество;
    КонецЦикла;
    
    .......
    Док.Записать();
    Прервать;
    КонецЦикла;
    
    
    
    ANDRE, обрати внимание на ошибку - запись внутри цикла
  4. ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    да да да, :unsure: совершенно правильное замечание, торопился немного
  5. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    я так примерно и делал, но 1С ругается на Док.Записать():
    ТекДок.Записать();
    {Документ.РасходнаяНакладная.Форма.Модуль(50)}: Не выбран документ!
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Так это же ПРИМЕРНО, а не так))) Выкладывайте ВАШ код - будем посмотреть))))
  7. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура ОбновитьУдКачества(); //йадобавил
    
    ТекДок="";
    НаличиеУдКач = 0;
    УдКач = СоздатьОбъект("Документ"); 
    УдКач.ВыбратьПодчиненныеДокументы(, , ТекущийДокумент());
    Пока УдКач.ПолучитьДокумент() = 1 Цикл
    Если УдКач.Вид() = "УдостоверениеКачества" Тогда
    Сообщить("Найдено " + УдКач);
    ТекДок=УдКач.ТекущийДокумент();
    НаличиеУдКач = НаличиеУдКач + 1;
    КонецЕсли;
    КонецЦикла;
    
    Если НаличиеУдКач = 0 Тогда                
    Предупреждение("Удостоверение качества для данной отгрузки не существует");
    ИначеЕсли НаличиеУдКач > 1 Тогда
    Предупреждение("Внимание, для данной отгрузки существует " + НаличиеУдКач + " удостоверений качества. Обновлено будет удостоверение, которое найдено последним.");
    КонецЕсли;
    
    Если ПустоеЗначение(ТекДок)=0 Тогда
    //УдКач.Заполнить(ТекДок); Это процедура подч. дока для автозаполнения
    //глОпустошитьДокумент(ТекДок, ,); это я создал в ГМ тоже, что и здесь
    Если ТекДок.Выбран() = 1 Тогда
    Сообщить("Документ выбран");
    ТекДок.УдалитьСтроки();
    КонецЕсли;
    
    ТекДок.Записать();
    ОткрытьФорму(ТекДок);
    
    КонецЕсли;	
    КонецПроцедуры //ОбновитьУдКачества
    
    
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Код:
    Если ТекДок.Выбран() = 1 Тогда  
    Сообщить("Документ выбран");  
    Док = СоздатьОбъект("Документ");
    Док.НайтиДокумент(ТекДок);
    Док.УдалитьСтроки(); 
    Док.Записать();
    КонецЕсли; 
    
    
  9. TopicStarter Overlay
    M a x i m
    Offline

    M a x i m Опытный в 1С

    Регистрация:
    6 окт 2008
    Сообщения:
    212
    Симпатии:
    0
    Баллы:
    26
    Спасибо, заработало!

    Вот скажите - это мне просто кажется или 7.7 и впрямь нелогичная в смысле программирования?

    Или это малый опыт кодинга сказывается, или плохое понимание сути ООП?
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Всего понемногу....
    1с логична и проста.

    Как вы получили переменную? :
    Код:
    ТекДок=УдКач.ТекущийДокумент();
    
    
    и при этом
    Код:
    Пока УдКач.ПолучитьДокумент() = 1 Цикл 
    
    
    Т.е. Все документы в выборке выбраны.
    Нужно позиционироваться

    О чем вам 1с и сообщила:

    ТекДок.Записать();
    {Документ.РасходнаяНакладная.Форма.Модуль(50)}: Не выбран документ

Поделиться этой страницей