diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3ba3528..44e3b59 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,12 @@
---
+## 1.3.1.92 (2026-08-19)
+
+### РК_ПроверкаСерий — выгрузки форм/шаблонов зависимых каталогов (#17)
+
+- Добавлены директории `Forms/`, `Templates/`, `Ext/` для зависимых каталогов (`Номенклатура`, `ВидыНоменклатуры`, `СерииНоменклатуры`) в `crm3-26.rhana/src/Catalogs/`, чтобы конфигуратор больше не падал с ошибками вида `Файл объекта не существует` при применении расширения.
+
## 1.3.1.91 (2026-08-19)
### РК_ПроверкаСерий — фиксы применения расширения (#17)
diff --git a/VERSION b/VERSION
index 3b837fe..2ba0290 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3.1.91
+1.3.1.92
diff --git a/src/Catalogs/ВидыНоменклатуры/Commands/НастройкаЦенообразования/Ext/CommandModule.bsl b/src/Catalogs/ВидыНоменклатуры/Commands/НастройкаЦенообразования/Ext/CommandModule.bsl
new file mode 100644
index 0000000..0e52fa5
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Commands/НастройкаЦенообразования/Ext/CommandModule.bsl
@@ -0,0 +1,14 @@
+
+&НаКлиенте
+Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
+ ОткрытьФорму(
+ "Справочник.ВидыНоменклатуры.Форма.ФормаСпискаДляНастройкиЦенообразования",
+ ,
+ ПараметрыВыполненияКоманды.Источник,
+ ПараметрыВыполненияКоманды.Уникальность,
+ ПараметрыВыполненияКоманды.Окно,
+ ,
+ ,
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Commands/НастройкиУчетаСерий/Ext/CommandModule.bsl b/src/Catalogs/ВидыНоменклатуры/Commands/НастройкиУчетаСерий/Ext/CommandModule.bsl
new file mode 100644
index 0000000..2961bd3
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Commands/НастройкиУчетаСерий/Ext/CommandModule.bsl
@@ -0,0 +1,12 @@
+
+&НаКлиенте
+Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
+
+ ОткрытьФорму(
+ "Справочник.ВидыНоменклатуры.Форма.ФормаНастройкиУчетаСерий",
+ Новый Структура("Склад", ПараметрКоманды),
+ ПараметрыВыполненияКоманды.Источник,
+ ПараметрыВыполненияКоманды.Уникальность,
+ ПараметрыВыполненияКоманды.Окно);
+
+КонецПроцедуры
diff --git a/src/Catalogs/ВидыНоменклатуры/Ext/Help.xml b/src/Catalogs/ВидыНоменклатуры/Ext/Help.xml
new file mode 100644
index 0000000..d983f4c
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Ext/Help.xml
@@ -0,0 +1,4 @@
+
+
+ ru
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Ext/Help/ru.html b/src/Catalogs/ВидыНоменклатуры/Ext/Help/ru.html
new file mode 100644
index 0000000..9492c51
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Ext/Help/ru.html
@@ -0,0 +1,45 @@
+
+
Виды номенклатуры
+
Справочник является классификатором, предназначенным для объединения номенклатуры по общим признакам учета. Фактически виды номенклатуры - это ассортиментные группы продаваемых товаров. При продаже товаров в розницу (со склада типа Розничный) в соответствии с видами номенклатуры могут быть созданы товарные категории и определены квоты ассортимента по каждой товарной категории в соответствии с форматом магазина.
Товар – к этому типу относится вся «материальная» номенклатура, которая закупается и продается. кроме многооборотной тары.
Тара - номенклатура этого типа используется для учета многооборотной тары, которая может возвращаться поставщику товаров или передаваться на условиях возврата клиенту, покупающему товар в данной таре. Использование многооборотной тары включается функциональной опцией Многооборотная тара в разделе НСИ и администрирование - Номенклатура - Разрезы учета, которая доступна при включенной опции Множество видов номенклатуры.
Работа – к этому типу относятся нематериальные работы и услуги, которые могут производиться предприятием, закупаться у поставщиков и продаваться клиентам. Учет закупленных или произведенных работ ведется по количеству и себестоимости. При продаже клиентам работ, произведенных сторонними поставщиками, стоимость их закупки будет учитываться как себестоимость продажи. Работы в программе учитывается сходным образом с товарами, но они не хранятся на складе, а числятся за подразделением, которое их произвело или закупило. Использование работ возможно при включенной опции Множество видов номенклатуры.
Услуга – номенклатура этого типа также как и работы может производиться, закупаться и продаваться. При закупках услуги могут списываться на затраты или распределяться на себестоимость в качестве дополнительных расходов.
Набор – номенклатура этого типа также как и работы не может производиться, закупаться и продаваться. Номенклатуру можно выбрать в подборе товаров в документах продаж и ввести в документ через штрихкод. При этом в документ будут добавлены только комплектующие номенклатуры. Использование наборов в продажах включается функциональной опцией Наборы номенклатуры при продаже в разделе НСИ и администрирование - Номенклатура - Разрезы учета, которая доступна при включенной опции Множество видов номенклатуры. Для номенклатуры с типом Набор требуется указать как нужно отображать набор в печатных формах: только набор, только комплектующие или набор и комплектующие, а так же каким образом формируется цена набора - рассчитывается по комплектующим или же задается за набор.
Для типа номенклатуры Товар дополнительно уточняются особенности учета, отчетности и отражения оборота товаров в государственных информационных системах (если включена хотя бы одна из указанных функциональных опций):
+
Без особенностей учета;
Алкогольная (спиртосодержащая) продукция – формируются декларации по алкогольной продукции и осуществляется обмен с ЕГАИС информацией по обороту (доступна при включенной функциональной опции Настройка НСИ и разделов – Продажи – Розничные продажи – Алкогольная продукция – Алкогольная (спиртосодержащая) продукция в рознице);
Табачная продукция – осуществляется обмен с ИС МОТП информацией по обороту. Доступна при включенной функциональной опции НСИ и администрирование – Администрирование – Настройки интеграции с ИС МОТП - Вести учет табачной продукции);
Продукция, маркируемая для ГИСМ – продукция маркируется специальными контрольными (идентификационными) знаками (КиЗ), осуществляется обмен с Государственной информационной системой маркировки товаров (доступна при включенной функциональной опции НСИ и администрирование – Администрирование – 1С:Маркировка – Маркировка товаров контрольными (идентификационными) знаками);
Контрольный (идентификационный) знак (КиЗ) ГИСМ – контрольные (идентификационные) знаки, которыми маркируется продукция, учитываемая в ГИСМ (доступна при включенной функциональной опции НСИ и администрирование – Администрирование – 1С:Маркировка – Маркировка товаров контрольными (идентификационными) знаками);
Подконтрольная продукция ВЕТИС – продукция подлежит ветеринарному контролю и осуществляется обмен с Государственной информационной системой ВЕТИС (Меркурий). Доступна при включенной функциональной опции НСИ и администрирование – Настройки интеграции с ВетИС - Учет подконтрольных товаров ВетИС.
Если включено использование агентских услуг (включена функциональная опция Продажа агентских услуг в разделе НСИ и администрирование - Продажи - Оптовые продажи - Использование заказов), то для номенклатуры с типом услуга необходимо указать вариант оказания услуг:
+
Услуга выполняется собственной организацией, продается ей же - оказывает услуги и оформляет их продажу одна и та же собственная организация.
Услуга выполняется собственной организацией (принципалом), продается по агентскому договору - оказывает услуги одна собственная организация, а оформляет продажу услуг другая.
Услуга выполняется сторонним исполнителем (принципалом), продается по агентскому договору - оказывает услуги сторонняя организация (партнер), а оформляет продажу услуг собственная организация.
Для номенклатуры с типами работа и услуга возможно указание Варианта оформления продажи. Вариант оформления продажи будет определять какой из двух типов документов будет оформляться по умолчанию для отражения оказания услуги (выполнения работы) по заказу клиента: Акт выполненных работ или Реализация товаров и услуг.
Использование характеристик возможно только, если включена функциональная опция Характеристики номенклатуры (НСИ и администрирование - Номенклатура - Разрезы учета).
+
В виде номенклатуры определяется порядок использования характеристик.
+
Не используются - характеристики для данного вида номенклатуры не используются.
Общие для вида номенклатуры - для всех товаров данного вида будут использоваться обобщенные характеристики. Например: размеры и цвет обуви. Список обобщенных характеристик задается в виде номенклатуры.
Общие с другим видом номенклатуры - для всех товаров данного вида будут использоваться обобщенные характеристики. Например: размеры и цвет обуви. Сам список характеристик един для нескольких видов номенклатуры.
Индивидуальные характеристики для номенклатуры - характеристики назначаются для каждого товара отдельно. Информация о характеристиках вводится в форме номенклатуры.
Использование серий возможно только, если включена функциональная опция Серии товаров (НСИ и администрирование - Номенклатура - Разрезы учета).
+
Серии следует использовать в том случае, если необходимо учитывать товары по дополнительным разрезам складского учета: по срокам годности, серийным номерам, производственным партиям и т.д. Для настройки учета по сериям необходимо указать, что именно серии идентифицируют и указать политику учета серий на каждом складе. Политики учета серий, предусматривающие указание серий, при отражении излишков, недостач и порчи товаров могут использоваться только на складах с ордерной схемой документооборота. На остальных складах допускается применение только справочного указания серий. Заданная для Вида номенклатуры политика учета серий в дальнейшем отображается в карточке соответствующего склада по гиперссылке Настройки учета серий.
Политики учета серий можно уточнять для каждого склада, а можно указать единую для всех складов политику. При этом, если эта политика предусматривает указание серий при отражении излишков, недостач и порчи, то все склады должны быть ордерными по этому типу операций.
+
Серии можно настраивать для вида номенклатуры, либо использовать единые для нескольких видов номенклатуры настройки - для этого нужно настроить использование серий для одного вида, а в другом виде (других видах) нужно указать ссылку на первый вид. Политика, заданная в поле Политика учета серий является значением по умолчанию, и распространяется на все склады. Если для какого-либо склада требуется указать индивидуальную политику, необходимо установить флаг Есть индивидуальные настройки политики учета серий. В появившейся таблице можно указать склад и индивидуальную политику для него. Если будет выбрана та же политика, что в поле Политика учета серий, строка пропадет, т.к. не имеет смысла.
+
Если необходимо задать использование политик учета серий лишь для нескольких складов из множества, следует указать в поле Политика учета серий политику "Серии не используются", и задать индивидуальную настройку для нужных складов.
Если на отдельном складе политика учета серий не задана - при передаче товаров на данный склад информация о сериях товаров будет утеряна.
+
Серии могут идентифицировать:
+
Экземпляры товаров, имеющих уникальные серийные номера – при такой настройке серия будет представлять собой уникальный серийный номер конкретного товара. Например, серийный номер конкретного мобильного телефона, или другого сложного технического изделия.
Партии товаров, имеющих одинаковые номера серий – при такой настройке серия может характеризовать незначительные отличия характеристик продукции, которые связаны с особенностями производства. Например, партии (серии) обоев, которые могут различаться цветовым оттенком. Также при этой настройке серия может принадлежать к товару, который продается на отрез из рулонов и т. д. Например, серия – это рулон линолеума, бухта кабеля и т. д.
Партии товаров, имеющих одинаковые сроки годности – при такой настройке серия будет представлять собой срок годности партии товара, например, срок годности партии молока.
Партии товаров, имеющих одинаковые номера серий и сроки годности – при такой настройке серия будет как характеризовать срок годности партии, так и отражать незначительные отличия характеристик продукции, которые связаны с особенностями производства. Например, партии краски, которые различаются оттенком цвета, и, в то же время, каждая партия краски имеет свой срок годности.
Для сроков годности (если поле Серии идентифицируют заполнено значением Партии товаров, имеющих одинаковые сроки годности или Партии товаров, имеющих одинаковые номера серий и сроки годности) можно указать точность срока годности: до дней или до часов.
+
Серия для Алкогольной (спиртосодержащей) продукции всегда идентифицирует партию товаров, а в составе реквизитов серии могут указываться Срок годности, Дата производства, Производитель (ЕГАИС) и Справка 2 (ЕГАИС). В документах обмена с ЕГАИС предусмотрена возможность генерировать серии автоматически при поступлении и оприходовании при инвентаризации. Возможность будет доступна при установке флажка Генерировать серии автоматически.
+
Серия для Подконтрольной продукции ВЕТИС всегда идентифицирует партию товаров, а в составе реквизитов серии могут указываться Срок годности, Дата производства, Производитель (ВетИС), Запись складского журнала (ВетИС) и Идентификатор партии (ВетИС). В документах ВетИС предусмотрена возможность генерировать серии автоматически при поступлении и оприходовании при инвентаризации. Возможность будет доступна при установке флажка Генерировать серии автоматически. Для подконтрольной продукции ВетИС на ордерном складе можно применять только те политики учета серий, которые предполагает указание серий при планировании отгрузки.
+
При использовании политики учета серий Учет себестоимости по сериям, становится доступным указание серий у партнеров (товары в пути, неотфактурованные поставки). Настройки серий у партнеров всегда берутся из политики указанной в шапке вида номенклатуры. При указании такой политики в табличной части, настройки партнеров будут проигнорированы.
Использование дополнительных реквизитов возможно только, если включена функциональная опция Дополнительные реквизиты и сведения (НСИ и администрирование - Общие настройки).
+
Дополнительные реквизиты предназначены для описания произвольных свойств объектов. Дополнительные реквизиты могут задаваться как общие для всей номенклатуры, так и общие для номенклатуры одного вида. Также можно задавать дополнительные реквизиты общие для всех характеристик всех видов номенклатуры или для всех характеристик одного вида номенклатуры (как общих характеристик всего вида, так и индивидуальных характеристик). Аналогично с сериями номенклатуры: можно задать общие свойства всех серий и всех серий одного вида.
+
Значения дополнительных реквизитов можно использовать в качестве дополнительного фильтра при подборе и просмотре товаров конкретного вида. Для каждого вида номенклатуры можно назначить свой список дополнительных параметров для быстрого отбора.
+
Пример. Для вида номенклатуры Кабели в качестве параметров быстрого отбора могут быть установлены такие значения дополнительных реквизитов, как число жил, сечение, наружный диаметр, расчетная масса. Для вида номенклатуры Обувь в качестве параметров быстрого отбора могут быть назначены дополнительные реквизиты характеристик: размер, цвет, полнота и т.д. При установке отбора по виду номенклатуры в подборе в качестве быстрых параметров отбора будут указаны именно те параметры, которые назначены для данного вида номенклатуры.
Назначенные дополнительные реквизиты можно использовать при создании шаблона наименования товара или характеристики.
Шаблоны наименований позволяют создать правило, по которому наименование номенклатуры (характеристики) будет формироваться автоматически, с учетом реквизитов. Также по шаблону может быть перезаполнено наименование ранее созданной номенклатуры.
Единица измерения. Значение по умолчанию, которое будет подставляться при вводе новой позиции номенклатуры данного вида. В единицах измерения ведется учет складских остатков товаров и указывается количество номенклатуры в одной упаковке.
Обособленная закупка/продажа - при добавлении такой номенклатуры (обладающей уникальными свойствами) в табличную часть заказа клиента для неё будет автоматически установлен вариант обеспечения (Действие) Обеспечивать обособленно.
Шаблон ценника (этикетки). Значение по умолчанию, которое будет подставляться при вводе новой позиции данного вида. Используется только для товаров. Для каждого товара может быть назначен свой шаблон ценника (этикетки).
Группа аналитического учета Значение по умолчанию, которое будет подставляться при вводе новой позиции номенклатуры данного вида. Данный элемент предназначен для экономической классификации объектов по однородным группам.
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Ext/ManagerModule.bsl b/src/Catalogs/ВидыНоменклатуры/Ext/ManagerModule.bsl
new file mode 100644
index 0000000..bec9dff
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Ext/ManagerModule.bsl
@@ -0,0 +1,2549 @@
+#Если НЕ МобильныйАвтономныйСервер Тогда
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+#Область ПрограммныйИнтерфейс
+
+// Возвращает настройки использования серий для вида номенклатуры на складе (подразделении).
+//
+// Параметры:
+// ВидНоменклатуры - СправочникСсылка.ВидыНоменклатуры - вид номенклатуры, параметры серий которого которой нужно получить
+// - ДанныеФормыСтруктура - вид номенклатуры (из формы элемента)
+// - Структура - вид номенклатуры с расширенными полями (из формы элемента)
+// ПараметрыУказанияСерий - Структура, ФиксированнаяСтруктура - см. НоменклатураКлиентСервер.ПараметрыУказанияСерий
+// ЗначенияПолейСвязи - Структура, ФиксированнаяСтруктура -
+//
+// Возвращаемое значение:
+// Структура - структура с ключами:
+// * ВидНоменклатуры - СправочникСсылка.ВидыНоменклатуры - вид номенклатуры, параметры серий которого нужно получить
+// * ИспользоватьСерии - Булево - Истина, если серии для вида номенклатуры используются
+// * ИспользоватьНомерСерии - Булево - Истина, если номера серий для вида номенклатуры используются
+// * ИспользоватьСрокГодностиСерии - Булево - Истина, если используется срок годности серий для вида номенклатуры
+// * ИспользоватьКоличествоСерии - Булево - Истина, если количество серии указывается
+// * ЕдиницаИзмеренияСрокаГодности - ПеречислениеСсылка.ЕдиницыИзмеренияВремени - единица измерения срока
+// годности серии.
+// * ТочностьУказанияСрокаГодностиСерии - ПеречислениеСсылка.ТочностиУказанияСрокаГодности - точность указания срока
+// годности серии.
+// * ШаблонРабочегоНаименованияСерии - Строка - шаблон рабочего наименования серии
+// * ВладелецСерий - СправочникСсылка.ВидыНоменклатуры - владелец
+// * НастройкиСерийБерутсяИзДругогоВидаНоменклатуры - Булево - Истина, если настройки серий берутся из другого вида номенклатуры
+// * ШаблонЭтикеткиСерии - СправочникСсылка.ШаблоныЭтикетокИЦенников - ссылка на шаблон этикетки серии
+// * ИспользоватьRFIDМеткиСерии - Булево - Истина, если используются RFID-метки серий
+// * ИспользоватьДатуПроизводстваСерии - Булево - Истина, если ведется учет серий вида номенклатуры
+// по датам производства.
+// * Признаки - Булево - признаки использования реквизитов серий, зависящие от локализации.
+// Истина, если ведется учет серий вида номенклатуры
+// * ФорматнаяСтрокаСрокаГодности - Строка - форматная строка срока годности
+// * ОбязательныеДопРеквизиты - ФиксированныйМассив Из Строка - наименования доп реквизитов
+// * ПолитикаУчетаСерий - СправочникСсылка.ПолитикиУчетаСерий - ссылка на политику учета серий
+// * УказыватьПриПоступлении - Булево - Истина, если серии указываются при поступлении
+// * УказыватьПриОтгрузке - Булево - Истина, если серии указываются при отгрузке
+// * УказыватьПриПланированииОтгрузки - Булево - Истина, если серии указываются при планировании отгрузки
+// * УчетСерийПоFEFO - Булево - Истина, если серии учитываются по FEFO
+// * УказыватьПоФактуОтбора - Булево - Истина, если серии учитываются по факту отбора
+// * УчитыватьОстаткиСерий - Булево - Истина, если учитываются остатки серий
+// * УчитыватьСебестоимостьПоСериям - Булево - Истина, если учитывается себестоимость по сериям.
+//
+Функция НастройкиИспользованияСерий(ВидНоменклатуры, ПараметрыУказанияСерий = Неопределено, ЗначенияПолейСвязи = Неопределено) Экспорт
+
+ РеквизитыВидаНоменклатуры = Новый Структура;
+ РеквизитыНастройкиУказанияСерий = РеквизитыНастройкиУказанияСерий();
+
+ Для Каждого СтрМас Из РеквизитыНастройкиУказанияСерий Цикл
+ РеквизитыВидаНоменклатуры.Вставить(СтрМас);
+ КонецЦикла;
+
+ РеквизитыВидаНоменклатуры.Вставить("ВидНоменклатуры");
+ РеквизитыВидаНоменклатуры.Вставить("ОсобенностьУчета");
+ РеквизитыВидаНоменклатуры.Вставить("ИспользоватьСерии");
+
+ Если ТипЗнч(ВидНоменклатуры) <> Тип("СправочникСсылка.ВидыНоменклатуры") Тогда
+ ЗаполнитьЗначенияСвойств(РеквизитыВидаНоменклатуры, ВидНоменклатуры);
+
+ РеквизитыВидаНоменклатуры.ВидНоменклатуры = ВидНоменклатуры.Ссылка;
+ РеквизитыВидаНоменклатуры.ВладелецСерий = ?(ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры,
+ ВидНоменклатуры.ВладелецСерий,
+ ВидНоменклатуры.Ссылка);
+ РеквизитыВидаНоменклатуры.ШаблонЭтикеткиСерии = ?(ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры,
+ ОбщегоНазначенияУТ.ЗначенияРеквизитовОбъектаПоУмолчанию(
+ ВидНоменклатуры.ВладелецСерий,
+ "ШаблонЭтикеткиСерии"),
+ ВидНоменклатуры.ШаблонЭтикеткиСерии);
+ Иначе
+
+ РеквизитыВидаНоменклатуры.ВидНоменклатуры = "Ссылка";
+ РеквизитыВидаНоменклатуры.ВладелецСерий =
+ "ВЫБОР
+ | КОГДА НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ | ТОГДА ВладелецСерий
+ | ИНАЧЕ Ссылка
+ | КОНЕЦ";
+ РеквизитыВидаНоменклатуры.ШаблонЭтикеткиСерии =
+ "ВЫБОР
+ | КОГДА НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ | ТОГДА ВладелецСерий.ШаблонЭтикеткиСерии
+ | ИНАЧЕ ШаблонЭтикеткиСерии
+ | КОНЕЦ";
+
+ ПоляВыборки = Новый Массив;
+
+ Для Каждого РеквизитВида Из РеквизитыВидаНоменклатуры Цикл
+ ИмяПоля = ?(ЗначениеЗаполнено(РеквизитВида.Значение),
+ РеквизитВида.Значение,
+ РеквизитВида.Ключ);
+ ПолеВыборки= "
+ | " + ИмяПоля + " КАК " + РеквизитВида.Ключ;
+
+ ПоляВыборки.Добавить(ПолеВыборки);
+ КонецЦикла;
+
+ ТекстВыборки = СтрСоединить(ПоляВыборки, ",");
+ ТекстЗапроса =
+ "ВЫБРАТЬ
+ |&ПоляВыборки
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | ВидыНоменклатуры.Ссылка = &Ссылка";
+ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ТекстВыборки);
+
+ Запрос = Новый Запрос;
+ Запрос.Текст = ТекстЗапроса;
+ Запрос.УстановитьПараметр("Ссылка", ВидНоменклатуры);
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Если Выборка.Следующий() Тогда
+ ЗаполнитьЗначенияСвойств(РеквизитыВидаНоменклатуры, Выборка);
+ КонецЕсли;
+
+ КонецЕсли;
+
+ НастройкиИспользованияСерий = НастройкиИспользованияСерийСоставПолей(Ложь);
+
+ ЗаполнитьЗначенияСвойств(НастройкиИспользованияСерий, РеквизитыВидаНоменклатуры);
+
+ ОписанияИспользованияРеквизитовСерии = ОписанияИспользованияРеквизитовСерии(НастройкиИспользованияСерий, ПараметрыУказанияСерий, ЗначенияПолейСвязи);
+
+ ДляСозданиеФиксированногоМассива = Новый Массив;
+
+ Для Каждого Описание Из ОписанияИспользованияРеквизитовСерии Цикл
+ ДляСозданиеФиксированногоМассива.Добавить(Новый ФиксированнаяСтруктура(Описание));
+ КонецЦикла;
+
+ НастройкиИспользованияСерий.ОписанияИспользованияРеквизитовСерии = Новый ФиксированныйМассив(ДляСозданиеФиксированногоМассива);
+
+ Если Не ЗначениеЗаполнено(НастройкиИспользованияСерий.ШаблонЭтикеткиСерии) Тогда
+ НастройкиИспользованияСерий.ШаблонЭтикеткиСерии
+ = Справочники.ШаблоныЭтикетокИЦенников.ШаблонПоУмолчанию(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаСерииНоменклатуры);
+ КонецЕсли;
+
+ Если ТипЗнч(ВидНоменклатуры) = Тип("СправочникСсылка.ВидыНоменклатуры")
+ И (ЗначениеЗаполнено(ЗначенияПолейСвязи)
+ И ЗначенияПолейСвязи.Свойство("Склад")
+ И (ЗначениеЗаполнено(ЗначенияПолейСвязи.Склад)
+ Или ИспользоватьПроизводство())) Тогда
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий, ЗНАЧЕНИЕ(Справочник.ПолитикиУчетаСерий.ПустаяСсылка)) КАК ПолитикаУчетаСерий,
+ | ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемке, ЛОЖЬ) КАК УказыватьПриПоступлении,
+ | ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузке, ЛОЖЬ) КАК УказыватьПриОтгрузке,
+ | ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки, ЛОЖЬ) КАК УказыватьПриПланированииОтгрузки,
+ | ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УчетСерийПоFEFO, ЛОЖЬ) КАК УчетСерийПоFEFO,
+ | ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПоФактуОтбора, ЛОЖЬ) КАК УказыватьПоФактуОтбора,
+ | ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьОстаткиСерий, ЛОЖЬ)
+ | И (ТЧПолитикиУчетаСерий.Склад ССЫЛКА Справочник.Склады ИЛИ &ЕстьПроизводство)КАК УчитыватьОстаткиСерий,
+ | ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям, ЛОЖЬ)
+ | И (ТЧПолитикиУчетаСерий.Склад ССЫЛКА Справочник.Склады ИЛИ &ЕстьПроизводство)
+ | КАК УчитыватьСебестоимостьПоСериям
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ТЧПолитикиУчетаСерий
+ | ПО ВидыНоменклатуры.Ссылка = ТЧПолитикиУчетаСерий.Ссылка
+ | И (ТЧПолитикиУчетаСерий.Склад = &СкладПодразделение)
+ |ГДЕ
+ | ВидыНоменклатуры.Ссылка = &ВидНоменклатуры";
+ Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
+ Запрос.УстановитьПараметр("СкладПодразделение", ЗначенияПолейСвязи.Склад);
+ Запрос.УстановитьПараметр("ЕстьПроизводство", ИспользоватьПроизводство());
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Выборка.Следующий();
+
+ ЗаполнитьЗначенияСвойств(НастройкиИспользованияСерий, Выборка);
+
+ КонецЕсли;
+
+ Если ТипЗнч(ВидНоменклатуры) = Тип("СправочникСсылка.ВидыНоменклатуры") Тогда
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатурыРеквизитыДляКонтроляСерий.Свойство КАК Свойство
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляСерий КАК ВидыНоменклатурыРеквизитыДляКонтроляСерий
+ |ГДЕ
+ | ВидыНоменклатурыРеквизитыДляКонтроляСерий.Ссылка = ВЫБОР
+ | КОГДА ВЫРАЗИТЬ(&ВидНоменклатуры КАК Справочник.ВидыНоменклатуры).НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ | ТОГДА ВЫРАЗИТЬ(&ВидНоменклатуры КАК Справочник.ВидыНоменклатуры).ВладелецСерий
+ | ИНАЧЕ &ВидНоменклатуры
+ | КОНЕЦ
+ | И ВидыНоменклатурыРеквизитыДляКонтроляСерий.ЭтоДопРеквизит
+ | И ВидыНоменклатурыРеквизитыДляКонтроляСерий.ЗаполнятьОбязательно";
+
+ Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
+ РеквизитыДляКонтроляСерий = Запрос.Выполнить().Выгрузить();
+
+ Иначе
+ Если ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатурыРеквизитыДляКонтроляСерий.Свойство КАК Свойство
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляСерий КАК ВидыНоменклатурыРеквизитыДляКонтроляСерий
+ |ГДЕ
+ | ВидыНоменклатурыРеквизитыДляКонтроляСерий.Ссылка = &ВладелецСерий
+ | И ВидыНоменклатурыРеквизитыДляКонтроляСерий.ЭтоДопРеквизит
+ | И ВидыНоменклатурыРеквизитыДляКонтроляСерий.ЗаполнятьОбязательно";
+
+ Запрос.УстановитьПараметр("ВладелецСерий", ВидНоменклатуры.ВладелецСерий);
+ РеквизитыДляКонтроляСерий = Запрос.Выполнить().Выгрузить();
+
+ Иначе
+ РеквизитыДляКонтроляСерий = ?(ТипЗнч(ВидНоменклатуры) = Тип("Структура"),
+ ВидНоменклатуры.РеквизитыДляКонтроляСерий.Скопировать(
+ Новый Структура("ЭтоДопРеквизит,ЗаполнятьОбязательно", Истина, Истина)),
+ ВидНоменклатуры.РеквизитыДляКонтроляСерий.Выгрузить(
+ Новый Структура("ЭтоДопРеквизит,ЗаполнятьОбязательно", Истина, Истина)));
+ КонецЕсли;
+ КонецЕсли;
+
+ НастройкиИспользованияСерий.ОбязательныеДопРеквизиты = Новый ФиксированныйМассив(РеквизитыДляКонтроляСерий.ВыгрузитьКолонку("Свойство"));
+
+ Возврат НастройкиИспользованияСерий;
+
+КонецФункции
+
+// Получает вид номенклатуры, если вид номенклатуры один в справочнике.
+//
+// Возвращаемое значение:
+// СправочникСсылка.ВидыНоменклатуры - найденный вид номенклатуры
+// Неопределено - если видов номенклатуры нет или видов номенклатуры больше одного.
+//
+Функция ВидНоменклатурыПоУмолчанию() Экспорт
+
+ Текст =
+ "ВЫБРАТЬ ПЕРВЫЕ 2
+ | ВидыНоменклатуры.Ссылка КАК ВидНоменклатуры
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | НЕ ВидыНоменклатуры.ПометкаУдаления
+ | И НЕ ВидыНоменклатуры.ЭтоГруппа";
+
+ Запрос = Новый Запрос(Текст);
+
+ РезультатЗапроса = Запрос.Выполнить();
+
+ Если РезультатЗапроса.Пустой() Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Выборка = РезультатЗапроса.Выбрать();
+
+ Если Выборка.Количество() = 1 Тогда
+ Выборка.Следующий();
+ ВидНоменклатуры = Выборка.ВидНоменклатуры;
+ Иначе
+ ВидНоменклатуры = Неопределено;
+ КонецЕсли;
+
+ Возврат ВидНоменклатуры;
+
+КонецФункции // ВидНоменклатуры()
+
+// Возвращает имена блокируемых реквизитов для механизма блокирования реквизитов БСП.
+//
+// Возвращаемое значение:
+// Массив из Строка - имена блокируемых реквизитов.
+//
+Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт
+
+ Результат = Новый Массив;
+
+ Результат.Добавить("ТипНоменклатуры");
+ Результат.Добавить("ОсобенностьУчета");
+ Результат.Добавить("ИспользованиеХарактеристик");
+ Результат.Добавить("ИспользоватьХарактеристики");
+ Результат.Добавить("НастройкиКлючаЦенПоХарактеристике");
+ Результат.Добавить("НастройкиКлючаЦенПоСерии");
+ Результат.Добавить("НастройкиКлючаЦенПоУпаковке");
+ Результат.Добавить("ИспользоватьСерии; ВариантЗаданияНастроекСерий");
+ Результат.Добавить("ПолитикиУчетаСерий; ПолитикиУчетаСерийДобавитьСкладВПолитикиУчетаСерий,ПолитикиУчетаСерийДобавитьПодразделениеВПолитикиУчетаСерий");
+ Результат.Добавить("НастройкаИспользованияСерий");
+ Результат.Добавить("ТочностьУказанияСрокаГодностиСерии");
+ Результат.Добавить("ВариантОформленияПродажи");
+ Результат.Добавить("ВариантПредставленияНабораВПечатныхФормах");
+ Результат.Добавить("ВариантРасчетаЦеныНабора;ГруппаЦенаНабора");
+ Результат.Добавить("ВладелецХарактеристик");
+ Результат.Добавить("ВладелецСерий");
+ Результат.Добавить("НастройкиСерийБерутсяИзДругогоВидаНоменклатуры");
+ Результат.Добавить("ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры");
+ Результат.Добавить("ВладелецТоварныхКатегорий; НастройкаТоварныхКатегорий");
+ Результат.Добавить("ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий; ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий");
+ Результат.Добавить("АлкогольнаяПродукция");
+
+ ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Справочники.Номенклатура.РеквизитыПризнаковОсобенностейУчета(Метаданные.Справочники.ВидыНоменклатуры));
+
+ Возврат Результат;
+
+КонецФункции
+
+// Возвращает предустановленные виды номенклатуры.
+//
+// Возвращаемое значение:
+// Массив из СправочникСсылка.ВидыНоменклатуры -
+//
+Функция ПолучитьПредустановленныеВидыНоменклатуры() Экспорт
+
+ УстановитьПривилегированныйРежим(Истина);
+
+ МассивВидов = Новый Массив;
+
+ ДобавитьПредустановленныйВидНоменклатуры(МассивВидов, Перечисления.ТипыНоменклатуры.Товар, НСтр("ru = 'Товар'"));
+ ДобавитьПредустановленныйВидНоменклатуры(МассивВидов, Перечисления.ТипыНоменклатуры.Услуга, НСтр("ru = 'Услуга'"));
+
+ Возврат МассивВидов;
+
+КонецФункции
+
+// Добавляет в массив вид номенклатуры с указанным типом.
+// Если вида номенклатуры с таким типов нет в ИБ, то он создается.
+//
+// Параметры:
+// МассивВидов - Массив - массив видов номенклатуры,
+// Тип - ПеречислениеСсылка.ТипыНоменклатуры - тип номенклатуры,
+// Имя - Строка - имя нового вида номенклатуры.
+//
+Процедура ДобавитьПредустановленныйВидНоменклатуры(МассивВидов, Тип, Имя) Экспорт
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ ПЕРВЫЕ 1
+ | ВидыНоменклатуры.Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | ВидыНоменклатуры.ТипНоменклатуры = &Тип
+ | И НЕ ВидыНоменклатуры.ПометкаУдаления";
+
+ Запрос.УстановитьПараметр("Тип", Тип);
+
+ РезультатЗапроса = Запрос.Выполнить();
+
+ Если РезультатЗапроса.Пустой() Тогда
+
+ НовыйВид = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
+ НовыйВид.Заполнить(Неопределено);
+ НовыйВид.Наименование = Имя;
+ НовыйВид.ТипНоменклатуры = Тип;
+
+ Если ПолучитьФункциональнуюОпцию("ИспользоватьГруппыДоступаНоменклатуры") Тогда
+ НовыйВид.ГруппаДоступа = Справочники.ГруппыДоступаНоменклатуры.ПолучитьГруппуДоступаПоУмолчанию(НовыйВид);
+ КонецЕсли;
+ НовыйВид.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
+
+ ЗаполнитьРеквизитыДляКонтроля(НовыйВид, "Номенклатура");
+
+ НастройкаЕдИзмерения = НовыйВид.РеквизитыДляКонтроляНоменклатуры.Найти("ЕдиницаИзмерения");
+ Если НастройкаЕдИзмерения <> Неопределено Тогда
+ НастройкаЕдИзмерения.ОтображатьПриСоздании = Истина;
+ НастройкаЕдИзмерения.ЗаполнятьОбязательно = Истина;
+ КонецЕсли;
+
+ НовыйВид.ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
+ НовыйВид.ЕдиницаДляОтчетов = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
+
+ НовыйВид.Записать();
+
+ МассивВидов.Добавить(НовыйВид.Ссылка);
+
+ Иначе
+
+ Выборка = РезультатЗапроса.Выбрать();
+ Выборка.Следующий();
+
+ МассивВидов.Добавить(Выборка.Ссылка);
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+// Параметры:
+// ДанныеЗаполнения - Структура - структура данных для заполнения
+// ВидНоменклатурыСсылка - СправочникСсылка.ВидыНоменклатуры - ссылка на созданный объект
+//
+Процедура СоздатьВидНоменклатуры(ДанныеЗаполнения, ВидНоменклатурыСсылка) Экспорт
+
+ ВидНоменклатурыОбъект = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
+
+ ВидНоменклатурыОбъект.Заполнить(Неопределено);
+ ВидНоменклатурыОбъект.УстановитьНовыйКод();
+
+ ВидНоменклатурыОбъект.Наименование = ДанныеЗаполнения.Наименование;
+ ВидНоменклатурыОбъект.СтавкаНДС = ДанныеЗаполнения.СтавкаНДС;
+ ВидНоменклатурыОбъект.ТипНоменклатуры = ДанныеЗаполнения.ТипНоменклатуры;
+ ВидНоменклатурыОбъект.Описание = ДанныеЗаполнения.Описание;
+ ВидНоменклатурыОбъект.ЕдиницаИзмерения = ДанныеЗаполнения.ЕдиницаИзмерения;
+ ВидНоменклатурыОбъект.ЕдиницаДляОтчетов = ДанныеЗаполнения.ЕдиницаДляОтчетов;
+ ВидНоменклатурыОбъект.Родитель = ДанныеЗаполнения.Родитель;
+ ВидНоменклатурыОбъект.ИспользоватьХарактеристики = ДанныеЗаполнения.ИспользоватьХарактеристики;
+ ВидНоменклатурыОбъект.ИспользованиеХарактеристик = ДанныеЗаполнения.ИспользованиеХарактеристик;
+ ВидНоменклатурыОбъект.ВариантОформленияПродажи = ДанныеЗаполнения.ВариантОформленияПродажи;
+
+ Если Справочники.ГруппыДоступаНоменклатуры.ИспользуютсяГруппыДоступа() Тогда
+ ГруппаДоступа = Справочники.ГруппыДоступаНоменклатуры.ПолучитьГруппуДоступаПоУмолчанию(ВидНоменклатурыОбъект);
+ ДанныеЗаполнения.Свойство("ГруппаДоступа", ГруппаДоступа);
+ ВидНоменклатурыОбъект.ГруппаДоступа = ГруппаДоступа;
+ КонецЕсли;
+
+ ЗаполнитьРеквизитыДляКонтроля(ВидНоменклатурыОбъект, "Номенклатура");
+
+ НастройкаЕдИзмерения = ВидНоменклатурыОбъект.РеквизитыДляКонтроляНоменклатуры.Найти("ЕдиницаИзмерения");
+ Если НастройкаЕдИзмерения <> Неопределено Тогда
+ НастройкаЕдИзмерения.ОтображатьПриСоздании = Истина;
+ НастройкаЕдИзмерения.ЗаполнятьОбязательно = Истина;
+ КонецЕсли;
+
+ ВидНоменклатурыОбъект.Записать();
+
+ ВидНоменклатурыСсылка = ВидНоменклатурыОбъект.Ссылка;
+
+КонецПроцедуры
+
+// Возвращает значение единицы измерения срока годности по значению точности указания срока годности серии.
+//
+// Параметры:
+// ТочностьУказанияСрокаГодности - ПеречислениеСсылка.ТочностиУказанияСрокаГодности - Точность указания срока
+// годности серии вида номенклатуры.
+//
+// Возвращаемое значение:
+// ПеречислениеСсылка.ЕдиницыИзмеренияВремени - единица измерения срока годности по значению точности указания
+// срока годности серии.
+//
+Функция ЕдиницаИзмеренияСрокаГодности(ТочностьУказанияСрокаГодности) Экспорт
+
+ ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.ПустаяСсылка();
+
+ Если ТочностьУказанияСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоМесяцев Тогда
+ ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.Месяц;
+ ИначеЕсли ТочностьУказанияСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоДней Тогда
+ ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.Сутки;
+ ИначеЕсли ТочностьУказанияСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоЧасов Тогда
+ ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.Час;
+ КонецЕсли;
+
+ Возврат ЕдиницаИзмеренияСрокаГодности;
+
+КонецФункции
+
+// Возвращает реквизиты для ценообразования по виду номенклатуры
+//
+// Параметры:
+// ВидНоменклатуры - СправочникСсылка.ВидыНоменклатуры - Вид номенклатуры
+// РазрезКлюча - Строка - разрез ключа ("Характеристики" или "Серии")
+// Возвращаемое значение:
+// ТаблицаЗначений - ТаблицаЗначения - таблица с реквизитами для заполнения ключа
+Функция ПолучитьРеквизитыДляКлючаЦен(Знач ВидНоменклатуры, Знач РазрезКлюча) Экспорт
+
+ Если РазрезКлюча = "Характеристики" Тогда
+ ИмяТаблицы = "РеквизитыХарактеристикДляКлючаЦен";
+ ИначеЕсли РазрезКлюча = "Серии" Тогда
+ ИмяТаблицы = "РеквизитыСерийДляКлючаЦен";
+ КонецЕсли;
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатурыРеквизитыДляКлючаЦен.ИмяРеквизита,
+ | ВидыНоменклатурыРеквизитыДляКлючаЦен.ЭтоДопРеквизит,
+ | ВидыНоменклатурыРеквизитыДляКлючаЦен.Свойство,
+ | ВидыНоменклатурыРеквизитыДляКлючаЦен.Используется,
+ | Неопределено КАК Значение
+ |ИЗ
+ | &ИмяТаблицы КАК ВидыНоменклатурыРеквизитыДляКлючаЦен
+ |ГДЕ
+ | ВидыНоменклатурыРеквизитыДляКлючаЦен.Ссылка = &ВидНоменклатуры
+ | И ВидыНоменклатурыРеквизитыДляКлючаЦен.Используется";
+
+ Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяТаблицы", "Справочник.ВидыНоменклатуры." + ИмяТаблицы);
+ Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
+
+ РеквизитыДляКлючаЦен = Запрос.Выполнить().Выгрузить();
+
+ Возврат РеквизитыДляКлючаЦен
+КонецФункции
+
+#Область Команды
+
+// Определяет список команд создания на основании.
+//
+// Параметры:
+// КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
+// Параметры - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.Параметры
+//
+Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
+
+ БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ДляВызоваИзДругихПодсистем
+
+// СтандартныеПодсистемы.УправлениеДоступом
+
+// Параметры:
+// Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
+//
+Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
+
+ Ограничение.Текст =
+ "РазрешитьЧтение
+ |ГДЕ ИСТИНА
+ |;
+ |РазрешитьИзменениеЕслиРазрешеноЧтение
+ |ГДЕ
+ | ЭтоГруппа ИЛИ
+ | ЗначениеРазрешено(Ссылка)";
+
+КонецПроцедуры
+
+// Конец СтандартныеПодсистемы.УправлениеДоступом
+
+#КонецОбласти
+
+// СтандартныеПодсистемы.ВерсионированиеОбъектов
+// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
+//
+// Параметры:
+// Настройки - Структура - настройки подсистемы.
+Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
+КонецПроцедуры
+// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов
+
+#Область РаботаСФормулами
+
+// Создает дерево возможных операндов для формулы по шаблону.
+//
+// Параметры:
+// НаборыСвойств - Структура:
+// * НаборСвойств - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений
+// * НаборСвойствСерий - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений
+// * НаборСвойствХарактеристик - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений
+// ИмяШаблона - Строка
+//
+// Возвращаемое значение:
+// см. РаботаСФормулами.ПолучитьПустоеДеревоОперандов
+//
+Функция ПодготовитьДеревоОперандов(НаборыСвойств, ИмяШаблона) Экспорт
+
+ НаборСвойств = Новый Структура();
+ НаборСвойств.Вставить("НаборСвойствНоменклатуры", Ложь);
+ НаборСвойств.Вставить("НаборСвойствХарактеристик", Ложь);
+ НаборСвойств.Вставить("Набор", Неопределено);
+
+ Если ИмяШаблона = "ШаблонНаименованияДляПечатиНоменклатуры"
+ Или ИмяШаблона = "ШаблонРабочегоНаименованияНоменклатуры" Тогда
+
+ НаборСвойств.НаборСвойствНоменклатуры = Истина;
+ НаборСвойств.Набор = НаборыСвойств.НаборСвойств;
+
+ ИначеЕсли ИмяШаблона = "ШаблонНаименованияДляПечатиХарактеристики"
+ Или ИмяШаблона = "ШаблонРабочегоНаименованияХарактеристики" Тогда
+
+ НаборСвойств.НаборСвойствХарактеристик = Истина;
+ НаборСвойств.Набор = НаборыСвойств.НаборСвойствХарактеристик;
+
+ Иначе
+
+ НаборСвойств.Набор = НаборыСвойств.НаборСвойствСерий;
+
+ КонецЕсли;
+
+ ДеревоОперандов = РаботаСФормулами.ПолучитьПустоеДеревоОперандов();
+
+ КорневаяСтрокаДерева = РаботаСФормулами.НоваяСтрокаДереваОперанда(ДеревоОперандов);
+ Если НаборСвойств.НаборСвойствНоменклатуры Тогда
+
+ КорневаяСтрокаДерева.Идентификатор = "Номенклатура";
+ КорневаяСтрокаДерева.Представление = НСтр("ru = 'Номенклатура'");
+ КорневаяСтрокаДерева.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
+
+ НаборОбщихСвойств = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
+
+ ИначеЕсли НаборСвойств.НаборСвойствХарактеристик Тогда
+
+ КорневаяСтрокаДерева.Идентификатор = "ХарактеристикаНоменклатуры";
+ КорневаяСтрокаДерева.Представление = НСтр("ru = 'Характеристика номенклатуры'");
+ КорневаяСтрокаДерева.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры");
+
+ НаборОбщихСвойств = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
+
+ Иначе
+
+ КорневаяСтрокаДерева.Идентификатор = "СерияНоменклатуры";
+ КорневаяСтрокаДерева.Представление = НСтр("ru = 'Серия номенклатуры'");
+ КорневаяСтрокаДерева.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры");
+
+ НаборОбщихСвойств = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
+
+ КонецЕсли;
+
+ КорневаяСтрокаДерева.РазрешаетсяВыборОперанда = Ложь;
+ КорневаяСтрокаДерева.ВключаетсяВИдентификатор = Ложь;
+ КорневаяСтрокаДерева.РазворачиватьДоРеквизитов = Истина;
+
+ ОграниченияРазвертки = РаботаСФормулами.ОграниченияРазверткиОперандов();
+ ОграниченияРазвертки.НаборыДополнительныхРеквизитов.Добавить(НаборСвойств.Набор);
+ ОграниченияРазвертки.НаборыДополнительныхРеквизитов.Добавить(НаборОбщихСвойств);
+ ОграниченияРазвертки.НеВыводимыеРеквизиты = "ВерсияДанных,УдалитьПодакцизныйТовар,ПодконтрольнаяПродукцияВЕТИС";
+
+ РаботаСФормулами.РазвернутьСтрокуОперанда(КорневаяСтрокаДерева, ОграниченияРазвертки);
+
+ Возврат ДеревоОперандов;
+
+КонецФункции
+
+// Заполняет соответствие операндов их типам.
+//
+// Параметры:
+// ДеревоОперандов - см. РаботаСФормулами.ПолучитьПустоеДеревоОперандов
+// Результат - Соответствие Из Строка
+//
+Процедура ПолучитьТипыОперандов(ДеревоОперандов, Результат) Экспорт
+
+ Для Каждого СтрокаДерева Из ДеревоОперандов.Строки Цикл
+
+ ПолучитьТипыОперандов(СтрокаДерева, Результат);
+
+ Если СтрокаДерева.РазрешаетсяВыборОперанда Тогда
+ Результат.Вставить(СтрокаДерева.Идентификатор, СтрокаДерева.ТипЗначения);
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+// Возвращает признак использования в системе настроек ведения учета уникальных штрихкодов по видам номенклатуры.
+//
+// Параметры:
+// ИспользоватьНеуникальныеШтрихкоды - Булево - признак использования в системе ведения учета неуникальных
+// штрихкодов номенклатуры.
+//
+// Возвращаемое значение:
+// Булево - Истина, в системе включены настройки ведения учета уникальных штрихкодов по видам номенклатуры.
+//
+Функция ЕстьУстановленныеНастройкиУникальностиШтрихкода(ИспользоватьНеуникальныеШтрихкоды) Экспорт
+
+ Запрос = Новый Запрос;
+ Запрос.Текст = ТекстЗапросаНастроекКонтроляУникальностиШтрихкода(ИспользоватьНеуникальныеШтрихкоды, Истина);
+
+ УстановитьПривилегированныйРежим(Истина);
+ РезультатЗапроса = Запрос.Выполнить();
+ УстановитьПривилегированныйРежим(Ложь);
+
+ Возврат Не РезультатЗапроса.Пустой();
+
+КонецФункции
+
+// Выполняет установку настроек уникальности штрихкода по умолчанию для элементов справочника.
+//
+// Параметры:
+// ИспользоватьНеуникальныеШтрихкоды - Булево - признак использования в системе ведения учета неуникальных
+// штрихкодов номенклатуры.
+Процедура УстановитьНастройкиУникальностиШтрихкодаПоУмолчанию(ИспользоватьНеуникальныеШтрихкоды) Экспорт
+
+ Запрос = Новый Запрос;
+ Запрос.Текст = ТекстЗапросаНастроекКонтроляУникальностиШтрихкода(ИспользоватьНеуникальныеШтрихкоды);
+
+ УстановитьПривилегированныйРежим(Истина);
+ РезультатЗапроса = Запрос.Выполнить();
+ УстановитьПривилегированныйРежим(Ложь);
+
+ Если РезультатЗапроса.Пустой() Тогда
+ Возврат;
+ КонецЕсли;
+
+ КоличествоДанныхКОбработке = 0;
+
+ ОписаниеЗамера = ОценкаПроизводительности.НачатьЗамерДлительнойОперации(
+ "Справочник.ВидыНоменклатуры.МодульМенеджера.УстановитьНастройкиУникальностиШтрихкодаПоУмолчанию");
+
+ ИмяСобытия = НСтр("ru = 'Обновление настроек реквизитов для контроля номенклатуры'", ОбщегоНазначения.КодОсновногоЯзыка());
+ ШаблонКомментария = НСтр("ru = 'Не удалось обновить настройки реквизитов для контроля номенклатуры для вида номенклатуры ""%1"", по причине: %2'");
+
+ Выборка = РезультатЗапроса.Выбрать();
+
+ Пока Выборка.Следующий() Цикл
+ КоличествоДанныхКОбработке = КоличествоДанныхКОбработке + 1;
+
+ НачатьТранзакцию();
+
+ Попытка
+ Блокировка = Новый БлокировкаДанных;
+ ЭлементБлокировки = Блокировка.Добавить("Справочник.ВидыНоменклатуры");
+ ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
+ ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
+ Блокировка.Заблокировать();
+
+ ВидНоменклатуры = Выборка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ВидыНоменклатуры -
+
+ Если ВидНоменклатуры <> Неопределено Тогда
+ НастройкаКонтроля = ВидНоменклатуры.РеквизитыДляКонтроляНоменклатуры.Найти("Штрихкод", "ИмяРеквизита");
+
+ Если НастройкаКонтроля <> Неопределено Тогда
+ НастройкаКонтроля.Уникален = Не ИспользоватьНеуникальныеШтрихкоды;
+ НастройкаКонтроля.ДоступностьУникален = ИспользоватьНеуникальныеШтрихкоды;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если ВидНоменклатуры.Модифицированность() Тогда
+ ВидНоменклатуры.Записать();
+ КонецЕсли;
+
+ ЗафиксироватьТранзакцию();
+ Исключение
+ ОтменитьТранзакцию();
+
+ ТекстСообщения = СтрШаблон(ШаблонКомментария,
+ Выборка.Ссылка,
+ ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+
+ ЗаписьЖурналаРегистрации(
+ ИмяСобытия,
+ УровеньЖурналаРегистрации.Предупреждение,
+ Метаданные.Справочники.ВидыНоменклатуры,
+ ,
+ ТекстСообщения);
+ КонецПопытки;
+ КонецЦикла;
+
+ ОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, КоличествоДанныхКОбработке);
+
+КонецПроцедуры
+
+// Добавляет переданные объекты в табличную части "ПолитикиУчетаСерий" видов номенклатуры.
+//
+// Параметры:
+// ДобавляемыеОбъекты - Массив Из СправочникСсылка.Склады, СправочникСсылка.СтруктураПредприятия - Которые необходимо добавить в табличную часть.
+//
+Процедура ДобавитьОбъектыВСоставПолитикУчетаСерий(ДобавляемыеОбъекты) Экспорт
+
+ НачатьТранзакцию();
+
+ Попытка
+
+ Блокировка = Новый БлокировкаДанных;
+ Блокировка.Добавить("Справочник.ВидыНоменклатуры");
+ Блокировка.Заблокировать();
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатуры.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | ВидыНоменклатуры.ИспользоватьСерии";
+
+ РезультатЗапроса = Запрос.Выполнить();
+ Выборка = ВыбратьПоСсылкам(РезультатЗапроса);
+
+ Пока Выборка.Следующий() Цикл
+
+ ВидНоменклатуры = Выборка.ПолучитьОбъект();
+
+ Для Каждого ДобавляемыйОбъект Из ДобавляемыеОбъекты Цикл
+ СтрокаПолитики = ВидНоменклатуры.ПолитикиУчетаСерий.Добавить();
+ СтрокаПолитики.ПолитикаУчетаСерий = ВидНоменклатуры.ПолитикаУчетаСерий;
+ СтрокаПолитики.Склад = ДобавляемыйОбъект;
+ КонецЦикла;
+
+ ВидНоменклатуры.ОбменДанными.Загрузка = Истина;
+ ВидНоменклатуры.Записать();
+
+ КонецЦикла;
+
+ ЗафиксироватьТранзакцию();
+
+ Исключение
+
+ ОтменитьТранзакцию();
+ ВызватьИсключение;
+
+ КонецПопытки;
+
+КонецПроцедуры
+
+// Удаляет переданные объекты из табличной части "ПолитикиУчетаСерий" видов номенклатуры
+//
+// Параметры:
+// УдаляемыеОбъекты - Массив Из СправочникСсылка.Склады, СправочникСсылка.СтруктураПредприятия - Которые необходимо удалить из табличной части.
+//
+Процедура УдалитьОбъектыИзПолитикУчетаСерий(УдаляемыеОбъекты) Экспорт
+
+ НачатьТранзакцию();
+
+ Попытка
+
+ Блокировка = Новый БлокировкаДанных;
+ Блокировка.Добавить("Справочник.ВидыНоменклатуры");
+ Блокировка.Заблокировать();
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ПолитикиУчетаСерий.Ссылка КАК Ссылка,
+ | ПолитикиУчетаСерий.НомерСтроки КАК НомерСтроки
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
+ |ГДЕ
+ | ПолитикиУчетаСерий.Склад В (&УдаляемыеОбъекты)
+ |
+ |УПОРЯДОЧИТЬ ПО
+ | Ссылка УБЫВ,
+ | НомерСтроки УБЫВ";
+
+ Запрос.УстановитьПараметр("УдаляемыеОбъекты", УдаляемыеОбъекты);
+ РезультатЗапроса = Запрос.Выполнить();
+
+ ВыборкаСтрок = РезультатЗапроса.Выбрать();
+ УдаляемыеСтрокиВидовНоменклатуры = Новый Соответствие;
+ УдаляемыеСтроки = Неопределено;
+ ТекущаяСсылка = ПустаяСсылка();
+
+ Пока ВыборкаСтрок.Следующий() Цикл
+
+ Если ТекущаяСсылка <> ВыборкаСтрок.Ссылка Тогда
+
+ ТекущаяСсылка = ВыборкаСтрок.Ссылка;
+
+ УдаляемыеСтроки = Новый Массив;
+ УдаляемыеСтрокиВидовНоменклатуры.Вставить(ТекущаяСсылка, УдаляемыеСтроки);
+
+ КонецЕсли;
+
+ УдаляемыеСтроки.Добавить(ВыборкаСтрок.НомерСтроки);
+
+ КонецЦикла;
+
+ ВыборкаОбъектов = ВыбратьПоСсылкам(РезультатЗапроса);
+ Пока ВыборкаОбъектов.Следующий() Цикл
+
+ ВидНоменклатуры = ВыборкаОбъектов.ПолучитьОбъект();
+ Для Каждого НомерСтроки Из УдаляемыеСтрокиВидовНоменклатуры.Получить(ВидНоменклатуры.Ссылка) Цикл
+ ВидНоменклатуры.ПолитикиУчетаСерий.Удалить(НомерСтроки - 1);
+ КонецЦикла;
+
+ ВидНоменклатуры.ОбменДанными.Загрузка = Истина;
+ ВидНоменклатуры.Записать();
+
+ КонецЦикла;
+
+ ЗафиксироватьТранзакцию();
+
+ Исключение
+
+ ОтменитьТранзакцию();
+ ВызватьИсключение;
+
+ КонецПопытки;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецЕсли
+
+#Область ОбработчикиСобытий
+
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
+ НоменклатураВызовСервера.ВидыНоменклатурыОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+#КонецЕсли
+
+Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
+
+ МультиязычностьКлиентСервер.ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
+
+ МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+#Область СлужебныеПроцедурыИФункции
+
+#Область ОбновлениеИнформационнойБазы
+
+// Вызывается после окончания загрузки данных из локальной версии
+// в область данных сервиса или наоборот.
+//
+Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатуры.Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | (ВидыНоменклатуры.ЗапретРедактированияНаименованияДляПечатиНоменклатуры
+ | ИЛИ ВидыНоменклатуры.ЗапретРедактированияНаименованияДляПечатиХарактеристики
+ | ИЛИ ВидыНоменклатуры.ЗапретРедактированияРабочегоНаименованияНоменклатуры
+ | ИЛИ ВидыНоменклатуры.ЗапретРедактированияРабочегоНаименованияХарактеристики)";
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Пока Выборка.Следующий() Цикл
+
+ СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ВидыНоменклатуры
+
+ СправочникОбъект.ЗапретРедактированияНаименованияДляПечатиНоменклатуры = Ложь;
+ СправочникОбъект.ЗапретРедактированияНаименованияДляПечатиХарактеристики = Ложь;
+ СправочникОбъект.ЗапретРедактированияРабочегоНаименованияНоменклатуры = Ложь;
+ СправочникОбъект.ЗапретРедактированияРабочегоНаименованияХарактеристики = Ложь;
+
+ СправочникОбъект.Записать();
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+// см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления
+//
+Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
+
+ Обработчик = Обработчики.Добавить();
+ Обработчик.Процедура = "Справочники.ВидыНоменклатуры.ОбработатьДанныеДляПереходаНаНовуюВерсию";
+ Обработчик.Версия = "11.5.27.41";
+ Обработчик.РежимВыполнения = "Отложенно";
+ Обработчик.Идентификатор = Новый УникальныйИдентификатор("d8496097-6001-4bb8-8c09-ce139d4a9f06");
+ Обработчик.Многопоточный = Истина;
+ Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.ВидыНоменклатуры.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
+ Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
+
+ СписокОписаний = Новый Массив;
+ СписокОписаний.Добавить(НСтр("ru = 'Обновление справочника ""Виды номенклатуры"":'"));
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ Метаданные.Справочники.ВидыНоменклатуры.Реквизиты.УдалитьКодОКВЭД2.Имя,
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ Метаданные.Справочники.ВидыНоменклатуры.Реквизиты.УдалитьПодакцизныйТовар.Имя,
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ //++ Локализация
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ Метаданные.Справочники.ВидыНоменклатуры.Реквизиты.ПодконтрольнаяПродукцияВЕТИС.Имя,
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ НСтр("ru = 'УдалитьТабачнаяПродукция'"),
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ НСтр("ru = 'УдалитьОбувнаяПродукция'"),
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ СписокОписаний.Добавить(НСтр("ru = '- Очистка особенности учета номенклатуры, подконтрольной государственным информационным системам;'"));
+ //-- Локализация
+ СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника.'"));
+
+ Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
+ Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Обычный;
+
+ Читаемые = Новый Массив;
+ Читаемые.Добавить(Метаданные.Справочники.ВидыНоменклатуры.ПолноеИмя());
+ Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
+
+ Изменяемые = Новый Массив;
+ Изменяемые.Добавить(Метаданные.Справочники.ВидыНоменклатуры.ПолноеИмя());
+ Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
+
+ Блокируемые = Новый Массив;
+ Блокируемые.Добавить(Метаданные.Справочники.ВидыНоменклатуры.ПолноеИмя());
+ Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
+
+КонецПроцедуры
+
+// Параметры:
+// Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке
+//
+Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
+
+ ПараметрыВыборки = Параметры.ПараметрыВыборки;
+ ПараметрыВыборки.ПолныеИменаОбъектов = ПустаяСсылка().Метаданные().ПолноеИмя();
+ ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки();
+
+ Запрос = Новый Запрос;
+ ЧастиЗапроса = Новый Массив;
+
+ ЧастиЗапроса.Добавить(
+ "ВЫБРАТЬ
+ | ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляНоменклатуры КАК ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры
+ |ГДЕ
+ | ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.ИмяРеквизита = ""УдалитьКодОКВЭД2""
+ | ИЛИ ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.ИмяРеквизита = ""ПодакцизныйТовар""
+ | ИЛИ ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.ИмяРеквизита = ""УдалитьПодакцизныйТовар""
+ | ИЛИ ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.ИмяРеквизита = ""ПодконтрольнаяПродукцияВЕТИС""
+ | ИЛИ ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.ИмяРеквизита = ""ОбувнаяПродукция""
+ | ИЛИ ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.ИмяРеквизита = ""УдалитьОбувнаяПродукция""
+ | ИЛИ ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.ИмяРеквизита = ""ТабачнаяПродукция""
+ | ИЛИ ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.ИмяРеквизита = ""УдалитьТабачнаяПродукция""
+ |");
+
+ ИспользуютсяДопЯзыки = Ложь;
+ Для Каждого ИспользуетсяДопЯзык Из МультиязычностьСервер.СведенияОЯзыках().Используется Цикл
+
+ Если ИспользуетсяДопЯзык.Значение = Истина Тогда
+
+ ИспользуютсяДопЯзыки = Истина;
+ Прервать;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если ИспользуютсяДопЯзыки Тогда
+
+ ЧастиЗапроса.Добавить(
+ "ВЫБРАТЬ
+ | ВидыНоменклатуры.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | НЕ ВидыНоменклатуры.Наименование = """"
+ | И ВидыНоменклатуры.НаименованиеЯзык1 = """"
+ |
+ |ОБЪЕДИНИТЬ
+ |
+ |ВЫБРАТЬ
+ | ВидыНоменклатуры.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | НЕ ВидыНоменклатуры.Наименование = """"
+ | И ВидыНоменклатуры.НаименованиеЯзык2 = """"");
+
+ КонецЕсли;
+
+ //++ Локализация
+ ЧастиЗапроса.Добавить("
+ |ВЫБРАТЬ
+ | ВидыНоменклатуры.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | ВидыНоменклатуры.ОсобенностьУчета В (&ОсобенностиУчета)");
+
+ Запрос.УстановитьПараметр("ОсобенностиУчета", ИнтеграцияИСУТ.ОсобенностиУчетаИС());
+ //-- Локализация
+
+ Запрос.Текст = Запрос.Текст + СтрСоединить(ЧастиЗапроса,
+ "
+ |
+ |ОБЪЕДИНИТЬ ВСЕ
+ |
+ |");
+
+ ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
+
+КонецПроцедуры
+
+// Обработчик обновления
+//
+// Параметры:
+// Параметры - См. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки
+//
+Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
+
+ Параметры.ОбработкаЗавершена = Ложь;
+
+ ПолноеИмяОбъекта = ПустаяСсылка().Метаданные().ПолноеИмя();
+
+ ОбновляемыеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры);
+
+ Если ОбновляемыеДанные.Количество() = 0 Тогда
+
+ Параметры.ОбработкаЗавершена =
+ ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
+ Возврат;
+
+ КонецЕсли;
+
+ ОбъектовОбработано = 0;
+ ПроблемныхОбъектов = 0;
+ ИсключенияПриОбновлении = Новый Массив;
+
+ ИспользуютсяДопЯзыки = Ложь;
+ Для Каждого ИспользуетсяДопЯзык Из МультиязычностьСервер.СведенияОЯзыках().Используется Цикл
+
+ Если ИспользуетсяДопЯзык.Значение = Истина Тогда
+
+ ИспользуютсяДопЯзыки = Истина;
+ Прервать;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Запрос = Новый Запрос;
+
+ СписокОписаний = Новый Массив;
+ СписокОписаний.Добавить(НСтр("ru = 'Не удалось обработать справочник ""Виды номенклатуры"" по обработчику:'"));
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ Метаданные.Справочники.ВидыНоменклатуры.Реквизиты.УдалитьКодОКВЭД2.Имя,
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ Метаданные.Справочники.ВидыНоменклатуры.Реквизиты.УдалитьПодакцизныйТовар.Имя,
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ //++ Локализация
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ Метаданные.Справочники.ВидыНоменклатуры.Реквизиты.ПодконтрольнаяПродукцияВЕТИС.Имя,
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ НСтр("ru = 'УдалитьТабачнаяПродукция'"),
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ СписокОписаний.Добавить(СтрШаблон(НСтр("ru = '- удаление реквизита ""%1"" из табличной части ""%2"";'"),
+ НСтр("ru = 'УдалитьОбувнаяПродукция'"),
+ Метаданные.Справочники.ВидыНоменклатуры.ТабличныеЧасти.РеквизитыДляКонтроляНоменклатуры.Представление()));
+ СписокОписаний.Добавить(НСтр("ru = '- Очистка особенности учета номенклатуры, подконтрольной государственным информационным системам;'"));
+
+ Запрос.УстановитьПараметр("ОсобенностиУчета", ИнтеграцияИСУТ.ОсобенностиУчетаИС());
+ //-- Локализация
+ СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника.'"));
+
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ДанныеДляОбновления.Ссылка КАК Ссылка
+ |ПОМЕСТИТЬ ТаблицаЭлементов
+ |ИЗ
+ | &ДанныеДляОбновления КАК ДанныеДляОбновления
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | ТаблицаЭлементов.Ссылка КАК Ссылка,
+ | ДанныеСправочника.ВерсияДанных КАК ВерсияДанных,
+ | ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.ОтображатьПриСоздании, Ложь) КАК ОтображатьПриСозданииУдалитьКодОКВЭД2,
+ | ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.ЗаполнятьОбязательно, Ложь) КАК ЗаполнятьОбязательноУдалитьКодОКВЭД2,
+ | ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.Уникален, Ложь) КАК УникаленУдалитьКодОКВЭД2,
+ | ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.ОтображатьПриСоздании, Ложь) КАК ОтображатьПриСозданииКодОКВЭД2,
+ | ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.ЗаполнятьОбязательно, Ложь) КАК ЗаполнятьОбязательноКодОКВЭД2,
+ //++ Локализация
+ | ЕСТЬNULL(ДанныеСправочника.ОсобенностьУчета В (&ОсобенностиУчета), ЛОЖЬ) КАК ТребуетсяОбработкаОсобенностиУчета,
+ //-- Локализация
+ | ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.Уникален, Ложь) КАК УникаленКодОКВЭД2
+ |ИЗ
+ | ТаблицаЭлементов КАК ТаблицаЭлементов
+ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ДанныеСправочника
+ | ПО (ТаблицаЭлементов.Ссылка = ДанныеСправочника.Ссылка)
+ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляНоменклатуры КАК ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2
+ | ПО (ТаблицаЭлементов.Ссылка = ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.Ссылка)
+ | И (ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.ИмяРеквизита = ""УдалитьКодОКВЭД2"")
+ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляНоменклатуры КАК ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2
+ | ПО (ТаблицаЭлементов.Ссылка = ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.Ссылка)
+ | И (ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.ИмяРеквизита = ""КодОКВЭД2"")
+ |";
+
+ Запрос.УстановитьПараметр("ДанныеДляОбновления", ОбновляемыеДанные);
+
+ Справочник = Запрос.Выполнить().Выбрать();
+
+ Пока Справочник.Следующий() Цикл
+
+ ПричинаИсключения = 0;
+ Рекомендация = "";
+
+ НачатьТранзакцию();
+
+ Попытка
+
+ ПричинаИсключения = 1; // Блокировка
+
+ Блокировка = Новый БлокировкаДанных;
+
+ ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
+ ЭлементБлокировки.УстановитьЗначение("Ссылка", Справочник.Ссылка);
+ ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
+
+ Блокировка.Заблокировать();
+
+ СправочникОбъект = ОбновлениеИнформационнойБазыУТ.ПроверитьПолучитьОбъект(
+ Справочник.Ссылка, Справочник.ВерсияДанных, Параметры.Очередь); // СправочникОбъект
+
+ ПричинаИсключения = 2; // ПлохиеДанные
+ Рекомендация = НСтр("ru = 'Проверьте данные справочника вручную.'");
+
+ ОбъектИзменен = Ложь;
+
+ Если СправочникОбъект <> Неопределено Тогда
+
+ #Область ОбработатьУдалениеРеквизитаИзТабличнойЧастиИЗаполнениеМультиязычныхРеквизитов
+ Если (Не Справочник.ОтображатьПриСозданииКодОКВЭД2
+ И Не Справочник.ЗаполнятьОбязательноКодОКВЭД2
+ И Не Справочник.УникаленКодОКВЭД2)
+ И (Не Справочник.ОтображатьПриСозданииУдалитьКодОКВЭД2
+ Или Не Справочник.ЗаполнятьОбязательноУдалитьКодОКВЭД2
+ Или Не Справочник.УникаленУдалитьКодОКВЭД2) Тогда
+
+ НайденныеСтроки = СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("ИмяРеквизита", "КодОКВЭД2"));
+ Если НайденныеСтроки.Количество() > 0 Тогда
+
+ НайденныеСтроки[0].ОтображатьПриСоздании = Справочник.ОтображатьПриСозданииУдалитьКодОКВЭД2;
+ НайденныеСтроки[0].ЗаполнятьОбязательно = Справочник.ЗаполнятьОбязательноУдалитьКодОКВЭД2;
+ НайденныеСтроки[0].Уникален = Справочник.УникаленУдалитьКодОКВЭД2;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ НайденныеСтроки = СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("ИмяРеквизита", "УдалитьКодОКВЭД2"));
+ Если НайденныеСтроки.Количество() > 0 Тогда
+
+ СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.Удалить(НайденныеСтроки[0]);
+
+ КонецЕсли;
+
+ НайденныеСтроки = СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("ИмяРеквизита", "ПодакцизныйТовар"));
+ Если НайденныеСтроки.Количество() > 0 Тогда
+
+ СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.Удалить(НайденныеСтроки[0]);
+
+ КонецЕсли;
+
+ НайденныеСтроки = СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("ИмяРеквизита", "ПодконтрольнаяПродукцияВЕТИС"));
+ Если НайденныеСтроки.Количество() > 0 Тогда
+
+ СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.Удалить(НайденныеСтроки[0]);
+
+ КонецЕсли;
+
+ НайденныеСтроки = СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("ИмяРеквизита", "УдалитьТабачнаяПродукция"));
+ Если НайденныеСтроки.Количество() > 0 Тогда
+
+ СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.Удалить(НайденныеСтроки[0]);
+
+ КонецЕсли;
+
+ НайденныеСтроки = СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("ИмяРеквизита", "УдалитьОбувнаяПродукция"));
+ Если НайденныеСтроки.Количество() > 0 Тогда
+
+ СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.Удалить(НайденныеСтроки[0]);
+
+ КонецЕсли;
+
+ Если ИспользуютсяДопЯзыки Тогда
+
+ Если Не ЗначениеЗаполнено(СправочникОбъект.НаименованиеЯзык1) Тогда
+
+ СправочникОбъект.НаименованиеЯзык1 = СправочникОбъект.Наименование;
+
+ КонецЕсли;
+
+ Если Не ЗначениеЗаполнено(СправочникОбъект.НаименованиеЯзык2) Тогда
+
+ СправочникОбъект.НаименованиеЯзык2 = СправочникОбъект.Наименование;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ #КонецОбласти
+
+ //++ Локализация
+ #Область ПереходНаКонструкторНастроекИС
+ Если Справочник.ТребуетсяОбработкаОсобенностиУчета Тогда
+ СправочникОбъект.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета;
+ КонецЕсли;
+ #КонецОбласти
+ //-- Локализация
+
+ ОбъектИзменен = Истина;
+
+ КонецЕсли;
+
+ ПричинаИсключения = 3; // Запись
+
+ Если ОбъектИзменен Тогда
+ ОбновлениеИнформационнойБазы.ЗаписатьДанные(СправочникОбъект);
+ Иначе
+ ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Справочник.Ссылка);
+ КонецЕсли;
+
+ ОбъектовОбработано = ОбъектовОбработано + 1;
+ ЗафиксироватьТранзакцию();
+
+ Исключение
+
+ ОтменитьТранзакцию();
+
+ ПроблемныхОбъектов = ПроблемныхОбъектов + 1;
+ ОбновлениеИнформационнойБазыУТ.СообщитьОНеудачнойОбработке(ИнформацияОбОшибке(), Справочник.Ссылка);
+
+ Если ПричинаИсключения = 2 Тогда
+
+ ОписаниеПроблемы = ОбновлениеИнформационнойБазыУТ.ПроблемаСДанными(
+ Справочник.Ссылка, Рекомендация, ИнформацияОбОшибке());
+ ИсключенияПриОбновлении.Добавить(ОписаниеПроблемы);
+
+ ИначеЕсли ПричинаИсключения = 3 Тогда
+
+ ОбновлениеИнформационнойБазыУТ.ЗаписатьПлохиеДанные(
+ ИсключенияПриОбновлении, ОбъектовОбработано, Параметры);
+ ВызватьИсключение СтрСоединить(СписокОписаний, Символы.ПС);
+
+ КонецЕсли;
+
+ КонецПопытки;
+
+ КонецЦикла;
+
+ Параметры.ОбработкаЗавершена =
+ ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Прочее
+
+// Выполняет обработку обновления связей
+//
+// Параметры:
+// ВидНоменклатуры - СправочникОбъект.ВидыНоменклатуры - Обрабатываемый объект.
+Процедура ОтработатьЛогикуСвязиРеквизитов(ВидНоменклатуры) Экспорт
+
+ ОсобенностьУчетаИлиКлючВидовПродукции = НоменклатураЛокализация.ОсобенностьУчетаИлиКлючВидовПродукции(ВидНоменклатуры);
+
+ Если ТипЗнч(ОсобенностьУчетаИлиКлючВидовПродукции) = Тип("ПеречислениеСсылка.ОсобенностиУчетаНоменклатуры") Тогда
+ РеквизитыПризнаковОсобенностейУчета = Справочники.Номенклатура.РеквизитыПризнаковОсобенностейУчета(Метаданные.Справочники.ВидыНоменклатуры);
+ Для Каждого ИмяРеквизита Из РеквизитыПризнаковОсобенностейУчета Цикл
+ ВидНоменклатуры[ИмяРеквизита] = ОсобенностьУчетаИлиКлючВидовПродукции =
+ ПредопределенноеЗначение("Перечисление.ОсобенностиУчетаНоменклатуры." + ИмяРеквизита);
+ КонецЦикла;
+ КонецЕсли;
+
+ Если Не ЗначениеЗаполнено(ОсобенностьУчетаИлиКлючВидовПродукции) Тогда
+ Если ВидНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга Тогда
+ НоменклатураЛокализация.УстановитьОсобенностьУчетаИКлючВидовПродукции(
+ ВидНоменклатуры, Перечисления.ОсобенностиУчетаНоменклатуры.ОрганизациейПродавцом);
+ Иначе
+ НоменклатураЛокализация.УстановитьОсобенностьУчетаИКлючВидовПродукции(
+ ВидНоменклатуры, Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета);
+ КонецЕсли;
+ КонецЕсли;
+
+ ЗначенияРеквизитов = ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностиУчета(ОсобенностьУчетаИлиКлючВидовПродукции);
+ Если ЗначенияРеквизитов <> Неопределено Тогда
+ ЗаполнитьЗначенияСвойств(ВидНоменклатуры, ЗначенияРеквизитов);
+ КонецЕсли;
+
+ ПроверитьПоТипуИОсобенностиНоменклатуруОчиститьВладельца(ВидНоменклатуры, "ВладелецХарактеристик");
+ ПроверитьПоТипуИОсобенностиНоменклатуруОчиститьВладельца(ВидНоменклатуры, "ВладелецСерий");
+ ПроверитьПоТипуИОсобенностиНоменклатуруОчиститьВладельца(ВидНоменклатуры, "ВладелецТоварныхКатегорий");
+
+ ИспользованиеРеквизитов = Справочники.Номенклатура.ИспользованиеЭлементов(ВидНоменклатуры,Ложь,Истина);
+ МетаданныеОбъекта = Метаданные.Справочники.ВидыНоменклатуры;
+
+ Для каждого КлючЗначение Из ИспользованиеРеквизитов Цикл
+ Если Не КлючЗначение.Значение Тогда
+ Если МетаданныеОбъекта.Реквизиты.Найти(КлючЗначение.Ключ) <> Неопределено Тогда
+ ВидНоменклатуры[КлючЗначение.Ключ] = Неопределено;
+ КонецЕсли;
+ КонецЕсли;
+ КонецЦикла;
+
+ Если Не ВидНоменклатуры.ИспользоватьХарактеристики Тогда
+
+ ВидНоменклатуры.ИспользованиеХарактеристик = ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать");
+
+ ВидНоменклатуры.ШаблонНаименованияДляПечатиХарактеристики = "";
+ ВидНоменклатуры.ШаблонРабочегоНаименованияХарактеристики = "";
+
+ ВидНоменклатуры.ЗапретРедактированияНаименованияДляПечатиХарактеристики = Ложь;
+ ВидНоменклатуры.ЗапретРедактированияРабочегоНаименованияХарактеристики = Ложь;
+ ВидНоменклатуры.ВладелецХарактеристик = Неопределено;
+
+ КонецЕсли;
+
+ Если ВидНоменклатуры.ИспользованиеХарактеристик <> Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда
+ ВидНоменклатуры.ВладелецХарактеристик = ПустаяСсылка();
+ КонецЕсли;
+
+ Если Не ВидНоменклатуры.ИспользоватьСерии Тогда
+
+ ЗначенияРеквизитовПоУмолчанию = ОбщегоНазначенияУТ.ЗначенияРеквизитовОбъектаПоУмолчанию(ПустаяСсылка(),
+ РеквизитыНастройкиУказанияСерий());
+
+ ЗаполнитьЗначенияСвойств(ВидНоменклатуры, ЗначенияРеквизитовПоУмолчанию);
+
+ ВидНоменклатуры.ПолитикаУчетаСерий = Справочники.ПолитикиУчетаСерий.СерииНеИспользуются;
+ ВидНоменклатуры.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
+ ВидНоменклатуры.ПолитикиУчетаСерий.Очистить();
+
+ Иначе
+
+ Если ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ И (ТипЗнч(ВидНоменклатуры) = Тип("СправочникОбъект.ВидыНоменклатуры")
+ И Не ВидНоменклатуры.ДополнительныеСвойства.Свойство("ПропуститьЗаполнениеТЧПолитикиУчетаСерий")) Тогда
+
+ РеквизитыВладельцаСерий = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидНоменклатуры.ВладелецСерий,
+ РеквизитыНастройкиУказанияСерий());
+
+ ЗаполнитьЗначенияСвойств(ВидНоменклатуры, РеквизитыВладельцаСерий,,"ВладелецСерий,НастройкиСерийБерутсяИзДругогоВидаНоменклатуры");
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатурыПолитикиУчетаСерий.Склад,
+ | ВидыНоменклатурыПолитикиУчетаСерий.ПолитикаУчетаСерий
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ВидыНоменклатурыПолитикиУчетаСерий
+ |ГДЕ
+ | ВидыНоменклатурыПолитикиУчетаСерий.Ссылка = &ВладелецСерий";
+
+ Запрос.УстановитьПараметр("ВладелецСерий", ВидНоменклатуры.ВладелецСерий);
+
+ ВидНоменклатуры.ПолитикиУчетаСерий.Загрузить(Запрос.Выполнить().Выгрузить());
+
+ Иначе
+
+ НастройкиИспользованияСерий = НастройкиИспользованияСерий(ВидНоменклатуры);
+
+ Для Каждого Описание Из НастройкиИспользованияСерий.ОписанияИспользованияРеквизитовСерии Цикл
+
+ Если Не ПустаяСтрока(Описание.ОсобенностиУчета) Тогда
+
+ ИменаОсобенностей = СтрРазделить(Описание.ОсобенностиУчета, ",");
+
+ НадоОчистить = Истина;
+
+ Для Каждого ИмяОсобенности Из ИменаОсобенностей Цикл
+
+ Если ВидНоменклатуры.ОсобенностьУчета = ПредопределенноеЗначение("Перечисление.ОсобенностиУчетаНоменклатуры." + ИмяОсобенности) Тогда
+ НадоОчистить = Ложь;
+ Прервать;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если НадоОчистить Тогда
+ ВидНоменклатуры[Описание.ИмяНастройки] = Ложь;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ВидНоменклатуры.ИспользоватьКоличествоСерии = (ВидНоменклатуры.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ПартияТоваров);
+
+ Если ВидНоменклатуры.НастройкаИспользованияСерий <> Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда
+ ВидНоменклатуры.ИспользоватьRFIDМеткиСерии = Ложь;
+ КонецЕсли;
+
+ Если Не ВидНоменклатуры.ИспользоватьСрокГодностиСерии
+ И Не ВидНоменклатуры.ИспользоватьДатуПроизводстваСерии Тогда
+ ВидНоменклатуры.ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.ПустаяСсылка();
+ ВидНоменклатуры.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.ПустаяСсылка();
+ Иначе
+ Если Не ЗначениеЗаполнено(ВидНоменклатуры.ТочностьУказанияСрокаГодностиСерии) Тогда
+ ВидНоменклатуры.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоДней;
+ КонецЕсли;
+ ВидНоменклатуры.ЕдиницаИзмеренияСрокаГодности = ЕдиницаИзмеренияСрокаГодности(
+ ВидНоменклатуры.ТочностьУказанияСрокаГодностиСерии);
+ КонецЕсли;
+
+ Если Не ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+ ВидНоменклатуры.ВладелецСерий = ПустаяСсылка();
+ КонецЕсли;
+
+ Если Не ПредусмотренаАвтоматическаяГенерацияСерий(НастройкиИспользованияСерий) Тогда
+ ВидНоменклатуры.АвтоматическиГенерироватьСерии = Ложь;
+ КонецЕсли;
+
+ Если ВидНоменклатуры.АвтоматическиГенерироватьСерии Тогда
+ ВидНоменклатуры.ИспользоватьНомерСерии = Ложь;
+ КонецЕсли;
+
+ ПараметрыОтбораПолитики = НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий();
+ ЗаполнитьЗначенияСвойств(ПараметрыОтбораПолитики, ВидНоменклатуры);
+
+ Если ЗначениеЗаполнено(ВидНоменклатуры.ПолитикаУчетаСерий)
+ И ВидНоменклатуры.ПолитикаУчетаСерий <> Справочники.ПолитикиУчетаСерий.СерииНеИспользуются Тогда
+
+ ОтборПолитик = НоменклатураСервер.ОтборПолитикУчетаСерийПоПараметрам(ПараметрыОтбораПолитики);
+
+ Если Не ОбщегоНазначенияУТ.СсылкаСоответствуетОтбору(ВидНоменклатуры.ПолитикаУчетаСерий, ОтборПолитик) Тогда
+ ВидНоменклатуры.ПолитикаУчетаСерий = Справочники.ПолитикиУчетаСерий.СерииНеИспользуются;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Для Каждого СтрТабл Из ВидНоменклатуры.ПолитикиУчетаСерий Цикл
+
+ Если СтрТабл.ПолитикаУчетаСерий <> Справочники.ПолитикиУчетаСерий.СерииНеИспользуются Тогда
+
+ ПараметрыОтбораПолитики.Склад = СтрТабл.Склад;
+
+ ОтборПолитик = НоменклатураСервер.ОтборПолитикУчетаСерийПоПараметрам(ПараметрыОтбораПолитики);
+
+ Если Не ОбщегоНазначенияУТ.СсылкаСоответствуетОтбору(СтрТабл.ПолитикаУчетаСерий, ОтборПолитик) Тогда
+ СтрТабл.ПолитикаУчетаСерий = ВидНоменклатуры.ПолитикаУчетаСерий;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Если Не ВидНоменклатуры.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
+ ВидНоменклатуры.ВладелецТоварныхКатегорий = ПустаяСсылка();
+ КонецЕсли;
+
+ ЗаполнитьРеквизитыДляКонтроля(ВидНоменклатуры, "Номенклатура");
+ ЗаполнитьДопРеквизитыДляКонтроляИОтбора(ВидНоменклатуры, "Номенклатура");
+
+ ЗаполнитьРеквизитыДляКонтроля(ВидНоменклатуры, "ХарактеристикиНоменклатуры");
+ ЗаполнитьДопРеквизитыДляКонтроляИОтбора(ВидНоменклатуры, "ХарактеристикиНоменклатуры");
+
+ ЗаполнитьДопРеквизитыДляКонтроляИОтбора(ВидНоменклатуры, "СерииНоменклатуры");
+
+ КонтролироватьДублиНоменклатуры = ВидНоменклатуры.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("Уникален", Истина)).Количество() > 0;
+
+КонецПроцедуры
+
+// Выполняет заполнение реквизитов по умолчанию
+//
+// Параметры:
+// ВидНоменклатуры - СправочникОбъект.ВидыНоменклатуры - Обрабатываемый объект.
+//
+Процедура ЗаполнитьРеквизитыПоУмолчанию(ВидНоменклатуры) Экспорт
+
+ Если Не ЗначениеЗаполнено(ВидНоменклатуры.ГруппаДоступа) Тогда
+ ВидНоменклатуры.ГруппаДоступа = Справочники.ГруппыДоступаНоменклатуры.ПолучитьГруппуДоступаПоУмолчанию(ВидНоменклатуры);
+ КонецЕсли;
+
+ Если Не ЗначениеЗаполнено(ВидНоменклатуры.ТипНоменклатуры)
+ И Не Перечисления.ОсобенностиУчетаНоменклатуры.ОднаИзОсобенностейВключена() Тогда
+ // Если нет никаких особенностей учета номенклатуры, то устанавливает тип "Товар" по-умолчанию,
+ // в противном случае пользователь должен в явном виде указать тип.
+ ВидНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
+ КонецЕсли;
+
+ Если ПустаяСтрока(ВидНоменклатуры.ШаблонНаименованияДляПечатиНоменклатуры) Тогда
+ ВидНоменклатуры.ШаблонНаименованияДляПечатиНоменклатуры = "[Наименование]";
+ КонецЕсли;
+
+ ОсобенностьУчетаИлиКлючВидовПродукции = НоменклатураЛокализация.ОсобенностьУчетаИлиКлючВидовПродукции(ВидНоменклатуры);
+
+ ЗначенияРеквизитов = ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностиУчета(ОсобенностьУчетаИлиКлючВидовПродукции);
+ Если ЗначенияРеквизитов <> Неопределено Тогда
+ ЗаполнитьЗначенияСвойств(ВидНоменклатуры, ЗначенияРеквизитов);
+ КонецЕсли;
+
+ Если Не ЗначениеЗаполнено(ВидНоменклатуры.ВариантОформленияПродажи) Тогда
+ ВидНоменклатуры.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
+ КонецЕсли;
+
+ Если ВидНоменклатуры.ИспользоватьСерии Тогда
+
+ Если Не ЗначениеЗаполнено(ВидНоменклатуры.НастройкаИспользованияСерий) Тогда
+ ВидНоменклатуры.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ПартияТоваров;
+ КонецЕсли;
+
+ Если Не ВидНоменклатуры.ИспользоватьНомерСерии
+ И Не ВидНоменклатуры.ИспользоватьСрокГодностиСерии Тогда
+ ВидНоменклатуры.ИспользоватьНомерСерии = Истина;
+ КонецЕсли;
+
+ ТекстЗапроса =
+ "ВЫБРАТЬ ПЕРВЫЕ 2
+ | ВидыНоменклатуры.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | НЕ ВидыНоменклатуры.ПометкаУдаления
+ | И ВидыНоменклатуры.Ссылка <> &Ссылка
+ | И &ТекстУсловияОтбора";
+
+ Запрос = Новый Запрос;
+ Запрос.УстановитьПараметр("Ссылка", ВидНоменклатуры.Ссылка);
+
+ ОтборВладельцаСерий = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(ВидНоменклатуры, "ВладелецСерий");
+
+ Если ОтборВладельцаСерий.Количество() > 0 Тогда
+ МассивТекстовУсловия = Новый Массив;
+
+ Для Каждого КлючЗначение Из ОтборВладельцаСерий Цикл
+
+ Если ТипЗнч(КлючЗначение.Значение) = Тип("Массив")
+ Или ТипЗнч(КлючЗначение.Значение) = Тип("ФиксированныйМассив") Тогда
+ МассивТекстовУсловия.Добавить("ВидыНоменклатуры." + КлючЗначение.Ключ + " В(&" +КлючЗначение.Ключ + ")");
+ Иначе
+ МассивТекстовУсловия.Добавить("ВидыНоменклатуры." + КлючЗначение.Ключ + " = &" +КлючЗначение.Ключ);
+ КонецЕсли;
+ Запрос.УстановитьПараметр(КлючЗначение.Ключ, КлючЗначение.Значение);
+
+ КонецЦикла;
+
+ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияОтбора", СтрСоединить(МассивТекстовУсловия, " И "));
+ Иначе
+ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияОтбора", "ИСТИНА");
+ КонецЕсли;
+
+ Запрос.Текст = ТекстЗапроса;
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Если Выборка.Количество() = 1 Тогда
+
+ Выборка.Следующий();
+ ВидНоменклатуры.ВладелецСерий = Выборка.Ссылка;
+ ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина;
+
+ Иначе
+
+ ВидНоменклатуры.ВладелецСерий = Неопределено;
+ ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Ложь;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Если ВидНоменклатуры.ИспользоватьХарактеристики Тогда
+
+ Если Не ЗначениеЗаполнено(ВидНоменклатуры.ИспользованиеХарактеристик)
+ Или ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать Тогда
+ ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры;
+ КонецЕсли;
+
+ Если ПустаяСтрока(ВидНоменклатуры.ШаблонНаименованияДляПечатиХарактеристики) Тогда
+ ВидНоменклатуры.ШаблонНаименованияДляПечатиХарактеристики = "[Наименование]";
+ КонецЕсли;
+ КонецЕсли;
+
+ УстановитьРеквизитыЦенообразованияПоУмолчанию(ВидНоменклатуры);
+
+ НоменклатураЛокализация.ЗаполнитьРеквизитыВидаНоменклатурыПоУмолчанию(ВидНоменклатуры);
+
+КонецПроцедуры
+
+Функция ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностиУчета(ОсобенностьУчетаИлиКлючВидовПродукции) Экспорт
+
+ Возврат НоменклатураЛокализация.ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностиУчета(
+ ОсобенностьУчетаИлиКлючВидовПродукции);
+
+КонецФункции
+
+Функция РеквизитыНастройкиУказанияСерий()
+
+ РеквизитыНастройкиУказанияСерий = Новый Массив;
+
+ РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьНомерСерии");
+ РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьСрокГодностиСерии");
+ РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьRFIDМеткиСерии");
+ РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьДатуПроизводстваСерии");
+
+ РеквизитыНастройкиУказанияСерий.Добавить("НастройкаИспользованияСерий");
+ РеквизитыНастройкиУказанияСерий.Добавить("АвтоматическиГенерироватьСерии");
+ РеквизитыНастройкиУказанияСерий.Добавить("ВладелецСерий");
+ РеквизитыНастройкиУказанияСерий.Добавить("ШаблонЭтикеткиСерии");
+ РеквизитыНастройкиУказанияСерий.Добавить("НастройкиСерийБерутсяИзДругогоВидаНоменклатуры");
+ РеквизитыНастройкиУказанияСерий.Добавить("ШаблонРабочегоНаименованияСерии");
+ РеквизитыНастройкиУказанияСерий.Добавить("ЕдиницаИзмеренияСрокаГодности");
+ РеквизитыНастройкиУказанияСерий.Добавить("ТочностьУказанияСрокаГодностиСерии");
+ РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьКоличествоСерии");
+ РеквизитыНастройкиУказанияСерий.Добавить("ПолитикаУчетаСерий");
+ РеквизитыНастройкиУказанияСерий.Добавить("НастройкиКлючаЦенПоСерии");
+
+ НоменклатураЛокализация.РеквизитыНастройкиУказанияСерий(РеквизитыНастройкиУказанияСерий);
+
+ Возврат РеквизитыНастройкиУказанияСерий;
+
+КонецФункции
+
+Функция НастройкиИспользованияСерийСоставПолей(ТолькоРеквизитыВида)
+
+ НастройкиИспользованияСерийСоставПолей = Новый Структура;
+ НастройкиИспользованияСерийСоставПолей = ОбщегоНазначенияУТ.ЗначенияРеквизитовОбъектаПоУмолчанию(
+ ПустаяСсылка(),
+ РеквизитыНастройкиУказанияСерий());
+
+ НастройкиИспользованияСерийСоставПолей.Вставить("ВидНоменклатуры", ПустаяСсылка());
+ НастройкиИспользованияСерийСоставПолей.Вставить("ОсобенностьУчета", Перечисления.ОсобенностиУчетаНоменклатуры.ПустаяСсылка());
+ НастройкиИспользованияСерийСоставПолей.Вставить("ИспользоватьСерии", Ложь);
+ НастройкиИспользованияСерийСоставПолей.Вставить("НастройкиКлючаЦенПоСерии", Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать);
+
+ Если Не ТолькоРеквизитыВида Тогда
+ НастройкиИспользованияСерийСоставПолей.Вставить("ПолитикаУчетаСерий", Справочники.ПолитикиУчетаСерий.ПустаяСсылка());
+ НастройкиИспользованияСерийСоставПолей.Вставить("УказыватьПриПоступлении", Ложь);
+ НастройкиИспользованияСерийСоставПолей.Вставить("УказыватьПриОтгрузке", Ложь);
+ НастройкиИспользованияСерийСоставПолей.Вставить("УказыватьПриПланированииОтгрузки", Ложь);
+ НастройкиИспользованияСерийСоставПолей.Вставить("УчетСерийПоFEFO", Ложь);
+ НастройкиИспользованияСерийСоставПолей.Вставить("УказыватьПоФактуОтбора", Ложь);
+ НастройкиИспользованияСерийСоставПолей.Вставить("УчитыватьОстаткиСерий", Ложь);
+ НастройкиИспользованияСерийСоставПолей.Вставить("УчитыватьСебестоимостьПоСериям", Ложь);
+ НастройкиИспользованияСерийСоставПолей.Вставить("ОбязательныеДопРеквизиты", Новый ФиксированныйМассив(Новый Массив));
+ НастройкиИспользованияСерийСоставПолей.Вставить("ОписанияИспользованияРеквизитовСерии", Новый ФиксированныйМассив(Новый Массив));
+ КонецЕсли;
+
+ Возврат НастройкиИспользованияСерийСоставПолей;
+КонецФункции
+
+Функция ОписанияИспользованияРеквизитовСерии(НастройкиИспользованияСерий = Неопределено, ПараметрыУказанияСерий = Неопределено, ЗначенияПолейСвязи = Неопределено) Экспорт
+
+ ОписанияИспользованияРеквизитовСерии = Новый Массив;
+
+ Если НастройкиИспользованияСерий = Неопределено Тогда
+ НастройкиИспользованияСерий = НастройкиИспользованияСерийСоставПолей(Истина);
+ Иначе
+ ФорматнаяСтрокаСрокаГодности = "";
+ КонецЕсли;
+
+ ФорматнаяСтрокаСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.ФорматнаяСтрока(НастройкиИспользованияСерий.ТочностьУказанияСрокаГодностиСерии);
+ ПредставлениеФорматнойСтрокиВЗаголовкеСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.ПредставлениеФорматнойСтроки(НастройкиИспользованияСерий.ТочностьУказанияСрокаГодностиСерии);
+
+ ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "Номер";
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
+ = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьНомерСерии";
+ ОписаниеИспользованиеРеквизитаСерии.ТекстШаблонаНаименования = НСтр("ru = '%Номер%'");
+ ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
+ ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
+
+ ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "ДатаПроизводства";
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
+ = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьДатуПроизводстваСерии";
+ ОписаниеИспользованиеРеквизитаСерии.ТекстШаблонаНаименования = НСтр("ru = 'от %ДатаПроизводства%'");
+ ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
+ ОписаниеИспользованиеРеквизитаСерии.Формат = ФорматнаяСтрокаСрокаГодности;
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеФорматнойСтрокиВЗаголовке = ПредставлениеФорматнойСтрокиВЗаголовкеСрокаГодности;
+ ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
+
+ ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "ГоденДо";
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
+ = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьСрокГодностиСерии";
+ ОписаниеИспользованиеРеквизитаСерии.ТекстШаблонаНаименования = НСтр("ru = 'до %ГоденДо%'");
+ ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
+ ОписаниеИспользованиеРеквизитаСерии.Формат = ФорматнаяСтрокаСрокаГодности;
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеФорматнойСтрокиВЗаголовке = ПредставлениеФорматнойСтрокиВЗаголовкеСрокаГодности;
+ ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
+
+ ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "RFIDTID";
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
+ = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
+ ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
+ ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь;
+ ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
+
+ ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "RFIDUser";
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
+ = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
+ ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
+ ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь; // В ERP не реализована запись банка RFIDUser
+ ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
+
+ ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "RFIDEPC";
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
+ = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
+ ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
+ ОписаниеИспользованиеРеквизитаСерии.ПроверятьЗаполнение = Истина;
+ ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь; // В ERP реализована запись только банка RFIDEPC и только для интеграции с ГИСМ
+ ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
+
+ ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "EPCGTIN";
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
+ = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
+ ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
+ ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь;
+ ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
+
+ ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "RFIDМеткаНеЧитаемая";
+ ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
+ = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
+ ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
+ ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
+ ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь;
+ ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
+
+ НоменклатураЛокализация.ОписаниеИспользованияРеквизитовСерии(ОписанияИспользованияРеквизитовСерии, НастройкиИспользованияСерий);
+
+ Возврат ОписанияИспользованияРеквизитовСерии;
+
+КонецФункции
+
+Функция ОписаниеИспользованиеРеквизитаСерии() Экспорт
+
+ ОписаниеИспользованиеРеквизитаСерии = Новый Структура;
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("ИмяРеквизита");
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("ПредставлениеРеквизита");
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("ИмяНастройки");
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("ТекстШаблонаНаименования");
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("Использование", Ложь);
+
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("ОсобенностиУчета", "");
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("Формат", "");
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("ПредставлениеФорматнойСтрокиВЗаголовке", "");
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("ПроверятьЗаполнение", Истина);
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("МожноРедактировать", Истина);
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("ТекстУсловногоОформления", "");
+ ОписаниеИспользованиеРеквизитаСерии.Вставить("ПроверятьУникальностьЗначения", Ложь);
+
+ Возврат ОписаниеИспользованиеРеквизитаСерии;
+
+КонецФункции
+
+Функция ПредусмотренаАвтоматическаяГенерацияСерий(НастройкиИспользованияСерий) Экспорт
+
+ ПредусмотренаАвтоматическаяГенерацияСерий = Ложь;
+ НоменклатураЛокализация.ПредусмотренаАвтоматическаяГенерацияСерий(ПредусмотренаАвтоматическаяГенерацияСерий, НастройкиИспользованияСерий);
+
+ Возврат ПредусмотренаАвтоматическаяГенерацияСерий;
+
+КонецФункции
+
+// Проверяет возможность изменения настройки отображения реквизита.
+//
+// Параметры:
+// Объект - СправочникОбъект.Номенклатура
+// СтрокаРеквизита - Строка
+// ВладелецРеквизита - Строка
+//
+// Возвращаемое значение:
+// Булево - изменение настройки возможно.
+//
+Функция ДоступноИзменениеНастройкиОтображенияРеквизита(Объект, СтрокаРеквизита, ВладелецРеквизита) Экспорт
+
+ ИмяРеквизита = СтрокаРеквизита.ИмяРеквизита;
+ ЭтоДопРеквизит = СтрокаРеквизита.ЭтоДопРеквизит;
+
+ ОсобенностьУчетаИлиКлючВидовПродукции = НоменклатураЛокализация.ОсобенностьУчетаИлиКлючВидовПродукции(Объект);
+
+ Если ЭтоДопРеквизит Тогда
+ Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаРеквизита.Свойство,"ЗаполнятьОбязательно");
+ ЗаполнятьОбязательно = Реквизиты.ЗаполнятьОбязательно;
+ Иначе
+ Если ВладелецРеквизита = "Номенклатура" Тогда
+
+ ОписаниеРеквизита = Справочники.Номенклатура.РеквизитОписание(ИмяРеквизита,
+ Объект.ТипНоменклатуры,
+ ОсобенностьУчетаИлиКлючВидовПродукции,
+ Объект.ИспользованиеХарактеристик,
+ Объект.ИспользоватьСрокГодностиСерии);
+
+ ЗаполнятьОбязательно = ОписаниеРеквизита.ОбязательныйДляЗаполнения;
+
+ Иначе
+ ЗаполнятьОбязательно = Ложь;
+ КонецЕсли;
+ КонецЕсли;
+
+ ДоступноИзменениеНастройки = Не ЗаполнятьОбязательно;
+
+ Если ЭтоОбязательноОтображаемыйРеквизит(Объект, ИмяРеквизита, ВладелецРеквизита, ЭтоДопРеквизит, ЗаполнятьОбязательно) Тогда
+ ДоступноИзменениеНастройки = Ложь;
+ КонецЕсли;
+
+ Возврат ДоступноИзменениеНастройки
+ И Не (СтрокаРеквизита.Уникален
+ Или СтрокаРеквизита.ЗаполнятьОбязательно);
+
+КонецФункции
+
+// Проверяет возможность изменения настройки обязательности заполнения реквизита.
+//
+// Параметры:
+// Объект - СправочникОбъект.Номенклатура
+// ИмяРеквизита - Строка
+// ВладелецРеквизита - Строка
+// ЭтоДопРеквизит - Булево
+// ЗаполнятьОбязательно - Булево
+//
+// Возвращаемое значение:
+// Булево - изменение настройки возможно.
+//
+Функция ДоступноИзменениеНастройкиОбязательностиЗаполненияРеквизита(Объект, СтрокаРеквизита, ВладелецРеквизита)
+
+ ИмяРеквизита = СтрокаРеквизита.ИмяРеквизита;
+ ЭтоДопРеквизит = СтрокаРеквизита.ЭтоДопРеквизит;
+
+ ОсобенностьУчетаИлиКлючВидовПродукции = НоменклатураЛокализация.ОсобенностьУчетаИлиКлючВидовПродукции(Объект);
+
+ Если ЭтоДопРеквизит Тогда
+ ТекстИсключения = НСтр("ru = 'Функция не предназначена для использования с доп. реквизитами.'");
+ ВызватьИсключение ТекстИсключения;
+ Иначе
+ Если ВладелецРеквизита = "Номенклатура" Тогда
+
+ ОписаниеРеквизита = Справочники.Номенклатура.РеквизитОписание(ИмяРеквизита,
+ Объект.ТипНоменклатуры,
+ ОсобенностьУчетаИлиКлючВидовПродукции,
+ Объект.ИспользованиеХарактеристик,
+ Объект.ИспользоватьСрокГодностиСерии);
+
+ ТипЗначения = ОписаниеРеквизита.Тип;
+
+ ЗаполнятьОбязательно = ОписаниеРеквизита.ОбязательныйДляЗаполнения;
+
+ ИначеЕсли ВладелецРеквизита = "ХарактеристикиНоменклатуры" Тогда
+
+ ОписаниеРеквизита = Справочники.ХарактеристикиНоменклатуры.РеквизитОписание(ИмяРеквизита,
+ Объект.ТипНоменклатуры,
+ ОсобенностьУчетаИлиКлючВидовПродукции);
+
+ ТипЗначения = ОписаниеРеквизита.Тип;
+
+ ЗаполнятьОбязательно = ОписаниеРеквизита.ОбязательныйДляЗаполнения;
+
+ Иначе
+ ЗаполнятьОбязательно = Ложь;
+ КонецЕсли;
+ КонецЕсли;
+
+ ДоступноИзменениеНастройки = НЕ ЗаполнятьОбязательно;
+
+ ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
+
+ Возврат ДоступноИзменениеНастройки
+ И ТипЗначения <> ОписаниеТиповБулево;
+
+КонецФункции
+
+// Добавляет реквизит в табличные части элемента справочника номенклатуры.
+//
+// Параметры:
+// Объект - СправочникОбъект.Номенклатура
+// Реквизит - см. Справочники.Номенклатура.ЗначениеСвойствРеквизита
+// ВладелецРеквизита - Строка - Владелец реквизита
+Процедура ДобавитьРеквизитДляКонтроляИОтбораНоменклатуры(Объект, Реквизит, ВладелецРеквизита) Экспорт
+
+ Если Справочники.Номенклатура.НеотображаемыеВТаблицеНастроекРеквизиты().Найти(Реквизит.Имя) <> Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ НеиспользуемыеДляКонтроляРеквизиты = Справочники.Номенклатура.НеиспользуемыеДляКонтроляУникальностиРеквизиты();
+ ТипыНеИспользуемыеДляКонтроля = Справочники.Номенклатура.НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы();
+
+ ПредставлениеРеквизита = Реквизит.Представление;
+
+ ЭтоНеиспользуемыйДляКонтроляРеквизит = (НеиспользуемыеДляКонтроляРеквизиты.Найти(Реквизит.Имя) <> Неопределено);
+ ЭтоНеиспользуемыйДляКонтроляТип = (ТипыНеИспользуемыеДляКонтроля.Найти(Реквизит.Имя) <> Неопределено);
+ ЭтоОбязательныйДляЗаполненияРеквизит = Реквизит.ОбязательныйДляЗаполнения;
+
+ ЭтоРеквизитРекомендуемыйДляКонтроляУникальности = Реквизит.РекомендуемыйДляКонтроляУникальности;
+
+ Отбор = Новый Структура("ИмяРеквизита, ЭтоДопРеквизит", Реквизит.Имя, Ложь);
+
+ Если ВладелецРеквизита = "Номенклатура" Тогда
+ ИмяТЧ = "РеквизитыДляКонтроляНоменклатуры";
+ Иначе
+ ИмяТЧ = "РеквизитыДляКонтроляХарактеристик";
+ КонецЕсли;
+
+ НайденныеСтроки = Объект[ИмяТЧ].НайтиСтроки(Отбор);
+
+ ЭтоНоваяСтрока = Ложь;
+
+ Если НайденныеСтроки.Количество() = 0 Тогда
+ СтрокаРеквизитовДляКонтроля = Объект[ИмяТЧ].Добавить();
+ СтрокаРеквизитовДляКонтроля.ИмяРеквизита = Реквизит.Имя;
+
+ ЭтоНоваяСтрока = Истина;
+ Иначе
+ СтрокаРеквизитовДляКонтроля = НайденныеСтроки[0];
+ КонецЕсли;
+
+ СтрокаРеквизитовДляКонтроля.ПредставлениеРеквизита = ПредставлениеРеквизита;
+
+ Если Не СтрокаРеквизитовДляКонтроля.ЗаполнятьОбязательно Тогда
+ СтрокаРеквизитовДляКонтроля.ЗаполнятьОбязательно = ЭтоОбязательныйДляЗаполненияРеквизит;
+ КонецЕсли;
+
+ Если Не СтрокаРеквизитовДляКонтроля.ОтображатьПриСоздании Тогда
+ СтрокаРеквизитовДляКонтроля.ОтображатьПриСоздании =
+ ЭтоОбязательноОтображаемыйРеквизит(Объект, Реквизит, "Номенклатура", Ложь, ЭтоОбязательныйДляЗаполненияРеквизит);
+ КонецЕсли;
+
+ Если ЭтоНоваяСтрока
+ И Реквизит.Имя = "Штрихкод" Тогда
+
+ РекомендуемыйДляКонтроляУникальности = Не ПолучитьФункциональнуюОпцию("ИспользоватьНеуникальныеШтрихкодыНоменклатуры");
+
+ СтрокаРеквизитовДляКонтроля.ОтображатьПриСоздании = Истина;
+ СтрокаРеквизитовДляКонтроля.Уникален = РекомендуемыйДляКонтроляУникальности;
+ СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Не РекомендуемыйДляКонтроляУникальности;
+
+ ИначеЕсли ЭтоНоваяСтрока
+ И ЭтоРеквизитРекомендуемыйДляКонтроляУникальности Тогда
+
+ СтрокаРеквизитовДляКонтроля.Уникален = Истина;
+ СтрокаРеквизитовДляКонтроля.ОтображатьПриСоздании = Истина;
+ СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Истина;
+
+ ИначеЕсли ЭтоНеиспользуемыйДляКонтроляТип
+ Или ЭтоНеиспользуемыйДляКонтроляРеквизит Тогда
+
+ СтрокаРеквизитовДляКонтроля.Уникален = Ложь;
+ СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Ложь;
+
+ Иначе
+ СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Истина;
+ КонецЕсли;
+
+ СтрокаРеквизитовДляКонтроля.ДоступностьЗаполнятьОбязательно = ДоступноИзменениеНастройкиОбязательностиЗаполненияРеквизита(Объект,
+ СтрокаРеквизитовДляКонтроля,
+ ВладелецРеквизита);
+ СтрокаРеквизитовДляКонтроля.ДоступностьОтображатьПриСоздании = ДоступноИзменениеНастройкиОтображенияРеквизита(Объект,
+ СтрокаРеквизитовДляКонтроля,
+ ВладелецРеквизита);
+КонецПроцедуры
+
+Функция ЭтоОбязательноОтображаемыйРеквизит(Объект, ИмяРеквизита, ВладелецРеквизита, ЭтоДопРеквизит, ЗаполнятьОбязательно)
+
+ Если ЭтоДопРеквизит Тогда
+ Возврат ЗаполнятьОбязательно;
+ КонецЕсли;
+
+ Если ЗаполнятьОбязательно Тогда
+ Возврат Истина;
+ КонецЕсли;
+
+ Если ВладелецРеквизита = "Номенклатура" Тогда
+
+ ОсобенностьУчетаИлиКлючВидовПродукции = НоменклатураЛокализация.ОсобенностьУчетаИлиКлючВидовПродукции(Объект);
+
+ ОбязательноОтображаемый = Справочники.Номенклатура.РеквизитОписание(ИмяРеквизита,
+ Объект.ТипНоменклатуры,
+ ОсобенностьУчетаИлиКлючВидовПродукции,
+ Объект.ИспользованиеХарактеристик,
+ Объект.ИспользоватьСрокГодностиСерии).ОбязательныйДляОтображенияПриСоздании;
+
+ Возврат ОбязательноОтображаемый;
+
+ КонецЕсли;
+
+ Возврат Ложь;
+
+КонецФункции
+
+Процедура УдалитьРеквизитДляКонтроля(Объект, ИмяРеквизита, ВладелецРеквизита)
+
+ Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита);
+ КоллекцияРеквизитовДляКонтроля = КоллекцияРеквизитовДляКонтроля(Объект, ВладелецРеквизита);
+
+ НайденныеСтроки = КоллекцияРеквизитовДляКонтроля.НайтиСтроки(Отбор);
+
+ Если НайденныеСтроки.Количество() > 0 Тогда
+
+ СтрокаТаблицыРеквизитов = НайденныеСтроки[0];
+ КоллекцияРеквизитовДляКонтроля.Удалить(СтрокаТаблицыРеквизитов);
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура УдалитьРеквизитДляОтбора(Объект, ИмяРеквизита, ВладелецРеквизита)
+
+ КоллекцияРеквизитовОтбора = КоллекцияРеквизитовОтбора(Объект, ВладелецРеквизита);
+
+ МассивСтрок = КоллекцияРеквизитовОтбора.НайтиСтроки(Новый Структура("ИмяРеквизита", ИмяРеквизита));
+
+ Если МассивСтрок.Количество() > 0 Тогда
+ СтрокаТаблицыРеквизитов = МассивСтрок[0];
+ КоллекцияРеквизитовОтбора.Удалить(СтрокаТаблицыРеквизитов);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПриИзмененииФлагаУникален(Объект, ВладелецРеквизита, ТекущиеДанные) Экспорт
+
+ ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
+
+ Если ВладелецРеквизита <> "СерииНоменклатуры"
+ И ТекущиеДанные.Уникален Тогда
+ ТекущиеДанные.ЗаполнятьОбязательно = Истина;
+ ТекущиеДанные.ОтображатьПриСоздании = Истина;
+ КонецЕсли;
+
+ // Если тип реквизита - Булево, то не включать контроль заполнения.
+ Если ТекущиеДанные.ЭтоДопРеквизит Тогда
+
+ ТипЗначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущиеДанные.Свойство, "ТипЗначения");
+
+ Если ТипЗначения = ОписаниеТиповБулево Тогда
+ ТекущиеДанные.ЗаполнятьОбязательно = Ложь;
+ КонецЕсли;
+
+ Иначе
+
+ Если ВладелецРеквизита = "Номенклатура" Тогда
+
+ ОсобенностьУчетаИлиКлючВидовПродукции = НоменклатураЛокализация.ОсобенностьУчетаИлиКлючВидовПродукции(Объект);
+
+ ТипРеквизита = Справочники.Номенклатура.РеквизитОписание(ТекущиеДанные.ИмяРеквизита,
+ Объект.ТипНоменклатуры,
+ ОсобенностьУчетаИлиКлючВидовПродукции,
+ Объект.ИспользованиеХарактеристик,
+ Объект.ИспользоватьСрокГодностиСерии).Тип;
+
+ Если ТипРеквизита = ОписаниеТиповБулево Тогда
+ ТекущиеДанные.ЗаполнятьОбязательно = Ложь;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Если ВладелецРеквизита <> "СерииНоменклатуры" Тогда
+ ТекущиеДанные.ДоступностьОтображатьПриСоздании = ДоступноИзменениеНастройкиОтображенияРеквизита(
+ Объект, ТекущиеДанные, ВладелецРеквизита);
+ КонецЕсли;
+
+КонецПроцедуры
+
+// Выполняет заполнение таблицы настроек контроля реквизитов справочников Номенклатура и ХарактеристикиНоменклатуры.
+//
+// Параметры:
+// Объект - СправочникОбъект.Номенклатура, СправочникОбъект.ХарактеристикиНоменклатуры - объект справочника.
+// ВладелецРеквизитов - Строка - имя владельца реквизитов.
+//
+Процедура ЗаполнитьРеквизитыДляКонтроля(Объект, ВладелецРеквизитов) Экспорт
+
+ Если ВладелецРеквизитов = "ХарактеристикиНоменклатуры"
+ И Не Объект.ИспользоватьХарактеристики Тогда
+ Объект.РеквизитыБыстрогоОтбораХарактеристик.Очистить();
+ Возврат;
+ КонецЕсли;
+
+ ОсобенностьУчетаИлиКлючВидовПродукции = НоменклатураЛокализация.ОсобенностьУчетаИлиКлючВидовПродукции(Объект);
+
+ Если ВладелецРеквизитов = "ХарактеристикиНоменклатуры" Тогда
+ ЗависимостьОтТипаНоменклатуры = ЗначениеНастроекПовтИсп.ВсеРеквизитыХарактеристикНоменклатуры(Объект.ТипНоменклатуры,
+ ОсобенностьУчетаИлиКлючВидовПродукции);
+ Иначе
+ ЗависимостьОтТипаНоменклатуры = ЗначениеНастроекПовтИсп.ВсеРеквизитыНоменклатуры(Объект.ТипНоменклатуры,
+ ОсобенностьУчетаИлиКлючВидовПродукции,
+ Объект.ИспользоватьХарактеристики,
+ Объект.ИспользоватьСрокГодностиСерии);
+ КонецЕсли;
+
+ Для Каждого НастройкаОтТипа Из ЗависимостьОтТипаНоменклатуры Цикл
+
+ Если НастройкаОтТипа.Значение.Использование Тогда
+ ДобавитьРеквизитДляКонтроляИОтбораНоменклатуры(Объект, НастройкаОтТипа.Значение, ВладелецРеквизитов);
+ Иначе
+ УдалитьРеквизитДляКонтроля(Объект, НастройкаОтТипа.Ключ, ВладелецРеквизитов);
+ УдалитьРеквизитДляОтбора(Объект, НастройкаОтТипа.Ключ, ВладелецРеквизитов);
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если ВладелецРеквизитов = "ХарактеристикиНоменклатуры" Тогда
+ Объект.РеквизитыДляКонтроляХарактеристик.Сортировать("ПредставлениеРеквизита");
+ Иначе
+ Объект.РеквизитыДляКонтроляНоменклатуры.Сортировать("ПредставлениеРеквизита");
+ КонецЕсли;
+
+КонецПроцедуры
+
+// Заполнение дополнительных реквизитов
+//
+// Параметры:
+// Объект - СправочникОбъект.ВидыНоменклатуры
+// НазначениеДопРеквизитов - Строка
+Процедура ЗаполнитьДопРеквизитыДляКонтроляИОтбора(Объект, НазначениеДопРеквизитов) Экспорт
+
+ Если НазначениеДопРеквизитов = "ХарактеристикиНоменклатуры"
+ И Не Объект.ИспользоватьХарактеристики Тогда
+ Объект.РеквизитыДляКонтроляХарактеристик.Очистить();
+ Возврат;
+ ИначеЕсли НазначениеДопРеквизитов = "СерииНоменклатуры"
+ И Не Объект.ИспользоватьСерии Тогда
+ Объект.РеквизитыДляКонтроляСерий.Очистить();
+ Возврат;
+ КонецЕсли;
+
+ ТипыНеИспользуемыеДляКонтроля = Справочники.Номенклатура.НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы();
+
+ Отбор = Новый Структура("Свойство, ЭтоДопРеквизит");
+ ВсеДопРеквизиты = Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, НазначениеДопРеквизитов);
+
+ РеквизитыДляКонтроля = КоллекцияРеквизитовДляКонтроля(Объект, НазначениеДопРеквизитов);
+ РеквизитыБыстрогоОтбора = КоллекцияРеквизитовОтбора(Объект, НазначениеДопРеквизитов);
+
+ УдаляемыеСтроки = Новый Массив;
+
+ Для каждого ДопРеквизит Из РеквизитыДляКонтроля Цикл
+ Если Не ДопРеквизит.ЭтоДопРеквизит Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ЗаполнитьЗначенияСвойств(Отбор, ДопРеквизит);
+
+ ОписаниеДопРеквизита = ВсеДопРеквизиты.НайтиСтроки(Отбор);
+
+ Если ОписаниеДопРеквизита.Количество() = 0 Тогда
+ УдаляемыеСтроки.Добавить(ДопРеквизит);
+ Иначе
+ ЗаполнитьЗначенияСвойств(ДопРеквизит,ОписаниеДопРеквизита[0]);
+ КонецЕсли;
+ КонецЦикла;
+
+ Для Каждого Строка Из УдаляемыеСтроки Цикл
+ РеквизитыДляКонтроля.Удалить(Строка);
+ КонецЦикла;
+
+ Если РеквизитыБыстрогоОтбора <> Неопределено Тогда
+ УдаляемыеСтроки = Новый Массив;
+
+ Для Каждого ДопРеквизит Из РеквизитыБыстрогоОтбора Цикл
+ Если Не ДопРеквизит.ЭтоДопРеквизит Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ЗаполнитьЗначенияСвойств(Отбор, ДопРеквизит);
+
+ Если ВсеДопРеквизиты.НайтиСтроки(Отбор).Количество() = 0 Тогда
+ УдаляемыеСтроки.Добавить(ДопРеквизит);
+ КонецЕсли;
+ КонецЦикла;
+
+ Для Каждого Строка Из УдаляемыеСтроки Цикл
+ РеквизитыБыстрогоОтбора.Удалить(Строка);
+ КонецЦикла;
+ КонецЕсли;
+
+ Для Каждого ДопРеквизит Из ВсеДопРеквизиты Цикл
+ ТипЗначения = ДопРеквизит.Тип;
+ ЭтоНеиспользуемыйДляКонтроляТип = ТипыНеИспользуемыеДляКонтроля.Найти(ТипЗначения) <> Неопределено;
+
+ ЗаполнитьЗначенияСвойств(Отбор, ДопРеквизит);
+
+ НайденныеСтроки = РеквизитыДляКонтроля.НайтиСтроки(Отбор);
+
+ Если НайденныеСтроки.Количество() > 0 Тогда
+ СтрокаРеквизитовДляКонтроля = НайденныеСтроки[0];
+ СтрокаРеквизитовДляКонтроля.ПредставлениеРеквизита = ДопРеквизит.ПредставлениеРеквизита;
+ Иначе
+ СтрокаРеквизитовДляКонтроля = РеквизитыДляКонтроля.Добавить();
+ ЗаполнитьЗначенияСвойств(СтрокаРеквизитовДляКонтроля, ДопРеквизит);
+ КонецЕсли;
+
+ Если ДопРеквизит.ЗаполнятьОбязательно Тогда
+ СтрокаРеквизитовДляКонтроля.ЗаполнятьОбязательно = Истина;
+ Если НазначениеДопРеквизитов <> "СерииНоменклатуры" Тогда
+ СтрокаРеквизитовДляКонтроля.ОтображатьПриСоздании = Истина;
+ КонецЕсли;
+ КонецЕсли;
+
+ СтрокаРеквизитовДляКонтроля.ДоступностьЗаполнятьОбязательно = Истина;
+
+ Если НазначениеДопРеквизитов <> "СерииНоменклатуры" Тогда
+ Если Не ЭтоНеиспользуемыйДляКонтроляТип Тогда
+ СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Истина;
+ Иначе
+ СтрокаРеквизитовДляКонтроля.Уникален = Ложь;
+ СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Ложь;
+ КонецЕсли;
+
+ СтрокаРеквизитовДляКонтроля.ДоступностьОтображатьПриСоздании = Не СтрокаРеквизитовДляКонтроля.ЗаполнятьОбязательно
+ И Не СтрокаРеквизитовДляКонтроля.Уникален;
+ КонецЕсли;
+ КонецЦикла;
+
+ Если РеквизитыБыстрогоОтбора <> Неопределено Тогда
+ Отбор = Новый Структура("Свойство");
+
+ Для Каждого ДопРеквизит Из ВсеДопРеквизиты Цикл
+ ЗаполнитьЗначенияСвойств(Отбор, ДопРеквизит);
+ ИзменяемыеСтроки = РеквизитыБыстрогоОтбора.НайтиСтроки(Отбор);
+
+ Для Каждого СтрокаРеквизитов Из ИзменяемыеСтроки Цикл
+ ЗаполнитьЗначенияСвойств(СтрокаРеквизитов, ДопРеквизит, "ПредставлениеРеквизита");
+ КонецЦикла;
+ КонецЦикла;
+ КонецЕсли;
+
+ Если РеквизитыДляКонтроля <> Неопределено Тогда
+ РеквизитыДляКонтроля.Сортировать("ПредставлениеРеквизита");
+ КонецЕсли;
+
+КонецПроцедуры
+
+// Выполняет заполнение таблицы настроек ценообразования для ХарактеристикиНоменклатуры и Серий.
+//
+Процедура ЗаполнитьРеквизитыДляЦенообразования(Объект, ВладелецРеквизитов) Экспорт
+
+// ЭтоРеквизитыХарактеристик = ВладелецРеквизитов = "ХарактеристикиНоменклатуры";
+
+ Если ВладелецРеквизитов = "ХарактеристикиНоменклатуры"
+ И (Не Объект.ИспользоватьХарактеристики
+ Или Не Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам) Тогда
+ Объект.РеквизитыХарактеристикДляКлючаЦен.Очистить();
+ Возврат;
+ ИначеЕсли ВладелецРеквизитов = "СерииНоменклатуры"
+ И (Не Объект.ИспользоватьСерии
+ Или Не Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам) Тогда
+ Объект.РеквизитыСерийДляКлючаЦен.Очистить();
+ Возврат;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Функция КоллекцияРеквизитовДляКонтроля(ТекущийОбъект, ТипВладельцаНабораЭлементов) Экспорт
+
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ Возврат ТекущийОбъект.РеквизитыДляКонтроляНоменклатуры;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат ТекущийОбъект.РеквизитыДляКонтроляХарактеристик;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ Возврат ТекущийОбъект.РеквизитыДляКонтроляСерий;
+ Иначе
+ Возврат Неопределено;
+ КонецЕсли;
+
+КонецФункции
+
+Функция КоллекцияРеквизитовОтбора(ТекущийОбъект, ТипВладельцаНабораЭлементов) Экспорт
+
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ Возврат ТекущийОбъект.РеквизитыБыстрогоОтбораНоменклатуры;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат ТекущийОбъект.РеквизитыБыстрогоОтбораХарактеристик;
+ Иначе
+ Возврат Неопределено;
+ КонецЕсли;
+
+КонецФункции
+
+Функция КоллекцияРеквизитовДляКлючаЦен(ТекущийОбъект, ТипВладельцаНабораЭлементов) Экспорт
+
+ Если ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат ТекущийОбъект.РеквизитыХарактеристикДляКлючаЦен;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ Возврат ТекущийОбъект.РеквизитыСерийДляКлючаЦен;
+ Иначе
+ Возврат Неопределено;
+ КонецЕсли;
+
+КонецФункции
+
+Функция ИспользоватьПроизводство() Экспорт
+
+ ИспользоватьПроизводство = Ложь; //Для УТ
+
+
+ Возврат ИспользоватьПроизводство;
+
+КонецФункции
+
+Процедура ПроверитьПоТипуИОсобенностиНоменклатуруОчиститьВладельца(ВидНоменклатуры, ИмяРеквизитаВладелец)
+
+ Если Не ЗначениеЗаполнено(ВидНоменклатуры[ИмяРеквизитаВладелец]) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ОтборВладельца = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(ВидНоменклатуры, ИмяРеквизитаВладелец);
+
+ Если Не ОбщегоНазначенияУТ.СсылкаСоответствуетОтбору(ВидНоменклатуры[ИмяРеквизитаВладелец], ОтборВладельца) Тогда
+ ВидНоменклатуры[ИмяРеквизитаВладелец] = Неопределено;
+ КонецЕсли;
+КонецПроцедуры
+
+// Выполняет заполнение реквизитов ценообразования по умолчанию
+//
+// Параметры:
+// ВидНоменклатуры - СправочникОбъект.ВидыНоменклатуры - Обрабатываемый объект.
+//
+Процедура УстановитьРеквизитыЦенообразованияПоУмолчанию(ВидНоменклатуры) Экспорт
+
+ // Установка настройки ценообразования по характеристикам номенклатуры
+ ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
+ Если ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры
+ И ЗначениеЗаполнено(ВидНоменклатуры.ВладелецХарактеристик) Тогда
+
+ НастройкиКлючаЦенПоХарактеристикеПоВладельцу = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидНоменклатуры.ВладелецХарактеристик,"НастройкиКлючаЦенПоХарактеристике");
+ ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = НастройкиКлючаЦенПоХарактеристикеПоВладельцу.НастройкиКлючаЦенПоХарактеристике;
+
+ КонецЕсли;
+
+ // Установка настройки ценообразования по сериям номенклатуры
+ ВидНоменклатуры.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
+ Если ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры И ЗначениеЗаполнено(ВидНоменклатуры.ВладелецСерий) Тогда
+
+ НастройкиКлючаЦенПоХарактеристикеПоВладельцу = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидНоменклатуры.ВладелецСерий,"НастройкиКлючаЦенПоСерии");
+ ВидНоменклатуры.НастройкиКлючаЦенПоСерии = НастройкиКлючаЦенПоХарактеристикеПоВладельцу.НастройкиКлючаЦенПоСерии;
+
+ КонецЕсли;
+
+ // обработать табличные части ценообразования
+ ЗаполнитьРеквизитыДляЦенообразования(ВидНоменклатуры, "ХарактеристикиНоменклатуры");
+ ЗаполнитьРеквизитыДляЦенообразования(ВидНоменклатуры, "СерииНоменклатуры");
+
+КонецПроцедуры
+
+// Выполняет заполнение реквизитов ценообразования по умолчанию
+//
+// Параметры:
+// ВидыНоменклатуры - Массив - Из элементов типа СправочникСсылка.ВидыНоменклатуры.
+// ПараметрыУстановки - Структура - Параметры для установки.
+//
+Процедура УстановитьРеквизитыЦенообразования(ВидыНоменклатуры, ПараметрыУстановки) Экспорт
+
+ Для Каждого ВидНоменклатуры Из ВидыНоменклатуры Цикл
+
+ ВидНоменклатурыОбъект = Неопределено;
+ // Установка настройки ценообразования по характеристикам номенклатуры
+ Если Не ЗапретитьИспользованияХарактеристикДляЦенообразования(ВидНоменклатуры) И Не ПараметрыУстановки.НастройкиКлючаЦенПоХарактеристике = Неопределено Тогда
+
+ ВидНоменклатурыОбъект = ВидНоменклатуры.ПолучитьОбъект();//СправочникОбъект.ВидыНоменклатуры
+ ВидНоменклатурыОбъект.НастройкиКлючаЦенПоХарактеристике = ПараметрыУстановки.НастройкиКлючаЦенПоХарактеристике;
+
+ // обработать табличные части ценообразования
+ ЗаполнитьРеквизитыДляЦенообразования(ВидНоменклатурыОбъект, "ХарактеристикиНоменклатуры");
+
+ КонецЕсли;
+
+ // Установка настройки ценообразования по сериям номенклатуры
+ Если Не ЗапретитьИспользованияСерииДляЦенообразования(ВидНоменклатуры) И Не ПараметрыУстановки.НастройкиКлючаЦенПоСерии = Неопределено Тогда
+
+ Если ВидНоменклатурыОбъект = Неопределено Тогда
+ ВидНоменклатурыОбъект = ВидНоменклатуры.ПолучитьОбъект();//СправочникОбъект.ВидыНоменклатуры
+ КонецЕсли;
+
+ ВидНоменклатурыОбъект.НастройкиКлючаЦенПоСерии = ПараметрыУстановки.НастройкиКлючаЦенПоСерии;
+
+ // обработать табличные части ценообразования
+ ЗаполнитьРеквизитыДляЦенообразования(ВидНоменклатурыОбъект, "СерииНоменклатуры");
+
+ КонецЕсли;
+
+ Если Не ПараметрыУстановки.НастройкиКлючаЦенПоУпаковке = Неопределено Тогда
+
+ Если ВидНоменклатурыОбъект = Неопределено Тогда
+ ВидНоменклатурыОбъект = ВидНоменклатуры.ПолучитьОбъект();//СправочникОбъект.ВидыНоменклатуры
+ КонецЕсли;
+
+ ВидНоменклатурыОбъект.НастройкиКлючаЦенПоУпаковке = ПараметрыУстановки.НастройкиКлючаЦенПоУпаковке;
+
+ КонецЕсли;
+
+ Если Не ВидНоменклатурыОбъект = Неопределено Тогда
+ Попытка
+ ВидНоменклатурыОбъект.Записать();
+ Исключение
+ КонецПопытки;
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Функция ЗапретитьИспользованияСерииДляЦенообразования(Знач ВидНоменклатуры) Экспорт
+
+ Запретить = Ложь;
+
+ Если НЕ ВидНоменклатуры.ИспользоватьСерии Тогда
+ Запретить = Истина;
+ КонецЕсли;
+
+ Возврат Запретить;
+
+КонецФункции
+
+Функция ЗапретитьИспользованияХарактеристикДляЦенообразования(Знач ВидНоменклатуры) Экспорт
+
+ Запретить = Ложь;
+
+ Если Не ВидНоменклатуры.ИспользоватьХарактеристики
+ Или ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать
+ Или (ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры
+ И ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам) Тогда
+
+ Запретить = Истина;
+
+ КонецЕсли;
+
+ Возврат Запретить;
+
+КонецФункции
+
+Функция ТекстЗапросаНастроекКонтроляУникальностиШтрихкода(ИспользоватьНеуникальныеШтрихкоды, ПоискЗаписей = Ложь)
+
+ Если ИспользоватьНеуникальныеШтрихкоды Тогда
+ ТекстЗапроса =
+ "ВЫБРАТЬ
+ | РеквизитыДляКонтроля.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляНоменклатуры КАК РеквизитыДляКонтроля
+ |ГДЕ
+ | РеквизитыДляКонтроля.ИмяРеквизита = ""Штрихкод""
+ | И РеквизитыДляКонтроля.Уникален";
+ Иначе
+ ТекстЗапроса =
+ "ВЫБРАТЬ
+ | РеквизитыДляКонтроля.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляНоменклатуры КАК РеквизитыДляКонтроля
+ |ГДЕ
+ | РеквизитыДляКонтроля.ИмяРеквизита = ""Штрихкод""
+ | И РеквизитыДляКонтроля.Уникален
+ | И РеквизитыДляКонтроля.ДоступностьУникален";
+ КонецЕсли;
+
+ Если ПоискЗаписей Тогда
+ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ", "ВЫБРАТЬ ПЕРВЫЕ 1"); // @query-part-1 @query-part-2
+ КонецЕсли;
+
+ Возврат ТекстЗапроса;
+
+КонецФункции
+
+#КонецОбласти
+
+#КонецОбласти
+
+#КонецЕсли
+#КонецЕсли
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Ext/ObjectModule.bsl b/src/Catalogs/ВидыНоменклатуры/Ext/ObjectModule.bsl
new file mode 100644
index 0000000..fdbf52f
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Ext/ObjectModule.bsl
@@ -0,0 +1,757 @@
+#Если НЕ МобильныйАвтономныйСервер Тогда
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+#Область ОбработчикиСобытий
+
+Процедура ПередЗаписью(Отказ)
+
+ Если ОбменДанными.Загрузка Тогда
+ Возврат;
+ КонецЕсли;
+
+ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
+
+ Если ЭтоГруппа Тогда
+ Возврат;
+ КонецЕсли;
+
+ ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
+ ДополнительныеСвойства.Вставить("ИспользоватьСерии", Ложь);
+ ДополнительныеСвойства.Вставить("НастройкиСерийБерутсяИзДругогоВидаНоменклатуры", Ложь);
+ ДополнительныеСвойства.Вставить("ИспользоватьХарактеристики", Ложь);
+ ДополнительныеСвойства.Вставить("ИспользованиеХарактеристик", Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать);
+ ДополнительныеСвойства.Вставить("ПерезаполнитьХарактеристики", Ложь);
+ ДополнительныеСвойства.Вставить("ПерезаполнитьСерии", Ложь);
+
+ Если Не ЭтоНовый() Тогда
+ СтарыеРеквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка,
+ "ИспользоватьСерии, НастройкиСерийБерутсяИзДругогоВидаНоменклатуры, ИспользоватьХарактеристики, ИспользованиеХарактеристик, НастройкиКлючаЦенПоХарактеристике, НастройкиКлючаЦенПоСерии, РеквизитыХарактеристикДляКлючаЦен.ИмяРеквизита, РеквизитыСерийДляКлючаЦен.ИмяРеквизита");
+ ЗаполнитьЗначенияСвойств(ДополнительныеСвойства, СтарыеРеквизиты);
+
+ ДополнительныеСвойства.ПерезаполнитьХарактеристики =
+ НастройкиКлючаЦенПоХарактеристике <> Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать
+ И Не ЗначениеЗаполнено(ВладелецХарактеристик)
+ И Не НастройкиКлючаЦенПоХарактеристике = СтарыеРеквизиты.НастройкиКлючаЦенПоХарактеристике;
+
+ Если НЕ ДополнительныеСвойства.ПерезаполнитьХарактеристики И Не ЗначениеЗаполнено(ВладелецХарактеристик) И НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
+ МассивСтарыеРеквизиты = СтарыеРеквизиты.РеквизитыХарактеристикДляКлючаЦенИмяРеквизита.Выгрузить().ВыгрузитьКолонку("ИмяРеквизита");
+ МассивТекущиеРеквизиты = РеквизитыХарактеристикДляКлючаЦен.ВыгрузитьКолонку("ИмяРеквизита");
+ ДополнительныеСвойства.ПерезаполнитьХарактеристики = Не ОбщегоНазначения.КоллекцииИдентичны(МассивСтарыеРеквизиты, МассивТекущиеРеквизиты);
+ КонецЕсли;
+
+ ДополнительныеСвойства.ПерезаполнитьСерии =
+ НастройкиКлючаЦенПоСерии <> Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать
+ И Не ЗначениеЗаполнено(ВладелецСерий)
+ И Не НастройкиКлючаЦенПоСерии = СтарыеРеквизиты.НастройкиКлючаЦенПоСерии;
+
+ Если НЕ ДополнительныеСвойства.ПерезаполнитьСерии И Не ЗначениеЗаполнено(ВладелецХарактеристик) И НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
+ МассивСтарыеРеквизиты = СтарыеРеквизиты.РеквизитыСерийДляКлючаЦенИмяРеквизита.Выгрузить().ВыгрузитьКолонку("ИмяРеквизита");
+ МассивТекущиеРеквизиты = РеквизитыСерийДляКлючаЦен.ВыгрузитьКолонку("ИмяРеквизита");
+ ДополнительныеСвойства.ПерезаполнитьСерии = Не ОбщегоНазначения.КоллекцииИдентичны(МассивСтарыеРеквизиты, МассивТекущиеРеквизиты);
+ КонецЕсли;
+ КонецЕсли;
+
+ // При необходимости перезаполним настройки ценообразования по владельцу
+ ОбновитьНастройкиЦенообразованияПоВладельцу("НастройкиКлючаЦенПоХарактеристике");
+
+ ОбновитьНастройкиЦенообразованияПоВладельцу("НастройкиКлючаЦенПоСерии");
+
+ Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(ЭтотОбъект);
+
+ // Обновим элементы справочника НаборыДополнительныхРеквизитовИСведений и ПВХ ДополнительныеРеквизитыИСведения.
+ УправлениеСвойствамиУТ.ОбновитьПоляДополнительныхСвойств(ЭтотОбъект,
+ "Справочник_Номенклатура");
+ УправлениеСвойствамиУТ.ОбновитьПоляДополнительныхСвойств(ЭтотОбъект,
+ "Справочник_ХарактеристикиНоменклатуры",
+ "НаборСвойствХарактеристик",
+ " " + НСтр("ru = '(Для характеристик)'"),
+ ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры
+ ИЛИ ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры);
+ УправлениеСвойствамиУТ.ОбновитьПоляДополнительныхСвойств(ЭтотОбъект,
+ "Справочник_СерииНоменклатуры",
+ "НаборСвойствСерий",
+ " " + НСтр("ru = '(Для серий)'"));
+
+ ЗаполнитьТЧПолитикиУчетаСерийСкладамиИПодразделениями();
+
+ УстановкаРеквизитовИсторииПереходаНаНовыеФормулы();
+
+КонецПроцедуры
+
+Процедура ПриКопировании(ОбъектКопирования)
+
+ МетаданныеОбъекта = Метаданные(); // ОбъектМетаданныхСправочник
+
+ Если Не ЭтоГруппа Тогда
+
+ НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка();
+ НаборСвойствХарактеристик = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка();
+ НаборСвойствСерий = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка();
+
+ ОбъектМетаданныхРеквизит = МетаданныеОбъекта.Реквизиты.ШаблонНаименованияДляПечатиНоменклатуры; // ОбъектМетаданныхРеквизит
+ ШаблонНаименованияДляПечатиНоменклатуры = ОбъектМетаданныхРеквизит.ЗначениеЗаполнения;
+ ШаблонРабочегоНаименованияНоменклатуры = "";
+ ЗапретРедактированияРабочегоНаименованияНоменклатуры = Ложь;
+ ЗапретРедактированияНаименованияДляПечатиНоменклатуры = Ложь;
+
+ ОбъектМетаданныхРеквизит = МетаданныеОбъекта.Реквизиты.ШаблонНаименованияДляПечатиХарактеристики; // ОбъектМетаданныхРеквизит
+ ШаблонНаименованияДляПечатиХарактеристики = ОбъектМетаданныхРеквизит.ЗначениеЗаполнения;
+ ШаблонРабочегоНаименованияХарактеристики = "";
+ ЗапретРедактированияРабочегоНаименованияХарактеристики = Ложь;
+ ЗапретРедактированияНаименованияДляПечатиХарактеристики = Ложь;
+
+ ШаблонРабочегоНаименованияСерии = "";
+
+ Если ПолучитьФункциональнуюОпцию("ИспользоватьТоварныеКатегории") Тогда
+ Если Не ОбъектКопирования.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
+ ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры = Истина;
+ ВладелецТоварныхКатегорий = ОбъектКопирования.Ссылка;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если ОбъектКопирования.ИспользоватьСерии Тогда
+ Если Не ОбъектКопирования.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+ НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина;
+ ВладелецСерий = ОбъектКопирования.Ссылка;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если ОбъектКопирования.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры Тогда
+ ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры;
+ ВладелецХарактеристик = ОбъектКопирования.Ссылка;
+ КонецЕсли;
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
+
+ Если ЭтоГруппа Тогда
+ Возврат;
+ КонецЕсли;
+
+ МассивНепроверяемыхРеквизитов = Новый Массив;
+ Если Не Справочники.ГруппыДоступаНоменклатуры.ИспользуютсяГруппыДоступа()
+ ИЛИ Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовНоменклатуры") Тогда
+ МассивНепроверяемыхРеквизитов.Добавить("ГруппаДоступа");
+ КонецЕсли;
+
+ МассивНепроверяемыхРеквизитов.Добавить("ПолитикиУчетаСерий");
+ МассивНепроверяемыхРеквизитов.Добавить("ПолитикиУчетаСерий.Склад");
+ МассивНепроверяемыхРеквизитов.Добавить("ПолитикиУчетаСерий.ПолитикаУчетаСерий");
+
+ Если ИспользоватьСерии
+ И Не НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+
+ Если Не (ИспользоватьСрокГодностиСерии
+ Или ИспользоватьДатуПроизводстваСерии) Тогда
+
+ МассивНепроверяемыхРеквизитов.Добавить("ТочностьУказанияСрокаГодностиСерии");
+
+ КонецЕсли;
+
+ КлючевыеРеквизиты = Новый Массив;
+ КлючевыеРеквизиты.Добавить("Склад");
+
+ ОбщегоНазначенияУТ.ПроверитьНаличиеДублейСтрокТЧ(ЭтотОбъект, "ПолитикиУчетаСерий", КлючевыеРеквизиты, Отказ,,Ложь);
+
+ Если Не Отказ
+ И ПолитикаУчетаСерий = Справочники.ПолитикиУчетаСерий.СерииНеИспользуются
+ И ПолитикиУчетаСерий.НайтиСтроки(Новый Структура("ПолитикаУчетаСерий",
+ Справочники.ПолитикиУчетаСерий.СерииНеИспользуются)).Количество()
+ = ПолитикиУчетаСерий.Количество() Тогда
+ ТекстСообщения = НСтр("ru = 'Включено использование серий, но политика учета серий не назначена ни одному складу.'");
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,Ссылка,,,Отказ);
+ КонецЕсли;
+
+ ОписанияИспользованияРеквизитовСерии = Справочники.ВидыНоменклатуры.ОписанияИспользованияРеквизитовСерии();
+
+ ЕстьВключеннаяНастройка = Ложь;
+
+ Для Каждого ОписаниеРеквизита Из ОписанияИспользованияРеквизитовСерии Цикл
+ Если ЭтотОбъект[ОписаниеРеквизита.ИмяНастройки] Тогда
+ ЕстьВключеннаяНастройка = Истина;
+ Прервать;
+ КонецЕсли;
+ КонецЦикла;
+
+ Если Не ЕстьВключеннаяНастройка Тогда
+ ТекстСообщения = НСтр("ru = 'Включено использование серий, но не настроено, какие реквизиты серии будут использоваться. Необходимо выключить использование хотя бы одного реквизита.'");
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,Ссылка,,,Отказ);
+ КонецЕсли;
+
+ Иначе
+
+ МассивНепроверяемыхРеквизитов.Добавить("ТочностьУказанияСрокаГодностиСерии");
+ МассивНепроверяемыхРеквизитов.Добавить("НастройкаИспользованияСерий");
+ МассивНепроверяемыхРеквизитов.Добавить("ПолитикаУчетаСерий");
+
+ КонецЕсли;
+
+ Если Не НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+ МассивНепроверяемыхРеквизитов.Добавить("ВладелецСерий");
+ Иначе
+ МассивНепроверяемыхРеквизитов.Добавить("ВладелецСерий");
+ Если Не ЗначениеЗаполнено(ВладелецСерий) Тогда
+ ТекстСообщения = НСтр("ru = 'Сделана настройка, что серии используются также, как в другом виде номенклатуры, но при этом не выбран этот вид.'");
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"ВариантЗаданияНастроекСерий",, Отказ);
+ КонецЕсли;
+ КонецЕсли;
+
+ Если Не ИспользоватьХарактеристики Тогда
+ МассивНепроверяемыхРеквизитов.Добавить("ИспользованиеХарактеристик");
+ МассивНепроверяемыхРеквизитов.Добавить("ВладелецХарактеристик");
+ ИначеЕсли ИспользованиеХарактеристик <> Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда
+ МассивНепроверяемыхРеквизитов.Добавить("ВладелецХарактеристик");
+ Иначе
+ МассивНепроверяемыхРеквизитов.Добавить("ВладелецХарактеристик");
+ Если Не ЗначениеЗаполнено(ВладелецХарактеристик) Тогда
+ ТекстСообщения = НСтр("ru = 'Сделана настройка, характеристики общие с другим видом номенклатуры, но при этом не выбран этот вид.'");
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"ИспользованиеХарактеристик","Объект", Отказ);
+ КонецЕсли;
+ КонецЕсли;
+
+ Если Не ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
+ МассивНепроверяемыхРеквизитов.Добавить("ВладелецТоварныхКатегорий");
+ Иначе
+ МассивНепроверяемыхРеквизитов.Добавить("ВладелецТоварныхКатегорий");
+ Если Не ЗначениеЗаполнено(ВладелецТоварныхКатегорий) Тогда
+ ТекстСообщения = НСтр("ru = 'Сделана настройка, товарные категории общие с другим видом номенклатуры, но при этом не выбран этот вид.'");
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"НастройкаТоварныхКатегорий",, Отказ);
+ КонецЕсли;
+ КонецЕсли;
+
+ Если Не Справочники.ГруппыДоступаНоменклатуры.ИспользуютсяГруппыДоступа() Тогда
+ МассивНепроверяемыхРеквизитов.Добавить("ГруппаДоступа");
+ КонецЕсли;
+
+ Если Не ИспользоватьУпаковки Тогда
+ МассивНепроверяемыхРеквизитов.Добавить("НаборУпаковок");
+ КонецЕсли;
+
+ Если Не ПоставляетсяВМногооборотнойТаре Тогда
+ МассивНепроверяемыхРеквизитов.Добавить("НоменклатураМногооборотнаяТара");
+ МассивНепроверяемыхРеквизитов.Добавить("ХарактеристикаМногооборотнаяТара");
+ ИначеЕсли Не Справочники.Номенклатура.ХарактеристикиИспользуются(НоменклатураМногооборотнаяТара) Тогда
+ МассивНепроверяемыхРеквизитов.Добавить("ХарактеристикаМногооборотнаяТара");
+ КонецЕсли;
+
+ СтруктураШаблонов = Новый Структура;
+ СтруктураШаблонов.Вставить("ШаблонНаименованияДляПечатиНоменклатуры", ШаблонНаименованияДляПечатиНоменклатуры);
+ СтруктураШаблонов.Вставить("ШаблонНаименованияДляПечатиХарактеристики", ШаблонНаименованияДляПечатиХарактеристики);
+ СтруктураШаблонов.Вставить("ШаблонРабочегоНаименованияНоменклатуры", ШаблонРабочегоНаименованияНоменклатуры);
+ СтруктураШаблонов.Вставить("ШаблонРабочегоНаименованияХарактеристики", ШаблонРабочегоНаименованияХарактеристики);
+
+ ШаблонТекстаОшибки = НСтр("ru='В формуле шаблона ""%ИмяШаблона%"" обнаружены ошибки'");
+ МетаданныеОбъекта = Метаданные();
+
+ Для Каждого Элемент Из СтруктураШаблонов Цикл
+
+ Шаблон = Элемент.Значение;
+
+ Если ЗначениеЗаполнено(Шаблон) Тогда
+
+ ТекстОшибки = СтрЗаменить(
+ ШаблонТекстаОшибки,
+ "%ИмяШаблона%",
+ МетаданныеОбъекта.Реквизиты[Элемент.Ключ].Синоним);
+
+ ОжидаемыйТипРезультата = Новый ОписаниеТипов("Строка");
+ ОперандыФормулы = РаботаСФормуламиКлиентСервер.ОперандыТекстовойФормулы(Шаблон);
+ ПараметрыСообщенийПроверкиФормулы = РаботаСФормулами.ПараметрыПроверкиФормулы();
+ ПараметрыСообщенийПроверкиФормулы.Поле = Элемент.Ключ;
+ ПараметрыСообщенийПроверкиФормулы.ПутьКДанным = "Объект";
+ ПараметрыСообщенийПроверкиФормулы.СообщениеОбОшибке = ТекстОшибки;
+
+ НаборыСвойств = Новый Структура("НаборСвойств, НаборСвойствСерий, НаборСвойствХарактеристик");
+ ЗаполнитьЗначенияСвойств(НаборыСвойств, ЭтотОбъект);
+
+ ДеревоОперандов = Справочники.ВидыНоменклатуры.ПодготовитьДеревоОперандов(НаборыСвойств, Элемент.Ключ);
+
+ ТипыОперандов = Новый Соответствие;
+ Справочники.ВидыНоменклатуры.ПолучитьТипыОперандов(ДеревоОперандов, ТипыОперандов);
+
+ ПараметрыСообщенийПроверкиФормулы.Вставить("ТипыОперандов", Новый ФиксированноеСоответствие(ТипыОперандов));
+
+ Если Не РаботаСФормулами.ПроверитьФормулу(Шаблон, ОперандыФормулы, ОжидаемыйТипРезультата, ПараметрыСообщенийПроверкиФормулы) Тогда
+ Отказ = Истина;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам
+ И ИспользованиеХарактеристик <> Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры
+ И РеквизитыХарактеристикДляКлючаЦен.Количество() = 0 Тогда
+
+ ТекстСообщения = НСтр("ru = 'Включено использование характеристик в ценообразовании по реквизитам, но не выбран ни один реквизит.'");
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,Ссылка,,,Отказ);
+
+ КонецЕсли;
+
+ Если НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам и Не НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+ Если РеквизитыСерийДляКлючаЦен.Количество() = 0 Тогда
+
+ ТекстСообщения = НСтр("ru = 'Включено использование серий в ценообразовании по реквизитам, но не выбран ни один реквизит.'");
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,Ссылка,,,Отказ);
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ ПроверитьСовпадающиеРеквизитыДляОтбора(Отказ);
+
+ ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
+
+КонецПроцедуры
+
+Процедура ПриЗаписи(Отказ)
+
+ Если ОбменДанными.Загрузка Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если ЭтоГруппа Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если ДополнительныеСвойства.ЭтоНовый
+ И Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовНоменклатуры") Тогда
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВидыНоменклатуры.Ссылка) КАК КоличествоВидов
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | НЕ ВидыНоменклатуры.ЭтоГруппа";
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Если Выборка.Следующий() Тогда
+
+ Если Выборка.КоличествоВидов > 2 Тогда
+ УстановитьПривилегированныйРежим(Истина);
+
+ Константы.ИспользоватьНесколькоВидовНоменклатуры.Установить(Истина);
+
+ УстановитьПривилегированныйРежим(Ложь);
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+
+ ОбновитьФлагиИспользованияСерийНаСкладахИВПроизводстве();
+ ОбновитьСвязанныеВидыНоменклатуры();
+
+ РезультатОбновления = УстановкаЦенСервер.ОбновитьХарактеристикииСерииЦенообразования(Ссылка, ДополнительныеСвойства);
+
+ Если Не РезультатОбновления.Результат Тогда
+ Отказ = Истина;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
+
+ Если ЭтоГруппа Тогда
+ Возврат;
+ КонецЕсли;
+
+ Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект);
+ Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(ЭтотОбъект);
+
+КонецПроцедуры
+
+Процедура ПередУдалением(Отказ)
+
+ Если ОбменДанными.Загрузка Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если ЭтоГруппа Тогда
+ Возврат;
+ КонецЕсли;
+
+ УправлениеСвойствами.ПередУдалениемВидаОбъекта(ЭтотОбъект, "НаборСвойств");
+ УправлениеСвойствами.ПередУдалениемВидаОбъекта(ЭтотОбъект, "НаборСвойствСерий");
+ УправлениеСвойствами.ПередУдалениемВидаОбъекта(ЭтотОбъект, "НаборСвойствХарактеристик");
+
+КонецПроцедуры
+
+Процедура ПриЧтенииПредставленийНаСервере() Экспорт
+
+ МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура УстановкаРеквизитовИсторииПереходаНаНовыеФормулы()
+
+ Если ПустаяСтрока(ШаблонНаименованияДляПечатиНоменклатурыИсторияПереходаНаНовыеФормулы)
+ И НЕ ПустаяСтрока(ШаблонНаименованияДляПечатиНоменклатуры) Тогда
+ ШаблонНаименованияДляПечатиНоменклатурыИсторияПереходаНаНовыеФормулы = ШаблонНаименованияДляПечатиНоменклатуры;
+ КонецЕсли;
+ Если ПустаяСтрока(ШаблонНаименованияДляПечатиХарактеристикиИсторияПереходаНаНовыеФормулы)
+ И НЕ ПустаяСтрока(ШаблонНаименованияДляПечатиХарактеристики) Тогда
+ ШаблонНаименованияДляПечатиХарактеристикиИсторияПереходаНаНовыеФормулы = ШаблонНаименованияДляПечатиХарактеристики;
+ КонецЕсли;
+ Если ПустаяСтрока(ШаблонРабочегоНаименованияНоменклатурыИсторияПереходаНаНовыеФормулы)
+ И НЕ ПустаяСтрока(ШаблонРабочегоНаименованияНоменклатуры) Тогда
+ ШаблонРабочегоНаименованияНоменклатурыИсторияПереходаНаНовыеФормулы = ШаблонРабочегоНаименованияНоменклатуры;
+ КонецЕсли;
+ Если ПустаяСтрока(ШаблонРабочегоНаименованияСерииИсторияПереходаНаНовыеФормулы)
+ И НЕ ПустаяСтрока(ШаблонРабочегоНаименованияСерии) Тогда
+ ШаблонРабочегоНаименованияСерииИсторияПереходаНаНовыеФормулы = ШаблонРабочегоНаименованияСерии;
+ КонецЕсли;
+ Если ПустаяСтрока(ШаблонРабочегоНаименованияХарактеристикиИсторияПереходаНаНовыеФормулы)
+ И НЕ ПустаяСтрока(ШаблонРабочегоНаименованияХарактеристики) Тогда
+ ШаблонРабочегоНаименованияХарактеристикиИсторияПереходаНаНовыеФормулы = ШаблонРабочегоНаименованияХарактеристики;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ОбновитьФлагиИспользованияСерийНаСкладахИВПроизводстве()
+
+ Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры") Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если ДополнительныеСвойства.Свойство("ПропуститьОбновлениеФлагаИспользованияСерий") Тогда
+ Возврат;
+ КонецЕсли;
+
+ УстановитьПривилегированныйРежим(Истина);
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ПолитикиУчетаСерий.Склад,
+ | ИСТИНА КАК ИспользоватьСерии,
+ | МАКСИМУМ(ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям) КАК УчитыватьСебестоимостьПоСериям
+ |ПОМЕСТИТЬ ВидыНоменклатуры
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
+ |
+ |СГРУППИРОВАТЬ ПО
+ | ПолитикиУчетаСерий.Склад
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | Склады.Ссылка КАК Склад,
+ | ЕСТЬNULL(ВидыНоменклатуры.ИспользоватьСерии, ЛОЖЬ) КАК ИспользоватьСерииНоменклатуры,
+ | ЕСТЬNULL(ВидыНоменклатуры.УчитыватьСебестоимостьПоСериям, ЛОЖЬ) КАК УчитыватьСебестоимостьПоСериям
+ |ИЗ
+ | Справочник.Склады КАК Склады
+ | ЛЕВОЕ СОЕДИНЕНИЕ ВидыНоменклатуры КАК ВидыНоменклатуры
+ | ПО Склады.Ссылка = ВидыНоменклатуры.Склад
+ |ГДЕ
+ | НЕ Склады.ЭтоГруппа
+ | И (ЕСТЬNULL(ВидыНоменклатуры.ИспользоватьСерии, ЛОЖЬ) <> Склады.ИспользоватьСерииНоменклатуры
+ | ИЛИ ЕСТЬNULL(ВидыНоменклатуры.УчитыватьСебестоимостьПоСериям, ЛОЖЬ) <> Склады.УчитыватьСебестоимостьПоСериям)";
+
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Пока Выборка.Следующий() Цикл
+
+ Если ТипЗнч(Выборка.Склад) = Тип("СправочникСсылка.Склады") Тогда
+
+ СкладОбъект = Выборка.Склад.ПолучитьОбъект();
+
+ СкладОбъект.ИспользоватьСерииНоменклатуры = Выборка.ИспользоватьСерииНоменклатуры;
+ СкладОбъект.УчитыватьСебестоимостьПоСериям = Выборка.УчитыватьСебестоимостьПоСериям;
+
+ СкладОбъект.ДополнительныеСвойства.Вставить("ПропуститьОбновлениеФлагаИспользованияСерий");
+
+ СкладОбъект.Записать();
+
+ Иначе
+
+ ПодразделениеОбъект = Выборка.Склад.ПолучитьОбъект();
+
+ ПодразделениеОбъект.ИспользоватьСерииНоменклатуры = Выборка.ИспользоватьСерииНоменклатуры;
+ ПодразделениеОбъект.УчитыватьСебестоимостьПоСериям = Выборка.УчитыватьСебестоимостьПоСериям;
+
+ ПодразделениеОбъект.ДополнительныеСвойства.Вставить("ПропуститьОбновлениеФлагаИспользованияСерий");
+ ПодразделениеОбъект.Записать();
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+// Добавляет в ТЧ ПолитикиУчетаСерий склады и производственные подразделения
+// которые в ТЧ еще не добавлены.
+//
+Процедура ЗаполнитьТЧПолитикиУчетаСерийСкладамиИПодразделениями()
+
+ Если ДополнительныеСвойства.Свойство("ПропуститьЗаполнениеТЧПолитикиУчетаСерий") Тогда
+ Возврат;
+ КонецЕсли;
+
+ Запрос = Новый Запрос();
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ПолитикиУчетаСерий.Склад КАК Склад,
+ | ПолитикиУчетаСерий.ПолитикаУчетаСерий КАК ПолитикаУчетаСерий
+ |ПОМЕСТИТЬ ВТПолитикиУчетаСерий
+ |ИЗ
+ | &ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | Склады.Ссылка КАК Склад,
+ | &ПолитикаУчетаСерийПоУмолчанию КАК ПолитикаУчетаСерий
+ |ИЗ
+ | Справочник.Склады КАК Склады
+ | ЛЕВОЕ СОЕДИНЕНИЕ ВТПолитикиУчетаСерий КАК ПолитикиУчетаСерий
+ | ПО Склады.Ссылка = ПолитикиУчетаСерий.Склад
+ |ГДЕ
+ | ПолитикиУчетаСерий.Склад ЕСТЬ NULL
+ | И НЕ Склады.ЭтоГруппа
+ |
+ |ОБЪЕДИНИТЬ ВСЕ
+ |
+ |ВЫБРАТЬ
+ | Подразделения.Ссылка КАК Склад,
+ | &ПолитикаУчетаСерийПоУмолчанию КАК ПолитикаУчетаСерий
+ |ИЗ
+ | Справочник.СтруктураПредприятия КАК Подразделения
+ | ЛЕВОЕ СОЕДИНЕНИЕ ВТПолитикиУчетаСерий КАК ПолитикиУчетаСерий
+ | ПО Подразделения.Ссылка = ПолитикиУчетаСерий.Склад
+ |ГДЕ
+ | ПолитикиУчетаСерий.Склад ЕСТЬ NULL
+ | И Подразделения.ПроизводственноеПодразделение";
+
+ Запрос.УстановитьПараметр("ПолитикиУчетаСерий", ПолитикиУчетаСерий.Выгрузить());
+ Запрос.УстановитьПараметр("ПолитикаУчетаСерийПоУмолчанию", ПолитикаУчетаСерий);
+
+ УстановитьПривилегированныйРежим(Истина);
+ Выборка = Запрос.Выполнить().Выбрать();
+ УстановитьПривилегированныйРежим(Ложь);
+
+ Пока Выборка.Следующий() Цикл
+ НоваяСтрока = ПолитикиУчетаСерий.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ОбновитьСвязанныеВидыНоменклатуры()
+
+ Если ДополнительныеСвойства.ЭтоНовый Тогда
+ Возврат;
+ КонецЕсли;
+
+ ОбработанныеВидыНоменклатуры = Новый Массив();
+
+ Если ДополнительныеСвойства.ИспользоватьСерии
+ И Не ДополнительныеСвойства.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатуры.Ссылка КАК ВидНоменклатуры
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | ВидыНоменклатуры.ВладелецСерий = &ВладелецСерий";
+
+ Запрос.УстановитьПараметр("ВладелецСерий", Ссылка);
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Пока Выборка.Следующий() Цикл
+
+ ОбработанныеВидыНоменклатуры.Добавить(Выборка.ВидНоменклатуры);
+
+ ИзменяемыйОбъект = Выборка.ВидНоменклатуры.ПолучитьОбъект();
+
+ ИзменяемыйОбъект.ИспользоватьСерии = ИспользоватьСерии;
+ Если Не ИспользоватьСерии Тогда
+ ИзменяемыйОбъект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Ложь;
+ // Остальные поля очистятся при записи
+ ИзменяемыйОбъект.Записать();
+ Продолжить;
+ КонецЕсли;
+
+ ИзменяемыйОбъект.НастройкаИспользованияСерий = НастройкаИспользованияСерий;
+ ИзменяемыйОбъект.ТочностьУказанияСрокаГодностиСерии = ТочностьУказанияСрокаГодностиСерии;
+ ИзменяемыйОбъект.ПолитикиУчетаСерий.Загрузить(ПолитикиУчетаСерий.Выгрузить());
+ ИзменяемыйОбъект.НастройкиКлючаЦенПоСерии = НастройкиКлючаЦенПоСерии;
+
+ // Остальные поля заполнятся при записи
+ ИзменяемыйОбъект.ДополнительныеСвойства.Вставить("ПропуститьЗаполнениеТЧПолитикиУчетаСерий");
+ ИзменяемыйОбъект.ДополнительныеСвойства.Вставить("ПропуститьОбновлениеФлагаИспользованияСерий");
+
+ ИзменяемыйОбъект.Записать();
+
+ КонецЦикла;
+ КонецЕсли;
+
+ Если ДополнительныеСвойства.ИспользоватьХарактеристики
+ И Не ДополнительныеСвойства.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатуры.Ссылка КАК ВидНоменклатуры
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | ВидыНоменклатуры.ВладелецХарактеристик = &ВладелецХарактеристик
+ | И НЕ ВидыНоменклатуры.Ссылка В (&ОбработанныеВидыНоменклатуры)";
+
+ Запрос.УстановитьПараметр("ВладелецХарактеристик", Ссылка);
+ Запрос.УстановитьПараметр("ОбработанныеВидыНоменклатуры", ОбработанныеВидыНоменклатуры);
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Пока Выборка.Следующий() Цикл
+
+ ИзменяемыйОбъект = Выборка.ВидНоменклатуры.ПолучитьОбъект();
+ ИзменяемыйОбъект.НастройкиКлючаЦенПоХарактеристике = НастройкиКлючаЦенПоХарактеристике;
+
+ // Остальные поля заполнятся при записи
+ ИзменяемыйОбъект.ДополнительныеСвойства.Вставить("ПропуститьЗаполнениеТЧПолитикиУчетаСерий");
+ ИзменяемыйОбъект.ДополнительныеСвойства.Вставить("ПропуститьОбновлениеФлагаИспользованияСерий");
+
+ ИзменяемыйОбъект.Записать();
+
+ КонецЦикла;
+ КонецЕсли;
+
+КонецПроцедуры
+
+// Проверяет, есть ли совпадающие реквизиты для быстрого отбора номенклатуры и характеристик.
+// Если есть, то выводит сообщение пользователю, т.к. не допускается добавлять один и тот же
+// дополнительный реквизит в панель быстрого отбора и для номенклатуры и для характеристик.
+// Если требуется такая настройка, то следует создать два отдельных доп. реквизита
+// и соответственно указать их для номенклатуры и для характеристик.
+//
+// Например:
+// Марка (для номенклатуры) и Марка (для характеристик).
+//
+// Параметры:
+// Отказ - Булево, Неопределено - переменная в которую записывается флаг отказа.
+//
+Процедура ПроверитьСовпадающиеРеквизитыДляОтбора(Отказ)
+
+ Если Не ИспользоватьХарактеристики Тогда
+ Возврат;
+ КонецЕсли;
+
+ СовпадающиеРеквизиты = СовпадающиеРеквизитыОтбораНоменклатурыХарактеристик();
+
+ Если СовпадающиеРеквизиты.Количество() > 0 Тогда
+
+ Отказ = Истина;
+
+ Для каждого ПараметрыРеквизита Из СовпадающиеРеквизиты Цикл
+
+ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Дополнительный реквизит для отбора номенклатуры в строке %1 совпадает с дополнительным реквизитом для отбора характеристик.'"),
+ ПараметрыРеквизита.НомерСтроки);
+
+ Поле = "РеквизитыБыстрогоОтбораНоменклатуры[" + Формат(ПараметрыРеквизита.ИндексСтроки, "ЧЦ=10; ЧГ=0") + "].ПредставлениеРеквизита";
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , Поле, "Объект");
+
+ КонецЦикла;
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+// Возвращаемое значение:
+// Массив из Структура:
+// * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения
+// * НомерСтроки - Число
+// * ИндексСтроки - Число
+//
+Функция СовпадающиеРеквизитыОтбораНоменклатурыХарактеристик()
+
+ СовпадающиеРеквизиты = Новый Массив;
+
+ Отбор = Новый Структура("Свойство");
+
+ Для каждого СтрокаТабл Из РеквизитыБыстрогоОтбораНоменклатуры Цикл
+
+ Если Не СтрокаТабл.ЭтоДопРеквизит
+ ИЛИ Не СтрокаТабл.Используется Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ЗаполнитьЗначенияСвойств(Отбор, СтрокаТабл);
+
+ МассивСтрок = РеквизитыБыстрогоОтбораХарактеристик.НайтиСтроки(Отбор);
+
+ Если МассивСтрок.Количество() > 0 Тогда
+ ПараметрыРеквизита = Новый Структура("Свойство, НомерСтроки, ИндексСтроки",
+ СтрокаТабл.Свойство, СтрокаТабл.НомерСтроки, РеквизитыБыстрогоОтбораНоменклатуры.Индекс(СтрокаТабл));
+
+ СовпадающиеРеквизиты.Добавить(ПараметрыРеквизита);
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат СовпадающиеРеквизиты;
+
+КонецФункции
+
+// Обновляет настройки ценообразования по владельцу
+//
+// Параметры:
+// ИмяРеквизита - Строка - по характеристикам или сериям.
+//
+Процедура ОбновитьНастройкиЦенообразованияПоВладельцу(ИмяРеквизита)
+
+ Если ИмяРеквизита = "НастройкиКлючаЦенПоХарактеристике" Тогда
+ ВладелецНастроек = ВладелецХарактеристик;
+ ИмяТабличнойЧасти = "РеквизитыХарактеристикДляКлючаЦен";
+ Иначе
+ ВладелецНастроек = ВладелецСерий;
+ ИмяТабличнойЧасти = "РеквизитыСерийДляКлючаЦен";
+ КонецЕсли;
+
+ Если Не ЗначениеЗаполнено(ВладелецНастроек) Тогда
+ Возврат;
+ КонецЕсли;
+
+ РеквизитОбъекта = ЭтотОбъект[ИмяРеквизита];
+
+ РеквизитОбъекта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВладелецНастроек, ИмяРеквизита);
+
+ Если ЭтотОбъект[ИмяРеквизита] <> РеквизитОбъекта Тогда
+ ЭтотОбъект[ИмяРеквизита] = РеквизитОбъекта;
+ КонецЕсли;
+
+ Если РеквизитОбъекта = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
+ // получить список доп реквизитов по которым искать хар-ку
+ РеквизитыДляКлючаЦен = Справочники.ВидыНоменклатуры.ПолучитьРеквизитыДляКлючаЦен(ВладелецНастроек, "Характеристики");
+ ЭтотОбъект[ИмяТабличнойЧасти].Загрузить(РеквизитыДляКлючаЦен);
+ Иначе
+ ЭтотОбъект[ИмяТабличнойЧасти].Очистить();
+ КонецЕсли;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецЕсли
+#КонецЕсли
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/РазблокированиеРеквизитов.xml b/src/Catalogs/ВидыНоменклатуры/Forms/РазблокированиеРеквизитов.xml
new file mode 100644
index 0000000..b2fcccf
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/РазблокированиеРеквизитов.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/РазблокированиеРеквизитов/Ext/Form.xml b/src/Catalogs/ВидыНоменклатуры/Forms/РазблокированиеРеквизитов/Ext/Form.xml
new file mode 100644
index 0000000..a8bd7da
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/РазблокированиеРеквизитов/Ext/Form.xml
@@ -0,0 +1,259 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/РазблокированиеРеквизитов/Ext/Form/Module.bsl b/src/Catalogs/ВидыНоменклатуры/Forms/РазблокированиеРеквизитов/Ext/Form/Module.bsl
new file mode 100644
index 0000000..6502a2a
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/РазблокированиеРеквизитов/Ext/Form/Module.bsl
@@ -0,0 +1,94 @@
+
+#Область ОбработчикиСобытийФормы
+
+&НаКлиенте
+Процедура РазрешитьРедактирование(Команда)
+
+ Результат = Новый Массив;
+
+ Если РазрешитьРедактированиеТипНоменклатуры Тогда
+ Результат.Добавить("ТипНоменклатуры");
+ Результат.Добавить("ОсобенностьУчета");
+ КонецЕсли;
+
+ Если РазрешитьРедактированиеИспользованиеХарактеристик Тогда
+ Результат.Добавить("ИспользоватьХарактеристики");
+ Результат.Добавить("ИспользованиеХарактеристик");
+ Результат.Добавить("ВладелецХарактеристик");
+ КонецЕсли;
+
+ Если РазрешитьРедактированиеИспользованияСерий Тогда
+ Результат.Добавить("ИспользоватьСерии");
+ Результат.Добавить("ПолитикиУчетаСерий");
+ Результат.Добавить("НастройкаИспользованияСерий");
+ Результат.Добавить("ТочностьУказанияСрокаГодностиСерии");
+ Результат.Добавить("ВладелецСерий");
+ Результат.Добавить("НастройкиСерийБерутсяИзДругогоВидаНоменклатуры");
+ Результат.Добавить("ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий");
+ КонецЕсли;
+
+ Если РазрешитьРедактированиеВариантаОформленияУслуги Тогда
+ Результат.Добавить("ВариантОформленияПродажи");
+ КонецЕсли;
+
+ Если РазрешитьРедактированиеАлкогольнаяПродукция Тогда
+ Результат.Добавить("АлкогольнаяПродукция");
+ КонецЕсли;
+
+ Если РазрешитьРедактированиеСодержитДрагоценныеМатериалы Тогда
+ Результат.Добавить("СодержитДрагоценныеМатериалы");
+ КонецЕсли;
+
+ Если РазрешитьРедактированиеНастроекНабора Тогда
+ Результат.Добавить("ВариантПредставленияНабораВПечатныхФормах");
+ Результат.Добавить("ВариантРасчетаЦеныНабора");
+ КонецЕсли;
+
+ Если РазрешитьРедактированиеВариантаЗаданияТоварныхКатегорий Тогда
+ Результат.Добавить("ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры");
+ Результат.Добавить("ВладелецТоварныхКатегорий");
+ КонецЕсли;
+
+ Если РазрешитьРедактированиеЦенообразование Тогда
+ Результат.Добавить("НастройкиКлючаЦенПоХарактеристике");
+ Результат.Добавить("НастройкиКлючаЦенПоСерии");
+ Результат.Добавить("НастройкиКлючаЦенПоУпаковке");
+ КонецЕсли;
+
+ Закрыть(Результат);
+
+КонецПроцедуры // РазрешитьРедактирование()
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
+ Возврат;
+ КонецЕсли;
+
+ РазрешитьРедактированиеИспользованиеХарактеристик = Истина;
+ РазрешитьРедактированиеТипНоменклатуры = Истина;
+ РазрешитьРедактированиеИспользованияСерий = Истина;
+ РазрешитьРедактированиеВариантаОформленияУслуги = Истина;
+ РазрешитьРедактированиеАлкогольнаяПродукция = Истина;
+ РазрешитьРедактированиеСодержитДрагоценныеМатериалы = Истина;
+ РазрешитьРедактированиеНастроекНабора = Истина;
+ РазрешитьРедактированиеВариантаЗаданияТоварныхКатегорий = Истина;
+ РазрешитьРедактированиеЦенообразование = Истина;
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
+
+ СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
+
+КонецПроцедуры
+
+#КонецОбласти
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаВыбора.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаВыбора.xml
new file mode 100644
index 0000000..1b4282f
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаВыбора.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаВыбора/Ext/Form.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаВыбора/Ext/Form.xml
new file mode 100644
index 0000000..99a11a7
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаВыбора/Ext/Form.xml
@@ -0,0 +1,788 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаВыбора/Ext/Form/Module.bsl b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаВыбора/Ext/Form/Module.bsl
new file mode 100644
index 0000000..2037862
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаВыбора/Ext/Form/Module.bsl
@@ -0,0 +1,279 @@
+
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
+ Возврат;
+ КонецЕсли;
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
+
+ НесколькоВидовНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовНоменклатуры");
+ Элементы.ДекорацияРасшифровкаОтбора.Видимость = Ложь;
+
+ Если ЗначениеЗаполнено(Параметры.ТекущийВид) Тогда
+
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,
+ "Ссылка",
+ Параметры.ТекущийВид,
+ ВидСравненияКомпоновкиДанных.НеРавно,
+ ,
+ Истина);
+ ИначеЕсли Параметры.Свойство("Номенклатура") Тогда
+
+ НастроитьСписок(Параметры.Номенклатура);
+
+ КонецЕсли;
+
+ // ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+ РаботаСНоменклатурой.ПриСозданииНаСервереФормаСпискаВидаНоменклатуры(ЭтотОбъект, ЭтотОбъект.КоманднаяПанель);
+ // Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+ ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
+
+ МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
+
+ // ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+ Если ИмяСобытия = РаботаСНоменклатуройКлиент.ОписаниеОповещенийПодсистемы().ЗагрузкаКатегорий Тогда
+ Если Параметр.Количество() > 0 Тогда
+ Элементы.Список.ТекущаяСтрока = Параметр[0];
+ КонецЕсли;
+ КонецЕсли;
+ // Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок
+
+&НаКлиенте
+Процедура СписокПриАктивизацииСтроки(Элемент)
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
+
+ СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+&НаСервере
+Процедура НастроитьСписок(Номенклатура = Неопределено, ОтключениеОтбора = Ложь)
+
+ УсловияВыбораНовогоВидаНоменклатуры = Справочники.Номенклатура.УсловияВыбораНовогоВидаНоменклатуры();
+
+ ТекстЗапроса =
+ "ВЫБРАТЬ
+ | ВидНоменклатурыПереопределяемый.Ссылка,
+ | ВидНоменклатурыПереопределяемый.ПометкаУдаления,
+ | ВидНоменклатурыПереопределяемый.Родитель,
+ | ВидНоменклатурыПереопределяемый.ЭтоГруппа,
+ | ВидНоменклатурыПереопределяемый.Наименование,
+ | ВидНоменклатурыПереопределяемый.АлкогольнаяПродукция,
+ | ВидНоменклатурыПереопределяемый.ВариантОформленияПродажи,
+ | ВидНоменклатурыПереопределяемый.ВариантПредставленияНабораВПечатныхФормах,
+ | ВидНоменклатурыПереопределяемый.ВариантРасчетаЦеныНабора,
+ | ВидНоменклатурыПереопределяемый.ВестиУчетПоГТД,
+ | ВидНоменклатурыПереопределяемый.ВестиУчетСертификатовНоменклатуры,
+ | ВидНоменклатурыПереопределяемый.ВидАлкогольнойПродукции,
+ | ВидНоменклатурыПереопределяемый.ВладелецСерий,
+ | ВидНоменклатурыПереопределяемый.ВладелецТоварныхКатегорий,
+ | ВидНоменклатурыПереопределяемый.ВладелецХарактеристик,
+ | ВидНоменклатурыПереопределяемый.ГруппаАналитическогоУчета,
+ | ВидНоменклатурыПереопределяемый.ГруппаДоступа,
+ | ВидНоменклатурыПереопределяемый.ГруппаФинансовогоУчета,
+ | ВидНоменклатурыПереопределяемый.ЕдиницаДляОтчетов,
+ | ВидНоменклатурыПереопределяемый.ЕдиницаИзмерения,
+ | ВидНоменклатурыПереопределяемый.ЗапретРедактированияНаименованияДляПечатиНоменклатуры,
+ | ВидНоменклатурыПереопределяемый.ЗапретРедактированияНаименованияДляПечатиХарактеристики,
+ | ВидНоменклатурыПереопределяемый.ЗапретРедактированияРабочегоНаименованияНоменклатуры,
+ | ВидНоменклатурыПереопределяемый.ЗапретРедактированияРабочегоНаименованияХарактеристики,
+ | ВидНоменклатурыПереопределяемый.ИмпортнаяАлкогольнаяПродукция,
+ | ВидНоменклатурыПереопределяемый.ИспользованиеХарактеристик,
+ | ВидНоменклатурыПереопределяемый.ИспользоватьИндивидуальноеНаименованиеПриПечати,
+ | ВидНоменклатурыПереопределяемый.ИспользоватьКоличествоСерии,
+ | ВидНоменклатурыПереопределяемый.ИспользоватьНомерСерии,
+ | ВидНоменклатурыПереопределяемый.ИспользоватьСерии,
+ | ВидНоменклатурыПереопределяемый.ИспользоватьСрокГодностиСерии,
+ | ВидНоменклатурыПереопределяемый.ИспользоватьУпаковки,
+ | ВидНоменклатурыПереопределяемый.ИспользоватьХарактеристики,
+ | ВидНоменклатурыПереопределяемый.КонтролироватьДублиНоменклатуры,
+ | ВидНоменклатурыПереопределяемый.КонтролироватьДублиХарактеристик,
+ | ВидНоменклатурыПереопределяемый.КоэффициентЕдиницыДляОтчетов,
+ | ВидНоменклатурыПереопределяемый.НаборСвойств,
+ | ВидНоменклатурыПереопределяемый.НаборСвойствСерий,
+ | ВидНоменклатурыПереопределяемый.НаборСвойствХарактеристик,
+ | ВидНоменклатурыПереопределяемый.НаборУпаковок,
+ | ВидНоменклатурыПереопределяемый.НаименованиеДляПечати,
+ | ВидНоменклатурыПереопределяемый.НастройкаИспользованияСерий,
+ | ВидНоменклатурыПереопределяемый.НоменклатураМногооборотнаяТара,
+ | ВидНоменклатурыПереопределяемый.ОбособленнаяЗакупкаПродажа,
+ | ВидНоменклатурыПереопределяемый.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры,
+ | ВидНоменклатурыПереопределяемый.Описание,
+ | ВидНоменклатурыПереопределяемый.ОсобенностьУчета,
+ | ВидНоменклатурыПереопределяемый.ПоставляетсяВМногооборотнойТаре,
+ | ВидНоменклатурыПереопределяемый.СезоннаяГруппа,
+ | ВидНоменклатурыПереопределяемый.ПолитикаУчетаСерий,
+ | ВидНоменклатурыПереопределяемый.СкладскаяГруппа,
+ | ВидНоменклатурыПереопределяемый.СодержитДрагоценныеМатериалы,
+ | ВидНоменклатурыПереопределяемый.ТипНоменклатуры,
+ | ВидНоменклатурыПереопределяемый.ТочностьУказанияСрокаГодностиСерии,
+ | ВидНоменклатурыПереопределяемый.ХарактеристикаМногооборотнаяТара,
+ | ВидНоменклатурыПереопределяемый.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры,
+ | ВидНоменклатурыПереопределяемый.ШаблонНаименованияДляПечатиНоменклатуры,
+ | ВидНоменклатурыПереопределяемый.ШаблонНаименованияДляПечатиХарактеристики,
+ | ВидНоменклатурыПереопределяемый.ШаблонРабочегоНаименованияНоменклатуры,
+ | ВидНоменклатурыПереопределяемый.ШаблонРабочегоНаименованияСерии,
+ | ВидНоменклатурыПереопределяемый.ШаблонРабочегоНаименованияХарактеристики,
+ | ВидНоменклатурыПереопределяемый.ШаблонЦенника,
+ | ВидНоменклатурыПереопределяемый.ШаблонЭтикетки,
+ | ВидНоменклатурыПереопределяемый.ШаблонЭтикеткиСерии,
+ | ВидНоменклатурыПереопределяемый.КодОКВЭД,
+ | ВидНоменклатурыПереопределяемый.КодТНВЭД,
+ | ВидНоменклатурыПереопределяемый.Представление
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидНоменклатурыПереопределяемый";
+
+ Если Не ЗначениеЗаполнено(Номенклатура)
+ Или ОтключениеОтбора Тогда
+
+ УстановитьСвойстваСписка(ТекстЗапроса);
+
+ Элементы.ДекорацияРасшифровкаОтбора.Видимость = Ложь;
+
+ Возврат;
+
+ КонецЕсли;
+
+ ТекстЗапроса = ТекстЗапроса + "
+ |ГДЕ
+ | ВидНоменклатурыПереопределяемый.ЭтоГруппа
+ | ИЛИ ИСТИНА ";
+
+ Для Каждого КлючЗначение Из УсловияВыбораНовогоВидаНоменклатуры Цикл
+
+ ТекстПараметра = СтрЗаменить(КлючЗначение.Значение, "НовыйВидНоменклатуры", "ВидНоменклатурыПереопределяемый");
+ ТекстЗапроса = ТекстЗапроса + " И НЕ " + ТекстПараметра;
+
+ КонецЦикла;
+
+ Запрос = Новый Запрос;
+ Запрос.Текст = ТекстЗапроса;
+ ПараметрыЗапроса = Запрос.НайтиПараметры();
+
+ ИменаРеквизитов = Новый Структура;
+ Для Каждого Параметр Из ПараметрыЗапроса Цикл
+ ИменаРеквизитов.Вставить(Параметр.Имя, "ВидНоменклатуры." + Параметр.Имя);
+ КонецЦикла;
+
+ СтарыеРеквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, ИменаРеквизитов);
+
+ УстановитьСвойстваСписка(ТекстЗапроса);
+
+ Для Каждого Параметр Из ПараметрыЗапроса Цикл
+ ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список,
+ Параметр.Имя,
+ СтарыеРеквизиты[Параметр.Имя],
+ Истина);
+ КонецЦикла;
+
+ Элементы.Список.Обновить();
+
+ МассивСтрок = Новый Массив;
+ МассивСтрок.Добавить(НСтр("ru = 'Если номенклатура уже была задействована в программе (в документах, настройках и т.п.), то произвольное изменение вида номенклатуры может привести к проблемам. Показаны виды номенклатуры, которые можно выбрать без привнесения проблем.'"));
+
+ Если Пользователи.РолиДоступны("РедактированиеРеквизитовОбъектов") Тогда
+ ЧастьФорматированнойСтроки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Показать все виды номенклатуры.'"),
+ "ОтключитьОтбор");
+ МассивСтрок.Добавить(ЧастьФорматированнойСтроки);
+ КонецЕсли;
+
+ Элементы.ДекорацияРасшифровкаОтбора.Видимость = Истина;
+ Элементы.ДекорацияРасшифровкаОтбора.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(
+ СтрСоединить(МассивСтрок, " "));
+
+КонецПроцедуры
+
+&НаСервере
+Процедура УстановитьСвойстваСписка(ТекстЗапроса)
+
+ СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
+ СвойстваСписка.ТекстЗапроса = ТекстЗапроса;
+ СвойстваСписка.ОсновнаяТаблица = "Справочник.ВидыНоменклатуры";
+ СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
+
+ ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДекорацияРасшифровкаОтбораОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
+ СтандартнаяОбработка = Ложь;
+
+ Если НавигационнаяСсылка = "ОтключитьОтбор" Тогда
+ НастроитьСписок(,Истина);
+ КонецЕсли;
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ПодключаемыеКоманды
+
+// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+&НаКлиенте
+Процедура Подключаемый_ПодобратьКатегорииИзСервиса(Команда)
+
+ РаботаСНоменклатуройКлиент.ПодобратьКатегорииИзСервиса();
+
+КонецПроцедуры
+// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+// СтандартныеПодсистемы.ПодключаемыеКоманды
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьКоманду(Команда)
+ ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
+ ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
+КонецПроцедуры
+
+&НаСервере
+Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
+ ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ОбновитьКоманды()
+ ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
+КонецПроцедуры
+// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+#КонецОбласти
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаГруппы.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаГруппы.xml
new file mode 100644
index 0000000..e2818f1
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаГруппы.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаГруппы/Ext/Form.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаГруппы/Ext/Form.xml
new file mode 100644
index 0000000..d573a4d
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаГруппы/Ext/Form.xml
@@ -0,0 +1,35 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаГруппы/Ext/Form/Module.bsl b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаГруппы/Ext/Form/Module.bsl
new file mode 100644
index 0000000..de71186
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаГруппы/Ext/Form/Module.bsl
@@ -0,0 +1,54 @@
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
+ Возврат;
+ КонецЕсли;
+
+ МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
+
+ // СтандартныеПодсистемы.УправлениеДоступом
+ УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
+ // Конец СтандартныеПодсистемы.УправлениеДоступом
+
+ МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриЧтенииНаСервере(ТекущийОбъект)
+
+ // СтандартныеПодсистемы.УправлениеДоступом
+ УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
+ // Конец СтандартныеПодсистемы.УправлениеДоступом
+
+ МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
+
+ МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовШапкиФормы
+
+&НаКлиенте
+Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка)
+
+ МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+#КонецОбласти
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиРазрезовЦенообразования.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиРазрезовЦенообразования.xml
new file mode 100644
index 0000000..36b60cb
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиРазрезовЦенообразования.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиРазрезовЦенообразования/Ext/Form.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиРазрезовЦенообразования/Ext/Form.xml
new file mode 100644
index 0000000..5d589e7
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиРазрезовЦенообразования/Ext/Form.xml
@@ -0,0 +1,222 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиРазрезовЦенообразования/Ext/Form/Module.bsl b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиРазрезовЦенообразования/Ext/Form/Module.bsl
new file mode 100644
index 0000000..9d1b108
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиРазрезовЦенообразования/Ext/Form/Module.bsl
@@ -0,0 +1,90 @@
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ ВариантХарактеристики = Параметры.ВариантХарактеристики;
+ ВариантСерии = Параметры.ВариантСерии;
+ ВариантУпаковки = Параметры.ВариантУпаковки;
+
+ ИспользоватьХарактеристики = Параметры.ИспользоватьХарактеристики;
+ ИспользоватьСерии = Параметры.ИспользоватьСерии;
+ ИспользоватьУпаковки = Параметры.ИспользоватьУпаковки;
+
+ ОбновитьВидимостьИДоступностьЭлементов();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПриОткрытии(Отказ)
+
+ ОбновитьНадпись(ВариантХарактеристики, Элементы.ДекорацияХарактеристики);
+ ОбновитьНадпись(ВариантСерии, Элементы.ДекорацияСерии);
+ ОбновитьНадпись(ВариантУпаковки, Элементы.ДекорацияУпаковки);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
+
+ Если ЗавершениеРаботы Тогда
+ Возврат;
+ КонецЕсли;
+
+ СтандартнаяОбработка = Ложь;
+
+ РезультатВыбора = Новый Структура;
+ РезультатВыбора.Вставить("ВариантХарактеристики", ВариантХарактеристики);
+ РезультатВыбора.Вставить("ВариантСерии", ВариантСерии);
+ РезультатВыбора.Вставить("ВариантУпаковки", ВариантУпаковки);
+
+ Закрыть(РезультатВыбора);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВариантХарактеристикиПриИзменении(Элемент)
+ ОбновитьНадпись(ВариантХарактеристики, Элементы.ДекорацияХарактеристики);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВариантСерииПриИзменении(Элемент)
+ ОбновитьНадпись(ВариантСерии, Элементы.ДекорацияСерии);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВариантУпаковкиПриИзменении(Элемент)
+ ОбновитьНадпись(ВариантУпаковки, Элементы.ДекорацияУпаковки);
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+&НаСервере
+Процедура ОбновитьВидимостьИДоступностьЭлементов()
+
+ Элементы.ГруппаХарактеристики.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
+ Элементы.ГруппаСерии.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
+ Элементы.ГруппаУпаковки.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
+
+ Элементы.ГруппаХарактеристики.Доступность = ИспользоватьХарактеристики;
+ Элементы.ГруппаСерии.Доступность = ИспользоватьСерии;
+ Элементы.ГруппаУпаковки.Доступность = ИспользоватьУпаковки;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбновитьНадпись(ЗначениеРеквизита, Декорация)
+
+ Если ЗначениеРеквизита = 0 Тогда
+ Декорация.Заголовок = НСтр("ru = '(снять)'");
+ ИначеЕсли ЗначениеРеквизита = 1 Тогда
+ Декорация.Заголовок = НСтр("ru = '(установить)'");
+ Иначе
+ Декорация.Заголовок = НСтр("ru = '(не изменять)'");
+ КонецЕсли;
+
+КонецПроцедуры
+
+#КонецОбласти
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиУчетаСерий.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиУчетаСерий.xml
new file mode 100644
index 0000000..bdd2a99
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиУчетаСерий.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиУчетаСерий/Ext/Form.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиУчетаСерий/Ext/Form.xml
new file mode 100644
index 0000000..08db893
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиУчетаСерий/Ext/Form.xml
@@ -0,0 +1,235 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиУчетаСерий/Ext/Form/Module.bsl b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиУчетаСерий/Ext/Form/Module.bsl
new file mode 100644
index 0000000..c837963
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаНастройкиУчетаСерий/Ext/Form/Module.bsl
@@ -0,0 +1,100 @@
+
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ УстановитьУсловноеОформление();
+ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
+ Возврат;
+ КонецЕсли;
+
+ НастройкиУчетаСерий.Параметры.УстановитьЗначениеПараметра("Склад", Параметры.Склад);
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиУчетаСерий
+
+&НаКлиенте
+Процедура НастройкиУчетаСерийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ ПоказатьЗначение(Неопределено, Элемент.ТекущиеДанные.Ссылка);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура НастройкиУчетаСерийПриАктивизацииСтроки(Элемент)
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
+
+ СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
+
+КонецПроцедуры
+
+// СтандартныеПодсистемы.ПодключаемыеКоманды
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьКоманду(Команда)
+ ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.НастройкиУчетаСерий);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
+ ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
+КонецПроцедуры
+
+&НаСервере
+Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
+ ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.НастройкиУчетаСерий);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ОбновитьКоманды()
+ ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.НастройкиУчетаСерий);
+КонецПроцедуры
+// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+&НаСервере
+Процедура УстановитьУсловноеОформление()
+
+ УсловноеОформление.Элементы.Очистить();
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НастройкиУчетаСерийПолитикаУчетаСерий.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НастройкиУчетаСерий.ПолитикаУчетаСерий");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
+ Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<на этом складе серии не учитываются>'"));
+
+КонецПроцедуры
+
+#КонецОбласти
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаРедактированияСоставаРеквизитов.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаРедактированияСоставаРеквизитов.xml
new file mode 100644
index 0000000..4958144
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаРедактированияСоставаРеквизитов.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаРедактированияСоставаРеквизитов/Ext/Form.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаРедактированияСоставаРеквизитов/Ext/Form.xml
new file mode 100644
index 0000000..af90b04
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаРедактированияСоставаРеквизитов/Ext/Form.xml
@@ -0,0 +1,276 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаРедактированияСоставаРеквизитов/Ext/Form/Module.bsl b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаРедактированияСоставаРеквизитов/Ext/Form/Module.bsl
new file mode 100644
index 0000000..1381d89
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаРедактированияСоставаРеквизитов/Ext/Form/Module.bsl
@@ -0,0 +1,134 @@
+
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если Параметры.Свойство("ФункцияОповещения") Тогда
+ ФункцияОповещения = Параметры.ФункцияОповещения;
+ иначе
+ ФункцияОповещения = "ПодборРеквизитовВТаблицуОтбора";
+ КонецЕсли;
+
+ МассивРеквизитовОтбора = ПолучитьИзВременногоХранилища(Параметры.АдресВХранилище);
+ ЗаполнитьТаблицуЗначенийИзМассива(МассивРеквизитовОтбора);
+
+ ТаблицаРеквизитов.Сортировать("ИмяРеквизита");
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+&НаКлиенте
+Процедура ДобавитьВПанель(Команда)
+
+ ВыполнитьПодборРеквизитов(0);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
+
+ СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицареквизитов
+
+&НаКлиенте
+Процедура ТаблицаРеквизитовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Отказ = Истина;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаРеквизитовПередУдалением(Элемент, Отказ)
+
+ Отказ = Истина;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаРеквизитовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+ ВыполнитьПодборРеквизитов(2);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаРеквизитовВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+ ВыполнитьПодборРеквизитов(2);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+&НаСервере
+Процедура ЗаполнитьТаблицуЗначенийИзМассива(МассивСтрок)
+
+ ТаблицаРеквизитов.Очистить();
+
+ Для Каждого СтрокаМассива Из МассивСтрок Цикл
+
+ СтрокаТаблицыРеквизитов = ТаблицаРеквизитов.Добавить();
+ ЗаполнитьЗначенияСвойств(СтрокаТаблицыРеквизитов, СтрокаМассива);
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+
+// Выполнение операций по подбору и отмене подбора элементов
+//
+// Параметры:
+// ВариантПодбора - Число - Вариант подбора элементов. 0 - произвести подбор; 1 - произвести отмену подбора; 2 - инвертировать подбор
+&НаКлиенте
+Процедура ВыполнитьПодборРеквизитов(ВариантПодбора = 0)
+
+ Если Элементы.ТаблицаРеквизитов.ВыделенныеСтроки.Количество() = 0 Тогда
+ Возврат;
+ КонецЕсли;
+
+ МассивДобавляемых = Новый Массив;
+
+ Для Каждого ВыделеннаяСтрока Из Элементы.ТаблицаРеквизитов.ВыделенныеСтроки Цикл
+
+ ПараметрыСтроки = Новый Структура("ИмяРеквизита, ЭтоДопРеквизит, Свойство, Используется, ПредставлениеРеквизита, Используется");
+
+ ДанныеСтроки = Элементы.ТаблицаРеквизитов.ДанныеСтроки(ВыделеннаяСтрока);
+ Если ВариантПодбора = 0 Тогда
+ ДанныеСтроки.Используется = Истина;
+ ИначеЕсли ВариантПодбора = 1 Тогда
+ ДанныеСтроки.Используется = Ложь;
+ Иначе
+ ДанныеСтроки.Используется = Не ДанныеСтроки.Используется;
+ КонецЕсли;
+
+ ЗаполнитьЗначенияСвойств(ПараметрыСтроки, ДанныеСтроки);
+ МассивДобавляемых.Добавить(ПараметрыСтроки);
+
+ КонецЦикла;
+
+ //Оповестить("ПодборРеквизитовВТаблицуОтбора", Новый Структура("МассивДобавляемых", МассивДобавляемых));
+ Оповестить(ФункцияОповещения, Новый Структура("МассивДобавляемых", МассивДобавляемых));
+
+КонецПроцедуры
+
+#КонецОбласти
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСписка.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСписка.xml
new file mode 100644
index 0000000..0e383c4
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСписка.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСписка/Ext/Form.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСписка/Ext/Form.xml
new file mode 100644
index 0000000..7f235e8
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСписка/Ext/Form.xml
@@ -0,0 +1,400 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСписка/Ext/Form/Module.bsl
new file mode 100644
index 0000000..4e1d774
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСписка/Ext/Form/Module.bsl
@@ -0,0 +1,113 @@
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
+ Возврат;
+ КонецЕсли;
+
+ Если Параметры.Свойство("СтавкаНДС") Тогда
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
+ Список, "СтавкаНДС", Параметры.СтавкаНДС);
+ Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
+ Элементы.Список.Отображение = ОтображениеТаблицы.Список;
+ КонецЕсли;
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
+
+ НесколькоВидовНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовНоменклатуры");
+
+ // ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+ РаботаСНоменклатурой.ПриСозданииНаСервереФормаСпискаВидаНоменклатуры(ЭтотОбъект, Элементы.ГруппаЭДО);
+ // Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
+ ПараметрыРазмещения.КоманднаяПанель = Элементы.ГруппаКоманднаяПанель;
+ ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+ ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
+
+ МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
+
+ // ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+ Если ИмяСобытия = РаботаСНоменклатуройКлиент.ОписаниеОповещенийПодсистемы().ЗагрузкаКатегорий Тогда
+ Если Параметр.Количество() > 0 Тогда
+ Элементы.Список.ТекущаяСтрока = Параметр[0];
+ КонецЕсли;
+ КонецЕсли;
+ // Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок
+
+&НаКлиенте
+Процедура СписокПриАктивизацииСтроки(Элемент)
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+&НаКлиенте
+Процедура ИзменитьВыделенные(Команда)
+ ГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
+
+ СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ПодключаемыеКоманды
+
+// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+&НаКлиенте
+Процедура Подключаемый_ПодобратьКатегорииИзСервиса(Команда)
+
+ РаботаСНоменклатуройКлиент.ПодобратьКатегорииИзСервиса(ЭтотОбъект);
+
+КонецПроцедуры
+// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+// СтандартныеПодсистемы.ПодключаемыеКоманды
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьКоманду(Команда)
+ ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
+ ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
+КонецПроцедуры
+
+&НаСервере
+Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
+ ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ОбновитьКоманды()
+ ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
+КонецПроцедуры
+// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+#КонецОбласти
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСпискаДляНастройкиЦенообразования.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСпискаДляНастройкиЦенообразования.xml
new file mode 100644
index 0000000..cf7c4d5
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСпискаДляНастройкиЦенообразования.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСпискаДляНастройкиЦенообразования/Ext/Form.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСпискаДляНастройкиЦенообразования/Ext/Form.xml
new file mode 100644
index 0000000..1bffd83
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСпискаДляНастройкиЦенообразования/Ext/Form.xml
@@ -0,0 +1,887 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСпискаДляНастройкиЦенообразования/Ext/Form/Module.bsl b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСпискаДляНастройкиЦенообразования/Ext/Form/Module.bsl
new file mode 100644
index 0000000..c471a19
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаСпискаДляНастройкиЦенообразования/Ext/Form/Module.bsl
@@ -0,0 +1,396 @@
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
+ Возврат;
+ КонецЕсли;
+
+ ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
+ ИспользоватьСерииНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
+ ИспользоватьУпаковкиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
+
+ УстановитьУсловноеОформление();
+
+ УстановитьНастройкиПоФО();
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
+
+ СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменитьНастройкиЦенообразования(Команда)
+
+ ИзменитьНастройкиЦенообразованияОткрыть();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменитьНастройкиЦенообразованияОткрыть()
+
+ ТекущиеДанные = Элементы.Список.ТекущиеДанные;
+
+ Если ТекущиеДанные = Неопределено Или ТекущиеДанные.ЭтоГруппа Тогда
+ Возврат;
+ КонецЕсли;
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("ВариантХарактеристики", 2);
+ ПараметрыФормы.Вставить("ВариантСерии", 2);
+ ПараметрыФормы.Вставить("ВариантУпаковки", 2);
+
+ Если Элементы.Список.ВыделенныеСтроки.Количество()>1 Тогда
+
+ ПараметрыФормы.Вставить("ИспользоватьХарактеристики", ИспользоватьХарактеристикиНоменклатуры);
+ ПараметрыФормы.Вставить("ИспользоватьСерии", ИспользоватьСерииНоменклатуры);
+ ПараметрыФормы.Вставить("ИспользоватьУпаковки", ИспользоватьУпаковкиНоменклатуры);
+
+ Иначе
+
+ ПараметрыФормы.Вставить("ИспользоватьХарактеристики", ТекущиеДанные.ИспользоватьХарактеристики И ИспользоватьХарактеристикиНоменклатуры);
+ ПараметрыФормы.Вставить("ИспользоватьСерии", ТекущиеДанные.ИспользоватьСерии И ИспользоватьСерииНоменклатуры);
+ ПараметрыФормы.Вставить("ИспользоватьУпаковки", ТекущиеДанные.ИспользоватьУпаковки И ИспользоватьУпаковкиНоменклатуры);
+
+ КонецЕсли;
+
+
+ ОписаниеОповещенияПриЗакрытии = Новый ОписаниеОповещения("ИзменитьНастройкиЦенообразованияЗавершение", ЭтотОбъект);
+
+ ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаНастройкиРазрезовЦенообразования",ПараметрыФормы, ЭтаФорма,,,,ОписаниеОповещенияПриЗакрытии,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ ТекущиеДанные = Элемент.ТекущиеДанные;
+
+ Если ТекущиеДанные <> Неопределено Тогда
+ Если НЕ ТекущиеДанные.ЭтоГруппа Тогда
+ Если Поле = Элементы.ВидНоменклатуры Тогда
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("Ключ", ТекущиеДанные.ВидНоменклатуры);
+ ПараметрыФормы.Вставить("ИспользуетсяЦенообразование25", Истина);
+ ОткрытьФорму("Справочник.ВидыНоменклатуры.ФормаОбъекта", ПараметрыФормы, Элементы.Список);
+
+ Иначе
+
+ ИзменитьНастройкиЦенообразованияОткрыть();
+
+ КонецЕсли;
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СписокПриАктивизацииСтроки(Элемент)
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ПодключаемыеКоманды
+
+// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+&НаКлиенте
+Процедура Подключаемый_ПодобратьКатегорииИзСервиса(Команда)
+
+ РаботаСНоменклатуройКлиент.ПодобратьКатегорииИзСервиса(ЭтотОбъект);
+
+КонецПроцедуры
+// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+// СтандартныеПодсистемы.ПодключаемыеКоманды
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьКоманду(Команда)
+ ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
+ ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
+КонецПроцедуры
+
+&НаСервере
+Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
+ ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ОбновитьКоманды()
+ ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
+КонецПроцедуры
+
+// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#Область Прочее
+
+&НаСервере
+Процедура УстановитьНастройкиПоФО()
+
+ Элементы.ВидыНоменклатурыГруппаХарактеристики.Видимость = ИспользоватьХарактеристикиНоменклатуры;
+ Элементы.ВидыНоменклатурыГруппаСерии.Видимость = ИспользоватьСерииНоменклатуры;
+ Элементы.ВидыНоменклатурыГруппаУпаковки.Видимость = ИспользоватьУпаковкиНоменклатуры;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменитьНастройкиЦенообразованияЗавершение(РезультатОповещения, ПараметрыОповещения) Экспорт
+
+ ТекущиеДанные = Элементы.Список.ТекущиеДанные;
+ Если ТекущиеДанные = Неопределено Или ТекущиеДанные.ЭтоГруппа Тогда
+ Возврат;
+ КонецЕсли;
+
+ ВидыНоменклатуры = Новый Массив();
+ Если Элементы.Список.ВыделенныеСтроки.Количество()>1 Тогда
+ Для Каждого Строка Из Элементы.Список.ВыделенныеСтроки Цикл
+ ВидыНоменклатуры.Добавить(Строка);
+ КонецЦикла;
+ Иначе
+ ВидыНоменклатуры.Добавить(ТекущиеДанные.ВидНоменклатуры);
+ КонецЕсли;
+
+ ИзменитьНастройкиЦенообразованияЗавершениеСервер(ВидыНоменклатуры, РезультатОповещения);
+
+ Элементы.Список.Обновить();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ИзменитьНастройкиЦенообразованияЗавершениеСервер(ВидыНоменклатуры, РезультатОповещения) Экспорт
+
+ ПараметрыУстановки = Новый Структура("НастройкиКлючаЦенПоХарактеристике, НастройкиКлючаЦенПоСерии, НастройкиКлючаЦенПоУпаковке", Неопределено, Неопределено,Неопределено,);
+
+ Если РезультатОповещения.ВариантХарактеристики = 0 Тогда
+ ПараметрыУстановки.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
+ ИначеЕсли РезультатОповещения.ВариантХарактеристики = 1 Тогда
+ ПараметрыУстановки.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.Использовать;
+ КонецЕсли;
+
+ Если РезультатОповещения.ВариантСерии = 0 Тогда
+ ПараметрыУстановки.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
+ ИначеЕсли РезультатОповещения.ВариантСерии = 1 Тогда
+ ПараметрыУстановки.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.Использовать;
+ КонецЕсли;
+
+ Если РезультатОповещения.ВариантУпаковки = 0 Тогда
+ ПараметрыУстановки.НастройкиКлючаЦенПоУпаковке = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
+ ИначеЕсли РезультатОповещения.ВариантУпаковки = 1 Тогда
+ ПараметрыУстановки.НастройкиКлючаЦенПоУпаковке = Перечисления.ВариантОтбораДляКлючаЦен.Использовать;
+ КонецЕсли;
+
+ Справочники.ВидыНоменклатуры.УстановитьРеквизитыЦенообразования(ВидыНоменклатуры, ПараметрыУстановки);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура УстановитьУсловноеОформление()
+
+ УсловноеОформление.Элементы.Очистить();
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УстановитьХарактеристики.Имя);
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ХарактеристикиОписание.Имя);
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьХарактеристики");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ЭтоГруппа");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.ДымчатоБелый);
+ Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<характеристики не используются>'"));
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ХарактеристикиОписание.Имя);
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьХарактеристики");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.УстановитьХарактеристики");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
+ ОтборЭлемента.ПравоеЗначение = 0;
+ Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "");
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УстановитьСерии.Имя);
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СерииОписание.Имя);
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьСерии");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ЭтоГруппа");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.ДымчатоБелый);
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
+ Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<серии не используются>'"));
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СерииОписание.Имя);
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьСерии");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.УстановитьСерии");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
+ ОтборЭлемента.ПравоеЗначение = 0;
+ Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "");
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УстановитьУпаковки.Имя);
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УпаковкиОписание.Имя);
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьУпаковки");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ЭтоГруппа");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.ДымчатоБелый);
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
+ Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<упаковки не используются>'"));
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УпаковкиОписание.Имя);
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьУпаковки");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.УстановитьУпаковки");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
+ ОтборЭлемента.ПравоеЗначение = 0;
+ Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "");
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВидНоменклатуры.Имя);
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьХарактеристики");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьСерии");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ИспользоватьУпаковки");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.ДымчатоБелый);
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
+
+КонецПроцедуры
+
+&НаСервереБезКонтекста
+Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатуры.Ссылка КАК ВидНоменклатуры,
+ | ВидыНоменклатуры.РеквизитыХарактеристикДляКлючаЦен.(
+ | ИмяРеквизита),
+ | ВидыНоменклатуры.РеквизитыСерийДляКлючаЦен.(
+ | ИмяРеквизита)
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | ВидыНоменклатуры.Ссылка В (&ВидыНоменклатуры)
+ | И НЕ ВидыНоменклатуры.ЭтоГруппа";
+
+ Запрос.УстановитьПараметр("ВидыНоменклатуры", Строки.ПолучитьКлючи());
+
+ СтрокаСпискаДанные = Неопределено;
+
+ Выборка = Запрос.Выполнить().Выбрать();
+ Пока Выборка.Следующий() Цикл
+
+ СтрокаСпискаДанные = Строки[Выборка.ВидНоменклатуры].Данные;
+
+ СтрокаСпискаДанные.ХарактеристикиОписание = НСтр("ru = 'по характеристикам'");
+ Если СтрокаСпискаДанные.УстановитьХарактеристики = 0 Тогда
+ ВременнаяТаблица = Выборка.РеквизитыХарактеристикДляКлючаЦен.Выгрузить();
+ Если ВременнаяТаблица.Количество() > 0 Тогда
+ МассивРеквизитов = ВременнаяТаблица.ВыгрузитьКолонку("ИмяРеквизита");
+ Реквизиты = СтрСоединить(МассивРеквизитов, ",");
+
+ СтрокаСпискаДанные.ХарактеристикиОписание = СтрШаблон(НСтр("ru = 'по реквизитам (%1)'"), Реквизиты);
+ КонецЕсли;
+ КонецЕсли;
+
+ СтрокаСпискаДанные.СерииОписание = НСтр("ru = 'по сериям'");
+ Если СтрокаСпискаДанные.УстановитьСерии = 0 Тогда
+ ВременнаяТаблица = Выборка.РеквизитыСерийДляКлючаЦен.Выгрузить();
+ Если ВременнаяТаблица.Количество() > 0 Тогда
+ МассивРеквизитов = ВременнаяТаблица.ВыгрузитьКолонку("ИмяРеквизита");
+ Реквизиты = СтрСоединить(МассивРеквизитов, ",");
+
+ СтрокаСпискаДанные.СерииОписание = СтрШаблон(НСтр("ru = 'по реквизитам (%1)'"), Реквизиты);
+ КонецЕсли;
+ КонецЕсли;
+
+ СтрокаСпискаДанные.УпаковкиОписание = НСтр("ru = 'по упаковкам'");
+
+ КонецЦикла;
+
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
+
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента.xml
new file mode 100644
index 0000000..f57dc4c
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml
new file mode 100644
index 0000000..ec3801d
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form.xml
@@ -0,0 +1,7708 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form/Module.bsl
new file mode 100644
index 0000000..b8a50d2
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Form/Module.bsl
@@ -0,0 +1,6970 @@
+#Область ОбработчикиСобытийФормы
+
+&НаКлиенте
+Процедура ПриОткрытии(Отказ)
+
+ // СтандартныеПодсистемы.РаботаСФайлами
+ РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
+ // Конец СтандартныеПодсистемы.РаботаСФайлами
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
+ ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
+
+ Если ОтказОткрытияФормы Тогда
+ Отказ = Истина;
+ Возврат;
+ КонецЕсли;
+
+ ЦветТекстаФормы = ЦветаСтиля.ЦветТекстаФормы;
+
+ УстановитьУсловноеОформление();
+
+ Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
+
+ ПриЧтенииСозданииНаСервере();
+
+ ТолькоОбщие = Ложь;
+
+ Если Параметры.Свойство("ЗначениеКопирования") Тогда
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопРеквизитовНоменклатуры,
+ Параметры.ЗначениеКопирования.НаборСвойств,
+ НаборОбщихСвойств,
+ "Реквизиты",
+ ТолькоОбщие);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопРеквизитовХарактеристик,
+ НаборОбщихСвойствХарактеристик,
+ "Реквизиты",
+ ТолькоОбщие);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопРеквизитовСерий,
+ Параметры.ЗначениеКопирования.НаборСвойствСерий,
+ НаборОбщихСвойствСерий,
+ "Реквизиты",
+ ТолькоОбщие);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопСведенийНоменклатуры,
+ Параметры.ЗначениеКопирования.НаборСвойств,
+ НаборОбщихСвойств,
+ "Сведения",
+ ТолькоОбщие);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопСведенийХарактеристик,
+ Параметры.ЗначениеКопирования.НаборСвойствХарактеристик,
+ НаборОбщихСвойствХарактеристик,
+ "Сведения",
+ ТолькоОбщие);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопСведенийСерий,
+ Параметры.ЗначениеКопирования.НаборСвойствСерий,
+ НаборОбщихСвойствСерий,
+ "Сведения",
+ ТолькоОбщие);
+
+ // Заполнить дополнительные реквизиты для контроля.
+ КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(Объект, "Номенклатура");
+ НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы = Справочники.Номенклатура.НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы();
+
+ ДополнительныеРеквизиты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.ЗначениеКопирования.НаборСвойств, "ДополнительныеРеквизиты"); // РезультатЗапроса
+ Если ДополнительныеРеквизиты <> Неопределено Тогда
+ ВыборкаДополнительныеРеквизиты = ДополнительныеРеквизиты.Выбрать(); // ВыборкаИзРезультатаЗапроса
+ Пока ВыборкаДополнительныеРеквизиты.Следующий() Цикл
+
+ ДобавляемоеСвойство = ВыборкаДополнительныеРеквизиты.Свойство;
+ РеквизитыДобавляемоеСвойство = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемоеСвойство,
+ "ТипЗначения, ЗаполнятьОбязательно");
+ ТипЗначения = РеквизитыДобавляемоеСвойство.ТипЗначения;
+ НоваяСтрока = КоллекцияРеквизитовДляКонтроля.Добавить();
+
+ НоваяСтрока.ИмяРеквизита = ДобавляемоеСвойство;
+ НоваяСтрока.ПредставлениеРеквизита = Строка(ДобавляемоеСвойство);
+ НоваяСтрока.Свойство = ДобавляемоеСвойство;
+ НоваяСтрока.ЭтоДопРеквизит = Истина;
+ НоваяСтрока.ЗаполнятьОбязательно = РеквизитыДобавляемоеСвойство.ЗаполнятьОбязательно;
+ НоваяСтрока.ОтображатьПриСоздании = РеквизитыДобавляемоеСвойство.ЗаполнятьОбязательно;
+
+ УсловияДоступности = УсловияДоступности();
+ УсловияДоступности.ЭтоНеиспользуемыйДляКонтроляТип = (НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы.Найти(ТипЗначения) <> Неопределено);
+ УсловияДоступности.ТипРеквизитаБулево = (ТипЗначения = Новый ОписаниеТипов("Булево"));
+ УсловияДоступности.ЗаполнятьОбязательно = РеквизитыДобавляемоеСвойство.ЗаполнятьОбязательно;
+
+ УстановитьДоступностьНастройкиПолейРеквизитаДляКонтроля(НоваяСтрока, УсловияДоступности);
+
+ КонецЦикла;
+ КонецЕсли;
+
+ КонецЕсли;
+ Иначе
+
+ НастройкаВидимостиФормы = "СвернутьВсе";
+ СвернутьРазвернутьВсеГруппы(ЭтотОбъект);
+
+ КонецЕсли;
+
+ СвязиПараметровВыбораПолитикиВШапке = Новый Массив;
+ СвязиПараметровВыбораПолитикиВТЧ = Новый Массив;
+
+ Для Каждого ПараметрОтбораПолитик Из НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий() Цикл
+
+ Если ПараметрОтбораПолитик.Ключ = "ВидНоменклатуры" Тогда
+ СвязиПараметровВыбораПолитикиВШапке.Добавить(Новый СвязьПараметраВыбора("ВидНоменклатуры",
+ "Объект.Ссылка", РежимИзмененияСвязанногоЗначения.НеИзменять));
+ ИначеЕсли ПараметрОтбораПолитик.Ключ = "Склад" Тогда
+ СвязиПараметровВыбораПолитикиВТЧ.Добавить(Новый СвязьПараметраВыбора("Склад",
+ "Элементы.ПолитикиУчетаСерий.ТекущиеДанные.Склад", РежимИзмененияСвязанногоЗначения.Очищать));
+ Иначе
+ СвязиПараметровВыбораПолитикиВШапке.Добавить(Новый СвязьПараметраВыбора(ПараметрОтбораПолитик.Ключ,
+ "Объект." + ПараметрОтбораПолитик.Ключ, РежимИзмененияСвязанногоЗначения.НеИзменять));
+ СвязиПараметровВыбораПолитикиВТЧ.Добавить(Новый СвязьПараметраВыбора(ПараметрОтбораПолитик.Ключ,
+ "Объект." + ПараметрОтбораПолитик.Ключ, РежимИзмененияСвязанногоЗначения.НеИзменять));
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ПараметрВыбораСклад = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Новый ПараметрВыбора("Склад", Неопределено));
+ ПараметрВыбораВидНоменклатуры = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Новый ПараметрВыбора("ВидНоменклатуры", Неопределено));
+
+ Элементы.ПолитикаУчетаСерий.СвязиПараметровВыбора = Новый ФиксированныйМассив(СвязиПараметровВыбораПолитикиВШапке);
+ Элементы.ПолитикаУчетаСерий.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрВыбораСклад);
+
+ Элементы.ПолитикаУчетаСерий2.СвязиПараметровВыбора = Новый ФиксированныйМассив(СвязиПараметровВыбораПолитикиВШапке);
+ Элементы.ПолитикаУчетаСерий2.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрВыбораСклад);
+
+ Элементы.ПолитикиУчетаСерийПолитикаУчетаСерий.СвязиПараметровВыбора = Новый ФиксированныйМассив(СвязиПараметровВыбораПолитикиВТЧ);
+ Элементы.ПолитикиУчетаСерийПолитикаУчетаСерий.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрВыбораВидНоменклатуры);
+
+ // подсистема запрета редактирования ключевых реквизитов объектов
+ ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
+
+ УправлениеДоступом.ПриСозданииФормыЗначенияДоступа(ЭтотОбъект);
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
+
+ ПриСозданииНаСервереЛокализация();
+
+ // СтандартныеПодсистемы.РаботаСФайлами
+ ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
+ ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
+ РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
+ // Конец СтандартныеПодсистемы.РаботаСФайлами
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+ ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
+
+ МультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект, Объект);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриЧтенииНаСервере(ТекущийОбъект)
+
+ // СтандартныеПодсистемы.УправлениеДоступом
+ УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
+ // Конец СтандартныеПодсистемы.УправлениеДоступом
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+ Если ОбщегоНазначенияУТКлиентСервер.АвторизованВнешнийПользователь() Тогда
+ ОтказОткрытияФормы = Истина;
+ Возврат;
+ КонецЕсли;
+
+ ПриЧтенииСозданииНаСервере();
+
+ МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
+
+ МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
+
+ Если ИспользоватьИндивидуальноеНаименование = "ИспользоватьИндивидуальноеНаименование" Тогда
+ Объект.ИспользоватьИндивидуальноеНаименованиеПриПечати = Истина;
+ Иначе
+ Объект.ИспользоватьИндивидуальноеНаименованиеПриПечати = Ложь;
+ КонецЕсли;
+
+ Если ИспользуетсяЦенообразование25
+ И Не ЗначениеЗаполнено(Объект.НастройкиКлючаЦенПоХарактеристике)
+ И Не Элементы.НастройкиКлючаЦенПоХарактеристике.Доступность Тогда
+ Объект.НастройкиКлючаЦенПоХарактеристике = ПредопределенноеЗначение("Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать");
+ КонецЕсли;
+
+ ОчиститьСообщения();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПослеЗаписи(ПараметрыЗаписи)
+
+ Оповестить("Запись_ВидыНоменклатуры",,ЭтотОбъект);
+ МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
+
+ Если Отказ Тогда
+ Возврат;
+ КонецЕсли;
+
+ ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопРеквизит", "Номенклатура");
+ ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопРеквизит", "ХарактеристикиНоменклатуры");
+ ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопРеквизит", "СерииНоменклатуры");
+
+ ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопСведение", "Номенклатура");
+ ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопСведение", "ХарактеристикиНоменклатуры");
+ ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, "ДопСведение", "СерииНоменклатуры");
+
+ Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
+ АктуализироватьНастройкиДопРеквизитовДляКонтроляПриЗаписи(ТекущийОбъект, "Номенклатура");
+ АктуализироватьНастройкиДопРеквизитовДляКонтроляПриЗаписи(ТекущийОбъект, "ХарактеристикиНоменклатуры");
+ АктуализироватьНастройкиДопРеквизитовДляКонтроляПриЗаписи(ТекущийОбъект, "СерииНоменклатуры");
+
+ ЗаписатьСвойстваДопРеквизитов("Номенклатура", Отказ);
+ ЗаписатьСвойстваДопРеквизитов("ХарактеристикиНоменклатуры", Отказ);
+ ЗаписатьСвойстваДопРеквизитов("СерииНоменклатуры", Отказ);
+ КонецЕсли;
+
+ ПриЗаписиНаСервереЛокализация(Отказ, ТекущийОбъект);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
+
+ Если ИмяСобытия = "ПодборРеквизитовВТаблицуОтбора" Тогда
+
+ // При подборе элемента в таблицу реквизитов отбора номенклатуры или характеристик.
+ Отбор = Новый Структура("ИмяРеквизита, ЭтоДопРеквизит, Свойство");
+
+ Если ТекущийТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+
+ ТЧРеквизитовОтбора = Объект.РеквизитыБыстрогоОтбораНоменклатуры;
+
+ ИначеЕсли ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+
+ ТЧРеквизитовОтбора = Объект.РеквизитыБыстрогоОтбораХарактеристик;
+
+ КонецЕсли;
+
+ Для каждого ПараметрыСтроки Из Параметр.МассивДобавляемых Цикл
+
+ ЗаполнитьЗначенияСвойств(Отбор, ПараметрыСтроки);
+
+ РеквизитНеНайден = (ТЧРеквизитовОтбора.НайтиСтроки(Отбор).Количество() = 0);
+
+ Если РеквизитНеНайден Тогда
+
+ НоваяСтрока = ТЧРеквизитовОтбора.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, ПараметрыСтроки);
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Модифицированность = Истина;
+
+ ИначеЕсли ИмяСобытия = "ПодборРеквизитовВТаблицуКлючаЦен" Тогда
+
+ // При подборе элемента в таблицу реквизитов отбора номенклатуры или характеристик.
+ Отбор = Новый Структура("ИмяРеквизита, ЭтоДопРеквизит, Свойство");
+
+ Если ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+
+ ТЧРеквизитовКлючаЦен = Объект.РеквизитыХарактеристикДляКлючаЦен;
+
+ ИначеЕсли ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+
+ ТЧРеквизитовКлючаЦен = Объект.РеквизитыСерийДляКлючаЦен;
+
+ КонецЕсли;
+
+ Для каждого ПараметрыСтроки Из Параметр.МассивДобавляемых Цикл
+
+ ЗаполнитьЗначенияСвойств(Отбор, ПараметрыСтроки);
+
+ НайденныеСтроки = ТЧРеквизитовКлючаЦен.НайтиСтроки(Отбор);
+
+ Если НайденныеСтроки.Количество() = 0 И ПараметрыСтроки.Используется Тогда
+
+ НоваяСтрока = ТЧРеквизитовКлючаЦен.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, ПараметрыСтроки);
+
+ ИначеЕсли НЕ ПараметрыСтроки.Используется Тогда
+
+ Для Каждого Строка Из НайденныеСтроки Цикл
+
+ ТЧРеквизитовКлючаЦен.Удалить(Строка);
+
+ КонецЦикла;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ТЧРеквизитовКлючаЦен.Сортировать("ЭтоДопРеквизит, ПредставлениеРеквизита");
+
+ Если ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+
+ СформироватьНадписьРазрезаЦенообразования("Характеристики");
+
+ ИначеЕсли ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+
+ СформироватьНадписьРазрезаЦенообразования("Серии");
+
+ КонецЕсли;
+
+ ОбновитьРазрезыЦенообразования();
+
+ Модифицированность = Истина;
+
+ ИначеЕсли ИмяСобытия = "Запись_НаборыДополнительныхРеквизитовИСведений"
+ Или ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда
+
+ // При записи набора доп.реквизитов (сведений), например:
+ // открыли форму редактирования общих доп.реквизитов (сведений) и записали его.
+ ПриЗаписиНабораДополнительныхРеквизитовИСведенийНаСервере();
+
+ ИначеЕсли ИмяСобытия = "Свойства_УстановленаЗависимостьРеквизита" Тогда
+
+ Если ЗначениеЗаполнено(РедактируемоеСвойствоВидНастройки) Тогда
+ ЗаписатьНастройкиСвойства(Параметр);
+ КонецЕсли;
+
+ ИначеЕсли ИмяСобытия = "Запись_ВидыНоменклатуры" Тогда
+
+ Если НЕ Источник.УникальныйИдентификатор = УникальныйИдентификатор Тогда
+ Прочитать();
+ КонецЕсли;
+
+ // ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+ ИначеЕсли ИмяСобытия = РаботаСНоменклатуройКлиент.ОписаниеОповещенийПодсистемы().ЗагрузкаКатегорий Тогда
+ Если Не Модифицированность Тогда
+ ПерезаполнитьИдентификаторыКатегорий();
+ КонецЕсли;
+ // Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+ КонецЕсли;
+
+ // СтандартныеПодсистемы.РаботаСФайлами
+ РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
+ // Конец СтандартныеПодсистемы.РаботаСФайлами
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
+
+ МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтотОбъект, Отказ, ТекущийОбъект, ПараметрыЗаписи);
+
+ МультиязычностьСервер.ПередЗаписьюНаСервере(ТекущийОбъект);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
+
+ //++ Локализация
+ ЗаполнитьКлючВидовПродукции();
+ ИнтеграцияИС.ЗаполнитьДанныеПоКлючуВидовПродукции(ЭтотОбъект);
+ //-- Локализация
+
+ // СтандартныеПодсистемы.УправлениеДоступом
+ УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
+ // Конец СтандартныеПодсистемы.УправлениеДоступом
+
+ ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
+
+ // подсистема запрета редактирования ключевых реквизитов объектов
+ ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
+
+ МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
+
+ МультиязычностьСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
+
+ ТекстСообщенияНеЗаполненаПолитика = НСтр("ru = 'Не заполнена колонка ""Политика учета серий"" для склада ""%1"" списка ""Политики учета серий"".'");
+ ТекстСообщенияНеЗаполненСклад = НСтр("ru = 'Не заполнена колонка ""Склад"" в списке ""Политики учета серий"".'");
+ ТекстСообщенияШаблонНаименования = НСтр("ru = 'В шаблоне для %1 нельзя использовать поле ""%2"", необходимо исправить шаблон.'");
+
+ ОшибкиЗаполнения = Неопределено;
+ Для ИндексСтроки = 0 По Объект.ПолитикиУчетаСерий.Количество() - 1 Цикл
+
+ Строка = Объект.ПолитикиУчетаСерий[ИндексСтроки];
+
+ Если Не Строка.СоответствуетПолитикеПоУмолчанию
+ И Не ЗначениеЗаполнено(Строка.Склад) Тогда
+ ТекстСообщения = ТекстСообщенияНеЗаполненСклад;
+ ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
+ "Объект.ПолитикиУчетаСерий[%1].Склад",
+ ТекстСообщения,
+ ,
+ ,
+ ,
+ ИндексСтроки);
+ ИначеЕсли Не Строка.СоответствуетПолитикеПоУмолчанию
+ И Не ЗначениеЗаполнено(Строка.ПолитикаУчетаСерий) Тогда
+ ТекстСообщения = СтрШаблон(ТекстСообщенияНеЗаполненаПолитика, Строка.Склад);
+ ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
+ "Объект.ПолитикиУчетаСерий[%1].ПолитикаУчетаСерий",
+ ТекстСообщения,
+ ,
+ ,
+ ,
+ ИндексСтроки);
+ КонецЕсли;
+
+ КонецЦикла;
+
+ НаименованиеДляПроверки = "Наименование";
+ Если СтрНайти(Объект.ШаблонРабочегоНаименованияНоменклатуры, "["+НаименованиеДляПроверки+"]") > 0
+ И Объект.ЗапретРедактированияРабочегоНаименованияНоменклатуры Тогда
+ ТекстСообщения = СтрШаблон(ТекстСообщенияШаблонНаименования,
+ "рабочего наименования номенклатуры", НаименованиеДляПроверки);
+ ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
+ "Объект.ШаблонРабочегоНаименованияНоменклатуры",
+ ТекстСообщения);
+ КонецЕсли;
+
+ НаименованиеДляПроверки = "НаименованиеПолное";
+ Если СтрНайти(Объект.ШаблонНаименованияДляПечатиНоменклатуры, "["+НаименованиеДляПроверки+"]") > 0
+ И Объект.ЗапретРедактированияНаименованияДляПечатиНоменклатуры Тогда
+ ТекстСообщения = СтрШаблон(ТекстСообщенияШаблонНаименования,
+ "наименования для печати номенклатуры", НаименованиеДляПроверки);
+ ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
+ "Объект.ШаблонНаименованияДляПечатиНоменклатуры",
+ ТекстСообщения);
+ КонецЕсли;
+
+ НаименованиеДляПроверки = "Наименование";
+ Если СтрНайти(Объект.ШаблонРабочегоНаименованияХарактеристики, "["+НаименованиеДляПроверки+"]") > 0
+ И Объект.ЗапретРедактированияРабочегоНаименованияХарактеристики Тогда
+ ТекстСообщения = СтрШаблон(ТекстСообщенияШаблонНаименования,
+ "рабочего наименования характеристики", НаименованиеДляПроверки);
+ ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
+ "Объект.ШаблонРабочегоНаименованияХарактеристики",
+ ТекстСообщения);
+ КонецЕсли;
+
+ НаименованиеДляПроверки = "НаименованиеПолное";
+ Если СтрНайти(Объект.ШаблонНаименованияДляПечатиХарактеристики, "["+НаименованиеДляПроверки+"]") > 0
+ И Объект.ЗапретРедактированияНаименованияДляПечатиХарактеристики Тогда
+ ТекстСообщения = СтрШаблон(ТекстСообщенияШаблонНаименования,
+ "наименования для печати характеристики", НаименованиеДляПроверки);
+ ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
+ "Объект.ШаблонНаименованияДляПечатиХарактеристики",
+ ТекстСообщения);
+ КонецЕсли;
+
+ Если ИспользуетсяЦенообразование25
+ И Не ЗначениеЗаполнено(Объект.НастройкиКлючаЦенПоХарактеристике) Тогда
+ ТекстСообщения = НСтр("ru = 'Не выбран вариант настройки разрезов ведения цен по характеристикам.'");
+ ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ОшибкиЗаполнения,
+ "Объект.НастройкиКлючаЦенПоХарактеристике",
+ ТекстСообщения);
+ КонецЕсли;
+
+ ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(ОшибкиЗаполнения, Отказ);
+
+ ОбработкаПроверкиЗаполненияНаСервереЛокализация(Отказ, ПроверяемыеРеквизиты);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовШапкиФормы
+
+&НаКлиенте
+Процедура НастроитьФормуКлиент(Элемент)
+
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТипНоменклатурыПриИзменении(Элемент) Экспорт
+
+ ТипНоменклатурыПриИзмененииСервер();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОсобенностьУчетаПриИзменении(Элемент)
+
+ ТипНоменклатурыПриИзмененииСервер();
+
+КонецПроцедуры
+
+#Область НастройкаИнтеграцииСФГИС
+
+&НаКлиенте
+Процедура ВидПродукцииГИСМТПриИзменении(Элемент)
+
+ //++ Локализация
+ ИнтеграцияИСКлиент.ВидПродукцииГИСМТПриИзменении(ЭтотОбъект);
+ //-- Локализация
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ФлагФГИСПриИзменении(Элемент)
+
+ //++ Локализация
+ ИнтеграцияИСКлиент.ФлагФГИСПриИзменении(ЭтотОбъект);
+ //-- Локализация
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВидПродукцииФГИСПриИзменении(Элемент)
+
+ //++ Локализация
+ ИнтеграцияИСКлиент.ВидПродукцииФГИСПриИзменении(ЭтотОбъект);
+ //-- Локализация
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВидыПродукцииФГИСОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
+
+ //++ Локализация
+ СтандартнаяОбработка = Ложь;
+
+ Если ТребуетсяОбновлениеКлассификатораВидовПродукции Тогда
+
+ Если ИнтерактивнаяЗагрузкаКлассификаторовДоступна Тогда
+
+ ОписаниеОповещения = Новый ОписаниеОповещения("Подключаемый_ПослеЗагрузкиКлассификаторов", ЭтотОбъект);
+
+ ПараметрыОбновления = РаботаСКлассификаторамиКлиент.НовыйПараметрыОбновленияКлассификаторов();
+ ПараметрыОбновления.Владелец = ЭтотОбъект;
+ ПараметрыОбновления.ОписаниеОповещения = ОписаниеОповещения;
+ ПараметрыОбновления.Идентификаторы = Новый Массив;
+ ПараметрыОбновления.Идентификаторы.Добавить(
+ ОбщегоНазначенияИСКлиентСервер.ИдентификаторКлассификатораВидовПродукцииИС());
+
+ РаботаСКлассификаторамиКлиент.ОбновитьКлассификаторы(ПараметрыОбновления);
+
+ Иначе
+
+ ПоказатьПредупреждение(, НСтр("ru = 'Интерактивная загрузка классификаторов недоступна. Обратитесь к администратору.'"));
+
+ КонецЕсли;
+
+ Иначе
+
+ ПараметрыОткрытияФормы = Новый Структура;
+ ПараметрыОткрытияФормы.Вставить("КлючВидовПродукции", КлючВидовПродукции);
+
+ ОткрытьФорму("ОбщаяФорма.НастройкаИнтеграцииИС",
+ ПараметрыОткрытияФормы,,
+ УникальныйИдентификатор,,,
+ Новый ОписаниеОповещения("НастройкаИнтеграцииСФГИСЗавершение", ЭтотОбъект),
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+ КонецЕсли;
+ //-- Локализация
+
+КонецПроцедуры
+
+#КонецОбласти
+
+&НаКлиенте
+Процедура ИспользоватьХарактеристикиПриИзменении(Элемент)
+
+ ИспользоватьХарактеристикиПриИзмененииНаСервере();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИспользованиеХарактеристикПриИзменении(Элемент)
+
+ Если Объект.ИспользованиеХарактеристик = ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры") Тогда
+ ВыбратьВидВладелец("Характеристик");
+ Иначе
+ Объект.ВладелецХарактеристик = Неопределено;
+ УстановитьРеквизитыЦенообразования();
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура НастройкаТоварныхКатегорийПриИзменении(Элемент)
+ Объект.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры =
+ НастройкаТоварныхКатегорий = "ОбщиеСДругимВидомНоменклатуры";
+
+ Если Объект.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
+ ВыбратьВидВладелец("ТоварныхКатегорий");
+ Иначе
+ Объект.ВладелецТоварныхКатегорий = Неопределено;
+ НастроитьФорму();
+ КонецЕсли;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИспользоватьСерииПриИзменении(Элемент)
+
+ ИспользоватьСерииПриИзмененииНаСервере();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ЕдиницаИзмеренияПриИзменении(Элемент)
+ ЕдиницаИзмеренияПриИзмененииСервер();
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИспользоватьУпаковкиПриИзменении(Элемент)
+
+ Если Не Объект.ИспользоватьУпаковки Тогда
+ Объект.НаборУпаковок = Неопределено;
+ ИспользованиеУпаковок = "";
+ Иначе
+ Объект.ПоставляетсяВМногооборотнойТаре = Ложь;
+ Объект.НоменклатураМногооборотнаяТара = Неопределено;
+ Объект.ХарактеристикаМногооборотнаяТара = Неопределено;
+ ИспользованиеУпаковок = "ОбщийНабор";
+ КонецЕсли;
+
+ ИспользоватьУпаковкиПриИзмененииНаСервере();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура НаборУпаковокПриИзменении(Элемент)
+
+ НаборУпаковокПриИзмененииНаСервере();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПоставляетсяВМногооборотнойТареПриИзменении(Элемент)
+
+ Если Не Объект.ПоставляетсяВМногооборотнойТаре Тогда
+ Объект.НоменклатураМногооборотнаяТара = Неопределено;
+ Объект.ХарактеристикаМногооборотнаяТара = Неопределено;
+ КонецЕсли;
+
+ НастроитьФорму();
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриЗаписиНабораДополнительныхРеквизитовИСведенийНаСервере()
+
+ Если НЕ Модифицированность Тогда
+ Прочитать();
+ Иначе
+ Если ТекущийТипВладельцаНабораЭлементов = "Номенклатура"
+ Или ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры"
+ Или ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+
+ // Если редактируется состав набора общих дополнительных сведений,
+ // то изменять состав реквизитов для контроля и отбора не нужно.
+ Если ТекущийТипЭлемента <> "ДопСведение" Тогда
+ Справочники.ВидыНоменклатуры.ЗаполнитьДопРеквизитыДляКонтроляИОтбора(Объект, ТекущийТипВладельцаНабораЭлементов);
+ КонецЕсли;
+
+ КонецЕсли;
+
+ ЗаполнитьСпискиДопРеквизитовСведений();
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВариантЗаданияНастроекСерийПриИзменении(Элемент)
+ Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ = ВариантЗаданияНастроекСерий = "ИспользуютсяТакжеКакВДругомВидеНоменклатуры";
+ Если Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+ ВыбратьВидВладелец("Серий");
+ Объект.ПолитикиУчетаСерий.Очистить();
+ Иначе
+ Объект.ВладелецСерий = Неопределено;
+ УстановитьРеквизитыЦенообразования();
+ КонецЕсли;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВладелецХарактеристикОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
+ ОбработкаНавигационнойСсылкиНадписиПоВидуВладельцу(НавигационнаяСсылка, "Характеристик", СтандартнаяОбработка);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВладелецСерийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
+ ОбработкаНавигационнойСсылкиНадписиПоВидуВладельцу(НавигационнаяСсылка, "Серий", СтандартнаяОбработка);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВладелецТоварныхКатегорийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
+ ОбработкаНавигационнойСсылкиНадписиПоВидуВладельцу(НавигационнаяСсылка, "ТоварныхКатегорий", СтандартнаяОбработка);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИспользованиеУпаковокПриИзменении(Элемент)
+ Если ИспользованиеУпаковок = "ИндивидуальныйНабор" Тогда
+ Объект.НаборУпаковок = ПредопределенноеЗначение("Справочник.НаборыУпаковок.ИндивидуальныйДляНоменклатуры");
+ Иначе
+ Объект.НаборУпаковок = ПредопределенноеЗначение("Справочник.НаборыУпаковок.ПустаяСсылка");
+ КонецЕсли;
+
+ НастроитьФорму();
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПолитикаУчетаСерийПриИзменении(Элемент)
+
+ Если Не ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий Тогда
+ УстановитьПолитикуУчетаСерийПоУмолчанию();
+ КонецЕсли;
+
+ ДействиеПриИзмененииПолитикУчетаСерий();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзменении(Элемент)
+
+ Если ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий
+ И Не ЗначениеЗаполнено(Объект.ПолитикаУчетаСерий) Тогда
+ Объект.ПолитикаУчетаСерий = ПредопределенноеЗначение("Справочник.ПолитикиУчетаСерий.СерииНеИспользуются");
+ КонецЕсли;
+
+ Если Объект.ПолитикиУчетаСерий.Количество() > 0
+ И Не ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий Тогда
+
+ ВТЧУказываютсяСкладыИПодразделения = ИспользоватьНесколькоСкладов И ИспользоватьПроизводство;
+
+ Если ВТЧУказываютсяСкладыИПодразделения Тогда
+ ТекстВопроса = Нстр("ru = 'Для всех складов и производственных подразделений будет установлена общая политика учета серий.'");
+ ИначеЕсли ИспользоватьНесколькоСкладов Тогда
+ ТекстВопроса = Нстр("ru = 'Для всех складов будет установлена общая политика учета серий.'");
+ Иначе
+ ТекстВопроса = Нстр("ru = 'Для всех производственных подразделений будет установлена общая политика учета серий.'");
+ КонецЕсли;
+
+ ПоказатьВопрос(
+ Новый ОписаниеОповещения("ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзмененииЗавершение", ЭтотОбъект),
+ ТекстВопроса,
+ РежимДиалогаВопрос.ДаНет);
+ Возврат;
+ КонецЕсли;
+
+ НастроитьФорму();
+ ОбновитьПредупреждениеПоСкладуКлиент();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура НастройкаИспользованияСерийПриИзменении(Элемент)
+
+ Если Объект.ПолитикиУчетаСерий.Количество() > 0 Тогда
+
+ ПараметрыВлияющиеНаОтборПолитикУказанияСерийСтали = НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий();
+ ЗаполнитьЗначенияСвойств(ПараметрыВлияющиеНаОтборПолитикУказанияСерийСтали, Объект);
+
+ Если Не ОбщегоНазначенияУТКлиентСервер.СтруктурыРавны(ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзменения,
+ ПараметрыВлияющиеНаОтборПолитикУказанияСерийСтали) Тогда
+ ТекстВопроса = НСтр("ru = 'Изменились параметры, влияющие на возможность выбора политик указания серий.
+ |Политики, которые не удовлетворяют новым параметрам будут удалены. Продолжить?'");
+ ПоказатьВопрос(Новый ОписаниеОповещения("НастройкаИспользованияСерийПриИзмененииЗавершение", ЭтотОбъект),
+ ТекстВопроса,
+ РежимДиалогаВопрос.ДаНет,
+ ,
+ КодВозвратаДиалога.Да);
+ Возврат;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ НастройкаИспользованияСерийПриИзмененииФрагмент(Истина);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура НастройкаИспользованияСерийПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
+
+ Ответ = РезультатВопроса;
+
+ НастройкаИспользованияСерийПриИзмененииФрагмент(Ответ = КодВозвратаДиалога.Да);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура НастройкаИспользованияСерийПриИзмененииФрагмент(ПрименитьИзменения)
+
+ Если Не ПрименитьИзменения Тогда
+ ЗаполнитьЗначенияСвойств(Объект, ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзменения);
+ КонецЕсли;
+
+ ЗаполняемыйОбъект = Объект;
+ НоменклатураЛокализация.ДополнитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+ Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(ЗаполняемыйОбъект);
+ НоменклатураЛокализация.ВосстановитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура КодТНВЭДПриИзменении(Элемент)
+
+ Если ЗначениеЗаполнено(Объект.КодТНВЭД) Тогда
+ КодТНВЭДПриИзмененииСервер();
+ Иначе
+ НастроитьПодсказкуПоляКлассификатора(Элементы.КодТНВЭД.Имя, Объект.КодТНВЭД);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура НастройкаВидимостиФормыПриИзменении(Элемент)
+
+ СвернутьРазвернутьВсеГруппы(ЭтотОбъект);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура КодОКВЭДПриИзменении(Элемент)
+
+ //++ Локализация
+ НастроитьПодсказкуПоляКлассификатора(Элемент.Имя, Объект.КодОКВЭД);
+ //-- Локализация
+ Возврат;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура КодОКВЭД2ПриИзменении(Элемент)
+
+ //++ Локализация
+ КодОКВЭД2ПриИзмененииСервер();
+ //-- Локализация
+ Возврат;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура КодОКВЭД2НачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
+
+ //++ Локализация
+ СтандартнаяОбработка = Ложь;
+
+ ОбработкаЗакрытия = Новый ОписаниеОповещения(
+ "ПодборИзОКВЭДЗавершение",
+ ЭтотОбъект);
+
+ ПараметрыФормы = КлассификаторОКВЭДКлиент.НовыйПараметрыВыбора();
+ ПараметрыФормы.ОписаниеОповещенияОЗакрытии = ОбработкаЗакрытия;
+ ПараметрыФормы.Разрешенные = Истина;
+ ПараметрыФормы.ТекущийКод = Объект.КодОКВЭД2;
+
+ КлассификаторОКВЭДКлиент.Выбрать(ПараметрыФормы);
+ //-- Локализация
+ Возврат;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура КодОКВЭД2АвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
+
+ //++ Локализация
+ Если ЗначениеЗаполнено(Текст) Тогда
+ СтандартнаяОбработка = Ложь;
+
+ ДанныеПодбора = ПодборОКВЭДСервер(Текст);
+ ДанныеВыбора = Новый СписокЗначений;
+
+ Для Каждого ОКВЭД Из ДанныеПодбора Цикл
+ ДанныеВыбора.Добавить(ОКВЭД.Код, ОКВЭД.Представление);
+ КонецЦикла;
+ КонецЕсли;
+ //-- Локализация
+ Возврат;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура КодОКППриИзменении(Элемент)
+
+ //++ Локализация
+ НастроитьПодсказкуПоляКлассификатора(Элемент.Имя, Объект.КодОКП);
+ //-- Локализация
+ Возврат;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура КодОКПД2ПриИзменении(Элемент)
+
+ //++ Локализация
+ НастроитьПодсказкуПоляКлассификатора(Элемент.Имя, Объект.КодОКПД2);
+ //-- Локализация
+ Возврат;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_Открытие(Элемент, СтандартнаяОбработка)
+
+ МультиязычностьКлиент.ПриОткрытии(ЭтотОбъект, Объект, Элемент, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура КонтролироватьКачествоПоступившегоТовараПриИзменении(Элемент)
+
+ НастроитьФорму();
+ Если Не Объект.КонтролироватьКачествоПоступившегоТовара Тогда
+ Объект.СрокКонтроляКачества = 0;
+ КонецЕсли;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыПолитикиУчетаСерий
+
+&НаКлиенте
+Процедура ПолитикиУчетаСерийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ ТекущиеДанные = Элементы.ПолитикиУчетаСерий.ТекущиеДанные;
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если Поле.Имя = "ПолитикиУчетаСерийСклад"
+ И (Элементы.ПолитикиУчетаСерий.ТолькоПросмотр
+ Или ТолькоПросмотр) Тогда
+
+ СтандартнаяОбработка = Ложь;
+ ПоказатьЗначение(, ТекущиеДанные.Склад);
+
+ ИначеЕсли Поле.Имя = "ПолитикиУчетаСерийПолитикаУчетаСерий"
+ И (Элементы.ПолитикиУчетаСерий.ТолькоПросмотр
+ Или ТолькоПросмотр) Тогда
+
+ СтандартнаяОбработка = Ложь;
+ ПоказатьЗначение(, ТекущиеДанные.ПолитикаУчетаСерий);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПолитикиУчетаСерийПриАктивизацииСтроки(Элемент)
+ Если Элементы.ПолитикиУчетаСерий.ТекущиеДанные <> Неопределено
+ И ЗначениеЗаполнено(Элементы.ПолитикиУчетаСерий.ТекущиеДанные.Склад) Тогда
+ ПодключитьОбработчикОжидания("ОбновитьПредупреждениеПоСкладуКлиент", 0.1, Истина);
+ КонецЕсли;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПолитикиУчетаСерийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
+
+ Если Копирование Тогда
+ Отказ = Истина;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПолитикиУчетаСерийСкладПриИзменении(Элемент)
+
+ ТекущиеДанные = Элементы.ПолитикиУчетаСерий.ТекущиеДанные;
+
+ Если ЗначениеЗаполнено(ТекущиеДанные.Склад) Тогда
+ ТекущиеДанные.ЭтоПолитикаДляСклада = Не ЗначениеЗаполнено(ТекущиеДанные.Склад)
+ Или ТипЗнч(ТекущиеДанные.Склад) = Тип("СправочникСсылка.Склады");
+
+ ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(ТекущиеДанные.Склад, ТекущиеДанные.ПолитикаУчетаСерий);
+ КонецЕсли;
+ ОбновитьПредупреждениеПоСкладуКлиент();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПолитикиУчетаСерийПередУдалением(Элемент, Отказ)
+
+ Отказ = Истина;
+
+ ПолитикиУчетаСерийПередУдалениемНаСервере();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПолитикиУчетаСерийПередУдалениемНаСервере()
+
+ ИдентификаторыВыделенныхСтрок = Элементы.ПолитикиУчетаСерий.ВыделенныеСтроки;
+
+ Если ИдентификаторыВыделенныхСтрок.Количество() = 0 Тогда
+ Возврат;
+ КонецЕсли;
+
+ Для Каждого ИдСтроки Из ИдентификаторыВыделенныхСтрок Цикл
+ Строка = Объект.ПолитикиУчетаСерий.НайтиПоИдентификатору(ИдСтроки);
+ Если ЗначениеЗаполнено(Строка.Склад) Тогда
+ СтруктураОтбора = Новый Структура();
+ СтруктураОтбора.Вставить("Склад", Строка.Склад);
+
+ НайденныеСтроки = Объект.ПолитикиУчетаСерий.НайтиСтроки(СтруктураОтбора);
+
+ Если НайденныеСтроки.Количество() > 1 Тогда
+ // Удалить строку если есть несколько строк по текущему складу
+ Объект.ПолитикиУчетаСерий.Удалить(Строка);
+ Иначе
+ // Скрыть строку если это единственная строка по складу
+ Строка.ПолитикаУчетаСерий = Объект.ПолитикаУчетаСерий;
+ КонецЕсли;
+ Иначе
+ Объект.ПолитикиУчетаСерий.Удалить(Строка);
+ КонецЕсли;
+ КонецЦикла;
+
+ ДействиеПриИзмененииПолитикУчетаСерий();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПолитикиУчетаСерийПолитикаУчетаСерийПриИзменении(Элемент)
+
+ ТекущиеДанные = Элементы.ПолитикиУчетаСерий.ТекущиеДанные;
+
+ Если ЗначениеЗаполнено(ТекущиеДанные.Склад) Тогда
+ ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(ТекущиеДанные.Склад, ТекущиеДанные.ПолитикаУчетаСерий)
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПолитикиУчетаСерийПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
+ УдалитьПустыеСтрокиПолитикУчетаСерий();
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопРеквизитовНоменклатуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовНоменклатурыПриИзменении(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовНоменклатурыПриАктивизацииСтроки(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовНоменклатурыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Отказ = Истина;
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовНоменклатурыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопРеквизит", "Номенклатура", Элемент.ТекущиеДанные);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовНоменклатурыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопРеквизит", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовНоменклатурыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
+
+ УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопРеквизит", "Номенклатура");
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопРеквизитовХарактеристик
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовХарактеристикПриИзменении(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовХарактеристикПриАктивизацииСтроки(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовХарактеристикПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Отказ = Истина;
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовХарактеристикВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопРеквизит", "ХарактеристикиНоменклатуры", Элемент.ТекущиеДанные);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовХарактеристикОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопРеквизит", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовХарактеристикНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
+
+ УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопРеквизит", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопРеквизитовСерий
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовСерийПриИзменении(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовСерийПриАктивизацииСтроки(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопРеквизит", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовСерийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Отказ = Истина;
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовСерийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопРеквизит", "СерииНоменклатуры", Элемент.ТекущиеДанные);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовСерийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопРеквизит", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопРеквизитовСерийНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
+
+ УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопРеквизит", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопСведенийНоменклатуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийНоменклатурыПриИзменении(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийНоменклатурыПриАктивизацииСтроки(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийНоменклатурыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Отказ = Истина;
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийНоменклатурыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопСведение", "Номенклатура", Элемент.ТекущиеДанные);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийНоменклатурыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопСведение", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийНоменклатурыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
+
+ УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопСведение", "Номенклатура");
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопСведенийХарактеристик
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийХарактеристикПриИзменении(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийХарактеристикПриАктивизацииСтроки(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийХарактеристикПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Отказ = Истина;
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийХарактеристикВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопСведение", "ХарактеристикиНоменклатуры", Элемент.ТекущиеДанные);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийХарактеристикОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопСведение", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийХарактеристикНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
+
+ УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопСведение", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаДопСведенийСерий
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийСерийПриИзменении(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийСерийПриАктивизацииСтроки(Элемент)
+
+ УстановитьДоступностьКомандРедактированияДопРеквизитовСведений("ДопСведение", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийСерийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Отказ = Истина;
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийСерийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ ПриВыбореСтрокиТаблицыДопРеквизитовСведений("ДопСведение", "СерииНоменклатуры", Элемент.ТекущиеДанные);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийСерийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, "ДопСведение", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ТаблицаДопСведенийСерийНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
+
+ УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, "ДопСведение", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыДляКонтроляНоменклатуры
+
+&НаКлиенте
+Процедура РеквизитыДляКонтроляНоменклатурыУникаленПриИзменении(Элемент)
+
+ ТекущиеДанные = Элементы.РеквизитыДляКонтроляНоменклатуры.ТекущиеДанные;
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если ТекущиеДанные.ЭтоДопРеквизит И Модифицированность Тогда
+ Записать();
+ КонецЕсли;
+
+ ИдентификаторСтрокиТаблицы = ТекущиеДанные.ПолучитьИдентификатор();
+
+ ПриИзмененииФлагаУникален("Номенклатура", ИдентификаторСтрокиТаблицы);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриИзмененииФлагаУникален(ВладелецРеквизитов, ИдентификаторСтрокиТаблицы)
+
+ КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(Объект, ВладелецРеквизитов);
+ ТекущиеДанные = КоллекцияРеквизитовДляКонтроля.НайтиПоИдентификатору(ИдентификаторСтрокиТаблицы);
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ ЗаполняемыйОбъект = Объект;
+ НоменклатураЛокализация.ДополнитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+ Справочники.ВидыНоменклатуры.ПриИзмененииФлагаУникален(ЗаполняемыйОбъект, ВладелецРеквизитов, ТекущиеДанные);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РеквизитыДляКонтроляНоменклатурыЗаполнятьОбязательноПриИзменении(Элемент)
+
+ ТекущиеДанные = Элементы.РеквизитыДляКонтроляНоменклатуры.ТекущиеДанные;
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТекущиеДанные.ДоступностьОтображатьПриСоздании = Не ТекущиеДанные.ЗаполнятьОбязательно;
+
+ Если ТекущиеДанные.ЗаполнятьОбязательно Тогда
+ ТекущиеДанные.ОтображатьПриСоздании = Истина;
+ КонецЕсли;
+
+ ИдентификаторСтрокиТаблицы = ТекущиеДанные.ПолучитьИдентификатор();
+
+ ПриИзмененииФлагаЗаполнятьОбязательно("Номенклатура", ИдентификаторСтрокиТаблицы);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РеквизитыДляКонтроляНоменклатурыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ РеквизитыДляКонтроляВыбор("Номенклатуры", Поле, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыДляКонтроляХарактеристик
+
+&НаКлиенте
+Процедура РеквизитыДляКонтроляХарактеристикУникаленПриИзменении(Элемент)
+
+ ТекущиеДанные = Элементы.РеквизитыДляКонтроляХарактеристик.ТекущиеДанные;
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ ИдентификаторСтрокиТаблицы = ТекущиеДанные.ПолучитьИдентификатор();
+
+ ПриИзмененииФлагаУникален("ХарактеристикиНоменклатуры", ИдентификаторСтрокиТаблицы);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РеквизитыДляКонтроляХарактеристикЗаполнятьОбязательноПриИзменении(Элемент)
+
+ ТекущиеДанные = Элементы.РеквизитыДляКонтроляХарактеристик.ТекущиеДанные;
+
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТекущиеДанные.ДоступностьОтображатьПриСоздании = Не ТекущиеДанные.ЗаполнятьОбязательно;
+
+ Если ТекущиеДанные.ЗаполнятьОбязательно Тогда
+ ТекущиеДанные.ОтображатьПриСоздании = Истина;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РеквизитыДляКонтроляХарактеристикВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ РеквизитыДляКонтроляВыбор("Характеристик", Поле, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыДляКонтроляСерий
+
+&НаКлиенте
+Процедура РеквизитыДляКонтроляСерийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ РеквизитыДляКонтроляВыбор("Серий", Поле, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыБыстрогоОтбораНоменклатуры
+
+&НаКлиенте
+Процедура РеквизитыБыстрогоОтбораНоменклатурыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Отказ = Истина;
+
+ Если Модифицированность Тогда
+ ЗаписатьПередИзменениемПанелиБыстрогоОтбораНоменклатуры()
+ Иначе
+ ИзменитьПанельБыстрогоОтбораНоменклатуры();
+ КонецЕсли;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыРеквизитыБыстрогоОтбораХарактеристик
+
+&НаКлиенте
+Процедура РеквизитыБыстрогоОтбораХарактеристикПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Отказ = Истина;
+
+ Если Модифицированность
+ Или Не ЗначениеЗаполнено(Объект.НаборСвойствХарактеристик) Тогда
+ ЗаписатьПередИзменениемПанелиБыстрогоОтбораХарактеристики()
+ Иначе
+ ИзменитьПанельБыстрогоОтбораХарактеристики();
+ КонецЕсли;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+// СтандартныеПодсистемы.РаботаСФайлами
+&НаКлиенте
+Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
+ РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
+КонецПроцедуры
+// Конец СтандартныеПодсистемы.РаботаСФайлами
+
+// СтандартныеПодсистемы.РаботаСФайлами
+&НаКлиенте
+Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
+ РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
+КонецПроцедуры
+// Конец СтандартныеПодсистемы.РаботаСФайлами
+
+// СтандартныеПодсистемы.РаботаСФайлами
+&НаКлиенте
+Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
+ РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
+КонецПроцедуры
+// Конец СтандартныеПодсистемы.РаботаСФайлами
+
+// СтандартныеПодсистемы.РаботаСФайлами
+&НаКлиенте
+Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
+ РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
+КонецПроцедуры
+// Конец СтандартныеПодсистемы.РаботаСФайлами
+
+// СтандартныеПодсистемы.ПодключаемыеКоманды
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьКоманду(Команда)
+ ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
+ ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
+КонецПроцедуры
+
+&НаСервере
+Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
+ ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ОбновитьКоманды()
+ ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
+КонецПроцедуры
+// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+&НаКлиенте
+Процедура ВключитьПроверкуЗаполненияДляРеквизитов(Команда)
+
+ ОчиститьСообщения();
+ ВключитьПроверкуЗаполненияДляРеквизитовНаСервере();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РедактироватьШаблонРабочегоНаименованияНоменклатуры(Команда)
+ ИзменениеВРедактореШаблона("ШаблонРабочегоНаименованияНоменклатуры");
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РедактироватьШаблонРабочегоНаименованияСерии(Команда)
+
+ ИзменениеВРедактореШаблона("ШаблонРабочегоНаименованияСерии");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РедактироватьШаблонНаименованияДляПечатиНоменклатуры(Команда)
+
+ ИзменениеВРедактореШаблона("ШаблонНаименованияДляПечатиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РедактироватьШаблонРабочегоНаименованияХарактеристики(Команда)
+
+ ИзменениеВРедактореШаблона("ШаблонРабочегоНаименованияХарактеристики");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РедактироватьШаблонНаименованияДляПечатиХарактеристики(Команда)
+
+ ИзменениеВРедактореШаблона("ШаблонНаименованияДляПечатиХарактеристики");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДобавитьСкладВПолитикиУчетаСерий(Команда)
+
+ ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьСкладВПолитикиУчетаСерийЗавершение", ЭтотОбъект);
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("РежимВыбора", Истина);
+ ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
+ ОткрытьФорму("Справочник.Склады.ФормаВыбора", ПараметрыФормы, Элементы.ПолитикиУчетаСерийСклад,,,,ОписаниеОповещения);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДобавитьПодразделениеВПолитикиУчетаСерий(Команда)
+
+ ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьПодразделениеВПолитикиУчетаСерийЗавершение", ЭтотОбъект);
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("РежимВыбора", Истина);
+
+ ПараметрыОтбора = Новый Структура("ПроизводственноеПодразделение", Истина);
+ ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
+
+ ОткрытьФорму("Справочник.СтруктураПредприятия.ФормаВыбора", ПараметрыФормы, Элементы.ПолитикиУчетаСерийСклад,,,,ОписаниеОповещения);
+
+КонецПроцедуры
+
+#Область КомандыДопРеквизитовИСведений
+
+&НаКлиенте
+Процедура СоздатьНовыйРеквизитНоменклатуры(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьОбщийРеквизитНоменклатуры(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "Номенклатура", "Общее");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьПоОбразцуРеквизитНоменклатуры(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "Номенклатура", "ПоОбразцу");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьНовыйРеквизитХарактеристики(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьОбщийРеквизитХарактеристики(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "ХарактеристикиНоменклатуры", "Общее");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьПоОбразцуРеквизитХарактеристики(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "ХарактеристикиНоменклатуры", "ПоОбразцу");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьНовыйРеквизитСерии(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьОбщийРеквизитСерии(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "СерииНоменклатуры", "Общее");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьПоОбразцуРеквизитСерии(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопРеквизит", "СерииНоменклатуры", "ПоОбразцу");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьНовоеСведениеНоменклатуры(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "Номенклатура");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьОбщееСведениеНоменклатуры(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "Номенклатура", "Общее");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьПоОбразцуСведениеНоменклатуры(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "Номенклатура", "ПоОбразцу");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьНовоеСведениеХарактеристики(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "ХарактеристикиНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьОбщееСведениеХарактеристики(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "ХарактеристикиНоменклатуры", "Общее");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьПоОбразцуСведениеХарактеристики(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "ХарактеристикиНоменклатуры", "ПоОбразцу");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьНовоеСведениеСерии(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "СерииНоменклатуры");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьОбщееСведениеСерии(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "СерииНоменклатуры", "Общее");
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьПоОбразцуСведениеСерии(Команда)
+
+ ДобавитьДопРеквизитСведение("ДопСведение", "СерииНоменклатуры", "ПоОбразцу");
+
+КонецПроцедуры
+
+#КонецОбласти
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
+
+ СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
+
+КонецПроцедуры
+
+#Область ПроцедурыИФункцииДляРедактированияТаблицДопРеквизитовСведений
+
+&НаКлиенте
+Функция КомандыРедактированияДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов)
+
+ СтруктураКоманд = Новый Структура;
+ СтруктураКоманд.Вставить("Удалить");
+ СтруктураКоманд.Вставить("ПереместитьВверх");
+ СтруктураКоманд.Вставить("ПереместитьВниз");
+
+ СтруктураКоманд.Вставить("КонтекстноеМенюУдалить");
+ СтруктураКоманд.Вставить("КонтекстноеМенюПереместитьВверх");
+ СтруктураКоманд.Вставить("КонтекстноеМенюПереместитьВниз");
+
+ ИмяТаблицыДопРеквизитовСведений = ИмяТаблицыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов);
+
+ СтруктураКоманд.Удалить = ИмяТаблицыДопРеквизитовСведений + "Удалить";
+ СтруктураКоманд.ПереместитьВверх = ИмяТаблицыДопРеквизитовСведений + "ПереместитьВверх";
+ СтруктураКоманд.ПереместитьВниз = ИмяТаблицыДопРеквизитовСведений + "ПереместитьВниз";
+
+ СтруктураКоманд.КонтекстноеМенюУдалить = ИмяТаблицыДопРеквизитовСведений + "КонтекстноеМенюУдалить";
+ СтруктураКоманд.КонтекстноеМенюПереместитьВверх = ИмяТаблицыДопРеквизитовСведений + "КонтекстноеМенюПереместитьВверх";
+ СтруктураКоманд.КонтекстноеМенюПереместитьВниз = ИмяТаблицыДопРеквизитовСведений + "КонтекстноеМенюПереместитьВниз";
+
+ Возврат СтруктураКоманд;
+
+КонецФункции
+
+&НаКлиенте
+Функция ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов)
+
+ Если ТипЭлемента = "ДопРеквизит" Тогда
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ Возврат Элементы.ТаблицаДопРеквизитовНоменклатуры;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат Элементы.ТаблицаДопРеквизитовХарактеристик;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ Возврат Элементы.ТаблицаДопРеквизитовСерий;
+ КонецЕсли;
+ ИначеЕсли ТипЭлемента = "ДопСведение" Тогда
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ Возврат Элементы.ТаблицаДопСведенийНоменклатуры;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат Элементы.ТаблицаДопСведенийХарактеристик;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ Возврат Элементы.ТаблицаДопСведенийСерий;
+ КонецЕсли;
+ Иначе
+ Возврат Неопределено;
+ КонецЕсли;
+
+КонецФункции
+
+&НаКлиентеНаСервереБезКонтекста
+Функция ТаблицаДопРеквизитов(Форма, ТипЭлемента, ТипВладельцаНабораЭлементов)
+
+ Если ТипЭлемента = "ДопРеквизит" Тогда
+
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ Возврат Форма.ТаблицаДопРеквизитовНоменклатуры;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат Форма.ТаблицаДопРеквизитовХарактеристик;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ Возврат Форма.ТаблицаДопРеквизитовСерий;
+ КонецЕсли;
+
+ ИначеЕсли ТипЭлемента = "ДопСведение" Тогда
+
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ Возврат Форма.ТаблицаДопСведенийНоменклатуры;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат Форма.ТаблицаДопСведенийХарактеристик;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ Возврат Форма.ТаблицаДопСведенийСерий;
+ КонецЕсли;
+
+ Иначе
+ Возврат Неопределено;
+ КонецЕсли;
+
+КонецФункции
+
+&НаКлиентеНаСервереБезКонтекста
+Функция ИмяТаблицыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов)
+
+ Если ТипЭлемента = "ДопРеквизит" Тогда
+
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ Возврат "ТаблицаДопРеквизитовНоменклатуры";
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат "ТаблицаДопРеквизитовХарактеристик";
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ Возврат "ТаблицаДопРеквизитовСерий";
+ КонецЕсли;
+
+ ИначеЕсли ТипЭлемента = "ДопСведение" Тогда
+
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ Возврат "ТаблицаДопСведенийНоменклатуры";
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат "ТаблицаДопСведенийХарактеристик";
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ Возврат "ТаблицаДопСведенийСерий";
+ КонецЕсли;
+
+ Иначе
+ Возврат Неопределено;
+ КонецЕсли;
+
+КонецФункции
+
+&НаКлиентеНаСервереБезКонтекста
+Функция НаборДопРеквизитовСведенийОбъекта(Объект, ТипВладельцаНабораЭлементов)
+
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ Возврат Объект.НаборСвойств;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ Возврат Объект.НаборСвойствХарактеристик;
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ Возврат Объект.НаборСвойствСерий;
+ КонецЕсли;
+
+ Возврат Неопределено;
+
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция НаборДопРеквизитовСведенийОбщий(ТипВладельцаНабораЭлементов)
+
+ Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
+ НаборДопРеквизитовСведений = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
+ ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ НаборДопРеквизитовСведений = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ НаборДопРеквизитовСведений = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
+ Иначе
+ НаборДопРеквизитовСведений = Неопределено;
+ КонецЕсли;
+
+ Возврат НаборДопРеквизитовСведений;
+
+КонецФункции
+
+&НаКлиенте
+Процедура ДобавитьДопРеквизитСведение(ТипЭлемента, ТипВладельцаНабораЭлементов, Вид = "")
+
+ Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
+
+ ТекстВопроса = Нстр("ru = 'Данные еще не записаны.
+ |Добавление дополнительных свойств возможно только после записи элемента.
+ |Записать элемент?'");
+
+ ПоказатьВопрос(Новый ОписаниеОповещения("ДобавитьДопРеквизитСведениеЗавершение", ЭтотОбъект, Новый Структура("Вид, ТипВладельцаНабораЭлементов, ТипЭлемента", Вид, ТипВладельцаНабораЭлементов, ТипЭлемента)), ТекстВопроса, РежимДиалогаВопрос.ДаНет);
+ Возврат;
+
+ КонецЕсли;
+
+ ДобавитьДопРеквизитСведениеФрагмент(Вид, ТипВладельцаНабораЭлементов, ТипЭлемента);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДобавитьДопРеквизитСведениеФрагмент(Знач Вид, Знач ТипВладельцаНабораЭлементов, Знач ТипЭлемента)
+
+ Перем НаборДопРеквизитовСведений, ПараметрыФормы;
+
+ ТекущийТипВладельцаНабораЭлементов = ТипВладельцаНабораЭлементов;
+ ТекущийТипЭлемента = ТипЭлемента;
+
+ НаборДопРеквизитовСведений = НаборДопРеквизитовСведенийОбъекта(Объект, ТипВладельцаНабораЭлементов);
+ Если НЕ ЗначениеЗаполнено(НаборДопРеквизитовСведений) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ВерсияДанныхТекущегоНабора = ПолучитьВерсиюДанныхНабора(НаборДопРеквизитовСведений);
+
+ ПараметрыФормы = Новый Структура;
+
+ Если Вид = "Общее" Тогда
+ НаборДопРеквизитовСведений = НаборДопРеквизитовСведенийОбщий(ТипВладельцаНабораЭлементов);
+ ИначеЕсли Вид = "ПоОбразцу" Тогда
+ Если ТипЭлемента = "ДопРеквизит" Тогда
+ ПараметрыФормы.Вставить("ВыборВладельцаДополнительныхЗначений", Истина);
+ Иначе
+ ПараметрыФормы.Вставить("ВыборОбщегоСвойства", Истина);
+ КонецЕсли;
+ КонецЕсли;
+
+ ПараметрыФормы.Вставить("НаборСвойств", НаборДопРеквизитовСведений);
+ ПараметрыФормы.Вставить("ТекущийНаборСвойств", НаборДопРеквизитовСведений);
+ ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ТипЭлемента <> "ДопРеквизит");
+ ПараметрыФормы.Вставить("ВидСвойства", ?(ПараметрыФормы.ЭтоДополнительноеСведение,
+ ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеСведения"),
+ ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеРеквизиты")));
+
+ ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта",
+ ПараметрыФормы,
+ ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов),
+ ,
+ ,
+ ,
+ ,
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+// Обработчик оповещения.
+// Параметры:
+// РезультатВопроса - КодВозвратаДиалога - выбранный вариант.
+// ДополнительныеПараметры - Структура - дополнительные параметры:
+// * Вид - Строка - вид.
+// * ТипЭлемента - Строка - тип элемента.
+// * ТипВладельцаНабораЭлементов - Строка - тип владельца набора элементов.
+//
+&НаКлиенте
+Процедура ДобавитьДопРеквизитСведениеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
+
+ Вид = ДополнительныеПараметры.Вид;
+ ТипВладельцаНабораЭлементов = ДополнительныеПараметры.ТипВладельцаНабораЭлементов;
+ ТипЭлемента = ДополнительныеПараметры.ТипЭлемента;
+
+ Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
+ Возврат;
+ КонецЕсли;
+
+ Попытка
+ ЭлементЗаписан = Записать();
+ Исключение
+ Возврат;
+ КонецПопытки;
+
+ Если Не ЭлементЗаписан Тогда
+ Возврат;
+ КонецЕсли;
+
+ ДобавитьДопРеквизитСведениеФрагмент(Вид, ТипВладельцаНабораЭлементов, ТипЭлемента);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаВыбораДопРеквизитСведение(ВыбранноеЗначение, ТипЭлемента, ТипВладельцаНабораЭлементов)
+
+ НаборДопРеквизитовСведений = НаборДопРеквизитовСведенийОбъекта(Объект, ТипВладельцаНабораЭлементов);
+ Если НЕ ЗначениеЗаполнено(НаборДопРеквизитовСведений) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ЭтоНаборыДополнительныхСведений = (ТипЭлемента <> "ДопРеквизит");
+
+ Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура")
+ И ВыбранноеЗначение.Свойство("ВладелецДополнительныхЗначений") Тогда
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоНаборыДополнительныхСведений);
+ ПараметрыФормы.Вставить("ТекущийНаборСвойств", НаборДопРеквизитовСведений);
+ ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", ВыбранноеЗначение.ВладелецДополнительныхЗначений);
+
+ ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта",
+ ПараметрыФормы, ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов));
+
+ ИначеЕсли ВыбранноеЗначение.Свойство("ОбщееСвойство") Тогда
+
+ ЗаписатьОбщееСвойствоНаСервере(ВыбранноеЗначение, НаборДопРеквизитовСведений, ЭтоНаборыДополнительныхСведений);
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура УстановитьДоступностьКомандРедактированияДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов)
+
+ ТаблицаДопРеквизитовСведений = ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов);
+
+ ТекущиеДанные = ТаблицаДопРеквизитовСведений.ТекущиеДанные;
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТаблицаДопРеквизитов = ТаблицаДопРеквизитов(ЭтотОбъект, ТипЭлемента, ТипВладельцаНабораЭлементов);
+ КомандыРедактирования = КомандыРедактированияДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов);
+
+ // Если активная строка - строка общего доп. реквизита (сведения), то сделать недоступными кнопки добавления, удаления, перемещения.
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.Удалить,
+ "Доступность",
+ Не ТекущиеДанные.ОбщееСвойство);
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.ПереместитьВверх,
+ "Доступность",
+ Не ТекущиеДанные.ОбщееСвойство);
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.ПереместитьВниз,
+ "Доступность",
+ Не ТекущиеДанные.ОбщееСвойство);
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.КонтекстноеМенюУдалить,
+ "Доступность",
+ Не ТекущиеДанные.ОбщееСвойство);
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.КонтекстноеМенюПереместитьВверх,
+ "Доступность",
+ Не ТекущиеДанные.ОбщееСвойство);
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.КонтекстноеМенюПереместитьВниз,
+ "Доступность",
+ Не ТекущиеДанные.ОбщееСвойство);
+
+ // Если активная строка - первая или последняя в списке, то сделать недоступными кнопки сдвига вверх или вниз.
+ Если Не ТекущиеДанные.ОбщееСвойство Тогда
+
+ ИндексСтроки = ТаблицаДопРеквизитов.Индекс(ТекущиеДанные);
+
+ Если ИндексСтроки = 0 Тогда
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.ПереместитьВверх,
+ "Доступность",
+ Ложь);
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.КонтекстноеМенюПереместитьВверх,
+ "Доступность",
+ Ложь);
+
+ КонецЕсли;
+
+ Если ИндексСтроки = ТаблицаДопРеквизитов.Количество() - 1 Тогда
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.ПереместитьВниз,
+ "Доступность",
+ Ложь);
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.КонтекстноеМенюПереместитьВниз,
+ "Доступность",
+ Ложь);
+
+ КонецЕсли;
+
+ Если ИндексСтроки <> 0 Тогда
+
+ ПредыдущаяСтрока = ТаблицаДопРеквизитов[ИндексСтроки - 1];
+
+ Если ПредыдущаяСтрока.ОбщееСвойство Тогда
+
+ // Если предыдущая строка является строкой общего реквизита, то сделать недоступной кнопку сдвига вверх.
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.ПереместитьВверх,
+ "Доступность",
+ Ложь);
+
+ ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
+ Элементы,
+ КомандыРедактирования.КонтекстноеМенюПереместитьВверх,
+ "Доступность",
+ Ложь);
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаписатьДопРеквизитыСведенияНабора(Отказ, ТекущийОбъект, ТипЭлемента, ТипВладельцаНабораЭлементов)
+
+ НаборСвойствДопРеквизитовСведений = НаборДопРеквизитовСведенийОбъекта(ТекущийОбъект, ТипВладельцаНабораЭлементов);
+ Если НЕ ЗначениеЗаполнено(НаборСвойствДопРеквизитовСведений) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ОбъектНаборСвойств = НаборСвойствДопРеквизитовСведений.ПолучитьОбъект();
+
+ Если ТипЭлемента = "ДопРеквизит" Тогда
+ ТЧДополнительныеРеквизитыСведения = ОбъектНаборСвойств.ДополнительныеРеквизиты;
+ ИначеЕсли ТипЭлемента = "ДопСведение" Тогда
+ ТЧДополнительныеРеквизитыСведения = ОбъектНаборСвойств.ДополнительныеСведения;
+ КонецЕсли;
+
+ ТаблицаДопРеквизитов = ТаблицаДопРеквизитов(ЭтотОбъект, ТипЭлемента, ТипВладельцаНабораЭлементов);
+ ТЧДополнительныеРеквизитыСведения.Очистить();
+
+ Для каждого ЭлементСтр Из ТаблицаДопРеквизитов Цикл
+ Если Не ЭлементСтр.ОбщееСвойство Тогда
+ НовСтр = ТЧДополнительныеРеквизитыСведения.Добавить();
+ НовСтр.Свойство = ЭлементСтр.Свойство;
+ НовСтр.ПометкаУдаления = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементСтр.Свойство, "ПометкаУдаления");
+ КонецЕсли;
+ КонецЦикла;
+
+ Попытка
+
+ ОбъектНаборСвойств.Записать();
+
+ Исключение
+
+ // Установить признак отказа записи.
+ Отказ = Истина;
+
+ // Добавить запись в журнал регистрации.
+ ИмяСобытия = НСтр("ru = 'Дополнительные %1 %2. Не удалось обновить состав дополнительных %3 набора.'");
+
+ ТипСведений = ?(ТипЭлемента = "ДопРеквизит", "реквизиты", "сведения");
+ ТипОбъекта = ?(ТипВладельцаНабораЭлементов = "Номенклатура", "номенклатуры", ?(ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры", "характеристик", "серий"));
+ ТипСостава = ?(ТипЭлемента = "ДопРеквизит", "реквизитов", "сведений");
+
+ ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ ИмяСобытия,
+ ТипСведений,
+ ТипОбъекта,
+ ТипСостава);
+
+ КомментарийЖурнала = НСтр("ru = 'При обновлении табличной части дополнительных реквизитов набора свойств ""%1"" произошла ошибка: ""%2""'");
+ ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+
+ КомментарийЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ КомментарийЖурнала,
+ НаборСвойствДопРеквизитовСведений,
+ ПредставлениеОшибки);
+
+ ЗаписьЖурналаРегистрации(
+ ИмяСобытия,
+ УровеньЖурналаРегистрации.Ошибка,
+ ,
+ НаборСвойствДопРеквизитовСведений,
+ КомментарийЖурнала,
+ РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
+
+ // Вызвать исключение.
+ ВыражениеИсключения = НСтр("ru = 'При записи дополнительных %1 %2 произошла ошибка (см. журнал регистрации).'");
+
+ ТипСведений = ?(ТипЭлемента = "ДопРеквизит", "реквизитов", "сведений");
+ ТипОбъекта = ?(ТипВладельцаНабораЭлементов = "Номенклатура", "номенклатуры", ?(ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры", "характеристик", "серий"));
+
+ ВыражениеИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ ВыражениеИсключения,
+ ТипСведений,
+ ТипОбъекта,
+ ТипСостава);
+
+ ВызватьИсключение(ВыражениеИсключения);
+
+ КонецПопытки;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПриВыбореСтрокиТаблицыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов, ТекущаяСтрока)
+
+ Если ТекущаяСтрока = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТекущийТипЭлемента = ТипЭлемента;
+ ТекущийТипВладельцаНабораЭлементов = ТипВладельцаНабораЭлементов;
+
+ НаборСвойств = ?(ТекущаяСтрока.ОбщееСвойство,
+ НаборОбщихСвойств,
+ Объект.НаборСвойств);
+
+ Если ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
+ НаборСвойств = ?(ТекущаяСтрока.ОбщееСвойство,
+ НаборОбщихСвойствХарактеристик,
+ Объект.НаборСвойствХарактеристик);
+ ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+ НаборСвойств = ?(ТекущаяСтрока.ОбщееСвойство,
+ НаборОбщихСвойствСерий,
+ Объект.НаборСвойствСерий);
+ КонецЕсли;
+
+ ПараметрыФормы = Новый Структура("Ключ, ТекущийНаборСвойств", ТекущаяСтрока.Свойство, НаборСвойств);
+
+ ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента",
+ ПараметрыФормы,
+ ЭтотОбъект);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура УстановитьЗапретПеретаскиванияЭлементовДопРеквизитовСведений(Выполнение, ТипЭлемента, ТипВладельцаНабораЭлементов)
+
+ ТаблицаДопРеквизитовСведений = ТаблицаФормыДопРеквизитовСведений(ТипЭлемента, ТипВладельцаНабораЭлементов);
+ ТекущиеДанные = ТаблицаДопРеквизитовСведений.ТекущиеДанные;
+
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ Иначе
+ Выполнение = Не ТекущиеДанные.ОбщееСвойство;
+ КонецЕсли;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Прочее
+
+// Процедура вызывается при начале выбора шаблона наименования номенклатуры или характеристик.
+// Проверяет модифицированность элемента и открывается форму редактирования шаблона.
+//
+// Параметры:
+// ШаблонНаименования (Строка) - шаблон наименования,
+// ЭлементШаблонаНаименования (ПолеФормы) - элемент шаблона,
+// ИмяШаблона (Строка) - имя шаблона наименования,
+// ФлагЗапрета (Строка) - имя флага запрета.
+//
+&НаКлиенте
+Процедура ИзменениеВРедактореШаблона(ИмяШаблонаНаименования)
+
+ ОчиститьСообщения();
+
+ ПараметрыВопроса = Новый Структура;
+ ПараметрыВопроса.Вставить("ИмяШаблонаНаименования", ИмяШаблонаНаименования);
+
+ Если Модифицированность Тогда
+
+ ТекстВопроса = НСтр("ru = 'Изменение шаблона наименования с помощью редактора
+ |формул возможно только после записи элемента, записать элемент?'");
+
+
+ ПоказатьВопрос(Новый ОписаниеОповещения("ИзменениеВРедактореШаблонаВопросОЗаписиЗавершение", ЭтотОбъект, ПараметрыВопроса),
+ ТекстВопроса, РежимДиалогаВопрос.ОКОтмена,,,НСтр("ru = 'Редактирование шаблона'"));
+
+ Возврат;
+ КонецЕсли;
+
+ ИзменениеВРедактореШаблонаВопросФрагмент(ПараметрыВопроса);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменениеВРедактореШаблонаВопросФрагмент(ДополнительныеПараметры)
+
+ ИмяШаблона = ДополнительныеПараметры.ИмяШаблонаНаименования;
+ АдресДереваОперандов = ПодготовитьДеревоОперандов(ИмяШаблона);
+
+ ПараметрыРедактированияШаблона = Новый Структура("Формула, ОперандыЗаголовок, Операторы, СтроковаяФормула, ДеревоОперандов");
+
+ ПараметрыРедактированияШаблона.Формула = Объект[ИмяШаблона];
+ ПараметрыРедактированияШаблона.ОперандыЗаголовок = НСтр("ru = 'Доступные реквизиты'");
+ ПараметрыРедактированияШаблона.Операторы = АдресХранилищаДереваОператоров;
+
+ ПараметрыРедактированияШаблона.ДеревоОперандов = АдресДереваОперандов;
+ ПараметрыРедактированияШаблона.Вставить("ТипРезультата", Новый ОписаниеТипов("Строка"));
+
+ ОписаниеОповещения = Новый ОписаниеОповещения("ИзменениеВРедактореШаблонаЗавершение", ЭтотОбъект, ДополнительныеПараметры);
+
+ ОткрытьФорму(
+ "ОбщаяФорма.КонструкторФормул",
+ ПараметрыРедактированияШаблона,
+ ЭтотОбъект,
+ ,
+ ,
+ ,
+ ОписаниеОповещения,
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+&НаСервере
+Функция ПодготовитьДеревоОперандов(ИмяШаблона)
+
+ НаборыСвойств = Новый Структура("НаборСвойств, НаборСвойствСерий, НаборСвойствХарактеристик");
+ ЗаполнитьЗначенияСвойств(НаборыСвойств, Объект);
+
+ ДеревоОперандов = Справочники.ВидыНоменклатуры.ПодготовитьДеревоОперандов(НаборыСвойств, ИмяШаблона);
+
+ АдресХранения = ПоместитьВоВременноеХранилище(ДеревоОперандов, УникальныйИдентификатор);
+
+ Возврат АдресХранения;
+
+КонецФункции
+
+&НаКлиенте
+Процедура ИзменениеВРедактореШаблонаВопросОЗаписиЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
+
+ Если РезультатВопроса = КодВозвратаДиалога.ОК Тогда
+ Если Записать() Тогда
+
+ ИзменениеВРедактореШаблонаВопросФрагмент(ДополнительныеПараметры);
+
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменениеВРедактореШаблонаЗавершение(Результат, ДополнительныеПараметры) Экспорт
+
+ Шаблон = Результат;
+ ИмяШаблона = ДополнительныеПараметры.ИмяШаблонаНаименования;
+
+ Если Шаблон <> Неопределено
+ И Объект[ИмяШаблона] <> Шаблон Тогда
+ Модифицированность = Истина;
+ Объект[ИмяШаблона] = Шаблон;
+
+ Если Не МультиязычностьВключена Тогда
+ ИмяРеквизитаЗапретРедактированияНаименования = ИмяРеквизитаЗапретРедактированияНаименования(ИмяШаблона);
+ Если ИмяРеквизитаЗапретРедактированияНаименования <> "" Тогда
+ Объект[ИмяРеквизитаЗапретРедактированияНаименования] = ЗначениеЗаполнено(Объект[ИмяШаблона]);
+ КонецЕсли;
+ КонецЕсли;
+
+ НастроитьПоШаблонуНаименования(ДополнительныеПараметры.ИмяШаблонаНаименования);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПостроитьДеревоОператоров()
+
+ Дерево = РаботаСФормулами.ПолучитьПустоеДеревоОператоров();
+
+ ПредставлениеГруппыОператора = НСтр("ru = 'Разделители'");
+ ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "Разделители", ПредставлениеГруппыОператора);
+
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "/", " + ""/"" + ", "/");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "\", " + ""\"" + ", "\");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "|", " + ""|"" + ", "|");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "_", " + ""_"" + ", "_");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ",", " + "", "" + ", ",");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ".", " + "". "" + ", ".");
+
+ ПредставлениеОператора = НСтр("ru = 'Пробел'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "Пробел", " + "" "" + ", ПредставлениеОператора);
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "(", " + "" ("" + ", "(");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ")", " + "") "" + ", ")");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, """", " + """""""" + ", """");
+
+ ПредставлениеГруппыОператора = НСтр("ru = 'Операторы'");
+ ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "Операторы", ПредставлениеГруппыОператора);
+
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "+", " + ", "+");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "-", " - ", "-");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "*", " * ", "*");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "/", " / ", "/");
+
+ ПредставлениеГруппыОператора = НСтр("ru = 'Логические операторы и константы'");
+ ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "ЛогическиеОператорыИКонстанты", ПредставлениеГруппыОператора);
+
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "<", " < ", "<");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ">", " > ", ">");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "<=", " <= ", "<=");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, ">=", " >= ", ">=");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "=", " = ", "=");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров, "<>", " <> ", "<>");
+
+ Идентификатор = "И";
+ КонструкцияДляВставки = " " + "И" + " ";
+ Представление = НСтр("ru = 'И'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление);
+
+ Идентификатор = "Или";
+ КонструкцияДляВставки = " " + "Или" + " ";
+ Представление = НСтр("ru = 'Или'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление);
+
+ Идентификатор = "Не";
+ КонструкцияДляВставки = " " + "Не" + " ";
+ Представление = НСтр("ru = 'Не'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление);
+
+ Идентификатор = "ИСТИНА";
+ КонструкцияДляВставки = " " + "ИСТИНА" + " ";
+ Представление = НСтр("ru = 'ИСТИНА'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление);
+
+ Идентификатор = "ЛОЖЬ";
+ КонструкцияДляВставки = " " + "ЛОЖЬ" + " ";
+ Представление = НСтр("ru = 'ЛОЖЬ'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление);
+
+ ПредставлениеГруппыОператора = НСтр("ru = 'Числовые функции'");
+ ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "ЧисловыеФункции", ПредставлениеГруппыОператора);
+
+ Идентификатор = "Макс";
+ КонструкцияДляВставки = "Макс(,)";
+ Представление = НСтр("ru = 'Максимум'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,,
+ 2);
+
+ Идентификатор = "Мин";
+ КонструкцияДляВставки = "Мин(,)";
+ Представление = НСтр("ru = 'Минимум'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,,
+ 2);
+
+ Идентификатор = "Окр";
+ ТекстОкругляемоеЗначение = НСтр("ru = '<Округляемое значение>'");
+ ТекстКоличествоЗнаков = НСтр("ru = '<Знаков после запятой>'");
+ КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ "Окр(%1, %2)",
+ ТекстОкругляемоеЗначение,
+ ТекстКоличествоЗнаков);
+ Представление = НСтр("ru = 'Округление'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,,
+ 2);
+
+ Идентификатор = "Цел";
+ КонструкцияДляВставки = "Цел()";
+ Представление = НСтр("ru = 'Целая часть'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,,
+ 1);
+
+ ПредставлениеГруппыОператора = НСтр("ru = 'Строковые функции'");
+ ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "СтроковыеФункции", ПредставлениеГруппыОператора);
+
+ Идентификатор = "Строка";
+ КонструкцияДляВставки = "Строка()";
+ Представление = НСтр("ru = 'Строка'");
+ ПояснениеОператора = НСтр("ru = 'Преобразовывает значение в строку'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "ВРег";
+ КонструкцияДляВставки = "ВРег()";
+ Представление = НСтр("ru = 'Верхний регистр'");
+ ПояснениеОператора = НСтр("ru = 'Приводит строку в верхний регистр'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "Лев";
+ ТекстСтрокаИсходная = НСтр("ru = '<Исходная строка>'");
+ ТекстКоличествоСимволов = НСтр("ru = '<Количество символов>'");
+ КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ "Лев(%1, %2)",
+ ТекстСтрокаИсходная,
+ ТекстКоличествоСимволов);
+ Представление = НСтр("ru = 'Левая часть строки'");
+ ПояснениеОператора = НСтр("ru = 'Получает указанное количество символов слева строки'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "НРег";
+ КонструкцияДляВставки = "НРег()";
+ Представление = НСтр("ru = 'Нижний регистр'");
+ ПояснениеОператора = НСтр("ru = 'Приводит строку к нижнему регистру'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "Прав";
+ ТекстСтрокаИсходная = НСтр("ru = '<Исходная строка>'");
+ ТекстКоличествоСимволов = НСтр("ru = '<Количество символов>'");
+ КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ "Прав(%1, %2)",
+ ТекстСтрокаИсходная,
+ ТекстКоличествоСимволов);
+ Представление = НСтр("ru = 'Правая часть строки'");
+ ПояснениеОператора = НСтр("ru = 'Получает указанное количество символов справа строки'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "СокрЛ";
+ КонструкцияДляВставки = "СокрЛ()";
+ Представление = НСтр("ru = 'Удаление лишних символов слева'");
+ ПояснениеОператора = НСтр("ru = 'Отсекает незначащие символы, стоящие слева от первого значащего символа в строке'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "СокрЛП";
+ КонструкцияДляВставки = "СокрЛП()";
+ Представление = НСтр("ru = 'Удаление лишних символов слева и справа'");
+ ПояснениеОператора = НСтр("ru = 'Отсекает незначащие символы, стоящие слева от первого значащего символа в строке, и пробелы, стоящие справа от последнего значащего символа в строке'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "СокрП";
+ КонструкцияДляВставки = "СокрП()";
+ Представление = НСтр("ru = 'Удаление лишних символов справа'");
+ ПояснениеОператора = НСтр("ru = 'Отсекает незначащие символы, стоящие справа от последнего значащего символа в строке'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "ТРег";
+ КонструкцияДляВставки = "ТРег()";
+ Представление = НСтр("ru = 'Титульный регистр'");
+ ПояснениеОператора = НСтр("ru = 'Преобразует строку следующим образом: у каждого слова строки первый символ преобразуется к верхнему регистру. Все остальные символы преобразуются к нижнему регистру'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "СтрЗаменить";
+ ТекстСтрокаИсходная = НСтр("ru = '<Исходная строка>'");
+ ТекстСтрокаЧтоЗаменяем = НСтр("ru = '<Строка которую заменить>'");
+ ТекстСтрокаНаЧтоЗаменяем = НСтр("ru = '<Строка на которую заменить>'");
+ КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ "СтрЗаменить(%1, %2, %3)",
+ ТекстСтрокаИсходная,
+ ТекстСтрокаЧтоЗаменяем,
+ ТекстСтрокаНаЧтоЗаменяем);
+ Представление = НСтр("ru = 'Замена в строке'");
+ ПояснениеОператора = НСтр("ru = 'Находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "СтрДлина";
+ КонструкцияДляВставки = "СтрДлина()";
+ Представление = НСтр("ru = 'Длина строки'");
+ ПояснениеОператора = НСтр("ru = 'Возвращает количество символов строки'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ ПредставлениеГруппыОператора = НСтр("ru = 'Прочие функции'");
+ ГруппаОператоров = РаботаСФормулами.ДобавитьГруппуОператоров(Дерево, "ПрочиеФункции", ПредставлениеГруппыОператора);
+
+ Идентификатор = "?";
+ ТекстУсловие = НСтр("ru = '<Условие>'");
+ ТекстЗначениеИстина = НСтр("ru = '<Значение если истина>'");
+ ТекстЗначениеЛожь = НСтр("ru = '<Значение если ложь>'");
+ КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ "?(%1, %2, %3)",
+ ТекстУсловие,
+ ТекстЗначениеИстина,
+ ТекстЗначениеЛожь);
+ Представление = НСтр("ru = 'Условие'");
+ ПояснениеОператора = НСтр("ru = 'Вычисляет значение в зависимости от значения условия'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "ПредопределенноеЗначение";
+ КонструкцияДляВставки = "ПредопределенноеЗначение()";
+ Представление = НСтр("ru = 'Предопределенное значение'");
+ ПояснениеОператора = НСтр("ru = 'Обращение к предопределенному элементу по его имени'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "ЗначениеЗаполнено";
+ КонструкцияДляВставки = "ЗначениеЗаполнено()";
+ Представление = НСтр("ru = 'Значение заполнено'");
+ ПояснениеОператора = НСтр("ru = 'Проверка заполненности значения'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ Идентификатор = "Формат";
+ ТекстЗначение = НСтр("ru = '<Значение>'");
+ ТекстФорматнаяСтрока = НСтр("ru = '<Форматная строка>'");
+ КонструкцияДляВставки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ "Формат(%1, %2)",
+ ТекстЗначение,
+ ТекстФорматнаяСтрока);
+ Представление = НСтр("ru = 'Формат'");
+ ПояснениеОператора = НСтр("ru = 'Выполняет форматирование значения в соответствии с форматной строкой'");
+ РаботаСФормулами.ДобавитьОператор(ГруппаОператоров,
+ Идентификатор,
+ КонструкцияДляВставки,
+ Представление,
+ ПояснениеОператора);
+
+ АдресХранилищаДереваОператоров = ПоместитьВоВременноеХранилище(Дерево, УникальныйИдентификатор);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриИзмененииФлагаЗаполнятьОбязательно(ВладелецРеквизита, ИдентификаторСтрокиТаблицы)
+
+ КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(Объект, ВладелецРеквизита);
+
+ ТекущиеДанные = КоллекцияРеквизитовДляКонтроля.НайтиПоИдентификатору(ИдентификаторСтрокиТаблицы);
+
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если ТекущиеДанные.ЗаполнятьОбязательно Тогда
+ ТекущиеДанные.ОтображатьПриСоздании = Истина;
+ КонецЕсли;
+
+ Если ТекущиеДанные.ЭтоДопРеквизит Тогда
+ ТекущиеДанные.ДоступностьОтображатьПриСоздании = Не ТекущиеДанные.ЗаполнятьОбязательно;
+ Иначе
+ ТекущиеДанные.ДоступностьОтображатьПриСоздании = Справочники.ВидыНоменклатуры.ДоступноИзменениеНастройкиОтображенияРеквизита(Объект,
+ ТекущиеДанные,
+ ВладелецРеквизита);
+ КонецЕсли;
+
+КонецПроцедуры
+
+// Процедура заполняет нужную таблицу дополнительных реквизитов (сведений).
+//
+// Параметры:
+// Таблица - ДанныеФормыКоллекция - Таблица доп.реквизитов (сведений).
+//
+// НаборСвойствДопРеквизитов - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - Ссылка на элемент-владелец
+// набора доп.реквизитов (сведений).
+//
+// НаборОбщихСвойствДопРеквизитов - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - Ссылка на элемент-владелец
+// набора общих доп.реквизитов (сведений).
+//
+// ТипДанных - Строка - Тип данных которые будут заполняться.
+// Принимает значения: "Реквизиты", "Сведения".
+//
+// ТолькоОбщиеСвойства -Булево - Если параметр, установлен в Истина, то предварительно очищается не вся таблица,
+// а только список общих доп.реквизитов (сведений). Это сделано для того чтобы избежать
+// потери введенных данных о не общих доп.реквизитах (сведениях) в форму.
+// Значение по умолчанию: Ложь.
+&НаСервере
+Процедура ЗаполнитьСписокСвойствДопРеквизитовТаблицы(Таблица, НаборСвойствДопРеквизитов, НаборОбщихСвойствДопРеквизитов,
+ ТипДанных, ТолькоОбщиеСвойства = Ложь)
+
+ // Если нужно перезаполнить свойства, то проверить, что передана ссылка на набор свойств.
+ Если Не ТолькоОбщиеСвойства Тогда
+ Если Не ЗначениеЗаполнено(НаборСвойствДопРеквизитов) Тогда
+ Возврат;
+ КонецЕсли;
+ Иначе
+ // Если нужно перезаполнить только ОБЩИЕ свойства, то проверить, что передана ссылка на набор ОБЩИХ свойств.
+ Если Не ЗначениеЗаполнено(НаборОбщихСвойствДопРеквизитов) Тогда
+ Возврат;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если ТолькоОбщиеСвойства Тогда
+
+ // Удалить из таблицы только строки общих свойств.
+ ВГраница = Таблица.Количество() - 1;
+
+ Для ОбрИндекс = 0 По ВГраница Цикл
+
+ СтрокаТаблицы = Таблица[ВГраница - ОбрИндекс];
+
+ Если СтрокаТаблицы.ОбщееСвойство Тогда
+ Таблица.Удалить(СтрокаТаблицы);
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Иначе
+
+ Таблица.Очистить();
+
+ КонецЕсли;
+
+ Если ТипДанных = "Реквизиты" Тогда
+ ИмяТЧ = "ДополнительныеРеквизиты";
+ ИначеЕсли ТипДанных = "Сведения" Тогда
+ ИмяТЧ = "ДополнительныеСведения";
+ КонецЕсли;
+
+ // Получить список дополнительных реквизитов из набора свойств, и дополнительных реквизитов из набора общих свойств.
+ Запрос = Новый Запрос;
+
+ Запрос.УстановитьПараметр("НаборОбщихСвойств", НаборОбщихСвойствДопРеквизитов);
+
+ Если ТолькоОбщиеСвойства Тогда
+
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ОбщиеДопРеквизитыСведения.Свойство КАК Свойство,
+ | ОбщиеДопРеквизитыСведения.Свойство.Заголовок КАК ПредставлениеРеквизита,
+ | ИСТИНА КАК ОбщееСвойство,
+ | ОбщиеДопРеквизитыСведения.НомерСтроки КАК НомерСтрокиДляСортировки,
+ | ВЫБОР КОГДА ОбщиеДопРеквизитыСведения.ПометкаУдаления ТОГДА 4 ИНАЧЕ 1 КОНЕЦ КАК ИндексКартинки
+ |ИЗ
+ | &ТабЧасть КАК ОбщиеДопРеквизитыСведения
+ |ГДЕ
+ | ОбщиеДопРеквизитыСведения.Ссылка = &НаборОбщихСвойств";
+
+ Иначе
+
+ Запрос.УстановитьПараметр("НаборСвойств", НаборСвойствДопРеквизитов);
+
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ДопРеквизитыСведения.Свойство КАК Свойство,
+ | ДопРеквизитыСведения.Свойство.Заголовок КАК ПредставлениеРеквизита,
+ | ЛОЖЬ КАК ОбщееСвойство,
+ | ДопРеквизитыСведения.НомерСтроки КАК НомерСтрокиДляСортировки,
+ | ВЫБОР КОГДА ДопРеквизитыСведения.ПометкаУдаления ТОГДА 4 ИНАЧЕ 1 КОНЕЦ КАК ИндексКартинки
+ |ИЗ
+ | &ТабЧасть КАК ДопРеквизитыСведения
+ |ГДЕ
+ | ДопРеквизитыСведения.Ссылка = &НаборСвойств
+ |
+ |ОБЪЕДИНИТЬ ВСЕ
+ |
+ |ВЫБРАТЬ
+ | ОбщиеДопРеквизитыСведения.Свойство,
+ | ОбщиеДопРеквизитыСведения.Свойство.Заголовок,
+ | ИСТИНА,
+ | ОбщиеДопРеквизитыСведения.НомерСтроки,
+ | ВЫБОР КОГДА ОбщиеДопРеквизитыСведения.ПометкаУдаления ТОГДА 4 ИНАЧЕ 1 КОНЕЦ
+ |ИЗ
+ | &ТабЧасть КАК ОбщиеДопРеквизитыСведения
+ |ГДЕ
+ | ОбщиеДопРеквизитыСведения.Ссылка = &НаборОбщихСвойств";
+
+ КонецЕсли;
+
+ Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТабЧасть", "Справочник.НаборыДополнительныхРеквизитовИСведений." + ИмяТЧ);
+
+ РезультатЗапроса = Запрос.Выполнить();
+
+ Если РезультатЗапроса.Пустой() Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТаблицаДопРеквизитовСведений = РезультатЗапроса.Выгрузить();
+
+ Если ТолькоОбщиеСвойства Тогда
+
+ ТаблицаДопРеквизитовСведений.Сортировать("НомерСтрокиДляСортировки Возр");
+
+ ТаблицаВсехДопРеквизитовСведений = Таблица.Выгрузить();
+ ТаблицаВсехДопРеквизитовСведений.Очистить();
+
+ ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаДопРеквизитовСведений, ТаблицаВсехДопРеквизитовСведений);
+ ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Таблица, ТаблицаВсехДопРеквизитовСведений);
+
+ Таблица.Загрузить(ТаблицаВсехДопРеквизитовСведений);
+
+ Иначе
+
+ ТаблицаДопРеквизитовСведений.Сортировать("ОбщееСвойство Убыв, НомерСтрокиДляСортировки Возр");
+
+ Таблица.Загрузить(ТаблицаДопРеквизитовСведений);
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаполнитьСпискиДопРеквизитовСведений()
+
+ Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
+ Возврат;
+ КонецЕсли;
+
+ НаборОбщихСвойств = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
+ НаборОбщихСвойствХарактеристик = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
+ НаборОбщихСвойствСерий = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопРеквизитовНоменклатуры,
+ Объект.НаборСвойств,
+ НаборОбщихСвойств,
+ "Реквизиты",
+ РедактируютсяОбщиеРеквизитыСведения);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопРеквизитовХарактеристик,
+ Объект.НаборСвойствХарактеристик,
+ НаборОбщихСвойствХарактеристик,
+ "Реквизиты",
+ РедактируютсяОбщиеРеквизитыСведения);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопРеквизитовСерий,
+ Объект.НаборСвойствСерий,
+ НаборОбщихСвойствСерий,
+ "Реквизиты",
+ РедактируютсяОбщиеРеквизитыСведения);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопСведенийНоменклатуры,
+ Объект.НаборСвойств,
+ НаборОбщихСвойств,
+ "Сведения",
+ РедактируютсяОбщиеРеквизитыСведения);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопСведенийХарактеристик,
+ Объект.НаборСвойствХарактеристик,
+ НаборОбщихСвойствХарактеристик,
+ "Сведения",
+ РедактируютсяОбщиеРеквизитыСведения);
+
+ ЗаполнитьСписокСвойствДопРеквизитовТаблицы(
+ ТаблицаДопСведенийСерий,
+ Объект.НаборСвойствСерий,
+ НаборОбщихСвойствСерий,
+ "Сведения",
+ РедактируютсяОбщиеРеквизитыСведения);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура УстановитьДоступностьНастройкиПолейРеквизитаДляКонтроля(СтрокаРеквизитаДляКонтроля, УсловияДоступности)
+
+ СтрокаРеквизитаДляКонтроля.ДоступностьЗаполнятьОбязательно = (Не УсловияДоступности.ТипРеквизитаБулево
+ И Не УсловияДоступности.ЗаполнятьОбязательно);
+
+ Если УсловияДоступности.ТолькоЗаполнятьОбязательно Тогда
+ Возврат;
+ КонецЕсли;
+
+ СтрокаРеквизитаДляКонтроля.ДоступностьУникален = (Не УсловияДоступности.ЭтоНеиспользуемыйДляКонтроляТип);
+ СтрокаРеквизитаДляКонтроля.ДоступностьОтображатьПриСоздании = (Не СтрокаРеквизитаДляКонтроля.ЗаполнятьОбязательно
+ И Не УсловияДоступности.ЗаполнятьОбязательно);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура НастроитьФорму()
+
+ ТолькоПросмотр = Не ЕстьПравоРедактирования;
+
+ ЗаполняемыйОбъект = Объект;
+ НоменклатураЛокализация.ДополнитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+ ВидимостьЭлементов = Справочники.Номенклатура.ИспользованиеЭлементов(ЗаполняемыйОбъект, Ложь, Ложь);
+ НоменклатураЛокализация.ВосстановитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ Для Каждого ЭлементВидимость Из ВидимостьЭлементов Цикл
+
+ Если Элементы.Найти(ЭлементВидимость.Ключ) <> Неопределено Тогда
+ Элементы[ЭлементВидимость.Ключ].Видимость = ЭлементВидимость.Значение;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ЗначенияРеквизитов = Справочники.ВидыНоменклатуры.ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностиУчета(КлючВидовПродукцииДоИзменения);
+ Если ЗначенияРеквизитов <> Неопределено Тогда
+ Для Каждого КлючЗначение Из ЗначенияРеквизитов Цикл
+ Если Элементы.Найти(КлючЗначение.Ключ) <> Неопределено Тогда
+ Элементы[КлючЗначение.Ключ].Доступность = Истина;
+ КонецЕсли;
+ КонецЦикла
+ КонецЕсли;
+
+ #Область ЗначенияФО
+
+ Если Не ИспользоватьНесколькоСкладов Тогда
+
+ Для каждого ДанныеСтроки Из Объект.ПолитикиУчетаСерий Цикл
+ Если ТипЗнч(ДанныеСтроки.Склад) = Тип("СправочникСсылка.Склады") Тогда
+ Склад = ДанныеСтроки.Склад;
+ ПолитикаУчетаСерий = ДанныеСтроки.ПолитикаУчетаСерий;
+ Прервать;
+ КонецЕсли;
+ КонецЦикла;
+
+ Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад);
+ КонецЕсли;
+
+ ИспользоватьДополнительныеРеквизитыИСведения = ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеРеквизитыИСведения");
+ ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач = ПолучитьФункциональнуюОпцию(
+ "ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач", Новый Структура("Склад", Склад));
+ ИспользоватьПродажуАгентскихУслуг = ПолучитьФункциональнуюОпцию("ИспользоватьПродажуАгентскихУслуг");
+ ИспользоватьТоварныеКатегории = ПолучитьФункциональнуюОпцию("ИспользоватьТоварныеКатегории");
+
+ ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
+ ИспользоватьСерииНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
+ КонтролироватьУникальность = ПолучитьФункциональнуюОпцию("КонтролироватьУникальностьНоменклатурыПоСочетаниюЗначенийРеквизитов");
+ ИспользоватьОрдерныеСклады = ПолучитьФункциональнуюОпцию("ИспользоватьОрдерныеСклады");
+ БазоваяВерсия = ПолучитьФункциональнуюОпцию("БазоваяВерсия");
+
+ #КонецОбласти
+
+ #Область НесколькоВидов
+ НесколькоВидовНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовНоменклатуры");
+
+ Элементы.СтраницаНастройкиПанелиБыстрогоОтбора.Видимость = НесколькоВидовНоменклатуры;
+ Элементы.Родитель.Видимость = НесколькоВидовНоменклатуры;
+ Элементы.Описание.Видимость = НесколькоВидовНоменклатуры;
+ Элементы.ТипНоменклатуры.Видимость = НесколькоВидовНоменклатуры;
+ Элементы.ПодменюПерейти.Видимость = НесколькоВидовНоменклатуры;
+ Элементы.ДекорацияОтступ.Видимость = НесколькоВидовНоменклатуры;
+ Элементы.ОсобенностьУчета.Видимость = НесколькоВидовНоменклатуры
+ И Перечисления.ОсобенностиУчетаНоменклатуры.ОднаИзОсобенностейВключена(); // Наличие возможности выбора при хотя бы в одном типе
+
+ #КонецОбласти
+
+ #Область ТипНоменклатуры
+ ЭтоТовар = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар);
+ ЭтоМногооборотнаяТара = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
+ ЭтоРабота = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Работа);
+ ЭтоУслуга = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга);
+ ЭтоНабор = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор);
+
+ Элементы.ТипНоменклатуры.Подсказка = Перечисления.ТипыНоменклатуры.ПодсказкаПоТипуНоменклатуры(Объект.ТипНоменклатуры);
+ ОднаИзОсобенностейВключена = Перечисления.ОсобенностиУчетаНоменклатуры.ОднаИзОсобенностейВключена(Объект.ТипНоменклатуры);
+ Если Не ЗначениеЗаполнено(Объект.ТипНоменклатуры) Тогда
+ ПодсказкаОсобенностиУчета = НСтр("ru = 'Заполняется после выбора типа номенклатуры'");
+ ИначеЕсли Не ОднаИзОсобенностейВключена И Не ЭтоУслуга Тогда
+ ПодсказкаОсобенностиУчета = НСтр("ru = 'Отсутствуют для заданного типа'");
+ ИначеЕсли Объект.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета Тогда
+ ПодсказкаОсобенностиУчета = НСтр("ru = 'Без особенности учета'");
+ Иначе
+ ПодсказкаОсобенностиУчета = Перечисления.ОсобенностиУчетаНоменклатуры.ПодсказкаПоОсобенностиУчетаНоменклатуры(Объект.ОсобенностьУчета);
+ КонецЕсли;
+ Элементы.ОсобенностьУчета.Подсказка = ПодсказкаОсобенностиУчета;
+
+ Элементы.ОсобенностьУчета.Доступность = ОднаИзОсобенностейВключена;
+
+ ИспользоватьХарактеристикиИзДругогоВида = (Объект.ИспользованиеХарактеристик
+ = ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры"));
+
+ #КонецОбласти
+
+ #Область ОформлениеУслуг
+ Элементы.ВариантОформленияПродажи.Видимость = (ЭтоТовар
+ И ПолучитьФункциональнуюОпцию("ИспользоватьАктыНаПередачуПрав")
+ И (Объект.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета
+ Или Не ЗначениеЗаполнено(Объект.ОсобенностьУчета)))
+ Или ЭтоУслуга
+ Или ЭтоРабота;
+
+ Элементы.ДекорацияПродажаОформляется.Видимость = Элементы.ВариантОформленияПродажи.Видимость;
+ Элементы.ДекорацияПродажаОформляетсяЗаглушка.Видимость = Элементы.ВариантОформленияПродажи.Видимость;
+
+ СписокВыбораВариантовОформления = Элементы.ВариантОформленияПродажи.СписокВыбора;
+ СписокВыбораВариантовОформления.Очистить();
+
+ СписокВыбораВариантовОформления.Добавить(Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг);
+ Если ЭтоУслуга Или ЭтоРабота Тогда
+ СписокВыбораВариантовОформления.Добавить(Перечисления.ВариантыОформленияПродажи.АктВыполненныхРабот);
+ КонецЕсли;
+
+ Если ПолучитьФункциональнуюОпцию("ИспользоватьАктыНаПередачуПрав")
+ И Не ЭтоМногооборотнаяТара Тогда
+ СписокВыбораВариантовОформления.Добавить(Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав);
+ КонецЕсли;
+ #КонецОбласти
+
+ #Область Набор
+ Элементы.ВариантРасчетаЦеныНабора.Видимость = ЭтоНабор;
+ Элементы.ВариантПредставленияНабораВПечатныхФормах.Видимость = ЭтоНабор;
+ #КонецОбласти
+
+ #Область ТоварныеКатегории
+ Элементы.ДекорацияТоварныеКатегории.Видимость = ИспользоватьТоварныеКатегории;
+ Элементы.НастройкаТоварныхКатегорий.Видимость = ИспользоватьТоварныеКатегории;
+ Элементы.ВладелецТоварныхКатегорий.Видимость = ИспользоватьТоварныеКатегории;
+ СформироватьНадписьПоВидуВладельцу("ТоварныхКатегорий");
+ #КонецОбласти
+
+ #Область Характеристики
+ Элементы.ИспользоватьХарактеристики.Видимость = ИспользоватьХарактеристикиНоменклатуры;
+ Элементы.ИспользованиеХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры;
+
+ Элементы.ИспользованиеХарактеристик.Доступность = Объект.ИспользоватьХарактеристики;
+
+ Элементы.РеквизитыБыстрогоОтбораХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
+ И Объект.ИспользоватьХарактеристики
+ И Не ИспользоватьХарактеристикиИзДругогоВида;
+ Элементы.ТаблицаДопРеквизитовХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
+ И Объект.ИспользоватьХарактеристики
+ И Не ИспользоватьХарактеристикиИзДругогоВида;
+ Элементы.ТаблицаДопСведенийХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
+ И Объект.ИспользоватьХарактеристики
+ И Не ИспользоватьХарактеристикиИзДругогоВида;
+ Элементы.ТаблицаДопСведенийХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
+ И Объект.ИспользоватьХарактеристики
+ И Не ИспользоватьХарактеристикиИзДругогоВида;
+ Элементы.ГруппаРеквизитыДляКонтроляХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
+ И Объект.ИспользоватьХарактеристики
+ И Не ИспользоватьХарактеристикиИзДругогоВида;
+ Элементы.ГруппаШаблоныНаименованийХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
+ И Объект.ИспользоватьХарактеристики
+ И Не ИспользоватьХарактеристикиИзДругогоВида;
+
+ Элементы.ДекорацияОтступШаблоныНаименованийХарактеристик.Видимость = Элементы.ГруппаШаблоныНаименованийХарактеристик.Видимость;
+ Элементы.ВладелецХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры;
+
+ Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик.Видимость = ИспользоватьХарактеристикиНоменклатуры
+ И Объект.ИспользоватьХарактеристики
+ И Не ИспользоватьХарактеристикиИзДругогоВида;
+ СформироватьНадписьПоВидуВладельцу("Характеристик");
+ #КонецОбласти
+
+ #Область Серии
+
+ ПараметрыОтбораПолитикУчетаСерий = НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий();
+ ЗаполнитьЗначенияСвойств(ПараметрыОтбораПолитикУчетаСерий, Объект);
+ ОтборПолитикУчетаСерий = НоменклатураСервер.ОтборПолитикУчетаСерийПоПараметрам(ПараметрыОтбораПолитикУчетаСерий);
+ ОбязателенУчетОстатковПоСериям = ОтборПолитикУчетаСерий.Свойство("УчитыватьОстаткиСерий")
+ И ОтборПолитикУчетаСерий.УчитыватьОстаткиСерий;
+
+ ВозможныеПолитикиУчетаСерий = Неопределено;
+ ОтборПоПолитике = Неопределено;
+ Если ОтборПолитикУчетаСерий.Свойство("ТипПолитики", ВозможныеПолитикиУчетаСерий) Тогда
+
+ Если ТипЗнч(ВозможныеПолитикиУчетаСерий) = Тип("Массив")
+ Или ТипЗнч(ВозможныеПолитикиУчетаСерий) = Тип("ФиксированныйМассив") Тогда
+
+ Если ВозможныеПолитикиУчетаСерий.Количество() = 1 Тогда
+ Если ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[0]) Тогда
+ ОтборПоПолитике = ВозможныеПолитикиУчетаСерий[0];
+ КонецЕсли;
+ ИначеЕсли ВозможныеПолитикиУчетаСерий.Количество() = 2 Тогда
+ Если ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[0])
+ И ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[1]) Тогда
+ ОтборПоПолитике = Неопределено;
+ ИначеЕсли ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[0]) Тогда
+ ОтборПоПолитике = ВозможныеПолитикиУчетаСерий[0];
+ ИначеЕсли ЗначениеЗаполнено(ВозможныеПолитикиУчетаСерий[1]) Тогда
+ ОтборПоПолитике = ВозможныеПолитикиУчетаСерий[1];
+ КонецЕсли;
+ КонецЕсли;
+
+ ИначеЕсли ТипЗнч(ВозможныеПолитикиУчетаСерий) = Тип("ПеречислениеСсылка.ТипыПолитикУказанияСерий") Тогда
+ ОтборПоПолитике = ВозможныеПолитикиУчетаСерий;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ РазрешеноИспользоватьСерии = (ЭтоТовар Или ЭтоМногооборотнаяТара)
+ И ИспользоватьСерииНоменклатуры
+ И (ОбязателенУчетОстатковПоСериям
+ И (ИспользоватьОрдерныеСклады
+ И ИспользоватьНесколькоСкладов
+ Или ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач)
+ Или Не ОбязателенУчетОстатковПоСериям);
+
+ Элементы.ИспользоватьСерии.Видимость = РазрешеноИспользоватьСерии;
+
+ Элементы.ВариантЗаданияНастроекСерий.Видимость = РазрешеноИспользоватьСерии;
+ Элементы.ВариантЗаданияНастроекСерий.Доступность = Объект.ИспользоватьСерии;
+
+ Элементы.НадписьНастройкаИспользованияСерий.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
+
+ Элементы.ВладелецСерий.Видимость = (ЭтоТовар Или ЭтоМногооборотнаяТара) И ИспользоватьСерииНоменклатуры;
+
+ ВидимостьПолитикиУчетаСерийСкладыПодразделения = Объект.ИспользоватьСерии
+ И РазрешеноИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ И (ИспользоватьНесколькоСкладов
+ Или ИспользоватьПроизводство);
+ ВидимостьПолитикиУчетаСерийОдинСклад = Объект.ИспользоватьСерии
+ И РазрешеноИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ И Не (ИспользоватьНесколькоСкладов
+ Или ИспользоватьПроизводство);
+
+ Элементы.НадписьПолитикаУчетаСерий2.Видимость = ВидимостьПолитикиУчетаСерийСкладыПодразделения;
+ Элементы.ПолитикаУчетаСерий2.Видимость = ВидимостьПолитикиУчетаСерийСкладыПодразделения;
+ Элементы.ПолитикаУчетаСерий2.АвтоОтметкаНезаполненного = ВидимостьПолитикиУчетаСерийСкладыПодразделения;
+
+ Элементы.ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий.Видимость = ВидимостьПолитикиУчетаСерийСкладыПодразделения;
+
+ Элементы.ГруппаНадписьПолитикаУчетаСерий.Видимость = ВидимостьПолитикиУчетаСерийОдинСклад;
+ Элементы.ПолитикаУчетаСерий.АвтоОтметкаНезаполненного = ВидимостьПолитикиУчетаСерийОдинСклад;
+
+ ИспользоватьПередачуНаХранение = ПолучитьФункциональнуюОпцию(
+ "ИспользоватьПередачуНаОтветственноеХранениеСПравомПродажи");
+ ИспользоватьНеотфактурованныеПоставки = ПолучитьФункциональнуюОпцию("ИспользоватьНеотфактурованныеПоставки");
+ ИспользоватьТоварыВПутиОтПоставщиков = ПолучитьФункциональнуюОпцию("ИспользоватьТоварыВПутиОтПоставщиков");
+
+ Если ЗначениеЗаполнено(ОтборПоПолитике) Тогда
+ // Формирования текста предупреждения по использованию справочных серий
+ ЕстьОтборПоТипуПолитикиОписание = Новый Массив;
+ Если ЗначениеЗаполнено(Объект.ОсобенностьУчета)
+ И Объект.ОсобенностьУчета <> Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета Тогда
+
+ ОтборПоОсобенностиУчетаОписание = Новый ФорматированнаяСтрока(НСтр("ru = 'Для вида номенклатуры с особенностью учета ""%ОсобенностьУчета%"" возможно использование'") + Символы.НПП,
+ ,
+ ЦветаСтиля.ПоясняющийТекст);
+ ОтборПоОсобенностиУчетаОписание = СтрЗаменить(ОтборПоОсобенностиУчетаОписание, "%ОсобенностьУчета%", Объект.ОсобенностьУчета);
+ ЕстьОтборПоТипуПолитикиОписание.Добавить(ОтборПоОсобенностиУчетаОписание);
+ ИначеЕсли Объект.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда
+ ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
+ НСтр("ru = 'Для серий, идентифицирующих экземпляр товара, возможно использование'") + Символы.НПП,
+ ,
+ ЦветаСтиля.ПоясняющийТекст));
+ Иначе
+ ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
+ НСтр("ru = 'Для этого вида номенклатуры возможно использование'") + Символы.НПП,
+ ,
+ ЦветаСтиля.ПоясняющийТекст));
+ КонецЕсли;
+
+ ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
+ НСтр("ru = 'только'") + Символы.НПП,
+ Новый Шрифт(, , Истина),
+ ЦветаСтиля.ПоясняющийОшибкуТекст));
+ ОтборПоТипуПолитикиОписание = НСтр("ru = 'политики учета серий с типом ""%ТипПолитикиУчетаСерий%""'");
+ ОтборПоТипуПолитикиОписание = СтрЗаменить(ОтборПоТипуПолитикиОписание, "%ТипПолитикиУчетаСерий%", Строка(ОтборПоПолитике));
+ ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
+ ОтборПоТипуПолитикиОписание,
+ ,
+ ЦветаСтиля.ПоясняющийТекст));
+
+ ОписанияОпераций = Новый Массив;
+
+ Если ИспользоватьПередачуНаХранение Тогда
+ ОписанияОпераций.Добавить(НСтр("ru = '""Учет серий в переданных на хранение товарах""'"));
+ КонецЕсли;
+
+
+ Если ИспользоватьТоварыВПутиОтПоставщиков Тогда
+ ОписанияОпераций.Добавить(НСтр("ru = '""Учет товаров в пути от поставщика по сериям""'"));
+ КонецЕсли;
+
+ Если ИспользоватьНеотфактурованныеПоставки Тогда
+ ОписанияОпераций.Добавить(НСтр("ru = '""Учет серий в неотфактурованных поставках товаров""'"));
+ КонецЕсли;
+
+ ТекстВключенныхОпций = ?(ОписанияОпераций.Количество() = 0, "",
+ ?(ОписанияОпераций.Количество() > 1, НСтр("ru = 'со снятыми флагами'"),
+ НСтр("ru = 'со снятым флагом'")));
+ ТекстВключенныхОпций = ?(ЗначениеЗаполнено(ТекстВключенныхОпций),
+ ТекстВключенныхОпций + Символы.НПП + СтрСоединить(ОписанияОпераций, "," + Символы.НПП) + ".",
+ "");
+
+ ЕстьОтборПоТипуПолитикиОписание.Добавить(Новый ФорматированнаяСтрока(
+ ?(ЗначениеЗаполнено(ТекстВключенныхОпций), Символы.НПП + ТекстВключенныхОпций, "."),
+ ,
+ ЦветаСтиля.ПоясняющийТекст));
+
+ Элементы.НадписьЕстьОтборПоТипуПолитики.Заголовок = Новый ФорматированнаяСтрока(ЕстьОтборПоТипуПолитикиОписание);
+
+ Элементы.НадписьЕстьОтборПоТипуПолитики.Видимость =
+ ЗначениеЗаполнено(ОтборПоПолитике)
+ И Объект.ИспользоватьСерии
+ И РазрешеноИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
+ Иначе
+ Элементы.НадписьЕстьОтборПоТипуПолитики.Видимость = Ложь;
+ КонецЕсли;
+
+ ЕстьОтборПолитикиПоУчетуОстатковПоСериям = ИспользоватьСерииНоменклатуры
+ И ОбязателенУчетОстатковПоСериям
+ И (Объект.ИспользоватьСерии
+ Или Не ИспользоватьОрдерныеСклады)
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
+
+ Элементы.НадписьОтборПолитикиПоУчетуОстатковПоСериямОдинСкладБезОрдерности.Видимость = ЕстьОтборПолитикиПоУчетуОстатковПоСериям
+ И Не ИспользоватьНесколькоСкладов
+ И Не ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач
+ И Не БазоваяВерсия;
+ Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямНетОрдерныхСкладов.Видимость = ЕстьОтборПолитикиПоУчетуОстатковПоСериям
+ И ИспользоватьНесколькоСкладов
+ И Не ИспользоватьОрдерныеСклады
+ И Не БазоваяВерсия;
+ Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямЕстьОрдерныеСклады.Видимость = ЕстьОтборПолитикиПоУчетуОстатковПоСериям
+ И Не Элементы.НадписьОтборПолитикиПоУчетуОстатковПоСериямОдинСкладБезОрдерности.Видимость
+ И Не Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямНетОрдерныхСкладов.Видимость;
+
+ Элементы.НадписьИспользованиеПолитикиУчетаСерийПриВыключенномСрокеГодности.Видимость =
+ НЕ Объект.ИспользоватьСрокГодностиСерии
+ И Объект.ИспользоватьСерии
+ И РазрешеноИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ И Объект.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ПартияТоваров;
+
+ Элементы.НадписьПодсказкаПолитикиУчетаОтключеныОрдерныеСклады.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И ИспользоватьНесколькоСкладов
+ И Не ИспользоватьОрдерныеСклады
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ И Не ОбязателенУчетОстатковПоСериям
+ И Не БазоваяВерсия;
+
+ Элементы.НадписьПодсказкаПолитикиУчетаСерийОдинСклад.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И Не ИспользоватьНесколькоСкладов
+ И Не ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ И Не ОбязателенУчетОстатковПоСериям
+ И Не БазоваяВерсия;
+
+ Элементы.ГруппаПолитикиУчетаСерий.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И (ИспользоватьНесколькоСкладов
+ Или ИспользоватьПроизводство)
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ И ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий;
+
+ ВТЧУказываютсяСкладыИПодразделения = ИспользоватьНесколькоСкладов И ИспользоватьПроизводство;
+
+ Элементы.ПолитикиУчетаСерийДобавитьСкладВПолитикиУчетаСерий.Видимость = ВТЧУказываютсяСкладыИПодразделения;
+ Элементы.ПолитикиУчетаСерийДобавитьПодразделениеВПолитикиУчетаСерий.Видимость = ВТЧУказываютсяСкладыИПодразделения;
+
+ Элементы.ПолитикиУчетаСерийДобавить.Видимость = Не ВТЧУказываютсяСкладыИПодразделения;
+
+ Если ВТЧУказываютсяСкладыИПодразделения Тогда
+ ПолитикиУчетаСерийСкладЗаголовок = НСтр("ru = 'Склад или подразделение'");
+ ПолитикиУчетаСерийСкладПодсказка = НСтр("ru = 'Склад или подразделение, в котором ведется учет по сериям'");
+ ОтборСтрокТЧПолитикаУчетаСерий = Новый ФиксированнаяСтруктура("СоответствуетПолитикеПоУмолчанию", Ложь);
+ ПолитикиУчетаСерийСкладОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Склады,СправочникСсылка.СтруктураПредприятия");
+ ПолитикаУчетаСерийПодсказка
+ = НСтр("ru = 'Будет использована как общая политика для всех складов и производственных подразделений: будет устанавливаться по умолчанию для новых складов и производственных подразделений.'");
+ ИначеЕсли ИспользоватьНесколькоСкладов Тогда
+ ПолитикиУчетаСерийСкладЗаголовок = НСтр("ru = 'Склад'");
+ ПолитикиУчетаСерийСкладПодсказка = НСтр("ru = 'Склад, в котором ведется учет по сериям'");
+ ПолитикиУчетаСерийСкладОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Склады");
+ ОтборСтрокТЧПолитикаУчетаСерий = Новый ФиксированнаяСтруктура("СоответствуетПолитикеПоУмолчанию, ЭтоПолитикаДляСклада", Ложь, Истина);
+ ПолитикаУчетаСерийПодсказка
+ = НСтр("ru = 'Будет использована как общая политика для всех складов; будет устанавливаться по умолчанию для новых складов.'");
+ Иначе
+ ПолитикиУчетаСерийСкладЗаголовок = НСтр("ru = 'Подразделение'");
+ ПолитикиУчетаСерийСкладПодсказка = НСтр("ru = 'Подразделение, в котором ведется учет по сериям'");
+ ПолитикиУчетаСерийСкладОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия");
+ ОтборСтрокТЧПолитикаУчетаСерий = Новый ФиксированнаяСтруктура("СоответствуетПолитикеПоУмолчанию, ЭтоПолитикаДляСклада", Ложь, Ложь);
+ ПолитикаУчетаСерийПодсказка
+ = НСтр("ru = 'Будет использована как общая политика для всех производственных подразделений; будет устанавливаться по умолчанию для новых производственных подразделений.'");
+ КонецЕсли;
+ Элементы.ПолитикиУчетаСерийСклад.Заголовок = ПолитикиУчетаСерийСкладЗаголовок;
+ Элементы.ПолитикиУчетаСерийСклад.Подсказка = ПолитикиУчетаСерийСкладПодсказка;
+ Элементы.ПолитикиУчетаСерийСклад.ОграничениеТипа = ПолитикиУчетаСерийСкладОграничениеТипа;
+ Элементы.ПолитикиУчетаСерий.ОтборСтрок = ОтборСтрокТЧПолитикаУчетаСерий;
+ Элементы.НадписьПолитикаУчетаСерий2.Подсказка = ПолитикаУчетаСерийПодсказка;
+
+ Элементы.ГруппаРеквизитыДляКонтроляСерий.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
+
+ Элементы.ГруппаШаблоныНаименованийСерий.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
+
+ Элементы.ДекорацияОтступШаблоныНаименованийСерий.Видимость = Элементы.ГруппаШаблоныНаименованийСерий.Видимость;
+
+ Элементы.ТаблицаДопРеквизитовСерий.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
+
+ Элементы.ТаблицаДопСведенийСерий.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
+
+ Элементы.ШаблонЭтикеткиСерии.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии;
+
+ Элементы.ПоказатьРеквизитыДляКонтроляСерий.Видимость = РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
+
+ Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры.Видимость = (РазрешеноИспользоватьСерии
+ И Объект.ИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры)
+ Или (ИспользоватьХарактеристикиНоменклатуры
+ И Объект.ИспользоватьХарактеристики
+ И Не ИспользоватьХарактеристикиИзДругогоВида);
+
+ СформироватьНадписьПоВидуВладельцу("Серий");
+
+ #Область НадписьНастройкаИспользованияСерий
+
+ Если Элементы.НадписьНастройкаИспользованияСерий.Видимость Тогда
+
+ НужноНастраиватьРеквизитыСерий = Не Элементы.ИспользоватьСерии.ТолькоПросмотр;
+
+ Элементы.СворачиваемаяГруппаНастройкиСоставаРеквизитовСерий.Видимость = НужноНастраиватьРеквизитыСерий;
+
+ МассивТекстов = Новый Массив;
+
+ МассивТекстов.Добавить(НСтр("ru = 'Серия идентифицирует:'"));
+ МассивТекстов.Добавить(Символы.НПП);
+ МассивТекстов.Добавить(Новый ФорматированнаяСтрока(Строка(Объект.НастройкаИспользованияСерий),
+ Новый Шрифт(,,Истина)));
+
+ МассивТекстов.Добавить(" (");
+
+ МассивОписанияРеквизитов = Новый Массив;
+
+ НастройкиИспользованияСерий = Справочники.ВидыНоменклатуры.НастройкиИспользованияСерий(Объект);
+ Для Каждого Описание Из НастройкиИспользованияСерий.ОписанияИспользованияРеквизитовСерии Цикл
+ Если Описание.ИмяНастройки = "ИспользоватьRFIDМеткиСерии" Тогда
+
+ Если Описание.ИмяРеквизита = "RFIDTID"
+ И Описание.Использование Тогда
+ МассивОписанияРеквизитов.Добавить(НСтр("ru = 'RFID-метка'"));
+ КонецЕсли;
+
+ ИначеЕсли Описание.Использование Тогда
+
+ Если Не ПустаяСтрока(Описание.ПредставлениеФорматнойСтрокиВЗаголовке) Тогда
+
+ ПредставлениеРеквизита = НСтр("ru = '%ПредставлениеРеквизита% (%ТочностьУказания%)'");
+ ПредставлениеРеквизита = СтрЗаменить(ПредставлениеРеквизита, "%ПредставлениеРеквизита%", Описание.ПредставлениеРеквизита);
+ ПредставлениеРеквизита = СтрЗаменить(ПредставлениеРеквизита, "%ТочностьУказания%", Описание.ПредставлениеФорматнойСтрокиВЗаголовке);
+
+ Иначе
+ ПредставлениеРеквизита = Описание.ПредставлениеРеквизита;
+
+ КонецЕсли;
+ МассивОписанияРеквизитов.Добавить(ПредставлениеРеквизита);
+
+ КонецЕсли;
+
+ Если НужноНастраиватьРеквизитыСерий
+ И Не ПустаяСтрока(Описание.ОсобенностиУчета) Тогда
+
+ ИменаОсобенностей = СтрРазделить(Описание.ОсобенностиУчета, ",");
+
+ ВидимостьНастройкиРеквизитаСерии = Ложь;
+
+ Для Каждого ИмяОсобенности Из ИменаОсобенностей Цикл
+
+ Если Объект.ОсобенностьУчета = ПредопределенноеЗначение("Перечисление.ОсобенностиУчетаНоменклатуры." + ИмяОсобенности) Тогда
+ ВидимостьНастройкиРеквизитаСерии = Истина;
+ Прервать;
+ КонецЕсли;
+
+ КонецЦикла;
+ Элементы[Описание.ИмяНастройки].Видимость = ВидимостьНастройкиРеквизитаСерии;
+ Иначе
+ Элементы[Описание.ИмяНастройки].Видимость = Истина;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ МассивТекстов.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
+ МассивТекстов.Добавить(") ");
+
+ Если НастройкиИспользованияСерий.АвтоматическиГенерироватьСерии Тогда
+ МассивТекстов.Добавить(", ");
+ МассивТекстов.Добавить(НСтр("ru = 'Возможна автогенерация'"));
+ МассивТекстов.Добавить(" ");
+ КонецЕсли;
+
+ Элементы.НадписьНастройкаИспользованияСерий.Заголовок = Новый ФорматированнаяСтрока(МассивТекстов);
+
+ Элементы.АвтоматическиГенерироватьСерии.Видимость =
+ Справочники.ВидыНоменклатуры.ПредусмотренаАвтоматическаяГенерацияСерий(НастройкиИспользованияСерий);
+ Элементы.ИспользоватьНомерСерии.Доступность = Не Объект.АвтоматическиГенерироватьСерии;
+
+ Элементы.ТочностьУказанияСрокаГодностиСерии.Доступность =
+ Объект.ИспользоватьСрокГодностиСерии Или Объект.ИспользоватьДатуПроизводстваСерии;
+
+ Элементы.ИспользоватьRFIDМеткиСерии.Доступность =
+ Объект.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара;
+ Иначе
+
+ Элементы.СворачиваемаяГруппаНастройкиСоставаРеквизитовСерий.Видимость = Ложь;
+
+ КонецЕсли;
+
+ #КонецОбласти
+
+ #КонецОбласти
+
+ #Область ЕдиницаИзмерения
+ Если ЭтоУслуга
+ Или ЭтоРабота
+ Или ЭтоНабор Тогда
+ ЗаголовокЕдиницыИзмерения = НСтр("ru = 'Ед. измерения'");
+ ЗаголовокГруппыЕдиницаИзмерения = НСтр("ru = 'Единицы измерения'");
+ Иначе
+ ЗаголовокЕдиницыИзмерения = НСтр("ru = 'Ед. хранения'");
+ ЗаголовокГруппыЕдиницаИзмерения = НСтр("ru = 'Единицы измерения и условия хранения'");
+ КонецЕсли;
+ Элементы.ЕдиницаИзмерения.Заголовок = ЗаголовокЕдиницыИзмерения;
+ Элементы.ГруппаЕдиницыИзмеренияИУсловияХранения.Заголовок = ЗаголовокГруппыЕдиницаИзмерения;
+
+ Элементы.ЕдиницаИзмерения.Доступность = (ИспользованиеУпаковок = "ИндивидуальныйНабор"
+ И Объект.ИспользоватьУпаковки)
+ Или Не Объект.ИспользоватьУпаковки;
+
+ #КонецОбласти
+
+ #Область ШаблоныНаименованийИНастройкаРеквизитовНоменклатуры
+ Элементы.ГруппаНастройкиСозданияПереключатели.Видимость = (Объект.ИспользоватьСерии
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры)
+ Или (Объект.ИспользоватьХарактеристики
+ И Не ИспользоватьХарактеристикиИзДругогоВида);
+
+ Если Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница <> Элементы.ГруппаРеквизитыДляКонтроляНоменклатуры
+ И (Не Объект.ИспользоватьСерии
+ И Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляСерий
+ Или Не Объект.ИспользоватьХарактеристики
+ И Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляХарактеристик) Тогда
+
+ Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляНоменклатуры;
+ УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры, ЦветТекстаФормы);
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик);
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий);
+
+ КонецЕсли;
+
+ Если Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляНоменклатуры Тогда
+ УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры, ЦветТекстаФормы);
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик);
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий);
+ КонецЕсли;
+
+ НастроитьПоШаблонуНаименования("ШаблонРабочегоНаименованияНоменклатуры");
+ НастроитьПоШаблонуНаименования("ШаблонНаименованияДляПечатиНоменклатуры");
+ НастроитьПоШаблонуНаименования("ШаблонРабочегоНаименованияХарактеристики");
+ НастроитьПоШаблонуНаименования("ШаблонНаименованияДляПечатиХарактеристики");
+ НастроитьПоШаблонуНаименования("ШаблонРабочегоНаименованияСерии");
+
+ Элементы.РедактироватьШаблонНаименованияДляПечатиНоменклатуры.Доступность = Не ЭтотОбъект.ТолькоПросмотр;
+ Элементы.РедактироватьШаблонНаименованияДляПечатиХарактеристики.Доступность = Не ЭтотОбъект.ТолькоПросмотр;
+ Элементы.РедактироватьШаблонРабочегоНаименованияНоменклатуры.Доступность = Не ЭтотОбъект.ТолькоПросмотр;
+ Элементы.РедактироватьШаблонРабочегоНаименованияХарактеристики.Доступность = Не ЭтотОбъект.ТолькоПросмотр;
+ Элементы.РедактироватьШаблонРабочегоНаименованияСерии.Доступность = Не ЭтотОбъект.ТолькоПросмотр;
+
+ Если ИспользоватьИндивидуальноеНаименование = "ИспользоватьИндивидуальноеНаименование" Тогда
+ Элементы.НаименованиеДляПечати.Доступность = Истина;
+ Иначе
+ Элементы.НаименованиеДляПечати.Доступность = Ложь;
+ КонецЕсли;
+ #КонецОбласти
+
+ #Область ДопРеквизитыИДопСведения
+ Элементы.СтраницаДопРеквизиты.Видимость = ИспользоватьДополнительныеРеквизитыИСведения;
+ Элементы.СтраницаДопСведения.Видимость = ИспользоватьДополнительныеРеквизитыИСведения;
+
+ ЕстьПравоДобавленияРеквизитов = ПравоДоступа("Добавление", Метаданные.ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения);
+
+ Элементы.НоменклатураГруппаСоздатьРеквизиты.Видимость = ЕстьПравоДобавленияРеквизитов;
+ Элементы.ХарактеристикиГруппаСоздатьРеквизиты.Видимость = ЕстьПравоДобавленияРеквизитов;
+ Элементы.СерииГруппаСоздатьРеквизиты.Видимость = ЕстьПравоДобавленияРеквизитов;
+ Элементы.НоменклатураГруппаСоздатьСведения.Видимость = ЕстьПравоДобавленияРеквизитов;
+ Элементы.ХарактеристикиГруппаСоздатьСведения.Видимость = ЕстьПравоДобавленияРеквизитов;
+ Элементы.СерииГруппаСоздатьСведения.Видимость = ЕстьПравоДобавленияРеквизитов;
+ #КонецОбласти
+
+ #Область КонтролироватьУникальность
+
+ Элементы.РеквизитыДляКонтроляНоменклатурыДляРазмераЯчейкиУникален.Видимость = КонтролироватьУникальность;
+ Элементы.РеквизитыДляКонтроляХарактеристикДляРазмераЯчейкиУникален.Видимость = КонтролироватьУникальность;
+
+ #КонецОбласти
+
+ #Область Ценообразование
+
+ НастроитьЗакладкуНастройкиЦенообразования();
+
+ #КонецОбласти
+
+ ЗначенияРеквизитов = Справочники.ВидыНоменклатуры.ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностиУчета(КлючВидовПродукции);
+ Если ЗначенияРеквизитов <> Неопределено Тогда
+ Для Каждого КлючЗначение Из ЗначенияРеквизитов Цикл
+ Если Элементы.Найти(КлючЗначение.Ключ) <> Неопределено Тогда
+ Элементы[КлючЗначение.Ключ].Доступность = Ложь;
+ КонецЕсли;
+ КонецЦикла
+ КонецЕсли;
+
+ НастроитьПодсказкуПоляКлассификатора(Элементы.КодТНВЭД.Имя, Объект.КодТНВЭД);
+ НастроитьФормуЛокализация(ВидимостьЭлементов);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура НастроитьПоШаблонуНаименования(ИмяШаблонаНаименования)
+
+ ИмяРеквизитаЗапретРедактированияНаименования = ИмяРеквизитаЗапретРедактированияНаименования(ИмяШаблонаНаименования);
+
+ Если ИмяРеквизитаЗапретРедактированияНаименования <> "" Тогда
+ ПолеФормы = Элементы[ИмяРеквизитаЗапретРедактированияНаименования]; // ПолеФормы
+ ПолеФормы.Доступность = Не ПустаяСтрока(Объект[ИмяШаблонаНаименования]);
+ ПолеФормы.Видимость = Не МультиязычностьВключена Или Объект[ИмяРеквизитаЗапретРедактированияНаименования];
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриЧтенииСозданииНаСервере()
+
+ //++ Локализация
+ ЗаполнитьКлючВидовПродукции();
+ ИнтеграцияИС.ИнициализироватьНастройкиФормыДляУстановкиКлючаВидовПродукции(ЭтотОбъект);
+ ИнтеграцияИС.ЗаполнитьДанныеПоКлючуВидовПродукции(ЭтотОбъект);
+ КлючВидовПродукцииДоИзменения = КлючВидовПродукции;
+ НастроитьДоступныеРеквизитыСерий();
+ //-- Локализация
+
+ ЕстьПравоРедактирования = НЕ ЗначениеЗаполнено(Объект.Ссылка)
+ Или Справочники.ГруппыДоступаНоменклатуры.ЕстьПравоИзменения(Объект);
+
+ ОсобенностьУчетаДоИзменения = Объект.ОсобенностьУчета;
+
+ ИспользоватьПроизводство = Справочники.ВидыНоменклатуры.ИспользоватьПроизводство();
+ ИспользоватьНесколькоСкладов = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоСкладов");
+ ИспользуетсяЦенообразование25 = Параметры.Свойство("ИспользуетсяЦенообразование25") Или ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25();
+ ЕстьСкладыБезОрдернойСхемыПриОтраженииИзлишковНедостач = СкладыСервер.ЕстьСкладыБезОрдернойСхемыПриОтраженииИзлишковНедостач();
+ ЕстьСкладыОрдерныеНаОтгрузку = СкладыСервер.ЕстьОрдерныйНаОтгрузкуСклад();
+ ЕстьСкладыОрдерныеНаПоступление = СкладыСервер.ЕстьОрдерныйНаПоступлениеСклад();
+
+ // Подсистема запрета редактирования ключевых реквизитов объектов
+ ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
+
+ // Сбросить флаг редактирования общих дополнительных реквизитов (сведений).
+ РедактируютсяОбщиеРеквизитыСведения = Ложь;
+
+ ОбщееНаименованиеДляПечати = Константы.НаименованиеДляПечатиВидовНоменклатуры.Получить();
+ ОбщееНаименованиеДляПечати = ?(ЗначениеЗаполнено(ОбщееНаименованиеДляПечати), ОбщееНаименованиеДляПечати, Нстр("ru = '<не указано>'"));
+
+ ПостроитьДеревоОператоров();
+
+ ЗаполняемыйОбъект = Объект;
+ НоменклатураЛокализация.ДополнитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыДляКонтроля(ЗаполняемыйОбъект, "Номенклатура");
+ Справочники.ВидыНоменклатуры.ЗаполнитьДопРеквизитыДляКонтроляИОтбора(ЗаполняемыйОбъект, "Номенклатура");
+
+ Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыДляКонтроля(ЗаполняемыйОбъект, "ХарактеристикиНоменклатуры");
+ Справочники.ВидыНоменклатуры.ЗаполнитьДопРеквизитыДляКонтроляИОтбора(ЗаполняемыйОбъект, "ХарактеристикиНоменклатуры");
+
+ Справочники.ВидыНоменклатуры.ЗаполнитьДопРеквизитыДляКонтроляИОтбора(ЗаполняемыйОбъект, "СерииНоменклатуры");
+
+ НоменклатураЛокализация.ВосстановитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
+
+ СведенияОбЯзыках = МультиязычностьСервер.СведенияОЯзыках();
+
+ МультиязычностьВключена = Ложь;
+
+ Для Каждого ДопЯзык Из СведенияОбЯзыках.Используется Цикл
+ Если ДопЯзык.Значение Тогда
+ МультиязычностьВключена = Истина;
+ Прервать;
+ КонецЕсли;
+ КонецЦикла;
+
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЕдиницаИзмеренияПриИзмененииСервер()
+
+ Если Объект.КоэффициентЕдиницыДляОтчетов = 1
+ Или Объект.КоэффициентЕдиницыДляОтчетов = 0 Тогда
+ Объект.ЕдиницаДляОтчетов = Объект.ЕдиницаИзмерения;
+ КонецЕсли;
+
+ Если Объект.ЕдиницаДляОтчетов = Объект.ЕдиницаИзмерения Тогда
+ Объект.КоэффициентЕдиницыДляОтчетов = 1;
+ КонецЕсли;
+
+ ТипЕдиницы = "";
+
+ ЭтоМернаяЕдиница = Справочники.УпаковкиЕдиницыИзмерения.ЭтоМернаяЕдиница(Объект.ЕдиницаИзмерения, ТипЕдиницы);
+
+ Если ЭтоМернаяЕдиница Тогда
+ Объект.ПоставляетсяВМногооборотнойТаре = Ложь;
+ КонецЕсли;
+
+ НастроитьФорму();
+
+КонецПроцедуры
+
+// Обработчик команды, создаваемой механизмом запрета редактирования ключевых реквизитов.
+//
+&НаКлиенте
+Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)
+
+ ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.РазблокированиеРеквизитов",,,,,,
+ Новый ОписаниеОповещения("Подключаемый_РазрешитьРедактированиеРеквизитовОбъектаЗавершение", ЭтотОбъект),
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъектаЗавершение(Результат, ДополнительныеПараметры) Экспорт
+
+ Если ТипЗнч(Результат) = Тип("Массив") И Результат.Количество() > 0 Тогда
+
+ ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы(ЭтотОбъект, Результат);
+ НастроитьФорму();
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовНаСервере()
+
+ Если ПустаяСтрока(Объект.ШаблонНаименованияДляПечатиНоменклатуры)
+ И ПустаяСтрока(Объект.ШаблонРабочегоНаименованияНоменклатуры)
+ И Объект.РеквизитыБыстрогоОтбораНоменклатуры.Количество() = 0 Тогда
+ ТекстПредупреждения = НСтр("ru = 'Настройки проверки заполнения реквизитов номенклатуры не изменены: не заданы ни шаблоны наименований номенклатуры, ни реквизиты, отображаемые в панели быстрого отбора.'");
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);
+ Иначе
+ ВключитьПроверкуЗаполненияДляРеквизитовНоменклатурыНаСервере();
+ КонецЕсли;
+
+ Если Объект.ИспользоватьХарактеристики Тогда
+ Если ПустаяСтрока(Объект.ШаблонНаименованияДляПечатиХарактеристики)
+ И ПустаяСтрока(Объект.ШаблонРабочегоНаименованияХарактеристики)
+ И Объект.РеквизитыБыстрогоОтбораХарактеристик.Количество() = 0 Тогда
+ ТекстПредупреждения = НСтр("ru = 'Настройки проверки заполнения реквизитов характеристик не изменены: не заданы ни шаблоны наименований характеристик, ни реквизиты, отображаемые в панели быстрого отбора.'");
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);;
+ Иначе
+ ВключитьПроверкуЗаполненияДляРеквизитовХарактеристикНаСервере();
+ КонецЕсли;
+ КонецЕсли;
+
+ Если Объект.ИспользоватьСерии Тогда
+ Если ПустаяСтрока(Объект.ШаблонРабочегоНаименованияСерии) Тогда
+ ТекстПредупреждения = НСтр("ru = 'Настройки проверки заполнения серий не изменены: не задан шаблон наименования серий.'");
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения);;
+ Иначе
+ ВключитьПроверкуЗаполненияДляРеквизитовСерийНаСервере();
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовНоменклатурыНаСервере()
+
+ ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновНоменклатурыНаСервере();
+ ВключитьПроверкуЗаполненияДляРеквизитовБыстрогоОтбораНоменклатурыНаСервере();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаНоменклатурыНаСервере(ШаблонНаименования)
+
+ Если Не ЗначениеЗаполнено(ШаблонНаименования) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ДополнительныеРеквизиты = Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, "Номенклатура");
+
+ ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
+
+ Отбор = Новый Структура("ИмяРеквизита, Свойство, ЭтоДопРеквизит");
+
+ ОперандыТекстовойФормулы = РаботаСФормуламиКлиентСервер.ОперандыТекстовойФормулы(ШаблонНаименования);
+
+ Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляНоменклатуры Цикл
+
+ ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
+
+ РеквизитИспользуетсяВФормуле = (ОперандыТекстовойФормулы.Найти(ИмяРеквизита) <> Неопределено);
+
+ Если Не РеквизитИспользуетсяВФормуле Тогда
+ Продолжить;
+ КонецЕсли;
+
+ // Если тип реквизита - Булево, то не включать для него контроль заполнения.
+ Если СтрокаТЧ.ЭтоДопРеквизит Тогда
+
+ ЗаполнитьЗначенияСвойств(Отбор, СтрокаТЧ);
+
+ НайденныеСтроки = ДополнительныеРеквизиты.НайтиСтроки(Отбор);
+
+ Если НайденныеСтроки.Количество() = 0 Тогда
+ Продолжить;
+ КонецЕсли;
+
+ СтрокаДопРеквизитовСведений = НайденныеСтроки[0];
+
+ ТипЗначенияРеквизита = СтрокаДопРеквизитовСведений.Тип;
+
+ Иначе
+
+ Реквизит = Метаданные.Справочники.Номенклатура.Реквизиты.Найти(ИмяРеквизита);
+
+ Если Реквизит = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ТипЗначенияРеквизита = Реквизит.Тип;
+
+ КонецЕсли;
+
+ Если ТипЗначенияРеквизита = ОписаниеТиповБулево Тогда
+ Продолжить;
+ КонецЕсли;
+
+ СтрокаТЧ.ЗаполнятьОбязательно = Истина;
+ СтрокаТЧ.ОтображатьПриСоздании = Истина;
+ СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
+
+ Модифицированность = Истина;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновНоменклатурыНаСервере()
+
+ ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаНоменклатурыНаСервере(Объект.ШаблонРабочегоНаименованияНоменклатуры);
+ ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаНоменклатурыНаСервере(Объект.ШаблонНаименованияДляПечатиНоменклатуры);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовХарактеристикНаСервере()
+
+ ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновХарактеристикНаСервере();
+ ВключитьПроверкуЗаполненияДляРеквизитовБыстрогоОтбораХарактеристикНаСервере();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовСерийНаСервере()
+
+ ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновСерийНаСервере();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаХарактеристикНаСервере(ШаблонНаименованияХарактеристики)
+
+ Если Не ЗначениеЗаполнено(ШаблонНаименованияХарактеристики) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ДополнительныеРеквизиты = Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, "ХарактеристикиНоменклатуры");
+
+ ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
+
+ Отбор = Новый Структура("ИмяРеквизита, Свойство, ЭтоДопРеквизит");
+
+ ОперандыТекстовойФормулы = РаботаСФормуламиКлиентСервер.ОперандыТекстовойФормулы(ШаблонНаименованияХарактеристики);
+
+ Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляХарактеристик Цикл
+
+ ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
+
+ РеквизитИспользуетсяВФормуле = (ОперандыТекстовойФормулы.Найти(СтрокаТЧ.ИмяРеквизита) <> Неопределено);
+
+ Если Не РеквизитИспользуетсяВФормуле Тогда
+ Продолжить;
+ КонецЕсли;
+
+ // Если тип реквизита - Булево, то не включать для него контроль заполнения.
+ Если СтрокаТЧ.ЭтоДопРеквизит Тогда
+
+ ЗаполнитьЗначенияСвойств(Отбор, СтрокаТЧ);
+
+ НайденныеСтроки = ДополнительныеРеквизиты.НайтиСтроки(Отбор);
+
+ Если НайденныеСтроки.Количество() = 0 Тогда
+ Продолжить;
+ КонецЕсли;
+
+ СтрокаДопРеквизитовСведений = НайденныеСтроки[0];
+
+ ТипЗначенияРеквизита = СтрокаДопРеквизитовСведений.Тип;
+
+ Иначе
+
+ Реквизит = Метаданные.Справочники.ХарактеристикиНоменклатуры.Реквизиты.Найти(ИмяРеквизита);
+
+ Если Реквизит = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ТипЗначенияРеквизита = Реквизит.Тип;
+
+ КонецЕсли;
+
+ Если ТипЗначенияРеквизита = ОписаниеТиповБулево Тогда
+ Продолжить;
+ КонецЕсли;
+
+ СтрокаТЧ.ЗаполнятьОбязательно = Истина;
+ СтрокаТЧ.ОтображатьПриСоздании = Истина;
+ СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
+
+ Модифицированность = Истина;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаСерийНаСервере(ШаблонНаименованияСерии)
+
+ Если Не ЗначениеЗаполнено(ШаблонНаименованияСерии) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ДополнительныеРеквизиты = Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, "СерииНоменклатуры");
+
+ ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
+
+ Отбор = Новый Структура("ИмяРеквизита, Свойство, ЭтоДопРеквизит");
+
+ ОперандыТекстовойФормулы = РаботаСФормуламиКлиентСервер.ОперандыТекстовойФормулы(ШаблонНаименованияСерии);
+
+ Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляСерий Цикл
+
+ ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
+
+ РеквизитИспользуетсяВФормуле = (ОперандыТекстовойФормулы.Найти(СтрокаТЧ.ИмяРеквизита) <> Неопределено);
+
+ Если Не РеквизитИспользуетсяВФормуле Тогда
+ Продолжить;
+ КонецЕсли;
+
+ // Если тип реквизита - Булево, то не включать для него контроль заполнения.
+ Если СтрокаТЧ.ЭтоДопРеквизит Тогда
+
+ ЗаполнитьЗначенияСвойств(Отбор, СтрокаТЧ);
+
+ НайденныеСтроки = ДополнительныеРеквизиты.НайтиСтроки(Отбор);
+
+ Если НайденныеСтроки.Количество() = 0 Тогда
+ Продолжить;
+ КонецЕсли;
+
+ СтрокаДопРеквизитовСведений = НайденныеСтроки[0];
+
+ ТипЗначенияРеквизита = СтрокаДопРеквизитовСведений.Тип;
+
+ Иначе
+
+ Реквизит = Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ИмяРеквизита);
+
+ Если Реквизит = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ТипЗначенияРеквизита = Реквизит.Тип;
+
+ КонецЕсли;
+
+ Если ТипЗначенияРеквизита = ОписаниеТиповБулево Тогда
+ Продолжить;
+ КонецЕсли;
+
+ СтрокаТЧ.ЗаполнятьОбязательно = Истина;
+
+ Модифицированность = Истина;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновХарактеристикНаСервере()
+
+ ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаХарактеристикНаСервере(Объект.ШаблонРабочегоНаименованияХарактеристики);
+ ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаХарактеристикНаСервере(Объект.ШаблонНаименованияДляПечатиХарактеристики);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовИзШаблоновСерийНаСервере()
+
+ ВключитьПроверкуЗаполненияДляРеквизитовИзШаблонаСерийНаСервере(Объект.ШаблонРабочегоНаименованияСерии);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовБыстрогоОтбораНоменклатурыНаСервере()
+
+ Отбор = Новый Структура("ИмяРеквизита");
+
+ Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляНоменклатуры Цикл
+
+ Отбор.ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
+
+ РеквизитИспользуетсяДляОтбора = (Объект.РеквизитыБыстрогоОтбораНоменклатуры.НайтиСтроки(Отбор).Количество() <> 0);
+
+ Если РеквизитИспользуетсяДляОтбора Тогда
+
+ СтрокаТЧ.ЗаполнятьОбязательно = Истина;
+ СтрокаТЧ.ОтображатьПриСоздании = Истина;
+ СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
+
+ Модифицированность = Истина;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВключитьПроверкуЗаполненияДляРеквизитовБыстрогоОтбораХарактеристикНаСервере()
+
+ Отбор = Новый Структура("ИмяРеквизита");
+
+ Для каждого СтрокаТЧ Из Объект.РеквизитыДляКонтроляХарактеристик Цикл
+
+ Отбор.ИмяРеквизита = СтрокаТЧ.ИмяРеквизита;
+
+ Если Объект.РеквизитыБыстрогоОтбораХарактеристик.НайтиСтроки(Отбор).Количество() <> 0 Тогда
+
+ СтрокаТЧ.ЗаполнятьОбязательно = Истина;
+ СтрокаТЧ.ОтображатьПриСоздании = Истина;
+ СтрокаТЧ.ДоступностьОтображатьПриСоздании = Ложь;
+
+ Модифицированность = Истина;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаКлиентеНаСервереБезКонтекста
+Функция УсловияДоступности()
+
+ УсловияДоступности = Новый Структура;
+ УсловияДоступности.Вставить("ЭтоНеиспользуемыйДляКонтроляТип");
+ УсловияДоступности.Вставить("ТипРеквизитаБулево");
+ УсловияДоступности.Вставить("ЗаполнятьОбязательно");
+ УсловияДоступности.Вставить("ТолькоЗаполнятьОбязательно", Ложь);
+
+ Возврат УсловияДоступности;
+
+КонецФункции
+
+&НаСервере
+Процедура ИспользоватьХарактеристикиПриИзмененииНаСервере()
+
+ ЗаполняемыйОбъект = Объект;
+ НоменклатураЛокализация.ДополнитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыПоУмолчанию(ЗаполняемыйОбъект);
+ Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(ЗаполняемыйОбъект);
+
+ НоменклатураЛокализация.ВосстановитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ИспользоватьСерииПриИзмененииНаСервере()
+
+ ЗаполняемыйОбъект = Объект;
+ НоменклатураЛокализация.ДополнитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыПоУмолчанию(ЗаполняемыйОбъект);
+ Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(ЗаполняемыйОбъект);
+
+ НоменклатураЛокализация.ВосстановитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ИспользоватьУпаковкиПриИзмененииНаСервере()
+
+ Если Объект.ИспользоватьУпаковки Тогда
+ Объект.ПоставляетсяВМногооборотнойТаре = Ложь;
+ Объект.НоменклатураМногооборотнаяТара = Неопределено;
+ Объект.ХарактеристикаМногооборотнаяТара = Неопределено;
+ КонецЕсли;
+
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура НаборУпаковокПриИзмененииНаСервере()
+
+ РеквизитыНаборУпаковок = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.НаборУпаковок,
+ "ЕдиницаИзмерения, ЕдиницаДляОтчетов, КоэффициентЕдиницыДляОтчетов");
+
+ Если ЗначениеЗаполнено(Объект.НаборУпаковок)
+ И Объект.НаборУпаковок <> ПредопределенноеЗначение("Справочник.НаборыУпаковок.ИндивидуальныйДляНоменклатуры") Тогда
+ Объект.ЕдиницаИзмерения = РеквизитыНаборУпаковок.ЕдиницаИзмерения;
+ КонецЕсли;
+ Если ЗначениеЗаполнено(РеквизитыНаборУпаковок.ЕдиницаДляОтчетов) Тогда
+ Объект.ЕдиницаДляОтчетов = РеквизитыНаборУпаковок.ЕдиницаДляОтчетов;
+ Объект.КоэффициентЕдиницыДляОтчетов = РеквизитыНаборУпаковок.КоэффициентЕдиницыДляОтчетов;
+ КонецЕсли;
+
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИспользоватьИндивидуальноеНаименованиеПриИзменении(Элемент)
+
+ Если ИспользоватьИндивидуальноеНаименование = "ИспользоватьНаименованиеИзКонстанты" Тогда
+ Объект.НаименованиеДляПечати = "";
+ КонецЕсли;
+
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ЗаписатьПередИзменениемПанелиБыстрогоОтбораНоменклатуры()
+
+ ТекстВопроса = НСтр("ru = 'Редактирование состава панели быстрого отбора
+ |возможно только после записи элемента, записать элемент?'");
+
+ ПоказатьВопрос(Новый ОписаниеОповещения("ЗаписатьПередИзменениемПанелиБыстрогоОтбораНоменклатурыЗавершение", ЭтотОбъект),
+ ТекстВопроса, РежимДиалогаВопрос.ОКОтмена,,,НСтр("ru = 'Редактирование панели быстрого отбора'"));
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ЗаписатьПередИзменениемПанелиБыстрогоОтбораНоменклатурыЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
+
+ Если РезультатВопроса = КодВозвратаДиалога.ОК Тогда
+ Если Записать() Тогда
+
+ ИзменитьПанельБыстрогоОтбораНоменклатуры();
+
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменитьПанельБыстрогоОтбораНоменклатуры()
+
+ Прочитать();
+
+ ТекущийТипЭлемента = "ДопРеквизит";
+ ТекущийТипВладельцаНабораЭлементов = "Номенклатура";
+
+ АдресВХранилище = ПоместитьВХранилищеРеквизитыБыстрогоОтбора();
+
+ СтруктураПараметров = Новый Структура("АдресВХранилище", АдресВХранилище);
+
+ ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаРедактированияСоставаРеквизитов", СтруктураПараметров,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+&НаСервере
+Функция ПоместитьВХранилищеРеквизитыБыстрогоОтбора()
+
+ КоллекцияРеквизитовОтбора = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовОтбора(
+ Объект,
+ ТекущийТипВладельцаНабораЭлементов);
+ КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(
+ Объект,
+ ТекущийТипВладельцаНабораЭлементов);
+ РеквизитыФормы = ?(ТекущийТипВладельцаНабораЭлементов = "Номенклатура",
+ Справочники.Номенклатура.РеквизитыФормыТаблицыНастроек(),
+ Неопределено);
+
+ ТаблицаРеквизитовОтбора = Новый ТаблицаЗначений;
+ ТаблицаРеквизитовОтбора.Колонки.Добавить("ИмяРеквизита", Новый ОписаниеТипов("Строка"));
+ ТаблицаРеквизитовОтбора.Колонки.Добавить("ПредставлениеРеквизита", Новый ОписаниеТипов("Строка"));
+ ТаблицаРеквизитовОтбора.Колонки.Добавить("ЭтоДопРеквизит", Новый ОписаниеТипов("Булево"));
+ ТаблицаРеквизитовОтбора.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
+ ТаблицаРеквизитовОтбора.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
+
+ Для Каждого Реквизит Из КоллекцияРеквизитовДляКонтроля Цикл
+ Если РеквизитыФормы <> Неопределено
+ И РеквизитыФормы.Получить(Реквизит.ИмяРеквизита) <> Неопределено Тогда
+
+ Продолжить;
+
+ КонецЕсли;
+
+ Если Реквизит.ДоступностьУникален Тогда
+ НоваяСтрока = ТаблицаРеквизитовОтбора.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, Реквизит);
+ НоваяСтрока.Используется = КоллекцияРеквизитовОтбора.НайтиСтроки(Новый Структура("ИмяРеквизита",Реквизит.ИмяРеквизита)).Количество() > 0;
+ КонецЕсли;
+ КонецЦикла;
+
+ ТаблицаРеквизитовОтбора.Сортировать("ПредставлениеРеквизита");
+
+ Возврат ПоместитьВоВременноеХранилище(ТаблицаРеквизитовОтбора, ЭтотОбъект.УникальныйИдентификатор);
+
+КонецФункции
+
+&НаКлиенте
+Процедура ЗаписатьПередИзменениемПанелиБыстрогоОтбораХарактеристики()
+
+ ТекстВопроса = НСтр("ru = 'Редактирование состава панели быстрого отбора
+ |возможно только после записи элемента, записать элемент?'");
+
+ ПоказатьВопрос(Новый ОписаниеОповещения("ЗаписатьПередИзменениемПанелиБыстрогоОтбораХарактеристикиЗавершение", ЭтотОбъект),
+ ТекстВопроса, РежимДиалогаВопрос.ОКОтмена,,,НСтр("ru = 'Редактирование панели быстрого отбора'"));
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ЗаписатьПередИзменениемПанелиБыстрогоОтбораХарактеристикиЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
+
+ Если РезультатВопроса = КодВозвратаДиалога.ОК Тогда
+ Если Записать() Тогда
+
+ ИзменитьПанельБыстрогоОтбораХарактеристики();
+
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменитьПанельБыстрогоОтбораХарактеристики()
+ Прочитать();
+
+ КоличествоДоступных = ТаблицаДопРеквизитовХарактеристик.Количество();
+
+ Если КоличествоДоступных = 0 Тогда
+
+ ТекстСообщения = НСтр("ru = 'Невозможно отредактировать состав панели быстрого отбора характеристик.
+ |Не указаны дополнительные реквизиты характеристик.
+ |Перед редактированием состава панели быстрого отбора нужно настроить состав
+ |дополнительных реквизитов характеристик.'");
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
+
+ Возврат;
+
+ КонецЕсли;
+
+ ТекущийТипЭлемента = "ДопРеквизит";
+ ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры";
+
+ АдресВХранилище = ПоместитьВХранилищеРеквизитыБыстрогоОтбора();
+
+ СтруктураПараметров = Новый Структура("АдресВХранилище", АдресВХранилище);
+
+ ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаРедактированияСоставаРеквизитов", СтруктураПараметров,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДобавитьСкладВПолитикиУчетаСерийЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
+
+ Если ТипЗнч(РезультатЗакрытия) <> Тип("СправочникСсылка.Склады") Тогда
+ Возврат;
+ КонецЕсли;
+
+ СтрокаПолитика = Объект.ПолитикиУчетаСерий.Добавить();
+ СтрокаПолитика.Склад = РезультатЗакрытия;
+ СтрокаПолитика.ЭтоПолитикаДляСклада = Истина;
+
+ ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(СтрокаПолитика.Склад, СтрокаПолитика.ПолитикаУчетаСерий);
+
+ СтруктураОтбора = Новый Структура();
+ СтруктураОтбора.Вставить("Склад", РезультатЗакрытия);
+
+ НайденныеСтроки = Объект.ПолитикиУчетаСерий.НайтиСтроки(СтруктураОтбора);
+ Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл
+ Элементы.ПолитикиУчетаСерий.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор();
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДобавитьПодразделениеВПолитикиУчетаСерийЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
+
+ Если ТипЗнч(РезультатЗакрытия) <> Тип("СправочникСсылка.СтруктураПредприятия") Тогда
+ Возврат;
+ КонецЕсли;
+
+ СтрокаПолитика = Объект.ПолитикиУчетаСерий.Добавить();
+ СтрокаПолитика.Склад = РезультатЗакрытия;
+ СтрокаПолитика.ЭтоПолитикаДляСклада = Ложь;
+
+ ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(СтрокаПолитика.Склад, СтрокаПолитика.ПолитикаУчетаСерий);
+
+ СтруктураОтбора = Новый Структура();
+ СтруктураОтбора.Вставить("Склад", РезультатЗакрытия);
+
+ НайденныеСтроки = Объект.ПолитикиУчетаСерий.НайтиСтроки(СтруктураОтбора);
+ Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл
+ Элементы.ПолитикиУчетаСерий.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор();
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбновитьПредупреждениеПоСкладуКлиент()
+
+ ТекущиеДанные = Элементы.ПолитикиУчетаСерий.ТекущиеДанные;
+
+ Если ТекущиеДанные = Неопределено
+ Или Не ЗначениеЗаполнено(ТекущиеДанные.Склад)
+ Или ТипЗнч(ТекущиеДанные.Склад) = Тип("СправочникСсылка.СтруктураПредприятия") Тогда
+ Элементы.НадписьПодсказкаПолитикиУчетаСерий.Видимость = Ложь;
+ Возврат;
+ КонецЕсли;
+
+ Элементы.НадписьПодсказкаПолитикиУчетаСерий.Видимость = Не ЕстьОрдернаяСхема(ТекущиеДанные.Склад);
+
+КонецПроцедуры
+
+&НаСервереБезКонтекста
+Функция ЕстьОрдернаяСхема(Склад)
+
+ Если Не ПолучитьФункциональнуюОпцию("ИспользоватьОрдерныеСклады") Тогда
+ Возврат Истина;
+ КонецЕсли;
+
+ Возврат ПолучитьФункциональнуюОпцию("ИспользоватьОрдернуюСхемуПриОтраженииИзлишковНедостач", Новый Структура("Склад", Склад));
+
+КонецФункции
+
+&НаКлиенте
+Процедура ИзменитьПанельХарактеристикиДляКлюча()
+
+// Прочитать();
+
+ ТекущийТипЭлемента = "ДопРеквизит";
+ ТекущийТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры";
+
+ АдресВХранилище = ПоместитьВХранилищеРеквизитыДляКлючаЦен();
+
+ СтруктураПараметров = Новый Структура("АдресВХранилище, ФункцияОповещения", АдресВХранилище, "ПодборРеквизитовВТаблицуКлючаЦен");
+
+ ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаРедактированияСоставаРеквизитов", СтруктураПараметров,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменитьПанельСерииДляКлюча()
+
+// Прочитать();
+
+ ТекущийТипЭлемента = "ДопРеквизит";
+ ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры";
+
+ АдресВХранилище = ПоместитьВХранилищеРеквизитыДляКлючаЦен();
+
+ СтруктураПараметров = Новый Структура("АдресВХранилище, ФункцияОповещения", АдресВХранилище, "ПодборРеквизитовВТаблицуКлючаЦен");
+
+ ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаРедактированияСоставаРеквизитов", СтруктураПараметров,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+&НаСервере
+Функция ПоместитьВХранилищеРеквизитыДляКлючаЦен()
+
+ КоллекцияРеквизитовКлючаЦен = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКлючаЦен(Объект, ТекущийТипВладельцаНабораЭлементов);
+ КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(Объект, ТекущийТипВладельцаНабораЭлементов);
+
+ ТаблицаРеквизитовКлючаЦен = Новый ТаблицаЗначений;
+ ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("ИмяРеквизита", Новый ОписаниеТипов("Строка"));
+ ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("ПредставлениеРеквизита", Новый ОписаниеТипов("Строка"));
+ ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("ЭтоДопРеквизит", Новый ОписаниеТипов("Булево"));
+ ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
+ ТаблицаРеквизитовКлючаЦен.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
+
+ Если ТекущийТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
+
+ ДобавляемыйРеквизит = Новый Структура("ИмяРеквизита, ПредставлениеРеквизита");
+
+ Если Объект.ИспользоватьНомерСерии Тогда
+
+ ДобавляемыйРеквизит.ИмяРеквизита = "Номер";
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = НСтр("ru = 'Номер'");
+ ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
+
+ КонецЕсли;
+
+ Если Объект.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоМесяцев Тогда
+ ПредставлениеТочностиУказания = НСтр("ru = 'месяц, год'");
+ ИначеЕсли Объект.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоДней Тогда
+ ПредставлениеТочностиУказания = НСтр("ru = 'дата'");
+ ИначеЕсли Объект.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоЧасов Тогда
+ ПредставлениеТочностиУказания = НСтр("ru = 'дата, час'");
+ Иначе
+ ПредставлениеТочностиУказания = "";
+ КонецЕсли;
+
+ Если Объект.ИспользоватьСрокГодностиСерии Тогда
+ ПредставлениеРеквизита = НСтр("ru = 'Годен до (%ТочностьУказания%)'");
+ ПредставлениеРеквизита = СтрЗаменить(ПредставлениеРеквизита, "%ТочностьУказания%", ПредставлениеТочностиУказания);
+
+ ДобавляемыйРеквизит.ИмяРеквизита= "ГоденДо";
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = ПредставлениеРеквизита;
+ ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
+ КонецЕсли;
+
+ Если Объект.ИспользоватьДатуПроизводстваСерии Тогда
+ ПредставлениеРеквизита = НСтр("ru = 'Дата производства (%ТочностьУказания%)'");
+ ПредставлениеРеквизита = СтрЗаменить(ПредставлениеРеквизита, "%ТочностьУказания%", ПредставлениеТочностиУказания);
+
+ ДобавляемыйРеквизит.ИмяРеквизита = "ДатаПроизводства";
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = ПредставлениеРеквизита;
+ ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
+ КонецЕсли;
+
+ Если Объект.ИспользоватьНомерКИЗГИСМСерии Тогда
+ ДобавляемыйРеквизит.ИмяРеквизита = "НомерКиЗГИСМ";
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = НСтр("ru = '%1'");
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = СтрШаблон(ДобавляемыйРеквизит.ПредставлениеРеквизита, "КиЗ");
+ ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
+ КонецЕсли;
+
+ Если Объект.ИспользоватьПроизводителяЕГАИССерии Тогда
+ ДобавляемыйРеквизит.ИмяРеквизита = "ПроизводительЕГАИС";
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = НСтр("ru = 'Производитель (ЕГАИС)'");
+ ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
+ КонецЕсли;
+
+ Если Объект.ИспользоватьСправку2ЕГАИССерии Тогда
+ ДобавляемыйРеквизит.ИмяРеквизита = "Справка2ЕГАИС";
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = НСтр("ru = 'Справка 2 (ЕГАИС)'");
+ ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
+ КонецЕсли;
+
+ Если Объект.ИспользоватьПроизводителяВЕТИССерии Тогда
+ ДобавляемыйРеквизит.ИмяРеквизита = "ПроизводительВЕТИС";
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = НСтр("ru = 'Производитель (%1)'");
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = СтрШаблон(ДобавляемыйРеквизит.ПредставлениеРеквизита, "ВетИС");
+ ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
+ КонецЕсли;
+
+ Если Объект.ИспользоватьЗаписьСкладскогоЖурналаВЕТИССерии Тогда
+ ДобавляемыйРеквизит.ИмяРеквизита = "ЗаписьСкладскогоЖурналаВЕТИС";
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = НСтр("ru = 'Запись складского журнала (%1)'");
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = СтрШаблон(ДобавляемыйРеквизит.ПредставлениеРеквизита, "ВетИС");
+ ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
+ КонецЕсли;
+
+ Если Объект.ИспользоватьИдентификаторПартииВЕТИССерии Тогда
+ ДобавляемыйРеквизит.ИмяРеквизита = "ИдентификаторПартииВЕТИС";
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = НСтр("ru = 'Идентификатор партии (%1)'");
+ ДобавляемыйРеквизит.ПредставлениеРеквизита = СтрШаблон(ДобавляемыйРеквизит.ПредставлениеРеквизита, "ВетИС");
+ ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, ДобавляемыйРеквизит);
+ КонецЕсли;
+ КонецЕсли;
+
+ Для Каждого Реквизит Из КоллекцияРеквизитовДляКонтроля Цикл
+
+ Если Реквизит.ЗаполнятьОбязательно Тогда
+ НоваяСтрока = ТаблицаРеквизитовКлючаЦен.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, Реквизит);
+ НоваяСтрока.Используется = КоллекцияРеквизитовКлючаЦен.НайтиСтроки(Новый Структура("ИмяРеквизита",Реквизит.ИмяРеквизита)).Количество() > 0;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ТаблицаРеквизитовКлючаЦен.Сортировать("ПредставлениеРеквизита");
+
+ Возврат ПоместитьВоВременноеХранилище(ТаблицаРеквизитовКлючаЦен, ЭтотОбъект.УникальныйИдентификатор);
+
+КонецФункции
+
+&НаСервере
+Процедура ДобавитьРеквизитВТаблицуРеквизитовКлючаЦен(ТаблицаРеквизитовКлючаЦен, КоллекцияРеквизитовКлючаЦен, Знач ДобавляемыйРеквизит)
+
+ НоваяСтрока = ТаблицаРеквизитовКлючаЦен.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, ДобавляемыйРеквизит);
+// НоваяСтрока.ИмяРеквизита = ДобавляемыйРеквизит.ИмяРеквизита;
+// НоваяСтрока.ПредставлениеРеквизита = ДобавляемыйРеквизит.ПредставлениеРеквизита;
+ НоваяСтрока.ЭтоДопРеквизит = Ложь;
+ НоваяСтрока.Используется = КоллекцияРеквизитовКлючаЦен.НайтиСтроки(Новый Структура("ИмяРеквизита",ДобавляемыйРеквизит.ИмяРеквизита)).Количество() > 0;
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+&НаСервере
+Процедура ТипНоменклатурыПриИзмененииСервер()
+
+ Перечисления.ОсобенностиУчетаНоменклатуры.ОбработатьИзменениеТипаНоменклатуры(Объект.ТипНоменклатуры,
+ Объект.ОсобенностьУчета);
+
+ ЗаполняемыйОбъект = Объект;
+ НоменклатураЛокализация.ДополнитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыПоУмолчанию(ЗаполняемыйОбъект);
+ Справочники.ВидыНоменклатуры.ОтработатьЛогикуСвязиРеквизитов(ЗаполняемыйОбъект);
+
+ Справочники.ВидыНоменклатуры.ЗаполнитьРеквизитыДляКонтроля(ЗаполняемыйОбъект, "Номенклатура");
+
+ НоменклатураЛокализация.ВосстановитьОбъектФормы(ЭтотОбъект, ЗаполняемыйОбъект);
+
+ ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
+
+ НастроитьФорму();
+ ОсобенностьУчетаДоИзменения = Объект.ОсобенностьУчета;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура УстановитьУсловноеОформление()
+
+ УсловноеОформление.Элементы.Очистить();
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПолитикиУчетаСерийПолитикаУчетаСерий.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПолитикиУчетаСерий.Склад");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
+ Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
+ Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<выберите склад>'"));
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
+
+ //
+
+ УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
+ "РеквизитыДляКонтроляНоменклатуры",
+ "ТаблицаДопРеквизитовНоменклатуры",
+ "ТаблицаДопРеквизитовСерий");
+ УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
+ "РеквизитыДляКонтроляХарактеристик",
+ "ТаблицаДопРеквизитовХарактеристик",
+ "ТаблицаДопРеквизитовХарактеристик");
+ УстановитьУсловноеОформлениеРеквизитыДляКонтроля(
+ "РеквизитыДляКонтроляСерий",
+ "ТаблицаДопРеквизитовСерий",
+ "ТаблицаДопРеквизитовСерий");
+
+ Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИспользованиеУпаковокОбщийНабор.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Элементы.ИспользоватьУпаковки.ТолькоПросмотр;
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИспользованиеУпаковокИндивидуальныйНабор.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Элементы.ИспользоватьУпаковки.ТолькоПросмотр;
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура УстановитьУсловноеОформлениеРеквизитыДляКонтроля(ИмяТаблицыРеквизитыДляКонтроля, ИмяТаблицыДопРеквизитов, ИмяТаблицыДопСведений)
+
+ ЭтоТаблицаРеквизитыКонтроляСерий = (ИмяТаблицыРеквизитыДляКонтроля = "РеквизитыДляКонтроляСерий");
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыДопРеквизитов]; // ТаблицаФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицыДопРеквизитов + ".ОбщееСвойство");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыДопСведений]; // ТаблицаФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицыДопСведений + ".ОбщееСвойство");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ЗаполнятьОбязательно"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ДоступностьЗаполнятьОбязательно");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
+
+ //
+ Если Не ЭтоТаблицаРеквизитыКонтроляСерий Тогда
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ОтображатьПриСоздании"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ДоступностьОтображатьПриСоздании");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "Уникален"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ДоступностьУникален");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
+ КонецЕсли;
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ПредставлениеРеквизитаГиперссылка"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ Если Не ЭтоТаблицаРеквизитыКонтроляСерий Тогда
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ВиденСУсловием"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДоступенСУсловием"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+ КонецЕсли;
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ПредставлениеРеквизита"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ Если Не ЭтоТаблицаРеквизитыКонтроляСерий Тогда
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиВиденСУсловием"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиДоступенСУсловием"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+ КонецЕсли;
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиЗаполнятьОбязательно"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
+ ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
+
+ ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+
+ ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЗаполнятьОбязательно");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиЗаполнятьОбязательно"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+
+ //Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
+ Элемент.Оформление.УстановитьЗначениеПараметра("Формат", НСтр("ru = 'БЛ=''всегда''; БИ=''с условием'''"));
+
+ //
+
+ Если Не ЭтоТаблицаРеквизитыКонтроляСерий Тогда
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиДоступенСУсловием"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДляРазмераЯчейкиВиденСУсловием"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Ложь;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<для доп. реквизитов>'"));
+ Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
+ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ДоступенСУсловием"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+
+ //Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
+ Элемент.Оформление.УстановитьЗначениеПараметра("Формат", НСтр("ru = 'БЛ=''доступен всегда''; БИ=''доступен с условием'''"));
+
+ //
+
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ЭлементФормы = Элементы[ИмяТаблицыРеквизитыДляКонтроля + "ВиденСУсловием"]; // ПолеФормы
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект." + ИмяТаблицыРеквизитыДляКонтроля + ".ЭтоДопРеквизит");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Истина;
+
+ //Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
+ Элемент.Оформление.УстановитьЗначениеПараметра("Формат", НСтр("ru = 'БЛ=''виден всегда''; БИ=''виден с условием'''"));
+
+ //
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПоказатьРеквизитыДляКонтроляНоменклатуры(Команда)
+ Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляНоменклатуры;
+ УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры, ЦветТекстаФормы);
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик);
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПоказатьРеквизитыДляКонтроляХарактеристик(Команда)
+ Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляХарактеристик;
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры);
+ УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик, ЦветТекстаФормы);
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПоказатьРеквизитыДляКонтроляСерий(Команда)
+ Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляСерий;
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляНоменклатуры);
+ УстановитьСтандартноеОформлениеГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляХарактеристик);
+ УстановитьОформлениеНажатойГиперссылки(Элементы.ПоказатьРеквизитыДляКонтроляСерий, ЦветТекстаФормы);
+КонецПроцедуры
+
+&НаКлиентеНаСервереБезКонтекста
+Процедура УстановитьСтандартноеОформлениеГиперссылки(Кнопка)
+
+ Кнопка.Шрифт = Новый Шрифт;
+ Кнопка.ЦветТекста = Новый Цвет;
+
+КонецПроцедуры
+
+&НаКлиентеНаСервереБезКонтекста
+Процедура УстановитьОформлениеНажатойГиперссылки(Кнопка, ЦветТекста)
+
+ Кнопка.Шрифт = Новый Шрифт(,,Истина);
+ Кнопка.ЦветТекста = ЦветТекста;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура УстановитьРеквизитыЦенообразования()
+
+ Справочники.ВидыНоменклатуры.УстановитьРеквизитыЦенообразованияПоУмолчанию(Объект);
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВыбратьВидВладелец(ЗначащаяЧастьИмениНадписи)
+
+ ПараметрыФормыВыбора = Новый Структура;
+ ПараметрыФормыВыбора.Вставить("ТекущийВид", Объект.Ссылка);
+ ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
+
+ ОтборФормыВыбора = ЭтотОбъект[ИмяРеквизитаОтборВладельца(ЗначащаяЧастьИмениНадписи)];
+
+ ПараметрыФормыВыбора.Вставить("Отбор", ОтборФормыВыбора);
+
+ ДополнительныеПараметры = Новый Структура;
+ ДополнительныеПараметры.Вставить("ЗначащаяЧастьИмениНадписи", ЗначащаяЧастьИмениНадписи);
+
+ ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьВидВладелецЗавершение", ЭтотОбъект, ДополнительныеПараметры);
+
+ ОткрытьФорму("Справочник.ВидыНоменклатуры.Форма.ФормаВыбора",
+ ПараметрыФормыВыбора,
+ ЭтотОбъект,
+ ,
+ ,
+ ,
+ ОписаниеОповещения,
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВыбратьВидВладелецЗавершение(Результат, ДополнительныеПараметры) Экспорт
+
+ Если Не ЗначениеЗаполнено(Результат) Тогда
+ НастроитьФорму();
+ Иначе
+ Объект[ИмяРеквизитаВладельца(ДополнительныеПараметры.ЗначащаяЧастьИмениНадписи)] = Результат;
+ ВыбратьВидВладелецСервер(ДополнительныеПараметры.ЗначащаяЧастьИмениНадписи);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ВыбратьВидВладелецСервер(ЗначащаяЧастьИмениНадписи)
+
+ Справочники.ВидыНоменклатуры.УстановитьРеквизитыЦенообразованияПоУмолчанию(Объект);
+ ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи);
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи)
+
+ Особенности = ОсобенностиВыводаНадписиПоВладельцу(ЗначащаяЧастьИмениНадписи);
+
+ СписокВидов = ЭтотОбъект[ИмяСпискаВидыНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи)];
+ ВидВладелец = Объект[ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи)];
+
+ Если (Не Особенности.ЭтотВидСамЯвляетсяВладельцем
+ И Не ЗначениеЗаполнено(ВидВладелец))
+ Или Не Особенности.НуженТекстВНадписи Тогда
+ СписокВидов.Очистить();
+ Возврат;
+ КонецЕсли;
+
+ ТекстЗапроса =
+ "ВЫБРАТЬ
+ | ВидыНоменклатуры.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ |ГДЕ
+ | &РеквизитВладелец = &ВидВладелец
+ | И &ВидВладелец <> ЗНАЧЕНИЕ(Справочник.ВидыНоменклатуры.ПустаяСсылка)
+ | И ВидыНоменклатуры.Ссылка <> &Ссылка
+ | И НЕ ВидыНоменклатуры.ПометкаУдаления";
+
+ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&РеквизитВладелец", "ВидыНоменклатуры." + ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи));
+
+ Запрос = Новый Запрос;
+ Запрос.Текст = ТекстЗапроса;
+ Если Особенности.ЭтотВидСамЯвляетсяВладельцем Тогда
+ Запрос.УстановитьПараметр("ВидВладелец", Объект.Ссылка);
+ Иначе
+ Запрос.УстановитьПараметр("ВидВладелец", ВидВладелец);
+ КонецЕсли;
+ Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
+
+ СписокВидов.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
+
+КонецПроцедуры
+
+&НаСервере
+Функция ОсобенностиВыводаНадписиПоВладельцу(ЗначащаяЧастьИмениНадписи)
+ Особенности = Новый Структура("ЭтотВидСамЯвляетсяВладельцем,НуженТекстВНадписи,МожноРедактироватьВладельца");
+
+ Особенности.ЭтотВидСамЯвляетсяВладельцем = Ложь;
+ Особенности.НуженТекстВНадписи = Ложь;
+ Особенности.МожноРедактироватьВладельца = Ложь;
+
+ Если ЗначащаяЧастьИмениНадписи = "ТоварныхКатегорий" Тогда
+ Если Не Объект.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
+ Особенности.ЭтотВидСамЯвляетсяВладельцем = Истина;
+ КонецЕсли;
+
+ Особенности.НуженТекстВНадписи = ПолучитьФункциональнуюОпцию("ИспользоватьТоварныеКатегории");
+ Особенности.МожноРедактироватьВладельца = Не Элементы.НастройкаТоварныхКатегорий.ТолькоПросмотр;
+
+ ИначеЕсли ЗначащаяЧастьИмениНадписи = "Серий" Тогда
+ Если Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+ Особенности.ЭтотВидСамЯвляетсяВладельцем = Истина;
+ КонецЕсли;
+
+ Особенности.НуженТекстВНадписи = Объект.ИспользоватьСерии;
+ Особенности.МожноРедактироватьВладельца = Не Элементы.ИспользоватьСерии.ТолькоПросмотр;
+
+ ИначеЕсли ЗначащаяЧастьИмениНадписи = "Характеристик" Тогда
+ Если Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры Тогда
+ Особенности.ЭтотВидСамЯвляетсяВладельцем = Истина;
+ КонецЕсли;
+
+ Особенности.НуженТекстВНадписи = Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры
+ Или Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры;
+ Особенности.МожноРедактироватьВладельца = Не Элементы.ИспользованиеХарактеристик.ТолькоПросмотр;
+
+ КонецЕсли;
+
+ Возврат Особенности;
+КонецФункции
+
+&НаСервере
+Функция ОсобенностиВыводаНадписиИзмененияНабораРеквизитовЦенообразования(ЗначащаяЧастьИмениНадписи)
+ Особенности = Новый Структура("НуженТекстВНадписи,МожноРедактировать");
+
+ Особенности.НуженТекстВНадписи = Ложь;
+ Особенности.МожноРедактировать = Ложь;
+
+ Если ЗначащаяЧастьИмениНадписи = "Серии" Тогда
+
+ Особенности.НуженТекстВНадписи = Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам;
+ Особенности.МожноРедактировать = Не Элементы.НастройкиКлючаЦенПоСерии.ТолькоПросмотр;
+
+ ИначеЕсли ЗначащаяЧастьИмениНадписи = "Характеристики" Тогда
+
+ Особенности.НуженТекстВНадписи = Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам;
+ Особенности.МожноРедактировать = Не Элементы.НастройкиКлючаЦенПоХарактеристике.ТолькоПросмотр;
+
+ КонецЕсли;
+
+ Возврат Особенности;
+КонецФункции
+
+&НаСервере
+Процедура СформироватьНадписьПоВидуВладельцу(ЗначащаяЧастьИмениНадписи);
+ Особенности = ОсобенностиВыводаНадписиПоВладельцу(ЗначащаяЧастьИмениНадписи);
+
+ МассивСтрок = Новый Массив;
+ Если Особенности.НуженТекстВНадписи Тогда
+
+ СписокВидов = ЭтотОбъект[ИмяСпискаВидыНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи)];
+ ПредставлениеКоличестваВидов = "";
+
+ Если Особенности.ЭтотВидСамЯвляетсяВладельцем Тогда
+
+ Если ЗначащаяЧастьИмениНадписи <> "Серий" Тогда
+ МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Список'"),,,,"ОткрытьСписок"));
+ Если СписокВидов.Количество() > 0 Тогда
+ МассивСтрок.Добавить(" ");
+ МассивСтрок.Добавить(НСтр("ru = 'используется еще в'"));
+ МассивСтрок.Добавить(" ");
+ ПредставлениеКоличестваВидов = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(СписокВидов.Количество(),
+ НСтр("ru = 'виде,видах,видах'"));
+ КонецЕсли;
+ Иначе
+ Если СписокВидов.Количество() > 0 Тогда
+ МассивСтрок.Добавить(" ");
+ МассивСтрок.Добавить(НСтр("ru = 'и еще'"));
+ МассивСтрок.Добавить(" ");
+ ПредставлениеКоличестваВидов = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(СписокВидов.Количество(),
+ НСтр("ru = 'вида,видов,видов'"));
+ КонецЕсли;
+ КонецЕсли;
+
+ Иначе
+ ВидВладелец = Объект[ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи)];
+
+ Если Не ЗначениеЗаполнено(ВидВладелец) Тогда
+ МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = '<вид не выбран>'"),Новый Шрифт(,,Истина),ЦветаСтиля.ЦветОсобогоТекста));
+ МассивСтрок.Добавить(" ");
+ МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Выбрать'"),,,,"ИзменитьВладельца"));
+ Иначе
+
+ ПредставлениеВида = ОбщегоНазначенияУТКлиентСервер.ПредставлениеСтрокиСДлинойНеБолее(Строка(ВидВладелец), 40);
+ МассивСтрок.Добавить(Новый ФорматированнаяСтрока(ПредставлениеВида,,,,"ОткрытьВладельца"));
+
+ Если Особенности.МожноРедактироватьВладельца Тогда
+ МассивСтрок.Добавить(" (");
+ МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'изменить'"),,,,"ИзменитьВладельца"));
+ МассивСтрок.Добавить(")");
+ КонецЕсли;
+
+ Если СписокВидов.Количество() > 0 Тогда
+ МассивСтрок.Добавить(" ");
+ МассивСтрок.Добавить(НСтр("ru = 'и еще с'"));
+ МассивСтрок.Добавить(" ");
+ ПредставлениеКоличестваВидов = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью(СписокВидов.Количество(),
+ НСтр("ru = 'видом,видами,видами'"));
+ КонецЕсли;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если Не ПустаяСтрока(ПредставлениеКоличестваВидов) Тогда
+ МассивСтрок.Добавить(Новый ФорматированнаяСтрока(ПредставлениеКоличестваВидов,
+ ,
+ ,
+ ,
+ "ОткрытьСписокВидовСТемЖеВладельцем"));
+ КонецЕсли;
+ КонецЕсли;
+ ЭлементФормы = Элементы[ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи)]; // ДекорацияФормы
+ ЭлементФормы.Заголовок = Новый ФорматированнаяСтрока(МассивСтрок);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура СформироватьНадписьРазрезаЦенообразования(ЗначащаяЧастьИмениНадписи);
+ Особенности = ОсобенностиВыводаНадписиИзмененияНабораРеквизитовЦенообразования(ЗначащаяЧастьИмениНадписи);
+
+ Если Особенности.НуженТекстВНадписи Тогда
+
+ МассивСтрок = Новый Массив;
+
+ Если ЗначащаяЧастьИмениНадписи = "Характеристики" Тогда
+
+ МассивОписанияРеквизитов = ПолучитьДанныеПоРеквизитамДляКлючаЦен(ЗначащаяЧастьИмениНадписи);
+
+ Если МассивОписанияРеквизитов.Количество() Тогда
+
+ МассивСтрок.Добавить("<");
+ МассивСтрок.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
+ МассивСтрок.Добавить(">");
+
+ Иначе
+
+ МассивСтрок.Добавить(НСтр("ru = '<Реквизиты не выбраны>'"));
+
+ КонецЕсли;
+
+ ЭлементФормы = Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Характеристики;
+
+ ИначеЕсли ЗначащаяЧастьИмениНадписи = "Серии" Тогда
+
+ МассивОписанияРеквизитов = ПолучитьДанныеПоРеквизитамДляКлючаЦен(ЗначащаяЧастьИмениНадписи);
+
+ Если МассивОписанияРеквизитов.Количество() Тогда
+
+ МассивСтрок.Добавить("<");
+ МассивСтрок.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
+ МассивСтрок.Добавить(">");
+
+ Иначе
+
+ МассивСтрок.Добавить(НСтр("ru = '<Реквизиты не выбраны>'"));
+
+ КонецЕсли;
+
+ ЭлементФормы = Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Серии;
+
+ КонецЕсли;
+
+ Если Особенности.МожноРедактировать Тогда
+ МассивСтрок.Добавить(" (");
+ МассивСтрок.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'изменить'"),,,,"ИзменитьНастройкуИспользованияРеквизитов"));
+ МассивСтрок.Добавить(")");
+ КонецЕсли;
+
+ ЭлементФормы.Заголовок = Новый ФорматированнаяСтрока(МассивСтрок);
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаНавигационнойСсылкиНадписиПоВидуВладельцу(НавигационнаяСсылка, ЗначащаяЧастьИмениНадписи, СтандартнаяОбработка);
+
+ СтандартнаяОбработка = Ложь;
+
+ Если НавигационнаяСсылка = "ОткрытьВладельца" Тогда
+ ПоказатьЗначение(,Объект[ИмяРеквизитаВладельца(ЗначащаяЧастьИмениНадписи)]);
+ ИначеЕсли НавигационнаяСсылка = "ИзменитьВладельца" Тогда
+ ВыбратьВидВладелец(ЗначащаяЧастьИмениНадписи);
+ ИначеЕсли НавигационнаяСсылка = "ОткрытьСписокВидовСТемЖеВладельцем" Тогда
+ ПоказатьЗначение(,ЭтотОбъект[ИмяСпискаВидыНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмениНадписи)]);
+ ИначеЕсли НавигационнаяСсылка = "ОткрытьСписок" Тогда
+ Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
+
+ ТекстВопроса = Нстр("ru = 'Данные еще не записаны.
+ |Переход к списку возможен только после записи данных.'");
+
+ КнопкиВопроса = Новый СписокЗначений;
+ КнопкиВопроса.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Записать'"));
+ КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
+
+ ДополнительныеПараметрыВопроса = Новый Структура;
+ ДополнительныеПараметрыВопроса.Вставить("ЗначащаяЧастьИмениНадписи", ЗначащаяЧастьИмениНадписи);
+
+ ПоказатьВопрос(Новый ОписаниеОповещения("ОткрытьСписокЗавершение", ЭтотОбъект, ДополнительныеПараметрыВопроса),
+ ТекстВопроса,
+ КнопкиВопроса);
+ Возврат;
+
+ КонецЕсли;
+
+ ОткрытьСписокФрагмент(ЗначащаяЧастьИмениНадписи);
+ Иначе
+ ТекстИсключения = НСтр("ru = 'Неизвестная навигационная ссылка.'");
+
+ ВызватьИсключение ТекстИсключения;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОткрытьСписокЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
+
+ Если РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
+ Возврат;
+ КонецЕсли;
+
+ Попытка
+ ЭлементЗаписан = Записать();
+ Исключение
+ Возврат;
+ КонецПопытки;
+
+ Если Не ЭлементЗаписан Тогда
+ Возврат;
+ КонецЕсли;
+
+ ОткрытьСписокФрагмент(ДополнительныеПараметры.ЗначащаяЧастьИмениНадписи);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОткрытьСписокФрагмент(ЗначащаяЧастьИмениНадписи)
+
+ Если ЗначащаяЧастьИмениНадписи = "ТоварныхКатегорий" Тогда
+ ПараметрыОткрытия = Новый Структура;
+ ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Владелец", Объект.Ссылка));
+ ПараметрыОткрытия.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
+
+ ОткрытьФорму("Справочник.ТоварныеКатегории.ФормаСписка",
+ ПараметрыОткрытия,
+ ЭтотОбъект,
+ ,
+ ,
+ ,
+ ,
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+ ИначеЕсли ЗначащаяЧастьИмениНадписи = "Характеристик" Тогда
+
+ ПараметрыОткрытия = Новый Структура;
+ ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Владелец", Объект.Ссылка));
+ ПараметрыОткрытия.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
+
+ ОткрытьФорму("Справочник.ХарактеристикиНоменклатуры.Форма.ФормаСписка",
+ ПараметрыОткрытия,
+ ЭтотОбъект,
+ ,
+ ,
+ ,
+ ,
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаписатьОбщееСвойствоНаСервере(ВыбранноеЗначение, НаборДопРеквизитовСведений, ЭтоНаборыДополнительныхСведений)
+
+ Блокировка = Новый БлокировкаДанных;
+
+ ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыДополнительныхРеквизитовИСведений");
+ ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
+ ЭлементБлокировки.УстановитьЗначение("Ссылка", НаборДопРеквизитовСведений);
+
+ Попытка
+ ЗаблокироватьДанныеДляРедактирования(НаборДопРеквизитовСведений);
+ НачатьТранзакцию();
+ Попытка
+ Блокировка.Заблокировать();
+ ЗаблокироватьДанныеДляРедактирования(НаборДопРеквизитовСведений);
+
+ ТекущийНаборОбъект = НаборДопРеквизитовСведений.ПолучитьОбъект();
+ Если ТекущийНаборОбъект.ВерсияДанных <> ВерсияДанныхТекущегоНабора Тогда
+ Если ЭтоНаборыДополнительныхСведений Тогда
+ ВызватьИсключение
+ НСтр("ru = 'Действие не выполнено, так как состав дополнительных сведений
+ |был изменен другим пользователем.
+ |Новый состав дополнительных сведений прочитан.
+ |
+ |Повторите действие, если требуется.'");
+ Иначе
+ ВызватьИсключение
+ НСтр("ru = 'Действие не выполнено, так как состав дополнительных реквизитов
+ |был изменен другим пользователем.
+ |Новый состав дополнительных реквизитов прочитан.
+ |
+ |Повторите действие, если требуется.'");
+ КонецЕсли;
+ КонецЕсли;
+
+ ТабличнаяЧасть = ТекущийНаборОбъект[?(ЭтоНаборыДополнительныхСведений,
+ "ДополнительныеСведения", "ДополнительныеРеквизиты")];
+
+ НайденнаяСтрока = ТабличнаяЧасть.Найти(ВыбранноеЗначение.ОбщееСвойство, "Свойство");
+
+ Если НайденнаяСтрока = Неопределено Тогда
+ НоваяСтрока = ТабличнаяЧасть.Добавить();
+ НоваяСтрока.Свойство = ВыбранноеЗначение.ОбщееСвойство;
+ ТекущийНаборОбъект.Записать();
+
+ ИначеЕсли НайденнаяСтрока.ПометкаУдаления Тогда
+ НайденнаяСтрока.ПометкаУдаления = Ложь;
+ ТекущийНаборОбъект.Записать();
+ КонецЕсли;
+
+ Модифицированность = Истина;
+
+ ЗафиксироватьТранзакцию();
+ Исключение
+ ОтменитьТранзакцию();
+ ВызватьИсключение;
+ КонецПопытки;
+ Исключение
+ РазблокироватьДанныеДляРедактирования(НаборДопРеквизитовСведений);
+ ВызватьИсключение;
+ КонецПопытки;
+
+ ПриЗаписиНабораДополнительныхРеквизитовИСведенийНаСервере();
+
+КонецПроцедуры
+
+&НаСервереБезКонтекста
+Функция ПолучитьВерсиюДанныхНабора(Набор)
+ Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Набор, "ВерсияДанных");
+КонецФункции
+
+&НаКлиенте
+Процедура ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
+
+ Если РезультатВопроса = КодВозвратаДиалога.Нет Тогда
+ ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий = Истина;
+ Возврат;
+ КонецЕсли;
+
+ УстановитьПолитикуУчетаСерийПоУмолчанию();
+ ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзмененииСервер();
+ ОбновитьПредупреждениеПоСкладуКлиент();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЕстьИндивидуальныеНастройкиПолитикиУчетаСерийПриИзмененииСервер()
+
+ ДействиеПриИзмененииПолитикУчетаСерий();
+ УдалитьДублиСкладовПолитикУчетаСерийНоменклатуры();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ДействиеПриИзмененииПолитикУчетаСерий()
+
+ ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта();
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура УдалитьДублиСкладовПолитикУчетаСерийНоменклатуры()
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ПолитикиУчетаСерий.Склад КАК Склад,
+ | 1 КАК КоличествоСкладов
+ |ПОМЕСТИТЬ ПолитикиУчетаСерий
+ |ИЗ
+ | &ТаблицаПолитик КАК ПолитикиУчетаСерий
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | ПолитикиУчетаСерий.Склад КАК Склад,
+ | СУММА(ПолитикиУчетаСерий.КоличествоСкладов) КАК КоличествоСкладов
+ |ИЗ
+ | ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
+ |
+ |СГРУППИРОВАТЬ ПО
+ | ПолитикиУчетаСерий.Склад
+ |
+ |ИМЕЮЩИЕ
+ | СУММА(ПолитикиУчетаСерий.КоличествоСкладов) > 1";
+
+ Запрос.УстановитьПараметр("ТаблицаПолитик", Объект.ПолитикиУчетаСерий.Выгрузить());
+
+ ДублиСкладов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад");
+ УдаляемыеПолитики = Новый Массив;
+
+ Для Каждого ПовторяемыйСклад Из ДублиСкладов Цикл
+ ОтборСтрок = Новый Структура("Склад", ПовторяемыйСклад);
+ СтрокиПолитик = Объект.ПолитикиУчетаСерий.НайтиСтроки(ОтборСтрок);
+
+ Для Сч = 0 По СтрокиПолитик.ВГраница() Цикл
+ Если Сч = 0 Тогда
+ Продолжить;
+ КонецЕсли;
+
+ УдаляемыеПолитики.Добавить(СтрокиПолитик[Сч]);
+ КонецЦикла;
+ КонецЦикла;
+
+ Для Каждого УдаляемаяПолитика Из УдаляемыеПолитики Цикл
+ Объект.ПолитикиУчетаСерий.Удалить(УдаляемаяПолитика);
+ КонецЦикла;
+
+КонецПроцедуры
+
+// Удаляет дубли строк, а так же скрытые строки если введена переопределяющая строка.
+//
+// Параметры:
+// Склад - СправочникСсылка.Склады, СправочникСсылка.СтруктураПредприятия - склад или подразделение новой строки
+// ПолитикаУчетаСерий - СправочникСсылка.ПолитикиУчетаСерий - политика учета серий новой строки.
+//
+&НаСервере
+Процедура ПослеДобавленияНовогоСкладаПодразделенияВПолитикиУчетаСерий(Склад, ПолитикаУчетаСерий)
+
+ СтрокиКУдалению = Новый Массив();
+ СтрокиССовпадающимиПолитиками = Новый Массив();
+
+ // Поиск всех имеющихся строк по текущему складу
+ СтруктураОтбора = Новый Структура();
+ СтруктураОтбора.Вставить("Склад", Склад);
+
+ НайденныеСтроки = Объект.ПолитикиУчетаСерий.НайтиСтроки(СтруктураОтбора);
+
+ ИндексовНайденныхСтрок = НайденныеСтроки.Количество() - 1;
+ Для Индекс = 0 По ИндексовНайденныхСтрок Цикл
+ Строка = НайденныеСтроки[Индекс];
+
+ Если Строка.ПолитикаУчетаСерий = Объект.ПолитикаУчетаСерий Тогда
+ // Удаление скрытых строк.
+ СтрокиКУдалению.Добавить(Строка);
+ ИначеЕсли Строка.ПолитикаУчетаСерий = ПолитикаУчетаСерий Тогда
+ // Заполнение дублей строк для последующего удаления лишних
+ СтрокиССовпадающимиПолитиками.Добавить(Строка);
+ Иначе
+ // Строки где политика отличается от умолчания остаются - пользователь
+ // должен явным образом выбрать какую строку нужно оставить.
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Для Каждого Строка Из СтрокиКУдалению Цикл
+ Объект.ПолитикиУчетаСерий.Удалить(Строка);
+
+ СтрокаВМассивеСовпадающихПолитик = СтрокиССовпадающимиПолитиками.Найти(Строка);
+ Если СтрокаВМассивеСовпадающихПолитик <> Неопределено Тогда
+ СтрокиССовпадающимиПолитиками.Удалить(СтрокаВМассивеСовпадающихПолитик);
+ КонецЕсли;
+ КонецЦикла;
+
+ Если СтрокиССовпадающимиПолитиками.Количество() > 1 Тогда
+ Для Индекс = 1 По СтрокиССовпадающимиПолитиками.Количество() - 1 Цикл
+ Строка = СтрокиССовпадающимиПолитиками[Индекс];
+ Объект.ПолитикиУчетаСерий.Удалить(Строка);
+ КонецЦикла;
+ КонецЕсли;
+
+ ДействиеПриИзмененииПолитикУчетаСерий();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура УстановитьПолитикуУчетаСерийПоУмолчанию()
+
+ Для Каждого Строка Из Объект.ПолитикиУчетаСерий Цикл
+ Строка.ПолитикаУчетаСерий = Объект.ПолитикаУчетаСерий;
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура УдалитьПустыеСтрокиПолитикУчетаСерий()
+
+ ПараметрыОтбора = Новый Структура();
+ ПараметрыОтбора.Вставить("Склад", Неопределено);
+ ПараметрыОтбора.Вставить("ПолитикаУчетаСерий", Справочники.ПолитикиУчетаСерий.ПустаяСсылка());
+ СтрокиКУдалению = Объект.ПолитикиУчетаСерий.НайтиСтроки(ПараметрыОтбора);
+
+ Для Каждого ЭлементКУдалению Из СтрокиКУдалению Цикл
+ Объект.ПолитикиУчетаСерий.Удалить(ЭлементКУдалению);
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаполнитьРеквизитыФормыПоРеквизитамОбъекта()
+
+ Если Объект.ИспользоватьИндивидуальноеНаименованиеПриПечати Тогда
+ ИспользоватьИндивидуальноеНаименование = "ИспользоватьИндивидуальноеНаименование";
+ Иначе
+ ИспользоватьИндивидуальноеНаименование = "ИспользоватьНаименованиеИзКонстанты";
+ КонецЕсли;
+
+ Если Объект.ИспользоватьСерии Тогда
+ Если Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+ ВариантЗаданияНастроекСерий = "ИспользуютсяТакжеКакВДругомВидеНоменклатуры";
+ Иначе
+ ВариантЗаданияНастроекСерий = "НастроеныДляВидаНоменклатуры";
+ КонецЕсли;
+ Иначе
+ ВариантЗаданияНастроекСерий = "";
+ КонецЕсли;
+
+ Если Объект.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
+ НастройкаТоварныхКатегорий = "ОбщиеСДругимВидомНоменклатуры";
+ Иначе
+ НастройкаТоварныхКатегорий = "НастроеныДляЭтогоВидаНоменклатуры";
+ КонецЕсли;
+
+ Если Объект.ИспользоватьУпаковки Тогда
+ Если Объект.НаборУпаковок = Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры Тогда
+ ИспользованиеУпаковок = "ИндивидуальныйНабор";
+ Иначе
+ ИспользованиеУпаковок = "ОбщийНабор";
+ КонецЕсли;
+ КонецЕсли;
+
+ ОтборВладельцаТоварныхКатегорий = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(Объект, "ВладелецТоварныхКатегорий");
+ ОтборВладельцаХарактеристик = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(Объект, "ВладелецХарактеристик");
+ ОтборВладельцаСерий = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(Объект, "ВладелецСерий");
+
+ ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем("ТоварныхКатегорий");
+ ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем("Характеристик");
+ ЗаполнитьСписокВидовНоменклатурыСТемЖеВладельцем("Серий");
+
+ ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий = Ложь;
+
+ Для Каждого СтрТабл Из Объект.ПолитикиУчетаСерий Цикл
+
+ СтрТабл.ЭтоПолитикаДляСклада = Не ЗначениеЗаполнено(СтрТабл.Склад)
+ Или (ТипЗнч(СтрТабл.Склад) = Тип("СправочникСсылка.Склады"));
+ СтрТабл.СоответствуетПолитикеПоУмолчанию = СтрТабл.ПолитикаУчетаСерий = Объект.ПолитикаУчетаСерий;
+
+ Если Не СтрТабл.СоответствуетПолитикеПоУмолчанию Тогда
+ ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий = Истина;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзмененияСтруктура = НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий();
+ ЗаполнитьЗначенияСвойств(ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзмененияСтруктура, Объект);
+ ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзменения = Новый ФиксированнаяСтруктура(ПараметрыВлияющиеНаОтборПолитикУказанияСерийДоИзмененияСтруктура);
+
+ ЗаполнитьСпискиДопРеквизитовСведений();
+
+КонецПроцедуры
+
+&НаКлиентеНаСервереБезКонтекста
+Процедура СвернутьРазвернутьВсеГруппы(Форма)
+
+ ИменаСворачиваемыхГрупп = ИменаСворачиваемыхГрупп();
+
+ Для Каждого ИмяГруппы Из ИменаСворачиваемыхГрупп Цикл
+
+ Если Форма.НастройкаВидимостиФормы = "ПоказатьВсе" Тогда
+ Форма.Элементы[ИмяГруппы].Показать();
+ Иначе
+ Форма.Элементы[ИмяГруппы].Скрыть();
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаКлиентеНаСервереБезКонтекста
+Функция ИменаСворачиваемыхГрупп()
+
+ ИменаСворачиваемыхГрупп = Новый Массив;
+
+ ИменаСворачиваемыхГрупп.Добавить("СтраницаОсновное");
+ ИменаСворачиваемыхГрупп.Добавить("СтраницаДопРеквизиты");
+ ИменаСворачиваемыхГрупп.Добавить("СтраницаНастройкиЦенообразования");
+ ИменаСворачиваемыхГрупп.Добавить("СтраницаШаблоныНаименований");
+ ИменаСворачиваемыхГрупп.Добавить("СтраницаНастройкиПанелиБыстрогоОтбора");
+ ИменаСворачиваемыхГрупп.Добавить("СтраницаНастройкиСоздания");
+ ИменаСворачиваемыхГрупп.Добавить("СтраницаЗначенияПоУмолчанию");
+ ИменаСворачиваемыхГрупп.Добавить("СтраницаДопСведения");
+
+ Возврат ИменаСворачиваемыхГрупп;
+КонецФункции
+
+&НаКлиенте
+Процедура РеквизитыДляКонтроляВыбор(ЗначащаяЧастьИмени, Поле, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ ТекущиеДанные = Элементы[ИмяТаблицыРеквизитыДляКонтроля(ЗначащаяЧастьИмени)].ТекущиеДанные;
+
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ ИначеЕсли Не (ТекущиеДанные.ЭтоДопРеквизит
+ И ТекущиеДанные.ЗаполнятьОбязательно) Тогда
+
+ Возврат;
+
+ КонецЕсли;
+
+ ПараметрыОбработки = Новый Структура;
+ ПараметрыОбработки.Вставить("ТекущееСвойство", ТекущиеДанные.Свойство);
+ ПараметрыОбработки.Вставить("ЗначащаяЧастьИмени", ЗначащаяЧастьИмени);
+ ПараметрыОбработки.Вставить("Поле", Поле);
+
+ Если Модифицированность Тогда
+ ОписаниеОповещения = Новый ОписаниеОповещения("РеквизитыДляКонтроляВыборЗавершение", ЭтотОбъект, ПараметрыОбработки);
+ ТекстВопроса = НСтр("ru = 'Перед открытием формы настройки необходимо записать элемент. Продолжить?'");
+
+ ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена);
+
+ Возврат;
+ КонецЕсли;
+
+ РеквизитыДляКонтроляВыборЗавершение(Неопределено, ПараметрыОбработки);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РеквизитыДляКонтроляВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
+
+ Если Результат <> Неопределено
+ И Результат <> КодВозвратаДиалога.ОК Тогда
+
+ Возврат;
+
+ КонецЕсли;
+
+ Если Результат = КодВозвратаДиалога.ОК Тогда
+ Если Не Записать() Тогда
+ Возврат;
+ КонецЕсли;
+ КонецЕсли;
+
+ ТекущееСвойство = ДополнительныеПараметры.ТекущееСвойство;
+ ЗначащаяЧастьИмени = ДополнительныеПараметры.ЗначащаяЧастьИмени;
+ Поле = ДополнительныеПараметры.Поле;
+
+ ОтборРеквизитов = Новый Структура("Свойство", ТекущееСвойство);
+ СтрокиРеквизитов = Объект[ИмяТаблицыРеквизитыДляКонтроля(ЗначащаяЧастьИмени)].НайтиСтроки(ОтборРеквизитов);
+ ТекущаяСтрока = Неопределено;
+ РедактируемоеСвойство = Неопределено;
+
+ Если СтрокиРеквизитов.Количество() > 0 Тогда
+ ТекущаяСтрока = СтрокиРеквизитов[0];
+ РедактируемоеСвойство = СтрокиРеквизитов[0].Свойство;
+ Иначе
+ Возврат;
+ КонецЕсли;
+
+ Если ТекущаяСтрока.ЭтоОбщийРеквизит Тогда
+
+ Если ЗначащаяЧастьИмени = "Номенклатуры" Тогда
+ ТекущийНаборСвойств = НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
+ ИначеЕсли ЗначащаяЧастьИмени = "Характеристик" Тогда
+ ТекущийНаборСвойств = НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
+ ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
+ ТекущийНаборСвойств = НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
+ КонецЕсли;
+
+ Иначе
+
+ Если ЗначащаяЧастьИмени = "Номенклатуры" Тогда
+ ТекущийНаборСвойств = Объект.НаборСвойств;
+ ИначеЕсли ЗначащаяЧастьИмени = "Характеристик" Тогда
+ ТекущийНаборСвойств = Объект.НаборСвойствХарактеристик;
+ ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
+ ТекущийНаборСвойств = Объект.НаборСвойствСерий;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ ВидНастройки = ВидНастройкиРеквизитаДляКонтроляПоИмениПоля(Элементы, Поле.Имя);
+ РедактируемоеСвойствоВидНастройки = "";
+
+ Если ВидНастройки = "ПредставлениеРеквизита" Тогда
+
+ ПараметрыФормыСвойства = Новый Структура;
+ ПараметрыФормыСвойства.Вставить("ТекущийНаборСвойств", ТекущийНаборСвойств);
+ ПараметрыФормыСвойства.Вставить("Ключ", РедактируемоеСвойство);
+
+ ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта",
+ ПараметрыФормыСвойства,
+ ЭтотОбъект,
+ ,
+ ,
+ ,
+ ,
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+ ИначеЕсли ВидНастройки = "Виден"
+ Или ВидНастройки = "Доступен"
+ Или ВидНастройки = "ЗаполнятьОбязательно" Тогда
+
+ ЗаполнитьЗависимостиРедактируемогоСвойства();
+
+ РедактируемоеСвойствоВидНастройки = ВидНастройки;
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("ДополнительныйРеквизит", РедактируемоеСвойство);
+ ПараметрыФормы.Вставить("ЗависимостиРеквизитов", РедактируемоеСвойствоЗависимости);
+ ПараметрыФормы.Вставить("Набор", ТекущийНаборСвойств);
+ ПараметрыФормы.Вставить("НастраиваемоеСвойство", РедактируемоеСвойствоВидНастройки);
+
+ ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ЗависимостьРеквизитов",
+ ПараметрыФормы,
+ ЭтотОбъект,
+ ,
+ ,
+ ,
+ ,
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиентеНаСервереБезКонтекста
+Функция ВидНастройкиРеквизитаДляКонтроляПоИмениПоля(Элементы, ИмяЭлемента)
+
+ ВидНастройки = "";
+
+ Если ИмяЭлемента = Элементы.РеквизитыДляКонтроляНоменклатурыПредставлениеРеквизита.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляНоменклатурыПредставлениеРеквизитаГиперссылка.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляХарактеристикПредставлениеРеквизита.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляХарактеристикПредставлениеРеквизитаГиперссылка.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляСерийПредставлениеРеквизита.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляСерийПредставлениеРеквизитаГиперссылка.Имя Тогда
+
+ ВидНастройки = "ПредставлениеРеквизита";
+
+ ИначеЕсли ИмяЭлемента = Элементы.РеквизитыДляКонтроляНоменклатурыВиденСУсловием.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляНоменклатурыДляРазмераЯчейкиВиденСУсловием.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляХарактеристикВиденСУсловием.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляХарактеристикДляРазмераЯчейкиВиденСУсловием.Имя Тогда
+
+ ВидНастройки = "Виден";
+
+ ИначеЕсли ИмяЭлемента = Элементы.РеквизитыДляКонтроляНоменклатурыДоступенСУсловием.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляНоменклатурыДляРазмераЯчейкиДоступенСУсловием.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляХарактеристикДоступенСУсловием.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляХарактеристикДляРазмераЯчейкиДоступенСУсловием.Имя Тогда
+
+ ВидНастройки = "Доступен";
+
+ ИначеЕсли ИмяЭлемента = Элементы.РеквизитыДляКонтроляНоменклатурыЗаполнятьОбязательно.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляНоменклатурыДляРазмераЯчейкиЗаполнятьОбязательно.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляХарактеристикЗаполнятьОбязательно.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляХарактеристикДляРазмераЯчейкиЗаполнятьОбязательно.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляСерийЗаполнятьОбязательно.Имя
+ Или ИмяЭлемента = Элементы.РеквизитыДляКонтроляСерийДляРазмераЯчейкиЗаполнятьОбязательно.Имя Тогда
+
+ ВидНастройки = "ЗаполнятьОбязательно";
+
+ КонецЕсли;
+
+ Возврат ВидНастройки;
+
+КонецФункции
+
+&НаСервере
+Процедура ЗаполнитьЗависимостиРедактируемогоСвойства()
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.ЗависимоеСвойство КАК ЗависимоеСвойство,
+ | ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.НаборСвойств КАК НаборСвойств,
+ | ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.Реквизит КАК Реквизит,
+ | ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.Условие КАК Условие,
+ | ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.Значение КАК Значение
+ |ИЗ
+ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов КАК ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов
+ |ГДЕ
+ | ДополнительныеРеквизитыИСведенияЗависимостиДополнительныхРеквизитов.Ссылка = &Ссылка";
+
+ Запрос.УстановитьПараметр("Ссылка", РедактируемоеСвойство);
+
+ РедактируемоеСвойствоЗависимости.Загрузить(Запрос.Выполнить().Выгрузить());
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаписатьНастройкиСвойства(НастройкиОтбораВХранилище)
+
+ ЗначащаяЧастьИмени = "Номенклатуры";
+
+ Если Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляХарактеристик Тогда
+ ЗначащаяЧастьИмени = "Характеристик";
+ ИначеЕсли Элементы.ГруппаНастройкиСозданияСтраницы.ТекущаяСтраница = Элементы.ГруппаРеквизитыДляКонтроляСерий Тогда
+ ЗначащаяЧастьИмени = "Серий";
+ КонецЕсли;
+
+ ИмяТаблицыРеквизитыДляКонтроля = ИмяТаблицыРеквизитыДляКонтроля(ЗначащаяЧастьИмени);
+
+ ОтборСвойств = Новый Структура("Свойство", РедактируемоеСвойство);
+ СтрокиСвойств = Объект[ИмяТаблицыРеквизитыДляКонтроля].НайтиСтроки(ОтборСвойств);
+
+ Если ЗначащаяЧастьИмени = "Номенклатуры" Тогда
+ НаборСвойств = Объект.НаборСвойств;
+ ИначеЕсли ЗначащаяЧастьИмени = "Характеристик" Тогда
+ НаборСвойств = Объект.НаборСвойствХарактеристик;
+ ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
+ НаборСвойств = Объект.НаборСвойствСерий;
+ Иначе
+ ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определен набор свойств для ""%1""'"), ЗначащаяЧастьИмени);
+ КонецЕсли;
+
+ Если СтрокиСвойств.Количество() > 0 Тогда
+ Если СтрокиСвойств[0].ЭтоОбщийРеквизит Тогда
+ НаборСвойств = ?(ЗначащаяЧастьИмени = "Номенклатуры",
+ УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие"),
+ ?(ЗначащаяЧастьИмени = "Характеристик",
+ УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие"),
+ УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие")));
+ КонецЕсли;
+ КонецЕсли;
+
+ СвойствоОбъект = РедактируемоеСвойство.ПолучитьОбъект();
+
+ Для Каждого КлючЗначение Из НастройкиОтбораВХранилище Цикл
+
+ ОтборСтрок = Новый Структура;
+ ОтборСтрок.Вставить("НаборСвойств", НаборСвойств);
+ ОтборСтрок.Вставить("ЗависимоеСвойство", КлючЗначение.Ключ);
+
+ НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
+
+ Для Каждого СтрМас Из НайденныеСтроки Цикл
+ СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
+ КонецЦикла;
+
+ Если КлючЗначение.Значение <> Неопределено Тогда
+ ДанныеХранилища = КлючЗначение.Значение; // ХранилищеЗначения -
+ ТаблицаНастроек = ДанныеХранилища.Получить();
+
+ Для Каждого СтрТабл Из ТаблицаНастроек Цикл
+ НоваяСтрока = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
+
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрТабл);
+ КонецЦикла;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ СвойствоОбъект.Записать();
+
+ ПриЗаписиНабораДополнительныхРеквизитовИСведенийНаСервере();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ОбновитьРазрезыЦенообразования()
+
+ МассивТекстов = Новый Массив;
+
+ МассивТекстов.Добавить(НСтр("ru = 'Номенклатура'"));
+
+ Если Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.Использовать
+ Или Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
+
+ МассивТекстов.Добавить(НСтр("ru = ', Характеристика'"));
+
+ Если Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
+
+ МассивОписанияРеквизитов = ПолучитьДанныеПоРеквизитамДляКлючаЦен("Характеристики");
+
+ Если МассивОписанияРеквизитов.Количество() Тогда
+
+ МассивТекстов.Добавить(" (");
+ МассивТекстов.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
+ МассивТекстов.Добавить(")");
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Если Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.Использовать
+ Или Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
+
+ МассивТекстов.Добавить(НСтр("ru = ', Серия'"));
+
+ Если Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам Тогда
+
+ МассивОписанияРеквизитов = ПолучитьДанныеПоРеквизитамДляКлючаЦен("Серии");
+
+ Если МассивОписанияРеквизитов.Количество() Тогда
+
+ МассивТекстов.Добавить(" (");
+ МассивТекстов.Добавить(СтрСоединить(МассивОписанияРеквизитов, ", "));
+ МассивТекстов.Добавить(")");
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Если Объект.НастройкиКлючаЦенПоУпаковке = Перечисления.ВариантОтбораДляКлючаЦен.Использовать Тогда
+
+ МассивТекстов.Добавить(НСтр("ru = ', Упаковка'"));
+
+ КонецЕсли;
+
+ Если Объект.РазрезыЦенообразования <> СтрСоединить(МассивТекстов) Тогда
+ Объект.РазрезыЦенообразования = СтрСоединить(МассивТекстов);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Функция ПолучитьДанныеПоРеквизитамДляКлючаЦен(Знач ЗначащаяЧастьИмениНадписи)
+
+ МассивОписанияРеквизитов = Новый Массив;
+
+ Если ЗначащаяЧастьИмениНадписи = "Характеристики" Тогда
+
+ Если Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры Тогда
+
+ Для Каждого Реквизит Из Объект.РеквизитыХарактеристикДляКлючаЦен Цикл
+ МассивОписанияРеквизитов.Добавить(Строка(Реквизит.ПредставлениеРеквизита));
+ КонецЦикла;
+
+ ИначеЕсли Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатурыРеквизитыХарактеристикДляКлючаЦен.Ссылка,
+ | ВидыНоменклатурыРеквизитыХарактеристикДляКлючаЦен.ПредставлениеРеквизита
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.РеквизитыХарактеристикДляКлючаЦен КАК ВидыНоменклатурыРеквизитыХарактеристикДляКлючаЦен
+ |ГДЕ
+ | ВидыНоменклатурыРеквизитыХарактеристикДляКлючаЦен.Ссылка = &ВидНоменклатуры";
+
+ Запрос.УстановитьПараметр("ВидНоменклатуры", Объект.ВладелецХарактеристик);
+
+ ТаблицаРезультатаЗапроса = Запрос.Выполнить().Выгрузить();
+
+ МассивОписанияРеквизитов = ТаблицаРезультатаЗапроса.ВыгрузитьКолонку("ПредставлениеРеквизита");
+
+ КонецЕсли;
+ ИначеЕсли ЗначащаяЧастьИмениНадписи = "Серии" Тогда
+
+ Если Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+
+ Для Каждого Реквизит Из Объект.РеквизитыСерийДляКлючаЦен Цикл
+ МассивОписанияРеквизитов.Добавить(Строка(Реквизит.ПредставлениеРеквизита));
+ КонецЦикла;
+
+ Иначе
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВидыНоменклатурыРеквизитыСерийДляКлючаЦен.Ссылка,
+ | ВидыНоменклатурыРеквизитыСерийДляКлючаЦен.ПредставлениеРеквизита
+ |ИЗ
+ | Справочник.ВидыНоменклатуры.РеквизитыСерийДляКлючаЦен КАК ВидыНоменклатурыРеквизитыСерийДляКлючаЦен
+ |ГДЕ
+ | ВидыНоменклатурыРеквизитыСерийДляКлючаЦен.Ссылка = &ВидНоменклатуры";
+
+ Запрос.УстановитьПараметр("ВидНоменклатуры", Объект.ВладелецСерий);
+
+ ТаблицаРезультатаЗапроса = Запрос.Выполнить().Выгрузить();
+
+ МассивОписанияРеквизитов = ТаблицаРезультатаЗапроса.ВыгрузитьКолонку("ПредставлениеРеквизита");
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Возврат МассивОписанияРеквизитов;
+
+КонецФункции
+
+&НаСервере
+Процедура КодТНВЭДПриИзмененииСервер()
+
+ Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.КодТНВЭД, "ПрослеживаемыйТовар") Тогда
+ Объект.ВестиУчетПоГТД = Истина;
+ КонецЕсли;
+
+ НастроитьПодсказкуПоляКлассификатора(Элементы.КодТНВЭД.Имя, Объект.КодТНВЭД);
+
+КонецПроцедуры
+
+&НаСервере
+Функция НаборСвойствПоИмени(ИмяНабора)
+
+ Возврат УправлениеСвойствами.НаборСвойствПоИмени(ИмяНабора);
+
+КонецФункции
+
+&НаКлиентеНаСервереБезКонтекста
+Функция ИмяТаблицыРеквизитыДляКонтроля(ЗначащаяЧастьИмени)
+
+ Если ЗначащаяЧастьИмени = "Номенклатуры" Тогда
+ Возврат "РеквизитыДляКонтроляНоменклатуры";
+ ИначеЕсли ЗначащаяЧастьИмени = "Характеристик" Тогда
+ Возврат "РеквизитыДляКонтроляХарактеристик";
+ ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
+ Возврат "РеквизитыДляКонтроляСерий";
+ Иначе
+ ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определено имя таблицы реквизитов контроля для %1'"), ЗначащаяЧастьИмени);
+ КонецЕсли;
+
+КонецФункции
+
+&НаКлиентеНаСервереБезКонтекста
+Функция ИмяРеквизитаЗапретРедактированияНаименования(ИмяРеквизитаШаблонНаименования)
+
+ Если ИмяРеквизитаШаблонНаименования = "ШаблонНаименованияДляПечатиНоменклатуры" Тогда
+ Возврат "ЗапретРедактированияНаименованияДляПечатиНоменклатуры";
+ ИначеЕсли ИмяРеквизитаШаблонНаименования = "ШаблонНаименованияДляПечатиХарактеристики" Тогда
+ Возврат "ЗапретРедактированияНаименованияДляПечатиХарактеристики";
+ ИначеЕсли ИмяРеквизитаШаблонНаименования = "ШаблонРабочегоНаименованияНоменклатуры" Тогда
+ Возврат "ЗапретРедактированияРабочегоНаименованияНоменклатуры";
+ ИначеЕсли ИмяРеквизитаШаблонНаименования = "ШаблонРабочегоНаименованияХарактеристики" Тогда
+ Возврат "ЗапретРедактированияРабочегоНаименованияХарактеристики";
+ КонецЕсли;
+
+ Возврат "";
+
+КонецФункции
+
+&НаКлиентеНаСервереБезКонтекста
+Функция ИмяРеквизитаВладельца(ЗначащаяЧастьИмени)
+
+ Если ЗначащаяЧастьИмени = "Характеристик" Тогда
+ Возврат "ВладелецХарактеристик";
+ ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
+ Возврат "ВладелецСерий";
+ ИначеЕсли ЗначащаяЧастьИмени = "ТоварныхКатегорий" Тогда
+ Возврат "ВладелецТоварныхКатегорий";
+ Иначе
+ ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определено имя реквизита-владельца для %1'"), ЗначащаяЧастьИмени);
+ КонецЕсли;
+
+КонецФункции
+
+&НаКлиентеНаСервереБезКонтекста
+Функция ИмяСпискаВидыНоменклатурыСТемЖеВладельцем(ЗначащаяЧастьИмени)
+
+ Если ЗначащаяЧастьИмени = "Характеристик" Тогда
+ Возврат "ВидыНоменклатурыСТемЖеВладельцемХарактеристик";
+ ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
+ Возврат "ВидыНоменклатурыСТемЖеВладельцемСерий";
+ ИначеЕсли ЗначащаяЧастьИмени = "ТоварныхКатегорий" Тогда
+ Возврат "ВидыНоменклатурыСТемЖеВладельцемТоварныхКатегорий";
+ Иначе
+ ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определено имя списка видов номенклатуры с тем же владельцем для %1'"), ЗначащаяЧастьИмени);
+ КонецЕсли;
+
+КонецФункции
+
+&НаКлиентеНаСервереБезКонтекста
+Функция ИмяРеквизитаОтборВладельца(ЗначащаяЧастьИмени)
+
+ Если ЗначащаяЧастьИмени = "Характеристик" Тогда
+ Возврат "ОтборВладельцаХарактеристик";
+ ИначеЕсли ЗначащаяЧастьИмени = "Серий" Тогда
+ Возврат "ОтборВладельцаСерий";
+ ИначеЕсли ЗначащаяЧастьИмени = "ТоварныхКатегорий" Тогда
+ Возврат "ОтборВладельцаТоварныхКатегорий";
+ Иначе
+ ВызватьИсключение СтрШаблон(НСтр("ru = 'Не определено имя реквизита отбора владельца %1'"), ЗначащаяЧастьИмени);
+ КонецЕсли;
+
+КонецФункции
+
+&НаСервере
+Процедура АктуализироватьНастройкиДопРеквизитовДляКонтроляПриЗаписи(ТекущийОбъект, НазначениеДопРеквзитов)
+
+ КолонкиОтбора = "ЭтоДопРеквизит, Свойство";
+ ЗаполняемыеКолонки = "ЗаполнятьОбязательно, ОтображатьПриСоздании, ДоступностьУникален,
+ |ДоступностьЗаполнятьОбязательно, ДоступностьОтображатьПриСоздании";
+
+ Если НазначениеДопРеквзитов = "Номенклатура" Тогда
+ РеквизитыДляКонтроля = ТекущийОбъект.РеквизитыДляКонтроляНоменклатуры;
+ АктуальныеРеквизиты = Объект.РеквизитыДляКонтроляНоменклатуры;
+ ИначеЕсли НазначениеДопРеквзитов = "ХарактеристикиНоменклатуры" Тогда
+ РеквизитыДляКонтроля = ТекущийОбъект.РеквизитыДляКонтроляХарактеристик;
+ АктуальныеРеквизиты = Объект.РеквизитыДляКонтроляХарактеристик;
+ ИначеЕсли НазначениеДопРеквзитов = "СерииНоменклатуры" Тогда
+ РеквизитыДляКонтроля = ТекущийОбъект.РеквизитыДляКонтроляСерий;
+ АктуальныеРеквизиты = Объект.РеквизитыДляКонтроляСерий;
+ ЗаполняемыеКолонки = "ЗаполнятьОбязательно, ДоступностьЗаполнятьОбязательно";
+ КонецЕсли;
+
+ ТаблицаРеквизитов = РеквизитыДляКонтроля.Выгрузить();
+ ТаблицаРеквизитов.Индексы.Добавить(КолонкиОтбора);
+
+ ОтборРеквизитов = Новый Структура("ЭтоДопРеквизит", Истина);
+ ДополнительныеРеквизиты = АктуальныеРеквизиты.НайтиСтроки(ОтборРеквизитов);
+
+ ОтборСтрок = Новый Структура(КолонкиОтбора);
+
+ Для Каждого ДопРеквизит Из ДополнительныеРеквизиты Цикл
+ ЗаполнитьЗначенияСвойств(ОтборСтрок, ДопРеквизит);
+
+ НайденныеСтроки = ТаблицаРеквизитов.НайтиСтроки(ОтборСтрок);
+
+ Если НайденныеСтроки.Количество() > 0 Тогда
+ ЗаполнитьЗначенияСвойств(НайденныеСтроки[0], ДопРеквизит, ЗаполняемыеКолонки);
+ КонецЕсли;
+ КонецЦикла;
+
+ РеквизитыДляКонтроля.Загрузить(ТаблицаРеквизитов);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаписатьСвойстваДопРеквизитов(НазначениеДопРеквзитов, Отказ)
+
+ МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
+
+ Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, НазначениеДопРеквзитов, МенеджерВременныхТаблиц);
+
+ Запрос = Новый Запрос;
+ Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | РеквизитыДляКонтроля.Свойство КАК Свойство,
+ | РеквизитыДляКонтроля.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно,
+ | РеквизитыДляКонтроля.ЭтоОбщийРеквизит КАК ЭтоОбщийРеквизит
+ |ПОМЕСТИТЬ РеквизитыДляКонтроля
+ |ИЗ
+ | &РеквизитыДляКонтроля КАК РеквизитыДляКонтроля
+ |;
+ |
+ |//////////////////////////////////////////////////////////////////////////////// 1
+ |ВЫБРАТЬ
+ | ВложенныйЗапрос.Свойство КАК Свойство,
+ | ВложенныйЗапрос.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно,
+ | ВложенныйЗапрос.ЭтоОбщийРеквизит КАК ЭтоОбщийРеквизит
+ |ПОМЕСТИТЬ ИзменяемыеСвойства
+ |ИЗ
+ | (ВЫБРАТЬ
+ | РеквизитыДляКонтроля.Свойство КАК Свойство,
+ | РеквизитыДляКонтроля.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно,
+ | РеквизитыДляКонтроля.ЭтоОбщийРеквизит КАК ЭтоОбщийРеквизит,
+ | 1 КАК Контроль
+ | ИЗ
+ | РеквизитыДляКонтроля КАК РеквизитыДляКонтроля
+ |
+ | ОБЪЕДИНИТЬ ВСЕ
+ |
+ | ВЫБРАТЬ
+ | ВТРеквизитыДляКонтроля.Свойство КАК Свойство,
+ | ВТРеквизитыДляКонтроля.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно,
+ | ВТРеквизитыДляКонтроля.ЭтоОбщийРеквизит КАК ЭтоОбщийРеквизит,
+ | -1 КАК Контроль
+ | ИЗ
+ | ВТВсеДополнительныеРеквизиты КАК ВТРеквизитыДляКонтроля) КАК ВложенныйЗапрос
+ |
+ |СГРУППИРОВАТЬ ПО
+ | ВложенныйЗапрос.Свойство,
+ | ВложенныйЗапрос.ЗаполнятьОбязательно,
+ | ВложенныйЗапрос.ЭтоОбщийРеквизит
+ |
+ |ИМЕЮЩИЕ
+ | СУММА(ВложенныйЗапрос.Контроль) > 0
+ |;
+ |
+ |//////////////////////////////////////////////////////////////////////////////// 2
+ |ВЫБРАТЬ
+ | НаборыДопРеквизитов.Ссылка КАК НаборСвойств,
+ | ИзменяемыеСвойства.Свойство КАК Свойство,
+ | ВидыНоменклатуры.Ссылка КАК ВидНоменклатуры
+ |ИЗ
+ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК НаборыДопРеквизитов
+ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИзменяемыеСвойства КАК ИзменяемыеСвойства
+ | ПО НаборыДопРеквизитов.Свойство = ИзменяемыеСвойства.Свойство
+ |
+ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
+ | ПО (НаборыДопРеквизитов.Ссылка = ВидыНоменклатуры.НаборСвойств
+ | ИЛИ НаборыДопРеквизитов.Ссылка = ВидыНоменклатуры.НаборСвойствХарактеристик
+ | ИЛИ НаборыДопРеквизитов.Ссылка = ВидыНоменклатуры.НаборСвойствСерий)
+ |ГДЕ
+ | НаборыДопРеквизитов.Ссылка <> &ТекущийНабор
+ |;
+ |
+ |//////////////////////////////////////////////////////////////////////////////// 2
+ |ВЫБРАТЬ
+ | РеквизитыДляКонтроля.Свойство КАК Свойство,
+ | РеквизитыДляКонтроля.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно,
+ | РеквизитыДляКонтроля.ЭтоОбщийРеквизит КАК ЭтоОбщийРеквизит
+ |ИЗ
+ | РеквизитыДляКонтроля КАК РеквизитыДляКонтроля
+ | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов КАК ЗависимостиДополнительныхРеквизитов
+ | ПО РеквизитыДляКонтроля.Свойство = ЗависимостиДополнительныхРеквизитов.Ссылка
+ | И ЗависимостиДополнительныхРеквизитов.Условие = ""НеРавно""
+ | И ЗависимостиДополнительныхРеквизитов.НаборСвойств = &ТекущийНабор
+ | И ЗависимостиДополнительныхРеквизитов.Значение = &ВидНоменклатуры
+ | И ЗависимостиДополнительныхРеквизитов.Реквизит = ""ВидНоменклатуры""
+ | И ЗависимостиДополнительныхРеквизитов.ЗависимоеСвойство ПОДОБНО ""ЗаполнятьОбязательно""
+ |
+ | ЛЕВОЕ СОЕДИНЕНИЕ ИзменяемыеСвойства КАК ИзменяемыеСвойства
+ | ПО РеквизитыДляКонтроля.Свойство = ИзменяемыеСвойства.Свойство
+ |
+ |ГДЕ
+ | НЕ РеквизитыДляКонтроля.ЭтоОбщийРеквизит
+ | И НЕ РеквизитыДляКонтроля.ЗаполнятьОбязательно
+ | И ИзменяемыеСвойства.Свойство ЕСТЬ NULL
+ | И ЗависимостиДополнительныхРеквизитов.Ссылка ЕСТЬ NULL";
+
+ Если НазначениеДопРеквзитов = "Номенклатура" Тогда
+ РеквизитыДляКонтроля = Объект.РеквизитыДляКонтроляНоменклатуры;
+ НаборСвойств = Объект.НаборСвойств;
+ ОбщийНабор = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие");
+ ИначеЕсли НазначениеДопРеквзитов = "ХарактеристикиНоменклатуры" Тогда
+ РеквизитыДляКонтроля = Объект.РеквизитыДляКонтроляХарактеристик;
+ НаборСвойств = Объект.НаборСвойствХарактеристик;
+ ОбщийНабор = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_ХарактеристикиНоменклатуры_Общие");
+ ИначеЕсли НазначениеДопРеквзитов = "СерииНоменклатуры" Тогда
+ РеквизитыДляКонтроля = Объект.РеквизитыДляКонтроляСерий;
+ НаборСвойств = Объект.НаборСвойствСерий;
+ ОбщийНабор = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_СерииНоменклатуры_Общие");
+ КонецЕсли;
+
+ ОтборСтрок = Новый Структура("ЭтоДопРеквизит", Истина);
+
+ Запрос.УстановитьПараметр("РеквизитыДляКонтроля", РеквизитыДляКонтроля.Выгрузить(ОтборСтрок));
+ Запрос.УстановитьПараметр("ТекущийНабор", НаборСвойств);
+ Запрос.УстановитьПараметр("ВидНоменклатуры", Объект.Ссылка);
+
+ Результаты = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
+
+ ВыборкаПоСвойствам = Результаты[1].Выбрать();
+
+ НаборыСвойств = Результаты[2].Выгрузить(); // ТаблицаЗначений
+ НаборыСвойств.Индексы.Добавить("Свойство");
+
+ Пока ВыборкаПоСвойствам.Следующий() Цикл
+
+ СвойствоОбъект = ВыборкаПоСвойствам.Свойство.ПолучитьОбъект(); // ПланВидовХарактеристикОбъект.ДополнительныеРеквизитыИСведения
+
+ Если ВыборкаПоСвойствам.ЭтоОбщийРеквизит Тогда
+
+ ОтборСтрок = Новый Структура;
+ ОтборСтрок.Вставить("ЗависимоеСвойство", "ЗаполнятьОбязательно");
+ ОтборСтрок.Вставить("НаборСвойств", ОбщийНабор);
+ ОтборСтрок.Вставить("Реквизит", "ВидНоменклатуры");
+ ОтборСтрок.Вставить("Значение", Объект.Ссылка);
+
+ НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
+
+ Если ВыборкаПоСвойствам.ЗаполнятьОбязательно Тогда
+
+ СвойствоОбъект.ЗаполнятьОбязательно = Истина;
+
+ Если НайденныеСтроки.Количество() = 0 Тогда
+ СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
+ СтрокаТЧ.ЗависимоеСвойство = "ЗаполнятьОбязательно";
+ СтрокаТЧ.НаборСвойств = ОбщийНабор;
+ СтрокаТЧ.Реквизит = "ВидНоменклатуры";
+ СтрокаТЧ.Значение = Объект.Ссылка;
+ Иначе
+ СтрокаТЧ = НайденныеСтроки[0];
+ КонецЕсли;
+
+ СтрокаТЧ.Условие = "ВСписке";
+
+ Иначе
+
+ Для Каждого СтрМас Из НайденныеСтроки Цикл
+ СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
+ КонецЦикла;
+
+ ОтборСтрок = Новый Структура;
+ ОтборСтрок.Вставить("ЗависимоеСвойство", "ЗаполнятьОбязательно");
+ ОтборСтрок.Вставить("НаборСвойств", ОбщийНабор);
+ ОтборСтрок.Вставить("Реквизит", "ВидНоменклатуры");
+
+ НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
+
+ Если НайденныеСтроки.Количество() = 0 Тогда
+ СвойствоОбъект.ЗаполнятьОбязательно = Ложь;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Иначе
+
+ Если ВыборкаПоСвойствам.ЗаполнятьОбязательно Тогда
+
+ Если Не СвойствоОбъект.ЗаполнятьОбязательно Тогда
+
+ ОтборСтрок = Новый Структура;
+ ОтборСтрок.Вставить("ЗависимоеСвойство", "ЗаполнятьОбязательно");
+ ОтборСтрок.Вставить("Реквизит", "ВидНоменклатуры");
+
+ НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
+
+ Для Каждого СтрМас Из НайденныеСтроки Цикл
+ СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
+ КонецЦикла;
+
+ ОтборСтрок = Новый Структура("Свойство", ВыборкаПоСвойствам.Свойство);
+ НайденныеСтроки = НаборыСвойств.НайтиСтроки(ОтборСтрок);
+
+ Для Каждого СтрТабл Из НайденныеСтроки Цикл
+ Если СтрТабл.ВидНоменклатуры = Объект.Ссылка Тогда
+ Продолжить;
+ КонецЕсли;
+
+ СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
+ СтрокаТЧ.ЗависимоеСвойство = "ЗаполнятьОбязательно";
+ СтрокаТЧ.НаборСвойств = СтрТабл.НаборСвойств;
+ СтрокаТЧ.Реквизит = "ВидНоменклатуры";
+ СтрокаТЧ.Значение = СтрТабл.ВидНоменклатуры;
+ СтрокаТЧ.Условие = "НеРавно";
+ КонецЦикла;
+
+ СвойствоОбъект.ЗаполнятьОбязательно = Истина;
+
+ КонецЕсли;
+
+ ОтборСтрок = Новый Структура;
+ ОтборСтрок.Вставить("ЗависимоеСвойство", "ЗаполнятьОбязательно");
+ ОтборСтрок.Вставить("НаборСвойств", НаборСвойств);
+ ОтборСтрок.Вставить("Реквизит", "ВидНоменклатуры");
+
+ НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
+
+ Если НайденныеСтроки.Количество() > 0 Тогда
+ СтрокаТЧ = НайденныеСтроки[0];
+ Иначе
+ СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
+ КонецЕсли;
+
+ СтрокаТЧ.ЗависимоеСвойство = "ЗаполнятьОбязательно";
+ СтрокаТЧ.НаборСвойств = НаборСвойств;
+ СтрокаТЧ.Реквизит = "ВидНоменклатуры";
+ СтрокаТЧ.Значение = Объект.Ссылка;
+ СтрокаТЧ.Условие = "Равно";
+
+ Иначе
+
+ ЕстьРеквизитГдеНаборИспользуется = Ложь;
+ СтрокаПоТекущемуНаборуУжеЕсть = Ложь;
+
+ Для Каждого СтрТабл Из СвойствоОбъект.ЗависимостиДополнительныхРеквизитов Цикл
+
+ Если СтрТабл.ЗависимоеСвойство = "ЗаполнятьОбязательно"
+ И СтрТабл.НаборСвойств <> НаборСвойств
+ И СтрТабл.Реквизит = "ВидНоменклатуры"
+ И СтрТабл.Условие = "Равно" Тогда
+
+ ЕстьРеквизитГдеНаборИспользуется = Истина;
+
+ ИначеЕсли СтрТабл.ЗависимоеСвойство = "ЗаполнятьОбязательно"
+ И СтрТабл.НаборСвойств = НаборСвойств
+ И СтрТабл.Реквизит = "ВидНоменклатуры" Тогда
+
+ СтрокаПоТекущемуНаборуУжеЕсть = Истина;
+
+ СтрТабл.Условие = "НеРавно";
+ СтрТабл.Значение = Объект.Ссылка;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если Не ЕстьРеквизитГдеНаборИспользуется Тогда
+
+ СвойствоОбъект.ЗаполнятьОбязательно = Ложь;
+
+ ОтборСтрок = Новый Структура;
+ ОтборСтрок.Вставить("ЗависимоеСвойство", "ЗаполнятьОбязательно");
+ ОтборСтрок.Вставить("Реквизит", "ВидНоменклатуры");
+
+ НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
+
+ Для Каждого СтрМас Из НайденныеСтроки Цикл
+ СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
+ КонецЦикла;
+
+ ИначеЕсли Не СтрокаПоТекущемуНаборуУжеЕсть Тогда
+
+ СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
+ СтрокаТЧ.ЗависимоеСвойство = "ЗаполнятьОбязательно";
+ СтрокаТЧ.НаборСвойств = НаборСвойств;
+ СтрокаТЧ.Реквизит = "ВидНоменклатуры";
+ СтрокаТЧ.Значение = Объект.Ссылка;
+ СтрокаТЧ.Условие = "НеРавно";
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ СвойствоОбъект.Записать();
+
+ КонецЦикла;
+
+ ВыборкаПоСвойствам = Результаты[3].Выбрать();
+
+ Пока ВыборкаПоСвойствам.Следующий() Цикл
+
+ СвойствоОбъект = ВыборкаПоСвойствам.Свойство.ПолучитьОбъект(); // ПланВидовХарактеристикОбъект.ДополнительныеРеквизитыИСведения
+
+ ЕстьРеквизитГдеНаборИспользуется = Ложь;
+
+ Для Каждого СтрТабл Из СвойствоОбъект.ЗависимостиДополнительныхРеквизитов Цикл
+
+ Если СтрТабл.ЗависимоеСвойство = "ЗаполнятьОбязательно"
+ И СтрТабл.НаборСвойств <> НаборСвойств
+ И СтрТабл.Реквизит = "ВидНоменклатуры"
+ И СтрТабл.Условие = "Равно" Тогда
+
+ ЕстьРеквизитГдеНаборИспользуется = Истина;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если Не ЕстьРеквизитГдеНаборИспользуется Тогда
+
+ СвойствоОбъект.ЗаполнятьОбязательно = Ложь;
+
+ ОтборСтрок = Новый Структура;
+ ОтборСтрок.Вставить("ЗависимоеСвойство", "ЗаполнятьОбязательно");
+ ОтборСтрок.Вставить("Реквизит", "ВидНоменклатуры");
+
+ НайденныеСтроки = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
+
+ Для Каждого СтрМас Из НайденныеСтроки Цикл
+ СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Удалить(СтрМас);
+ КонецЦикла;
+
+ Иначе
+
+ СтрокаТЧ = СвойствоОбъект.ЗависимостиДополнительныхРеквизитов.Добавить();
+ СтрокаТЧ.ЗависимоеСвойство = "ЗаполнятьОбязательно";
+ СтрокаТЧ.НаборСвойств = НаборСвойств;
+ СтрокаТЧ.Реквизит = "ВидНоменклатуры";
+ СтрокаТЧ.Значение = Объект.Ссылка;
+ СтрокаТЧ.Условие = "НеРавно";
+
+ КонецЕсли;
+
+ СвойствоОбъект.Записать();
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+// Устанавливает настройки свойств расширенной подсказки поля классификатора.
+//
+// Параметры:
+// ИмяЭлемента - Строка - имя поля элемента классификатора.
+// ДанныеКлассификатора - ЛюбаяСсылка, Строка - данные классификатора. Для кода классификатора ссылочного типа,
+// в качестве параметра передается его значение, в противном случае
+// строковое наименование значения.
+//
+&НаСервере
+Процедура НастроитьПодсказкуПоляКлассификатора(ИмяЭлемента, ДанныеКлассификатора)
+
+ Если Не Элементы[ИмяЭлемента].Видимость Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТипДанныхСтрока = ТипЗнч(ДанныеКлассификатора) = Тип("Строка");
+ КодУказан = ?(ТипДанныхСтрока, ПустаяСтрока(ДанныеКлассификатора), ДанныеКлассификатора.Пустая());
+
+ Если КодУказан Тогда
+ Элементы[ИмяЭлемента].ОтображениеПодсказки = ОтображениеПодсказки.Авто;
+ Элементы[ИмяЭлемента].РасширеннаяПодсказка.Заголовок = "";
+ Иначе
+ НаименованиеПоКлассификатору = ?(ТипДанныхСтрока,
+ ДанныеКлассификатора,
+ ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеКлассификатора, "Наименование"));
+
+ Элементы[ИмяЭлемента].ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
+ Элементы[ИмяЭлемента].РасширеннаяПодсказка.Заголовок = НаименованиеПоКлассификатору;
+ КонецЕсли;
+
+КонецПроцедуры
+
+//++ Локализация
+#Область НастройкаИнтеграцииСФГИС
+
+&НаКлиенте
+Процедура НастройкаИнтеграцииСФГИСЗавершение(Результат, ДополнительныеПараметры) Экспорт
+
+ Если Результат <> Неопределено Тогда
+ КлючВидовПродукции = Результат.КлючВидовПродукции;
+ ПриИзмененииКлючаВидовПродукции();
+ Модифицированность = Истина;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриИзмененииКлючаВидовПродукции()
+
+ ИнтеграцияИС.ЗаполнитьДанныеПоКлючуВидовПродукции(ЭтотОбъект);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаписатьКлючВидовПродукции(Ссылка)
+
+ Блокировка = Новый БлокировкаДанных;
+ ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОписаниеНоменклатурыИС");
+ ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
+ ЭлементБлокировки.УстановитьЗначение("Номенклатура", Ссылка);
+
+ НачатьТранзакцию();
+
+ Попытка
+
+ Блокировка.Заблокировать();
+
+ Запись = РегистрыСведений.ОписаниеНоменклатурыИС.СоздатьМенеджерЗаписи();
+ Запись.Номенклатура = Ссылка;
+ Запись.Прочитать();
+ Если Не Запись.Выбран() Тогда
+ Запись.Номенклатура = Ссылка;
+ Запись.ВариантИспользованияЕдиницыХранения = Перечисления.ВариантыИспользованияЕдиницыХраненияИС.ПотребительскаяУпаковка;
+ Запись.КоличествоВПотребительскойУпаковке = 1;
+ КонецЕсли;
+ Запись.КлючВидовПродукции = КлючВидовПродукции;
+ Если ЗначениеЗаполнено(Запись.КлючВидовПродукции) Тогда
+ Запись.Записать();
+ Иначе
+ Запись.Удалить();
+ КонецЕсли;
+
+ ЗафиксироватьТранзакцию();
+
+ Исключение
+ ОтменитьТранзакцию();
+ ВызватьИсключение;
+
+ КонецПопытки;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура НастроитьДоступныеРеквизитыСерий()
+
+ Элементы.ГруппаРеквизитыЛокализацииСерий.Видимость = Истина;
+ // Устаревшие (только включенные)
+ Элементы.ИспользоватьНомерКИЗГИСМСерии.Видимость = Объект.ИспользоватьНомерКИЗГИСМСерии;
+ Элементы.ИспользоватьСправку2ЕГАИССерии.Видимость = Объект.ИспользоватьСправку2ЕГАИССерии;
+ Элементы.ИспользоватьЗаписьСкладскогоЖурналаВЕТИССерии.Видимость = Объект.ИспользоватьЗаписьСкладскогоЖурналаВЕТИССерии;
+ // По подсистемам
+ Элементы.ИспользоватьПроизводителяЕГАИССерии.Видимость = ИспользуетсяПодсистемаЕГАИС;
+ Элементы.ИспользоватьПроизводителяВЕТИССерии.Видимость = ИспользуетсяПодсистемаВЕТИС;
+ Элементы.ИспользоватьИдентификаторПартииВЕТИССерии.Видимость = ИспользуетсяПодсистемаВЕТИС;
+ Элементы.ИспользоватьМРЦМОТПСерии.Видимость = ИспользуетсяПодсистемаГИСМТ;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаполнитьКлючВидовПродукции()
+
+ Данные = ОбщегоНазначенияИС.ОписаниеНоменклатуры(Объект.Ссылка)[Объект.Ссылка];
+ Если Данные = Неопределено Тогда
+ КлючВидовПродукции = Неопределено;
+ Иначе
+ КлючВидовПродукции = Данные.КлючВидовПродукции;
+ КонецЕсли;
+
+ ТребуетсяОбновлениеКлассификатораВидовПродукции = Не ЗначениеЗаполнено(КлючВидовПродукции)
+ И Данные.ИдентификаторыВидовПродукции <> Неопределено;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ПослеЗагрузкиКлассификаторов(Результат, ДополнительныеПараметры) Экспорт
+
+ Прочитать();
+
+КонецПроцедуры
+
+#КонецОбласти
+//-- Локализация
+
+#КонецОбласти
+
+#Область Локализация
+
+&НаСервере
+Процедура ПриСозданииНаСервереЛокализация()
+
+ //++ Локализация
+
+ // ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+ ДополнительныеПараметры = Новый Структура;
+ ДополнительныеПараметры.Вставить("РежимПредставленияОбъектаСервиса", "Гиперссылка");
+ РаботаСНоменклатурой.ПриСозданииНаСервереФормаВидаНоменклатуры(ЭтотОбъект, Объект.Ссылка, Элементы.ГруппаРаботаСНоменклатурой, ДополнительныеПараметры);
+ // Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+ НаименованиеОКВЭД2 = НаименованиеОКВЭД2(Объект.КодОКВЭД2);
+ ИнтерактивнаяЗагрузкаКлассификаторовДоступна = РаботаСКлассификаторами.ИнтерактивнаяЗагрузкаКлассификаторовДоступна();
+
+ //-- Локализация
+
+ Возврат;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриЗаписиНаСервереЛокализация(Отказ, ТекущийОбъект)
+
+ //++ Локализация
+
+ // ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+ РаботаСНоменклатурой.ПриЗаписиНаСервереФормаВидаНоменклатуры(ЭтотОбъект, ТекущийОбъект, Отказ);
+ // Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+ ЗаписатьКлючВидовПродукции(ТекущийОбъект.Ссылка);
+
+ //-- Локализация
+
+ Возврат;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ОбработкаПроверкиЗаполненияНаСервереЛокализация(Отказ, ПроверяемыеРеквизиты)
+
+ //++ Локализация
+
+ // ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+ РаботаСНоменклатурой.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
+ // Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+ //-- Локализация
+
+ Возврат;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура НастроитьФормуЛокализация(ВидимостьЭлементов)
+
+ //++ Локализация
+ БазоваяВерсия = ПолучитьФункциональнуюОпцию("БазоваяВерсия");
+
+ Элементы.ГруппаНаименованиеДляПечатиТТН.ТолькоПросмотр = Не ЕстьПравоРедактирования;
+
+ Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямЕстьОрдерныеСклады.Видимость =
+ Элементы.НадписьЕстьОтборПолитикиПоУчетуОстатковПоСериямЕстьОрдерныеСклады.Видимость;
+
+ Элементы.ВестиУчетПоГТД.Заголовок = НоменклатураЛокализация.ЗаголовокВестиУчетПоГТД();
+
+ #Область ТТН
+ ВидимостьНаименованийДляТТН = ПолучитьФункциональнуюОпцию("ИспользоватьТТН")
+ И (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар
+ Или Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
+
+ Элементы.ИспользоватьОбщееНаименованиеДляПечати.Видимость = ВидимостьНаименованийДляТТН;
+ Элементы.ОбщееНаименованиеДляПечати.Видимость = ВидимостьНаименованийДляТТН;
+ Элементы.ИспользоватьИндивидуальноеНаименование.Видимость = ВидимостьНаименованийДляТТН;
+ Элементы.НаименованиеДляПечати.Видимость = ВидимостьНаименованийДляТТН;
+ Элементы.ГруппаНаименованиеДляПечатиТТНЗаголовок.Видимость = ВидимостьНаименованийДляТТН;
+ #КонецОбласти
+
+ НоменклатураЛокализация.НастроитьПодсказкиПолейКлассификаторов(ЭтотОбъект, ВидимостьЭлементов);
+ //-- Локализация
+
+КонецПроцедуры
+
+//++ Локализация
+#Область РаботаСНоменклатуройПодключаемыеКоманды
+
+// ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+&НаКлиенте
+Процедура Подключаемый_НачалоВыбораРаботаСНоменклатурой(Элемент, ДанныеВыбора, СтандартнаяОбработка)
+
+ РаботаСНоменклатуройКлиент.ВыбратьОбъектСервиса(ЭтотОбъект, Элемент, СтандартнаяОбработка, Ложь,
+ Новый ОписаниеОповещения("ЗакрытиеФормыВыбораОбъектаСервиса", ЭтотОбъект, Новый Структура));
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ОчисткаРаботаСНоменклатурой(Элемент, СтандартнаяОбработка)
+
+ РаботаСНоменклатуройКлиент.НажатиеОчиститьКатегорию(ЭтотОбъект);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_НажатиеРежимОбновленияРаботаСНоменклатурой(Элемент)
+
+ РаботаСНоменклатуройКлиент.НажатиеРежимОбновления(ЭтотОбъект, ПодготовитьДанныеФормы(),
+ Новый ОписаниеОповещения("ЗакрытиеФормыЗаполненияОбъекта", ЭтотОбъект));
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ОткрытьРаботаСНоменклатурой(Элемент, СтандартнаяОбработка)
+
+ РаботаСНоменклатуройКлиент.ОткрытьКарточкуОбъектаСервиса(ЭтотОбъект, Элемент, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_НажатиеРаботаСНоменклатурой(Элемент, СтандартнаяОбработка)
+
+ РаботаСНоменклатуройКлиент.НажатиеГиперссылки(ЭтотОбъект, Элемент, СтандартнаяОбработка,
+ Новый ОписаниеОповещения("ЗакрытиеФормыВыбораОбъектаСервиса", ЭтотОбъект, Новый Структура));
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ОбработкаНавигационнойСсылкиРаботаСНоменклатурой(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
+
+ РаботаСНоменклатуройКлиент.НажатиеГиперссылки(ЭтотОбъект, Элемент, СтандартнаяОбработка,
+ Новый ОписаниеОповещения("ЗакрытиеФормыВыбораОбъектаСервиса", ЭтотОбъект, Новый Структура));
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ЗакрытиеФормыВыбораОбъектаСервиса(ДанныеОбъекта, ДополнительныеПараметры) Экспорт
+
+ РаботаСНоменклатуройКлиент.ОбработкаОповещенияЗакрытиеФормыВыбора(
+ ДанныеОбъекта, ДополнительныеПараметры, ПодготовитьДанныеФормы(),
+ Новый ОписаниеОповещения("ЗакрытиеФормыЗаполненияОбъекта", ЭтотОбъект));
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ЗакрытиеФормыЗаполненияОбъекта(ПараметрыЗакрытияФормы, ДополнительныеПараметры) Экспорт
+
+ ЗаполнитьРеквизитыФормы(ПараметрыЗакрытияФормы);
+
+КонецПроцедуры
+
+&НаСервере
+Функция ПодготовитьДанныеФормы()
+
+ Возврат РаботаСНоменклатурой.ПодготовитьДанныеДляИнтерактивногоЗаполнения(ЭтотОбъект);
+
+КонецФункции
+
+&НаСервере
+Процедура ЗаполнитьРеквизитыФормы(ПараметрыЗакрытияФормы)
+
+ РаботаСНоменклатурой.ЗаполнитьРеквизитыФормы(ЭтотОбъект, ПараметрыЗакрытияФормы);
+
+ НастроитьФорму();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПерезаполнитьИдентификаторыКатегорий()
+
+ РаботаСНоменклатурой.ПерезаполнитьВстроенныеРеквизиты(ЭтотОбъект);
+
+КонецПроцедуры
+
+// Конец ЭлектронноеВзаимодействие.РаботаСНоменклатурой
+
+#КонецОбласти
+//-- Локализация
+
+//++ Локализация
+
+&НаСервере
+Процедура КодОКВЭД2ПриИзмененииСервер()
+
+ НаименованиеОКВЭД2 = НаименованиеОКВЭД2(Объект.КодОКВЭД2);
+
+ НастроитьПодсказкуПоляКлассификатора(Элементы.КодОКВЭД2.Имя, НаименованиеОКВЭД2);
+
+КонецПроцедуры
+
+&НаСервереБезКонтекста
+Функция ПодборОКВЭДСервер(Знач СтрокаПоиска)
+
+ ПараметрыПодбора = КлассификаторОКВЭД.НовыйОтбор();
+ ПараметрыПодбора.СтрокаПоиска = СтрокаПоиска;
+ ПараметрыПодбора.Режим = "КодИНаименование";
+ ПараметрыПодбора.Разрешенные = Истина;
+
+ Возврат КлассификаторОКВЭД.Подбор(ПараметрыПодбора);
+
+КонецФункции
+
+&НаКлиенте
+Процедура ПодборИзОКВЭДЗавершение(РезультатВыбора, ДополнительныеПараметры) Экспорт
+
+ Если ТипЗнч(РезультатВыбора) <> Тип("Структура")
+ Или РезультатВыбора.ВыбранныеЗначения.Количество() = 0 Тогда
+
+ Возврат;
+
+ КонецЕсли;
+
+ Если Не Объект.КодОКВЭД2 = РезультатВыбора.ВыбранныеЗначения[0].Код Тогда
+ Модифицированность = Истина;
+
+ Объект.КодОКВЭД2 = РезультатВыбора.ВыбранныеЗначения[0].Код;
+ НаименованиеОКВЭД2 = РезультатВыбора.ВыбранныеЗначения[0].Наименование;
+
+ НастроитьПодсказкуПоляКлассификатора(Элементы.КодОКВЭД2.Имя, НаименованиеОКВЭД2);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервереБезКонтекста
+Функция НаименованиеОКВЭД2(КодОКВЭД2)
+
+ НаименованиеОКВЭД2 = "";
+
+ Если ЗначениеЗаполнено(КодОКВЭД2) Тогда
+ ЗначениеОКВЭД2ПоКоду = КлассификаторОКВЭД.ЗначениеПоКоду(КодОКВЭД2, Ложь);
+
+ Если ЗначениеОКВЭД2ПоКоду.Количество() > 0 Тогда
+ НаименованиеОКВЭД2 = ЗначениеОКВЭД2ПоКоду[0].Наименование;
+ КонецЕсли;
+ КонецЕсли;
+
+ Возврат НаименованиеОКВЭД2;
+
+КонецФункции
+
+//-- Локализация
+
+#КонецОбласти
+
+&НаСервере
+Процедура НастроитьЗакладкуНастройкиЦенообразования()
+
+ Если Не ИспользуетсяЦенообразование25 Тогда
+
+ Элементы.СтраницаНастройкиЦенообразования.Видимость = Ложь;
+ Возврат;
+
+ КонецЕсли;
+
+ ИспользоватьХарактеристикиНоменклатуры = ИспользуетсяЦенообразование25 И ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
+ ИспользоватьСерииНоменклатуры = ИспользуетсяЦенообразование25 И ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
+ ИспользоватьУпаковкиНоменклатуры = ИспользуетсяЦенообразование25 И ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
+
+ НастройкаСерийДляЦенообразования = ПолучитьНастройкиИспользованияСерииДляЦенообразования();
+
+ Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикам.Видимость = ИспользоватьХарактеристикиНоменклатуры;
+ Элементы.ГруппаНастройкиЦенообразованияПоСериям.Видимость = ИспользоватьСерииНоменклатуры;
+ Элементы.ГруппаНастройкиЦенообразованияПоУпаковкам.Видимость = ИспользоватьУпаковкиНоменклатуры;
+
+ Элементы.НастройкиКлючаЦенПоХарактеристике.Доступность = Объект.ИспользоватьХарактеристики
+ И Не Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры;
+ Элементы.НастройкиКлючаЦенПоСерии.Доступность = НастройкаСерийДляЦенообразования.Использовать
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры;
+
+ Если ИспользоватьХарактеристикиНоменклатуры Тогда
+
+ Если НЕ Объект.ИспользоватьХарактеристики Тогда
+ Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикамИнформация.Видимость = Истина;
+ Элементы.КомментарийИспользованияХарактеристики.Заголовок = НСтр("ru = 'Невозможно включение ведения ценообразования по характеристикам по следующим причинам:
+ | - по виду номенклатуры не ведется учет в разрезе характеристик'");
+ ИначеЕсли Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры Тогда
+ Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикамИнформация.Видимость = Истина;
+ Элементы.КомментарийИспользованияХарактеристики.Заголовок = НСтр("ru = 'Невозможно включение ведения ценообразования по реквизитам характеристик по следующим причинам:
+ | - по виду номенклатуры учет в разрезе характеристик не общий. Для ведения ценообразования по реквизитам номенклатуры, необходимо изменить режим на общий'");
+ ИначеЕсли Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда
+ Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикамИнформация.Видимость = Истина;
+ Элементы.КомментарийИспользованияХарактеристики.Заголовок = НСтр("ru = 'Изменение настроек по характеристикам не возможно по следующим причинам:
+ | - по виду номенклатуры учет в разрезе характеристик общий с другими видами номенклатуры.
+ |Изменение настроек характеристик номенклатуры возможно только в форме владельца вида номенклатуры'");
+ Иначе
+
+ Элементы.ГруппаНастройкиЦенообразованияПоХарактеристикамИнформация.Видимость = Ложь;
+
+ КонецЕсли;
+
+ Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Характеристики.Доступность = (Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам
+ И Объект.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры
+ И Не Элементы.НастройкиКлючаЦенПоХарактеристике.ТолькоПросмотр);
+
+ СписокВыбора = Элементы.НастройкиКлючаЦенПоХарактеристике.СписокВыбора;
+ СписокВыбора.Очистить();
+
+ СписокВыбора.Добавить(Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать, Нстр("ru = 'без характеристик'"));
+ СписокВыбора.Добавить(Перечисления.ВариантОтбораДляКлючаЦен.Использовать, Нстр("ru = 'по характеристикам'"));
+ Если Объект.ИспользованиеХарактеристик <> Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры Тогда
+ СписокВыбора.Добавить(Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам, Нстр("ru = 'по реквизитам характеристик'"));
+ Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Характеристики.Видимость = Истина;
+ Иначе
+ Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Характеристики.Видимость = Ложь;
+ КонецЕсли;
+
+ СформироватьНадписьРазрезаЦенообразования("Характеристики");
+
+ КонецЕсли;
+
+ Если ИспользоватьСерииНоменклатуры Тогда
+
+ Элементы.ГруппаНастройкиЦенообразованияПоСериямИнформация.Видимость = НЕ НастройкаСерийДляЦенообразования.Использовать;
+ Элементы.КомментарийИспользованияСерии.Заголовок = НастройкаСерийДляЦенообразования.Комментарий;
+
+ Элементы.ИзменитьНаборРеквизитовДляКлючаЦен_Серии.Доступность = (Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам
+ И Не Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
+ И Не Элементы.НастройкиКлючаЦенПоСерии.ТолькоПросмотр);
+
+ СформироватьНадписьРазрезаЦенообразования("Серии");
+
+ КонецЕсли;
+
+ ОбновитьРазрезыЦенообразования();
+
+КонецПроцедуры
+
+&НаСервере
+Функция ПолучитьНастройкиИспользованияСерииДляЦенообразования()
+
+ НастройкаСерийДляЦенообразования = Новый Структура("Использовать, Комментарий", Истина, "");
+
+ Если НЕ Объект.ИспользоватьСерии Тогда
+ НастройкаСерийДляЦенообразования.Использовать = Ложь;
+ НастройкаСерийДляЦенообразования.Комментарий = НСтр("ru = 'Невозможно включение ведения ценообразования по сериям по следующим причинам:
+ | - по виду номенклатуры не ведется учет в разрезе серий'");
+ ИначеЕсли Объект.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
+ НастройкаСерийДляЦенообразования.Использовать = Ложь;
+ НастройкаСерийДляЦенообразования.Комментарий = НСтр("ru = 'Невозможно включение ведения ценообразования по сериям по следующим причинам:
+ | - по виду номенклатуры учет в разрезе серий общий с другими видами номенклатуры.
+ |Изменение настроек серий номенклатуры возможно только в форме владельца вида номенклатуры'");
+ КонецЕсли;
+
+ Возврат НастройкаСерийДляЦенообразования;
+
+КонецФункции
+
+&НаКлиенте
+Процедура НастройкиКлючаЦенПоХарактеристикеПриИзменении(Элемент)
+ НастройкиКлючаЦенПоХарактеристикеПриИзмененииНаСервере();
+КонецПроцедуры
+
+&НаСервере
+Процедура НастройкиКлючаЦенПоХарактеристикеПриИзмененииНаСервере()
+ НастроитьЗакладкуНастройкиЦенообразования();
+КонецПроцедуры
+
+&НаКлиенте
+Процедура НастройкиКлючаЦенПоСерииПриИзменении(Элемент)
+ НастройкиКлючаЦенПоСерииПриИзмененииНаСервере();
+КонецПроцедуры
+
+&НаСервере
+Процедура НастройкиКлючаЦенПоСерииПриИзмененииНаСервере()
+ НастроитьЗакладкуНастройкиЦенообразования();
+КонецПроцедуры
+
+&НаСервере
+Процедура НастройкиКлючаЦенПоУпаковкеПриИзмененииНаСервере()
+ НастроитьЗакладкуНастройкиЦенообразования();
+КонецПроцедуры
+
+&НаКлиенте
+Процедура НастройкиКлючаЦенПоУпаковкеПриИзменении(Элемент)
+ НастройкиКлючаЦенПоУпаковкеПриИзмененииНаСервере();
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменитьНаборРеквизитовХарактеристикДляКлючаЦенОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ Если НавигационнаяСсылкаФорматированнойСтроки = "ИзменитьНастройкуИспользованияРеквизитов" Тогда
+ ИзменитьПанельХарактеристикиДляКлюча();
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИзменитьНаборРеквизитовСерийДляКлючаЦенОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+
+ Если НавигационнаяСсылкаФорматированнойСтроки = "ИзменитьНастройкуИспользованияРеквизитов" Тогда
+ ИзменитьПанельСерииДляКлюча();
+ КонецЕсли;
+КонецПроцедуры
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Help.xml b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Help.xml
new file mode 100644
index 0000000..d983f4c
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Help.xml
@@ -0,0 +1,4 @@
+
+
+ ru
+
\ No newline at end of file
diff --git a/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Help/ru.html b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Help/ru.html
new file mode 100644
index 0000000..268ce2f
--- /dev/null
+++ b/src/Catalogs/ВидыНоменклатуры/Forms/ФормаЭлемента/Ext/Help/ru.html
@@ -0,0 +1,44 @@
+
+
Вид номенклатуры
+
Справочник является классификатором, предназначенным для объединения номенклатуры по общим признакам учета. Фактически виды номенклатуры - это ассортиментные группы продаваемых товаров. При продаже товаров в розницу (со склада типа Розничный) в соответствии с видами номенклатуры могут быть созданы товарные категории и определены квоты ассортимента по каждой товарной категории в соответствии с форматом магазина.
В форме вида номенклатуры вводится основная информация о виде номенклатуры.
+
Группа видов номенклатуры. Группа, в которую входит данный вид номенклатуры. Данная возможность используется в том случае, если на предприятии используется много различных видов номенклатуры, которые необходимо объединять дополнительно в группы.
Наименование. Название вида номенклатуры.
Тип номенклатуры. Указывается тип, к которому относится номенклатура данного вида. Можно выбрать одно из значений: Товар, Услуга, Работа, Тара.
Информация о таре доступна только в том случае, если включена функциональная опция Многооборотная тара (НСИ и администрирование - Номенклатура - Разрезы учета).
+
Дополнительно указывается информация об использовании характеристик для вида номенклатуры и выбирается политика учета серий, если для данного вида номенклатуры ведется серийный учет (учет по серийным номерам и срокам годности).
Вариант использования характеристик для вида номенклатуры указывается в поле Использовать характеристики.
+
Данную возможность можно использовать только в том случае, если в разделе НСИ и администрирование - Номенклатура - Разрезы учета включена функциональная опция Характеристики номенклатуры.
+
После записи информации о новом виде номенклатуры изменить вариант использования характеристики нельзя.
+
Для вида номенклатуры можно указать следующие варианты использования характеристик:
+
Не использовать. Для данного вида номенклатуры не ведется учет в разрезе характеристик.
Использовать общие для вида номенклатуры. Назначается общий список характеристик, который используется всеми позициями номенклатуры, которые принадлежат данному виду.
Использовать индивидуальные для номенклатуры. Для каждой позиции номенклатуры назначается индивидуальный список характеристик.
Для тех видов номенклатуры, для которых поле Использовать характеристики установлено в значение Общие для вида номенклатуры, можно указать список характеристик, который будет использоваться для всех тех номенклатурных позиций, которые относятся к данному виду.
+
Пример. Товары вида Обувь характеризуется размером и цветом модели обуви. В список характеристик добавляется все возможные сочетания цвета и размера обуви: Размер 45, Цвет белый; Размер 37, Цвет белый; Размер 37, Цвет черный и т.д.
Порядок ввода списка характеристик для вида номенклатуры.
+
Для редактирования набора свойств характеристик для данного вида номенклатуры необходимо перейти на закладку Дополнительные реквизиты.
Откроется окно для редактирования набора свойств номенклатуры и характеристик данного вида номенклатуры.
Добавьте в список Дополнительные реквизиты характеристик дополнительные реквизиты, которые необходимы для создания характеристики товара данного вида (например, цвет, размер и т.д.).
Здесь же при нажатии на кнопку Общие можно отредактировать список реквизитов и сведений, общих для всего справочника Характеристики номенклатуры.
Сохраните изменения при помощи команды Сохранить.
Перейдите на закладку Основное, нажмите на гиперссылку Общие характеристики номенклатуры.
В появившемся списке характеристик нажмите на кнопку Создать.
В новой форме характеристики уже будут добавлены дополнительные реквизиты, которые описывают характеристику данного вида.
Укажите значения этих реквизитов.
Заполните Рабочее наименование и Наименование для печати.
Нажмите на кнопку Записать и закрыть.
Информация о характеристике запишется в список характеристик для вида номенклатуры.
Аналогичным образом добавьте информацию о других характеристиках, используемых для номенклатуры данного вида.
При вводе информации о товаре, который принадлежит данному виду, его характеристику можно будет выбрать из списка тех общих характеристик, которые определены для данного вида.
Дополнительные реквизиты и сведения создаются на соответствующих страницах. Отдельно создаются доп.реквизиты и сведения для номенклатуры, характеристик и серий.
+
Если дополнительный реквизит (дополнительное сведение) должен показываться для всех позиций номенклатуры, то он добавляется через список по команде Добавить - Общий для всей номенклатуры.
Если дополнительный реквизит (дополнительное сведение) должен показываться только для номенклатурных позиций данного вида, то он добавляется с помощью команды Добавить - Новый для вида.
Добавить дополнительный реквизит (дополнительное сведение) из другого набора можно с помощью команды Добавить - Из другого набора.
После добавления дополнительных реквизитов нажмите на странице Настройки создания появится список дополнительных реквизитов. Определите для каждого реквизита параметры контроля заполнения и уникальности.
+
Информация о дополнительных реквизитах автоматически появится в форме номенклатурной позиции на странице Описание.
Список дополнительных сведений заполняется в отдельном диалоговом окне (Все действия-Дополнительные сведения).
В карточке вида номенклатуры перейдите на закладку Панель быстрого отбора.
Отобразятся списки реквизитов номенклатуры и реквизитов характеристик, применяемых для быстрого отбора.
При помощи кнопки Добавить заполните списки реквизитами, по которым будет осуществляться быстрый отбор.
В качестве параметров быстрого отбора нельзя использовать дополнительные реквизиты составного типа. Такие реквизиты не будут показаны в списке для выбора параметров быстрого отбора.
Шаблоны наименований позволяют создать правило, по которому наименование номенклатуры будет формироваться автоматически, с учетом её реквизитов. Также по шаблону может быть перезаполнено наименование ранее созданной номенклатуры. Задать шаблоны можно на странице Шаблоны наименований с помощью формы Редактирование формулы, которая открывается при выполнении команды Редактировать.
+
Для удобного редактирования шаблона рекомендуется использовать редактор формул, запускаемый по кнопке Редактировать. В редакторе можно выбрать любые реквизиты (в том числе и дополнительные реквизиты) номенклатуры, которые должны включаться в её наименование. Также в наименовании может быть произвольный текст, который следует писать в кавычках «». Для соединения составных частей наименования используется знак плюс «+». Шаблоны наименований задаются отдельно для наименования номенклатуры, характеристики и для вариантов наименования, используемых при печати документов.
+
Пример. Для учета кабелей следует формировать их названия по производителю и техническим параметрам, указанным в доп.реквизитах. Следует задать следующий шаблон наименования: "Кабель NYM (" + [Производитель] + ") " + [Число жил] + "х" + [Сечение (кв. мм)] По этому шаблону будет формироваться названия кабелей наподобие следующего: Кабель NYM (Севкабель) 3х1,5
Для каждого шаблона можно настроить обязательность его использования с помощью флажков Запретить редактирование рабочего наименования в карточке номенклатуры и Запретить редактирование наименования для печати в карточке номенклатуры.
+
Если флажок установлен, то наименование в карточке номенклатуры или характеристики становится недоступным для редактирования и переформировывается при каждой записи номенклатуры или характеристики.
Если флажок не установлен, то заполнить наименование по шаблону можно с помощью команды Заполнить. При этом если наименование не заполнено, то оно формируется при записи номенклатуры автоматически.
Также можно настроить шаблон для рабочего наименования серии. Рабочее наименование серии будет формироваться автоматически, по указанному шаблону, при записи серии.
Ценообразование можно вести по следующим разрезам:
+
Номенклатуры (обязательный реквизит).
Характеристики или ее реквизитов.
Серии или ее реквизиты.
Упаковок.
При использовании характеристик и /или серий возможно использовать не сами элементы, а их реквизиты. Например, если характеристика состоит из размера и цвета, то для учета цен можно использовать только размеры (вся обувь определенной модели определенного размера будет иметь цену вне зависимости от цвета. Например, если серии идентифицируются сроком годности, то для учета цен можно использовать этот реквизит (ценами можно будет управлять в зависимости от срока годности).
Основной реквизит ключа – «Номенклатура». Все остальное можно не использовать. Чем больше разрезов ведения цен выбрано, тем точнее можно вести ценообразование.
+
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Commands/НовыйЭлемент/Ext/CommandModule.bsl b/src/Catalogs/Номенклатура/Commands/НовыйЭлемент/Ext/CommandModule.bsl
new file mode 100644
index 0000000..34b071b
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Commands/НовыйЭлемент/Ext/CommandModule.bsl
@@ -0,0 +1,11 @@
+
+#Область ОбработчикиСобытий
+
+&НаКлиенте
+Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
+
+ ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта",,);
+
+КонецПроцедуры
+
+#КонецОбласти
diff --git a/src/Catalogs/Номенклатура/Commands/Номенклатура/Ext/CommandModule.bsl b/src/Catalogs/Номенклатура/Commands/Номенклатура/Ext/CommandModule.bsl
new file mode 100644
index 0000000..98aba36
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Commands/Номенклатура/Ext/CommandModule.bsl
@@ -0,0 +1,16 @@
+
+#Область ОбработчикиСобытий
+
+&НаКлиенте
+Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
+
+ ОткрытьФорму(
+ "Справочник.Номенклатура.ФормаСписка",
+ ,
+ ПараметрыВыполненияКоманды.Источник,
+ ПараметрыВыполненияКоманды.Уникальность,
+ ПараметрыВыполненияКоманды.Окно);
+
+КонецПроцедуры
+
+#КонецОбласти
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Ext/Help.xml b/src/Catalogs/Номенклатура/Ext/Help.xml
new file mode 100644
index 0000000..d983f4c
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Ext/Help.xml
@@ -0,0 +1,4 @@
+
+
+ ru
+
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Ext/Help/ru.html b/src/Catalogs/Номенклатура/Ext/Help/ru.html
new file mode 100644
index 0000000..b2b336f
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Ext/Help/ru.html
@@ -0,0 +1,9 @@
+
+
Номенклатура
+
Справочник предназначен для хранения информации о номенклатурных позициях следующих типов: товар, услуга, работа, тара и набор.
Позиции номенклатуры могут быть классифицированы по видам номенклатуры.
+
Вид номенклатуры – это дополнительная классификация товаров более обобщенная чем тип, и позволяющая отличать номенклатурные позиции по различным параметрам, например, характеристикам. Причем для более детальной классификации, рекомендуется использование нескольких видов номенклатуры с общим типом. Вид номенклатуры можно поменять после создания номенклатуры. При этом новый и старый вид номенклатуры должны отвечать следующим требованиям: - установлен один тип номенклатуры; - одинаково установлен признак алкогольная продукция; - одинаково установлен признак содержит драгоценные металлы или камни; - характеристики не используются, или они индивидуальные для номенклатуры, или общие для нескольких видов (при этом оба вида - новый и старый - должны использовать один набор характеристик); - серии не используются или настроены одинаково.
+
Пример. Если необходимо разделять услуги, которые оказывает наше предприятие, и услуги, оказываемые сторонними организациями, то можно создать два вида номенклатуры: внутренние услуги и сторонние услуги с одним и тем же типом – услуга.
Позиции номенклатуры могут быть классифицированы по видам номенклатуры.
+
Вид номенклатуры – это дополнительная классификация товаров более обобщенная чем тип, и позволяющая отличать номенклатурные позиции по различным параметрам, например, характеристикам. Причем для более детальной классификации, рекомендуется использование нескольких видов номенклатуры с общим типом. Вид номенклатуры можно поменять после создания номенклатуры. При этом новый и старый вид номенклатуры должны отвечать следующим требованиям: - установлен один тип номенклатуры; - одинаково установлен признак алкогольная продукция; - одинаково установлен признак содержит драгоценные металлы или камни; - характеристики не используются, или они индивидуальные для номенклатуры, или общие для нескольких видов (при этом оба вида - новый и старый - должны использовать один набор характеристик); - серии не используются или настроены одинаково.
+
Пример. Если необходимо разделять услуги, которые оказывает наше предприятие, и услуги, оказываемые сторонними организациями, то можно создать два вида номенклатуры: внутренние услуги и сторонние услуги с одним и тем же типом – услуга.
Подбор номенклатуры в документ, используя двойной щелчок мыши по нужной позиции списка (или с помощью команды Выбрать).
Полнотекстовый поиск номенклатуры.
Создание новой номенклатуры (с помощью команды Создать).
Установка в списке отбора с помощью фильтра по иерархии или по виду и свойствам.
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппИЭлементов.xml b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппИЭлементов.xml
new file mode 100644
index 0000000..3f4c66d
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппИЭлементов.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппИЭлементов/Ext/Form.xml b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппИЭлементов/Ext/Form.xml
new file mode 100644
index 0000000..c229ef3
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппИЭлементов/Ext/Form.xml
@@ -0,0 +1,181 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппИЭлементов/Ext/Form/Module.bsl b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппИЭлементов/Ext/Form/Module.bsl
new file mode 100644
index 0000000..e8afd3d
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппИЭлементов/Ext/Form/Module.bsl
@@ -0,0 +1,60 @@
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
+ Возврат;
+ КонецЕсли;
+
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
+
+ ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок
+
+&НаКлиенте
+Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+ Отказ = Истина;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СписокПриАктивизацииСтроки(Элемент)
+ // СтандартныеПодсистемы.ПодключаемыеКоманды
+ ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
+ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+// СтандартныеПодсистемы.ПодключаемыеКоманды
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьКоманду(Команда)
+ ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
+КонецПроцедуры
+
+&НаСервере
+Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
+ ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Список, Результат);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ОбновитьКоманды()
+ ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Список);
+КонецПроцедуры
+
+// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
+
+#КонецОбласти
+
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппы.xml b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппы.xml
new file mode 100644
index 0000000..b036ce6
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппы.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппы/Ext/Form.xml b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппы/Ext/Form.xml
new file mode 100644
index 0000000..91f3e89
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппы/Ext/Form.xml
@@ -0,0 +1,136 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппы/Ext/Form/Module.bsl b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппы/Ext/Form/Module.bsl
new file mode 100644
index 0000000..bbc74d4
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораГруппы/Ext/Form/Module.bsl
@@ -0,0 +1,25 @@
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
+ Возврат;
+ КонецЕсли;
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+#КонецОбласти
+#Область ОбработчикиКомандФормы
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
+
+ СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
+
+КонецПроцедуры
+
+#КонецОбласти
+
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры.xml b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры.xml
new file mode 100644
index 0000000..8553b7a
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры.xml
@@ -0,0 +1,21 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Form.xml b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Form.xml
new file mode 100644
index 0000000..9abdba6
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Form.xml
@@ -0,0 +1,694 @@
+
+
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Form/Module.bsl b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Form/Module.bsl
new file mode 100644
index 0000000..e766aaa
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Form/Module.bsl
@@ -0,0 +1,251 @@
+
+#Область ОписаниеПеременных
+
+&НаКлиенте
+Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийФормы
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТипНоменклатуры = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Номенклатура, "ТипНоменклатуры");
+ Если ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Услуга") Тогда
+ ТекстСообщения = НСтр("ru='Качество услуг изменять нельзя.'");
+ ВызватьИсключение ТекстСообщения;
+ ИначеЕсли ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа") Тогда
+ ТекстСообщения = НСтр("ru='Качество работ изменять нельзя.'");
+ ВызватьИсключение ТекстСообщения;
+ КонецЕсли;
+
+ Если Не ПолучитьФункциональнуюОпцию("ИспользоватьОбобщенныйУчетНекачественныхТоваров") Тогда
+ Элементы.ГруппаФормаСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
+ Элементы.ГруппаФормаСтраницы.ТекущаяСтраница = Элементы.СтраницаПоНоменклатуре;
+ КонецЕсли;
+
+ ТоварИсходногоКачества = РегистрыСведений.ТоварыДругогоКачества.ПолучитьТоварИсходногоКачества(Параметры.Номенклатура);
+ Если ЗначениеЗаполнено(ТоварИсходногоКачества) Тогда
+ Номенклатура = ТоварИсходногоКачества;
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(СписокПоНоменклатуре, "Номенклатура", ТоварИсходногоКачества, ВидСравненияКомпоновкиДанных.Равно,,Истина);
+ Иначе
+ ШаблонТекстаСообщения = НСтр("ru = 'Для товара %Товар% не найден товар исходного качества. Выбор товаров другого качества невозможен.'");
+ ТекстСообщения = СтрЗаменить(ШаблонТекстаСообщения, "%Товар%", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Номенклатура, "Наименование"));
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
+ Отказ = Истина;
+ КонецЕсли;
+ Элементы.ГруппаСоздатьНекачественныйТовар.Видимость = ПравоДоступа("Добавление", Метаданные.Справочники.Номенклатура);
+ Элементы.ГруппаСоздатьНекачественныйТовар1.Видимость = ПравоДоступа("Добавление", Метаданные.Справочники.Номенклатура);
+ Элементы.СтраницаОбщегоСписка.Видимость = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ТоварыДругогоКачества);
+ Если Элементы.СтраницаОбщегоСписка.Видимость Тогда
+ ПоляНоменклатуры = Новый Структура;
+ ПоляНоменклатуры.Вставить("ВидНоменклатуры");
+ ПоляНоменклатуры.Вставить("ИспользоватьСерии", "ВидНоменклатуры.ИспользоватьСерии");
+ ПоляНоменклатуры.Вставить("НастройкаИспользованияСерий", "ВидНоменклатуры.НастройкаИспользованияСерий");
+ РеквизитыНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.Номенклатура, ПоляНоменклатуры);
+ Если РеквизитыНоменклатуры.ИспользоватьСерии
+ И Не РеквизитыНоменклатуры.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ОбщийСписок,
+ "ВидНоменклатуры",
+ РеквизитыНоменклатуры.ВидНоменклатуры,
+ ВидСравненияКомпоновкиДанных.Равно,,
+ Истина);
+ Элементы.СтраницаОбщегоСписка.Заголовок = НСтр("ru='Товары другого качества с видом номенклатуры товара исходного качества'");
+ КонецЕсли;
+ КонецЕсли;
+
+ СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
+ Если ИмяСобытия = "Запись_Номенклатура" Тогда
+ Если ЗначениеЗаполнено(Источник) Тогда
+ УстановитьГрадациюКачества(Источник);
+ Элементы.ОбщийСписок.ТекущаяСтрока = Источник;
+ КонецЕсли;
+ КонецЕсли;
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок
+
+&НаКлиенте
+Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+ ОбработатьВыборНекачественнойНоменклатурыКлиент();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбщийСписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+ ОбработатьВыборНекачественнойНоменклатурыКлиент();
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ОбработчикиКомандФормы
+
+&НаКлиенте
+Процедура Выбрать(Команда)
+
+ ОбработатьВыборНекачественнойНоменклатурыКлиент();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьОграниченноГоднуюНоменклатуру(Команда)
+ Качество = ПредопределенноеЗначение("Перечисление.ГрадацииКачества.ОграниченноГоден");
+ СоздатьНоменклатуруСДругимКачеством(Качество);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьНеГоднуюНоменклатуру(Команда)
+ Качество = ПредопределенноеЗначение("Перечисление.ГрадацииКачества.НеГоден");
+ СоздатьНоменклатуруСДругимКачеством(Качество);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
+
+ СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#Область Прочее
+
+&НаСервере
+Функция ПроверитьУстановитьГрадацию(ТоварИсходногоКачества, НекачественныйТовар)
+ Отказ = Ложь;
+ ЕстьГрадация = РегистрыСведений.ТоварыДругогоКачества.ПроверитьНаличиеГрадации(ТоварИсходногоКачества, НекачественныйТовар);
+ Если Не ЕстьГрадация Тогда
+ Попытка
+ РегистрыСведений.ТоварыДругогоКачества.ЗаписатьСвязьСТоваромДругогоКачества(ТоварИсходногоКачества, НекачественныйТовар);
+ Исключение
+ Отказ = Истина;
+ КонецПопытки;
+ КонецЕсли;
+
+ Возврат Отказ;
+КонецФункции
+
+&НаСервере
+Процедура УстановитьГрадациюКачества(НекачественныйТовар)
+
+ РегистрыСведений.ТоварыДругогоКачества.ЗаписатьСвязьСТоваромДругогоКачества(Номенклатура, НекачественныйТовар);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработатьВыборНекачественнойНоменклатурыКлиент()
+
+ ОчиститьСообщения();
+
+ Отказ = Ложь;
+ ПроверятьГрадацию = Ложь;
+
+ Если Элементы.ГруппаФормаСтраницы.ТекущаяСтраница = Элементы.СтраницаПоНоменклатуре Тогда
+ ТекущиеДанные = Элементы.Список.ТекущиеДанные;
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат
+ КонецЕсли;
+ НекачественныйТовар = ТекущиеДанные.НоменклатураБрак;
+ Иначе
+ ТекущиеДанные = Элементы.ОбщийСписок.ТекущиеДанные;
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат
+ КонецЕсли;
+ НекачественныйТовар = ТекущиеДанные.Ссылка;
+ ПроверятьГрадацию = Истина;
+ ЕстьСоответствие = Ложь;
+ КонецЕсли;
+
+ Если ПроверятьГрадацию Тогда
+ Отказ = ПроверитьУстановитьГрадацию(Номенклатура, НекачественныйТовар);
+ КонецЕсли;
+
+ Если Не Отказ И ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(НекачественныйТовар, "ПометкаУдаления") Тогда
+ ПоказатьВопрос(Новый ОписаниеОповещения("ОбработатьВыборНекачественнойНоменклатурыКлиентЗавершение", ЭтотОбъект, Новый Структура("НекачественныйТовар, Отказ", НекачественныйТовар, Отказ)), НСтр("ru = 'Выбранные данные помечены на удаление.
+ |Выполнить выбор этих данных?'") , РежимДиалогаВопрос.ДаНет);
+ Возврат;
+ КонецЕсли;
+
+ ОбработатьВыборНекачественнойНоменклатурыКлиентФрагмент(НекачественныйТовар, Отказ);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработатьВыборНекачественнойНоменклатурыКлиентЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
+
+ НекачественныйТовар = ДополнительныеПараметры.НекачественныйТовар;
+ Отказ = ДополнительныеПараметры.Отказ;
+
+
+ Если РезультатВопроса = КодВозвратаДиалога.Нет Тогда
+ Возврат;
+ КонецЕсли;
+
+ ОбработатьВыборНекачественнойНоменклатурыКлиентФрагмент(НекачественныйТовар, Отказ);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработатьВыборНекачественнойНоменклатурыКлиентФрагмент(Знач НекачественныйТовар, Знач Отказ)
+
+ Если Не Отказ Тогда
+ Закрыть(НекачественныйТовар);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьНоменклатуруСДругимКачеством(Качество)
+ ПараметрыСозданияВФорму = Новый Структура;
+ ПараметрыСозданияВФорму.Вставить("Качество", Качество);
+
+ ПараметрыФормы = Новый Структура("ЗначениеКопирования, ДополнительныеПараметры", Номенклатура, ПараметрыСозданияВФорму);
+ ОткрытьФорму(
+ "Справочник.Номенклатура.ФормаОбъекта",
+ ПараметрыФормы,
+ ,
+ ,
+ ,
+ ,
+ Новый ОписаниеОповещения("СоздатьНоменклатуруСДругимКачествомЗавершение", ЭтотОбъект),
+ РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СоздатьНоменклатуруСДругимКачествомЗавершение(Результат, ДополнительныеПараметры) Экспорт
+
+ Элементы.Список.Обновить();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ГруппаФормаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
+ Если Элементы.ГруппаФормаСтраницы.ТекущаяСтраница = Элементы.СтраницаПоНоменклатуре Тогда
+ Элементы.СтраницыКомандныхПанелей.ТекущаяСтраница = Элементы.СтраницаКоманднаяПанельСпискаСвязанныхТоваров;
+ Иначе
+ Элементы.СтраницыКомандныхПанелей.ТекущаяСтраница = Элементы.СтраницаКоманднаяПанельОбщегоСписка;
+ КонецЕсли;
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Help.xml b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Help.xml
new file mode 100644
index 0000000..d983f4c
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Help.xml
@@ -0,0 +1,4 @@
+
+
+ ru
+
\ No newline at end of file
diff --git a/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Help/ru.html b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Help/ru.html
new file mode 100644
index 0000000..77b36f8
--- /dev/null
+++ b/src/Catalogs/Номенклатура/Forms/ФормаВыбораНекачественнойНоменклатуры/Ext/Help/ru.html
@@ -0,0 +1,4 @@
+
+
Форма выбора некачественной номенклатуры
+
Регистрация номенклатуры с качеством отличным от оригинального (нового), осуществляется в системе с использованием помощника по команде Изменить качество. При этом в системе будет зарегистрирована дополнительная номенклатурная позиция, автоматически связанная с товаром исходного качества. Данная процедура может быть произведена, например, в момент приемки товара. Для созданной номенклатуры определяется необходимая градация качества: Ограниченно годный или Негодный.
В форме помощника доступна следующая информация:
+
На странице Товары другого качества, связанные с товаром исходного качества - список ранее зарегистрированных товаров другого качества.
На странице Все товары другого качества - список всех товаров, которые имеют качество ограниченно годен или не годен.
Позиции номенклатуры могут быть классифицированы по видам номенклатуры.
+
Вид номенклатуры – это дополнительная классификация товаров более обобщенная чем тип, и позволяющая отличать номенклатурные позиции по различным параметрам, например, характеристикам. Причем для более детальной классификации, рекомендуется использование нескольких видов номенклатуры с общим типом. Вид номенклатуры можно поменять после создания номенклатуры. При этом новый и старый вид номенклатуры должны отвечать следующим требованиям: - установлен один тип номенклатуры; - одинаково установлен признак алкогольная продукция; - одинаково установлен признак содержит драгоценные металлы или камни; - характеристики не используются, или они индивидуальные для номенклатуры, или общие для нескольких видов (при этом оба вида - новый и старый - должны использовать один набор характеристик); - серии не используются или настроены одинаково.
+
Пример. Если необходимо разделять услуги, которые оказывает наше предприятие, и услуги, оказываемые сторонними организациями, то можно создать два вида номенклатуры: внутренние услуги и сторонние услуги с одним и тем же типом – услуга.
В форме справочника отображается общий перечень всех зарегистрированных типов номенклатуры. Для возможности регистрации номенклатуры с типами Тара и Набор необходимо предварительное включение функциональных опций Многооборотная тара и Наборы номенклатуры при продаже в разделе НСИ и администрирование - Номенклатура - Разрезы учета.
Для списка товаров доступны предопределенные отборы (флаг Фильтр по):
+
виду и свойствам,
иерархии,
товарам другого качества (при условии задействованой функциональной опции Качество товаров в разделе НСИ и администрирование - Номенклатура - Разрезы учета),
При условии задействования функциональной опции Сегменты номенклатуры в разделе НСИ и администрирование - CRM и маркетинг - Маркетинг доступен дополнительный отбор по сегменту номенклатуры.
При использовании фильтра по виду и свойствам в качестве полей поиска и их значений указываются те реквизиты, которые были определены для вида номенклатуры. Причем в качестве полей поиска могут быть использованы любые дополнительные реквизиты, заданные пользователем как для номенклатуры, так и для её характеристик.
+
Для вида номенклатуры Холодильники в качестве полей для панели быстрого отбора заданы Марка и Производитель. В списке полей панели быстрого отбора будут перечислены все указанные для холодильников марки (Стинол, Атлант и т.д) и производители (Завод бытовой техники, Холодильный комбинат). Установив соответствующие отметки можно быстро найти холодильники марки Стинол, которые были произведены заводом бытовой техники.
Регистрация новой позиции номенклатуры может быть осуществлена в двух режимах: с использованием помощника или без него. Для первого случая предназначена команда Создать, а для второго - команда Добавить элемент. В последнем случае (отказе использования помощника) системой не контролируется уникальность реквизитов созданной номенклатуры. В связи с чем, данная команда доступна только тем пользователям, для которых установлено право на создание номенклатуры без контроля уникальности.
Выполните в контекстном меню команду Товары со схожими свойствами.
В списке останутся только те товары, которые имеют свойства аналогичные исходному товару. Список свойств, по которым происходит сравнение, определяется в виде номенклатуры.
Позиции номенклатуры могут быть классифицированы по видам номенклатуры.
+
Вид номенклатуры – это дополнительная классификация товаров более обобщенная чем тип, и позволяющая отличать номенклатурные позиции по различным параметрам, например, характеристикам. Причем для более детальной классификации, рекомендуется использование нескольких видов номенклатуры с общим типом. Вид номенклатуры можно поменять после создания номенклатуры. При этом новый и старый вид номенклатуры должны отвечать следующим требованиям: - установлен один тип номенклатуры; - одинаково установлен признак алкогольная продукция; - одинаково установлен признак содержит драгоценные металлы или камни; - характеристики не используются, или они индивидуальные для номенклатуры, или общие для нескольких видов (при этом оба вида - новый и старый - должны использовать один набор характеристик); - серии не используются или настроены одинаково.
+
Пример. Если необходимо разделять услуги, которые оказывает наше предприятие, и услуги, оказываемые сторонними организациями, то можно создать два вида номенклатуры: внутренние услуги и сторонние услуги с одним и тем же типом – услуга.
В карточке номенклатуры отображается следующая информация:
+
Производитель, импортер (контрагент) - контрагент, импортер продукции зарубежного производства или производитель продукции российского производства. Требуется заполнять при торговле алкогольной продукцией и при ввозе товаров из ЕАЭС (при наличии сведений о производителе).
Производитель (бренд) - наименование производителя данной позиции номенклатуры, указывается справочно, может уточнять принадлежность марки, выводиться при печати этикеток и ценников.
Марка (бренд) - принадлежность позиции к зарегистрированным товарным знакам.
Коллекция (сезон) - принадлежность номенклатурной позиции к определенной коллекции товаров (доступно только при включенной функциональной опции Управление коллекциями товаров в разделе НСИ и администрирование - CRM и маркетинг - Маркетинг).
Артикул - артикул позиции номенклатуры.
Рабочее наименование - название товара или услуги, которое используется для быстрой визуальной идентификации позиции номенклатуры.
Наименование для печати - наименование товара и услуги, которое будет отображаться в печатных формах документов.
Вид номенклатуры - определение вида к которому относится данная позиция номенклатуры.
Единица хранения - единица измерения, в которой ведется учет складских остатков по данной позиции.
Вес / Объем / Площадь / Длина - соотношение единицы хранения товара к единице измерения веса / объема / площади / длины. Соотношение может быть указано как справочно (для использования везде, кроме указания в документах), так и для указания количества в единице измерения веса / объема / площади / длины в документах (включает в себя режим справочного указания).
Качество - градация качества позиции (доступно три значения качества: Новый, Ограниченно годен, Не годен).
Импортный товар (учет по ГТД или РНПТ) - признак того, что товар является импортным и для него необходимо вести учет по номерам ГТД или РНПТ.
Прослеживаемый товар - признак того, что товар относится к прослеживаемым импортным товарам.
Группа списка - группа, в которую входит данная позиция номенклатуры в соответствии с классификацией (иерархией) товаров в справочнике Номенклатура.
Ценовая группа - группа в которую входит позиция номенклатуры в соответствии с классификацией товаров по ценовым характеристикам.
Товарная категория - принадлежность номенклатурной позиции к одной из категорий товаров (доступно при условии задействования одноименной функциональной опции в разделе НСИ и администрирование - CRM и маркетинг - Маркетинг).
Использовать упаковки - определение единиц измерения для хранения данной позиции номенклатуры на складах предприятия.
Поставляется в многооборотной таре - определение для данной товарной позици типа возвратной тары (доступно при условии включения функциональной опции Многооборотная тара в разделе НСИ и администрирование - Номенклатура - Разрезы учета).
Обособленная закупка/продажа - при установке данного флага в заказах для данной позиции номенклатуры будет автоматически выбран вариант обеспечения Обеспечивать обособленно. Также для данной позиции будет доступна при заполнении поля складская группа возможность размещения товаров с разными физическими свойствами в области общего назначения (переключатель можно хранить в одной ячейке).
Состав набора - гиперссылка доступна только для номенклатурной позиции с типом Набор и позволяет настроить или изменить состав текущего набора, указать вариант его представления в печатных формах и правила задания цены.
Группа аналитического учета - экономический классификатор номенклатуры по однородным группам.
ОКВЭД - код позиции номенклатуры по общероссийскому классификатору видов экономической деятельности.
ТНВЭД - код по товарной номенклатуре внешнеэкономической деятельности Таможенного союза.
ОКП - код позиции номенклатуры по общероссийскому классификатору продукции.
Признак подакцизного товара используется при оформлении розничных продаж, использующих систему налогообложения ЕНВД. Подакцизные товары являются объектами налогообложения в любом случае, независимо от того, применяется ли система налогообложения ЕНВД при розничной торговле. Список подакцизных товаров регламентирован в соответствии со статьей 181 НК РФ.
+
При оформлении продаж с розничного склада, применяющего систему ЕНВД, обобщенному покупателю (документы Чек ККМ, Отчет о розничных продажах) для подакцизных товаров устанавливается ставка НДС, указанная в форме номенклатуры.
Подакцизные товары запрещено продавать в рамках соглашений (документов) с видом налогообложения Продажа облагается ЕНВД.
Комплектом может быть только позиция номенклатуры с типом товар.
+
Операция по сборке комплектов оформляется документом Сборка(разборка) товаров. Предусмотрена возможность оформления предварительного заказа на сборку(разборку) товаров. При заполнении комплектующих в документах по умолчанию используется основной вариант комплектации.
В случае если номенклатурная позиция относится к типу Набор, то для неё будет доступен только один вариант комплектации, т.е. при использовании характеристик номенклатуры будет доступно по одному варианту комплектации на каждую из характеристик.
+
Перейдите по гиперссылке Варианты комплектации или по команде Варианты комплектации в подменю Перейти в командной панели.
Информацию о местонахождении номенклатурной позиции на складах предприятия можно посмотреть, используя команду Размещение номенклатуры по ячейкам в подменю Перейти в командной панели. Информация о размещении товара на конкретном складе, в конкретном помещении и конкретной ячейке задается в момент приема товара на склад кладовщиком.
+
Информация о размещении доступна только в том случае, если данный товар размещен в ячейке адресного склада (помещения). Для склада (помещения), на котором хранится товар, должен быть выбран вариант работы с ячейками Использовать для хранения остатков номенклатуры.
При включенной функциональной опции Расширенное в разделе НСИ и администрирование – Склад и доставка - Обеспечение потребностей имеется возможность установить настройки обеспечения складов предприятия номенклатурой, для целей планирования обеспечения.
+
Для номенклатурной позиции (товара, многооборотной тары) устанавливается схема обеспечения, которая определяет способы обеспечения потребностей в номенклатуре на складах предприятия. Схема обеспечения может быть заполнена автоматически по соответствующей настройке указанной в виде номенклатуры. Установку способа обеспечения потребностей, исключая схему обеспечения, можно сделать, перейдя по гиперссылке Настройка способов обеспечения потребностей. Для работ способ обеспечения потребностей устанавливается непосредственно, без использования схем обеспечения.
+
Поддержание запаса номенклатуры: необходимость поддержания запаса на складах, особенности обеспечения для отдельных характеристик номенклатурной позиции можно просмотреть и отредактировать с помощью гиперссылки Настройка поддержания запасов.
Информацию о всех имеющихся аналогах и товарах с качеством отличным от нового, для данной номенклатурной позиции можно отобразить и при желании отредактировать, перейдя по гиперссылке Номенклатура с аналогичными свойствами или по команде Номенклатура с аналогичными свойствами в подменю Перейти в командной панели.
При включенной функциональной опции Алкогольная (спиртосодержащая) продукция в рознице в разделе НСИ и администрирование – Продажи - Розничные продажи имеется возможность указать основные свойства алкогольной продукции.
+
Для номенклатурной позиции (товара) задаются:
+
Вид алкогольной продукции;
Происхождение - Россия или Импорт;
Объем - объем тары алкогольной продукции (в декалитрах);
Крепость - объемная доля этилового спирта;
Сведения об алкогольной продукции используются при оформлении продаж алкогольной продукции через ЕГАИС и для заполнения деклараций об объемах розничных продаж по данным видам товаров. При оформлении продаж алкогольной продукции через ЕГАИС сведения об алкогольной продукции (заданные для позиции номенклатуры) используются только, если позиция номенклатуры не сопоставлена с элементом классификатора алкогольной продукции ЕГАИС.
Для Вида номенклатуры соответствующего товарам, подлежащим обязательной маркировке, должен быть установлен Тип номенклатуры по соответствующей товарной категории.
+
Для молочной продукции в случае если вес или объем потребительской упаковки не фиксирован, учет продукции ведется в мерных единицах, в частности, в килограммах или литрах. Примером такой продукции будет сыр, отгружаемый в головах. Такую продукцию будем называть весовой молочной продукцией. При оформлении операций нанесения кодов маркировки и ввода такой продукции в оборот требуется указание кодов маркировки по количеству единиц продукции.
Для отдельных видов маркируемой продукции в розничной торговле сложилась практика распаковки потребительской упаковки и частичной продажи маркируемой продукции из этой потребительской упаковки. В частности, это, например, поштучная продажа сигар и продажа парфюмерной продукции на розлив. Возможность частичного выбытия маркируемой продукции доступна только в случае использования упаковок (установлен флажок Упаковки). В случае использования индивидуального набора упаковок в группе Маркируемая продукция ГИС МТ становятся доступными реквизиты Потребительская упаковка и Поштучная продажа, в которых соответственно нужно указать упаковку, которая соответствует потребительской упаковке маркируемого товара (пачка) и упаковку, которая используется для поштучной продаже. В частности, в список упаковок можно добавить единицу поштучной продажи (сигару), которая получается распаковкой потребительской упаковки. При использовании общего набора упаковок настройка соответствия упаковкам ГИС МТ производится в карточке набора упаковок, а в карточке номенклатуры это соответствие отображается для сведения без возможности редактирования.
Выберите Ещё - Дополнительные сведения. Можно также воспользоваться соответствующей пиктограммой.
Откроется список дополнительных сведений.
В списке представлены те дополнительные сведения, которые являются общими или введены для вида номенклатуры, к которому относится данная позиция. В качестве значений могут использоваться различные виды значений: число, дата, текстовая строка, различные справочники.