Вход | Регистрация

1С:Предприятие ::

Метки:

Запись реквизитов справочника

Я
   Arhitektor
 
06.01.04 - 08:52
Здраствуйте!

Конфигурация Торговля и склад 7.7

Подскажите, пожалуйста, как правильно записать реквизит справочника при проведении документа.

Я создал в справочнике Договоры реквизиты: СуммаНа01012004, СуммаС01012004 и УчитыватьСкидки, все числовые. Далее при проведении документа Реализация мне необходимо сумму документа прибавить к реквизиту СуммаС01012004 и если СуммаС01012004+СуммаНа01012004 > какого-то числового значения, установить в договоре скидку.

Делаю следующим образом:

Процедура ЗаменаСуммы()
    
 СпрД = СоздатьОбъект("Справочник.Договоры");
 СпрД.ИспользоватьВладельца(Контрагент);
 СпрД.НайтиЭлемент(Договор);
    
 Сум = СпрД.ТекущийЭлемент().СуммаС01012004 + Итог("Сумма");

 ОбщСум = Сум + СпрД.ТекущийЭлемент().СуммаНа01012004;
    
 СпрД.ТекущийЭлемент().СуммаС01012004 = Сум;
    
 Если СпрД.ТекущийЭлемент().УчитыватьСкидки = 1 Тогда
   Спр = СоздатьОбъект("Справочник.Скидки");
   Сум = СпрД.ТекущийЭлемент().Суммана01012004 + 
   СпрД.ТекущийЭлемент().СуммаС01012004;
        
   Номер = -1;
        
   Спр.ВыбратьЭлементы();
   Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если Сум < Спр.ТекущийЭлемент().Сумма Тогда
    Номер = Число(Спр.ТекущийЭлемент().Код);
    Прервать;
    КонецЕсли;                                      
   КонецЦикла;
        
   Если (Номер <> -1) и (Номер <> 1) Тогда
    Номер = Номер - 1;                         
    Стр = "Скидка " + Строка(Номер) + "%";
    Спр.НайтиПоНаименованию(Стр);
    Если Скидка <> Спр.ТекущийЭлемент() Тогда
      СпрД.ТекущийЭлемент().Скидка = Спр.ТекущийЭлемент();
    КонецЕсли;                
   ИначеЕсли Номер = 1 Тогда
    СпрД.ТекущийЭлемент().Скидка = Спр.ТекущийЭлемент();
   Иначе
    Спр.НайтиПоНаименованию("Скидка 7%");
    СпрД.ТекущийЭлемент().Скидка = Спр.ТекущийЭлемент();    
   КонецЕсли;
  КонецЕсли;
    
КонецПроцедуры// ЗаменаСуммы()

Но при этом ничего в реквизиты не записывается. Пробовал добавлять в конец процедуры строку СтрД.Записать(); но и это не помогло.

Подскажите, очень надо.

С уважением, Arhitektor, astoma@front.ru
 
 
   andersen
 
1 - 06.01.04 - 09:03
я думаю в строках:
... = СпрД.ТекущийЭлемент().....
ТекущийЭлемент() - лишнее, а вот...
СтрД.Записать(); - надо
   GrayT
 
2 - 06.01.04 - 09:04
Внимательно не вчитывался, а так на вскидку. СпрД.Записать() нужно обязательно, а во-вторых зачем постоянно используешь СпрД.ТекущийЭлемент().хххххх
Ты вед на нем уже спозиционировался - спрД.НайтиЭлемент(Договор), вот и используй дальше спрД.Сумма. Кстати, после поиска проверь, а нашел ли ты что искал - Если НаайтиЭлемент()=1
   Черт
 
3 - 06.01.04 - 09:06
Спр.НайтиПоНаименованию(Стр); здесь пустое значение, скорее всего
Вместо СТР должна быть строка "Иванов"
Наверно лучше было бы Спр.НайтиЭлемент(Стр)
Пройдись отладчиком и все станет ясно
   GrayT
 
4 - 06.01.04 - 09:06
Хм, (1) опередил :))
   Arhitektor
 
5 - 06.01.04 - 09:13
Черт'у

Да нет, в Спр.НайтиПоНаименованию(Стр); переменная Стр имеет то значение что и надо, причем после команды СпрД.ТекущийЭлемент().Скидка = Спр.ТекущийЭлемент(); и Скидка указывает на элемент справочника Спр с наименованием Стр :))

Проверено в отладчике
   Черт
 
6 - 06.01.04 - 09:20
Переменная то имеет значение то что надо это правильно, но НайтиПоНаименованию - Найти элемент справочника по наименованию, где наименование строковое выражение (PTFM)
   Arhitektor
 
7 - 06.01.04 - 09:22
Все, спасибо за участие, уже получилось!!!

Оказывается, для успеха достаточно просто хорошего слова ;))))

andersen спасибо за совет!!!

Всем пока.

С уважением к вашим знаниям и незнаниям Arhitektor
astoma@front.ru
   GrayT
 
8 - 06.01.04 - 09:25
Архитектор, здается мне что спрД.ТекущийЭлемент().Скидка=что-либо ты создаешь еще один экземпляр объекта, не тот, на который указывает спрД.Скидка. Попробуй убрать ТекущийЭлемент()
   Arhitektor
 
9 - 06.01.04 - 09:55
Уже :))

Спасибо за совет GrayT


Список тем форума
Рекламное место пустует  
Закон Брукера: Даже маленькая практика стоит большой теории.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует