8.х Модифицированность

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем alexburn, 15 янв 2009.

  1. TopicStarter Overlay
    alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    У меня вот такая проблемка: В документе, при выводе строки (в таблицу товаров), ставлю значение НДС взависимости от организации. Документ проводится, все нормально, только вот показывает что документ изменен, и приходится перепроводить, после чего опять показывает что документ изменет. Я думаю что все дело в процедуре ПриВыводеСтроки.
    Вот отрывок кода:
    Код:
    Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    Если ЭтотОбъект.Организация=Справочники.Организации.НайтиПоКоду("00003") Тогда 
    ДанныеСтроки.СтавкаНДС=Перечисления.СтавкиНДС.НДС10;
    РассчитатьСуммуНДСТабЧасти(ДанныеСтроки, ЭтотОбъект);
    КонецЕсли;
    
    
    
    Объясните, в чем может быть проблема и как ее исправить?
  2. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Не понятно что именно не так?
    Какова последовательность действий, и что не устраивает?
    А то я из вашего сообщения понимаю так, что при заполнении документа, Вы ставите разные НДС на товары (а у нас теперь ставка НДС зависит от организации?)
    При изменении данных, (ставка НДС) у вас также меняются и суммы документа, правда ведь? Так чего тогда смущает необходимость перепроведения?
    Или вам приходится перепроводить дважды?
    В общем опишите пожалуйста последовательность телодвижений пользователя - тогда станет ясно чего вам можно предложить сделать.
  3. TopicStarter Overlay
    alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    В одной организации просто нет НДС:).
    Сумма конечно же меняется.

    Ситуация такая, что при добавлении новой строки, проверяется организация. Если орг1, то ставка НДС одна, если орг2, то НДС-другая.
    Я вот что думаю, функция ПриВыводеСтроки постоянно "работает", т.о. постоянно проверяется на соответствие организации и ставится НДС. Отсюда и постоянное "изменение" документа. Это я так думаю, если что-поправьте.
  4. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Ну во первых посмотрите кто у вас еще дергает ПриВыводеСтроки, ибо умолчально это событие на добавление строки. Т.е. просто открыть и тут же закрыть док - не должно ее вызывать.

    Трассируйте код, смотрите что "дергается" во время открытия документа.
    И уберите лишнее.
  5. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    В данном случае использование "ПриВыводеСтроки" неверно.
    Из СП:
    Описание:
    Возникает при выводе строки в табличном поле.

    Т.е. при выводе каждая строка персчитывается - это неправильно. Крутанете колесо мыши - пересчет всех видимых строк...

    Выставляйте ставку НДС при изменении номенклатуры, например.
  6. TopicStarter Overlay
    alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Хорошо, попробую.
  7. TopicStarter Overlay
    alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Увы, но не достигается нужный эффект :unsure: , просто у меня номенклатура добавляется в таблицу из СпецПодбора.
  8. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Смотри процедура, которая подбор делает - правильно будет там разместить, либо вызывать программную обработку внутри модуля документа.

    Посмотрите на типовые - как сделано удаление строк.
  9. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    Не читал что написано выше.. так что может уже ответили.. но такая ситуация возникает если ты в обработку послеЗаписи или ОбработкаПроведения засунул код, который меняет что то в документе
  10. TopicStarter Overlay
    alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Не только из-за этого.
    Вот код, который помог, хотя нужно искать более рациональное решение:
    Код:
    Процедура ТоварыПриАктивизацииЯчейки(Элемент)
    Если ЭтотОбъект.Организация=Справочники.Организации.НайтиПоКоду("00003") И Не ЭтотОбъект.Проведен Тогда 
    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
    СтрокаТабличнойЧасти.СтавкаНДС=Перечисления.СтавкиНДС.НДС10;
    РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    КонецЕсли;
    КонецПроцедуры
    
    Это просто пример, и при его использовании могут возникать косяки.
  11. TopicStarter Overlay
    alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Сделал :smile: :unsure: , вот код:
    Код:
    Процедура ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект) Экспорт
    ИмяТабличнойЧасти = ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);
    МетаданныеДокумента = ДокументОбъект.Метаданные();
    Если ЕстьРеквизитТабЧастиДокумента("СтавкаНДС", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
    Если ДокументОбъект.Организация=Справочники.Организации.НайтиПоКоду("00003") Тогда
    СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.НДС10;
    Иначе
    СтрокаТабличнойЧасти.СтавкаНДС = СтрокаТабличнойЧасти.Номенклатура.СтавкаНДС;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры // ЗаполнитьСтавкуНДСТабЧасти()
    
    
    Код нужно было добавить всего в одну функцию общего модуля. Как всегда, все гениальное-просто!

    Всем спасибо за дискуссию и советы. Можете закрывать тему.
  12. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Не так.
    При выводе строки так же вызовется и при "Обновлении отображения", а это в свою очередь вызовется после записи документа. В итоге - конечно замкнутый круг!

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