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

Хранилище

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

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




>  1С:Предприятие в облаке Amazon
ViktorB
Отправлено: 08.10.17, 13:13


Молчаливый
*

Группа: Пользователи
Сообщений: 3
Регистрация: 19.09.17
Пользователь №: 57812


Добрый день!
Давно уже интересна возможность установки 1с в облаке, случайно наткнулся на предложение Amazon Windows-сервер в облаке EC2

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

Поделитесь опытом кто сталкивался с данной темой,

Работаем в 8.3 УТ2.3
  Форум: Администрирование и настройка 1С · Просмотр сообщения: #133187 · Ответов: 3 · Просмотров: 4477
 

>  Порядок вывода страниц в форме
ViktorB
Отправлено: 19.09.17, 13:04


Молчаливый
*

Группа: Пользователи
Сообщений: 3
Регистрация: 19.09.17
Пользователь №: 57812


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);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

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

КонецЦикла;

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

  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #132340 · Ответов: 6 · Просмотров: 2201
 

>  Порядок вывода страниц в форме
ViktorB
Отправлено: 19.09.17, 4:38


Молчаливый
*

Группа: Пользователи
Сообщений: 3
Регистрация: 19.09.17
Пользователь №: 57812


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

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

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

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

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

  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #132323 · Ответов: 6 · Просмотров: 2201
 


Новые сообщения  Открытая тема (есть новые ответы)
Опрос  Опрос (есть новые голоса)
Нет новых сообщений  Открытая тема (нет новых ответов)
Нет новых голосов  Опрос (нет новых голосов)
Популярная тема  Горячая тема (есть новые ответы)
Закрыта  Закрытая тема
Нет новых  Горячая тема (нет новых ответов) Перемещена  Тема перемещена
 

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