#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Процедура ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ДокументОбъект, РежимЗаписи) Экспорт
ПараметрыЗаполнения = ПараметрыЗаполненияВидовЗапасов(Ложь);
ПараметрыЗаполнения.ДокументДелаетИПриходИРасход = РежимЗаписи = РежимЗаписиДокумента.Проведение;
ДокументОбъект.ДополнительныеСвойства.Вставить("ПараметрыЗаполненияВидовЗапасов", ПараметрыЗаполнения);
КонецПроцедуры
Процедура ЗаполнитьВидыЗапасовПриОбмене(Отказ, ТаблицыДокумента) Экспорт
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
Если ТаблицыДокумента <> Неопределено Тогда
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров(ТаблицыДокумента);
ДополнительныеСвойства.Вставить("ТаблицыЗаполненияВидовЗапасовПриОбмене", ТаблицыДокумента);
Иначе
ИмяПараметра = "ТаблицыДокумента";
ТекстИсключения = НСтр("ru = 'Для заполнения видов запасов не передан параметр ""%1"".'");
ТекстИсключения = СтрШаблон(ТекстИсключения, ИмяПараметра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ЗаполнитьВидыЗапасов(Отказ);
ДополнительныеСвойства.Удалить("ТаблицыЗаполненияВидовЗапасовПриОбмене");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ЗначениеЗаполнено(ДанныеЗаполнения) Тогда
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("РеквизитыШапки") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения.РеквизитыШапки);
ИначеЕсли ДанныеЗаполнения.Свойство("ВидОперации")
И ЗначениеЗаполнено(ДанныеЗаполнения.ВидОперации) Тогда
ВидОперации = ДанныеЗаполнения.ВидОперации;
Иначе
ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв;
КонецЕсли;
Если ДанныеЗаполнения.Свойство("Товары") Тогда
ЗаполнитьПоТаблицеТовары(ДанныеЗаполнения.Товары);
Если ДанныеЗаполнения.Товары.Колонки.Найти("КоличествоУпаковок") = Неопределено Тогда
СтруктураДействий = Новый Структура();
СтруктураДействий.Вставить(
"ПересчитатьКоличествоУпаковок",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.СтруктураПересчетаКоличестваУпаковок());
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Товары, СтруктураДействий, Неопределено);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Дата) Тогда
Дата = ТекущаяДатаСеанса();
КонецЕсли;
Иначе
ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв;
КонецЕсли;
Заказ = Неопределено;
Если ТипЗнч(ДанныеЗаполнения) <> Тип("Структура")
И ТипЗнч(ДанныеЗаполнения) <> Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
Заказ = ДанныеЗаполнения;
КонецЕсли;
Если ЗначениеЗаполнено(Заказ) Тогда
Назначение = Документы.КорректировкаНазначенияТоваров.НазначениеЗаказа(Заказ);
Организация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Заказ, "Организация");
НазначениеДляЗаполненияДокумента = Назначение;
ТоварыОтбор = Неопределено;
МенеджерДокумента = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Заказ);
Если ТипЗнч(Заказ) = Тип("ДокументСсылка.ЗаказПереработчику2_5")
Или ТипЗнч(Заказ) = Тип("ДокументСсылка.ЗаказПереработчику")
Или Ложь Тогда
ДанныеДокумента = МенеджерДокумента.ДанныеДокументаДляСозданияКорректировкиНазначения(Заказ,
Новый Структура("ИдентификаторВХранилище,ЭтоСнятиеРезерва", Новый УникальныйИдентификатор, Истина));
ТоварыОтбор = ПолучитьИзВременногоХранилища(ДанныеДокумента.АдресТоваров);
УдалитьИзВременногоХранилища(ДанныеДокумента.АдресТоваров);
Если ДанныеДокумента.Назначения.Количество() = 1 Тогда
НазначениеДляЗаполненияДокумента = ДанныеДокумента.Назначения[0];
Назначение = НазначениеДляЗаполненияДокумента;
Заказ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Назначение, "Заказ");
ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв;
Иначе
НазначениеДляЗаполненияДокумента = ДанныеДокумента.Назначения;
Назначение = Неопределено;
Заказ = Неопределено;
ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям;
КонецЕсли;
КонецЕсли;
Документы.КорректировкаНазначенияТоваров.ЗаполнитьПоОснованию(
НазначениеДляЗаполненияДокумента, Неопределено, Ссылка, ВидОперации, Товары, ТоварыОтбор);
Если Товары.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'Нет данных для заполнения по ""%Заказ%"" .'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Заказ%", Строка(ДанныеЗаполнения));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КорректировкаНазначенияТоваровЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
Если ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям Тогда
Назначение = Неопределено;
Заказ = Неопределено;
КонецЕсли;
Автор = Пользователи.ТекущийПользователь();
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
Ответственный = Пользователи.ТекущийПользователь();
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияКоличества();
ПараметрыПроверки.ПроверитьКомплектностьТоварныхМест = Истина;
ПараметрыПроверки.ПоляГруппировкиПроверкиКомплектности = "ИсходноеНазначение,НовоеНазначение,Склад,Помещение";
НоменклатураСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ, ПараметрыПроверки);
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,
НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.КорректировкаНазначенияТоваров),
Отказ,
МассивНепроверяемыхРеквизитов);
СкладыСервер.ПроверитьЗаполнениеЯчеек(ЭтотОбъект, МассивНепроверяемыхРеквизитов, Отказ);
СкладыСервер.ПроверитьЗаполнениеПомещений(ЭтотОбъект, МассивНепроверяемыхРеквизитов, Отказ);
МассивНепроверяемыхРеквизитов.Добавить("Товары.НовоеНазначение");
МассивНепроверяемыхРеквизитов.Добавить("Товары.ИсходноеНазначение");
Если ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям
Или ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.ПроизвольнаяКорректировкаНазначений Тогда
МассивНепроверяемыхРеквизитов.Добавить("Организация");
КонецЕсли;
ПроверитьТипНазначений(Отказ);
ПроверитьЗаполнениеНовогоНазначения(Отказ);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Склад,
| Товары.Помещение
|ПОМЕСТИТЬ СкладыИПомещения
|ИЗ
| &Товары КАК Товары
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| СкладыИПомещения.Склад,
| СкладыИПомещения.Помещение
|ИЗ
| СкладыИПомещения КАК СкладыИПомещения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиАдресныхСкладов КАК НастройкиАдресныхСкладов
| ПО (НастройкиАдресныхСкладов.ИспользоватьАдресноеХранение)
| И (НастройкиАдресныхСкладов.ДатаНачалаАдресногоХраненияОстатков <= &Дата)
| И (НастройкиАдресныхСкладов.Склад = СкладыИПомещения.Склад)
| И (НастройкиАдресныхСкладов.Помещение = СкладыИПомещения.Помещение)
| И (НЕ СкладыИПомещения.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| ИЛИ (НЕ НастройкиАдресныхСкладов.Склад.ИспользоватьСкладскиеПомещения
| ИЛИ &Дата < НастройкиАдресныхСкладов.Склад.ДатаНачалаИспользованияСкладскихПомещений))";
Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"Склад, Помещение"));
Запрос.УстановитьПараметр("Дата",
?(ЗначениеЗаполнено(Дата),Дата,ТекущаяДатаСеанса()));
ВыборкаСкладПомещение = Запрос.Выполнить().Выбрать();
Пока ВыборкаСкладПомещение.Следующий() Цикл
ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияУпаковок();
ПараметрыПроверки.ОтборПроверяемыхСтрок.Вставить("Склад", ВыборкаСкладПомещение.Склад);
ПараметрыПроверки.ОтборПроверяемыхСтрок.Вставить("Помещение", ВыборкаСкладПомещение.Помещение);
НоменклатураСервер.ПроверитьЗаполнениеУпаковок(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ,ПараметрыПроверки);
КонецЦикла;
ПустоеНазначение = Справочники.Назначения.ПустаяСсылка();
СтруктураПоиска = Новый Структура("ИсходноеНазначение, НовоеНазначение", ПустоеНазначение, ПустоеНазначение);
НайденныеСтроки = Товары.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() > 0 Тогда
ШаблонСообщения = НСтр("ru='Не заполнено назначение в колонках ""Исходное назначение"" и ""Новое назначение"" в строке %НомерСтроки%.
|Необходимо заполнить одну из колонок (либо обе).'");
Для Каждого Строка Из НайденныеСтроки Цикл
ТекстСообщения = СтрЗаменить(ШаблонСообщения, "%НомерСтроки%", Строка.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , "Объект", Отказ)
КонецЦикла;
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
КорректировкаНазначенияТоваровЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Или ДополнительныеСвойства.Свойство("ПрограммноеСозданиеДокумента") Тогда
Возврат;
КонецЕсли;
ПроверитьПравоПроведенияДокумента(Отказ);
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
НоменклатураСервер.ОкруглитьКоличествоШтучныхТоваров(ЭтотОбъект, РежимЗаписи);
НоменклатураСервер.ОчиститьНеиспользуемыеСерии(ЭтотОбъект,
НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.КорректировкаНазначенияТоваров));
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
ЗаполнитьВидыЗапасов(Отказ);
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
Если Не ВидыЗапасовУказаныВручную Тогда
ВидыЗапасов.Очистить();
КонецЕсли;
КонецЕсли;
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, "ВидыЗапасов");
КорректировкаНазначенияТоваровЛокализация.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
Если ИспользуетсяАдресноеХранение() Тогда
ЭтотОбъект.ДополнительныеСвойства.Вставить("ИспользуетсяАдресноеХранение");
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект, РежимЗаписиДокумента.Проведение);
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
КорректировкаНазначенияТоваровЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
ИнициализироватьПараметрыЗаполненияВидовЗапасовДляПроведения(ЭтотОбъект, РежимЗаписиДокумента.ОтменаПроведения);
ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
КорректировкаНазначенияТоваровЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
Если ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.ВстречнаяКорректировка Тогда
ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв;
Назначение = Неопределено;
ВидыЗапасовУказаныВручную = Ложь;
Товары.Очистить();
ВидыЗапасов.Очистить();
КонецЕсли;
ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "ВидыЗапасов");
Автор = Пользователи.ТекущийПользователь();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ПроверитьПравоПроведенияДокумента(Отказ)
Если Не Документы.КорректировкаНазначенияТоваров.ДоступнаВозможностьИзменения(Ссылка) Тогда
СтрокаИсключения = НСтр("ru = 'Недостаточно прав доступа для записи документа с действием ""%1"".'");
СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаИсключения, ВидОперации);
ВызватьИсключение СтрокаИсключения;
КонецЕсли;
КонецПроцедуры
#Область ИнициализацияИЗаполнение
Процедура ЗаполнитьПоТаблицеТовары(ТаблицаТоваров)
Товары.Загрузить(ТаблицаТоваров);
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.КорректировкаНазначенияТоваров));
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ЭтотОбъект, ПараметрыУказанияСерий);
КонецПроцедуры
#КонецОбласти
#Область ПроверкаЗаполнения
Процедура ПроверитьЗаполнениеНовогоНазначения(Отказ)
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ВидыЗапасов
Функция ВременныеТаблицыДанныхДокумента(НаПустоеНазначение)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| &Дата КАК Дата,
| &Организация КАК Организация,
| ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка) КАК Подразделение,
| ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Менеджер,
| ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка) КАК Сделка,
| НЕОПРЕДЕЛЕНО КАК Партнер,
| НЕОПРЕДЕЛЕНО КАК Контрагент,
| ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка) КАК Соглашение,
| ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка) КАК Договор,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК Валюта,
| ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПустаяСсылка) КАК НалогообложениеНДС,
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.КорректировкаОбособленногоУчета) КАК ХозяйственнаяОперация,
| ЛОЖЬ КАК ЕстьСделкиВТабличнойЧасти,
| ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.Товар) КАК ТипЗапасов
|ПОМЕСТИТЬ ТаблицаДанныхДокумента
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваров.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваров.Номенклатура КАК Номенклатура,
| ТаблицаТоваров.Характеристика КАК Характеристика,
| ТаблицаТоваров.Серия КАК Серия,
| ТаблицаТоваров.Упаковка КАК Упаковка,
| ТаблицаТоваров.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.АналитикаУчетаНоменклатурыОприходование КАК АналитикаУчетаНоменклатурыОприходование,
| ТаблицаТоваров.Количество КАК Количество,
| ВЫБОР
| КОГДА НЕ &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| ИЛИ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) < &ДатаНачалаУчетаПрослеживаемыхИмпортныхТоваров
| ТОГДА 0
| ИНАЧЕ &ТекстПоляТаблицаТоваровКоличествоПоРНПТ_
| КОНЕЦ КАК КоличествоПоРНПТ,
| ТаблицаТоваров.Склад КАК Склад,
| ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка) КАК Сделка,
| ТаблицаТоваров.ИсходноеНазначение КАК Назначение,
| ТаблицаТоваров.НовоеНазначение КАК НовоеНазначение,
| ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка) КАК СтавкаНДС,
| 0 КАК СуммаСНДС,
| 0 КАК СуммаНДС,
| 0 КАК СуммаВознаграждения,
| 0 КАК СуммаНДСВознаграждения,
| ИСТИНА КАК ПодбиратьВидыЗапасов,
| &ТекстПоляТаблицаТоваровНомерГТД_ КАК НомерГТД
|ПОМЕСТИТЬ ТаблицаТоваровСУпаковками
|ИЗ
| &ТаблицаТоваров КАК ТаблицаТоваров
|ГДЕ
| ВЫБОР
| КОГДА &НаПустоеНазначение
| ТОГДА ТаблицаТоваров.НовоеНазначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИНАЧЕ ТаблицаТоваров.НовоеНазначение <> ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ
|;
|
|
|ВЫБРАТЬ
| ТаблицаТоваровСУпаковками.НомерСтроки КАК НомерСтроки,
| ТаблицаТоваровСУпаковками.Номенклатура КАК Номенклатура,
| ТаблицаТоваровСУпаковками.Характеристика КАК Характеристика,
| ТаблицаТоваровСУпаковками.Серия КАК Серия,
| ТаблицаТоваровСУпаковками.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоваровСУпаковками.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваровСУпаковками.АналитикаУчетаНоменклатурыОприходование КАК АналитикаУчетаНоменклатурыОприходование,
| ТаблицаТоваровСУпаковками.Количество КАК Количество,
| ТаблицаТоваровСУпаковками.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаТоваровСУпаковками.Склад КАК Склад,
| ТаблицаТоваровСУпаковками.Сделка КАК Сделка,
| ТаблицаТоваровСУпаковками.Назначение КАК Назначение,
| ТаблицаТоваровСУпаковками.НовоеНазначение КАК НовоеНазначение,
| ТаблицаТоваровСУпаковками.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваровСУпаковками.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваровСУпаковками.СуммаНДС КАК СуммаНДС,
| ТаблицаТоваровСУпаковками.СуммаВознаграждения КАК СуммаВознаграждения,
| ТаблицаТоваровСУпаковками.СуммаНДСВознаграждения КАК СуммаНДСВознаграждения,
| ТаблицаТоваровСУпаковками.ПодбиратьВидыЗапасов КАК ПодбиратьВидыЗапасов,
| ТаблицаТоваровСУпаковками.НомерГТД КАК НомерГТД
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
| ТаблицаТоваровСУпаковками КАК ТаблицаТоваровСУпаковками
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК ТаблицаУпаковок
| ПО ТаблицаТоваровСУпаковками.Упаковка = ТаблицаУпаковок.Ссылка
| И (ТаблицаУпаковок.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто))
|ГДЕ
| ТаблицаУпаковок.Ссылка ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| МИНИМУМ(Подзапрос.НомерСтроки),
| Подзапрос.Номенклатура,
| Подзапрос.Характеристика,
| Подзапрос.Серия,
| Подзапрос.СтатусУказанияСерий,
| Подзапрос.АналитикаУчетаНоменклатуры,
| Подзапрос.АналитикаУчетаНоменклатурыОприходование,
| МИНИМУМ(Подзапрос.Количество),
| МИНИМУМ(Подзапрос.КоличествоПоРНПТ),
| Подзапрос.Склад,
| Подзапрос.Сделка,
| Подзапрос.Назначение,
| Подзапрос.НовоеНазначение,
| Подзапрос.СтавкаНДС,
| Подзапрос.СуммаСНДС,
| Подзапрос.СуммаНДС,
| Подзапрос.СуммаВознаграждения,
| Подзапрос.СуммаНДСВознаграждения,
| Подзапрос.ПодбиратьВидыЗапасов,
| Подзапрос.НомерГТД
|ИЗ
| (ВЫБРАТЬ
| МИНИМУМ(ТаблицаТоваровСУпаковками.НомерСтроки) КАК НомерСтроки,
| ТаблицаТоваровСУпаковками.Номенклатура КАК Номенклатура,
| ТаблицаТоваровСУпаковками.Характеристика КАК Характеристика,
| ТаблицаТоваровСУпаковками.Упаковка КАК Упаковка,
| ТаблицаТоваровСУпаковками.Серия КАК Серия,
| ТаблицаТоваровСУпаковками.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТаблицаТоваровСУпаковками.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваровСУпаковками.АналитикаУчетаНоменклатурыОприходование КАК АналитикаУчетаНоменклатурыОприходование,
| СУММА(ТаблицаТоваровСУпаковками.Количество) КАК Количество,
| СУММА(ТаблицаТоваровСУпаковками.КоличествоПоРНПТ) КАК КоличествоПоРНПТ,
| ТаблицаТоваровСУпаковками.Склад КАК Склад,
| ТаблицаТоваровСУпаковками.Сделка КАК Сделка,
| ТаблицаТоваровСУпаковками.Назначение КАК Назначение,
| ТаблицаТоваровСУпаковками.НовоеНазначение КАК НовоеНазначение,
| ТаблицаТоваровСУпаковками.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТоваровСУпаковками.СуммаСНДС КАК СуммаСНДС,
| ТаблицаТоваровСУпаковками.СуммаНДС КАК СуммаНДС,
| ТаблицаТоваровСУпаковками.СуммаВознаграждения КАК СуммаВознаграждения,
| ТаблицаТоваровСУпаковками.СуммаНДСВознаграждения КАК СуммаНДСВознаграждения,
| ТаблицаТоваровСУпаковками.ПодбиратьВидыЗапасов КАК ПодбиратьВидыЗапасов,
| ТаблицаТоваровСУпаковками.НомерГТД КАК НомерГТД
| ИЗ
| ТаблицаТоваровСУпаковками КАК ТаблицаТоваровСУпаковками
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК ТаблицаУпаковок
| ПО ТаблицаТоваровСУпаковками.Упаковка = ТаблицаУпаковок.Ссылка
| И (ТаблицаУпаковок.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто))
| СГРУППИРОВАТЬ ПО
| ТаблицаТоваровСУпаковками.Номенклатура,
| ТаблицаТоваровСУпаковками.Характеристика,
| ТаблицаТоваровСУпаковками.Упаковка,
| ТаблицаТоваровСУпаковками.Серия,
| ТаблицаТоваровСУпаковками.СтатусУказанияСерий,
| ТаблицаТоваровСУпаковками.АналитикаУчетаНоменклатуры,
| ТаблицаТоваровСУпаковками.АналитикаУчетаНоменклатурыОприходование,
| ТаблицаТоваровСУпаковками.Склад,
| ТаблицаТоваровСУпаковками.Сделка,
| ТаблицаТоваровСУпаковками.Назначение,
| ТаблицаТоваровСУпаковками.НовоеНазначение,
| ТаблицаТоваровСУпаковками.СтавкаНДС,
| ТаблицаТоваровСУпаковками.СуммаСНДС,
| ТаблицаТоваровСУпаковками.СуммаНДС,
| ТаблицаТоваровСУпаковками.СуммаВознаграждения,
| ТаблицаТоваровСУпаковками.СуммаНДСВознаграждения,
| ТаблицаТоваровСУпаковками.ПодбиратьВидыЗапасов,
| ТаблицаТоваровСУпаковками.НомерГТД) КАК Подзапрос
|СГРУППИРОВАТЬ ПО
| Подзапрос.Номенклатура,
| Подзапрос.Характеристика,
| Подзапрос.Серия,
| Подзапрос.СтатусУказанияСерий,
| Подзапрос.АналитикаУчетаНоменклатуры,
| Подзапрос.АналитикаУчетаНоменклатурыОприходование,
| Подзапрос.Склад,
| Подзапрос.Сделка,
| Подзапрос.Назначение,
| Подзапрос.НовоеНазначение,
| Подзапрос.СтавкаНДС,
| Подзапрос.СуммаСНДС,
| Подзапрос.СуммаНДС,
| Подзапрос.СуммаВознаграждения,
| Подзапрос.СуммаНДСВознаграждения,
| Подзапрос.ПодбиратьВидыЗапасов,
| Подзапрос.НомерГТД
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование КАК АналитикаУчетаНоменклатурыОприходование,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ВЫБОР
| КОГДА НЕ &ИспользоватьУчетПрослеживаемыхИмпортныхТоваров
| ИЛИ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) < &ДатаНачалаУчетаПрослеживаемыхИмпортныхТоваров
| ТОГДА 0
| ИНАЧЕ ТаблицаВидыЗапасов.КоличествоПоРНПТ
| КОНЕЦ КАК КоличествоПоРНПТ,
| ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) КАК СкладОтгрузки,
| ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка) КАК Сделка,
| &ВидыЗапасовУказаныВручную КАК ВидыЗапасовУказаныВручную
|ПОМЕСТИТЬ ВтВидыЗапасов
|ИЗ
| &ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|;
|
|
|ВЫБРАТЬ
| ТаблицаВидыЗапасов.НомерСтроки КАК НомерСтроки,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| Аналитика.Номенклатура КАК Номенклатура,
| Аналитика.Характеристика КАК Характеристика,
| Аналитика.Серия КАК Серия,
| ТаблицаВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
| ТаблицаВидыЗапасов.НомерГТД КАК НомерГТД,
| ТаблицаВидыЗапасов.Количество КАК Количество,
| ТаблицаВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ТаблицаВидыЗапасов.СкладОтгрузки КАК СкладОтгрузки,
| Аналитика.МестоХранения КАК Склад,
| ТаблицаВидыЗапасов.Сделка КАК Сделка,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование КАК АналитикаУчетаНоменклатурыОприходование,
| ТаблицаВидыЗапасов.ВидыЗапасовУказаныВручную КАК ВидыЗапасовУказаныВручную
|ПОМЕСТИТЬ ТаблицаВидыЗапасов
|ИЗ
| ВтВидыЗапасов КАК ТаблицаВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК Аналитика
| ПО ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЗапасов КАК СпрВидЗапасов
| ПО (СпрВидЗапасов.Ссылка = ТаблицаВидыЗапасов.ВидЗапасов)
|ГДЕ
| НЕ (СпрВидЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
| И СпрВидЗапасов.ВладелецТовара = НЕОПРЕДЕЛЕНО)
|
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаНоменклатуры";
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ТаблицаТоваров = ?(ДополнительныеСвойства.Свойство("ТаблицыЗаполненияВидовЗапасовПриОбмене")
И ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене <> Неопределено
И ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене.Свойство("Товары"),
ДополнительныеСвойства.ТаблицыЗаполненияВидовЗапасовПриОбмене.Товары,
Товары);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("ВидыЗапасовУказаныВручную", ВидыЗапасовУказаныВручную);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ТаблицаВидыЗапасов", ВидыЗапасов.Выгрузить(Новый Структура("НовоеНазначениеПустое", НаПустоеНазначение)));
Запрос.УстановитьПараметр("ТаблицаТоваров", ТаблицаТоваров);
Запрос.УстановитьПараметр("НаПустоеНазначение", НаПустоеНазначение);
УчетПрослеживаемыхТоваровЛокализация.УстановитьПараметрыИспользованияУчетаПрослеживаемыхТоваров(Запрос);
ЗапасыСервер.ДополнитьВременныеТаблицыОбязательнымиКолонками(Запрос);
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляТаблицыЗначенийВТекстеЗапроса(
ТаблицаТоваров,
Запрос.Текст,
"&ТекстПоляТаблицаТоваровКоличествоПоРНПТ_",
"ТаблицаТоваров",
"КоличествоПоРНПТ",
"ТаблицаТоваров.КоличествоПоРНПТ",
"0");
ОбщегоНазначенияУТ.ЗаменитьОтсутствующиеПоляТаблицыЗначенийВТекстеЗапроса(
ТаблицаТоваров,
Запрос.Текст,
"&ТекстПоляТаблицаТоваровНомерГТД_",
"ТаблицаТоваров",
"НомерГТД",
"ТаблицаТоваров.НомерГТД",
"ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)");
Запрос.Выполнить();
Возврат МенеджерВременныхТаблиц;
КонецФункции
Процедура СформироватьВременнуюТаблицуТоваровИАналитики(МенеджерВременныхТаблиц) Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.Номенклатура,
| ТаблицаТоваров.Характеристика,
| ВЫБОР
| КОГДА ТаблицаТоваров.СтатусУказанияСерий = 14
| ТОГДА ТаблицаТоваров.Серия
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| КОНЕЦ КАК Серия,
| ТаблицаТоваров.Склад,
|
| ТаблицаДанныхДокумента.Подразделение,
| ТаблицаДанныхДокумента.Менеджер,
| ТаблицаДанныхДокумента.Сделка,
| ТаблицаТоваров.Назначение КАК Назначение,
|
| ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) КАК Партнер,
| ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка) КАК Соглашение,
| ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПустаяСсылка) КАК НалогообложениеНДС,
|
| ТаблицаТоваров.Количество КАК Количество
|
|ПОМЕСТИТЬ ТаблицаТоваровИАналитики
|ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ТаблицаДанныхДокумента КАК ТаблицаДанныхДокумента
| ПО
| ИСТИНА
|ГДЕ
| ТаблицаТоваров.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
|;
|");
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Выполнить();
КонецПроцедуры
Процедура ЗаполнитьВидыЗапасов(Отказ)
УстановитьПривилегированныйРежим(Истина);
ОтборСтрок = Новый Структура("НовоеНазначение", Справочники.Назначения.ПустаяСсылка());
СтрокиСПустымНазначением = Товары.НайтиСтроки(ОтборСтрок);
ЕстьПоПустомуНазначению = СтрокиСПустымНазначением.Количество() > 0;
ЕстьПоЗаполненномуНазначению = СтрокиСПустымНазначением.Количество() <> Товары.Количество();
ПерезаполнитьВидыЗапасов = ЗапасыСервер.ПроверитьНеобходимостьПерезаполненияВидовЗапасовДокумента(ЭтотОбъект);
ВидыЗапасовПерезаполнены = Ложь;
Если ЕстьПоПустомуНазначению Тогда
МенеджерВременныхТаблиц = ВременныеТаблицыДанныхДокумента(Истина);
Если Не Проведен
Или ПерезаполнитьВидыЗапасов
Или ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
Или ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц) Тогда
ВидыЗапасовПерезаполнены = Истина;
Если ЕстьПоЗаполненномуНазначению Тогда
ВидыЗапасовПоЗаполненномуНазначению = ВидыЗапасов.Выгрузить(Новый Структура("НовоеНазначениеПустое", Ложь));
ВидыЗапасов.Очистить();
КонецЕсли;
ПараметрыЗаполнения = ПараметрыЗаполненияВидовЗапасов(Истина);
ЗапасыСервер.ЗаполнитьВидыЗапасовПоТоварамОрганизаций(ЭтотОбъект,
МенеджерВременныхТаблиц,
Отказ,
ПараметрыЗаполнения);
Для Каждого СтрТабл Из ВидыЗапасов Цикл
СтрТабл.НовоеНазначениеПустое = Истина;
КонецЦикла;
Если ЕстьПоЗаполненномуНазначению Тогда
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ВидыЗапасов, ВидыЗапасовПоЗаполненномуНазначению);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЕстьПоЗаполненномуНазначению Тогда
МенеджерВременныхТаблиц = ВременныеТаблицыДанныхДокумента(Ложь);
Если Не Проведен
Или ПерезаполнитьВидыЗапасов
Или ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
Или ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц) Тогда
ВидыЗапасовПерезаполнены = Истина;
Если ЕстьПоПустомуНазначению Тогда
ВидыЗапасовПустомуНазначению = ВидыЗапасов.Выгрузить(Новый Структура("НовоеНазначениеПустое", Истина));
ВидыЗапасов.Очистить();
КонецЕсли;
ПараметрыЗаполнения = ПараметрыЗаполненияВидовЗапасов(Ложь);
ЗапасыСервер.ЗаполнитьВидыЗапасовПоТоварамОрганизаций(ЭтотОбъект,
МенеджерВременныхТаблиц,
Отказ,
ПараметрыЗаполнения);
Если ЕстьПоПустомуНазначению Тогда
ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(ВидыЗапасов, ВидыЗапасовПустомуНазначению);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ВидыЗапасовПерезаполнены Тогда
ИменаКолонокГруппировки = "АналитикаУчетаНоменклатуры, АналитикаУчетаНоменклатурыОприходование,
|ВидЗапасовОприходование, ВидЗапасов, НовоеНазначениеПустое, НомерГТД";
ИменаКолонокСуммирования = "Количество, КоличествоПоРНПТ";
ВидыЗапасов.Свернуть(ИменаКолонокГруппировки, ИменаКолонокСуммирования);
ЗаполнитьАналитикуОприходованиеВидовЗапасов();
КонецЕсли;
КонецПроцедуры
Функция ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц)
ИменаРеквизитов = "Организация";
Возврат ЗапасыСервер.ПроверитьИзменениеРеквизитовДокумента(МенеджерВременныхТаблиц, Ссылка, ИменаРеквизитов);
КонецФункции
Функция ПроверитьИзменениеТоваров(МенеджерВременныхТаблиц)
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
|ИЗ (
| ВЫБРАТЬ
| ТаблицаТоваров.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.АналитикаУчетаНоменклатурыОприходование КАК АналитикаУчетаНоменклатурыОприходование,
| ТаблицаТоваров.Количество КАК Количество
| ИЗ
| ТаблицаТоваров КАК ТаблицаТоваров
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТаблицаВидыЗапасов.АналитикаУчетаНоменклатурыОприходование КАК АналитикаУчетаНоменклатурыОприходование,
| -ТаблицаВидыЗапасов.Количество КАК Количество
| ИЗ
| ТаблицаВидыЗапасов КАК ТаблицаВидыЗапасов
|
| ) КАК ТаблицаТоваров
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТоваров.АналитикаУчетаНоменклатуры,
| ТаблицаТоваров.АналитикаУчетаНоменклатурыОприходование
|
|ИМЕЮЩИЕ
| СУММА(ТаблицаТоваров.Количество) <> 0
|");
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
РезультатЗапрос = Запрос.Выполнить();
Возврат (Не РезультатЗапрос.Пустой());
КонецФункции
Процедура ЗаполнитьАналитикуОприходованиеВидовЗапасов()
СтруктураПоиска = Новый Структура("АналитикаУчетаНоменклатуры");
ТаблицаВидыЗапасов = ВидыЗапасов.Выгрузить();
ТаблицаВидыЗапасов.Индексы.Добавить("АналитикаУчетаНоменклатуры");
Для Каждого СтрокаТоваров Из Товары Цикл
КоличествоТоваров = СтрокаТоваров.Количество;
СтруктураПоиска.АналитикаУчетаНоменклатуры = СтрокаТоваров.АналитикаУчетаНоменклатуры;
Для Каждого СтрокаЗапасов Из ТаблицаВидыЗапасов.НайтиСтроки(СтруктураПоиска) Цикл
Если СтрокаЗапасов.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Количество = Мин(КоличествоТоваров, СтрокаЗапасов.Количество);
НоваяСтрока = ТаблицаВидыЗапасов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаЗапасов);
ВидЗапасовСтроки = СтрокаЗапасов.ВидЗапасов;
ВидЗапасовРеквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидЗапасовСтроки, "РеализацияЗапасовДругойОрганизации, Организация");
НоваяСтрока.АналитикаУчетаНоменклатурыОприходование = СтрокаТоваров.АналитикаУчетаНоменклатурыОприходование;
НоваяСтрока.ВидЗапасовОприходование = ?(ВидЗапасовРеквизиты.РеализацияЗапасовДругойОрганизации,
Справочники.ВидыЗапасов.ВидЗапасовДокумента(
ВидЗапасовРеквизиты.Организация,
,
СтрокаЗапасов.ВидЗапасов),
СтрокаЗапасов.ВидЗапасов);
НоваяСтрока.Количество = Количество;
НоваяСтрока.КоличествоПоРНПТ = Количество * СтрокаЗапасов.КоличествоПоРНПТ / СтрокаЗапасов.Количество;
СтрокаЗапасов.Количество = СтрокаЗапасов.Количество - НоваяСтрока.Количество;
СтрокаЗапасов.КоличествоПоРНПТ = СтрокаЗапасов.КоличествоПоРНПТ - НоваяСтрока.КоличествоПоРНПТ;
КоличествоТоваров = КоличествоТоваров - НоваяСтрока.Количество;
Если КоличествоТоваров = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ПараметрыПоиска = Новый Структура("Количество", 0);
МассивУдаляемыхСтрок = ТаблицаВидыЗапасов.НайтиСтроки(ПараметрыПоиска);
Для Каждого СтрокаТаблицы Из МассивУдаляемыхСтрок Цикл
ТаблицаВидыЗапасов.Удалить(СтрокаТаблицы);
КонецЦикла;
ВидыЗапасов.Загрузить(ТаблицаВидыЗапасов);
КонецПроцедуры
Функция ПараметрыЗаполненияВидовЗапасов(НаПустоеНазначение)
ПараметрыЗаполнения = ЗапасыСервер.ПараметрыЗаполненияВидовЗапасов();
ПараметрыЗаполнения.ДокументДелаетИПриходИРасход = Истина;
Возврат ПараметрыЗаполнения;
КонецФункции
Процедура ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров(ТаблицыДокумента = Неопределено)
Если ТаблицыДокумента = Неопределено Тогда
ТаблицыДокумента = Документы.КорректировкаНазначенияТоваров.КоллекцияТабличныхЧастейТоваров();
ЗаполнитьЗначенияСвойств(ТаблицыДокумента, ЭтотОбъект);
КонецЕсли;
ТаблицаТовары = ТаблицыДокумента.Товары;
МестаУчета = РегистрыСведений.АналитикаУчетаНоменклатуры.МестаУчета(
Перечисления.ХозяйственныеОперации.КорректировкаОбособленногоУчета,
Неопределено,
Неопределено,
Неопределено);
ИменаПолей = РегистрыСведений.АналитикаУчетаНоменклатуры.ИменаПолейКоллекцииПоУмолчанию();
ИменаПолей.Произвольный = "Склад";
ИменаПолей.Назначение = "ИсходноеНазначение";
РегистрыСведений.АналитикаУчетаНоменклатуры.ЗаполнитьВКоллекции(ТаблицаТовары, МестаУчета, ИменаПолей);
ИменаПолей.Назначение = "НовоеНазначение";
ИменаПолей.АналитикаУчетаНоменклатуры = "АналитикаУчетаНоменклатурыОприходование";
РегистрыСведений.АналитикаУчетаНоменклатуры.ЗаполнитьВКоллекции(ТаблицаТовары, МестаУчета, ИменаПолей);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Функция ИспользуетсяАдресноеХранение()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЧТовары.Склад КАК Склад,
| ТЧТовары.Помещение КАК Помещение
|ПОМЕСТИТЬ ТЧТовары
|ИЗ
| &ТЧТовары КАК ТЧТовары
|
|ИНДЕКСИРОВАТЬ ПО
| Склад,
| Помещение
|;
|
|
|ВЫБРАТЬ
| 1 КАК Поле1
|ИЗ
| РегистрСведений.НастройкиАдресныхСкладов КАК НастройкиАдресныхСкладов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЧТовары КАК ТЧТовары
| ПО НастройкиАдресныхСкладов.Склад = ТЧТовары.Склад
| И НастройкиАдресныхСкладов.Помещение = ТЧТовары.Помещение
|ГДЕ
| НастройкиАдресныхСкладов.ИспользоватьАдресноеХранение
| И НастройкиАдресныхСкладов.ДатаНачалаАдресногоХраненияОстатков <= &Дата
| И (НЕ НастройкиАдресныхСкладов.Помещение = ЗНАЧЕНИЕ(Справочник.СкладскиеПомещения.ПустаяСсылка)
| ИЛИ (НЕ НастройкиАдресныхСкладов.Склад.ИспользоватьСкладскиеПомещения
| ИЛИ &Дата < НастройкиАдресныхСкладов.Склад.ДатаНачалаИспользованияСкладскихПомещений))";
Запрос.УстановитьПараметр("ТЧТовары", Товары.Выгрузить(,"Склад, Помещение"));
Запрос.УстановитьПараметр("Дата",
?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДатаСеанса()));
Возврат НЕ Запрос.Выполнить().Пустой();
КонецФункции
Процедура ПроверитьТипНазначений(Отказ)
Если ЗначениеЗаполнено(Назначение)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Назначение, "ТипНазначения") = Перечисления.ТипыНазначений.ПоставкаПодПринципала Тогда
ТекстСообщения = НСтр("ru = 'В корректировке назначения нельзя использовать назначение данного типа.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Назначение", "Объект", Отказ);
КонецЕсли;
ЭтоСнятиеРезерва = ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезерв;
ЭтоСнятиеРезерваПоМногимНазначениям = ВидОперации = Перечисления.ВидыОперацийКорректировкиНазначения.СнятьРезервПоМногимНазначениям;
ШаблонСообщенияСнятияРезерваПоМногимНазначениям = НСтр("ru='В колонке ""Назначение"" в строке %1 нельзя использовать назначение данного типа.'");
ШаблонСообщенияСнятияРезерва = НСтр("ru = 'В колонке ""Новое назначение"" в строке %1 нельзя использовать назначение данного типа.'");
ШаблонСообщенияРезрвирования = НСтр("ru = 'В колонке ""Исходное назначение"" в строке %1 нельзя использовать назначение данного типа.'");
Если ЭтоСнятиеРезерваПоМногимНазначениям Тогда
ШаблонСообщения = ШаблонСообщенияСнятияРезерваПоМногимНазначениям;
ИмяПоляНазначения = "ИсходноеНазначение";
ИначеЕсли ЭтоСнятиеРезерва Тогда
ШаблонСообщения = ШаблонСообщенияСнятияРезерва;
ИмяПоляНазначения = "НовоеНазначение";
Иначе
ШаблонСообщения = ШаблонСообщенияРезрвирования;
ИмяПоляНазначения = "ИсходноеНазначение";
КонецЕсли;
КлючДанных = ОбщегоНазначенияУТ.КлючДанныхДляСообщенияПользователю(ЭтотОбъект);
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Товары.ИмяПоляНазначения КАК ПолеНазначения,
| Товары.НомерСтроки КАК НомерСтроки
|ПОМЕСТИТЬ ТаблицаТовары
|ИЗ
| &Товары КАК Товары
|
|ИНДЕКСИРОВАТЬ ПО
| Товары.ИмяПоляНазначения
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.НомерСтроки КАК НомерСтроки
|ИЗ
| ТаблицаТовары
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Назначения КАК ДанныеНазначения
| ПО ТаблицаТовары.ПолеНазначения = ДанныеНазначения.Ссылка
|ГДЕ
| ДанныеНазначения.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.ПоставкаПодПринципала)
|");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ИмяПоляНазначения", ИмяПоляНазначения);
Запрос.УстановитьПараметр("Товары", Товары.Выгрузить(,"НомерСтроки, "+ИмяПоляНазначения));
ДанныеТоваров = Запрос.Выполнить().Выбрать();
Пока ДанныеТоваров.Следующий() Цикл
ТекстСообщения = СтрШаблон(ШаблонСообщения, ДанныеТоваров.НомерСтроки);
Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ДанныеТоваров.НомерСтроки, ИмяПоляНазначения);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, КлючДанных, Поле, "Объект", Отказ);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли