7.7 Заменить значение документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем ZEMA, 22 июн 2010.

  1. TopicStarter Overlay
    ZEMA
    Offline

    ZEMA Опытный в 1С

    Регистрация:
    5 окт 2007
    Сообщения:
    231
    Симпатии:
    0
    Баллы:
    26
    Всем привет. Нужна помощь, так как не вижу своего "косяка".
    Необходимо при обращении к документу "Документ1" изменить сумму в каждой строке документе (эта сумма зависит от документаподчиненного "Документ2", ссылка которого находится в каждой строке колонки "По документу" документа "Документ1"). Конфа самописная, так что...
    Код:
    Процедура ОбновитьЗаполнение()       
    перем а;
    
    Док = СоздатьОбъект("Документ2");
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл // документ1
    Если Док.НайтиДокумент(ПоДокументу) = 1 Тогда 
    Если (Док.Выбран() > 0) и (Док.Проведен()=1) Тогда  
    Сообщить(ТипЗначенияСтр(Сумма));
    а=Док.ТекущийДокумент().Итог("Сумма");
    сумма=а;
    КонецЕсли;
    КонецЕсли;	
    КонецЦикла;
    
    КонецПроцедуры
    
  2. Бухгалтерский угодник
    Offline

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

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

    ZEMA Опытный в 1С

    Регистрация:
    5 окт 2007
    Сообщения:
    231
    Симпатии:
    0
    Баллы:
    26
    Делаю я так, а сумма все равно не меняется((( Если эту процепдурку цепляю на колонку "ПоДокументу" (т.е. когда выбирается) все работает.
  4. TopicStarter Overlay
    ZEMA
    Offline

    ZEMA Опытный в 1С

    Регистрация:
    5 окт 2007
    Сообщения:
    231
    Симпатии:
    0
    Баллы:
    26
    А если в обработку запихиваю эту процедуру(где вызываю форму Документа1 (ОткрытьФормуМодально)), ничего не работает((
  5. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Записать()?
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Покажите как вы передаете контекст. Изменение строк через контекст возможно ТОЛЬКО в модальном режиме
  7. TopicStarter Overlay
    ZEMA
    Offline

    ZEMA Опытный в 1С

    Регистрация:
    5 окт 2007
    Сообщения:
    231
    Симпатии:
    0
    Баллы:
    26
    Вызывается в обрабортке:
    Код:
    Процедура Прощелкать()
    Перем Парам, н, к, Док;
    
    Парам = СоздатьОбъект("СписокЗначений");
    Парам.ДобавитьЗначение("Обновить", "ТипОбработки");
    
    к = Документы.РазмерСписка();
    Если к = 0 Тогда
    Возврат;
    КонецЕсли;
    
    Для н = 1 По к Цикл
    Если Документы.Пометка(н) = 0 Тогда
    Продолжить;
    КонецЕсли;
    Док = Документы.ПолучитьЗначение(н);
    ОткрытьФормуМодально(Док, Парам, 1);
    КонецЦикла;
    
    КонецПроцедуры		//	Прощелкать
    
    
    А это при открытии документа "Документ1" модально:
    Код:
    Процедура ПриОткрытии()
    Перем Парам, р;
    
    Парам = Форма.Параметр;
    Если ТипЗначенияСтр(Парам) = "СписокЗначений" Тогда
    р = Парам.Получить("ТипОбработки");
    Если р = "Обновить" Тогда
    ОбновитьЗаполнение(); // эта обработка по перебору
    Записать();
    Провести(0);
    Форма.Закрыть(0);
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры		//	ПриОткрытии
    
    
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Все должно работать т.к. код верный - ошибки не вижу. Единственный момет:
    Код:
    Процедура ОбновитьЗаполнение()           
    ...
    Сообщить("Было в документе "+Сумма);// проверка....
    сумма=Док.Итог("Сумма");//если в реквизитах т.ч. документа нет "сумма" (например есть всего или сума) то 1с воспимет ее как обычную 
    //переменную. ТАКЖЕ проверьте не определяете ли вы сумму как переменную в теле модуля (черем Перем)
    Сообщить("Должно стать "+Док.Итог("Сумма"));// на всякий случай посмотрим что вернет....
    ....
    КонецПроцедуры
    
    
    
  9. TopicStarter Overlay
    ZEMA
    Offline

    ZEMA Опытный в 1С

    Регистрация:
    5 окт 2007
    Сообщения:
    231
    Симпатии:
    0
    Баллы:
    26
    Спасибо)) но все без изменений, возвращается все равно старые данные.
  10. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Что возвращает "сообщить"? Верные значения, но при этом в документе не устанавливаются?
  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Еще как вариант - транзакция. Т.е. вы открываете (ОткрытьТранзакцию), и завершаете работу без завершения транзакции (ЗаверщитьТранзакцию) - будет тот же эффект. Метод Записать не сработает....

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