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