//******************************************************************************
// ЗаписатьЕдиницу(ВидЕдиницы)
//
// Параметры:
// ВидЕдиницы - определяет вид записываемой единицы - основная или базовая.
//
// Возвращаемое значение:
//}}MRG[ <-- ]
// 0 - произошла ошибка
// 1 - единица успешно записана
//
// Описание:
//
//{{MRG[ <-> ]
//Функция ЗаписатьБазовуюЕдиницу()
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Функция ЗаписатьЕдиницу(ВидЕдиницы = "Базовая")
//}}MRG[ <-> ]
ЗаписатьЕдиницу = 1;
СпрЕдиницы = СоздатьОбъект("Справочник.Единицы");
//{{MRG[ <-> ]
// Если ПустоеЗначение(БазоваяЕдиница) = 0 Тогда
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Если ВидЕдиницы = "Базовая" Тогда
Единица = БазоваяЕдиница;
РеквЕдиница = РеквБазоваяЕдиница;
РеквШтрихкод = РеквШтрихкодБазовой;
РеквВес = РеквВесБазовой;
РеквКоэффициент = 1;
Описатель = "базовой";
Иначе
Если (ОсновнаяЕдиница = БазоваяЕдиница)
и (ФлагОсновнойЕдиницы = 0) Тогда
// очищаем основную единицу
ОсновнаяЕдиница = "";
КонецЕсли;
Единица = ОсновнаяЕдиница;
Если Единица.Выбран() = 0 Тогда
// Пытаемся найти единицу измерения с такими же параметрами
СпрЕдиницы.ИспользоватьВладельца(ТекущийЭлемент());
СпрЕдиницы.ВыбратьЭлементы();
Пока (СпрЕдиницы.ПолучитьЭлемент() = 1)
и (Единица.Выбран() = 0) Цикл
Если (СпрЕдиницы.ТекущийЭлемент() <> БазоваяЕдиница) Тогда
Если (СпрЕдиницы.ОКЕИ = РеквОсновнаяЕдиница)
и (СпрЕдиницы.Вес = РеквВесОсновной)
и (СпрЕдиницы.Коэффициент = РеквКоэффициентОсновной)
и (СпрЕдиницы.ШтрихКод = РеквШтрихкодОсновной) Тогда
// Если в справочнике нашли единицу с идентичными параметрами
// то создавать новую единицу измерения не будем а используем
// существующую в качестве основной
ОсновнаяЕдиница = СпрЕдиницы.ТекущийЭлемент();
Единица = ОсновнаяЕдиница;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
РеквЕдиница = РеквОсновнаяЕдиница;
РеквШтрихкод = РеквШтрихкодОсновной;
РеквВес = РеквВесОсновной;
РеквКоэффициент = РеквКоэффициентОсновной;
Описатель = "основной";
КонецЕсли;
//}}MRG[ <-> ]
//{{MRG[ <-- ]
Если ПустоеЗначение(Единица) = 0 Тогда
//}}MRG[ <-- ]
// проверить, изменил ли пользователь реквизиты единицы
//{{MRG[ <-> ]
// Если (БазоваяЕдиница.ОКЕИ = РеквБазоваяЕдиница) И
// (БазоваяЕдиница.Вес = РеквВесБазовой) И
// (БазоваяЕдиница.ШтрихКод = РеквШтрихкодБазовой) Тогда
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Если (Единица.ОКЕИ = РеквЕдиница) И
(Единица.Вес = РеквВес) И
(Единица.Коэффициент = РеквКоэффициент) И
(Единица.ШтрихКод = РеквШтрихкод) Тогда
//}}MRG[ <-> ]
ЗаписатьЕдиницу = 0; // ничего не изменилось
Иначе
// проверим, а не изменили ли единицу из вне.
//{{MRG[ <-> ]
// СпрЕдиницы.НайтиЭлемент(БазоваяЕдиница);
//}}MRG[ <-> ]
//{{MRG[ <-> ]
СпрЕдиницы.НайтиЭлемент(Единица);
//}}MRG[ <-> ]
//{{MRG[ <-> ]
// Если глСравнитьЭлементыСправочника(СпрЕдиницы.ТекущийЭлемент(), БазоваяЕдиница) = 1 Тогда
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Если глСравнитьЭлементыСправочника(СпрЕдиницы.ТекущийЭлемент(), Единица) = 1 Тогда
//}}MRG[ <-> ]
// единица измерения изменена извне. Спросим, нужно ли накатить изменения
//{{MRG[ <-> ]
// Ответ = Вопрос("Реквизиты базовой единицы измерения """ +
// СокрЛП(БазоваяЕдиница.Наименование) + """" +
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Ответ = Вопрос("Реквизиты " + Описатель + " единицы измерения """ +
СокрЛП(Единица.Наименование) + """" +
//}}MRG[ <-> ]
" изменились за время редактирования позиции номенклатуры """ +
СокрЛП(Наименование) +
//{{MRG[ <-> ]
// """. Сохранить изменения реквизитов базовой единицы измерения """ +
// СокрЛП(БазоваяЕдиница.Наименование)+"""?","Да+Нет", 60);
//}}MRG[ <-> ]
//{{MRG[ <-> ]
""". Сохранить изменения реквизитов для " + Описатель + " единицы:""" +
СокрЛП(Единица.Наименование)+"""?","Да+Нет", 60);
//}}MRG[ <-> ]
Если Ответ = "Нет" Тогда
ЗаписатьЕдиницу = 0;
ИначеЕсли Ответ = "Таймаут" Тогда
// вышел таймаут. ничего не записываем
Возврат 0;
КонецЕсли;
КонецЕсли;
//{{MRG[ --> ]
//
//}}MRG[ --> ]
КонецЕсли;
//{{MRG[ <-- ]
//}}MRG[ <-- ]
КонецЕсли;
Если ЗаписатьЕдиницу = 1 Тогда
// проверить заполнение обязательных полей
//{{MRG[ <-> ]
//
// Если (ПустоеЗначение(РеквШтрихкодБазовой) = 0) И (Весовой = 0) Тогда
//
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Если ПустоеЗначение(РеквШтрихкод) = 0 Тогда
//}}MRG[ <-> ]
// проверяем уникальность только для невесового товара
//{{MRG[ <-- ]
ШКУникален = 1;
//}}MRG[ <-- ]
СпрПоискЕдиницы = СоздатьОбъект("Справочник.Единицы");
//{{MRG[ <-> ]
// ШКУникален = 1;
// Если СпрПоискЕдиницы.НайтиПоРеквизиту("Штрихкод", РеквШтрихкодБазовой, 1) <> 0 Тогда
// Если ПустоеЗначение(БазоваяЕдиница) = 1 Тогда
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Если СпрПоискЕдиницы.НайтиПоРеквизиту("Штрихкод", РеквШтрихкод, 1) <> 0 Тогда
Если ПустоеЗначение(Единица) = 1 Тогда
//}}MRG[ <-> ]
ШКУникален = 0;
Иначе
//{{MRG[ <-> ]
// Если БазоваяЕдиница <> СпрПоискЕдиницы.ТекущийЭлемент() Тогда
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Если Единица <> СпрПоискЕдиницы.ТекущийЭлемент() Тогда
//}}MRG[ <-> ]
ШКУникален = 0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ШКУникален = 0 Тогда
//{{MRG[ <-> ]
// Предупреждение("Штрихкод базовой единицы не уникален!", 60);
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Предупреждение("Штрихкод " + Описатель + " единицы не уникален!", 60);
//}}MRG[ <-> ]
Возврат 0;
КонецЕсли;
//{{MRG[ <-- ]
//}}MRG[ <-- ]
КонецЕсли;
//{{MRG[ <-> ]
// // Если новый элемент номенклатуры, то его необходимо записать перед записью базовой единицы
//}}MRG[ <-> ]
//{{MRG[ <-> ]
// Если новый элемент номенклатуры, то его необходимо записать перед записью единицы
//}}MRG[ <-> ]
Если Выбран() = 0 Тогда
Записать();
КонецЕсли;
//{{MRG[ <-> ]
// Если ПустоеЗначение(БазоваяЕдиница) = 1 Тогда
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Если ПустоеЗначение(Единица) = 1 Тогда
//}}MRG[ <-> ]
СпрЕдиницы.ИспользоватьВладельца(ТекущийЭлемент());
СпрЕдиницы.Новый();
Иначе
//{{MRG[ <-> ]
// СпрЕдиницы.НайтиЭлемент(БазоваяЕдиница);
//}}MRG[ <-> ]
//{{MRG[ <-> ]
СпрЕдиницы.НайтиЭлемент(Единица);
//}}MRG[ <-> ]
КонецЕсли;
//{{MRG[ <-> ]
//
// СпрЕдиницы.Наименование = РеквБазоваяЕдиница.Наименование;
// СпрЕдиницы.Вес = РеквВесБазовой;
// СпрЕдиницы.Коэффициент = 1;
// СпрЕдиницы.ОКЕИ = РеквБазоваяЕдиница;
// СпрЕдиницы.ШтрихКод = РеквШтрихкодБазовой;
//}}MRG[ <-> ]
//{{MRG[ <-> ]
СпрЕдиницы.Наименование = РеквЕдиница.Наименование;
СпрЕдиницы.Вес = РеквВес;
СпрЕдиницы.Коэффициент = РеквКоэффициент;
СпрЕдиницы.ОКЕИ = РеквЕдиница;
СпрЕдиницы.ШтрихКод = РеквШтрихкод;
//}}MRG[ <-> ]
Попытка
СпрЕдиницы.Записать();
Исключение
//{{MRG[ <-> ]
// Предупреждение( "Не удалось сохранить ""базовую единицу"": " + ОписаниеОшибки() +
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Предупреждение( "Не выполнено сохранение " + Описатель + " единицы: " + ОписаниеОшибки() +
//}}MRG[ <-> ]
РазделительСтрок + "Элемент не сохранен!", 60);
Возврат 0;
КонецПопытки;
//{{MRG[ <-- ]
Если ВидЕдиницы = "Базовая" Тогда
//}}MRG[ <-- ]
УстановитьАтрибут("БазоваяЕдиница", "");
ПолучитьАтрибут("БазоваяЕдиница");
УстановитьАтрибут("БазоваяЕдиница", СпрЕдиницы.ТекущийЭлемент());
//{{MRG[ <-- ]
Иначе
УстановитьАтрибут("ОсновнаяЕдиница", "");
ПолучитьАтрибут("ОсновнаяЕдиница");
УстановитьАтрибут("ОсновнаяЕдиница", СпрЕдиницы.ТекущийЭлемент());
КонецЕсли;
//}}MRG[ <-- ]
КонецЕсли;
//{{MRG[ <-> ]
// Если (ПустоеЗначение(ОсновнаяЕдиница) = 1) ИЛИ (ОсновнаяЕдиница = БазоваяЕдиница) Тогда
// // обновим основную единицу
//}}MRG[ <-> ]
//{{MRG[ <-> ]
Возврат 1;
КонецФункции // ЗаписатьЕдиницу()
Если НайденнаяСтрока.Количество > Разница и Разница <> 0 И Разница > 0 Тогда // Какой-то код ... ИначеЕсли Разница <> 0 И Разница > 0 И НайденнаяСтрока.Количество <> 0 Тогда // Какой-то код ... КонецЕсли