Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )




>  Динамический список и странное поведение
Andry.Boris
Отправлено: 02.09.22, 11:13


Молчаливый
*

Группа: Пользователи
Сообщений: 5
Регистрация: 16.07.10
Из: Запоріжжя
Пользователь №: 3987


Дополню немного статью, почему терялся фокус в таблице "Список"
Ошибка была в том, что в процедуре ПолучитьПараметрыКартинок
неявно использовалась переменная ТекСтрокаНоменклатуры.
При передачи в процедуру, передается не само значение переменной, а ссылка указатель на переменную.
Тем самым программе все равно как вы назовёте в процедуре имя принимающей переменной, по факт это у вас будет сама исходная перемененная.
Ниже по коду я подсветил ошибку.

Код

&НаКлиенте
Перем [highlight]ТекСтрокаНоменклатуры[/highlight]; // [highlight]Копия - Элементы.Список.ТекущаяСтрока;[/highlight]

&НаКлиенте
Процедура ОформлениеФормы()
  //Получаем структуру параметров наших картинок
  Результат = ПолучитьПараметрыКартинок([highlight]ТекСтрокаНоменклатуры[/highlight],МаксКолвоКартинокНаФорме,ЭтаФорма.УникальныйИдентификатор);
...

&НаСервереБезКонтекста
Функция ПолучитьПараметрыКартинок([highlight]ТекНоменклатура[/highlight],МаксКолвоКартинокНаФорме,УникальныйИдентификатор)
  ПараметрыКартинок = Новый Структура;
  //Заполняем массив номенклатурой по которой будем проверять вложения
  масНоменклатуры = Новый Массив;
  масНоменклатуры.Добавить(ТекНоменклатура);
  //Получаем данные аналогов
  Выборка = РегистрыСведений.уатАналоги.Выбрать(Новый Структура("Номенклатура",ТекНоменклатура));
  Пока Выборка.Следующий() Цикл
    //Если есть файлы у аналогов, добавляем в массив
    масНоменклатуры.Добавить(Выборка.Аналог);
  КонецЦикла;
  Счетчик = 0;
  Для каждого [highlight]ТекНоменклатура[/highlight] Из масНоменклатуры Цикл
    Файлы = Новый Массив;
    //Получаем массив файлов вложения по каждой номенклатуре
...



@Vofka - подправь оформление пожалуйста, а то что-то не получается... wink.gif
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #176265 · Ответов: 11 · Просмотров: 4167
 

>  Динамический список и странное поведение
Andry.Boris
Отправлено: 02.09.22, 9:14


Молчаливый
*

Группа: Пользователи
Сообщений: 5
Регистрация: 16.07.10
Из: Запоріжжя
Пользователь №: 3987


Ниже привожу код с корректировкой.
Исключается повторный вызов процедуры ОформлениеФормы и смены текущей позиции в Списке

@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, Ложь);
КонецПроцедуры

&НаКлиенте
Процедура ПингСервера()
    ПингСервераНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПингСервераНаСервере()
    Жив=Истина;
КонецПроцедуры

  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #176261 · Ответов: 11 · Просмотров: 4167
 

>  Динамический список и странное поведение
Andry.Boris
Отправлено: 01.09.22, 15:45


Молчаливый
*

Группа: Пользователи
Сообщений: 5
Регистрация: 16.07.10
Из: Запоріжжя
Пользователь №: 3987


Спасибо всем за подсказки.
Разобрался немного. Убрал серверные вызовы. Перенес все на клиента.
Подключил ПодключитьОбработчикОжидания.
Теперь все летает и не виснет. Код привожу ниже, может кому пригодиться

Единственное, что настораживает это двойной вызов процедуры ОформлениеФормы если есть изображения для вывода.
Если нет изображений для вывода, тогда один раз вызывается.

Код
&НаКлиенте
Перем ТекСтрокаНоменклатуры; // Копия - Элементы.Список.ТекущаяСтрока;

&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
  // Адрес заглушки при отсутствии картинки
  ДвоичныеДанные = БиблиотекаКартинок.НетИзображения.ПолучитьДвоичныеДанные();
  АдресПустойКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные,ЭтаФорма.УникальныйИдентификатор);
  // Задаем максимальное количество картинок на форме чтобы не перегружать форму элементами
  МаксКолвоКартинокНаФорме = 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, вот может будет интересно.

Спасибо! Прочитал, действительно много интересного и необычного...
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #176259 · Ответов: 11 · Просмотров: 4167
 

>  Динамический список и странное поведение
Andry.Boris
Отправлено: 31.08.22, 18:03


Молчаливый
*

Группа: Пользователи
Сообщений: 5
Регистрация: 16.07.10
Из: Запоріжжя
Пользователь №: 3987


Vofka @ Сегодня, 18:17 * ,

Ну как бы так и есть, на событие СписокПриАктивизацииСтрокиПосле идет обращение к процедурам НаСервере
А как по другому реализовать отбор и заполнение? На самом НаКлиенте
все не получиться реализовать...
процедура УстановитьЗначениеПараметра доступна только на сервере...

&НаКлиенте
Процедура СписокПриАктивизацииСтрокиПосле(Элемент)
  Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда
    ТекущаяСтрока = Элементы.Список.ТекущаяСтрока;
    УстановитьПараметрыОтбораАналогов(ТекущаяСтрока);    
    Если ТекущаяСтрока <> ТекущаяНоменклатураСписка Тогда
      ТекущаяНоменклатураСписка = ТекущаяСтрока;
      СформироватьИзображения(ТекущаяНоменклатураСписка);
      Элементы.Список.ТекущаяСтрока = ТекущаяНоменклатураСписка;
    КонецЕсли;
  КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура УстановитьПараметрыОтбораАналогов(ТекНоменклатура)
  Аналоги.Параметры.УстановитьЗначениеПараметра("Номенклатура", ТекНоменклатура);
КонецПроцедуры


&НаСервере
Процедура СформироватьИзображения(ТекНоменклатура)
  Попытка
    // Отключаем ненужные картинки
    Для ТекНомер=0 По МаксимальноеКоличествоКартинокНаФорме Цикл
      ОтобразитьКартинку(ТекНомер,,,Ложь);
    КонецЦикла;
....
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #176250 · Ответов: 11 · Просмотров: 4167
 

>  Динамический список и странное поведение
Andry.Boris
Отправлено: 31.08.22, 17:05


Молчаливый
*

Группа: Пользователи
Сообщений: 5
Регистрация: 16.07.10
Из: Запоріжжя
Пользователь №: 3987


День добрый!

Прошу помощи у сообщества.

Решил модифицировать список номенклатуры для удобства работы,
чтобы можно было видеть аналоги номенклатуры и картинки
прикрепленные к номенклатуре, на одной общей форме.
Для начала, перенес список номенклатуры в расширение.
Добавил на форму ниже "Списка" номенклатуры вывод "Аналогов" номенклатуры (как дин. список).
Связал по ключевому полю через УстановитьЗначениеПараметра дин. списка.
Пока все работает нормально, при выборе в "Списке" номенклатуры ниже в "Аналогах" отображаются аналоги.
Решил добавить еще на форму вывод картинок слева на форме.
Добавил страницу и создал там поле ввода с видом "Поле картинки".
Количество картинок генерируется автоматически по наличию вложенных картинок текущего элемента списка.
и вот тут начитается полная чехарда, после заполнения картинок, пропадает содержимое основного дин. списка "Список". Заметил по отладчику, при заполнении картинок постоянно обновляется основной дин. списка "Список". В общем не могу понять почему постоянно при заполнение картинок срабатывает событие "СписокПриАктивизацииСтрокиПосле". Может кто сталкивался с таким поведением? Почему так происходит или как правильно выводить картинки? И к тому же постоянно теряется фокус текущей строки в дин. списке "Список".

  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #176247 · Ответов: 11 · Просмотров: 4167
 


Новые сообщения  Открытая тема (есть новые ответы)
Опрос  Опрос (есть новые голоса)
Нет новых сообщений  Открытая тема (нет новых ответов)
Нет новых голосов  Опрос (нет новых голосов)
Популярная тема  Горячая тема (есть новые ответы)
Закрыта  Закрытая тема
Нет новых  Горячая тема (нет новых ответов) Перемещена  Тема перемещена
 

RSS Текстовая версия Сейчас: 24.04.24, 16:06
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!