Версия для печати темы (https://pro1c.org.ua/index.php?s=3df82b45fc2b221b2e7a5e2a7ebf22bb&showtopic=67068)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Динамический список и странное поведение
Автор: Andry.Boris 31.08.22, 17:05
День добрый!
Прошу помощи у сообщества.
Решил модифицировать список номенклатуры для удобства работы,
чтобы можно было видеть аналоги номенклатуры и картинки
прикрепленные к номенклатуре, на одной общей форме.
Для начала, перенес список номенклатуры в расширение.
Добавил на форму ниже "Списка" номенклатуры вывод "Аналогов" номенклатуры (как дин. список).
Связал по ключевому полю через УстановитьЗначениеПараметра дин. списка.
Пока все работает нормально, при выборе в "Списке" номенклатуры ниже в "Аналогах" отображаются аналоги.
Решил добавить еще на форму вывод картинок слева на форме.
Добавил страницу и создал там поле ввода с видом "Поле картинки".
Количество картинок генерируется автоматически по наличию вложенных картинок текущего элемента списка.
и вот тут начитается полная чехарда, после заполнения картинок, пропадает содержимое основного дин. списка "Список". Заметил по отладчику, при заполнении картинок постоянно обновляется основной дин. списка "Список". В общем не могу понять почему постоянно при заполнение картинок срабатывает событие "СписокПриАктивизацииСтрокиПосле". Может кто сталкивался с таким поведением? Почему так происходит или как правильно выводить картинки? И к тому же постоянно теряется фокус текущей строки в дин. списке "Список".
Автор: Vofka 31.08.22, 17:17
Цитата(Andry.Boris @ 31.08.22, 18:05)
Заметил по отладчику, при заполнении картинок постоянно обновляется основной дин. списка "Список"
Предполагаю, что вот эти все заполнения вы начинаете выполнять в обработчике события ПриАктивацииСтроки. Если так, то в нем нельзя делать вызовов к процедурам/функциям с директивой
НаСервере. "Нельзя" не означает, что это невозможно сделать, это означает, что могут быть какие-то неизвестные последствия. Возможно то, что вы наблюдаете, одно из таких последствий.
Автор: Andry.Boris 31.08.22, 18:03
Vofka @ Сегодня, 18:17
,
Ну как бы так и есть, на событие СписокПриАктивизацииСтрокиПосле идет обращение к процедурам НаСервере
А как по другому реализовать отбор и заполнение? На самом НаКлиенте
все не получиться реализовать...
процедура УстановитьЗначениеПараметра доступна только на сервере...
&НаКлиенте
Процедура СписокПриАктивизацииСтрокиПосле(Элемент)
Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда
ТекущаяСтрока = Элементы.Список.ТекущаяСтрока;
УстановитьПараметрыОтбораАналогов(ТекущаяСтрока);
Если ТекущаяСтрока <> ТекущаяНоменклатураСписка Тогда
ТекущаяНоменклатураСписка = ТекущаяСтрока;
СформироватьИзображения(ТекущаяНоменклатураСписка);
Элементы.Список.ТекущаяСтрока = ТекущаяНоменклатураСписка;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьПараметрыОтбораАналогов(ТекНоменклатура)
Аналоги.Параметры.УстановитьЗначениеПараметра("Номенклатура", ТекНоменклатура);
КонецПроцедуры
&НаСервере
Процедура СформироватьИзображения(ТекНоменклатура)
Попытка
// Отключаем ненужные картинки
Для ТекНомер=0 По МаксимальноеКоличествоКартинокНаФорме Цикл
ОтобразитьКартинку(ТекНомер,,,Ложь);
КонецЦикла;
....
Автор: daveal 31.08.22, 20:06
В таком случае нужно вызывать код не напрямую, а через ПодключитьОбработчикОжидания с задержкой в 0.1 секунды.
В большинстве случаев это помогает. В типовой на упр. формах должно быть полно примеров такого
Автор: sava1 31.08.22, 20:21
а еще есть ПриПолученииДанных.......
Автор: Vofka 01.09.22, 8:50
Andry.Boris, https://pro1c.org.ua/redirect.php?https://infostart.ru/1c/articles/1225834/ может будет интересно.
Цитата(sava1 @ 31.08.22, 21:21)
а еще есть ПриПолученииДанных.......
В управляемых формах разве такое есть?
Автор: sava1 01.09.22, 10:11
Vofka @ Сегодня, 9:50
,
воощето да - ПриПолученииДанныхНаСервере
Автор: Andry.Boris 01.09.22, 15:45
Спасибо всем за подсказки.
Разобрался немного. Убрал серверные вызовы. Перенес все на клиента.
Подключил ПодключитьОбработчикОжидания.
Теперь все летает и не виснет. Код привожу ниже, может кому пригодиться
Единственное, что настораживает это двойной вызов процедуры ОформлениеФормы если есть изображения для вывода.
Если нет изображений для вывода, тогда один раз вызывается.
Код&НаКлиенте
Перем ТекСтрокаНоменклатуры; // Копия - Элементы.Список.ТекущаяСтрока;
&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Адрес заглушки при отсутствии картинки
ДвоичныеДанные = БиблиотекаКартинок.НетИзображения.ПолучитьДвоичныеДанные();
АдресПустойКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные,ЭтаФорма.УникальныйИдентификатор);
// Задаем максимальное количество картинок на форме чтобы не перегружать форму элементами
МаксКолвоКартинокНаФорме = 20;
//Определяем массив добавляемых реквизитов для картинок
ДобавляемыеРеквизиты = Новый Массив;
Для Счетчик=0 По МаксКолвоКартинокНаФорме Цикл
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("КартинкаНоменклатуры"+Строка(Счетчик),Новый ОписаниеТипов("Строка")));
КонецЦикла;
//Применяем реквизиты
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//Отключем страницу с изображениями
Элементы.СтраницаИзображений.Видимость=Ложь;
//Создаем элементы формы будущих картинок
Для Счетчик=0 По МаксКолвоКартинокНаФорме Цикл
СоздатьКартинкуНаСервере(Отказ,Счетчик);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СоздатьКартинкуНаСервере(Отказ,ТекНомер=0);
Попытка
//Создаем элемент формы шаблона картинки
ИмяКартинки = "КартинкаНоменклатуры"+Строка(ТекНомер);
НовыйЭлемент = Элементы.Добавить(ИмяКартинки, Тип("ПолеФормы"),Элементы.СтраницаИзображений);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеКартинки;
НовыйЭлемент.РазмерКартинки = РазмерКартинки.АвтоРазмер;
НовыйЭлемент.Ширина = 24;
НовыйЭлемент.МаксимальнаяШирина = 24;
НовыйЭлемент.Высота = 9;
НовыйЭлемент.МаксимальнаяВысота = 9;
НовыйЭлемент.РастягиватьПоГоризонтали = Ложь;
НовыйЭлемент.РастягиватьПоВертикали = Ложь;
НовыйЭлемент.АвтоМаксимальнаяШирина = Ложь;
НовыйЭлемент.АвтоМаксимальнаяВысота = Ложь;
НовыйЭлемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная,1);
НовыйЭлемент.ПутьКДанным = ИмяКартинки;
Исключение
Отказ = Истина;
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура СписокПриАктивизацииСтрокиПосле(Элемент)
Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда
//Копируем текущую строку в списке
ТекСтрокаНоменклатуры = Элементы.Список.ТекущаяСтрока;
//Подключаем обработчик ожидания
ПодключитьОбработчикОжидания("ОформлениеФормы",0.1,Истина);
//Устанавливаем отбор для таблицы аналогов
Аналоги.Параметры.УстановитьЗначениеПараметра("Номенклатура", ТекСтрокаНоменклатуры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОформлениеФормы()
//Получаем структуру параметров наших картинок
Результат = ПолучитьПараметрыКартинок(ТекСтрокаНоменклатуры,МаксКолвоКартинокНаФорме,ЭтаФорма.УникальныйИдентификатор);
//Скрываем из видимости страницу с изображениями
Элементы.СтраницаИзображений.Видимость=Ложь;
Счетчик = 0;
Если Результат.Количество()=0 Тогда
//Если нет картинок, заполняем первую пустышкой
Элементы["КартинкаНоменклатуры0"].Заголовок = НСтр("ru = 'Нет изображений'; uk = 'Нема зображень'");
ЭтаФорма["КартинкаНоменклатуры0"] = АдресПустойКартинки;
Элементы["КартинкаНоменклатуры0"].Видимость = Истина;
Счетчик = Счетчик + 1;
Иначе
//Если есть картинки, заполняем все по списку
Для каждого ТекЗапись Из Результат Цикл
СсылкаНаКартинку = ТекЗапись.Значение.СсылкаНаКартинку;
СсылкаНаКартинку = ?(СсылкаНаКартинку=Неопределено,АдресПустойКартинки,СсылкаНаКартинку);
ИмяКартинкиНоменклатуры = "КартинкаНоменклатуры"+Строка(Счетчик);
ЭтаФорма[ИмяКартинкиНоменклатуры] = СсылкаНаКартинку;
Элементы[ИмяКартинкиНоменклатуры].Заголовок = ТекЗапись.Значение.Заголовок;
Элементы[ИмяКартинкиНоменклатуры].Видимость = Истина;
Счетчик = Счетчик + 1;
КонецЦикла;
КонецЕсли;
//Остальные неиспользованные картинки отключаем
Для ТекНомер=Счетчик По МаксКолвоКартинокНаФорме Цикл
ИмяКартинкиНоменклатуры = "КартинкаНоменклатуры"+Строка(ТекНомер);
Элементы[ИмяКартинкиНоменклатуры].Видимость = Ложь;
Если ЭтоАдресВременногоХранилища(ЭтаФорма[ИмяКартинкиНоменклатуры]) Тогда
УдалитьИзВременногоХранилища(ЭтаФорма[ИмяКартинкиНоменклатуры]);
КонецЕсли;
ЭтаФорма[ИмяКартинкиНоменклатуры] = "";
КонецЦикла;
//Включаем видимость страницы с изображениями
Элементы.СтраницаИзображений.Видимость=Истина;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьПараметрыКартинок(ТекНоменклатура,МаксКолвоКартинокНаФорме,УникальныйИдентификатор)
ПараметрыКартинок = Новый Структура;
//Заполняем массив номенклатурой по которой будем проверять вложения
масНоменклатуры = Новый Массив;
масНоменклатуры.Добавить(ТекНоменклатура);
//Получаем данные аналогов
Выборка = РегистрыСведений.уатАналоги.Выбрать(Новый Структура("Номенклатура",ТекНоменклатура));
Пока Выборка.Следующий() Цикл
//Если есть файлы у аналогов, добавляем в массив
масНоменклатуры.Добавить(Выборка.Аналог);
КонецЦикла;
Счетчик = 0;
Для каждого ТекНоменклатура Из масНоменклатуры Цикл
Файлы = Новый Массив;
//Получаем массив файлов вложения по каждой номенклатуре
РаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(ТекНоменклатура, Файлы);
Для каждого Файл Из Файлы Цикл //Файл.Расширение
//Фильтруем, только картинки показываем
Если Найти("*.bmp;*.gif;*.png;*.jpeg;*.tif;*.jpg;*.ico;*.wmf;*.emf",Файл.Расширение) <> 0 Тогда
Если Счетчик > МаксКолвоКартинокНаФорме Тогда
Сообщить(НСтр("ru = 'Слишком много картинок.';uk = 'Дуже багато картинок.'"));
Возврат ПараметрыКартинок;
КонецЕсли;
//Получаем ссылку на хранилище с картинкой
Попытка
ДвоичныеДанные = Новый ДвоичныеДанные(Файл.Том.ПолныйПутьWindows+Файл.ПутьКФайлу);
СсылкаНаКартинку = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
Исключение
СсылкаНаКартинку = Неопределено;
КонецПопытки;
//Формируем заголовок и записываем в параметры
Заголовок = СтрШаблон("Код: %1"+Символы.ПС+"Артикул: %2"+Символы.ПС+"%3",СокрЛП(ТекНоменклатура.Код),
СокрЛП(ТекНоменклатура.Артикул),СокрЛП(ТекНоменклатура.Ссылка));
Запись = Новый Структура("Заголовок,СсылкаНаКартинку",Заголовок,СсылкаНаКартинку);
ПараметрыКартинок.Вставить("Запись"+Формат(Счетчик,"ЧЦ=3; ЧДЦ=0; ЧН="),Запись);
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ПараметрыКартинок;
КонецФункции
Цитата(Vofka @ 01.09.22, 9:50)
Andry.Boris, https://pro1c.org.ua/redirect.php?https://infostart.ru/1c/articles/1225834/ может будет интересно.
Спасибо! Прочитал, действительно много интересного и необычного...
Автор: Andry.Boris 02.09.22, 9:14
Ниже привожу код с корректировкой.
Исключается повторный вызов процедуры ОформлениеФормы и смены текущей позиции в Списке
@Vofka - если можно убери пожалуйста текст кода в 8 и 3 сообщение, чтобы не путал
Спасибо.
Код&НаКлиенте
Перем ТекСтрокаНоменклатуры; // Копия - Элементы.Список.ТекущаяСтрока;
&НаКлиенте
Перем ОтображеннаяНоменклатура;
&НаСервере
Процедура КРАБ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Адрес заглушки при отсутствии картинки
ДвоичныеДанные = БиблиотекаКартинок.КРАБ_НетИзображения.ПолучитьДвоичныеДанные();
АдресПустойКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные,ЭтаФорма.УникальныйИдентификатор);
// Задаем максимальное количество картинок на форме чтобы не перегружать форму элементами
МаксКолвоКартинокНаФорме = 20;
//Определяем массив добавляемых реквизитов для картинок
ДобавляемыеРеквизиты = Новый Массив;
Для Счетчик=0 По МаксКолвоКартинокНаФорме Цикл
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("КартинкаНоменклатуры"+Строка(Счетчик),Новый ОписаниеТипов("Строка")));
КонецЦикла;
//Применяем реквизиты
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//Отключем страницу с изображениями
Элементы.СтраницаИзображений.Видимость=Ложь;
//Создаем элементы формы будущих картинок
Для Счетчик=0 По МаксКолвоКартинокНаФорме Цикл
СоздатьКартинкуНаСервере(Отказ,Счетчик);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СоздатьКартинкуНаСервере(Отказ,ТекНомер=0);
Попытка
//Создаем элемент формы шаблона картинки
ИмяКартинки = "КартинкаНоменклатуры"+Строка(ТекНомер);
НовыйЭлемент = Элементы.Добавить(ИмяКартинки, Тип("ПолеФормы"),Элементы.СтраницаИзображений);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеКартинки;
НовыйЭлемент.РазмерКартинки = РазмерКартинки.АвтоРазмер;
НовыйЭлемент.Ширина = 24;
НовыйЭлемент.МаксимальнаяШирина = 24;
НовыйЭлемент.Высота = 9;
НовыйЭлемент.МаксимальнаяВысота = 9;
НовыйЭлемент.РастягиватьПоГоризонтали = Ложь;
НовыйЭлемент.РастягиватьПоВертикали = Ложь;
НовыйЭлемент.АвтоМаксимальнаяШирина = Ложь;
НовыйЭлемент.АвтоМаксимальнаяВысота = Ложь;
НовыйЭлемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная,1);
НовыйЭлемент.ПутьКДанным = ИмяКартинки;
Исключение
Отказ = Истина;
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура КРАБ_СписокПриАктивизацииСтрокиПосле(Элемент)
Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда
//Копируем текущую строку в списке
ТекСтрокаНоменклатуры = Элементы.Список.ТекущаяСтрока;
//Подключаем обработчик ожидания
ПодключитьОбработчикОжидания("ОформлениеФормы",0.1,Истина);
//Устанавливаем отбор для таблицы аналогов
Аналоги.Параметры.УстановитьЗначениеПараметра("Номенклатура", ТекСтрокаНоменклатуры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОформлениеФормы()
Если ОтображеннаяНоменклатура <> ТекСтрокаНоменклатуры Тогда
//Получаем структуру параметров наших картинок
Результат = ПолучитьПараметрыКартинок(ТекСтрокаНоменклатуры,МаксКолвоКартинокНаФорме,ЭтаФорма.УникальныйИдентификатор);
//Скрываем из видимости страницу с изображениями
Элементы.СтраницаИзображений.Видимость=Ложь;
Счетчик = 0;
Если Результат.Количество()=0 Тогда
//Если нет картинок, заполняем первую пустышкой
Элементы["КартинкаНоменклатуры0"].Заголовок = НСтр("ru = 'Нет изображений'; uk = 'Нема зображень'");
ЭтаФорма["КартинкаНоменклатуры0"] = АдресПустойКартинки;
Элементы["КартинкаНоменклатуры0"].Видимость = Истина;
Элементы["КартинкаНоменклатуры0"].Подсказка = НСтр("ru = 'Нет изображений'; uk = 'Нема зображень'");
Счетчик = Счетчик + 1;
Иначе
//Если есть картинки, заполняем все по списку
Для каждого ТекЗапись Из Результат Цикл
СсылкаНаКартинку = ТекЗапись.Значение.СсылкаНаКартинку;
СсылкаНаКартинку = ?(СсылкаНаКартинку=Неопределено,АдресПустойКартинки,СсылкаНаКартинку);
ИмяКартинкиНоменклатуры = "КартинкаНоменклатуры"+Строка(Счетчик);
ЭтаФорма[ИмяКартинкиНоменклатуры] = СсылкаНаКартинку;
Элементы[ИмяКартинкиНоменклатуры].Заголовок = ТекЗапись.Значение.Заголовок;
Элементы[ИмяКартинкиНоменклатуры].Видимость = Истина;
Элементы["КартинкаНоменклатуры0"].Подсказка = ТекЗапись.Значение.Подсказка;
Счетчик = Счетчик + 1;
КонецЦикла;
КонецЕсли;
//Остальные неиспользованные картинки отключаем
Для ТекНомер=Счетчик По МаксКолвоКартинокНаФорме Цикл
ИмяКартинкиНоменклатуры = "КартинкаНоменклатуры"+Строка(ТекНомер);
Элементы[ИмяКартинкиНоменклатуры].Видимость = Ложь;
Если ЭтоАдресВременногоХранилища(ЭтаФорма[ИмяКартинкиНоменклатуры]) Тогда
УдалитьИзВременногоХранилища(ЭтаФорма[ИмяКартинкиНоменклатуры]);
КонецЕсли;
ЭтаФорма[ИмяКартинкиНоменклатуры] = "";
КонецЦикла;
//Включаем видимость страницы с изображениями
Элементы.СтраницаИзображений.Видимость=Истина;
ОтображеннаяНоменклатура = ТекСтрокаНоменклатуры;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьПараметрыКартинок(ТекНоменклатура,МаксКолвоКартинокНаФорме,УникальныйИдентификатор)
ПараметрыКартинок = Новый Структура;
//Заполняем массив номенклатурой по которой будем проверять вложения
масНоменклатуры = Новый Массив;
масНоменклатуры.Добавить(ТекНоменклатура);
//Получаем данные аналогов
Выборка = РегистрыСведений.уатАналоги.Выбрать(Новый Структура("Номенклатура",ТекНоменклатура));
Пока Выборка.Следующий() Цикл
//Если есть файлы у аналогов, добавляем в массив
масНоменклатуры.Добавить(Выборка.Аналог);
КонецЦикла;
Счетчик = 0;
Для каждого ТекЭлемент Из масНоменклатуры Цикл
Файлы = Новый Массив;
//Получаем массив файлов вложения по каждой номенклатуре
РаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(ТекЭлемент, Файлы);
Для каждого Файл Из Файлы Цикл //Файл.Расширение
//Фильтруем, только картинки показываем
Если Найти("*.bmp;*.gif;*.png;*.jpeg;*.tif;*.jpg;*.ico;*.wmf;*.emf",Файл.Расширение) <> 0 Тогда
Если Счетчик > МаксКолвоКартинокНаФорме Тогда
Сообщить(НСтр("ru = 'Слишком много картинок.';uk = 'Дуже багато картинок.'"));
Возврат ПараметрыКартинок;
КонецЕсли;
//Получаем ссылку на хранилище с картинкой
Попытка
ДвоичныеДанные = Новый ДвоичныеДанные(Файл.Том.ПолныйПутьWindows+Файл.ПутьКФайлу);
СсылкаНаКартинку = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
Исключение
СсылкаНаКартинку = Неопределено;
КонецПопытки;
//Формируем заголовок и записываем в параметры
ТекстНаименования= СокрЛП(ТекЭлемент.Ссылка);
Заголовок = СтрШаблон("Код: %1"+Символы.ПС+"Артикул: %2"+Символы.ПС+"%3",СокрЛП(ТекЭлемент.Код),
СокрЛП(ТекЭлемент.Артикул),?(СтрДлина(ТекстНаименования)>32,Лев(ТекстНаименования,32)+"...",ТекстНаименования));
Подсказка = СтрШаблон("Код: %1"+Символы.ПС+"Артикул: %2"+Символы.ПС+"%3",СокрЛП(ТекЭлемент.Код),
СокрЛП(ТекЭлемент.Артикул),СокрЛП(ТекЭлемент.Ссылка.НаименованиеПолное));
Запись = Новый Структура("Заголовок,Подсказка,СсылкаНаКартинку",Заголовок,Подсказка,СсылкаНаКартинку);
ПараметрыКартинок.Вставить("Запись"+Формат(Счетчик,"ЧЦ=3; ЧДЦ=0; ЧН="),Запись);
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ПараметрыКартинок;
КонецФункции
//Чтобы сервер не забыл об открытой форме
&НаКлиенте
Процедура КРАБ_ПриОткрытииПосле(Отказ)
ПодключитьОбработчикОжидания("ПингСервера", 30, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПингСервера()
ПингСервераНаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПингСервераНаСервере()
Жив=Истина;
КонецПроцедуры
Автор: Vofka 02.09.22, 9:20
Цитата(Andry.Boris @ 02.09.22, 10:14)
@Vofka - если можно убери пожалуйста текст кода в 8 и 3 сообщение, чтобы не путал
Та пусть для истории будет, чтобы контекст разговора не терять.
Чтобы спрятать текст под спойлер, для этого надо использовать тег [ hide ] [ /hide ]
Автор: Andry.Boris 02.09.22, 11:13
Дополню немного статью, почему терялся фокус в таблице "Список"
Ошибка была в том, что в процедуре ПолучитьПараметрыКартинок
неявно использовалась переменная ТекСтрокаНоменклатуры.
При передачи в процедуру, передается не само значение переменной, а ссылка указатель на переменную.
Тем самым программе все равно как вы назовёте в процедуре имя принимающей переменной, по факт это у вас будет сама исходная перемененная.
Ниже по коду я подсветил ошибку.
Код&НаКлиенте
Перем [highlight]ТекСтрокаНоменклатуры[/highlight]; // [highlight]Копия - Элементы.Список.ТекущаяСтрока;[/highlight]
&НаКлиенте
Процедура ОформлениеФормы()
//Получаем структуру параметров наших картинок
Результат = ПолучитьПараметрыКартинок([highlight]ТекСтрокаНоменклатуры[/highlight],МаксКолвоКартинокНаФорме,ЭтаФорма.УникальныйИдентификатор);
...
&НаСервереБезКонтекста
Функция ПолучитьПараметрыКартинок([highlight]ТекНоменклатура[/highlight],МаксКолвоКартинокНаФорме,УникальныйИдентификатор)
ПараметрыКартинок = Новый Структура;
//Заполняем массив номенклатурой по которой будем проверять вложения
масНоменклатуры = Новый Массив;
масНоменклатуры.Добавить(ТекНоменклатура);
//Получаем данные аналогов
Выборка = РегистрыСведений.уатАналоги.Выбрать(Новый Структура("Номенклатура",ТекНоменклатура));
Пока Выборка.Следующий() Цикл
//Если есть файлы у аналогов, добавляем в массив
масНоменклатуры.Добавить(Выборка.Аналог);
КонецЦикла;
Счетчик = 0;
Для каждого [highlight]ТекНоменклатура[/highlight] Из масНоменклатуры Цикл
Файлы = Новый Массив;
//Получаем массив файлов вложения по каждой номенклатуре
...
@Vofka - подправь оформление пожалуйста, а то что-то не получается...
Автор: Vofka 02.09.22, 15:57
Andry.Boris, [ hide ] без пробелов. Я с пробелами написал, потому что не отобразится иначе в тексте. Или слева под смайликами нажмите "Спрятать", оно за вас нужный тег вставит.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua