Капитально об программе 1С 8.0-8.3-8.4, 7.7

Ошибочное поведение обработок заполнения табличной части

Очень часто наблюдается непонятное поведение обработок заполнений табличной части, особенно, если документ создается каким-либо автоматизированным способом.

Одной из причин такого поведения может быть рассинхронизация ключей связи табличных частей.

В типовых конфигурациях это реквизит «КлючСвязи», который должен совпадать у связанных строк основной табличной части «Товары» и вспомогательных («СерийныеНомера»,»НомераГТД»).

Что же вызывает ошибочное поведение?

Во всех случаях  — это ошибки программирования, которые нельзя исправить другими способами — вспомогательные табличные части скрыты от непосредственной правки.

Тем не менее, даже в типовых недоработанных конфигурациях это встречается до сих пор (при добавлении нового функционала, последний случай в Бухгалтерии предприятия 3.0 для Казахстана, при заполнении источников товаров)

Вариант исправления

Ниже приведен фрагмент кода обработки заполнения табличной части, который перенумеровывает ключ связи в таблице «Товары», затем очищает вспомогательную таблицу «НомераГТД» (учебный пример)

       ключСвязи = 0;
       Для каждого строка из ДокументОбъект.Товары Цикл
              Строка.КлючСвязи = ключСвязи;
              ключСвязи = ключСвязи+1;
       КонецЦикла;
       ВсегоСтрок = ДокументОбъект.НомераГТД.Количество();
       Если ВсегоСтрок>0 Тогда
                ДокументОбъект.НомераГТД.Очистить();
                ПоказатьОповещениеПользователя("Удалено "+ВсегоСтрок+" в таблице ГТД");
       Иначе
               ПоказатьОповещениеПользователя("Таблицы гтд - была пустая!");
       КонецЕсли;