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

Хранилище

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

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



> Порядок вывода страниц в форме          
ViktorB Подменю пользователя
сообщение 19.09.17, 4:38
Сообщение #1

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

Здравствуйте
Столкнулся с проблемой которую не могу решить

Имеется конфигурация УТ 2.3
Необходимо изменить форму элемента номенклатуры, в стандартной форме при открытии отображает страницы: "По умолчанию", "Дополнительные", "Единицы" и тд.

Необходимо что-бы при открытии стартовая страница была "Дополнительное описание номенклатуры"

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

Подскажите что и на каком этапе я упустил


podcast Подменю пользователя
сообщение 19.09.17, 8:23
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 306
Спасибо сказали: 74 раз
Рейтинг: 0

ViktorB @ Сегодня, 5:38 * ,
В конце формы вставьте код.
/ Процедура размещает на форме дополнительные реквизиты
//
// Параметры: нет
//
Процедура ПР_УстановитьДополнительныеРеквизитыФормы()

    ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = ЭлементыФормы.ОсновнаяПанель.Страницы.ДополнительноеОписаниеНоменклатуры;
    
КонецПроцедуры

// Процедура - обработчик события "ПередОткрытием" формы
//
Процедура ПР_ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    ПР_УстановитьДополнительныеРеквизитыФормы();
    
    ПередОткрытием(Отказ, СтандартнаяОбработка);
    
КонецПроцедуры // ПередОткрытием()

Процедура ПР_УстановитьДействияФормы()

    События = Новый Массив;
    События.Добавить("ПередОткрытием");
        
    Для каждого ТиповоеСобытие Из События Цикл
        
        ТекДействие   = Строка(ПолучитьДействие(ТиповоеСобытие));
        ИмяСобытияНов = "ПР_"+ТиповоеСобытие;
        
        // Типовой обработчик назначен - кэшируем его имя.
        Если НЕ ПустаяСтрока(ТекДействие) Тогда
            
            КлючТиповогоСобытия = "ПР_Типовой_"+ТиповоеСобытие;
            ДополнительныеСвойства.Вставить(КлючТиповогоСобытия,ТекДействие);
            
        КонецЕсли;
        
        УстановитьДействие(ТиповоеСобытие,Новый Действие(ИмяСобытияНов));
        
    КонецЦикла;
    
КонецПроцедуры // ПР_УстановитьДействияФормы()
ПР_УстановитьДействияФормы();

ViktorB Подменю пользователя
сообщение 19.09.17, 13:04
Сообщение #3

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

podcast @ Сегодня, 9:23 * ,
При попытке сохранить
{Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(2905,1)}: Определения процедур и функций должны размещаться перед операторами тела модуля
<<?>>Процедура ПР_УстановитьДополнительныеРеквизитыФормы() (Проверка: Толстый клиент (обычное приложение))


Модуль
Перем мТекущееРасширениеФайла;
Перем мТекущееОсновноеИзображение;
Перем мПустаяКартинка;
Перем мТипЦенДляПечати;
Перем мФормироватьНаименованиеПолноеАвтоматически;
Перем мЖирныйШрифт;
Перем мЕдиницаИзмеренияОбъема, мЕдиницаИзмеренияВеса;
Перем мИспользоватьХарактеристики, мИспользоватьСерии;
Перем мИспользоватьСерийныеНомера;
Перем мВалютаУправленческогоУчета;

Перем мКонстанты;

Перем мПоставщик;
Перем мСтраницыПослеЗаписи;
Перем мСписокТиповЦенНоменклатуры;
Перем мДеревоРамок;
Перем мРеквизитыСАвтозаполнением; // реквизиты, которые заполняются системой при записи элемента

Перем мТекущаяНастройка;
Перем СтруктураСкрываемыхСтраниц;

// Хранит дерево макетов печатных форм
Перем мДеревоМакетов;

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ

// Если для текущей настройки установлено свойство "Сохранять автоматически",
// то текущая настройка будет сохранена.
//
Процедура СохранитьНастройкуАвтоматически() Экспорт

ОбновитьНастройки();
СохраненнаяНастройка = Новый Структура;
СохраненнаяНастройка.Вставить("ТаблицаСтраниц" , ТаблицаСтраниц);
СохраненнаяНастройка.Вставить("ТаблицаРеквизитов" , ТаблицаРеквизитов);
СохраненнаяНастройка.Вставить("ТаблицаЦенНоменклатуры", ТаблицаЦенНоменклатуры);

мТекущаяНастройка.Вставить("СохраненнаяНастройка", СохраненнаяНастройка);

УниверсальныеМеханизмы.СохранитьНастройку(мТекущаяНастройка, мТекущаяНастройка);

КонецПроцедуры // СохранитьНастройкуАвтоматически()

// Процедура удаляет строки из таблицы в которой каждая строка соответствует странице.
// Подготавливает таблицу для работы в ФормаНастройки
//
Процедура УдалитьСтраницыФормыНастройки() Экспорт
ТаблицаСтраницНастройки = ТаблицаСтраниц.Скопировать();
Для Каждого ЭлементаСтраница Из СтруктураСкрываемыхСтраниц Цикл
строкаСтраница = ТаблицаСтраницНастройки.Найти(ЭлементаСтраница.Ключ);
Если строкаСтраница <> Неопределено Тогда
ТаблицаСтраницНастройки.Удалить(строкаСтраница);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // УдалитьСтраницыФормыНастройки()

// Процедура обновляет основную(ТаблицаСтраниц) по новым настройкам установленным пользователем.
//
Процедура ОбновитьНастройки() Экспорт
Для Каждого ЭлементСтраница Из ТаблицаСтраниц Цикл
строкаСтраница = ТаблицаСтраницНастройки.Найти(ЭлементСтраница.Имя);
Если строкаСтраница <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ЭлементСтраница, строкаСтраница);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ОбновитьНастройки()
// Процедура восстанавливает сохраненные настройки.
//
Процедура ВосстановитьНастройки(ВосстановитьПриОткрытии = Ложь, ФормаНастройки = Неопределено) Экспорт

СтруктураНастройки = ОбщегоНазначения.СкопироватьУниверсальнуюКоллекцию(мТекущаяНастройка);

Если ВосстановитьПриОткрытии Тогда
Если УниверсальныеМеханизмы.ПолучитьНастройкуИспользоватьПриОткрытии(СтруктураНастройки) Тогда
мТекущаяНастройка = СтруктураНастройки;

ТаблицаСтраниц = мТекущаяНастройка.СохраненнаяНастройка.ТаблицаСтраниц;
ТаблицаРеквизитов = мТекущаяНастройка.СохраненнаяНастройка.ТаблицаРеквизитов;
ТаблицаЦенНоменклатуры = мТекущаяНастройка.СохраненнаяНастройка.ТаблицаЦенНоменклатуры;
КонецЕсли;
Иначе
СтруктураНастройки = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);

Если СтруктураНастройки <> Неопределено Тогда
мТекущаяНастройка = СтруктураНастройки;

ТаблицаСтраниц = мТекущаяНастройка.СохраненнаяНастройка.ТаблицаСтраниц;
ТаблицаРеквизитов = мТекущаяНастройка.СохраненнаяНастройка.ТаблицаРеквизитов;
ТаблицаЦенНоменклатуры = мТекущаяНастройка.СохраненнаяНастройка.ТаблицаЦенНоменклатуры;
УдалитьСтраницыФормыНастройки();
Если ФормаНастройки <> Неопределено Тогда
ФормаНастройки.ТаблицаСтраниц = ТаблицаСтраницНастройки;
ФормаНастройки.ТаблицаРеквизитов = ТаблицаРеквизитов;
ФормаНастройки.ТаблицаЦенНоменклатуры = ТаблицаЦенНоменклатуры;
КонецЕсли;
КонецЕсли;
КонецЕсли;

ОбновитьСохраненныеНастройки();

КонецПроцедуры // ВосстановитьНастройки()

// Процедура сохраняет настройки.
//
Процедура СохранитьНастройки() Экспорт

ОбновитьНастройки();
СохраненнаяНастройка = Новый Структура;
СохраненнаяНастройка.Вставить("ТаблицаСтраниц" , ТаблицаСтраниц);
СохраненнаяНастройка.Вставить("ТаблицаРеквизитов" , ТаблицаРеквизитов);
СохраненнаяНастройка.Вставить("ТаблицаЦенНоменклатуры", ТаблицаЦенНоменклатуры);

СтруктураНастройки = ОбщегоНазначения.СкопироватьУниверсальнуюКоллекцию(мТекущаяНастройка);
СтруктураНастройки.Вставить("СохраненнаяНастройка", СохраненнаяНастройка);

УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);

КонецПроцедуры // СохранитьНастройки()

// Процедура добавляет в дерево переданную Рамку группы и УЭ, которые к ней относятся.
//
// Параметры:
// ИмяРамки - Строка. Имя рамки, которую нужно добавить в дерево.
// СтруктураЭУ - Структура имен элементов управления, относящихся к рамке.
//
Процедура ДобавитьЭУВДерево(ИмяРамки, СтруктураЭУ)

НоваяСтрока = мДеревоРамок.Строки.Добавить();
НоваяСтрока.ИмяЭУ = ЭлементыФормы[ИмяРамки];

Для Каждого ЭУ Из СтруктураЭУ Цикл
НоваяСтрокаЭУ = НоваяСтрока.Строки.Добавить();
НоваяСтрокаЭУ.ИмяЭУ = ЭлементыФормы[ЭУ.Ключ];
КонецЦикла;

КонецПроцедуры // ДобавитьЭУВДерево()

// Процедура устанавливает отборы по ссылке во всех табличных частях со связанной информацией.
//
Процедура УстановитьОтборыДляТЧ()

Проекты.Отбор.НоменклатураПроекта.Установить(Ссылка);
ЭлементыФормы.Проекты.НастройкаОтбора.НоменклатураПроекта.Доступность = Ложь;

Характеристики.Отбор.Владелец.Установить(Ссылка);
ЭлементыФормы.Характеристики.НастройкаОтбора.Владелец.Доступность = Ложь;

Комплектующие.Отбор.Номенклатура.Установить(Ссылка);
ЭлементыФормы.Комплектующие.НастройкаОтбора.Номенклатура.Доступность = Ложь;

Серии.Отбор.Владелец.Установить(Ссылка);
ЭлементыФормы.Серии.НастройкаОтбора.Владелец.Доступность = Ложь;

Штрихкоды.Отбор.Владелец.Установить(Ссылка);
ЭлементыФормы.Штрихкоды.НастройкаОтбора.Владелец.Доступность = Ложь;

КодыВесовогоТовара.Отбор.Номенклатура.Установить(Ссылка);
ЭлементыФормы.КодыВесовогоТовара.НастройкаОтбора.Номенклатура.Доступность = Ложь;

МестаХранения.Отбор.Номенклатура.Установить(Ссылка);
ЭлементыФормы.МестаХранения.НастройкаОтбора.Номенклатура.Доступность = Ложь;

НоменклатураКонтрагентов.Отбор.Номенклатура.Установить(Ссылка);
НоменклатураКонтрагентов.Отбор.Контрагент.Установить(ОсновнойПоставщик);
ЭлементыФормы.НоменклатураКонтрагентов.НастройкаОтбора.Номенклатура.Доступность = Ложь;
ЭлементыФормы.НоменклатураКонтрагентов.НастройкаОтбора.Контрагент.Доступность = Ложь;

КонецПроцедуры // УстановитьОтборыДляТЧ()

// Процедура устанавливает видимость в режиме помощника.
//
Процедура УстановитьВидимостьПомощник()

Перем НомерТекущейСтраницы;

// Установим видимость и порядок страниц.
КоличествоСтраниц = ТаблицаСтраниц.Количество() - 1;
Для Тмп = 0 По КоличествоСтраниц Цикл
Страница = ТаблицаСтраниц[КоличествоСтраниц - Тмп];
СтраницаПанели = ЭлементыФормы.ОсновнаяПанель.Страницы.Найти(Страница.Имя);
СтраницаПанели.Видимость = Страница.Видимость И Страница.ВидимостьСистемная;
ЭлементыФормы.ОсновнаяПанель.Страницы.Сдвинуть(СтраницаПанели, КоличествоСтраниц - Тмп - ЭлементыФормы.ОсновнаяПанель.Страницы.Индекс(СтраницаПанели));
КонецЦикла;

Для Каждого СтраницаПослеЗаписи Из мСтраницыПослеЗаписи Цикл
СтраницаПослеЗаписи.Ключ.Доступность = Не ЭтоНовый();
КонецЦикла;

// Погасим основную панель, если все страницы невидимы.
Если ПолучитьМассивДоступныхСтраниц(НомерТекущейСтраницы, Истина).Количество() = 0 Тогда
ЭлементыФормы.ОсновнаяПанель.Видимость = Ложь;
Иначе
ЭлементыФормы.ОсновнаяПанель.Видимость = Истина;
КонецЕсли;

// Установим видимость реквизитов.
Для Каждого Реквизит Из ТаблицаРеквизитов Цикл
ЭлементыФормы[Реквизит.Имя].Видимость = Реквизит.Доступность И Реквизит.ДоступностьСистемная;

// Для полей ввода еще установим доступность у соответствующей надписи,
// а также автоотметку незаполненного.
Если Не мСписокВозможныхРеквизитов[Реквизит.Имя] Тогда
ЭлементыФормы["Надпись" + Реквизит.Имя].Видимость = Реквизит.Доступность И Реквизит.ДоступностьСистемная;
ЭлементыФормы[Реквизит.Имя].АвтоотметкаНезаполненного = Реквизит.Обязательность Или Реквизит.ОбязательностьСистемная;

Если НЕ ЗначениеЗаполнено(ЭлементыФормы[Реквизит.Имя].Значение) Тогда
ЭлементыФормы[Реквизит.Имя].ОтметкаНезаполненного = Реквизит.Обязательность Или Реквизит.ОбязательностьСистемная;
КонецЕсли;
КонецЕсли;
КонецЦикла;

// Если все ЭУ, относящиеся к рамке, скрыты, то нужно скрыть и саму рамку.
Для Каждого Рамка Из мДеревоРамок.Строки Цикл
ФлагВидимости = Ложь;

Для Каждого СтрокаЭУ Из Рамка.Строки Цикл
Если СтрокаЭУ.ИмяЭУ.Видимость Тогда
ФлагВидимости = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

Рамка.ИмяЭУ.Видимость = ФлагВидимости;
КонецЦикла;

КонецПроцедуры // УстановитьВидимостьПомощник()

// Процедура обновляет сохраненные настройки, удаляя лишнее и вставляя недостающее.
//
Процедура ОбновитьСохраненныеНастройки() Экспорт

Если ТаблицаСтраниц.Колонки.Количество() = 0 Тогда
ТаблицаСтраниц.Колонки.Добавить("Имя");
ТаблицаСтраниц.Колонки.Добавить("Представление");
ТаблицаСтраниц.Колонки.Добавить("Видимость");
ТаблицаСтраниц.Колонки.Добавить("ВидимостьСистемная");
ТаблицаСтраниц.Индексы.Добавить("Имя");

ТаблицаСтраницНастройки.Колонки.Добавить("Имя");
ТаблицаСтраницНастройки.Колонки.Добавить("Представление");
ТаблицаСтраницНастройки.Колонки.Добавить("Видимость");
ТаблицаСтраницНастройки.Колонки.Добавить("ВидимостьСистемная");
ТаблицаСтраницНастройки.Индексы.Добавить("Имя");
КонецЕсли;

// Удалим лишние страницы из сохраненной настройки.
Для Каждого Страница Из ТаблицаСтраниц Цикл
Если ЭлементыФормы.ОсновнаяПанель.Страницы.Найти(Страница.Имя) = Неопределено Тогда
ТаблицаСтраниц.Удалить(Страница);
КонецЕсли;
КонецЦикла;

// Добавим недостающие страницы в сохраненную настройку.
Для Каждого Страница Из ЭлементыФормы.ОсновнаяПанель.Страницы Цикл
Если ТаблицаСтраниц.Найти(Страница.Имя, "Имя") = Неопределено Тогда
НоваяСтраница = ТаблицаСтраниц.Добавить();
НоваяСтраница.Имя = Страница.Имя;
НоваяСтраница.Представление = Страница.Заголовок;
НоваяСтраница.Видимость = Истина;
КонецЕсли;
КонецЦикла;

Если ТаблицаРеквизитов.Колонки.Количество() = 0 Тогда
ТаблицаРеквизитов.Колонки.Добавить("Имя");
ТаблицаРеквизитов.Колонки.Добавить("Представление");
ТаблицаРеквизитов.Колонки.Добавить("Обязательность");
ТаблицаРеквизитов.Колонки.Добавить("Доступность");
ТаблицаРеквизитов.Колонки.Добавить("Уникальность");
ТаблицаРеквизитов.Колонки.Добавить("ОбязательностьСистемная");
ТаблицаРеквизитов.Колонки.Добавить("ДоступностьСистемная");
КонецЕсли;

// Удалим лишние реквизиты из сохраненной настройки.
Для Каждого Реквизит Из ТаблицаРеквизитов Цикл
Если мСписокВозможныхРеквизитов[Реквизит.Имя] = Неопределено Тогда
ТаблицаРеквизитов.Удалить(Реквизит);
КонецЕсли;
КонецЦикла;

// Добавим недостающие реквизиты в сохраненную настройку.
РеквизитыНоменклатуры = Метаданные().Реквизиты;
Для Каждого Реквизит Из мСписокВозможныхРеквизитов Цикл
Если ТаблицаРеквизитов.Найти(Реквизит.Ключ, "Имя") = Неопределено Тогда
НовыйРеквизит = ТаблицаРеквизитов.Добавить();
НовыйРеквизит.Имя = Реквизит.Ключ;

Если РеквизитыНоменклатуры.Найти(Реквизит.Ключ) = Неопределено Тогда
НовыйРеквизит.Представление = Реквизит.Ключ;
Иначе
НовыйРеквизит.Представление = РеквизитыНоменклатуры[Реквизит.Ключ].Представление();
КонецЕсли;

НовыйРеквизит.Доступность = Истина;
НовыйРеквизит.Обязательность = Ложь;
НовыйРеквизит.Уникальность = Ложь;
КонецЕсли;
КонецЦикла;

// Отсортируем список реквизитов.
ОтсортироватьСписокРеквизитов();

Если ТаблицаЦенНоменклатуры.Колонки.Количество() = 0 Тогда
ТаблицаЦенНоменклатуры.Колонки.Добавить("Имя");
ТаблицаЦенНоменклатуры.Колонки.Добавить("Представление");
ТаблицаЦенНоменклатуры.Колонки.Добавить("Обязательность");
ТаблицаЦенНоменклатуры.Колонки.Добавить("Доступность");
ТаблицаЦенНоменклатуры.Индексы.Добавить("Имя");
КонецЕсли;


// Удалим лишние типы цен из сохраненной настройки.
Для Каждого ТипЦен Из ТаблицаЦенНоменклатуры Цикл
Если мСписокТиповЦенНоменклатуры[ТипЦен.Имя] = Неопределено Тогда
ТаблицаЦенНоменклатуры.Удалить(ТипЦен);
КонецЕсли;
КонецЦикла;

// Добавим недостающие типы цен в сохраненную настройку.
Для Каждого ТипЦен Из мСписокТиповЦенНоменклатуры Цикл
Если ТаблицаЦенНоменклатуры.Найти(ТипЦен.Ключ, "Имя") = Неопределено Тогда
НовыйТипЦен = ТаблицаЦенНоменклатуры.Добавить();
НовыйТипЦен.Имя = ТипЦен.Ключ;
НовыйТипЦен.Представление = ТипЦен.Значение;

НовыйТипЦен.Обязательность = Ложь;
НовыйТипЦен.Доступность = Истина;
КонецЕсли;
КонецЦикла;

КонецПроцедуры // ОбновитьСохраненныеНастройки()

// Сортирует список реквизитов: Доступность Убыв, Обязательность Убыв, Представление Возвр.
//
Процедура ОтсортироватьСписокРеквизитов()

ТаблицаРеквизитов.Сортировать("Представление Возвр");

КонецПроцедуры // ОтсортироватьСписокРеквизитов()

// Процедура обновляет данные в полях ввода и табличных частях.
//
Процедура ОбновитьДанные(ТолькоЦеныКонтрагента = Ложь)

Если Не ЭтоНовый() Тогда
Если Не ТолькоЦеныКонтрагента Тогда // заполним ТЧ "Цены номенклатуры"
КоличествоСтрок = ЦеныНоменклатуры.Количество() - 1;
Для Тмп = 0 По КоличествоСтрок Цикл
ЦенаНоменклатуры = ЦеныНоменклатуры[КоличествоСтрок - Тмп];

СтрокаЦен = ТаблицаЦенНоменклатуры.Найти(ЦенаНоменклатуры.ТипЦен, "Имя");
Если Не СтрокаЦен.Доступность Тогда
ЦеныНоменклатуры.Удалить(ЦенаНоменклатуры);
КонецЕсли;
КонецЦикла;

Для Каждого ТипЦен Из ТаблицаЦенНоменклатуры Цикл
Если ТипЦен.Доступность Тогда
СтрокаЦен = ЦеныНоменклатуры.Найти(ТипЦен.Имя, "ТипЦен");
Если СтрокаЦен = Неопределено Тогда
СтрокаЦен = ЦеныНоменклатуры.Добавить();
СтрокаЦен.ТипЦен = ТипЦен.Имя;
СтрокаЦен.Цена = 0;
СтрокаЦен.СпособРасчетаЦены = СтрокаЦен.ТипЦен.СпособРасчетаЦены;
СтрокаЦен.Валюта = СтрокаЦен.ТипЦен.ВалютаЦены;
СтрокаЦен.ПроцентСкидкиНаценки = СтрокаЦен.ТипЦен.ПроцентСкидкиНаценки;
КонецЕсли;

Если СтрокаЦен.Записать <> Истина Тогда
СтрокаЦен.Записать = ТипЦен.Обязательность;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(СтрокаЦен.ЕдиницаИзмерения) Тогда
СтрокаЦен.ЕдиницаИзмерения = ЕдиницаХраненияОстатков;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;

// Заполним ТЧ "Цены поставщика".
Если мПоставщик <> ОсновнойПоставщик Тогда
ЦеныПоставщика.Очистить();
Если ЗначениеЗаполнено(ОсновнойПоставщик) Тогда
Выборка = Справочники.ТипыЦенНоменклатурыКонтрагентов.Выбрать(, ОсновнойПоставщик);
Пока Выборка.Следующий() Цикл
СтрокаЦен = ЦеныПоставщика.Добавить();
СтрокаЦен.ТипЦен = Выборка.Ссылка;
СтрокаЦен.Цена = 0;
СтрокаЦен.Валюта = СтрокаЦен.ТипЦен.ВалютаЦены;
СтрокаЦен.ЕдиницаИзмерения = ЕдиницаХраненияОстатков;
КонецЦикла;
КонецЕсли;

мПоставщик = ОсновнойПоставщик;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ОбновитьДанные()

// Обработчик события "Нажатие" кнопки "Настройка".
//
Процедура ДействияФормыНастройка(Кнопка)

УдалитьСтраницыФормыНастройки();
// Сохраним данные на случай отмены действий настройки.
ТаблицаСтраницВременная = ТаблицаСтраниц.Скопировать();
ТаблицаРеквизитовВременная = ТаблицаРеквизитов.Скопировать();
ТаблицаЦенНоменклатурыВременная = ТаблицаЦенНоменклатуры.Скопировать();

ФормаНастройки = ПолучитьФорму("ФормаНастройки", Этаформа);

ФормаНастройки.ТаблицаСтраниц = ТаблицаСтраницНастройки;
ФормаНастройки.ТаблицаРеквизитов = ТаблицаРеквизитов;
ФормаНастройки.ТаблицаЦенНоменклатуры = ТаблицаЦенНоменклатуры;

РезультатНастройки = ФормаНастройки.ОткрытьМодально();

Если РезультатНастройки = Истина Тогда // настройки изменены
ОтсортироватьСписокРеквизитов();

ОбновитьДанные();
УстановитьВидимость();
Иначе // изменение настроек отменено
ТаблицаСтраниц = ТаблицаСтраницВременная.Скопировать();
ТаблицаРеквизитов = ТаблицаРеквизитовВременная.Скопировать();
ТаблицаЦенНоменклатуры = ТаблицаЦенНоменклатурыВременная.Скопировать();
КонецЕсли;

КонецПроцедуры // ДействияФормыНастройка()


Процедура ДействияФормыРедактироватьКод(Кнопка)
МеханизмНумерацииОбъектов.ИзменениеВозможностиРедактированияНомера(Метаданные(), ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Код);
КонецПроцедуры

// Обработчик события ПриНачалеРедактирования строки ТЧ "Проекты".
//
Процедура ПроектыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

Если НоваяСтрока Тогда
Элемент.ТекущиеДанные.НоменклатураПроекта = Ссылка;
КонецЕсли;

КонецПроцедуры // ПроектыПриНачалеРедактирования()

// Обработчик события "ПриВыводеСтроки" ТЧ НоменклатураПоставщика.
//
Процедура НоменклатураПоставщикаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Если ДанныеСтроки.Записать Тогда
Если НЕ ЗначениеЗаполнено(ДанныеСтроки.Цена) Тогда
ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Истина;
Иначе
ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Ложь;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(ДанныеСтроки.Валюта) Тогда
ОформлениеСтроки.Ячейки.Валюта.ОтметкаНезаполненного = Истина;
Иначе
ОформлениеСтроки.Ячейки.Валюта.ОтметкаНезаполненного = Ложь;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(ДанныеСтроки.ЕдиницаИзмерения) Тогда
ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ОтметкаНезаполненного = Истина;
Иначе
ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ОтметкаНезаполненного = Ложь;
КонецЕсли;
Иначе
ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Ложь;
ОформлениеСтроки.Ячейки.Валюта.ОтметкаНезаполненного = Ложь;
ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ОтметкаНезаполненного = Ложь;
КонецЕсли;

КонецПроцедуры // НоменклатураПоставщикаПриВыводеСтроки()

// Обработчик события "ПриОкончанииРедактирования" строки ТЧ НоменклатураПоставщика.
//
Процедура НоменклатураПоставщикаПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

ТекущаяСтрока = ЭлементыФормы.ЦеныПоставщика.ТекущиеДанные;

// После редактировании строки автоматически установим в этой строке флажок "Записать".
Если Не ОтменаРедактирования Тогда
Если ЭлементыФормы.ЦеныПоставщика.ТекущаяКолонка.Имя <> "Записать" Тогда
ТекущаяСтрока.Записать = Истина;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // НоменклатураПоставщикаПриОкончанииРедактирования()

// Обработчик события "ПриВыводеСтроки" ТЧ ЦеныНоменклатуры.
//
Процедура ЦеныНоменклатурыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

// Доступность изменения способа расчета в строке.
Если НЕ ЗначениеЗаполнено(ДанныеСтроки.ТипЦен.БазовыйТипЦен) Тогда
ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ТолькоПросмотр = Истина;
ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ОтметкаНезаполненного = Ложь;
Иначе
ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ТолькоПросмотр = Ложь;

Если НЕ ЗначениеЗаполнено(ДанныеСтроки.СпособРасчетаЦены)
И ДанныеСтроки.Записать Тогда
ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ОтметкаНезаполненного = Истина;
Иначе
ОформлениеСтроки.Ячейки.СпособРасчетаЦены.ОтметкаНезаполненного = Ложь;
КонецЕсли;
КонецЕсли;

// Доступность изменения цены, валюты, единицы измерения в строке.
Если ДанныеСтроки.ТипЦен.Рассчитывается Тогда
ОформлениеСтроки.Ячейки.Цена.ТолькоПросмотр = Истина;
ОформлениеСтроки.Ячейки.Валюта.ТолькоПросмотр = Истина;
ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ТолькоПросмотр = Истина;
ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Ложь;
Иначе
ОформлениеСтроки.Ячейки.Цена.ТолькоПросмотр = Ложь;
ОформлениеСтроки.Ячейки.Валюта.ТолькоПросмотр = Ложь;
ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ТолькоПросмотр = Ложь;

Если НЕ ЗначениеЗаполнено(ДанныеСтроки.Цена)
И ДанныеСтроки.Записать Тогда
ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Истина;
Иначе
ОформлениеСтроки.Ячейки.Цена.ОтметкаНезаполненного = Ложь;
КонецЕсли;
КонецЕсли;

// Доступность изменения процента скидки наценки в строке.
Если НЕ ЗначениеЗаполнено(ДанныеСтроки.ТипЦен.БазовыйТипЦен)
Или ДанныеСтроки.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон Тогда
ОформлениеСтроки.Ячейки.ПроцентСкидкиНаценки.ТолькоПросмотр = Истина;
Иначе
ОформлениеСтроки.Ячейки.ПроцентСкидкиНаценки.ТолькоПросмотр = Ложь;
КонецЕсли;

КонецПроцедуры // ЦеныНоменклатурыПриВыводеСтроки()

// Обработчик события "ПриИзмененииФлажка" ТЧ ЦеныНоменклатуры.
//
Процедура ЦеныНоменклатурыПриИзмененииФлажка(Элемент, Колонка)

ТекущаяСтрока = ЭлементыФормы.ЦеныНоменклатуры.ТекущиеДанные;

Если Колонка.Имя = "Записать" Тогда
СтрокаТЗНастройкиЦен = ТаблицаЦенНоменклатуры.Найти(ТекущаяСтрока.ТипЦен, "Имя");
Если СтрокаТЗНастройкиЦен.Обязательность Тогда
ТекущаяСтрока.Записать = Истина;
Предупреждение("Данные по типу цен """ + Строка(ТекущаяСтрока.ТипЦен) + """ должны быть обязательно заполнены.");
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ЦеныНоменклатурыПриИзмененииФлажка()

// Обработчик события "ПриОкончанииРедактирования" строки ТЧ ЦеныНоменклатуры.
//
Процедура ЦеныНоменклатурыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

ТекущаяСтрока = ЭлементыФормы.ЦеныНоменклатуры.ТекущиеДанные;

// После редактировании строки автоматически установим в этой строке флажок "Записать".
Если Не ОтменаРедактирования Тогда
Если ЭлементыФормы.ЦеныНоменклатуры.ТекущаяКолонка.Имя <> "Записать" Тогда
ТекущаяСтрока.Записать = Истина;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ЦеныНоменклатурыПриОкончанииРедактирования()

// Обработчик события "ПриИзменении" реквизита "СпособРасчетаЦены" ТЧ ЦеныНоменклатуры.
//
Процедура ЦеныНоменклатурыСпособРасчетаЦеныПриИзменении(Элемент)

ТекущаяСтрока = ЭлементыФормы.ЦеныНоменклатуры.ТекущиеДанные;

Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.СпособРасчетаЦены) Тогда
ТекущаяСтрока.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип;
КонецЕсли;

Если ТекущаяСтрока.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон Тогда
ТекущаяСтрока.ПроцентСкидкиНаценки = 0;
Иначе
ТекущаяСтрока.ПроцентСкидкиНаценки = ТекущаяСтрока.ТипЦен.ПроцентСкидкиНаценки;
КонецЕсли;

КонецПроцедуры // ЦеныНоменклатурыСпособРасчетаЦеныПриИзменении()

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

МассивВидимыхСтраниц = Новый Массив;

Для Каждого Страница Из ЭлементыФормы.ОсновнаяПанель.Страницы Цикл
Если Страница.Видимость И (ТолькоВидимые Или Страница.Доступность) Тогда
МассивВидимыхСтраниц.Добавить(Страница);

Если ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = Страница Тогда
НомерТекущейСтраницы = МассивВидимыхСтраниц.ВГраница();
КонецЕсли;
КонецЕсли;
КонецЦикла;

Возврат МассивВидимыхСтраниц;

КонецФункции // ПолучитьМассивДоступныхСтраниц()

// Обработчик события "Нажатие" кнопки "Назад".
// Переключает предыдущую по порядку закладку.
//
Процедура ОсновныеДействияФормыНазад(Кнопка)

НомерТекущейСтраницы = 0;
МассивВидимыхСтраниц = ПолучитьМассивДоступныхСтраниц(НомерТекущейСтраницы);

Если НомерТекущейСтраницы = 0 Тогда
СледующаяСтраница = МассивВидимыхСтраниц[НомерТекущейСтраницы];
Иначе
СледующаяСтраница = МассивВидимыхСтраниц[НомерТекущейСтраницы - 1];

ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = СледующаяСтраница;
КонецЕсли;

УстановитьВидимость();

КонецПроцедуры // ОсновныеДействияФормыНазад()

// Обработчик события "Нажатие" кнопки "Далее".
// Переключает следующую по порядку закладку.
//
Процедура ОсновныеДействияФормыОсновныеДействияФормыДалее(Кнопка)

НомерТекущейСтраницы = 0;
МассивВидимыхСтраниц = ПолучитьМассивДоступныхСтраниц(НомерТекущейСтраницы);

Если НомерТекущейСтраницы = МассивВидимыхСтраниц.ВГраница() Тогда
СледующаяСтраница = МассивВидимыхСтраниц[НомерТекущейСтраницы];
Иначе
СледующаяСтраница = МассивВидимыхСтраниц[НомерТекущейСтраницы + 1];

ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = СледующаяСтраница;
КонецЕсли;

УстановитьВидимость();

КонецПроцедуры // ОсновныеДействияФормыОсновныеДействияФормыДалее()

// Обработчик события "Нажатие" кнопки "РассчитатьПоБазовымЦенам" в командной панели ТЧ ЦеныНоменклатуры.
//
Процедура КоманднаяПанельЦеныНоменклатурыРассчитатьПоБазовымЦенам(Кнопка)

ДатаЦенСкидок = РабочаяДата;

Для Каждого СтрокаЦен Из ЦеныНоменклатуры Цикл
ТипЦен = СтрокаЦен.ТипЦен;

Если Не (ТипЦен.Рассчитывается Или НЕ ЗначениеЗаполнено(ТипЦен.БазовыйТипЦен)) Тогда
ВалютаТекущая = ТипЦен.ВалютаЦены;

СтрокаЦенБазовый = ЦеныНоменклатуры.Найти(ТипЦен.БазовыйТипЦен);
Если СтрокаЦенБазовый <> Неопределено Тогда
Если СтрокаЦен.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип Тогда

// Наценим.
ПолученнаяЦена = СтрокаЦенБазовый.Цена * (1 + СтрокаЦен.ПроцентСкидкиНаценки / 100);
ВалютаТекущая = СтрокаЦенБазовый.Валюта;
ИначеЕсли СтрокаЦен.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон Тогда

// Рассчитаем по диапазонам.
ПолученнаяЦена = Ценообразование.ПолучитьЦенуПоЦеновымДиапазонам(ТипЦен, ДатаЦенСкидок, СтрокаЦенБазовый.Цена, ВалютаТекущая, СтрокаЦенБазовый.Валюта);

Если ПодставлятьВалютуИзДиапазона Тогда
СтрокаЦен.Валюта = ВалютаТекущая;
КонецЕсли;
КонецЕсли;

ПолученнаяЦена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(ПолученнаяЦена, ВалютаТекущая, СтрокаЦен.Валюта, 0, 1, ДатаЦенСкидок);
ПолученнаяЦена = Ценообразование.ОкруглитьЦену(ПолученнаяЦена, ТипЦен.ПорядокОкругления, ТипЦен.ОкруглятьВБольшуюСторону);

СтрокаЦен.Цена = ПолученнаяЦена;
СтрокаЦен.Записать = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецПроцедуры // КоманднаяПанельЦеныНоменклатурыРассчитатьПоБазовымЦенам()

// Обработчик события "Нажатие" кнопки "РассчитатьЦеныКомплекта" в командной панели ТЧ ЦеныНоменклатуры.
//
Процедура КоманднаяПанельЦеныНоменклатурыРассчитатьЦеныКомплекта(Кнопка)

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Номенклатура", Ссылка);

Запрос.Текст = "
|ВЫБРАТЬ
| РегКомплектующие.Комплектующая КАК Комплектующая,
| РегКомплектующие.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
| РегКомплектующие.Количество КАК Количество,
| РегКомплектующие.ЕдиницаИзмерения КАК ЕдиницаИзмерения
|ИЗ
| РегистрСведений.КомплектующиеНоменклатуры КАК РегКомплектующие
|ГДЕ
| РегКомплектующие.Номенклатура = &Номенклатура
|";

ТЗКомплектующие = Запрос.Выполнить().Выгрузить();

Для Каждого СтрокаЦен Из ЦеныНоменклатуры Цикл
Если Не СтрокаЦен.ТипЦен.Рассчитывается Тогда
ЦенаКомплекта = 0;
Для Каждого СтрокаКомплектующих Из ТЗКомплектующие Цикл
ЦенаКомплектующей = Ценообразование.ПолучитьЦенуНоменклатуры(СтрокаКомплектующих.Комплектующая,
СтрокаКомплектующих.ХарактеристикаКомплектующей, СтрокаЦен.ТипЦен, РабочаяДата,
СтрокаКомплектующих.ЕдиницаИзмерения, СтрокаЦен.Валюта);

ЦенаКомплекта = ЦенаКомплекта + ЦенаКомплектующей * СтрокаКомплектующих.Количество;
КонецЦикла;

СтрокаЦен.Цена = ЦенаКомплекта;
СтрокаЦен.Записать = Истина;
КонецЕсли;
КонецЦикла;

КонецПроцедуры // КоманднаяПанельЦеныНоменклатурыРассчитатьЦеныКомплекта()

// Обработчик события "Нажатие" кнопки "ПеречитатьТекущиеЦены" в командной панели ТЧ ЦеныНоменклатуры.
//
Процедура КоманднаяПанельЦеныНоменклатурыПеречитатьТекущиеЦены(Кнопка)

Запрос = Новый Запрос("
|ВЫБРАТЬ
| Цены.ТипЦен КАК ТипЦен,
| Цены.Цена КАК Цена,
| Цены.СпособРасчетаЦены КАК СпособРасчетаЦены,
| Цены.Валюта КАК Валюта,
| Цены.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Цены.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен В (&ТипыЦен)
| И Номенклатура = &Номенклатура И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ) КАК Цены
|");

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

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаЦен = ЦеныНоменклатуры.Найти(Выборка.ТипЦен, "ТипЦен");
ЗаполнитьЗначенияСвойств(СтрокаЦен, Выборка);
КонецЦикла;

КонецПроцедуры // КоманднаяПанельЦеныНоменклатурыПеречитатьТекущиеЦены()

// Обработчик события "Нажатие" кнопки "ПеречитатьТекущиеЦены" в командной панели ТЧ ЦеныПоставщика.
//
Процедура КоманднаяПанельЦеныПоставщикаПеречитатьТекущиеЦены(Кнопка)

Запрос = Новый Запрос("
|ВЫБРАТЬ
| Цены.ТипЦен КАК ТипЦен,
| Цены.Цена КАК Цена,
| Цены.Валюта КАК Валюта,
| Цены.ЕдиницаИзмерения КАК ЕдиницаИзмерения
|ИЗ
| РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&Дата, ТипЦен В (&ТипыЦен)
| И Номенклатура = &Номенклатура И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ) КАК Цены
|");

Запрос.УстановитьПараметр("Дата", РабочаяДата);
Запрос.УстановитьПараметр("ТипыЦен", ЦеныПоставщика.ВыгрузитьКолонку("ТипЦен"));
Запрос.УстановитьПараметр("Номенклатура", Ссылка);

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаЦен = ЦеныПоставщика.Найти(Выборка.ТипЦен, "ТипЦен");
ЗаполнитьЗначенияСвойств(СтрокаЦен, Выборка);
КонецЦикла;

КонецПроцедуры // КоманднаяПанельЦеныПоставщикаПеречитатьТекущиеЦены()

// Обработчик события "Нажатие" кнопки "ЗаписатьЦены" в командной панели ТЧ ЦеныНоменклатуры.
//
Процедура КоманднаяПанельЦеныНоменклатурыЗаписатьЦены(Кнопка)

ЗаголовокСообщений = Заголовок;

Отказ = Ложь;
ПроверитьЦеныНоменклатуры(ЗаголовокСообщений, Отказ);

Если Не Отказ Тогда
СохранитьЦеныНоменклатуры(Отказ);
КонецЕсли;

КонецПроцедуры // КоманднаяПанельЦеныНоменклатурыЗаписатьЦены()

// Обработчик события "Нажатие" кнопки "ЗаписатьЦены" в командной панели ТЧ НоменклатураПоставщика.
//
Процедура КоманднаяПанельЦеныПоставщикаЗаписатьЦены(Кнопка)

ЗаголовокСообщений = Заголовок;

Отказ = Ложь;
ПроверитьЦеныКонтрагента(ЗаголовокСообщений, Отказ);

Если Не Отказ Тогда
СохранитьНоменклатуруКонтрагента(Отказ);
КонецЕсли;

КонецПроцедуры // КоманднаяПанельЦеныПоставщикаЗаписатьЦены()

// Процедура проверяет правильность заполнения таблицы цен номенклатуры контрагента.
//
// Параметры:
// ЗаголовокСообщений - Строка. Заголовок сообщений об эшибках.
// Отказ - в эту переменную вернется значение Истина, если при проверке обнаружены ошибки.
Процедура ПроверитьЦеныКонтрагента(ЗаголовокСообщений, Отказ)

Для Каждого ТипЦенКонтрагента Из ЦеныПоставщика Цикл
Если ТипЦенКонтрагента.Записать Тогда

// Цена.
Если НЕ ЗначениеЗаполнено(ТипЦенКонтрагента.Цена) Тогда
СтрокаСообщения = "Для типа цен поставщика """ + Строка(ТипЦенКонтрагента.ТипЦен) + """ не заполнена цена.";
ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений);
КонецЕсли;

// Валюта.
Если НЕ ЗначениеЗаполнено(ТипЦенКонтрагента.Валюта) Тогда
СтрокаСообщения = "Для типа цен поставщика """ + Строка(ТипЦенКонтрагента.ТипЦен) + """ не заполнена валюта.";
ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений);
КонецЕсли;

// Единица измерения.
Если НЕ ЗначениеЗаполнено(ТипЦенКонтрагента.ЕдиницаИзмерения) Тогда
СтрокаСообщения = "Для типа цен поставщика """ + Строка(ТипЦенКонтрагента.ТипЦен) + """ не заполнена единица измерения.";
ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений);
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецПроцедуры // ПроверитьЦеныКонтрагента()

// Процедура проверяет правильность заполнения таблицы цен номенклатуры.
//
// Параметры:
// ЗаголовокСообщений - Строка. Заголовок сообщений об эшибках.
// Отказ - в эту переменную вернется значение Истина, если при проверке обнаружены ошибки.
Процедура ПроверитьЦеныНоменклатуры(ЗаголовокСообщений, Отказ)

Для Каждого ТипЦенНоменклатуры Из ЦеныНоменклатуры Цикл
Если ТипЦенНоменклатуры.Записать Тогда
Если Не ТипЦенНоменклатуры.ТипЦен.Рассчитывается Тогда

// Цена.
Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.Цена) Тогда
СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнена цена.";
ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений);
КонецЕсли;
КонецЕсли;

// Способ расчета цены.
Если ЗначениеЗаполнено(ТипЦенНоменклатуры.ТипЦен.БазовыйТипЦен) Тогда
Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.СпособРасчетаЦены) Тогда
СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнен способ расчета цены.";
ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений);
КонецЕсли;
КонецЕсли;

// Валюта.
Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.Валюта) Тогда
СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнена валюта.";
ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений);
КонецЕсли;

// Единица измерения.
Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.ЕдиницаИзмерения) Тогда
СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнена единица измерения.";
ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений);
КонецЕсли;

// Доступность изменения процента скидки наценки в строке.
Если ЗначениеЗаполнено(ТипЦенНоменклатуры.ТипЦен.БазовыйТипЦен)
И ТипЦенНоменклатуры.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип Тогда
// Процент скидки/наценки.
Если НЕ ЗначениеЗаполнено(ТипЦенНоменклатуры.ПроцентСкидкиНаценки) Тогда
СтрокаСообщения = "Для типа цен """ + Строка(ТипЦенНоменклатуры.ТипЦен) + """ не заполнен процент скидки/наценки.";
ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецПроцедуры // ПроверитьЦеныНоменклатуры()

// Процедура сохраняет данные по номенклатуре контрагента.
//
// Параметры:
// Отказ - в эту переменную вернется значение Истина, если попытка сохранения провалилась.
Процедура СохранитьНоменклатуруКонтрагента(Отказ)

// Если Основной поставщик не выбран, то и делать больше нечего.
Если ЗначениеЗаполнено(ОсновнойПоставщик) Тогда
ЗаписатьЦеныКонтрагента = Ложь;
Для Каждого ТипЦенКонтрагента Из ЦеныПоставщика Цикл
Если ТипЦенКонтрагента.Записать Тогда
ЗаписатьЦеныКонтрагента = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

// Если нет ни одного типа цен для записи, то создавать документ смысла нет.
Если ЗаписатьЦеныКонтрагента Тогда
Если НЕ ЗначениеЗаполнено(ДокументУстановкаЦенКонтрагента) Тогда
Ответ = Вопрос("Не выбран документ для записи данных по ценам поставщика."
+ Символы.ПС + "Создать новый документ ""Установка цен номенклатуры контрагентов"" и продолжить запись?"
, РежимДиалогаВопрос.ДаНет);

Если Ответ = КодВозвратаДиалога.Да Тогда
ДокументОбъект = Документы.УстановкаЦенНоменклатурыКонтрагентов.СоздатьДокумент();
ДокументОбъект.Дата = РабочаяДата;
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокументОбъект, глЗначениеПеременной("глТекущийПользователь"));
ДокументОбъект.Контрагент = ОсновнойПоставщик;

ИндексСтрокиТаблицыЦен = 0;
ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Иначе
ДокументОбъект = ДокументУстановкаЦенКонтрагента.ПолучитьОбъект();

// Определим следующий индекс строки.
Если ДокументОбъект.Товары.Количество() = 0 Тогда
ИндексСтрокиТаблицыЦен = 1;
Иначе
СписокИндексов = Новый СписокЗначений;
СписокИндексов.ЗагрузитьЗначения(ДокументОбъект.Товары.ВыгрузитьКолонку("ИндексСтрокиТаблицыЦен"));
СписокИндексов.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
ИндексСтрокиТаблицыЦен = СписокИндексов[0].Значение + 1;
КонецЕсли;
КонецЕсли;

Для Каждого ТипЦенКонтрагента Из ЦеныПоставщика Цикл
Если ТипЦенКонтрагента.Записать Тогда
СтрокаТипЦен = ДокументОбъект.ТипыЦен.Найти(ТипЦенКонтрагента.ТипЦен, "ТипЦен");

Если СтрокаТипЦен = Неопределено Тогда
СтрокаТипЦен = ДокументОбъект.ТипыЦен.Добавить();
СтрокаТипЦен.ТипЦен = ТипЦенКонтрагента.ТипЦен;
КонецЕсли;

СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Номенклатура", Ссылка);
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
СтруктураПоиска.Вставить("ТипЦен", ТипЦенКонтрагента.ТипЦен);

СтрокаТовары = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ДокументОбъект.Товары, СтруктураПоиска);

Если СтрокаТовары = Неопределено Тогда
СтрокаТовары = ДокументОбъект.Товары.Добавить();
СтрокаТовары.Номенклатура = Ссылка;
СтрокаТовары.ТипЦен = ТипЦенКонтрагента.ТипЦен;
СтрокаТовары.ИндексСтрокиТаблицыЦен = ИндексСтрокиТаблицыЦен;
КонецЕсли;

СтрокаТовары.Цена = ТипЦенКонтрагента.Цена;
СтрокаТовары.Валюта = ТипЦенКонтрагента.Валюта;
СтрокаТовары.ЕдиницаИзмерения = ТипЦенКонтрагента.ЕдиницаИзмерения;
КонецЕсли;
КонецЦикла;

Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ДокументУстановкаЦенКонтрагента = ДокументОбъект.Ссылка;
Исключение
Сообщить("Не удалось записать документ установки цен: " + ОписаниеОшибки(), СтатусСообщения.Важное);
Отказ = Истина;
Возврат;
КонецПопытки;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // СохранитьНоменклатуруКонтрагента()

// Процедура сохраняет данные по ценам номенклатуры.
//
// Параметры:
// Отказ - в эту переменную вернется значение Истина, если попытка сохранения провалилась.
Процедура СохранитьЦеныНоменклатуры(Отказ)

ЗаписатьЦеныНоменклатуры = Ложь;
Для Каждого ТипЦенНоменклатуры Из ЦеныНоменклатуры Цикл
Если ТипЦенНоменклатуры.Записать Тогда
ЗаписатьЦеныНоменклатуры = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

// Если нет ни одного типа цен для записи, то создавать документ смысла нет.
Если ЗаписатьЦеныНоменклатуры Тогда
Если НЕ ЗначениеЗаполнено(ДокументУстановкаЦен) Тогда
Ответ = Вопрос("Не выбран документ для записи данных по ценам номенклатуры."
+ Символы.ПС + "Создать новый документ ""Установка цен номенклатуры"" и продолжить запись?"
, РежимДиалогаВопрос.ДаНет);

Если Ответ = КодВозвратаДиалога.Да Тогда
ДокументОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ДокументОбъект.Дата = РабочаяДата;
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокументОбъект, глЗначениеПеременной("глТекущийПользователь"));

ИндексСтрокиТаблицыЦен = 0;
ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Иначе
ДокументОбъект = ДокументУстановкаЦен.ПолучитьОбъект();

// Определим следующий индекс строки.
Если ДокументОбъект.Товары.Количество() = 0 Тогда
ИндексСтрокиТаблицыЦен = 1;
Иначе
СписокИндексов = Новый СписокЗначений;
СписокИндексов.ЗагрузитьЗначения(ДокументОбъект.Товары.ВыгрузитьКолонку("ИндексСтрокиТаблицыЦен"));
СписокИндексов.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
ИндексСтрокиТаблицыЦен = СписокИндексов[0].Значение + 1;
КонецЕсли;
КонецЕсли;

Для Каждого ТипЦенНоменклатуры Из ЦеныНоменклатуры Цикл
Если ТипЦенНоменклатуры.Записать Тогда
СтрокаТипЦен = ДокументОбъект.ТипыЦен.Найти(ТипЦенНоменклатуры.ТипЦен, "ТипЦен");

Если СтрокаТипЦен = Неопределено Тогда
СтрокаТипЦен = ДокументОбъект.ТипыЦен.Добавить();
СтрокаТипЦен.ТипЦен = ТипЦенНоменклатуры.ТипЦен;
КонецЕсли;

СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Номенклатура", Ссылка);
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
СтруктураПоиска.Вставить("ТипЦен", ТипЦенНоменклатуры.ТипЦен);

СтрокаТовары = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ДокументОбъект.Товары, СтруктураПоиска);

Если СтрокаТовары = Неопределено Тогда
СтрокаТовары = ДокументОбъект.Товары.Добавить();
СтрокаТовары.Номенклатура = Ссылка;
//СтрокаТовары.ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
СтрокаТовары.ТипЦен = ТипЦенНоменклатуры.ТипЦен;
СтрокаТовары.ИндексСтрокиТаблицыЦен = ИндексСтрокиТаблицыЦен;
КонецЕсли;

СтрокаТовары.Цена = ТипЦенНоменклатуры.Цена;
СтрокаТовары.Валюта = ТипЦенНоменклатуры.Валюта;
СтрокаТовары.ЕдиницаИзмерения = ТипЦенНоменклатуры.ЕдиницаИзмерения;
СтрокаТовары.ПроцентСкидкиНаценки = ТипЦенНоменклатуры.ПроцентСкидкиНаценки;
СтрокаТовары.СпособРасчетаЦены = ТипЦенНоменклатуры.СпособРасчетаЦены;
КонецЕсли;
КонецЦикла;

Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ДокументУстановкаЦен = ДокументОбъект.Ссылка;
Исключение
Сообщить("Не удалось записать документ установки цен: " + ОписаниеОшибки(), СтатусСообщения.Важное);
Отказ = Истина;
Возврат;
КонецПопытки;
КонецЕсли;

КонецПроцедуры // СохранитьЦеныНоменклатуры()

// Процедура управляет внешним видом формы при открытии.
//
Процедура УстановитьВидимостьПриОткрытии()

СписокКнопокФайлов = Новый СписокЗначений;
СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Файлы);
СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Подменю.Кнопки.Файлы);
РаботаСФайлами.ПолучитьКартинкуКнопкиОткрытияФайлов(Ссылка, СписокКнопокФайлов);

Если НЕ ЗначениеЗаполнено(мЕдиницаИзмеренияВеса) Тогда
ЭлементыФормы.ЕдиницыИзмерения.Колонки.Вес.ТекстШапки = "Вес (не назначена единица измерения)";
Иначе
ЭлементыФормы.ЕдиницыИзмерения.Колонки.Вес.ТекстШапки = "Вес (" + СокрЛП(мЕдиницаИзмеренияВеса) + ")";
КонецЕсли;

Если НЕ ЗначениеЗаполнено(мЕдиницаИзмеренияОбъема) Тогда
ЭлементыФормы.ЕдиницыИзмерения.Колонки.Объем.ТекстШапки = "Объем (не назначена единица измерения)";
Иначе
ЭлементыФормы.ЕдиницыИзмерения.Колонки.Объем.ТекстШапки = "Объем (" + СокрЛП(мЕдиницаИзмеренияОбъема) + ")";
КонецЕсли;

// Установим сортировку комплектующих на закладке "Комплектующие".
ЭлементыФормы.Комплектующие.НастройкаПорядка.Комплектующая.Доступность = Истина;
ЭлементыФормы.Комплектующие.НастройкаПорядка.ХарактеристикаКомплектующей.Доступность = Истина;

КонецПроцедуры // УстановитьВидимостьПриОткрытии()

// Процедура заполняет реквизиты значениями по умолчанию.
//
Процедура ЗаполнитьРеквизитыПоУмолчанию()

Если НЕ ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда
БазоваяЕдиницаИзмерения = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяЕдиницаПоКлассификатору");
КонецЕсли;

Если НЕ ЗначениеЗаполнено(СтавкаНДС) Тогда
СтавкаНДС = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяСтавкаНДС");
КонецЕсли;

Если НЕ ЗначениеЗаполнено(ВидНоменклатуры) Тогда
Если ЗначениеЗаполнено(Родитель.ВидНоменклатуры) Тогда
ВидНоменклатуры = Родитель.ВидНоменклатуры;
Иначе
ВидНоменклатуры = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойВидНоменклатуры");
КонецЕсли;

ПриИзмененииВидаНоменклатуры();
КонецЕсли;

КонецПроцедуры // ЗаполнитьРеквизитыПоУмолчанию()

// Процедура, выполняющая необходимые действия при изменении вида номенклатуры.
//
Процедура ПриИзмененииВидаНоменклатуры()

ЗаполнитьПризнакиПоВидуНоменклатуры();

УстановитьВидимость();

КонецПроцедуры // ПриИзмененииВидаНоменклатуры()

// Процедура устанавливает в поле картинки основное изображение номенклатуры.
//
Процедура ПоказатьОсновноеИзображение() Экспорт

Если ЭлементыФормы.ДействияФормы.Кнопки.Изображение.Пометка = Истина Тогда
Если мТекущееОсновноеИзображение = Неопределено Тогда
ЭлементыФормы.ОсновноеИзображение.Картинка = мПустаяКартинка;
Иначе
ЭлементыФормы.ОсновноеИзображение.Картинка = мТекущееОсновноеИзображение;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ПоказатьОсновноеИзображение()

// Показывает или прячет панель основного изображения в зависимости от пометки кнопки изображения.
//
Процедура ПоказатьСпрятатьПанельОсновногоИзображения()

Если ЭлементыФормы.ДействияФормы.Кнопки.Изображение.Пометка Тогда
ЭлементыФормы.ПанельОсновногоИзображения.Свертка = РежимСверткиЭлементаУправления.Нет;
Иначе
ЭлементыФормы.ПанельОсновногоИзображения.Свертка = РежимСверткиЭлементаУправления.Лево;
КонецЕсли;

ПоказатьОсновноеИзображение();

КонецПроцедуры // ПоказатьСпрятатьПанельОсновногоИзображения()

// Процедура устанавливает свойство в строке ТЧ.
//
// Параметры:
// ТЗ - ТаблицаЗначений, в которой нужно установить свойство.
// Имя - Строка. В строке, колонка "Имя" которой содержит переданный параметр,
// нужно установить свойство.
// ИмяСвойства - Строка. Имя свойства, которое нужно установить.
// ЗначениеСвойства - значение которое нужно установить.
//
Процедура УстановитьСвойствоВТЗ(ТЗ, Имя, ИмяСвойства, ЗначениеСвойства)

ТЗ.Найти(Имя, "Имя")[ИмяСвойства] = ЗначениеСвойства;

КонецПроцедуры // УстановитьСвойствоВТЗ()

// Процедура устанавливает видимость для элементов формы.
//
Процедура УстановитьВидимость(ТолькоКнопкиНавигации = Ложь)

Перем НомерТекущейСтраницы;

// Погасим кнопки навигации.
МассивВидимыхСтраниц = ПолучитьМассивДоступныхСтраниц(НомерТекущейСтраницы);
Если МассивВидимыхСтраниц.Количество() = 0 Тогда
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Назад.Доступность = Ложь;
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыДалее.Доступность = Ложь;
Иначе
Если НомерТекущейСтраницы = 0 Тогда
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Назад.Доступность = Ложь;
Иначе
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Назад.Доступность = Истина;
КонецЕсли;
Если НомерТекущейСтраницы = МассивВидимыхСтраниц.ВГраница() Тогда
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыДалее.Доступность = Ложь;
Иначе
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОсновныеДействияФормыДалее.Доступность = Истина;
КонецЕсли;
КонецЕсли;

Если ТолькоКнопкиНавигации Тогда
Возврат;
КонецЕсли;

НаборКомплект = (Набор Или Комплект);
Товар = Не (Услуга Или НаборКомплект);
ДоступностьСерия = (мИспользоватьСерии И ВестиУчетПоСериям И Товар);
БезНДС = (СтавкаНДС = Перечисления.СтавкиНДС.БезНДС);
НеНДС = (СтавкаНДС = Перечисления.СтавкиНДС.НеНДС);

// Системная видимость страниц.
ТаблицаСтраниц.ЗаполнитьЗначения(Истина, "ВидимостьСистемная");
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "ПоУмолчанию" , "ВидимостьСистемная", Не Набор);
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Дополнительные" , "ВидимостьСистемная", Не НаборКомплект);
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "КодыВесовогоТовара" , "ВидимостьСистемная", Весовой);
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Штрихкоды" , "ВидимостьСистемная", Не Весовой);
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "ЦеныНоменклатуры" , "ВидимостьСистемная", Не Набор);
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "НоменклатураПоставщика", "ВидимостьСистемная", Не (НЕ ЗначениеЗаполнено(ОсновнойПоставщик) Или НаборКомплект));
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Характеристики" , "ВидимостьСистемная", ВестиУчетПоХарактеристикам И мИспользоватьХарактеристики);
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Серии" , "ВидимостьСистемная", ВестиУчетПоСериям И мИспользоватьСерии);
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "Комплектующие" , "ВидимостьСистемная", Не Услуга);
УстановитьСвойствоВТЗ(ТаблицаСтраниц, "МестаХранения" , "ВидимостьСистемная", (Не Услуга) И (Не Набор) И (Не НаборКомплект));

// Системная видимость реквизитов.
ТаблицаРеквизитов.ЗаполнитьЗначения(Истина, "ДоступностьСистемная");
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ВестиУчетПоХарактеристикам" , "ДоступностьСистемная", (Товар Или Комплект) И мИспользоватьХарактеристики);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ВестиУчетПоСериям" , "ДоступностьСистемная", Товар И мИспользоватьСерии);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "Весовой" , "ДоступностьСистемная", Товар);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ВестиПартионныйУчетПоСериям" , "ДоступностьСистемная", ДоступностьСерия);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ВестиСерийныеНомера" , "ДоступностьСистемная", Товар И мИспользоватьСерийныеНомера);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ЛьготаНДС" , "ДоступностьСистемная", БезНДС ИЛИ НеНДС);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ТекстДляПечатиВКолонкеКоличествоНалоговойНакладной" , "ДоступностьСистемная", ИзмеряетсяТолькоВСуммовомВыражении);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ТранспортнаяУслуга" , "ДоступностьСистемная", Услуга);

// Системная обязательность реквизитов.
ТаблицаРеквизитов.ЗаполнитьЗначения(Ложь, "ОбязательностьСистемная");
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "БазоваяЕдиницаИзмерения", "ОбязательностьСистемная", Не Услуга);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ЕдиницаХраненияОстатков", "ОбязательностьСистемная", Не Услуга);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ЕдиницаДляОтчетов" , "ОбязательностьСистемная", Не Услуга);
УстановитьСвойствоВТЗ(ТаблицаРеквизитов, "ВидНоменклатуры" , "ОбязательностьСистемная", Истина);

// Видимость колонок в табличных полях.
УстановитьВидимостьКолонокТП("Штрихкоды");
УстановитьВидимостьКолонокТП("КодыВесовогоТовара");
УстановитьВидимостьКолонокТП("НоменклатураКонтрагентов");
УстановитьВидимостьКолонокТП("Комплектующие");

УстановитьВидимостьПомощник();

УстановитьОтборыДляТЧ();

ЭлементыФормы.НоменклатураГТД.Доступность = НЕ ЭтоНовый();

ЭлементыФормы.ПодакцизныйТовар.Доступность = Не Услуга;
ЭлементыФормы.СтатьяДекларацииПоАкцизномуНалогу.Доступность = ПодакцизныйТовар;
ЭлементыФормы.НадписьСтатьяДекларацииПоАкцизномуНалогу.Доступность = ПодакцизныйТовар;

КонецПроцедуры // УстановитьВидимость()

// Процедура снимает флаги, имена которых переданы в структуре, если флаги установлены.
//
// Параметры:
// СтруктураФлагов - структура с именами флагов.
//
Процедура СнятьФлаги(СтруктураФлагов)

Для Каждого ИмяФлага Из СтруктураФлагов Цикл
Если ЭтотОбъект[ИмяФлага.Ключ] Тогда
ЭтотОбъект[ИмяФлага.Ключ] = Ложь;
КонецЕсли;
КонецЦикла;

КонецПроцедуры // СнятьФлаги()

// Процедура заполняет по реквизиту формы ВидНоменлатуры признаки Услуга и Набор
//
Процедура ЗаполнитьПризнакиПоВидуНоменклатуры()

Услуга = (ВидНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга);
Набор = (ВидНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор);
Комплект = (ВидНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Комплект);

Если ТранспортнаяУслуга И Не Услуга Тогда
ТранспортнаяУслуга=Ложь;
КонецЕсли;

Если Услуга Или Набор Или Комплект Тогда
СтруктураФлагов = Новый Структура;
СтруктураФлагов.Вставить("ВестиУчетПоСериям");
СтруктураФлагов.Вставить("ВестиПартионныйУчетПоСериям");
СтруктураФлагов.Вставить("Весовой");
СтруктураФлагов.Вставить("ВестиСерийныеНомера");

Если Услуга Или Набор Тогда
СтруктураФлагов.Вставить("ВестиУчетПоХарактеристикам");

Если Услуга Тогда
СтранаПроисхождения = Неопределено;
КонецЕсли;
КонецЕсли;

СнятьФлаги(СтруктураФлагов);
КонецЕсли;

КонецПроцедуры // ЗаполнитьПризнакиПоВидуНоменклатуры()

// Процедура управляет видимостью колонок "Характеристика", "Серия" и "Качество"
// заданного табличного поля.
//
// Параметры:
// ИмяТП - Строка. Имя табличного поля
//
Процедура УстановитьВидимостьКолонокТП(ИмяТП)

Товар = Не (Услуга Или Набор Или Комплект);

ВидимостьХарактеристики = (Товар Или Комплект) И мИспользоватьХарактеристики И ВестиУчетПоХарактеристикам;
ВидимостьСерии = Товар И мИспользоватьСерии И ВестиУчетПоСериям;
ВидимостьКачество = Товар;

Колонки = ЭлементыФормы[ИмяТП].Колонки;

КолонкаХарактеристика = Колонки.Найти("ХарактеристикаНоменклатуры");
Если КолонкаХарактеристика <> Неопределено Тогда
КолонкаХарактеристика.Видимость = ВидимостьХарактеристики;
КолонкаХарактеристика.ИзменятьВидимость = ВидимостьХарактеристики;
КонецЕсли;

КолонкаХарактеристикаКомплектующей = Колонки.Найти("ХарактеристикаКомплектующей");
Если КолонкаХарактеристикаКомплектующей <> Неопределено Тогда
КолонкаХарактеристикаКомплектующей.Видимость = ВидимостьХарактеристики ИЛИ (мИспользоватьХарактеристики И (Комплект ИЛИ Товар ИЛИ Набор) И ИмяТП = "Комплектующие");
КолонкаХарактеристикаКомплектующей.ИзменятьВидимость = ВидимостьХарактеристики ИЛИ (мИспользоватьХарактеристики И (Комплект ИЛИ Товар ИЛИ Набор) И ИмяТП = "Комплектующие");
КонецЕсли;

КолонкаСерия = Колонки.Найти("СерияНоменклатуры");
Если КолонкаСерия <> Неопределено Тогда
КолонкаСерия.Видимость = ВидимостьСерии;
КолонкаСерия.ИзменятьВидимость = ВидимостьСерии;
КонецЕсли;

КолонкаКачество = Колонки.Найти("Качество");
Если КолонкаКачество <> Неопределено Тогда
КолонкаКачество.Видимость = ВидимостьКачество;
КолонкаКачество.ИзменятьВидимость = ВидимостьКачество;
КонецЕсли;

КонецПроцедуры // УстановитьВидимостьКолонокТП()

// Процедура проверяет, совпадало ли ранее полное наименование с наименованием,
// и присваивает соответствующее значение переменной мФормироватьНаименованиеПолноеАвтоматически.
//
Процедура УстановитьФлагФормироватьНаименованиеПолноеАвтоматически()

Если ПустаяСтрока(НаименованиеПолное) Или НаименованиеПолное = Наименование Тогда
мФормироватьНаименованиеПолноеАвтоматически = Истина;
Иначе
мФормироватьНаименованиеПолноеАвтоматически = Ложь;
КонецЕсли;

КонецПроцедуры // УстановитьФлагФормироватьНаименованиеПолноеАвтоматически()

// Процедура проверяет, необходимо ли формировать полное наименование автоматически или нет,
// и, если необходимо, формирует его.
//
Процедура СформироватьНаименованиеПолноеАвтоматически()

Если мФормироватьНаименованиеПолноеАвтоматически Тогда
НаименованиеПолное = Наименование;
КонецЕсли;

КонецПроцедуры // СформироватьНаименованиеПолноеАвтоматически()

// Процедура записывает единицу хранения остатков номенклатуры.
//
Процедура ПроверитьЕдиницуХраненияОстатков(Отказ)

Если ЗначениеЗаполнено(ЕдиницаХраненияОстатков) Тогда
Возврат;
КонецЕсли;

ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, Ссылка);
Если ВыборкаЕдиниц.Следующий() Тогда
НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
Иначе
НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НайденнаяЕдиницаОбъект.Наименование = СокрЛП(БазоваяЕдиницаИзмерения);
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = БазоваяЕдиницаИзмерения;
НайденнаяЕдиницаОбъект.Коэффициент = 1;
НайденнаяЕдиницаОбъект.Владелец = Ссылка;

Попытка
НайденнаяЕдиницаОбъект.Записать();
Исключение
Сообщить("Не удалось записать единицу хранения остатков: " + ОписаниеОшибки(), СтатусСообщения.Важное);
Отказ = Истина;
Возврат;
КонецПопытки;

НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
КонецЕсли;

ЕдиницаХраненияОстатков = НайденнаяЕдиница;

Попытка
ЗаписатьВФорме();
Исключение
Отказ = Истина;
КонецПопытки;

КонецПроцедуры // ПроверитьЕдиницуХраненияОстатков()

// Процедура вызывает сервисный механизм для подбора номеклатуры в табличную часть.
//
Процедура ДействиеПодбор()

СписокВидовПодбора = Новый СписокЗначений;
СписокВидовПодбора.Добавить(, "По справочнику");

СтруктураПараметровПодбора = Новый Структура;
СтруктураПараметровПодбора.Вставить("Команда" , "");
СтруктураПараметровПодбора.Вставить("СписокВидовПодбора" , СписокВидовПодбора);
СтруктураПараметровПодбора.Вставить("Заголовок" , "Подбор комплектующих в " + Наименование);
СтруктураПараметровПодбора.Вставить("ЕстьКоличество" , Истина);
СтруктураПараметровПодбора.Вставить("ЕстьЦена" , Ложь);
СтруктураПараметровПодбора.Вставить("ЕстьСерия" , Ложь);
СтруктураПараметровПодбора.Вставить("Склад" , Неопределено);

// Открываем форму подбора.
ФормаПодбора = Обработки.ПодборНоменклатуры.ПолучитьФорму("ОсновнаяФорма", ЭтаФорма, ЭтаФорма);
ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = СтруктураПараметровПодбора;
ФормаПодбора.Открыть();

КонецПроцедуры // ДействиеПодбор()

// Производит заполнение переданными из формы подбора данными.
//
// Параметры:
// ЗначениеВыбора - структура, содержащая параметры подбора.
//
Процедура ОбработкаПодбора(ЗначениеВыбора)

Перем Номенклатура, ЕдиницаИзмерения, Количество, Характеристика;

// Получим параметры подбора из структуры подбора.
ЗначениеВыбора.Свойство("Номенклатура" , Номенклатура);
ЗначениеВыбора.Свойство("ЕдиницаИзмерения", ЕдиницаИзмерения);
ЗначениеВыбора.Свойство("Количество" , Количество);
ЗначениеВыбора.Свойство("Характеристика" , Характеристика);

ТекЗапись = РегистрыСведений.КомплектующиеНоменклатуры.СоздатьМенеджерЗаписи();

ТекЗапись.Номенклатура = Ссылка;
ТекЗапись.Комплектующая = Номенклатура;
ТекЗапись.Количество = Количество;
ТекЗапись.ЕдиницаИзмерения = ЕдиницаИзмерения;
ТекЗапись.ХарактеристикаКомплектующей = Характеристика;

Попытка
ТекЗапись.Записать();
Исключение
КонецПопытки;

КонецПроцедуры // ОбработкаПодбора()

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ

// Обработчик события ПриОткрытии Формы.
//
Процедура ПриОткрытии()

МеханизмНумерацииОбъектов.УстановитьДоступностьПоляВводаНомера(Метаданные(), ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Код);

мТекущееОсновноеИзображение = ОсновноеИзображение.Хранилище.Получить();

ПоказыватьКартинку = ВосстановитьЗначение("Справочники.Номенклатура.ФормаЭлемента.Изображение");

// Если сохраненного значения нет - режим показа картинки оставим по умолчанию.
Если ПоказыватьКартинку <> Неопределено Тогда
ЭлементыФормы.ДействияФормы.Кнопки.Изображение.Пометка = ПоказыватьКартинку;
КонецЕсли;

ПоказатьСпрятатьПанельОсновногоИзображения();

ОбновитьДанные();

УстановитьВидимостьПриОткрытии();

УстановитьВидимость();

Если НЕ мИспользоватьХарактеристики Тогда
СтруктураСкрываемыхСтраниц.Вставить("Характеристики");
КонецЕсли;
Если НЕ мИспользоватьСерии Тогда
СтруктураСкрываемыхСтраниц.Вставить("Серии");
КонецЕсли;

ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);

// Установить печатную форму по умолчанию.
РаботаСДиалогами.УстановитьКнопкуПечати(ЭтотОбъект, ЭтаФорма);

// Заполнить свойства
ОбработкаОбъектЗначенияСвойств.НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура;
ПрочитатьЗаполнитьСвойстваИЗначения();

// Заполнить категории
ОбработкаОбъектКатегорииОбъекта.НазначениеКатегорий = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура;
ПрочитатьЗаполнитьКатегории();

КонецПроцедуры // ПриОткрытии()

// Процедура - обработчик события "ПриЗакрытии" формы.
//
Процедура ПриЗакрытии()

СохранитьЗначение("Справочники.Номенклатура.ФормаЭлемента.Изображение", ЭлементыФормы.ДействияФормы.Кнопки.Изображение.Пометка);

ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);

КонецПроцедуры // ПриЗакрытии()

// Обработчик события ПриЗаписи формы.
//
Процедура ПриЗаписи(Отказ)

Если Услуга Тогда
Если ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда
ПроверитьЕдиницуХраненияОстатков(Отказ);
КонецЕсли;
Иначе
Если НЕ ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Перед записью необходимо определить базовую единицу измерения!", Отказ);
Иначе
ПроверитьЕдиницуХраненияОстатков(Отказ);
КонецЕсли;

Если ПустаяСтрока(ЕдиницаХраненияОстатков) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Перед записью необходимо определить единицу хранения остатков!", Отказ);
КонецЕсли;
КонецЕсли;

// Обработка записи свойств и категорий.
Если Не Отказ Тогда
ОбработкаОбъектЗначенияСвойств.ОбъектОтбораЗначений = Ссылка;
Отказ = Не ОбработкаОбъектЗначенияСвойств.ЗаписатьЗначенияСвойств();

ОбработкаОбъектКатегорииОбъекта.ОбъектОтбораКатегорий = Ссылка;
Отказ = Не ОбработкаОбъектКатегорииОбъекта.ЗаписатьКатегорииОбъекта();
КонецЕсли;

КонецПроцедуры // ПриЗаписи()

// Обработчик события ПослеЗаписи формы.
//
Процедура ПослеЗаписи()

// Оповестим форму списка о том, что возможно надо обновить изображение.
Оповестить("ЗаписанЭлементНоменклатуры", Ссылка, ЭтаФорма);

ОбновитьДанные();

УстановитьВидимость();

МеханизмНумерацииОбъектов.ОбновитьПодсказкуКодНомерОбъекта(ЭтотОбъект.Метаданные(), ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Код);

ПрочитатьЗаполнитьСвойстваИЗначения();
ПрочитатьЗаполнитьКатегории();

КонецПроцедуры // ПослеЗаписи()

// Обработчик события ПриИзмененииДанных формы.
//
Процедура ПриИзмененииДанных()

ПрочитатьЗаполнитьСвойстваИЗначения();
ПрочитатьЗаполнитьКатегории();

УстановитьФлагФормироватьНаименованиеПолноеАвтоматически();

КонецПроцедуры // ПриИзмененииДанных()

// Обработчик события ОбработкаВыбора формы.
//
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)

Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.ТипыЦенНоменклатуры") Тогда
мТипЦенДляПечати = ЗначениеВыбора;
ИначеЕсли ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.ХранилищеДополнительнойИнформации") Тогда
Если ОсновноеИзображение <> ЗначениеВыбора Тогда
ОсновноеИзображение = ЗначениеВыбора;
КонецЕсли;

мТекущееОсновноеИзображение = ОсновноеИзображение.Хранилище.Получить();
ПоказатьОсновноеИзображение();

СписокКнопокФайлов = Новый СписокЗначений;
СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Файлы);
СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Подменю.Кнопки.Файлы);
РаботаСФайлами.ПолучитьКартинкуКнопкиОткрытияФайлов(Ссылка, СписокКнопокФайлов);

ИначеЕсли ТипЗнч(ЗначениеВыбора) = Тип("Структура") Тогда
ОбработкаПодбора(ЗначениеВыбора);
КонецЕсли;

КонецПроцедуры // ОбработкаВыбора()

// Обработчик события ОбработкаЗаписиНовогоОбъекта формы.
//
Процедура ОбработкаЗаписиНовогоОбъекта(Объект, Источник)

Если ТипЗнч(Объект) = Тип("ПланВидовХарактеристикОбъект.СвойстваОбъектов") Тогда
ОбработкаОбъектЗначенияСвойств.ПроверитьДобавитьНовоеСвойство(Объект.Ссылка, ЭлементыФормы.СвойстваИЗначения);
КонецЕсли;

Если ТипЗнч(Объект) = Тип("СправочникОбъект.КатегорииОбъектов") Тогда
ОбработкаОбъектКатегорииОбъекта.ПроверитьДобавитьНовуюКатегорию(Объект.Ссылка, ЭлементыФормы.Категории);
КонецЕсли;

КонецПроцедуры // ОбработкаЗаписиНовогоОбъекта()

// Обработчик события ОбработкаОповещения формы.
//
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если ИмяСобытия = "ОбновитьФорму" и (Источник = Ссылка или (ТипЗнч(Источник) = Тип("СправочникСсылка.Номенклатура") и Источник.Пустая())) Тогда
ИмяОбновляемогоЭлемента = Параметр.ИмяЭлемента;

Если ИмяОбновляемогоЭлемента = "ОсновноеИзображение" Тогда
Если мТекущееОсновноеИзображение <> ОсновноеИзображение.Хранилище.Получить() Тогда
мТекущееОсновноеИзображение = ОсновноеИзображение.Хранилище.Получить();
ПоказатьОсновноеИзображение();
КонецЕсли;
ИначеЕсли ИмяОбновляемогоЭлемента = "ИзмененСписокСправочникаХранилищеДопИнформации" Тогда
СписокКнопокФайлов = Новый СписокЗначений;
СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Файлы);
СписокКнопокФайлов.Добавить(ЭлементыФормы.ДействияФормы.Кнопки.Подменю.Кнопки.Файлы);
РаботаСФайлами.ПолучитьКартинкуКнопкиОткрытияФайлов(Ссылка, СписокКнопокФайлов);
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ОбработкаОповещения()

// Обработчик события элемента КоманднаяПанельФормы.Файлы.
//
Процедура ДействияФормыФайлы(Кнопка)

Если Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма) Тогда
Возврат;
КонецЕсли;

СтруктураДляСпискаИзображдений = Новый Структура("ОтборОбъектИспользование, ОтборОбъектЗначение, ДоступностьОтбораОбъекта, ВидимостьКолонкиОбъекта", Истина, Ссылка, Ложь, Ложь);
СтруктураДляСпискаДополнительныхФайлов = Новый Структура("ОтборОбъектИспользование, ОтборОбъектЗначение, ДоступностьОтбораОбъекта, ВидимостьКолонкиОбъекта", Истина, Ссылка, Ложь, Ложь);
ОбязательныеОтборы = Новый Структура("Объект", Ссылка);

РаботаСФайлами.ОткрытьФормуСпискаФайловИИзображений(СтруктураДляСпискаИзображдений, СтруктураДляСпискаДополнительныхФайлов, ОбязательныеОтборы, ЭтаФорма);

КонецПроцедуры // ДействияФормыФайлы()

// Процедура - обработчик нажатия на кнопку Изображения
//
Процедура ДействияФормыИзображение(Кнопка)

Кнопка.Пометка = Не Кнопка.Пометка;

ПоказатьСпрятатьПанельОсновногоИзображения();

КонецПроцедуры // ДействияФормыИзображение()

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ РАБОТЫ С ЕДИНИЦАМИ ИЗМЕРЕНИЯ

// Обработчик события ПриИзменении для наименования.
//
Процедура НаименованиеПриИзменении(Элемент)

СформироватьНаименованиеПолноеАвтоматически();

КонецПроцедуры // НаименованиеПриИзменении()

// Обработчик события ПриИзменении для полного наименования.
//
Процедура НаименованиеПолноеПриИзменении(Элемент)

УстановитьФлагФормироватьНаименованиеПолноеАвтоматически();

КонецПроцедуры // НаименованиеПолноеПриИзменении()

// Обработчик события НачалоВыбораИзСписка для полного наименования.
//
Процедура НаименованиеПолноеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)

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

// Формирование списка выбора.
Список = Новый СписокЗначений;
Список.Добавить(Наименование);

// Выбор из списка и обработка выбора.
РезультатВыбора = ВыбратьИзСписка(Список, ЭлементыФормы.НаименованиеПолное);
Если РезультатВыбора <> Неопределено Тогда
НаименованиеПолное = РезультатВыбора.Значение;
мФормироватьНаименованиеПолноеАвтоматически = Истина;
КонецЕсли;

КонецПроцедуры // НаименованиеПолноеНачалоВыбораИзСписка()

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЧНЫХ ПОЛЕЙ СВОЙСТВ И КАТЕГОРИЙ


// Обработчик события ПередНачаломДобавления ТЧ "СвойстваИЗначения".
//
Процедура СвойстваИЗначенияПередНачаломДобавления(Элемент, Отказ, Копирование)

Отказ = Истина;

ОбработкаОбъектЗначенияСвойств.ОткрытьФормуНовогоСвойства(ЭтаФорма, Элемент, Копирование);

КонецПроцедуры // СвойстваИЗначенияПередНачаломДобавления()

// Обработчик события ПередУдалением ТЧ "СвойстваИЗначения".
//
Процедура СвойстваИЗначенияПередУдалением(Элемент, Отказ)

Отказ = Истина;

ОбработкаОбъектЗначенияСвойств.ИнвертироватьПометкуУдаленияСвойства(Элемент.ТекущиеДанные);

КонецПроцедуры // СвойстваИЗначенияПередУдалением()

// Обработчик события ПриНачалеРедактирования ТЧ "СвойстваИЗначения".
//
Процедура СвойстваИЗначенияПриНачалеРедактирования(Элемент, НоваяСтрока)

ОбработкаОбъектЗначенияСвойств.ПривестиТипЗначенияСвойства(Элемент.ТекущиеДанные, Элемент.Колонки.Значение.ЭлементУправления);

КонецПроцедуры // СвойстваИЗначенияПриНачалеРедактирования()

// Обработчик события ПриВыводеСтроки ТЧ "СвойстваИЗначения".
//
Процедура СвойстваИЗначенияПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

ОбработкаОбъектЗначенияСвойств.ПриВыводеСтрокиСвойствИЗначений(Элемент, ОформлениеСтроки, ДанныеСтроки);

КонецПроцедуры // СвойстваИЗначенияПриВыводеСтроки()

// Обработчик события ПриИзменении элемента СвойстваИЗначения.Значение.
//
Процедура СвойстваИЗначенияЗначениеПриИзменении(Элемент)

Модифицированность = Истина;

КонецПроцедуры // СвойстваИЗначенияЗначениеПриИзменении()

// Обработчик события Очистка элемента СвойстваИЗначения.Значение.
//
Процедура СвойстваИЗначенияЗначениеОчистка(Элемент, СтандартнаяОбработка)

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

ЭлементыФормы.СвойстваИЗначения.ТекущиеДанные.Значение = Неопределено;

ОбработкаОбъектЗначенияСвойств.ПривестиТипЗначенияСвойства(ЭлементыФормы.СвойстваИЗначения.ТекущиеДанные, Элемент);

Модифицированность = Истина;

КонецПроцедуры // СвойстваИЗначенияЗначениеОчистка()

// Обработчик события ПередНачаломДобавления ТЧ "Категории".
//
Процедура КатегорииПередНачаломДобавления(Элемент, Отказ, Копирование)

Отказ = Истина;

ОбработкаОбъектКатегорииОбъекта.ОткрытьФормуНовойКатегории(ЭтаФорма);

КонецПроцедуры // КатегорииПередНачаломДобавления()

// Обработчик события ПередУдалением ТЧ "Категории".
//
Процедура КатегорииПередУдалением(Элемент, Отказ)

Отказ = Истина;

ОбработкаОбъектКатегорииОбъекта.ИнвертироватьПометкуУдаленияКатегории(Элемент.ТекущиеДанные);

КонецПроцедуры // КатегорииПередУдалением()

// Обработчик события ПриНачалеРедактирования ТЧ "Категории".
//
Процедура КатегорииПриИзмененииФлажка(Элемент, НоваяСтрока)

Модифицированность = Истина;

КонецПроцедуры // КатегорииПриИзмененииФлажка()

// Обработчик события ПриВыводеСтроки ТЧ "Категории".
//
Процедура КатегорииПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Если Элемент.Колонки.ПометкаУдаления.Видимость Тогда
ОформлениеСтроки.Ячейки.ПометкаУдаления.ОтображатьКартинку = Истина;
ОформлениеСтроки.Ячейки.ПометкаУдаления.ИндексКартинки = Число(ДанныеСтроки.ПометкаУдаления);
КонецЕсли;

Если Элемент.Колонки.Принадлежность.Видимость Тогда
ОформлениеСтроки.Ячейки.Принадлежность.ОтображатьФлажок = Истина;
КонецЕсли;

КонецПроцедуры // КатегорииПриВыводеСтроки()

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ

// Процедура - обработчик события "НачалоВыбора" для "ЕдиницаХраненияОстатков".
//
Процедура ЕдиницаХраненияОстатковНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // ЕдиницаХраненияОстатковНачалоВыбора()

// Процедура - обработчик события "НачалоВыбора" для "ЕдиницаДляОтчетов".
//
Процедура ЕдиницаДляОтчетовНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // ЕдиницаДляОтчетовНачалоВыбора()

// Обработчик события нажатия на кнопку Этикетка.
//
Процедура ДействияФормыЭтикетка(Кнопка)

УправлениеРозничнойТорговлей.ПечатьЭтикеток(Ссылка);

КонецПроцедуры // ДействияФормыЭтикетка()

// Обработчик события нажатия на кнопку Ценник.
//
Процедура ДействияФормыЦенник(Кнопка)

ОбработкаПечатьЦенников = Обработки.ПечатьЦенников.Создать();

НоваяСтрока = ОбработкаПечатьЦенников.Товары.Добавить();
НоваяСтрока.Номенклатура = Ссылка;
НоваяСтрока.ЕдиницаИзмерения = ЕдиницаХраненияОстатков;
НоваяСтрока.Количество = 1;
НоваяСтрока.Печать = Истина;

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ЗаполнитьЦены", Истина);
СтруктураПараметров.Вставить("ПечетьБезПроверкиЗаполненияПараметров");

ФормаПечатьЦенников = ОбработкаПечатьЦенников.ПолучитьФорму("Форма");
ФормаПечатьЦенников.Параметр = СтруктураПараметров;
ФормаПечатьЦенников.Открыть();

КонецПроцедуры // ДействияФормыЦенник()

// Обработчик события нажатия на кнопку Комплектующие.
//
Процедура ДействияФормыКомплектующие(Кнопка)

МассивНоменклатуры = Новый Массив;
МассивНоменклатуры.Добавить(Ссылка);
ТабДокумент = РаботаСДиалогами.НапечататьКомплектующие(МассивНоменклатуры);

Если ТабДокумент.ВысотаТаблицы > 0 Тогда
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, , , "Комплектующие", Ссылка);
Иначе
Предупреждение("Для " + СокрЛП(Ссылка) + " список комплектующих не задан!");
КонецЕсли;

КонецПроцедуры // ДействияФормыКомплектующие()

// Обработчик события элемента КоманднаяПанельФормы.ДействиеОткрытьПрайсЛист.
//
Процедура ДействияФормыОткрытьПрайсЛист(Кнопка)

Обработки.ПечатьПрайсЛиста.ПолучитьФорму("ФормаЗаполнения").Открыть();

КонецПроцедуры // ДействияФормыОткрытьПрайсЛист()

// Обработчик события ПриВыводеСтроки ТЧ "ЕдиницыИзмерения".
//
Процедура ЕдиницыИзмеренияПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Если ЗначениеЗаполнено(ДанныеСтроки.Ссылка) И ЕдиницаХраненияОстатков = ДанныеСтроки.Ссылка Тогда
ОформлениеСтроки.Шрифт = мЖирныйШрифт;
КонецЕсли;

ОформлениеСтроки.Ячейки.Коэффициент.ТолькоПросмотр = (ДанныеСтроки.Ссылка = ЕдиницаХраненияОстатков);

КонецПроцедуры // ЕдиницыИзмеренияПриВыводеСтроки()

// Обработчик события ПередНачаломДобавления ТЧ "ЕдиницыИзмерения".
//
Процедура ЕдиницыИзмеренияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)

Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // ЕдиницыИзмеренияПередНачаломДобавления()

// Обработчик события ПриНачалеРедактирования ТЧ "ЕдиницыИзмерения".
//
Процедура ЕдиницыИзмеренияПриНачалеРедактирования(Элемент, НоваяСтрока)

ТекущаяСтрока = Элемент.ТекущиеДанные;

Если НоваяСтрока Тогда
Если ТекущаяСтрока.Коэффициент = 0 Тогда
ТекущаяСтрока.Коэффициент = 1;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ЕдиницаПоКлассификатору) Тогда
ТекущаяСтрока.ЕдиницаПоКлассификатору = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяЕдиницаПоКлассификатору");
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ЕдиницыИзмеренияПриНачалеРедактирования()

// Обработчик события ПриИзменении реквизита "ВидНоменклатуры".
//
Процедура ВидНоменклатурыПриИзменении(Элемент)

ПриИзмененииВидаНоменклатуры();

КонецПроцедуры // ВидНоменклатурыПриИзменении()

// Обработчик события ПриИзменении флажка "ФлажокВестиУчетПоХарактеристикам".
//
Процедура ВестиУчетПоХарактеристикамПриИзменении(Элемент)

УстановитьВидимость();

КонецПроцедуры // ФлажокВестиУчетПоХарактеристикамПриИзменении()

// Обработчик события ПриИзменении флажка "ФлажокВестиУчетПоСериям".
//
Процедура ВестиУчетПоСериямПриИзменении(Элемент)

Если Не ВестиУчетПоСериям Тогда
ВестиПартионныйУчетПоСериям = Ложь;
КонецЕсли;

УстановитьВидимость();

КонецПроцедуры // ФлажокВестиУчетПоСериямПриИзменении()

// Обработчик события ПриИзменении флажка "весовой".
//
Процедура ВесовойТоварПриИзменении(Элемент)

Перем Запрос;

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Владелец", Ссылка);

Запрос.Текст = "
|ВЫБРАТЬ
| 1
|ИЗ
| РегистрСведений." + ?(Весовой, "Штрихкоды", "КодыВесовогоТовара") + " КАК Источник
|ГДЕ
| Источник." + ?(Весовой, "Владелец", "Номенклатура") + " = &Владелец";

Если Запрос.Выполнить().Пустой() Тогда
УстановитьВидимость();
Иначе
ОбщегоНазначения.СообщитьОбОшибке("Изменение признака весового товара невозможно, так как для товара заданы "
+ ?(Весовой, "штрихкоды штучного товара", "коды весового товара"));
Весовой = Не Весовой;
КонецЕсли;

КонецПроцедуры // ВесовойТоварПриИзменении()

// Процедура - обработчик события "Нажатие" картинки "ОсновноеИзображение".
//
Процедура ОсновноеИзображениеНажатие(Элемент)

Если Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма) Тогда
Возврат;
КонецЕсли;

РаботаСФайлами.ОткрытьФормуИзображения(ЭтаФорма, ОсновноеИзображение, Ссылка);

КонецПроцедуры // ОсновноеИзображениеНажатие()

Процедура ПодакцизныйТоварПриИзменении(Элемент)

Если Не ПодакцизныйТовар Тогда
СтатьяДекларацииПоАкцизномуНалогу = Справочники.СтатьиНалоговыхДеклараций.ПустаяСсылка();
КонецЕсли;

УстановитьВидимость();
КонецПроцедуры

Процедура СтатьяДекларацииПоАкцизномуНалогуНачалоВыбора(Элемент, СтандартнаяОбработка)

НазваниеНалоговойДекларации = Перечисления.ВидыНалоговыхДеклараций.ДекларацияПоАкцизномуНалогу;
НазваниеНабораСтатейДекларации = Справочники.НаборыСтатейНалоговыхДеклараций.ДекларацияПоАкцизномуНалогу_Розница;

РаботаСДиалогами.НачалоВыбораСтатьяНалоговойДекларации(Элемент, СтандартнаяОбработка, НазваниеНалоговойДекларации, НазваниеНабораСтатейДекларации);

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

Процедура СтатьяДекларацииПоАкцизномуНалогуАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)

НазваниеНалоговойДекларации = Перечисления.ВидыНалоговыхДеклараций.ДекларацияПоАкцизномуНалогу;
НазваниеНабораСтатейДекларации = Справочники.НаборыСтатейНалоговыхДеклараций.ДекларацияПоАкцизномуНалогу_Розница;

РаботаСДиалогами.АвтоПодборТекстаСтатьяНалоговойДекларации(ЭтаФорма, Элемент, Текст, ТекстАвтоПодбора ,СтандартнаяОбработка,
НазваниеНалоговойДекларации, НазваниеНабораСтатейДекларации);

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

Процедура СтатьяДекларацииПоАкцизномуНалогуОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)

НазваниеНалоговойДекларации = Перечисления.ВидыНалоговыхДеклараций.ДекларацияПоАкцизномуНалогу;
НазваниеНабораСтатейДекларации = Справочники.НаборыСтатейНалоговыхДеклараций.ДекларацияПоАкцизномуНалогу_Розница;

РаботаСДиалогами.ОкончаниеВводаТекстаСтатьяНалоговойДекларации(Элемент, Текст, Значение, СтандартнаяОбработка,
НазваниеНалоговойДекларации, НазваниеНабораСтатейДекларации);

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

// Обработчик события ПриИзменении реквизита "ВестиСерийныеНомера".
//
Процедура ВестиСерийныеНомераПриИзменении(Элемент)

УстановитьВидимость();

КонецПроцедуры // ВестиСерийныеНомераПриИзменении()

// Обработчик события "НачалоВыбора" реквизита "Комментарий".
//
Процедура КомментарийНачалоВыбора(Элемент, СтандартнаяОбработка)

ФормаРедактированияТекста = ПолучитьОбщуюФорму("ФормаРедактированияТекста");
ФормаРедактированияТекста.УстановитьРедактируемыйТекст(Комментарий);
ОтредактировалиТекст = ФормаРедактированияТекста.ОткрытьМодально();

Если ОтредактировалиТекст = Истина Тогда
Комментарий = ФормаРедактированияТекста.ПолучитьРедактируемыйТекст();
КонецЕсли;

КонецПроцедуры // КомментарийНачалоВыбора()

// Процедура вызывается при нажатии кнопки "Печать" командной панели формы,
// вызывает печать по умолчанию для формы документа.
//
Процедура ОсновныеДействияФормыДействиеПечать(Кнопка)

УниверсальныеМеханизмы.НапечататьДокументПоУмолчанию(ЭтотОбъект);

КонецПроцедуры // ОсновныеДействияФормыДействиеПечать()

// Процедура - обработчик нажатия на кнопку "Печать".
// Открывает форму выбора печатных форм объекта.
//
Процедура ОсновныеДействияФормыПечать(Кнопка)

УниверсальныеМеханизмы.ОткрытьФормуВыбораПечатныхФормОбъекта(ЭтотОбъект, ЭтаФорма);

КонецПроцедуры // ОсновныеДействияФормыПечать()

// Процедура заполняет по реквизиту формы СтавкаНДС признак ЛьготаНДС
//
// Параметры:
// Нет.
//
Процедура ЗаполнитьПризнакиПоСтавкеНДС()

Если СтавкаНДС <> Перечисления.СтавкиНДС.БезНДС
И СтавкаНДС <> Перечисления.СтавкиНДС.НеНДС Тогда
ЭлементыФормы.ЛьготаНДС.Значение = "";
КонецЕсли

КонецПроцедуры // ЗаполнитьПризнакиПоСтавкеНДС()

// Обработчик события ПриИзменении реквизита "СтавкаНДС".
Процедура СтавкаНДСПриИзменении()

ЗаполнитьПризнакиПоСтавкеНДС();
УстановитьВидимость();

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

// Обработчик события ПриИзменении флажка "ИзмеряетсяТолькоВСуммовомВыражении".
Процедура ИзмеряетсяТолькоВСуммовомВыраженииПриИзменении(Элемент)

Если НЕ ИзмеряетсяТолькоВСуммовомВыражении Тогда
ТекстДляПечатиВКолонкеКоличествоНалоговойНакладной = "";
КонецЕсли;

УстановитьВидимость();

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

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ РЕКВИЗИТОВ ТП ЕДИНИЦЫ ИЗМЕРЕНИЯ

// Процедура - обработчик события "ПриИзменении" ТЧ "ЕдиницыИзмерения".
//
Процедура ЕдиницыИзмеренияЕдиницаПоКлассификаторуПриИзменении(Элемент)

ТекущаяСтрока = ЭлементыФормы.ЕдиницыИзмерения.ТекущиеДанные;

Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.Наименование) Тогда
ТекущаяСтрока.Наименование = Строка(ТекущаяСтрока.ЕдиницаПоКлассификатору);
КонецЕсли;

КонецПроцедуры // ЕдиницыИзмеренияЕдиницаПоКлассификаторуПриИзменении()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ РЕКВИЗИТОВ ТП КОМПЛЕКТУЮЩИЕ

// Обработчик события ПередНачаломДобавления ТЧ "Комплектующие".
//
Процедура КомплектующиеПередНачаломДобавления(Элемент, Отказ, Копирование)

Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // КомплектующиеПередНачаломДобавления()

// Обработчик события ПриНачалеРедактирования ТЧ "Комплектующие".
//
Процедура КомплектующиеПриНачалеРедактирования(Элемент, НоваяСтрока)

Если НоваяСтрока Тогда
Элемент.ТекущиеДанные.Количество = 1;
КонецЕсли;

КонецПроцедуры // КомплектующиеПриНачалеРедактирования()

// Обработчик события ПриИзменении элемента Комплектующие.Комплектующая.
//
Процедура КомплектующиеКомплектующаяПриИзменении(Элемент)

ТекущаяСтрока = ЭлементыФормы.Комплектующие.ТекущиеДанные;

ТекущаяСтрока.ЕдиницаИзмерения = ТекущаяСтрока.Комплектующая.ЕдиницаХраненияОстатков;

Если ЗначениеЗаполнено(ТекущаяСтрока.ХарактеристикаКомплектующей)
И ТекущаяСтрока.ХарактеристикаКомплектующей.Владелец <> ТекущаяСтрока.Комплектующая Тогда
ТекущаяСтрока.ХарактеристикаКомплектующей = Неопределено;
КонецЕсли;

КонецПроцедуры // КомплектующиеКомплектующаяПриИзменении()

// Процедура вызывает подбор номеклатуры при нажатии на кнопку "Подбор".
//
Процедура КоманднаяПанельКомплектующиеДействиеПодбор(Кнопка)

Если Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма) Тогда
Возврат;
КонецЕсли;

ДействиеПодбор();

КонецПроцедуры // КоманднаяПанельКомплектующиеДействиеПодбор()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ РЕКВИЗИТОВ ТП ШТРИХКОДЫ

// Обработчик события ПередНачаломДобавления ТЧ "Штрихкоды".
//
Процедура ШтрихкодыПередНачаломДобавления(Элемент, Отказ, Копирование)

Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // ШтрихкодыПередНачаломДобавления()

// Обработчик события ПриНачалеРедактирования ТЧ "Штрихкоды".
//
Процедура ШтрихкодыПриНачалеРедактирования(Элемент, НоваяСтрока)

ТекущаяСтрока = Элемент.ТекущиеДанные;

Если НоваяСтрока Тогда
ТекущаяСтрока.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
ТекущаяСтрока.Владелец = Ссылка;
ТекущаяСтрока.ЕдиницаИзмерения = ЕдиницаХраненияОстатков;
ТекущаяСтрока.Качество = Справочники.Качество.Новый;
КонецЕсли;

КонецПроцедуры // ШтрихкодыПриНачалеРедактирования()

Процедура ШтрихкодыТипШтрихкодаПриИзменении(Элемент)

Если Элемент.Значение = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда
Если ПустаяСтрока(ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода) Тогда
ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода = ЭлементыФормы.Штрихкоды.ТекущиеДанные.Штрихкод;
Иначе
Ответ = Вопрос("Представление штрихкода не пустое.
|Изменить представление штрихкода на значение штрихкода?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода = ЭлементыФормы.Штрихкоды.ТекущиеДанные.Штрихкод;
КонецЕсли;
КонецЕсли;
КонецЕсли;

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

Процедура ШтрихкодыШтрихкодПриИзменении(Элемент)

Если ЭлементыФормы.Штрихкоды.ТекущиеДанные.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда
Если ПустаяСтрока(ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода) Тогда
ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода = Элемент.Значение;
Иначе
Ответ = Вопрос("Представление штрихкода не пустое.
|Изменить представление штрихкода на значение штрихкода?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
ЭлементыФормы.Штрихкоды.ТекущиеДанные.ПредставлениеШтрихкода = Элемент.Значение;
КонецЕсли;
КонецЕсли;
КонецЕсли;

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

// Обработчик события нажатия на кнопку "Новый штрихкод".
//
Процедура НовыйШтрихкод(Кнопка)

Если Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма) Тогда
Возврат;
КонецЕсли;

ТекущаяСтрока = ЭлементыФормы.Штрихкоды.ТекущиеДанные;

Если ТекущаяСтрока = Неопределено Тогда
Ответ = Вопрос("Не выбрана строка таблицы штрихкодов, для которой регистрируется штрихкод." + Символы.ПС + "Добавить новую строку?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;

ТекЗапись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();

ТекЗапись.Владелец = Ссылка;
ТекЗапись.ЕдиницаИзмерения = ЕдиницаХраненияОстатков;
ТекЗапись.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
ТекЗапись.Качество = Справочники.Качество.Новый;
ТекЗапись.Штрихкод = РаботаСТорговымОборудованием.СформироватьШтрихКод();

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

ТекЗапись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(ТекЗапись, ТекущаяСтрока);
ТекЗапись.Прочитать();

ТекЗапись.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
ТекЗапись.Штрихкод = РаботаСТорговымОборудованием.СформироватьШтрихКод();

Попытка
ТекЗапись.Записать();
Исключение
КонецПопытки;
КонецЕсли;

КонецПроцедуры // НовыйШтрихкод()

///////////////////////////////////////////////////////////////////////////////
//// ФУНКЦИИ ВЗАИМОДЕЙСТВИЯ С ТОРГОВЫМ ОБОРУДОВАНИЕМ (ОБЩИЕ ФУНКЦИИ API)

// Процедура - обработчик внешнего событие, которое возникает при посылке
// внешним приложением сообщения, сформированного в специальном формате.
// Внешнее событие сначала обрабатывается всеми открытыми формами, имеющими
// обработчик этого события, а затем может быть обработано в процедуре модуля
// приложения с именем ОбработкаВнешнегоСобытия().
//
// Параметры:
// Источник - <Строка>
// - Источник внешнего события.
//
// Событие - <Строка>
// - Наименование события.
//
// Данные - <Строка>
// - Данные для события.
//
Процедура ВнешнееСобытие(Источник, Событие, Данные)

Если Не ВводДоступен() Тогда
Возврат;
КонецЕсли;

ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);

КонецПроцедуры // ВнешнееСобытие()

// Функция возвращает признак того, что клиент поддерживает работу с видом ТО,
// переданным в качестве параметра.
//
// Параметры:
// Вид - <ПеречислениеСсылка.ВидыТорговогоОборудования>
// - Вид торгового оборудования, информация о поддержке
// которого запрашивается.
//
// Возвращаемое значение:
// <Булево> - Признак поддержки указанного класса торгового оборудования.
//
Функция ПоддерживаетсяВидТО(Вид) Экспорт

Результат = Ложь;

Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода Тогда
Результат = Истина;
КонецЕсли;

Возврат Результат;

КонецФункции // ПоддерживаетсяВидТО()

///////////////////////////////////////////////////////////////////////////////
//// ФУНКЦИИ ВЗАИМОДЕЙСТВИЯ С ТОРГОВЫМ ОБОРУДОВАНИЕМ (СКАНЕР ШТРИХКОДА)

// Функция осуществляет обработку считывания штрихкода номенклатуры
//
// Параметры:
// Номенклатура - <СправочникСсылка.Номенклатура>
// - Номенклатура, штрихкод которой был отсканирован.
//
// Характеристика – <СправочникСсылка.ХарактеристикиНоменклатуры>
// - Характеристика отсканированной номенклатуры.
//
// Серия - <СправочникСсылка.СерииНоменклатуры>
// - Серия отсканированной номенклатуры.
//
// Качество - <СправочникСсылка.Качество>
// - Качество отсканированной номенклатуры.
//
// Единица - <СправочникСсылка.ЕдиницыИзмерения>
// - Единица измерения отсканированной номенклатуры.
//
// Количество - <Число>
// - Количество отсканированной номенклатуры.
//
// СШК - <Строка>
// - Идентификатор сканера штрихкода, с которым связано данное
// событие.
//
// Возвращаемое значение:
// <Булево> - Данная ситуация обработана.
//
Функция СШКНоменклатура(Номенклатура, Характеристика, Серия, Качество,
Единица, Количество, СШК) Экспорт

Предупреждение("Данный штрихкод уже назначен: """ + СокрЛП(Номенклатура) + """.");
Возврат Истина;

КонецФункции // СШКНоменклатура()


// Функция осуществляет обработку считывания штрихкода серийного номера
//
// Параметры:
// Номер - <СправочникСсылка.СерийныеНомера>
// - Отсканированный серийный номер.
//
// СШК - <Строка>
// - Идентификатор сканера штрихкода, с которым связано данное
// событие.
//
// Возвращаемое значение:
// <Булево> - Данная ситуация обработана.
//
Функция СШКСерийныйНомер(Номер, СШК) Экспорт

Предупреждение("Подбор серийных номеров в данной форме не предусмотрен!");
Возврат Истина;

КонецФункции // СШКСерийныйНомер()

// Функция осуществляет обработку считывания штрихкода информационной карты
//
// Параметры:
// Карта - <СправочникСсылка.ИнформационныеКарты>
// - Отсканированная информационная карта.
//
// СШК - <Строка>
// - Идентификатор сканера штрихкода, с которым связано данное
// событие.
//
// Возвращаемое значение:
// <Булево> - Данная ситуация обработана.
//
Функция СШКИнформационнаяКарта(Карта, СШК) Экспорт

Предупреждение("Подбор информационных карт в данной форме не предусмотрен!");
Возврат Истина;

КонецФункции // СШКИнформационнаяКарта()

// Функция осуществляет обработку считывания штрихового кода, который не был
// зарегистрирован.
//
// Параметры:
// Штрихкод - <Строка>
// - Считанный код.
//
// ТипКода - <ПланыВидовХарактеристикСсылка.ТипыШтрихкодов>
// - Тип штрихкода. Пустая ссылка в случае, если тип определить не
// представляется возможным.
//
// СШК - <Строка>
// - Идентификатор сканера штрихкода, с которым связано данное
// событие.
//
// Возвращаемое значение:
// <Булево> - Данная ситуация обработана.
//
Функция СШКНеизвестныйКод(Штрихкод, ТипКода, СШК) Экспорт

Если ЭтоНовый() И РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма) Тогда
ЭлементыФормы.Штрихкоды.ДобавитьСтроку();
КонецЕсли;

ТекущиеДанные = ЭлементыФормы.Штрихкоды.ТекущиеДанные;

Если ТекущиеДанные = Неопределено Тогда
Предупреждение("Не выбрана строка таблицы штрихкодов, для которой регистрируется штрихкод.");
Возврат Истина;
КонецЕсли;

ТекЗапись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(ТекЗапись, ТекущиеДанные);
ТекЗапись.Прочитать();

ТекЗапись.ТипШтрихкода = ТипКода;
ТекЗапись.Штрихкод = ШтрихКод;

Попытка
ТекЗапись.Записать();
Исключение
КонецПопытки;

Возврат Истина;

КонецФункции // СШКНеизвестныйКод()

// Процедура осуществляет обработку ошибки, произошедшей при работе со сканером
// штрихкода.
//
// Параметры:
// Ошибка - <ПеречислениеСсылка.ТООшибки*>
// - Возникшая ошибка.
//
// Штрихкод - <Строка>
// - Считанный штрихкод или пустая строка, если штрихкод не был
// считан.
//
// ТипШК - <ПланыВидовХарактеристикСсылка.ТипыШтрихкодов>
// - Тип штрихкода или пустая ссылка в случае, если тип не определён.
//
// СШК - <Строка>
// - Идентификатор сканера штрихкода, с которым связано данное
// событие.
//
Процедура СШКОшибка(Ошибка, Штрихкод, ТипШК, СШК) Экспорт

Текст = ПолучитьСерверТО().ПолучитьТекстОшибкиСШКТО(Ошибка, Штрихкод, ТипШК);
Предупреждение(Текст);

КонецПроцедуры // СШКОшибка()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ РЕКВИЗИТОВ ТЧ "КОДЫ ВЕСОВОГО ТОВАРА"

// Процедура - обработчик события ПередНачаломДобавления ТЧ "КодыВесовогоТовара".
//
Процедура КодыВесовогоТовараПередНачаломДобавления(Элемент, Отказ, Копирование)

Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // КодыВесовогоТовараПередНачаломДобавления()

// Процедура - обработчик события ПриНачалеРедактирования ТЧ "КодыВесовогоТовара".
//
Процедура КодыВесовогоТовараПриНачалеРедактирования(Элемент, НоваяСтрока)

Если НоваяСтрока Тогда
ТекущиеДанные = Элемент.ТекущиеДанные;
ТекущиеДанные.Номенклатура = Ссылка;
ТекущиеДанные.Качество = Справочники.Качество.Новый;
ТекущиеДанные.Код = УправлениеРозничнойТорговлей.ПолучитьНовыйКодДляРегистраСведений("КодыВесовогоТовара");
КонецЕсли;

КонецПроцедуры // КодыВесовогоТовараПриНачалеРедактирования()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ ДЛЯ ПОДДЕРЖКИ МЕХАНИЗМОВ СВОЙСТВ И КАТЕГОРИЙ

// Процедура перезаполняет таблицу свойств и значений.
//
Процедура ПрочитатьЗаполнитьСвойстваИЗначения(ИмяДанных = "")

// Эта проверка добавлена, чтобы не выполнялось перезаполнение таблицы
// при вызове данной процедуры из ПриИзмененииДанных, осуществляемом до
// вызова из ПередОткрытием.
Если ОбработкаОбъектЗначенияСвойств.НазначениеСвойств = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура Тогда
ОбработкаОбъектЗначенияСвойств.ОбъектОтбораЗначений = Ссылка;
ОбработкаОбъектЗначенияСвойств.ОбъектОтбораНазначений = ?(ЭтоНовый(), Родитель, Ссылка);
ОбработкаОбъектЗначенияСвойств.ПрочитатьЗаполнитьСвойстваИЗначения();
КонецЕсли;

КонецПроцедуры // ПрочитатьЗаполнитьСвойстваИЗначения()

// Процедура перезаполняет таблицу Категорий.
//
Процедура ПрочитатьЗаполнитьКатегории(ИмяДанных = "")

Если ОбработкаОбъектКатегорииОбъекта.НазначениеКатегорий = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура Тогда
ОбработкаОбъектКатегорииОбъекта.ОбъектОтбораКатегорий = Ссылка;
ОбработкаОбъектКатегорииОбъекта.ПрочитатьЗаполнитьКатегорииОбъекта();
КонецЕсли;

КонецПроцедуры // ПрочитатьЗаполнитьКатегории()

// Процедура - обработчик события "ПередОткрытием" формы.
//
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

ВосстановитьНастройки(Истина);

// Для нового элемента заполним пустые реквизиты значениями по умолчанию.
Если ЭтоНовый() Тогда
ЗаполнитьРеквизитыПоУмолчанию();
КонецЕсли;

КонецПроцедуры // ПередОткрытием()

// Процедура - обработчик события ПередНачаломДобавления ТЧ "Характеристики".
//
Процедура ХарактеристикиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)

Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // ХарактеристикиПередНачаломДобавления()

// Процедура - обработчик события ПередНачаломДобавления ТЧ "Серии".
//
Процедура СерииПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)

Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // СерииПередНачаломДобавления()

// Процедура - обработчик события ПередЗаписью формы.
//
Процедура ПередЗаписью(Отказ)

СтруктураОбязательныхПолей = Новый Структура;

СтруктураПоискаДублей = Новый Структура;
СтруктураПоискаДублей.Вставить("Код", "=");

Для Каждого Реквизит Из ТаблицаРеквизитов Цикл
Если (Реквизит.Обязательность Или Реквизит.ОбязательностьСистемная)
И мРеквизитыСАвтозаполнением[Реквизит.Имя] = Неопределено Тогда
СтруктураОбязательныхПолей.Вставить(Реквизит.Имя, Реквизит.Представление);
КонецЕсли;

Если Реквизит.Уникальность Тогда
СтруктураПоискаДублей.Вставить(Реквизит.Имя, "=");
КонецЕсли;
КонецЦикла;

ПроверитьЗаполнениеРеквизитовНоменклатуры(СтруктураОбязательныхПолей, Отказ);

Если Не Отказ Тогда
ПроверитьУникальностьНоменклатуры(СтруктураПоискаДублей, Отказ);
КонецЕсли;

КонецПроцедуры // ПередЗаписью()

// Процедура - обработчик события ПриСменеСтраницы основной панели.
//
Процедура ОсновнаяПанельПриСменеСтраницы(Элемент, ТекущаяСтраница)

УстановитьВидимость(Истина);

КонецПроцедуры // ОсновнаяПанельПриСменеСтраницы()

// Проверяет правильность заполнения реквизитов номенклатуры.
//
// Параметры:
// СтруктураОбязательныхПолей - структура, содержащая имена полей, которые надо проверить.
// Отказ - флаг отказа в проведении.
//
Процедура ПроверитьЗаполнениеРеквизитовНоменклатуры(СтруктураОбязательныхПолей, Отказ) Экспорт

ЗаголовокСообщений = Заголовок;

Для Каждого КлючЗначение Из СтруктураОбязательныхПолей Цикл
Значение = ЭтотОбъект[КлючЗначение.Ключ];

Если НЕ ЗначениеЗаполнено(Значение) Тогда
СтрокаСообщения = "Не заполнено значение реквизита """ + КлючЗначение.Значение + """!";

ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, ЗаголовокСообщений);
КонецЕсли;
КонецЦикла;

КонецПроцедуры // ЗаполнениеДокументов.ПроверитьЗаполнениеШапкиДокумента()

// Проверяет уникальность номенклатуры.
//
// Параметры:
// СтруктураПоискаДублей - структура, содержащая имена полей, по которым надо проверить дубли.
// Отказ - флаг отказа в проведении.
//
Процедура ПроверитьУникальностьНоменклатуры(СтруктураПоискаДублей, Отказ) Экспорт

Если СтруктураПоискаДублей.Количество() > 1 Тогда
ПоискДублей = Обработки.ПоискИЗаменаДублирующихсяЭлементов.Создать();
НайденныеОбъекты = ПоискДублей.НайтиДубли(ЭтотОбъект, СтруктураПоискаДублей);

Если НайденныеОбъекты.Количество() <> 0 Тогда
Если НайденныеОбъекты.Количество() <> 1 Или ЭтоНовый() Тогда
ФормаПоискаДублей = ПоискДублей.ПолучитьФорму("ФормаПоиска", ЭтаФорма);
ФормаПоискаДублей.НайденныеОбъекты = НайденныеОбъекты;

Результат = ФормаПоискаДублей.ОткрытьМодально();
Если Результат = Неопределено Тогда
Отказ = Истина;
ИначеЕсли Результат <> Истина Тогда
Отказ = Истина;
ОповеститьОЗаписиНовогоОбъекта(Результат);
Модифицированность = Ложь;
Закрыть();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ЗаполнениеДокументов.ПроверитьЗаполнениеШапкиДокумента()

// Процедура - обработчик события ПриИзменении реквизита "ОсновнойПоставщик".
//
Процедура ОсновнойПоставщикПриИзменении(Элемент)

ОбновитьДанные(Истина);
УстановитьВидимость();

КонецПроцедуры // ОсновнойПоставщикПриИзменении()

// Обработчик события ПриНачалеРедактирования строки ТЧ "МестаХранения".
//
Процедура МестаХраненияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

Если НоваяСтрока Тогда
Элемент.ТекущиеДанные.Номенклатура = Ссылка;
КонецЕсли;

КонецПроцедуры // МестаХраненияПриНачалеРедактирования()

// Обработчик события ПередНачаломДобавления ТЧ "МестаХранения".
//
Процедура МестаХраненияПередНачаломДобавления(Элемент, Отказ, Копирование)

Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // МестаХраненияПередНачаломДобавления()

// Обработчик события ПриВыводеСтроки ТЧ "МестаХранения".
//
Процедура МестаХраненияПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Если ДанныеСтроки.Приоритет = 0 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.Лазурный;
ОформлениеСтроки.ЦветТекста = WebЦвета.ПолночноСиний;
КонецЕсли;

КонецПроцедуры // МестаХраненияПриВыводеСтроки()

// Обработчик события ПриНачалеРедактирования ТЧ "НоменклатураКонтрагентов".
//
Процедура НоменклатураКонтрагентовПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // НоменклатураКонтрагентовПриНачалеРедактирования()

// Обработчик события ПередНачаломДобавления ТЧ "Проекты".
//
Процедура ПроектыПередНачаломДобавления(Элемент, Отказ, Копирование)

Отказ = Не РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

КонецПроцедуры // ПроектыПередНачаломДобавления()

// Обработчик события НачалоВыбора реквизита "Проект" в ТЧ "Проекты".
//
Процедура ПроектыПроектНачалоВыбора(Элемент, СтандартнаяОбработка)

УправлениеПроектами.НачалоВыбораПроекта(ЭтаФорма, Элемент, СтандартнаяОбработка);

КонецПроцедуры // ПроектыПроектНачалоВыбора()

// Функция возвращает значения констант, имена которых переданы в структуре.
//
// Параметры:
// СтруктураКонстант - структура с именами нужных констант.
//
// Возвращаемое значение:
// Выборка из результата запроса по константам.
//
Функция ПолучитьКонстанты(СтруктураКонстант)

Запрос = Новый Запрос;

ТекстЗапроса = "
|ВЫБРАТЬ
|";

Для Каждого ТекКонстанта Из СтруктураКонстант Цикл
ТекстЗапроса = ТекстЗапроса + "
| ТаблицаКонстант." + ТекКонстанта.Ключ + ",";
КонецЦикла;

ТекстЗапроса = Лев(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 1);

ТекстЗапроса = ТекстЗапроса + "
|ИЗ
| Константы КАК ТаблицаКонстант
|";

Запрос.Текст = ТекстЗапроса;

Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();

Возврат Выборка;

КонецФункции // ПолучитьКонстанты()

Процедура ЕдиницаИзмеренияМестНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = РаботаСДиалогами.ЗаписатьНовыйОбъектВФорме(ЭтаФорма);

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


Процедура РодительПриИзменении(Элемент)
ПрочитатьЗаполнитьСвойстваИЗначения();
КонецПроцедуры

Процедура МестаХраненияСкладПриИзменении(Элемент)

ТекущаяСтрока = ЭлементыФормы.МестаХранения.ТекущиеДанные;

Если ТекущаяСтрока.МестоХранения.Владелец <> ТекущаяСтрока.Склад Тогда
ТекущаяСтрока.МестоХранения = Справочники.МестаХранения.ПустаяСсылка();
КонецЕсли;

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

мПустаяКартинка = Новый Картинка;
мЖирныйШрифт = Новый Шрифт(, , Истина);

СтруктураКонстант = Новый Структура;
СтруктураКонстант.Вставить("ИспользоватьХарактеристикиНоменклатуры");
СтруктураКонстант.Вставить("ИспользоватьСерииНоменклатуры");
СтруктураКонстант.Вставить("ИспользоватьСерийныеНомера");
СтруктураКонстант.Вставить("ЕдиницаИзмеренияВеса");
СтруктураКонстант.Вставить("ЕдиницаИзмеренияОбъема");

СтруктураСкрываемыхСтраниц = Новый Структура();

мКонстанты = ПолучитьКонстанты(СтруктураКонстант);

мИспользоватьХарактеристики = мКонстанты.ИспользоватьХарактеристикиНоменклатуры;
мИспользоватьСерии = мКонстанты.ИспользоватьСерииНоменклатуры;
мИспользоватьСерийныеНомера = мКонстанты.ИспользоватьСерийныеНомера;
мЕдиницаИзмеренияВеса = мКонстанты.ЕдиницаИзмеренияВеса;
мЕдиницаИзмеренияОбъема = мКонстанты.ЕдиницаИзмеренияОбъема;

// Заполним перечень страниц, которые можно открыть только после записи номенклатуры.
мСтраницыПослеЗаписи = Новый Соответствие;
мСтраницыПослеЗаписи.Вставить(ЭлементыФормы.ОсновнаяПанель.Страницы["НоменклатураПоставщика"], 0);
мСтраницыПослеЗаписи.Вставить(ЭлементыФормы.ОсновнаяПанель.Страницы["ЦеныНоменклатуры"] , 0);

// Заполним перечень возможных реквизитов.
// Истина в значении соответствия означает,
// что реквизит является флагом. Такие реквизиты не могут быть обязательными,
// но можно настроить их доступность.
мСписокВозможныхРеквизитов = Новый Соответствие;
мСписокВозможныхРеквизитов.Вставить("Родитель" , Ложь);
мСписокВозможныхРеквизитов.Вставить("Наименование" , Ложь);
мСписокВозможныхРеквизитов.Вставить("Код" , Ложь);
мСписокВозможныхРеквизитов.Вставить("Артикул" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ВидНоменклатуры" , Ложь);
мСписокВозможныхРеквизитов.Вставить("НаименованиеПолное" , Ложь);
мСписокВозможныхРеквизитов.Вставить("СтавкаНДС" , Ложь);
мСписокВозможныхРеквизитов.Вставить("СтавкаНДС" , Ложь);
мСписокВозможныхРеквизитов.Вставить("СтавкаНДС" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ЛьготаНДС" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ТекстДляПечатиВКолонкеКоличествоНалоговойНакладной" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ИзмеряетсяТолькоВСуммовомВыражении" , Истина);
мСписокВозможныхРеквизитов.Вставить("ТранспортнаяУслуга" , Истина);
мСписокВозможныхРеквизитов.Вставить("ОсновнойПоставщик" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ЦеноваяГруппа" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ОтветственныйМенеджерЗаПокупки" , Ложь);
мСписокВозможныхРеквизитов.Вставить("НоменклатурнаяГруппа" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ВесовойКоэффициентВхождения" , Ложь);
мСписокВозможныхРеквизитов.Вставить("Комментарий" , Ложь);
мСписокВозможныхРеквизитов.Вставить("БазоваяЕдиницаИзмерения" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ЕдиницаХраненияОстатков" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ЕдиницаДляОтчетов" , Ложь);
мСписокВозможныхРеквизитов.Вставить("СтатьяЗатрат" , Ложь);
мСписокВозможныхРеквизитов.Вставить("НоменклатурнаяГруппаЗатрат" , Ложь);
мСписокВозможныхРеквизитов.Вставить("ВестиУчетПоСериям" , Истина); // флаги
мСписокВозможныхРеквизитов.Вставить("ВестиУчетПоХарактеристикам" , Истина); // флаги
мСписокВозможныхРеквизитов.Вставить("ВестиПартионныйУчетПоСериям" , Истина); // флаги
мСписокВозможныхРеквизитов.Вставить("Весовой" , Истина); // флаги
мСписокВозможныхРеквизитов.Вставить("ВестиСерийныеНомера" , Истина); // флаги
мСписокВозможныхРеквизитов.Вставить("ЕдиницаИзмеренияМест" , Ложь);

// Заполним перечень типов цен номенклатуры.
мСписокТиповЦенНоменклатуры = Новый Соответствие;

Запрос = Новый Запрос("
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТипыЦен.Ссылка КАК ТипЦен,
| ТипыЦен.Наименование КАК ТипЦенПредставление
|ИЗ
| Справочник.ТипыЦенНоменклатуры КАК ТипыЦен
|");

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
мСписокТиповЦенНоменклатуры.Вставить(Выборка.ТипЦен, Выборка.ТипЦенПредставление);
КонецЦикла;

// Создадим дерево, показывающее, какие ЭУ к каким рамкам относятся.
мДеревоРамок = Новый ДеревоЗначений;
мДеревоРамок.Колонки.Добавить("ИмяЭУ");

// Аналитика затрат.
ДобавитьЭУВДерево("РамкаГруппыАналитикаЗатрат", Новый Структура("СтатьяЗатрат, НоменклатурнаяГруппаЗатрат"));

// Номенклатурная группа.
ДобавитьЭУВДерево("РамкаГруппыНоменклатурнаяГруппа", Новый Структура("НоменклатурнаяГруппа, ВесовойКоэффициентВхождения"));

// Серийные номера.
ДобавитьЭУВДерево("РамкаГруппыСерийныеНомера", Новый Структура("ВестиСерийныеНомера"));

// Заполним перечень реквизитов, которые система заполняет автоматически при записи элемента.
мРеквизитыСАвтозаполнением = Новый Соответствие;
мРеквизитыСАвтозаполнением.Вставить("ЕдиницаХраненияОстатков", 0);
мРеквизитыСАвтозаполнением.Вставить("ЕдиницаДляОтчетов" , 1);

// Заполним перечень реквизитов, по которым можно устанавливать контроль уникальности.
мРеквизитыКонтрольУникальности = Новый Соответствие;
мРеквизитыКонтрольУникальности.Вставить("Наименование" , 0);
мРеквизитыКонтрольУникальности.Вставить("НаименованиеПолное", 1);
мРеквизитыКонтрольУникальности.Вставить("Артикул" , 2);

мТекущаяНастройка = Новый Структура;
мТекущаяНастройка.Вставить("ИмяОбъекта" , "СправочникОбъект.Номенклатура");
мТекущаяНастройка.Вставить("Пользователь" , глЗначениеПеременной("глТекущийПользователь"));
мТекущаяНастройка.Вставить("НаименованиеНастройки" , "");
мТекущаяНастройка.Вставить("ИспользоватьПриОткрытии", Ложь);
мТекущаяНастройка.Вставить("СохранятьАвтоматически" , Ложь);
мТекущаяНастройка.Вставить("СохраненнаяНастройка" , Неопределено);

мВалютаУправленческогоУчета = глЗначениеПеременной("ВалютаУправленческогоУчета");

ЦеныНоменклатуры.Индексы.Добавить("ТипЦен");
ЦеныПоставщика.Индексы.Добавить("ТипЦен");

Для Каждого ТекКолонка Из ЭлементыФормы.Штрихкоды.Колонки Цикл
Если ЗначениеЗаполнено(ТекКолонка.Данные) Тогда
Штрихкоды.Колонки.Добавить(ТекКолонка.Имя);
КонецЕсли;
КонецЦикла;
// Процедура размещает на форме дополнительные реквизиты
//
// Параметры: нет
//
Процедура ПР_УстановитьДополнительныеРеквизитыФормы()

ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = ЭлементыФормы.ОсновнаяПанель.Страницы.ДополнительноеОписаниеНоменклатуры;

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

Процедура - обработчик события "ПередОткрытием" формы
//
Процедура ПР_ПередОткрытием(Отказ, СтандартнаяОбработка)

ПР_УстановитьДополнительныеРеквизитыФормы();

ПередОткрытием(Отказ, СтандартнаяОбработка);

КонецПроцедуры // ПередОткрытием()

Процедура ПР_УстановитьДействияФормы()

События = Новый Массив;
События.Добавить("ПередОткрытием");

Для каждого ТиповоеСобытие Из События Цикл

ТекДействие = Строка(ПолучитьДействие(ТиповоеСобытие));
ИмяСобытияНов = "ПР_"+ТиповоеСобытие;

// Типовой обработчик назначен - кэшируем его имя.
Если НЕ ПустаяСтрока(ТекДействие) Тогда

КлючТиповогоСобытия = "ПР_Типовой_"+ТиповоеСобытие;
ДополнительныеСвойства.Вставить(КлючТиповогоСобытия,ТекДействие);

КонецЕсли;

УстановитьДействие(ТиповоеСобытие,Новый Действие(ИмяСобытияНов));

КонецЦикла;

КонецПроцедуры // ПР_УстановитьДействияФормы()
ПР_УстановитьДействияФормы();


podcast Подменю пользователя
сообщение 19.09.17, 13:29
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 306
Спасибо сказали: 74 раз
Рейтинг: 0

ViktorB @ Сегодня, 14:04 * ,
После последней процедуры вставьте код.

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

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

podcast, стесняюсь спросить - а зачем столько кода ? Достаточно было бы
Цитата(podcast @ 19.09.17, 9:23) *
ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = ЭлементыФормы.ОсновнаяПанель.Страницы.ДополнительноеОписаниеНоменклатуры;

В процедуре открытия

Спасибо сказали: ViktorB,

podcast Подменю пользователя
сообщение 19.09.17, 14:31
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 306
Спасибо сказали: 74 раз
Рейтинг: 0

sava1 @ Сегодня, 15:28 * ,
Можно было, так не затрагивается типовая При открытии.

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

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

Да, но форма -то все равно меняется

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


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

 

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