Процедура ТабличнаяЧастьИвентаризацияОткрытие(Элемент, СтандартнаяОбработка)
Если НЕ ЗначениеЗаполнено(Элемент.Значение) Тогда
Родитель = ЭлементыФормы.ТабличнаяЧасть.ТекущиеДанные.Ссылка;
Документ(Родитель, Истина);
КонецЕсли;
КонецПроцедуры
Процедура Дерево()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Представление,
| Номенклатура.Родитель КАК Родитель,
| ПРЕДСТАВЛЕНИЕ(Номенклатура.Родитель),
| Номенклатура.ЭтоГруппа
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА
|
|СГРУППИРОВАТЬ ПО
| Номенклатура.Родитель,
| Номенклатура.Ссылка,
| Номенклатура.Представление,
| Номенклатура.ЭтоГруппа
|
|УПОРЯДОЧИТЬ ПО
| Родитель ИЕРАРХИЯ,
| Ссылка ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("ИСТИНА", ИСТИНА);
РезультатЗапроса = Запрос.Выполнить();
ТабличнаяЧасть.Очистить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НоваяСтрока = ЭтаФорма.ЭлементыФормы.ТабличнаяЧасть;
НоваяСтрока.ДобавитьСтроку();
НоваяСтрока.ТекущиеДанные.Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
НоваяСтрока.ТекущиеДанные.Родитель = ВыборкаДетальныеЗаписи.Родитель;
КонецЦикла;
КонецПроцедуры
Процедура Документ(Родитель, Открыть = Ложь)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
| ТоварыНаСкладахОстатки.КоличествоОстаток * ЦеныНоменклатурыСрезПоследних.Цена КАК Сумма
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| ПО (ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
|ГДЕ
| ТоварыНаСкладахОстатки.Склад = &Склад
| И ТоварыНаСкладахОстатки.Номенклатура.Родитель = &Родитель
| И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("Родитель", Родитель);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
//Создадим Документ
Инвентаризация = Документы.ИнвентаризацияТоваров.СоздатьДокумент();
Инвентаризация.Ответственный = ПараметрыСеанса.ТекущийПользователь;
Инвентаризация.Дата = ДатаДокумента;
Инвентаризация.Склад = Склад;
Инвентаризация.Комментарий = СокрЛП(Родитель);
Объект = Инвентаризация.ПолучитьФорму("ФормаДокумента");
//Создадим Документ
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СтрокаТов = Инвентаризация.Товары.Добавить();
СтрокаТов.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
СтрокаТов.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.ЕдиницаИзмерения;
СтрокаТов.КоличествоУчет = ВыборкаДетальныеЗаписи.КоличествоОстаток;
СтрокаТов.Коэффициент = 1;
СтрокаТов.Цена = ВыборкаДетальныеЗаписи.Цена;
Объект.ТоварыПриИзмененииНоменклатуры(СтрокаТов);
КонецЦикла;
Если Инвентаризация.Товары.Количество() > 0 Тогда
Инвентаризация.Товары.Сортировать("Номенклатура Возр");
Если Открыть Тогда
Инвентаризация.ПолучитьФорму("ФормаДокумента").Открыть();
Иначе
Инвентаризация.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЕсли;
ИначеЕсли Открыть Тогда
Предупреждение("По номенклатурной группе: "+ Родитель + " - нет остатков!");
КонецЕсли;
КонецПроцедуры
Процедура ОсновныеДействияФормыСформироватьДокументы(Кнопка)
КоличествоСтрок = ТабличнаяЧасть.Количество();
Если КоличествоСтрок > 0 Тогда
Если ЗначениеЗаполнено(Склад) Тогда
Для каждого Строка Из ТабличнаяЧасть Цикл
Если Строка.Пометка Тогда
Документ(Строка.Ссылка);
КонецЕсли;
КонецЦикла;
Предупреждение("Документы созданы!");
Иначе
Предупреждение("Необходимо указать склад!");
КонецЕсли;
Иначе
Предупреждение("Сначало нажимаем кнопку !Номенклатура!");
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("розничная");
ДатаДокумента = НачалоДня(ТекущаяДата());
НачалоДня = Истина;
ЭлементыФормы.НалоДня.Заголовок = "На начало дня";
Дерево();
КонецПроцедуры // ПередОткытием()
Процедура НалоДняПриИзменении(Элемент)
Если НачалоДня Тогда
ЭлементыФормы.НалоДня.Заголовок = "На начало дня";
ДатаДокумента = НачалоДня(ТекущаяДата());
Иначе
ЭлементыФормы.НалоДня.Заголовок = "На конец дня";
ДатаДокумента = КонецДня(ТекущаяДата());
КонецЕсли;
КонецПроцедуры
Процедура ВсеНажатие(Элемент)
КоличествоСтрок = ТабличнаяЧасть.Количество();
Если КоличествоСтрок > 0 Тогда
Для каждого Строка Из ТабличнаяЧасть Цикл
Строка.Пометка = ИСТИНА;
КонецЦикла;
Иначе
Предупреждение("Сначало нажимаем кнопку !Номенклатура!");
КонецЕсли;
КонецПроцедуры
Процедура НВсеНажатие(Элемент)
КоличествоСтрок = ТабличнаяЧасть.Количество();
Если КоличествоСтрок > 0 Тогда
Для каждого Строка Из ТабличнаяЧасть Цикл
Строка.Пометка = ЛОЖЬ;
КонецЦикла;
Иначе
Предупреждение("Сначало нажимаем кнопку !Номенклатура!");
КонецЕсли;
КонецПроцедуры
Процедура ИВсеНажатие(Элемент)
КоличествоСтрок = ТабличнаяЧасть.Количество();
Если КоличествоСтрок > 0 Тогда
Для каждого Строка Из ТабличнаяЧасть Цикл
Если Строка.Пометка Тогда
Строка.Пометка = ЛОЖЬ;
Иначе
Строка.Пометка = ИСТИНА;
КонецЕсли;
КонецЦикла;
Иначе
Предупреждение("Сначало нажимаем кнопку !Номенклатура!");
КонецЕсли;
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
Если НастройкаПериода.Редактировать() Тогда
НачПериода = НастройкаПериода.ПолучитьДатуНачала();
КонПериода = КонецДня(НастройкаПериода.ПолучитьДатуОкончания());
КонецЕсли;
КонецПроцедуры
Процедура НайтиСущНажатие(Элемент)
Если Не ЗначениеЗаполнено(Склад) Тогда
Предупреждение("Необходимо указать склад!");
Возврат;
КонецЕсли;
Если Строка(НачПериода) = "01.01.0001 0:00:00" Тогда
Предупреждение("Необходимо указать начальную дату для поиска!");
Возврат;
КонецЕсли;
Если Строка(КонПериода) = "01.01.0001 0:00:00" Тогда
Предупреждение("Необходимо указать конечную дату для поиска!");
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИнвентаризацияТоваров.Ссылка КАК Ссылка
|ИЗ
| Документ.ИнвентаризацияТоваров КАК ИнвентаризацияТоваров
|ГДЕ
| ИнвентаризацияТоваров.Дата МЕЖДУ &НачПериода И &КонПериода
| И ИнвентаризацияТоваров.Склад = &Склад
|
|СГРУППИРОВАТЬ ПО
| ИнвентаризацияТоваров.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";
Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
СтрокаПоиска = Ссылка.Комментарий;
Поиск(СтрокаПоиска, Ссылка);
КонецЦикла;
КонецПроцедуры
Процедура Поиск(СтрокаПоиска, Инвентаризация)
Для каждого Строка Из ТабличнаяЧасть Цикл
Ссылка = Строка(Строка.Ссылка);
Если Ссылка = СтрокаПоиска Тогда
Строка.Ивентаризация = Инвентаризация;
Возврат;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // Поиск()
Процедура ОтметитьНажатие(Элемент)
Для каждого Строка Из ТабличнаяЧасть Цикл
Если ЗначениеЗаполнено(Строка.Ивентаризация) Тогда
Строка.Пометка = Ложь;
Иначе
Строка.Пометка = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОсновныеДействияФормыОбновить(Кнопка)
Дерево();
КонецПроцедуры