Как настроить подбор в 1с. Установка цен номенклатуры

В данной статье рассматривается технология реализации подбора на платформе 1С 8.2. Статья не претендует на академизм, просто столкнувшись с рядом проблем и не нашедшим «правильной» методологии решения (возможно плохо искал), решил пройти этот путь самостоятельно, естественно пользуясь различными источниками. В основном я опираюсь на материалы мастер-групп Базового курса «Профессиональное программирование в 1С» Евгения Гилева и Насипова Фарита, участником которого я являюсь, а также соответствующей литературы (М.Г. Радченко, Е.Ю. Хрусталева Практическое пособие разработчика).

Итак, предметная область: компания занимается оптовой торговлей товарами имеющими срок годности, который относится к серии, а та в свою очередь принадлежит конкретному товару. Товары поступают на разные склады. Задача: реализовать удобное заполнение табличной части расходного документа. Решение: необходимо реализовать форму подбора, обеспечивающею просмотр остатков товара по срокам годности, возможность выбора соответствующих позиций и последующий перенос в табличную часть документа. Задачи такого плана встречаются в 5 части сборника задач к подготовке экзамена по Специалисту.

Реализация. Создаем форму произвольного типа для документа Продажа товаров. Можно конечно создать общую форму, но в данной ситуации выбираем то, что поближе. На форме создаем реквизиты:
Склад - тип СправочникиСсылка.Склады
Товары - Динамический список, в свойствах ставим галочку произвольный запрос.
Выбор - таблица значений (колонки Товар, Серия - тип ссылки на соответствующие справочники, срок годности, количество - дата, число).

Настраиваем запрос для реквизита Товары. Здесь по идее все просто с помощью конструктора берем два справочника и виртуальную таблицу Остатков регистра Остатки товара. Если нужно видеть весь товар, то используем левое соединение Товаров с остальными источниками, если только с остатками, то полное соединение с регистром:
Код 1C v 8.2 УП ВЫБРАТЬ

Серии.СрокГодности,

ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0) КАК Количество

Справочник.Товары КАК Товары

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Серии КАК Серии

ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки(, Склад = &Склад) КАК ТоварыНаСкладеОстатки

ПО (ТоварыНаСкладеОстатки.Товар = Товары.Ссылка)

УПОРЯДОЧИТЬ ПО

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

И так, возвращаемся в нормальное русло решение задачи.

Для того чтобы открыть созданную форму подбора, в управляемой форме документы Продажа товара создаем команду подбор, размещаем на форме о генерируем обработчик, в котором нам необходимо открыть форму. Так как форма должна обеспечивать множественный выбор и отбор по складу, то создаем структуру параметров формы. И открываем форму соответствующей командой.
Код 1C v 8.2 УП
&НаКлиенте

Процедура Подбор(Команда)

ПараметрыПодбора = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор, Склад", Ложь, Истина, Объект.Склад);

ОткрытьФорму("Документ.ПродажаТоваров.Форма.ФормаПодбора", ПараметрыПодбора, Элементы.Товары);

КонецПроцедуры
Соответственно в форме подбора при создании заполняем параметр запроса склад из параметров формы:
Код 1C v 8.2 УП &НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Товары.Параметры.УстановитьЗначениеПараметра("Склад",Параметры.Склад);

Склад = Параметры.Склад;

КонецПроцедуры
Теперь необходимо реализовать функционал формы подбора. При выборе соответствующей строки она должна переносится в таблицу значений, так же должен работать механизм перетаскивания. Для решения первой задачи необходимо создать обработчик события Выбор нашего динамического списка.
Код 1C v 8.2 УП &НаКлиенте

Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

Для каждого НомерСтроки Из ВыбраннаяСтрока Цикл

ТекСтрока = Элемент.ДанныеСтроки(НомерСтроки);

Строка.Количество = 1;

Пока Строка.Количество > ТекСтрока.Количество Цикл

КонецЦикла;

КонецЕсли;

КонецЦикла;

КонецПроцедуры
В нем имеется параметр ВыбраннаяСтрока представляющий собой массив, элементами которого являются номера строк списка Товары. В цикле проверяем не дублируются ли выбранные строки и запрашивается количество.

Для реализации перетаскивания необходимо проверить настройку следующих параметров: Для таблицы Товары - РазрешитьНачалоПеретаскивания, для Выбранные товары - РазрешитьПеретаскивание.

Так же необходимо создать обработчик события Перетаскивание для элемента формы ВыбранныеТовары.
Код 1C v 8.2 УП &НаКлиенте

Процедура ВыбранныеТоварыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)

Для каждого НомерСтроки Из ПараметрыПеретаскивания.Значение Цикл

ТекСтрока = Элементы.Товары.ДанныеСтроки(НомерСтроки);

Поиск = Новый Структура("Товар, Серия",ТекСтрока.Товар,ТекСтрока.Серия);

МассивСтрок = ВыбранныеТовары.НайтиСтроки(Поиск);

Если МассивСтрок.Количество() = 0 Тогда

Строка = ВыбранныеТовары.Добавить();

Строка.Товар = ТекСтрока.Товар;

Строка.Серия = ТекСтрока.Серия;

Строка.СрокГодности = ТекСтрока.СрокГодности;

Строка.Количество = 1;

ВвестиЧисло(Строка.Количество, "Введите количество");

Пока Строка.Количество > ТекСтрока.Количество Цикл

ВвестиЧисло(Строка.Количество, "Введите верное количество!");

КонецЦикла;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Так как код обработчика похож на предыдущий, то для оптимизации можно создать процедуры и вызывать ее из обоих обработчиков.

На рисунке приведен внешний вид формы подбора:

Для завершения подбора создана команда формы, с обработчиком, выполняющим оповещение о выборе:
Код 1C v 8.2 УП &НаКлиенте

Процедура Перенести(Команда)

ОповеститьОВыборе(ВыбранныеТовары);

Закрыть();

КонецПроцедуры
Соответственно, в форме документа реализован обработчик события ОбработкаВыбора:
Код 1C v 8.2 УП &НаКлиенте

Процедура ТоварыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

Если ВыбранноеЗначение.Количество() > 0 И Объект.Товары.Количество() > 0 Тогда

Режим = РежимДиалогаВопрос.ДаНет;

Текст = "Очистить табличную часть?";

Ответ = Вопрос(Текст, Режим, 0);

Если Ответ = КодВозвратаДиалога.Да Тогда

Объект.Товары.Очистить();

КонецЕсли;

КонецЕсли;

Для каждого Подбор Из ВыбранноеЗначение Цикл

Строка = Объект.Товары.Добавить();

Строка.Товар = Подбор.Товар;

Строка.Серия = Подбор.Серия;

Строка.Количество = Подбор.Количество;

КонецЦикла;

КонецПроцедуры

Кроме того, есть еще несколько тюнинговых настороек, про которые писать особого смысла нет, но для формы подбора желательно не забыть настроить свойство РежимОткрытияОкна - Блокировать окно владельца, чтобы пользователь не смого ее случайно вернутся в документ не закрыв окно подбора, при этом доступ к основному окну будет.

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

Мы привыкли читать и смотреть слева направо, поэтому пользователи при заполнении табличных частей документов в 1С используют кнопку «Добавить». Эта функция добавляет одну пустую строку, и пользователь заполняет необходимые поля, подчеркнутые красным. В процессе работы сотрудники не задумываются о других возможностях 1С, стараясь не ошибиться и быстрее выполнить свои обязанности. Продвинутые пользователи 1С предпочитают использовать не кнопку «Добавить», а воспользоваться механизмом подбора.

Подбор в 1С является полезным механизмом, применимым в различных ситуациях. На примере одной из них рассмотрим реализацию механизма подборов на управляемых формах.

Подбор в стандартной конфигурации 1С

Многие документы в стандартных конфигурациях на платформе 1С имеют табличные части, в которых необходимо указывать несколько однотипных строк. Подавляющее большинство таких документов имеют механизм подборов:

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

  • Перечень номенклатуры;
  • Возможности отбора;
  • Выбранная номенклатура.


Форма подбора весьма функциональна, так как позволяет:

  • Задать нужный пользователю фильтр (по наличию на складе, цене, сегменту, названию и другим критериям);
  • Посмотреть остатки;
  • Выбрать сразу несколько номенклатур и их количество;
  • Ознакомиться с ценами поставщика, если они загружены в 1С.

После того как подобран нужный перечень номенклатуры и проставлено количество, пользователи нажимают на кнопку «Перенести в документ», и выбранные позиции переносятся в «ЗаказПоставщику», вместе с введенным количеством. Подбор 1С существенно экономит время сотрудникам компании и облегчает их труд.



Распространенное применение подборов в 1С

В процессе внедрения может возникнуть необходимость добавить возможность подбора. Выполнить эту задачу под силу разработчикам даже с небольшим опытом. Для примера, реализуем подбор в 1С остатков номенклатуры на определенном складе при заполнении табличной части документа «РеализацияТоваров».

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


Также нам потребуется изменить свойства динамического списка:

  1. Проставляем галку «ПроизвольныйЗапрос»;
  2. Открываем свойство «Настройка списка». По умолчанию запрос динамического списка выбирает все поля справочника «Номенклатура»;
  3. Изменяем запрос таким образом, чтобы в список попадала только номенклатура, положительный остаток которой лежит на конкретном складе.

Фрагмент 1

ВЫБРАТЬ СправочникНоменклатура.Ссылка, ТоварыНаСкладахОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура ПО ТоварыНаСкладахОстатки.Товар = СправочникНоменклатура.Ссылка ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток > 0 И ТоварыНаСкладахОстатки.Склад = &Склад

Изменение формы документа в 1С

Переходим к форме документа «РеализацияТоваров» и добавляем команду «ПодборТоваров», размещаем ее на форме и прописываем действие этой команды:


Фрагмент 2

&НаКлиенте Процедура ПодборТоваров(Команда) ПараметрыПодбора = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор, Склад", Ложь, Истина,Объект.Склад); ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПодбора", ПараметрыПодбора, Элементы.Товары); КонецПроцедуры

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


Фрагмент 3

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

Для того чтобы пользователи могли выбирать товары из сформировавшегося списка, необходимо в форме документа продажи для табличной части, куда будут добавляться строки с выбранной номенклатурой, изменить стандартное событие «ОбработкаВыбора»:

Фрагмент 4

&НаКлиенте Процедура ТоварыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ТоварыОбработкаВыбораНаСервере(ВыбранноеЗначение); КонецПроцедуры &НаСервере Процедура ТоварыОбработкаВыбораНаСервере(ВыбранноеЗначение) Для Каждого вЗнч Из ВыбранноеЗначение Цикл нСтр = Объект.Товары.Добавить(); нСтр.Номенклатура = вЗнч.Значение; КонецЦикла; КонецПроцедуры

Напоследок на форме подбора номенклатуры 1С у динамического списка «ТоварыДляВыбора» нужно переопределить событие «Выбор»:

Фрагмент 5

&НаКлиенте Процедура ТоварыДляВыбораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; парам_Номен = Элемент.ТекущиеДанные.Ссылка; ОповеститьОВыборе(Новый Структура("Номенклатура", парам_Номен)); КонецПроцедуры

Проверка реализации подбора в 1С

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


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


При двойном нажатии на конкретную номенклатуру в табличной части документа «РеализацияТоваров» появляется новая строка с выбранной номенклатурой. Пользователь самостоятельно сможет заполнить все остальные поля (количество, цену и другие).

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

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

Перед вами откроется список позиций справочника, имеющий многоуровневую иерархическую структуру.

В этой статье мы пошагово рассмотрим всю инструкцию по начальному заполнению номенклатуры в 1С 8.3 на примере

Для удобства использования этого справочника в 1С Бухгалтерия используются группы (папки). В них объединяется номенклатура, имеющая общие признаки. В каждой группе в свою очередь доступно создание подгрупп (по аналогии с файловой системой на компьютере). Количество уровней иерархии задается программистом, но изначально ограничений не предусмотрено.

Создадим новую группу. В форме списка справочника «Номенклатура» нажмите на кнопку «Создать группу».

Укажите наименование создаваемой группы. Так же можно заполнить ее вид, но не обязательно.

Как видно на рисунке ниже, созданная нами группа поместилась в «Материалы». Если ее необходимо переместить в иную группу или в корень, откройте контекстное меню и выберите пункт «Переместить в группу». Откроется окно, где будет необходимо указать новое место расположения.

Создание новой номенклатурной позиции

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

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

При необходимости заполните остальные реквизиты:

  • Поля «Вид номенклатуры» и «Входит в группу» заполняются автоматически из данных той группы, в которой создается новая номенклатурная позиция. При необходимости их можно изменить.
  • Значение в поле «Единица» является единицей хранения остатков данной номенклатуры.
  • Налоговая ставка, указанная в реквизите «% НДС» при необходимости может быть изменена уже при формировании документов.
  • «Цена продажи» по умолчанию указывается в документах продажи. Данную настройку можно изменить, нажав на гиперссылку «?» рядом с данным полем.
  • В разделе «Производство» можно указать статью затрат данной номенклатурной позиции, и ее спецификацию (для готовой продукции), проще говоря состав.
  • В зависимости от особенностей номенклатуры, заполняются остальные разделы, такие как «Алкогольная продукция» и «Импортный товар».

После того, как вы заполнили карточку создаваемой номенклатуры, ее нужно записать.

Что такое вид номенклатуры в 1С 8.3 и как их настроить

Для того чтобы настроить виды номенклатуры, нажмите на соответствующую гиперссылку в форме списка справочника «Номенклатура».

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

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

Счета учета номенклатуры в 1С 8.3

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

В стандартной конфигурации 1С Бухгалтерия 3.0 данный регистр уже заполнен. Но при необходимости его можно скорректировать вручную.

Счета учета можно настроить:

  • по конкретной номенклатурной позиции;
  • по номенклатурной группе;
  • по виду номенклатуры;
  • по складу;
  • по типу склада;
  • по организации;
  • по всей номенклатуре, указав в качестве значения, пустую ссылку.

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

Установка цен номенклатуры

У одной номенклатуры может быть несколько цен. Они различаются типами, например, оптовая цена, розничная цена и т. п.

Зайдите в карточку элемента справочника «Номенклатура» и перейдите по гиперссылке «Цены».

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

Смотрите также видео про номенклатуру:

Перед прочтением данной статьи рекомендую ознакомиться с особенностями справочника Номенклатура .

В 1С Бухгалтерии 8 есть очень удобный инструмент, позволяющий ускорить заполнение табличных частей документов — это подбор. Функция эта есть почти везде, где есть табличная часть. Причём это касается не только документов, но и других форм с табличными частями. Тем не менее, как показывает моя практика проведения учебных курсов 1С Бухгалтерии 8 , поначалу пользователи почему-то не хотят пользоваться этой удобной функцией, вбивая строки в табличную часть вручную.

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

Когда нужно пользоваться подбором в 1С Бухгалтерии

Как видите, в данном документе требуется добавить товары табличную часть. Если нужно добавить всего одну позицию, то проще воспользоваться кнопкой "Добавить" — так и правда получится быстрее. Однако, если нужно ввести две или более позиции в документ, то нажимать каждый раз "Добавить" долго и неудобно, поскольку каждый раз будет заново открываться справочник Номенклатура при выборе товара в добавленной строке.

Особое неудобство здесь в том, что справочник Номенклатура каждый раз будет открываться с корня, поскольку он вовсе не запоминает, из какой папки в нём вы последний раз что-то выбирали! А это значит, что каждый раз вам придётся заходить в нужную вам папку, что особенно раздражает, когда вы подбираете элементы из одной папки.

Вот тут-то и выручает кнопка "Подбор" , позволяющая сэкономить время и выбрать все нужные элементы (в данном случае номенклатуру) из справочника за один раз. Конечно, не в смысле за один клик мышки, но, тем не менее, гораздо быстрее .

Используйте кнопку "Подбор" для заполнения табличных частей форм в тех случаях, когда в табличную часть требуется добавить более чем одну строку. Это касается не только подбора номенклатуры, но и других случаев (например, подбор сотрудников).

В случае со справочником "Номенклатура" есть ещё одна выгода использования подбора элементов, в том числе и тогда, когда нужно ввести всего один элемент. Подробности смотрите в видеоролике в конце статьи.

Тут была важная часть статьи, но без JavaScript её не видно!

Как использовать кнопку подбора в 1С Бухгалтерии 8.2

Продолжаем рассматривать пример с добавлением товаров в документ реализации. При нажатии кнопки подбора номенклатуры в 1С Бухгалтерии 8.2 открывается окно, показанное ниже. Оно по умолчанию прикреплено к правой части главного окна программы, что очень удобно.

сайт_

В верхней части окна расположены различные фильтры, позволяющие скрыть ненужное в справочнике. Например, можно скрыть все элементы, не относящиеся к определённой номенклатурной группе.

Далее окно состоит из двух частей, верхнее из которых используется для навигации по папкам справочника, а нижнее — для навигации и, собственно, выбора элементов. Мне, например, удобнее пользоваться для подбора номенклатуры в документ только нижним окном, в котором можно видеть не только папки, но и саму подбираемую номенклатуру.

Стоит, тем не менее, иметь ввиду, что использование подбора в ряде случаев не только не ускоряет, но и, наоборот, замедляет ввод строк в табличную часть. Я имею ввиду не только тот случай, описанный выше, когда требуется ввести всего лишь одну строку, но и некоторые другие. Всё это я рассматриваю на своих курсах 1С Бухгалтерии (с особенностями занятий вы можете ознакомиться



Просмотров