Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 2

Notice: Use of undefined constant DOCUMENT_ROOT - assumed 'DOCUMENT_ROOT' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 5

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 5

Notice: Use of undefined constant DOCUMENT_ROOT - assumed 'DOCUMENT_ROOT' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 11

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 11

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 28

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 28

Notice: Use of undefined constant REQUEST_URI - assumed 'REQUEST_URI' in /var/www/www-root/data/www/sound-talk.ru/index.php on line 28

Notice: Undefined variable: flag in /var/www/www-root/data/www/sound-talk.ru/index.php on line 28

Notice: Undefined variable: adsense7 in /var/www/www-root/data/www/sound-talk.ru/index.php on line 39

Notice: Undefined variable: adsense6 in /var/www/www-root/data/www/sound-talk.ru/index.php on line 40
Программно добавить колонку в динамический список 1с. Программно изменить динамический список на форме #811050

Работа с динамическим списком в 1С 8.3 (8.2). Программно добавить колонку в динамический список 1с


Динамический список в 1С 8.3 и 8.2 в управляемых формах

Наконец-то осуществилась мечта любого «семерошника». Как часто пользователи программы 7.7 просили сделать нормальный подбор номенклатуры. Чтобы и остатки можно было видеть, и цены, и установить фильтры. Приходилось придумывать разные хитрости, вплоть до написания внешних компонентов. В 1С 8.2  появились динамические списки. Предлагаю рассмотреть, что это такое и что они нам могут дать в 1С 8.3.

Создание формы выбора

За основу возьмем некую тестовую конфигурацию 1С:»Бухгалтерия предприятия 3.0″. Не будем сейчас делать подбор, просто в справочнике «Номенклатура» добавим еще одну форму выбора и сделаем ее временно основной:

создание нового динамического списка 1с 8.3

При создании система по умолчанию добавит на форму табличное поле с типом «Динамический список».

Зайдем в его свойства и посмотрим, что там.

В первую очередь нас интересует флажок «Произвольный запрос». Он-то и откроет нам все преимущества динамического списка. У нас появится возможность написать собственный запрос, причем с параметрами. Устанавливаем флажок и нажимаем ссылку «Открыть»:

настройки динамического списка

Получите 267 видеоуроков по 1С бесплатно:

Откроется окно с уже готовым кодом на языке запросов. Пока что там просто перечислены все поля справочника «Номенклатура».

Как видим, имеется кнопка вызова «Конструктора запроса» и флажок, который дает возможность динамически изменять содержимое списка. То есть когда другой пользователь меняет что-то в справочнике, в нашем списке это тоже изменится. Кроме того, имеется закладка «Настройки», но ее мы коснемся позже.

Собственный запрос в динамическом списке

Сначала создадим нужный нам запрос с остатками и ценами. Примерно так:

запрос в динамическом списке 1с 8.3

Закладка «Настройки»

И вот теперь самое вкусное! Переходим на закладку «Настройки». И сразу видим, что на первой вкладке мы можем делать любые отборы по любому полю в запросе:

настройка динамического списка 1с 8.3

Программная установка параметров запроса в динамическом списке 1С 8.3

Не забываем, что в запросе у нас присутствуют два параметра: «Период» и «Тип цен». Мы должны передать их в запрос, иначе будет ошибка.

Пропишем эти параметры в параметрах формы, а в модуле формы добавим следующие строки:

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

Значения параметров можно передать из объекта, откуда вызывается форма, либо другие, установленные по умолчанию.

Далее на форму с «Динамическим списком» можно добавить таблицу значений, куда будут при двойном клике передаваться строки с выбранным товаром и затем переноситься в документ.

Также на форму можно добавить флажок «Запрашивать количество».

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

programmist1s.ru

1С. Программное создание динамического списка

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

Задача

Считаем, что есть типовая форма списка номенклатуры с динамическим списком. На форму необходимо добавить страницы: на первой выводить типовой список, а на второй список номенклатуры и данные РС «Данные для обработки». На текущий момент форма выглядит так:Программное создание динамического списка

Решение

План работ следующий:

  1. Создать страницы на форме;
  2. Переместить типовой динамический список на нужную страницу;
  3. Создать динамический список и вывести его на нужную страницу.

Далее будет показан код по логическим блокам, в конце статьи будет представлен итоговый код

Создание страниц

Собственно создадим группу с видом «Страницы», и в нее добавим две группы с видом «Страница»

Страницы = Элементы.Добавить("Страницы", Тип("ГруппаФормы"), ЭтаФорма); Страницы.Вид = ВидГруппыФормы.Страницы; Страницы.Заголовок = "Страницы"; Страница_1 = Элементы.Добавить("Страница_1", Тип("ГруппаФормы"), Страницы); Страница_1.Вид = ВидГруппыФормы.Страница; Страница_1.Заголовок = "Страница 1"; Страница_2 = Элементы.Добавить("Страница_2", Тип("ГруппаФормы"), Страницы); Страница_2.Вид = ВидГруппыФормы.Страница; Страница_2.Заголовок = "Страница 2";

Программное формирование реквизитов и элементов формы можно в статье 1С. Программное добавление и удаление реквизитов формы

Перемещение элементов формы

Для перемещения типового динамического списка воспользуемся методом коллекции элементов формы Переместить()

Элементы.Переместить(Элементы.Список, Страница_1);

Программное создание динамического списка

Добавляем реквизит формы с типом Динамический список и определяем основные свойства.

// Создадим реквизит формы динамическог списка ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Список_Альтернативный", Новый ОписаниеТипов("ДинамическийСписок"))); ИзменитьРеквизиты(ДобавляемыеРеквизиты); // Опишем параметры динамического списка ЭтаФорма.Список_Альтернативный.ПроизвольныйЗапрос = Истина; ЭтаФорма.Список_Альтернативный.ТекстЗапроса = "ВЫБРАТЬ | Спр_Номенклатура.Ссылка КАК Ссылка, | Спр_Номенклатура.Код КАК Код, | Спр_Номенклатура.Наименование КАК Наименование, | Спр_Номенклатура.ПометкаУдаления КАК ПометкаУдаления, | Спр_Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, | ЕСТЬNULL(ДанныеДляОбработки.Обработан, ЛОЖЬ) КАК Обработан, | ЕСТЬNULL(ДанныеДляОбработки.ОшибкаПриОбработке, ЛОЖЬ) КАК ОшибкаПриОбработке |ИЗ | Справочник.Номенклатура КАК Спр_Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеДляОбработки КАК ДанныеДляОбработки | ПО (ДанныеДляОбработки.Номенклатура = Спр_Номенклатура.Ссылка)"; ЭтаФорма.Список_Альтернативный.ОсновнаяТаблица = "Справочник.Номенклатура";

Теперь создадим элементы формы относящиеся к динамическому списку

//Создание элементов формы эл_Список = Элементы.Добавить("Список_Альтернативный", Тип("ТаблицаФормы"), Страница_2); эл_Список.ПутьКДанным = "Список_Альтернативный"; эл_Список.Отображение = ОтображениеТаблицы.Список; эл_Список.ПоложениеУправленияПоиском = ПоложениеУправленияПоиском.Нет; эл_Список.ПоложениеУправленияПоиском = ПоложениеУправленияПоиском.Нет; эл_Список.ПоложениеСостоянияПросмотра = ПоложениеСостоянияПросмотра.Нет; эл_Список.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Нет; эл_Список.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; НоваяКолонка = Элементы.Добавить("Список_Альт_Ссылка", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Ссылка"; НоваяКолонка.Видимость = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_ПометкаУдаления", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.ПометкаУдаления"; НоваяКолонка.Видимость = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_Код", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Код"; НоваяКолонка = Элементы.Добавить("Список_Альт_Наименование", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Наименование"; НоваяКолонка.Ширина = 20; НоваяКолонка.РастягиватьПоГоризонтали = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_Обработан", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Обработан"; НоваяКолонка.Вид = ВидПоляФормы.ПолеФлажка; НоваяКолонка = Элементы.Добавить("Список_Альт_ОшибкаПриОбработке", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.ОшибкаПриОбработке"; НоваяКолонка.Заголовок = "Ошибка"; НоваяКолонка.Вид = ВидПоляФормы.ПолеФлажка; НоваяКолонка = Элементы.Добавить("Список_Альт_НоменклатурнаяГруппа", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.НоменклатурнаяГруппа";

Небольшая хитрость

Как видно из кода, на форме не отображается поле «Ссылка», если на клиенте программно обратиться к текущим данным нашего списка, то свойства ссылка в полученной коллекции не будет. Для предотвращения такой ситуации необходимо указать обязательность использования поля, тогда свойство будет передаваться на клиент всегда

ЭтаФорма.Список_Альтернативный.УстановитьОбязательноеИспользование("Ссылка", Истина);

Результат

Теперь проверяем, что у нас получилось. Первая страница, на которую мы перенесли типовой список

Программное создание динамического списка

Вторая страница с нашим сформированным списком

Программное создание динамического списка

И результирующий код:

#Область ОбработчикиСобытийформы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) #Область СозданиеСтраниц Страницы = Элементы.Добавить("Страницы", Тип("ГруппаФормы"), ЭтаФорма); Страницы.Вид = ВидГруппыФормы.Страницы; Страницы.Заголовок = "Страницы"; Страница_1 = Элементы.Добавить("Страница_1", Тип("ГруппаФормы"), Страницы); Страница_1.Вид = ВидГруппыФормы.Страница; Страница_1.Заголовок = "Страница 1"; Страница_2 = Элементы.Добавить("Страница_2", Тип("ГруппаФормы"), Страницы); Страница_2.Вид = ВидГруппыФормы.Страница; Страница_2.Заголовок = "Страница 2"; #КонецОбласти #Область ПеремещениеТиповогоДинамическогоСписка Элементы.Переместить(Элементы.Список, Страница_1); #КонецОбласти #Область СозданиеДинамическогоСписка // Создадим реквизит формы динамическог списка ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Список_Альтернативный", Новый ОписаниеТипов("ДинамическийСписок"))); ИзменитьРеквизиты(ДобавляемыеРеквизиты); // Опишем параметры динамического списка ЭтаФорма.Список_Альтернативный.ПроизвольныйЗапрос = Истина; ЭтаФорма.Список_Альтернативный.ТекстЗапроса = "ВЫБРАТЬ | Спр_Номенклатура.Ссылка КАК Ссылка, | Спр_Номенклатура.Код КАК Код, | Спр_Номенклатура.Наименование КАК Наименование, | Спр_Номенклатура.ПометкаУдаления КАК ПометкаУдаления, | Спр_Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, | ЕСТЬNULL(ДанныеДляОбработки.Обработан, ЛОЖЬ) КАК Обработан, | ЕСТЬNULL(ДанныеДляОбработки.ОшибкаПриОбработке, ЛОЖЬ) КАК ОшибкаПриОбработке |ИЗ | Справочник.Номенклатура КАК Спр_Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеДляОбработки КАК ДанныеДляОбработки | ПО (ДанныеДляОбработки.Номенклатура = Спр_Номенклатура.Ссылка)"; ЭтаФорма.Список_Альтернативный.ОсновнаяТаблица = "Справочник.Номенклатура"; // Установка обязательного использования ЭтаФорма.Список_Альтернативный.УстановитьОбязательноеИспользование("Ссылка", Истина); //Создание элементов формы эл_Список = Элементы.Добавить("Список_Альтернативный", Тип("ТаблицаФормы"), Страница_2); эл_Список.ПутьКДанным = "Список_Альтернативный"; эл_Список.Отображение = ОтображениеТаблицы.Список; эл_Список.ПоложениеУправленияПоиском = ПоложениеУправленияПоиском.Нет; эл_Список.ПоложениеУправленияПоиском = ПоложениеУправленияПоиском.Нет; эл_Список.ПоложениеСостоянияПросмотра = ПоложениеСостоянияПросмотра.Нет; эл_Список.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Нет; эл_Список.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; НоваяКолонка = Элементы.Добавить("Список_Альт_Ссылка", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Ссылка"; НоваяКолонка.Видимость = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_ПометкаУдаления", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.ПометкаУдаления"; НоваяКолонка.Видимость = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_Код", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Код"; НоваяКолонка = Элементы.Добавить("Список_Альт_Наименование", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Наименование"; НоваяКолонка.Ширина = 20; НоваяКолонка.РастягиватьПоГоризонтали = Ложь; НоваяКолонка = Элементы.Добавить("Список_Альт_Обработан", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.Обработан"; НоваяКолонка.Вид = ВидПоляФормы.ПолеФлажка; НоваяКолонка = Элементы.Добавить("Список_Альт_ОшибкаПриОбработке", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.ОшибкаПриОбработке"; НоваяКолонка.Заголовок = "Ошибка"; НоваяКолонка.Вид = ВидПоляФормы.ПолеФлажка; НоваяКолонка = Элементы.Добавить("Список_Альт_НоменклатурнаяГруппа", Тип("ПолеФормы"), эл_Список); НоваяКолонка.ПутьКДанным = "Список_Альтернативный.НоменклатурнаяГруппа"; #КонецОбласти КонецПроцедуры #КонецОбласти

guesto.ru

Программно изменить динамический список на форме #811050

Добрый день. Ситуация такая - клиент в форме подбора номенклатуры захотел увидеть основную ячейку хранения номенклатуры. Список номенклатуры в форме - динамический список, запрос по которому формируется программно. С запросом проблем нет - в результирующую таблицу ячейка попадает. Программно добавляю колонку таблицы, но указывая путь к данным как "СписокНоменклатура.Ячейка" 1С колонку не выводит по тому как нету этой колонки. Реквизит динамический список заведен в реквизитах формы . Как программно добавить в него еще одну колонку?

просто добавить ее в запросе - никак?

В запрос все добавлено - в таблице на форме не появляется. Подозреваю, что колонка (которую я добавляю) не видит путь к данным.

На платформе 8.3.11 в режиме совместимости 8.3.10 (и на платформе 8.3.10 без режима совместимости) программное изменение запроса динамического списка отрабатывает некорректно. А так нужно элемент формы ещё добавить, конечно. И в нем указать путь к данным.

все отрабатывает корректно - а вот элемент формы не появляется.

В какой процедуре всё происходит?

Обработка подбора в документ продажи. Меняется запрос и добавляется реквизит при создании на сервере

Тогда скажи релиз платформы и режим совместимости

Поймал отладчиком при активизации строки - уже нет моего реквизита - где то еще меняется ... будем искать

Всё же сообщи релиз.

Как клещами. А режим совместимости? )

Не использовать

ХАААА !!! кажется нашел ...

Перечитай пост . Текст запроса устанавливается без ошибок, но потом "ТекущиеДанные" выдает не все поля запроса.

Действительно нашел - все дело в том, что на форме этой обработки есть два списка - стандартный и расширенный (находятся они в одном и том же месте). Менял я стандартный, а программа (из-за установленной галки) использовала расширенный. Все нормально - и запрос исправлен корректно и результаты в таблице есть и реквизиты добавились правильно все изменения только программные.

Tags: 1С 8

avprog.ru