Нередко разработчики сталкиваются с загадочной проблемой: при добавлении табличной части (ТЧ) к стандартному объекту конфигурации (например, к справочнику Номенклатура) через расширение, введенные пользователем данные бесследно исчезают после сохранения и повторного открытия формы. При этом отладчик не показывает ошибок и демонстрирует, что данные в табличной части существуют вплоть до момента записи объекта. Давайте подробно разберемся, почему возникает такая ситуация и как ее исправить.
Проанализируем типичный сценарий. Вы добавляете в расширение новую табличную часть для справочника, заимствуете его форму и программно выводите на нее таблицу, связывая ее с данными объекта:
ТаблицаПоказатели = Элементы.Добавить("ТаблицаПоказатели", Тип("ТаблицаФормы"), СтраницаПоказатели);
ТаблицаПоказатели.ПутьКДанным = "Объект.Показатели";
В пользовательском режиме вы добавляете строки в эту таблицу, нажимаете "Записать и закрыть". Открываете элемент снова — таблица пуста. Проверка отладчиком в событиях ПередЗаписью и ПриЗаписи показывает, что коллекция Объект.Показатели содержит данные (например, Объект.Показатели.Количество() = 1), но после завершения всех процедур записи и нового открытия объекта количество строк становится равным нулю. Выясним, что может быть причиной такого поведения.
Это самая частая и неочевидная причина проблемы. Механизм расширений очень чувствителен к последовательности, в которой вы добавляете и изменяете объекты. Для корректной работы с новыми табличными частями критически важно соблюдать строгий порядок действий.
Рассмотрим по шагам правильную последовательность:
Справочник.Номенклатура.Важный момент: если вы нарушили этот порядок (например, сначала создали ТЧ, а потом заимствовали объект), то простое изменение последовательности уже не поможет. Платформа "запоминает" некорректную структуру, и никакие дальнейшие манипуляции не заставят ее сохранять данные. В этом случае единственным надежным решением будет полное удаление заимствованных объектов (формы, самого объекта) и ТЧ из расширения и их повторное создание в правильном порядке.
Проблема с сохранением данных в ТЧ расширений часто связана с ошибками в конкретных версиях платформы 1С:Предприятие 8. Особенно часто на такое поведение жалуются пользователи, работающие на релизах, начиная с 8.3.18 и выше.
На форумах упоминаются следующие версии, на которых проблема проявлялась:
В то же время, есть сообщения, что на некоторых сборках проблема отсутствует. Например, на релизе 8.3.18.1334 данные сохранялись корректно. Это говорит о том, что проблема носит характер плавающей ошибки, которую исправляют в промежуточных релизах.
Что делать в этом случае?
Еще одна неочевидная, но вполне реальная причина — конфликт с другим расширением, которое установлено в базе. Самое коварное здесь то, что конфликт может вызывать даже отключенное (неактивное) расширение.
Проанализируем ситуацию: предположим, у вас есть два расширения. В первом (которое сейчас отключено) вы когда-то давно добавляли к справочнику Номенклатура табличную часть с именем Показатели. Теперь вы создаете новое, активное расширение и в нем снова добавляете к тому же справочнику ТЧ с точно таким же именем Показатели.
Платформа может "запутаться" в одноименных объектах метаданных из разных расширений. В результате она не будет выдавать никаких ошибок, но и не будет сохранять данные в таблицу из активного расширения. Разные версии платформы ведут себя по-разному: например, старая версия 8.3.17 могла выдать ошибку о невозможности работы с таблицей, а версия 8.3.18 просто молча игнорирует сохранение.
Решение:
Если вышеописанные методы не помогли, стоит проверить еще несколько моментов:
Подводя итог, можно с уверенностью сказать, что проблема с несохранением данных в ТЧ расширения — это не случайный глюк, а системная ошибка, связанная с внутренними механизмами платформы. В подавляющем большинстве случаев она решается строгим соблюдением порядка заимствования объектов и внимательной проверкой окружения (версии платформы и других расширений).