Именение типа субконто при изменении счета в тз. Ошибка попытка установить значение для значение Неопределено.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ТаблицаРезультат = Запрос.Выполнить().выгрузить();
ТаблицаРезультат.Колонки.Добавить("СчетЗакрытия");
ТаблицаРезультат.Колонки.Добавить("Субконто1");
ТаблицаРезультат.Колонки.Добавить("Субконто2");
ТаблицаРезультат.Колонки.Добавить("Субконто3");
ТаблицаРезультат.Колонки.Добавить("Сумма");
// Удалим колонки таблицы перед обновление
Таблица = РеквизитФормыВЗначение("ДанныеТаблицы");
МассивРеквизитов = Новый Массив;
Для Каждого Колонка Из Таблица.Колонки Цикл
МассивРеквизитов.Добавить("ДанныеТаблицы." + Колонка.Имя);
КонецЦикла;
// Вторым параметром передаем то что нужно удалить
// Первым параметром то что нужно создать
ИзменитьРеквизиты(,МассивРеквизитов);
// Теперь удаляем таблицу с формы
ЭлементТаблица = Элементы.Найти("ДанныеТаблицы");
Если ЭлементТаблица <> Неопределено Тогда
Элементы.Удалить(ЭлементТаблица);
КонецЕсли;
// И добавляем ее заново
ЭлементТаблица=Элементы.Добавить("ДанныеТаблицы", Тип("ТаблицаФормы"),Элементы.ПараметрыЗакрытия);
ЭлементТаблица.ПутьКДанным = "ДанныеТаблицы";
ЭлементТаблица.Отображение = ОтображениеТаблицы.Список;
// Создаем реквизиты таблицы значений
МассивРеквизитов.Очистить();
Для Каждого Колонка ИЗ ТаблицаРезультат.Колонки Цикл
МассивТипов = Новый Массив;
МассивТипов.Добавить(Колонка.ТипЗначения);
НоваяКолонка = Новый РеквизитФормы(Колонка.Имя,
Новый ОписаниеТипов(МассивТипов), "ДанныеТаблицы");
МассивРеквизитов.Добавить(НоваяКолонка);
КонецЦикла;
// Первый параметр, это то что нужно создать
ИзменитьРеквизиты(МассивРеквизитов);
ЗначениеВРеквизитФормы(ТаблицаРезультат, "ДанныеТаблицы");
// Создаем на форме элементы управления
// Т.е. выводим таблицу значений и ее колонки
ЭлементТЗ = Элементы.ДанныеТаблицы;
МасТипСч=Новый Массив();
МасТипСч.Добавить(Тип("ПланСчетовСсылка.Типовой"));
МасТипСубк=Новый Массив();
МасТипСубк.Добавить(Тип("ПланВидовХарактеристикСсылка.ВидыСубконтоТиповые"));
Для Каждого Колонка ИЗ ТаблицаРезультат.Колонки Цикл
НовыйЭлементФормы = Элементы.Добавить("ДанныеТаблицы" + Колонка.Имя,
Тип("ПолеФормы"), ЭлементТЗ);
Если Колонка.Имя="СчетЗакрытия" Тогда
НовыйЭлементФормы.ОграничениеТипа=Новый ОписаниеТипов(МасТипСч);
НовыйЭлементФормы.УстановитьДействие("ПриИзменении" ,"ДанныеТаблицыСЧЗакрытияПриИзменении");
КонецЕсли;
Для Ин=1 по 3 Цикл
Если Колонка.Имя=Строка("Субконто"+ин) Тогда
НовыйЭлементФормы.ОграничениеТипа=Новый ОписаниеТипов(МасТипСубк);
КонецЕсли;
КонецЦикла;
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = "ДанныеТаблицы." + Колонка.Имя;
КонецЦикла;
ПоказатьЗдесь заполняется тз
(4)у меня самописная обработка, тип субконто хочу установить при изменении счета(в зависимости от счета). По аналогии с типовым документом у субконто изначально тип Характеристика.ВидыСубконто. Я пытаюсь при создании тз так же установить тип, и затем при изменении счета, установить тип справочника в субконто
(7)
ИдСтроки = Элементы.ДанныеТаблицы.ТекущаяСтрока;
Если ИдСтроки = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаТаблицы = ДанныеТаблицы.НайтиПоИдентификатору(ИдСтроки);
ПоляФормы = Новый Структура("Субконто1,Субконто2,Субконто3",Строкатаблицы.Субконто1,Строкатаблицы.Субконто2,Строкатаблицы.Субконто3);
ПроцедурыБухгалтерскогоУчетаКлиентСервер.ПриВыбореСчета(СтрокаТаблицы["СчетЗакрытия"], ЭтаФорма, ПоляФормы, Неопределено,истина);
Процедура ПриВыбореСчета(Счет, Форма, ПоляФормы, ЗаголовкиПолей = Неопределено, ЭтоТаблица = Ложь) Экспорт
ДанныеСчета = ПроцедурыБухгалтерскогоУчетаВызовСервераПовтИсп.ПолучитьСвойстваСчета(Счет);
Для Индекс = 1 По 3 Цикл
Если Индекс <= ДанныеСчета.КоличествоСубконто Тогда
Если ЭтоТаблица Тогда
Если ПоляФормы.Свойство("Субконто" + Индекс) Тогда
Форма.Элементы[ПоляФормы["Субконто" + Индекс]].ОграничениеТипа = ДанныеСчета["ВидСубконто" + Индекс + "ТипЗначения"];
КонецЕсли;
Иначе
Если ЗаголовкиПолей.Свойство("Субконто" + Индекс) Тогда
Форма[ЗаголовкиПолей["Субконто" + Индекс]] = ДанныеСчета["ВидСубконто" + Индекс + "Наименование"] + ":";
КонецЕсли;
Если ПоляФормы.Свойство("Субконто" + Индекс) Тогда
Форма.Элементы[ПоляФормы["Субконто" + Индекс]].Видимость = Истина;
Форма.Элементы[ПоляФормы["Субконто" + Индекс]].ОграничениеТипа = ДанныеСчета["ВидСубконто" + Индекс + "ТипЗначения"];
КонецЕсли;
КонецЕсли;
Иначе
// Ничего делать не надо, т.к. не доступные поля будут скрыты
Если НЕ ЭтоТаблица Тогда
Если ЗаголовкиПолей.Свойство("Субконто" + Индекс) Тогда
Форма[ЗаголовкиПолей["Субконто" + Индекс]] = "";
КонецЕсли;
Если ПоляФормы.Свойство("Субконто" + Индекс) Тогда
Форма.Элементы[ПоляФормы["Субконто" + Индекс]].Видимость = Ложь;
Форма.Элементы[ПоляФормы["Субконто" + Индекс]].ОграничениеТипа = Новый ОписаниеТипов("Неопределено");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
(9) так и не удивительно, что не работает.
а Вы в ПоляФормы передаете не имена полей, а значения полей конкретной строки ТЗ
// Процедура установки типа и видимости субконто в зависимости от выбранного счета
//
// Параметры:
// Счет - <План счетов> - Счет, для которого необходимо настроить тип и видимость субконто
// Форма - <Управляемая форма> - Форма, которая содержит ПоляФормы и ЗаголовкиПолей
// ПоляФормы - <Структура> - Ключи, которой Субконто1, Субконто2, Субконто3,
// а значения имена соответствующих полей на форме (поля субконто)
// ЗаголовкиПолей - <Структура> ИЛИ <Неопределено> - Ключи, которой Субконто1, Субконто2, Субконто3
// а значения имена соответствующих полей на форме (заголовки субконто)
// ЭтоТаблица - <Булево> - Признак того, где выполняется настройка субконто.
//
Показатьа Вы в ПоляФормы передаете не имена полей, а значения полей конкретной строки ТЗ
(11)
Делаю как описано выше. неплохо. Но выходит список всевозможных типов с позицией на нужном типе, как сделать так чтобы сразу открывался нужный по типу справочник?
СтрокаТаблицы = Элементы.ДанныеТаблицы.ТекущиеДанные;
ПоляОбъекта = Новый Структура("Субконто1, Субконто2, Субконто3",
"Субконто1", "Субконто2", "Субконто3");
ДанныеСчета = ПроцедурыБухгалтерскогоУчетаВызовСервераПовтИсп.ПолучитьСвойстваСчета(СтрокаТаблицы.СчетЗакрытия);
Для Индекс = 1 По 3 Цикл
Если ПоляОбъекта.Свойство("Субконто" + Индекс) Тогда
Если Индекс <= ДанныеСчета.КоличествоСубконто Тогда
СтрокаТаблицы[ПоляОбъекта["Субконто" + Индекс]] = ДанныеСчета["ВидСубконто" + Индекс + "ТипЗначения"].ПривестиЗначение(СтрокаТаблицы[ПоляОбъекта["Субконто" + Индекс]]);
Иначе
СтрокаТаблицы[ПоляОбъекта["Субконто" + Индекс]] = Неопределено;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПоказатьДелаю как описано выше. неплохо. Но выходит список всевозможных типов с позицией на нужном типе, как сделать так чтобы сразу открывался нужный по типу справочник?
Я сегодня решал проблему с заполнением Субконто при автосоздании документа ТребованиеНакладная (источник - событие при проведении ОтчетаПроизводстваЗаСмену).
Коротко предыстория сути проблемы: при открытии ТребованияНакладной попытка распечатать приводила к требованию перепровести документ, что ломало все домики учёта (время проведения документа, ответственный и так далее)...
Выяснил, что проблему вызывало "дозаполнение" документа при открытии, что приводило к установке флага Модифицированности и вполне логичному требованию провести документ перед печатью.
Перехватил в конфигураторе перед открытием ТребованияНакладной значение ЭтотОбъект (Shift+F9), выгрузил его списком, потом перехватил начало выбора какого-то поля и снова выгрузил списком значение ЭтотОбъект... сравнил - и увидел, что перед открытием значения Субконто1, Субконто2 и Субконто3 имеют значение Неопределено, а потом - значения пустых ссылок разных типов.
Выяснил, что ТребованиеНакладная создаётся автоматически при проведении ОтчетаПроизводстваЗаСмену, соответствующий код нашёл через события. После заполнения счета затрат добавил такой код:
Вопрос был решён.
Коротко предыстория сути проблемы: при открытии ТребованияНакладной попытка распечатать приводила к требованию перепровести документ, что ломало все домики учёта (время проведения документа, ответственный и так далее)...
Выяснил, что проблему вызывало "дозаполнение" документа при открытии, что приводило к установке флага Модифицированности и вполне логичному требованию провести документ перед печатью.
Перехватил в конфигураторе перед открытием ТребованияНакладной значение ЭтотОбъект (Shift+F9), выгрузил его списком, потом перехватил начало выбора какого-то поля и снова выгрузил списком значение ЭтотОбъект... сравнил - и увидел, что перед открытием значения Субконто1, Субконто2 и Субконто3 имеют значение Неопределено, а потом - значения пустых ссылок разных типов.
Выяснил, что ТребованиеНакладная создаётся автоматически при проведении ОтчетаПроизводстваЗаСмену, соответствующий код нашёл через события. После заполнения счета затрат добавил такой код:
Для й = 1 По НоваяСтрока.СчетЗатрат.ВидыСубконто.Количество() Цикл
НоваяСтрока["Субконто" + й] = НоваяСтрока.СчетЗатрат.ВидыСубконто[й-1].ВидСубконто.ТипЗначения.ПривестиЗначение();
КонецЦикла;
Вопрос был решён.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот