Перем ПромЦена;
Перем ПромТовар;
//--------------------
Процедура Подбор()
ОткрытьПодбор("Товары","ДляПодбора");
КонецПроцедуры
Процедура РасчетСуммыДоставки() Далее
//----------
Процедура ПересчетСумм(Флаг)
Если Флаг = 0 Тогда
Количество=КолУп*Товар.ЕдУп;
КонецЕсли;
Если (ПромЦена<>ЦенаБезНДС) И (Товар=ПромТовар) И (ИмяПользователя()<>"Директор_Геннадий") И (ИмяПользователя()<>"Алла") Тогда
Предупреждение("У Вас нет права изменять это значение !",2);
ЦенаБезНДС=ПромЦена;
КонецЕсли;
СуммаБезНДС=ЦенаБезНДС*Количество;
НДС=Итог("СуммаБезНДС")*?(ДаНДС=Перечисление.Булево.Да,0.2,0);
СуммаНДС=Итог("СуммаБезНДС")+НДС;
Вес = Количество * Товар.КоэфПересчета;
РасчетСуммыДоставки();
КонецПроцедуры
//-----------------------------------------------
Функция ПолучитьСкидкуКво()
Если Товар.Выбран() = 0 Тогда
Возврат 0;
КонецЕсли;
Спр = СоздатьОбъект("Справочник.СкидкиКво");
Если Спр.НайтиПоРеквизиту("Товар",Товар,1) = 1 Тогда
Если Количество > Спр.Кво Тогда
Возврат Спр.Скидка.Получить(ДатаДок);
КонецЕсли;
КонецЕсли;
Возврат 0;
КонецФункции
Процедура УстановкаЦены()
Количество=КолУп*Товар.ЕдУп;
Если ФлагНДС=1 Тогда // Банк
СкидкаТовар=ПолучитьСкидкуТовар(Контекст);
СкидкаКво = ПолучитьСкидкуКво();
Если СкидкаКво > 0 Тогда
СкКво = 1;
Иначе
СкКво = 0;
КонецЕсли;
// Цена с учетом курса и 3-х скидок
ЦенаБезНДС=Товар.ЦенаРасх*(1-(СкидкаТовар+Клиент.Скидка)/100)*(1-СкидкаКво/100)*(1-Скидка/100);
Иначе // Касса
СкидкаТовар=ПолучитьСкидкуТовар(Контекст);
ЦенаБезНДС=Товар.ЦенаРасх*Константа.КоэфЦены.Получить(ДатаДок)*(1-(СкидкаТовар+Клиент.Скидка)/100)*(1-СкидкаКво/100)*(1-Скидка/100);
КонецЕсли;
ПромЦена=ЦенаБезНДС;
ПромТовар=Товар;
ПересчетСумм(0);
КонецПроцедуры
//----------------------------
Процедура ОбработкаПодбора(Выб)
НоваяСтрока();
Количество=1;
Товар=Выб;
УстановкаЦены();
ПересчетСумм(0);
АктивизироватьСтроку();
Активизировать("Количество");
КонецПроцедуры
//-------------------------------------
Процедура Печать()
Кому = "";
Таб=СоздатьОбъект("Таблица");
Для Сч=1 По 2 Цикл
Если Сч=1 Тогда
Кому = "Склад";
Таб.ВывестиСекцию("ДляКого");
Иначе
Кому = "Бухгалтерия";
Таб.ВывестиСекцию("ДляКого");
КонецЕсли;
Таб.ВывестиСекцию("Шапка");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 do
Таб.ВывестиСекцию("Строка");
enddo;
Таб.ВывестиСекцию("Подвал1");
Если ДопУслуги<>0 Тогда
Таб.ВывестиСекцию("ДопУслуги");
КонецЕсли;
Таб.ВывестиСекцию("Подвал2");
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(0);
Таб.Показать("Печать накладной","");
//Если ФлагНДС = 1 Тогда
// Таб.КоличествоЭкземпляров(3);
//Иначе Таб.КоличествоЭкземпляров(2);
//КонецЕсли;
Если Сч=1 Тогда Таб.НоваяСтраница();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//-----------------------------------------------------
Процедура ПечатьНалоговой()
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Налоговая");
Таб.ВывестиСекцию("Шапка");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 do
Таб.ВывестиСекцию("Строка");
enddo;
НДС=Итог("СуммаБезНДС")*?(ДаНДС=Перечисление.Булево.Да,0.2,0);
Итого=Итог("СуммаБезНДС")+НДС;
Таб.ВывестиСекцию("Подвал");
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(0);
Таб.Показать("Печать накладной","");
КонецПроцедуры
//-----------------------------------------------
Процедура ПриОткрытии()
Если НазваниеИнтерфейса()="Интерфейс_Менеджера" Тогда
Форма.кнНН.Видимость(0);
Форма.кнПечФайл.Видимость(0);
Форма.кЗаполнить.Видимость(0);
Форма.кнПровести.Видимость(0);
Форма.Скидка.Доступность(0);
Форма.ОплатитьДо.Доступность(0);
Форма.ЦенаБезНДС.Доступность(0);
Форма.Вес.Доступность(0);
Если НазваниеИнтерфейса()="Интерфейс_Малежик" Тогда
Форма.кнНН.Видимость(0);
Форма.кнПечФайл.Видимость(0);
Форма.кЗаполнить.Видимость(0);
Форма.кнПровести.Видимость(0);
Форма.Скидка.Доступность(1);
Форма.ОплатитьДо.Доступность(0);
Форма.ЦенаБезНДС.Доступность(1);
Форма.Вес.Доступность(0);
КонецЕсли;
Если НазваниеИнтерфейса()="Интерфейс_Брэнд" Тогда
Форма.кнНН.Видимость(0);
Форма.кнПечФайл.Видимость(0);
Форма.кЗаполнить.Видимость(0);
Форма.кнПровести.Видимость(0);
Форма.Скидка.Доступность(1);
Форма.ОплатитьДо.Доступность(0);
Форма.ЦенаБезНДС.Доступность(0);
Форма.Вес.Доступность(0);
КонецЕсли;
Если (НазваниеНабораПрав()<>"Администратор") Тогда
Форма.ДатаДок.Доступность(0);
КонецЕсли;
Если Проведен()=1 Тогда
Предупреждение("Вы не имеете права редактировать проведенный документ!!!" + РазделительСтрок + "Разрешен только просмотр и печать документа.");
Форма.ТолькоПросмотр(1);
КонецЕсли;
КонецЕсли;
ПроверкаРазрешенияРедактирования(Контекст);
ИзмЦены=1;
Если ДаНДС=Перечисление.Булево.Да Тогда
ФлагНДС=1;
Иначе
ФлагНДС=0;
КонецЕсли;
Если ВидРасч=Перечисление.ВидРасч.Безналичные Тогда
ФлагНал=0;
Иначе
ФлагНал=1;
КонецЕсли;
Если (ИмяПользователя() = "Алла") ИЛИ (ИмяПользователя() = "Angel") Тогда
Форма.фЦена.Доступность(1);
Иначе
фЦена = 0;
Форма.фЦена.Доступность(0);
КонецЕсли;
КонецПроцедуры
//-------------------------------
Процедура ВводНового();
ДатаДок=ТекущаяДата();
ВидРасч=Перечисление.ВидРасч.Безналичные;
ДаНДС=Перечисление.Булево.Да;
ФлагНДС=1;
ФлагНал=0;
Автор = ПолноеИмяПользователя();
ОплатитьДо = КонМесяца(ДатаДок);
КонецПроцедуры
//-----------------------------------------------
Процедура ВводНаОсновании(ДокОснование)
//-----
ДокОсн = ДокОснование.Вид();
//-----
ДатаДок=РабочаяДата();
Автор = ПолноеИмяПользователя();
Клиент=ДокОснование.Клиент;
ПоСчету=ДокОснование;
ВидРасч=ДокОснование.ВидРасч;
Если ДаНДС=Перечисление.Булево.Да Тогда
ФлагНДС=1;
Иначе
ФлагНДС=0;
КонецЕсли;
Если ВидРасч=Перечисление.ВидРасч.Безналичные Тогда
ФлагНал=0;
Иначе
ФлагНал=1;
КонецЕсли;
// спецификацию записываем исходя из остатков зарезервированных товаров
Рег1=СоздатьОбъект("Регистр.РезервыТоваров");
ДокОснование.ВыбратьСтроки();
Пока ДокОснование.ПолучитьСтроку()=1 Цикл
РезервПоСчету= Рег1.Остаток(ДокОснование.Товар,ДокОснование,"РезервТовара");
Если ДокОсн = "Возврат" Тогда
НоваяСтрока();
Товар=ДокОснование.Товар;
КолУп=ДокОснование.КолУп;
ЦенаБезНДС=ДокОснование.Себест;
Количество=ДокОснование.Количество;
ПересчетСумм(1);
Иначе
Если РезервПоСчету>0 Тогда
НоваяСтрока();
Товар=ДокОснование.Товар;
КолУп=РезервПоСчету/ДокОснование.Товар.ЕдУп;
ЦенаБезНДС=ДокОснование.ЦенаБезНДС;
Количество=РезервПоСчету;
ПересчетСумм(0);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ДокОсн = "Возврат" Тогда
Скидка=0;
ДопУслуги=0;
ДаНДС=Перечисление.Булево.Нет;
Иначе
Скидка=ДокОснование.Скидка;
ДопУслуги=ДокОснование.ДопУслуги;
ДаНДС=ДокОснование.ДаНДС;
КонецЕсли;
КонецПроцедуры
//------------------------------------------------
Процедура ФлагНалКлик()
//Если ФлагНал=1 Тогда
Если Вопрос ("РАССЧИТВЫВАЮТСЯ НАЛИЧКОЙ ???", "Да+Нет") = "Да" Тогда
ФлагНал=1;
ВидРасч=Перечисление.ВидРасч.Наличные;
Иначе
ФлагНал=0;
ВидРасч=Перечисление.ВидРасч.Безналичные;
КонецЕсли;
//КонецЕсли;
КонецПроцедуры
//-----------------------------------------------
Процедура Пересчет()
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Если фЦена = 0 Тогда
УстановкаЦены();
КонецЕсли;
ПересчетСумм(0);
КонецЦикла;
КонецПроцедуры
//---------------------------------------------------
Процедура ФлагНДСКлик()
Если ФлагНДС=1 Тогда
ДаНДС=Перечисление.Булево.Да;
Иначе
ДаНДС=Перечисление.Булево.Нет;
КонецЕсли;
Пересчет();
КонецПроцедуры
//--------------------------------
Процедура ИзмСкидки()
Если ИмяПользователя()<>"Склад" Тогда
Предупреждение("Это значение меняет ТОЛЬКО пользователь <Склад> !",2);
Форма.Закрыть(0);
Иначе
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
УстановкаЦены();
ПересчетСумм(0);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи()
ПроверкаРазрешенияЗаписи(Контекст);
КонецПроцедуры
//--------------------------------
Процедура ПриЗакрытии()
Форма.Закрыть(0);
КонецПроцедуры
//--------------------------------
Процедура ЗакрытиеСВопросом()
Если Вопрос("СОХРАНИТЬ? Документ будет проведен!!!", "Да+Нет") = "Да" Тогда
Записать();
Провести();
Форма.Закрыть();
Иначе Форма.Закрыть();
КонецЕсли;
КонецПроцедуры
//--------------------------------
Процедура РасчетСуммыДоставки()
_Зона = Клиент.Город.Зона;
_Категория = Клиент.Категория;
Если (ПустоеЗначение(_Зона) = 1) ИЛИ (ПустоеЗначение(_Категория) = 1) Тогда
СуммаДоставки = 0;
Возврат;
КонецЕсли;
ПолнВес = Итог("Вес");
Спр = СоздатьОбъект("Справочник.СтоимостьПоЗонам");
Если (_Категория.Код = 1) ИЛИ (ПолнВес >= 1500) Тогда
СуммаДоставки = 0;
ИначеЕсли _Категория.Код = "2" Тогда
Если ПолнВес <= 50 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес10_50 Тогда
Если ПолнВес <= 10 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 50 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 10) / 5) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
СуммаДоставки = 0;
КонецЕсли;
ИначеЕсли (_Категория.Код = "3") ИЛИ (_Категория.Код = "4") Тогда
Если ПолнВес <= 50 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес10_50 Тогда
Если ПолнВес <= 10 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 50 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 10) / 5) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
ИначеЕсли ПолнВес <= 100 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес51_100 Тогда
Если ПолнВес <= 51 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 100 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 51) / 10) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
СуммаДоставки = 0;
КонецЕсли;
ИначеЕсли _Категория.Код = "5" Тогда
Если ПолнВес <= 50 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес10_50 Тогда
Если ПолнВес <= 10 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 50 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 10) / 5) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
ИначеЕсли ПолнВес <= 100 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес51_100 Тогда
Если ПолнВес <= 51 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 100 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 51) / 10) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
ИначеЕсли ПолнВес <= 350 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес101_350 Тогда
Если ПолнВес <= 101 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 350 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 101) / 50) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
СуммаДоставки = 0;
КонецЕсли;
ИначеЕсли _Категория.Код = "6" Тогда
Если ПолнВес <= 50 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес10_50 Тогда
Если ПолнВес <= 10 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 50 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 10) / 5) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
ИначеЕсли ПолнВес <= 100 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес51_100 Тогда
Если ПолнВес <= 51 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 100 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 51) / 10) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
ИначеЕсли ПолнВес <= 350 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес101_350 Тогда
Если ПолнВес <= 101 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 350 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 101) / 50) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
ИначеЕсли ПолнВес <= 750 Тогда
Спр.ВыбратьЭлементыПоРеквизиту("Зона",_Зона,0,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.Шкала = Перечисление.ШкалаВеса.Вес351_750 Тогда
Если ПолнВес <= 351 Тогда
СуммаДоставки = Спр.БазСтоимость;
ИначеЕсли ПолнВес = 750 Тогда
СуммаДоставки = Спр.БазСтоимость2;
Иначе
СуммаДоставки = Спр.БазСтоимость + Цел((ПолнВес - 351) / 100) * Спр.СтоимостьДоп;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
СуммаДоставки = 0;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Заполнить()
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаДок по ДатаДок;
|Товар = Регистр.ОстаткиТоваров.Товар;
|ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара;
|Стоимость = Регистр.ОстаткиТоваров.Стоимость;
|Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);
|Функция СтоимостьКонОст = КонОст(Стоимость);
|Группировка Товар без групп;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
УдалитьСтроки();
Пока Запрос.Группировка(1) = 1 Цикл
НоваяСтрока();
Товар = Запрос.Товар;
Количество = Запрос.ОстатокТовараКонОст;
Попытка
КолУп = Количество / Товар.ЕдУп;
Исключение
КолУп = 1;
КонецПопытки;
СуммаБезНДС = Запрос.СтоимостьКонОст;
ЦенаБезНДС = ?(Количество = 0, 0, СуммаБезНДС / Количество);
КонецЦикла;
КонецПроцедуры
Процедура ПечатьФайл()
Таб = СоздатьОБъект("Таблица");
Таб.ИсходнаяТаблица("Таблица1");
Таб.ВывестиСекцию("Шапка");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Стр");
КонецЦикла;
Таб.Опции(0,0,0,0);
Таб.ТолькоПросмотр(1);
Таб.Показать();
КонецПроцедуры