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

Хранилище

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

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



> Динамический список и странное поведение          
Andry.Boris Подменю пользователя
сообщение 31.08.22, 17:05
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Из: Запоріжжя
Спасибо сказали: 0 раз
Рейтинг: 0

День добрый!

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

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



Сообщение отредактировал Vofka - 31.08.22, 17:09

Vofka Подменю пользователя
сообщение 31.08.22, 17:17
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата(Andry.Boris @ 31.08.22, 18:05) *
Заметил по отладчику, при заполнении картинок постоянно обновляется основной дин. списка "Список"

Предполагаю, что вот эти все заполнения вы начинаете выполнять в обработчике события ПриАктивацииСтроки. Если так, то в нем нельзя делать вызовов к процедурам/функциям с директивой НаСервере. "Нельзя" не означает, что это невозможно сделать, это означает, что могут быть какие-то неизвестные последствия. Возможно то, что вы наблюдаете, одно из таких последствий.

Спасибо сказали: Andry.Boris,

Andry.Boris Подменю пользователя
сообщение 31.08.22, 18:03
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Из: Запоріжжя
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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

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


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

daveal Подменю пользователя
сообщение 31.08.22, 20:06
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 70
Из: Киев
Спасибо сказали: 25 раз
Рейтинг: 0

В таком случае нужно вызывать код не напрямую, а через ПодключитьОбработчикОжидания с задержкой в 0.1 секунды.
В большинстве случаев это помогает. В типовой на упр. формах должно быть полно примеров такого

sava1 Подменю пользователя
сообщение 31.08.22, 20:21
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

а еще есть ПриПолученииДанных.......

Vofka Подменю пользователя
сообщение 01.09.22, 8:50
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Andry.Boris, [необходимо зарегистрироваться для просмотра ссылки] может будет интересно.

Цитата(sava1 @ 31.08.22, 21:21) *
а еще есть ПриПолученииДанных.......

В управляемых формах разве такое есть?

Спасибо сказали: Andry.Boris,

sava1 Подменю пользователя
сообщение 01.09.22, 10:11
Сообщение #7

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Vofka @ Сегодня, 9:50 * ,
воощето да - ПриПолученииДанныхНаСервере

Andry.Boris Подменю пользователя
сообщение 01.09.22, 15:45
Сообщение #8

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Из: Запоріжжя
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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

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

Спасибо! Прочитал, действительно много интересного и необычного...

Сообщение отредактировал Vofka - 01.09.22, 16:56

Andry.Boris Подменю пользователя
сообщение 02.09.22, 9:14
Сообщение #9

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Из: Запоріжжя
Спасибо сказали: 0 раз
Рейтинг: 0

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

@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:19

Vofka Подменю пользователя
сообщение 02.09.22, 9:20
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата(Andry.Boris @ 02.09.22, 10:14) *
@Vofka - если можно убери пожалуйста текст кода в 8 и 3 сообщение, чтобы не путал

Та пусть для истории будет, чтобы контекст разговора не терять.
Чтобы спрятать текст под спойлер, для этого надо использовать тег [ hide ] [ /hide ]

Спасибо сказали: Andry.Boris,

Andry.Boris Подменю пользователя
сообщение 02.09.22, 11:13
Сообщение #11

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Из: Запоріжжя
Спасибо сказали: 0 раз
Рейтинг: 0

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

Код

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

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

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



@Vofka - подправь оформление пожалуйста, а то что-то не получается... wink.gif

Сообщение отредактировал Vofka - 02.09.22, 15:56

Vofka Подменю пользователя
сообщение 02.09.22, 15:57
Сообщение #12

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Andry.Boris, [ hide ] без пробелов. Я с пробелами написал, потому что не отобразится иначе в тексте. Или слева под смайликами нажмите "Спрятать", оно за вас нужный тег вставит.

Спасибо сказали: Andry.Boris,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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