Очень часто наблюдается непонятное поведение обработок заполнений табличной части, особенно, если документ создается каким-либо автоматизированным способом.
Одной из причин такого поведения может быть рассинхронизация ключей связи табличных частей.
В типовых конфигурациях это реквизит «КлючСвязи», который должен совпадать у связанных строк основной табличной части «Товары» и вспомогательных («СерийныеНомера»,»НомераГТД»).
Что же вызывает ошибочное поведение?
- заполнение таблиц без заполнения или ошибочным указанием ключей
- при копировании строки (F9) не генерируется новый ключ, а остается от строки источника (в основной таблице оказывается совпадающие значения ключей)
- при создании документа на основании другого при очистке основной части не очищается вспомогательные таблицы (например, реализация проверяет наличие заказанных товаров на складе, остаток заказа)
Во всех случаях — это ошибки программирования, которые нельзя исправить другими способами — вспомогательные табличные части скрыты от непосредственной правки.
Тем не менее, даже в типовых недоработанных конфигурациях это встречается до сих пор (при добавлении нового функционала, последний случай в Бухгалтерии предприятия 3.0 для Казахстана, при заполнении источников товаров)
Вариант исправления
Ниже приведен фрагмент кода обработки заполнения табличной части, который перенумеровывает ключ связи в таблице «Товары», затем очищает вспомогательную таблицу «НомераГТД» (учебный пример)
ключСвязи = 0; Для каждого строка из ДокументОбъект.Товары Цикл Строка.КлючСвязи = ключСвязи; ключСвязи = ключСвязи+1; КонецЦикла; ВсегоСтрок = ДокументОбъект.НомераГТД.Количество(); Если ВсегоСтрок>0 Тогда ДокументОбъект.НомераГТД.Очистить(); ПоказатьОповещениеПользователя("Удалено "+ВсегоСтрок+" в таблице ГТД"); Иначе ПоказатьОповещениеПользователя("Таблицы гтд - была пустая!"); КонецЕсли;
Делать деньги без рекламы может только монетный двор.