#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция ПредставлениеОбъектаНаОсновномЯзыке() Экспорт
КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
ПредставлениеОбъекта = НСтр(
"ru = 'Заказ материалов в производство'",
КодОсновногоЯзыка);
Возврат ПредставлениеОбъекта;
КонецФункции
Процедура ЗадатьОписаниеЗаполняемыхРеквизитовПоСтатистике(ОписаниеРеквизитов) Экспорт
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов,
"Организация, Склад");
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Организация, Склад";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(
ОписаниеРеквизитов, "Ответственный", Параметры);
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "УправлениеПроизводством2_2";
Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "УправлениеПроизводством2_2";
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов,
"Подразделение, ЦеховаяКладовая", Параметры);
КонецПроцедуры
#Область Проведение
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("Обеспечение");
МеханизмыДокумента.Добавить("Производство");
МеханизмыДокумента.Добавить("РеестрДокументов");
МеханизмыДокумента.Добавить("АдресныйСклад");
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.ЗаказМатериаловВПроизводство") Тогда
ДокументСсылка = Документ.Ссылка;
Иначе
ДокументСсылка = Документ;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстЗапросаТаблицаЗаказыМатериаловВПроизводство(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаЗаказыМатериаловСУчетомКорректировок(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры);
ЗапланироватьПоступлениеТоваров(Запрос, ТекстыЗапроса, Регистры);
ОтразитьРезерв(Запрос, ТекстыЗапроса, Регистры);
ЗапланироватьОтгрузкуТоваров(Запрос, ТекстыЗапроса, Регистры);
Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
КонецФункции
#КонецОбласти
Функция ДопустимыеСтатусыВводаНаОсновании(ИмяДокумента) Экспорт
ДопустимыеСтатусы = Новый Массив;
ДопустимыеСтатусы.Добавить(Перечисления.СтатусыЗаказовМатериаловВПроизводство.КВыполнению);
ДопустимыеСтатусы.Добавить(Перечисления.СтатусыЗаказовМатериаловВПроизводство.Закрыт);
Возврат ДопустимыеСтатусы;
КонецФункции
Функция ДоступныеОстаткиПараметрыВстраивания(ДокументОбъект = Неопределено) Экспорт
ПараметрыВстраивания = ОбеспечениеВДокументахСервер.ДоступныеОстаткиПараметрыВстраивания();
ПараметрыВстраивания.ОчищаемыеРеквизиты = "КодСтроки";
ПараметрыВстраивания.ИмяТаблицыФормы = "Товары";
ЭлементыФормы = ПараметрыВстраивания.УсловноеОформление.ЭлементыФормы;
ЭлементыФормы.ВариантОбеспечения = "ТоварыВариантОбеспечения";
ЭлементыФормы.Доступно = "ТоварыДоступно";
ЭлементыФормы.Серия = "ТоварыСерия";
ЭлементыФормы.Обособленно = "ТоварыОбособленно";
ПутиКДанным = ПараметрыВстраивания.УсловноеОформление.ПутиКДанным;
ПутиКДанным.ПерераспределятьЗапасы = "Объект.Товары.ПерераспределятьЗапасы";
ПутиКДанным.ЗапретРедактирования = "Объект.Товары.Отменено";
ПутиКДанным.ТипНоменклатуры = "Объект.Товары.ТипНоменклатуры";
Связи = ПараметрыВстраивания.СвязиПараметровВыбораВариантаОбеспечения;
Связи.Доступно = "Элементы.Товары.ТекущиеДанные.Доступно";
Связи.КоличествоУпаковок = "Элементы.Товары.ТекущиеДанные.КоличествоУпаковок";
Связи.Количество = "Элементы.Товары.ТекущиеДанные.Количество";
Связи.ОтгружатьЕслиДоступно = "Элементы.Товары.ТекущиеДанные.ОтгружатьЕслиДоступно";
Связи.Обособленно = "Элементы.Товары.ТекущиеДанные.Обособленно";
Связи.ТипНоменклатуры = "Элементы.Товары.ТекущиеДанные.ТипНоменклатуры";
Связи.Упаковка = "Элементы.Товары.ТекущиеДанные.Упаковка";
Связи.Номенклатура = "Элементы.Товары.ТекущиеДанные.Номенклатура";
Связи.ВариантОбеспечения = "Элементы.Товары.ТекущиеДанные.ВариантОбеспечения";
Связи.Склад = "Объект.Склад";
Связи.НесколькоСкладов = Неопределено;
ПараметрыВстраивания.ИмяРегистраОформленияОтгрузки = "ЗаказыМатериаловВПроизводство";
ПараметрыВстраивания.ИмяОбъекта = "Документ.ЗаказМатериаловВПроизводство";
ПараметрыВстраивания.ИмяТаблицы = "Документ.ЗаказМатериаловВПроизводство.Товары";
ПараметрыВстраивания.ОписаниеПолученияДанныхДокумента =
"ВЫБРАТЬ
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| Реквизиты.Подразделение КАК Подразделение,
| Реквизиты.Склад КАК Склад,
| ВЫБОР КОГДА ТабЧасть.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ Реквизиты.ОбосабливатьПоНазначениюЗаказа
| И ТабЧасть.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное) ТОГДА
| Реквизиты.Назначение
| ИНАЧЕ
| ТабЧасть.Назначение
| КОНЕЦ КАК Назначение,
| Реквизиты.Ссылка КАК ЗаказНаОтгрузку,
| ТабЧасть.ВариантОбеспечения КАК ВариантОбеспечения,
| ТабЧасть.Обособленно КАК Обособленно,
| ТабЧасть.Количество КАК Количество,
| ТабЧасть.КоличествоУпаковок КАК КоличествоУпаковок,
| ТабЧасть.Упаковка КАК Упаковка,
| ИСТИНА КАК ГотовКОбеспечению,
| Реквизиты.Статус В(
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.КВыполнению),
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.Закрыт)
| ) КАК ГотовКОтгрузке,
| ТабЧасть.НачалоОтгрузки КАК ЖелаемаяДатаОтгрузки,
| ТабЧасть.Серия КАК Серия,
| ТабЧасть.КодСтроки КАК КодСтроки,
| ТабЧасть.Отменено КАК Отменено,
| ТабЧасть.НомерСтроки КАК НомерСтроки,
| Реквизиты.Ссылка КАК Регистратор,
| Реквизиты.Дата КАК ДатаДокумента,
| Реквизиты.Склад КАК ГруппаСкладов,
| Реквизиты.Приоритет КАК Приоритет,
| ВЫБОР КОГДА Реквизиты.НеОтгружатьЧастями ТОГДА
| Реквизиты.ДатаОтгрузки
| ИНАЧЕ
| НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК ДатаОтгрузкиВсехСтрокОднойДатой
|ПОМЕСТИТЬ ВременнаяТаблицаДанныхДокумента
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК ТабЧасть
|
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказМатериаловВПроизводство КАК Реквизиты
| ПО ИСТИНА";
Товары = Новый Структура();
Товары.Вставить("НомерСтроки", Новый ОписаниеТипов("Число"));
Товары.Вставить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Товары.Вставить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
Товары.Вставить("Назначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
Товары.Вставить("ВариантОбеспечения", Новый ОписаниеТипов("ПеречислениеСсылка.ВариантыОбеспечения"));
Товары.Вставить("Обособленно", Новый ОписаниеТипов("Булево"));
Товары.Вставить("Количество", Новый ОписаниеТипов("Число"));
Товары.Вставить("КоличествоУпаковок", Новый ОписаниеТипов("Число"));
Товары.Вставить("Упаковка", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
Товары.Вставить("НачалоОтгрузки", Новый ОписаниеТипов("Дата"));
Товары.Вставить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
Товары.Вставить("Отменено", Новый ОписаниеТипов("Булево"));
Товары.Вставить("КодСтроки", Новый ОписаниеТипов("Число"));
Объект = Новый Структура();
Объект.Вставить("Подразделение", Новый ОписаниеТипов("СправочникСсылка.СтруктураПредприятия"));
Объект.Вставить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
Объект.Вставить("Назначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
Объект.Вставить("ОбосабливатьПоНазначениюЗаказа", Новый ОписаниеТипов("Булево"));
Объект.Вставить("Ссылка", Новый ОписаниеТипов("ДокументСсылка.ЗаказМатериаловВПроизводство"));
Объект.Вставить("Статус", Новый ОписаниеТипов("ПеречислениеСсылка.СтатусыЗаказовМатериаловВПроизводство"));
Объект.Вставить("Дата", Новый ОписаниеТипов("Дата"));
Объект.Вставить("Приоритет", Новый ОписаниеТипов("СправочникСсылка.Приоритеты"));
Объект.Вставить("НеОтгружатьЧастями", Новый ОписаниеТипов("Булево"));
Объект.Вставить("ДатаОтгрузки", Новый ОписаниеТипов("Дата"));
Объект.Вставить("Товары", Товары);
ПараметрыВстраивания.ШаблонСериализацииДанныхФормы.Вставить("Объект", Объект);
ПараметрыВстраивания.ВыражениеДляВопросаПриВыполненииДействияВСпискеЗаказов =
"ВЫБОР КОГДА НЕ Таблица.УправлениеПроизводством2_2 И Таблица.НеОтгружатьЧастями ТОГДА
| Таблица.ДатаОтгрузки
| ИНАЧЕ
| НЕОПРЕДЕЛЕНО
| КОНЕЦ";
Возврат ПараметрыВстраивания;
КонецФункции
#Область Серии
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
ИменаРеквизитов = "Склад, Дата";
Возврат ИменаРеквизитов;
КонецФункции
Функция ПараметрыУказанияСерий(Объект) Экспорт
ПараметрыУказанияСерий = НоменклатураКлиентСервер.ПараметрыУказанияСерий();
ПараметрыУказанияСерий.ПолноеИмяОбъекта = "Документ.ЗаказМатериаловВПроизводство";
ПараметрыУказанияСерий.ИмяТЧСерии = "Товары";
ПараметрыСерийСклада = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Ложь);
ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры = ПараметрыСерийСклада.ИспользоватьСерииНоменклатуры;
ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям = ПараметрыСерийСклада.УчитыватьСебестоимостьПоСериям;
ПараметрыУказанияСерий.СкладскиеОперации.Добавить(Перечисления.СкладскиеОперации.ПередачаВПроизводствоОтгрузка);
ПараметрыУказанияСерий.ЭтоЗаказ = Истина;
ПараметрыУказанияСерий.ПланированиеОтгрузки = Истина;
ПараметрыУказанияСерий.РегистрироватьСерии = Ложь;
ПараметрыУказанияСерий.Дата = Объект.Дата;
Возврат ПараметрыУказанияСерий;
КонецФункции
Функция РаспоряжениеНаВыполнениеСкладскойОперации(ЗначенияПолейДляОпределенияРаспоряжения) Экспорт
Возврат ЗначенияПолейДляОпределенияРаспоряжения.Ссылка;
КонецФункции
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Серия,
| Товары.Отменено,
| Товары.ВариантОбеспечения,
| Товары.Количество,
| Товары.СтатусУказанияСерий,
| Товары.НомерСтроки
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
| ВЫБОР
| КОГДА Товары.Отменено
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий ЕСТЬ NULL
| ИЛИ НЕ Товары.ВариантОбеспечения В (
| ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.СоСклада),
| ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить))
| ТОГДА 0
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям
| ТОГДА ВЫБОР
| КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 14
| КОГДА Товары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.СоСклада)
| ТОГДА 15
| ИНАЧЕ 13
| КОНЕЦ
| КОГДА ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки
| ТОГДА ВЫБОР
| КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
| ТОГДА 10
| КОГДА Товары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.СоСклада)
| ТОГДА 11
| ИНАЧЕ 9
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ КАК СтатусУказанияСерий
|ПОМЕСТИТЬ Статусы
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
| ПО (ПолитикиУчетаСерий.Склад = &Склад)
| И ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры = ПолитикиУчетаСерий.Ссылка
|;
|
|
|ВЫБРАТЬ
| Статусы.НомерСтроки КАК НомерСтроки,
| Статусы.СтатусУказанияСерий КАК СтатусУказанияСерий
|ИЗ
| Статусы КАК Статусы
|ГДЕ
| Статусы.СтатусУказанияСерий <> Статусы.СтарыйСтатусУказанияСерий
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область Прочее
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Документы.ЗаказНаПеремещение.ДобавитьКомандуСоздатьОбеспечивающийЗаказ(КомандыСозданияНаОсновании);
Документы.ЗаказПоставщику.ДобавитьКомандуСоздатьОбеспечивающийЗаказ(КомандыСозданияНаОсновании);
Документы.КорректировкаНазначенияТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
Документы.РасходныйОрдерНаТовары.ДобавитьКомандуСоздатьНаОснованииРасходныйОрдерНаТовары(КомандыСозданияНаОсновании);
Обработки.ФормированиеЗаказовНаПередачуВПроизводствоНаОсновании.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КомандаВПроизводство = Документы.ПередачаМатериаловВПроизводство.ДобавитьКомандуСоздатьНаОснованииПередачаВПроизводство(КомандыСозданияНаОсновании);
КомандаВКладовую = Документы.ДвижениеПродукцииИМатериалов.ДобавитьКомандуСоздатьПередачуВКладовуюНаОснованииЗаказа(КомандыСозданияНаОсновании);
Если ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеПроизводством2_2")
И ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеПроизводством")
И КомандаВПроизводство <> Неопределено И КомандаВКладовую <> Неопределено Тогда
КомандаВПроизводство.Представление = КомандаВПроизводство.Представление + " " + НСтр("ru = '(производство 2.1)'");
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаВПроизводство, "УправлениеПроизводством2_2", Ложь, ВидСравненияКомпоновкиДанных.Равно);
КомандаВКладовую.Представление = КомандаВКладовую.Представление + " " + НСтр("ru = '(производство 2.2)'");
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаВКладовую, "УправлениеПроизводством2_2", Истина, ВидСравненияКомпоновкиДанных.Равно);
КонецЕсли;
Документы.ПоручениеЭкспедитору.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаказМатериаловВПроизводство) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ЗаказМатериаловВПроизводство.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ЗаказМатериаловВПроизводство);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьПроизводство";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КомандаОтчет = Отчеты.СостояниеВыполненияДокументов.ДобавитьКомандуСостояниеВыполненияВнутреннихРаспоряжений(КомандыОтчетов);
Если КомандаОтчет <> Неопределено Тогда
КомандаОтчет.Порядок = 1;
КонецЕсли;
КонецПроцедуры
Функция ПравоДоступаДобавление() Экспорт
Возврат ПравоДоступа("Добавление", Метаданные.Документы.ЗаказМатериаловВПроизводство);
КонецФункции
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КонецПроцедуры
Функция ПараметрыОформленияПередачиМатериаловВПроизводство(МассивСсылок, ТекстПредупреждения) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ
| МИНИМУМ(Заказ.Организация) КАК Организация,
| МИНИМУМ(Заказ.Склад) КАК Склад,
| МИНИМУМ(Заказ.Подразделение) КАК Подразделение,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Заказ.Организация) КАК РазличныхОрганизаций,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Заказ.Склад) КАК РазличныхСкладов,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Заказ.Подразделение) КАК РазличныхПодразделений
|ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК Заказ
|ГДЕ
| Заказ.Ссылка В(&МассивСсылок)
|;
|
|
|ВЫБРАТЬ
| Заказ.Ссылка КАК Заказ,
| Заказ.Статус КАК Статус,
| (НЕ Заказ.Проведен) КАК ЕстьОшибкиПроведен,
| ВЫБОР
| КОГДА Заказ.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.Закрыт)
| ИЛИ Заказ.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.КВыполнению)
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьОшибкиСтатус
|ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК Заказ
|ГДЕ
| Заказ.Ссылка В(&МассивСсылок)
| И ((НЕ Заказ.Проведен)
| ИЛИ Заказ.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.КВыполнению)
| И Заказ.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.Закрыт))");
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
РезультатЗапроса = Запрос.ВыполнитьПакет();
ВыборкаРеквизитыШапки = РезультатЗапроса[0].Выбрать();
ВыборкаРеквизитыШапки.Следующий();
Отказ = Ложь;
ШаблонСообщения = НСтр("ru = 'У выделенных заказов отличается поле ""%ПредставлениеПоля%""'");
ТекстСообщения = "";
Если ВыборкаРеквизитыШапки.РазличныхОрганизаций > 1 Тогда
ТекстСообщения = ТекстСообщения
+ ?(ТекстСообщения = "", "", Символы.ПС)
+ СтрЗаменить(ШаблонСообщения, "%ПредставлениеПоля%", НСтр("ru = '""Организация""'"));
Отказ = Истина;
КонецЕсли;
Если ВыборкаРеквизитыШапки.РазличныхСкладов > 1 Тогда
ТекстСообщения = ТекстСообщения
+ ?(ТекстСообщения = "", "", Символы.ПС)
+ СтрЗаменить(ШаблонСообщения, "%ПредставлениеПоля%", НСтр("ru = '""Склад""'"));
Отказ = Истина;
КонецЕсли;
Если ВыборкаРеквизитыШапки.РазличныхПодразделений > 1 Тогда
ТекстСообщения = ТекстСообщения
+ ?(ТекстСообщения = "", "", Символы.ПС)
+ СтрЗаменить(ШаблонСообщения, "%ПредставлениеПоля%", НСтр("ru = '""Подразделение""'"));
Отказ = Истина;
КонецЕсли;
Если Не РезультатЗапроса[1].Пустой() Тогда
ВыборкаЗаказы = РезультатЗапроса[1].Выбрать();
Пока ВыборкаЗаказы.Следующий() Цикл
Если ВыборкаЗаказы.ЕстьОшибкиПроведен Тогда
ТекстОшибки = НСтр("ru = 'Документ %Документ% не проведен. Ввод на основании непроведенного документа запрещен.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ВыборкаЗаказы.Заказ);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстОшибки,
,
,
,
Отказ);
ИначеЕсли ВыборкаЗаказы.ЕстьОшибкиСтатус Тогда
ТекстОшибки = НСтр("ru = 'Документ %Документ% находится в статусе ""%Статус%"". Ввод на основании разрешен только в статусах ""К выполнению"", ""Закрыт"".'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ВыборкаЗаказы.Заказ);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Статус%", ВыборкаЗаказы.Статус);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстОшибки,
,
,
,
Отказ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Отказ Тогда
ТекстПредупреждения = НСтр("ru = 'Невозможно оформить передачу материалов на основании выбранных заказов.'")
+ Символы.ПС + ТекстСообщения;
Возврат Неопределено;
КонецЕсли;
ПараметрыОформления = Новый Структура;
ПараметрыОформления.Вставить("Организация", ВыборкаРеквизитыШапки.Организация);
ПараметрыОформления.Вставить("Склад", ВыборкаРеквизитыШапки.Склад);
ПараметрыОформления.Вставить("Подразделение", ВыборкаРеквизитыШапки.Подразделение);
Возврат ПараметрыОформления;
КонецФункции
Функция СформироватьЗапросПроверкиПриСменеСтатуса(МассивДокументов, НовыйСтатус, ДополнительныеПараметры) Экспорт
ЗначениеНовогоСтатуса = Перечисления.СтатусыЗаказовМатериаловВПроизводство[НовыйСтатус];
Если ДополнительныеПараметры <> Неопределено И ДополнительныеПараметры.Свойство("КонтрольВыполненияЗаказа") Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| Остатки.Распоряжение КАК Распоряжение
|ПОМЕСТИТЬ
| втОстаткиПоЗаказам
|ИЗ
| РегистрНакопления.ЗаказыМатериаловВПроизводство.Остатки(, Распоряжение В (&МассивДокументов)) КАК Остатки
|СГРУППИРОВАТЬ ПО
| Остатки.Распоряжение
|;
|ВЫБРАТЬ
| ТаблицаДокументов.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДокументов.Ссылка) КАК Представление,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДокументов.Статус) КАК ПредставлениеТекущегоСтатуса,
| ПРЕДСТАВЛЕНИЕ(&Статус) КАК ПредставлениеНовогоСтатуса,
| ВЫБОР
| КОГДА ТаблицаДокументов.Статус = &Статус
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК СтатусСовпадает,
| ТаблицаДокументов.Проведен КАК Проведен,
| ТаблицаДокументов.ПометкаУдаления КАК ПометкаУдаления,
| ИСТИНА КАК ЗаписьПроведением,
| ВЫБОР
| КОГДА втОстаткиПоЗаказам.Распоряжение ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьОстаткиПоЗаказу
|ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ТаблицаДокументов
|ЛЕВОЕ СОЕДИНЕНИЕ
| втОстаткиПоЗаказам
|ПО
| ТаблицаДокументов.Ссылка = втОстаткиПоЗаказам.Распоряжение
|ГДЕ
| ТаблицаДокументов.Ссылка В(&МассивДокументов)
|";
Иначе
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаДокументов.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДокументов.Ссылка) КАК Представление,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДокументов.Статус) КАК ПредставлениеТекущегоСтатуса,
| ПРЕДСТАВЛЕНИЕ(&Статус) КАК ПредставлениеНовогоСтатуса,
| ВЫБОР
| КОГДА ТаблицаДокументов.Статус = &Статус
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК СтатусСовпадает,
| ТаблицаДокументов.Проведен КАК Проведен,
| ТаблицаДокументов.ПометкаУдаления КАК ПометкаУдаления,
| ИСТИНА КАК ЗаписьПроведением
|ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ТаблицаДокументов
|ГДЕ
| ТаблицаДокументов.Ссылка В (&МассивДокументов)
|";
КонецЕсли;
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Статус", ЗначениеНовогоСтатуса);
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
Возврат Запрос;
КонецФункции
Функция ПроверкаПередСменойСтатуса(ВыборкаПроверки, НовыйСтатус, ДополнительныеПараметры) Экспорт
Отказ = Ложь;
Если ДополнительныеПараметры = Неопределено Тогда
Возврат Не Отказ;
КонецЕсли;
Если ДополнительныеПараметры.Свойство("КонтрольВыполненияЗаказа") И ВыборкаПроверки.ЕстьОстаткиПоЗаказу Тогда
ТекстОшибки = НСтр("ru = 'У документа %Документ% статус ""%Статус%"" не установлен, т.к. заказ выполнен не полностью'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ВыборкаПроверки.Ссылка);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Статус%", ВыборкаПроверки.ПредставлениеНовогоСтатуса);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ВыборкаПроверки.Ссылка);
Отказ = Истина;
КонецЕсли;
Возврат Не Отказ;
КонецФункции
Функция СтруктураСостояниеВыполненияДокумента() Экспорт
СтруктураСостояние = Отчеты.СостояниеВыполненияДокументов.ИнициализироватьСтруктуруСостояниеВыполненияДокумента();
СтруктураСостояние.Вставить("ВыводитьТаблицыОбеспечение", 1);
СтруктураСостояние.Вставить("ВыводитьТаблицыОтгрузка", 2);
СтруктураСостояние.Вставить("ВыводитьТаблицыОтмененоОтгрузка", 3);
СтруктураСостояние.Вставить("ЭтоЗаказ", Истина);
СтруктураСостояние.Вставить("СкладВШапке", Истина);
СтруктураСостояние.Вставить("ТекстТоварУслугаОтгрузка", НСтр("ru = 'Материал'"));
СтруктураСостояние.Вставить("ИмяПоляДатаОтгрузки", "НачалоОтгрузки");
Возврат СтруктураСостояние
КонецФункции
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Функция ПроверкаОснованийНаПередачуМатериалов(МассивЗаказов, УправлениеПроизводством2_2) Экспорт
РезультатПроверки = Новый Структура("ЕстьОшибки, ТекстОшибки", Ложь);
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказМатериаловВПроизводство.Ссылка КАК Ссылка
|ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ЗаказМатериаловВПроизводство
|ГДЕ
| ЗаказМатериаловВПроизводство.Ссылка В(&МассивСсылок)
| И ЗаказМатериаловВПроизводство.УправлениеПроизводством2_2 = &УправлениеПроизводством2_2";
Запрос.УстановитьПараметр("МассивСсылок", МассивЗаказов);
Запрос.УстановитьПараметр("УправлениеПроизводством2_2", УправлениеПроизводством2_2);
ОбъектыОснований = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Если ОбъектыОснований.Количество() = 0 Тогда
РезультатПроверки.ЕстьОшибки = Истина;
Если МассивЗаказов.Количество() = 1 Тогда
РезультатПроверки.ТекстОшибки = НСтр("ru = 'Команда не может быть выполнена для данного документа'");
Иначе
РезультатПроверки.ТекстОшибки = НСтр("ru = 'Команда не может быть выполнена для выбранных документов'");
КонецЕсли;
КонецЕсли;
Возврат Новый Структура("ОбъектыОснований, РезультатПроверки", ОбъектыОснований, РезультатПроверки);
КонецФункции
#КонецОбласти
#Область УчетНДС
Функция ПараметрыЗаполненияВидаДеятельностиНДС(Объект) Экспорт
ПараметрыЗаполнения = УчетНДСУПКлиентСервер.ПараметрыЗаполненияВидаДеятельностиНДС();
ПараметрыЗаполнения.Дата = Объект.Дата;
ПараметрыЗаполнения.Организация = Объект.Организация;
ПараметрыЗаполнения.Склад = Объект.ЦеховаяКладовая;
ПараметрыЗаполнения.НаправлениеДеятельности = Объект.НаправлениеДеятельности;
ПараметрыЗаполнения.ДвижениеТоваровНаСкладах = Истина;
Возврат ПараметрыЗаполнения;
КонецФункции
#КонецОбласти
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И ЗначениеРазрешено(Подразделение)
| И ЗначениеРазрешено(Склад)";
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область СлужебныйПрограммныйИнтерфейс
#Область Обеспечение
Функция ТекстЗапросаТоварыДокумента(Отбор) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Таблица.Ссылка КАК Распоряжение,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Характеристика КАК Характеристика,
| ДанныеУчета.Назначение КАК Назначение,
| ДанныеУчета.НазначениеОтправителя КАК НазначениеОтправителя,
| Таблица.КодСтроки КАК КодСтроки,
| Таблица.Серия КАК Серия,
| Таблица.Количество КАК Количество,
| Таблица.Упаковка КАК Упаковка,
| Таблица.НачалоОтгрузки КАК ДатаОтгрузки,
| Таблица.Отменено КАК Отменено,
| Таблица.СтатусУказанияСерий КАК СтатусУказанияСерий,
| Таблица.ВариантОбеспечения КАК ВариантОбеспечения,
| Таблица.Обособленно КАК Обособленно,
| Таблица.ГруппаПродукции КАК ГруппаПродукции,
| ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) КАК Склад,
| ЕСТЬNULL(ДанныеУчета.КОформлению, 0) КАК КОформлению,
| ЕСТЬNULL(ДанныеУчета.Заказано, 0) КАК Заказано
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВтДанныеУчета КАК ДанныеУчета
| ПО Таблица.Ссылка = ДанныеУчета.Распоряжение
| И Таблица.КодСтроки = ДанныеУчета.КодСтроки
|
|ГДЕ
| НЕ ДанныеУчета.Распоряжение ЕСТЬ NULL
| И &Отбор";
ТекстИсходнаяТаблица = "Документ.ЗаказМатериаловВПроизводство.Товары КАК Таблица";
ТекстСоединениеШтучныйТоварВМернойЕдинице = ТекстИсходнаяТаблица + "
| //&СоединениеШтучныйТоварВМернойЕдинице";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ТекстИсходнаяТаблица, ТекстСоединениеШтучныйТоварВМернойЕдинице);
ПараметрыПрименения = ПроизводствоСервер.ПараметрыПримененияШтучногоТовараВМернойЕдинице();
ПараметрыПрименения.КоличествоУпаковок = Ложь;
ПараметрыПрименения.ШтучныйТоварВМерныхЕдиницах = Ложь;
ПроизводствоСервер.ПрименитьНастройкиШтучногоТовараВМернойЕдинице(ТекстЗапроса, "Таблица", ПараметрыПрименения);
ТекстОтбора = "ИСТИНА";
Если ЗначениеЗаполнено(Отбор) Тогда
Для Каждого КлючЗначение Из Отбор Цикл
Ключ = КлючЗначение.Ключ;
Если Ключ = "Ссылка" Тогда
Ключ = "Таблица.Ссылка";
КонецЕсли;
ТекстОтбора = ТекстОтбора + " И " + Ключ + " В(&" + КлючЗначение.Значение + ")";
КонецЦикла;
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Отбор", ТекстОтбора);
Возврат ТекстЗапроса;
КонецФункции
Процедура ТоварыДокументаДляСозданияОбеспечивающегоЗаказа(Ссылка, ПараметрыСоздания, МенеджерВременныхТаблиц) Экспорт
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Статус,Проведен");
ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(Ссылка, Реквизиты.Статус, Не Реквизиты.Проведен);
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТипыНоменклатуры", ПараметрыСоздания.ТипыНоменклатуры);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Упаковка КАК Упаковка,
| Товары.Ссылка.Склад КАК Склад,
| Товары.Ссылка.Подразделение КАК Подразделение,
| ВЫБОР
| КОГДА Товары.Обособленно
| ТОГДА
| ВЫБОР
| КОГДА Товары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ Товары.Ссылка.ОбосабливатьПоНазначениюЗаказа
| И Товары.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное)
| ТОГДА Товары.Ссылка.Назначение
| ИНАЧЕ Товары.Назначение
| КОНЕЦ
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| Товары.ВариантОбеспечения КАК ВариантОбеспечения,
| Товары.Обособленно КАК Обособленно,
| Товары.НачалоОтгрузки КАК ДатаОтгрузки,
| Товары.Количество КАК КоличествоЕдиницПоДокументу,
| Товары.КоличествоУпаковок КАК КоличествоПоДокументу
|ПОМЕСТИТЬ ТоварыДокумента
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка
| И НЕ Товары.Отменено
| И Товары.Номенклатура.ТипНоменклатуры В(&ТипыНоменклатуры)";
Запрос.Выполнить();
КонецПроцедуры
Функция МакетФормыВыбораНазначений() Экспорт
МакетФормы = Справочники.Назначения.МакетФормыВыбораНазначений();
ШаблонНазначения = Справочники.Назначения.ДобавитьШаблонНазначений(МакетФормы);
ШаблонНазначения.ТипыНазначений.Удалить(ШаблонНазначения.ТипыНазначений.Найти(Перечисления.ТипыНазначений.ДавальческоеПродукция22));
ШаблонНазначения.ТипыНазначений.Удалить(ШаблонНазначения.ТипыНазначений.Найти(Перечисления.ТипыНазначений.ДавальческоеМатериалы22));
ШаблонНазначения.ТипыНазначений.Удалить(ШаблонНазначения.ТипыНазначений.Найти(Перечисления.ТипыНазначений.ДавальческоеМатериалыПодЭтап22));
ШаблонНазначения.УсловиеИспользования = "Объект.УправлениеПроизводством2_2 = ЛОЖЬ";
ШаблонНазначения.НаправлениеДеятельности = "Объект.НаправлениеДеятельности";
ШаблонНазначения.ВидимыеОтборыНаФорме.Вставить("НаправлениеДеятельности", НСтр("ru = 'Только назначения направления деятельности ""%1""'"));
ШаблонНазначения = Справочники.Назначения.ДобавитьШаблонНазначений(МакетФормы);
ШаблонНазначения.ТипыНазначений.Удалить(ШаблонНазначения.ТипыНазначений.Найти(Перечисления.ТипыНазначений.Давальческое21));
ШаблонНазначения.ТипыНазначений.Удалить(ШаблонНазначения.ТипыНазначений.Найти(Перечисления.ТипыНазначений.ДавальческоеПродукция22));
ШаблонНазначения.УсловиеИспользования = "Объект.УправлениеПроизводством2_2";
ШаблонНазначения.НаправлениеДеятельности = "Объект.НаправлениеДеятельности";
ШаблонНазначения.ВидимыеОтборыНаФорме.Вставить("НаправлениеДеятельности", НСтр("ru = 'Только назначения направления деятельности ""%1""'"));
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина, "Объект.Товары.Назначение", "Отправитель");
ОписаниеКолонок.Колонки.НайтиПоЗначению("ВНаличии").Пометка = Истина;
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.Склад";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина, "Объект.Товары.Назначение", "Получатель");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.УсловиеИспользования = "Объект.УправлениеПроизводством2_2";
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.ЦеховаяКладовая";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказовВсеСклады", Истина, "Объект.Товары.Назначение", "ВсеСклады");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.УсловиеИспользования = "Объект.УправлениеПроизводством2_2";
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
Возврат МакетФормы;
КонецФункции
Процедура ПослеЗаполненияОбеспечения(Объект, Изменения, Режим, ПараметрыЗаполнения) Экспорт
Если Объект.УправлениеПроизводством2_2 Тогда
Если ОбеспечениеВДокументахКлиентСервер.НужноПроверитьЗаполнитьДатуОтгрузкиДляСтрокОтгрузить(Режим) Тогда
МассивСтрок = Изменения.ВыгрузитьКолонку("Строка");
ВариантОтгрузить = Перечисления.ВариантыОбеспечения.Отгрузить;
Для Каждого Строка Из МассивСтрок Цикл
ДатаПоступленияРасчетная = Макс(
НачалоДня(ТекущаяДатаСеанса()) + 86400 * Объект.ДлительностьПеремещения,
Объект.ЖелаемаяДатаПоступления);
НужноЗаполнитьДатуОтгрузки = Строка.ВариантОбеспечения = ВариантОтгрузить;
Если НужноЗаполнитьДатуОтгрузки Тогда
Строка.НачалоОтгрузки = ДатаПоступленияРасчетная - 86400 * Объект.ДлительностьПеремещения;
Строка.ОкончаниеПоступления = ДатаПоступленияРасчетная;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Иначе
ОбеспечениеВДокументахСервер.АктуализироватьДатуОтгрузки(
ПараметрыЗаполнения,
Объект.НеОтгружатьЧастями,
Объект.ДатаОтгрузки,
Объект.Товары,
"НачалоОтгрузки");
Если ОбеспечениеВДокументахКлиентСервер.НужноПроверитьЗаполнитьДатуОтгрузкиДляСтрокОтгрузить(Режим) Тогда
ОбеспечениеВДокументахСервер.ПроверитьЗаполнитьДатуОтгрузкиДляСтрокОтгрузить(
Изменения.ВыгрузитьКолонку("Строка"),
"НачалоОтгрузки",
Объект.НеОтгружатьЧастями,
Объект.ДатаОтгрузки);
КонецЕсли;
КонецЕсли;
ОбеспечениеВДокументахСервер.ПересчитатьКоличествоЕдиниц(Изменения, Объект.Товары);
ПараметрыУказанияСерий = ПараметрыУказанияСерий(Объект);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
КонецПроцедуры
#КонецОбласти
#Область НаправленияДеятельности
Функция ПорядокОбработкиДокументаПриИзмененииНаправленияДеятельности(Форма) Экспорт
ПорядокОбработкиДокумента = НаправленияДеятельностиСервер.ПорядокОбработкиДокументаПриИзмененииНаправленияДеятельности();
ПорядокОбработкиДокумента.ЗаполнятьНазначениеВШапке = Истина;
Возврат ПорядокОбработкиДокумента;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
ТекстыЗапроса = Новый СписокЗначений;
ПолноеИмяДокумента = "Документ.ЗаказМатериаловВПроизводство";
СинонимТаблицыДокумента = "";
ВЗапросеЕстьИсточник = Истина;
ТекстыЗапросаВременныхТаблиц = Новый Соответствие();
ЗначенияПараметров = Новый Структура;
ЗначенияПараметров.Вставить("ИдентификаторМетаданных",
ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмяДокумента));
ПереопределениеРасчетаПараметров = Новый Структура;
ПереопределениеРасчетаПараметров.Вставить("НомерНаПечать", """""");
ПереопределениеРасчетаПараметров.Вставить("ИнформацияПоСкладу", """""");
ПереопределениеРасчетаПараметров.Вставить("ИнформацияПоПодразделению", """""");
ПереопределениеРасчетаПараметров.Вставить("Получатель",
" ВЫБОР
| КОГДА ТаблицаТовары.Ссылка.УправлениеПроизводством2_2
| ТОГДА ТаблицаТовары.Ссылка.ЦеховаяКладовая
| ИНАЧЕ ТаблицаТовары.Ссылка.Подразделение
| КОНЕЦ");
Если ИмяРегистра = "ЗаказыМатериаловСУчетомКорректировок" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаЗаказыМатериаловСУчетомКорректировок(Неопределено, ТекстыЗапроса, Неопределено);
СинонимТаблицыДокумента = "ТаблицаТовары";
ИначеЕсли ИмяРегистра = "ЗаказыМатериаловВПроизводство" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаЗаказыМатериаловВПроизводство(Неопределено, ТекстыЗапроса, Неопределено);
СинонимТаблицыДокумента = "ТаблицаТовары";
ИначеЕсли ИмяРегистра = "РеестрДокументов" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаРеестрДокументов(Неопределено, ТекстыЗапроса, Неопределено);
ТекстыЗапросаВременныхТаблиц.Вставить("ВтОснований", ТекстЗапросаВтОснований(Неопределено, ТекстыЗапроса));
СинонимТаблицыДокумента = "ДанныеДокумента";
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Если ИмяРегистра = "РеестрДокументов" Тогда
ТекстЗапроса = ОбновлениеИнформационнойБазыУТ.АдаптироватьЗапросПроведенияПоНезависимомуРегистру(
ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ВЗапросеЕстьИсточник,
ПереопределениеРасчетаПараметров,
ТекстыЗапросаВременныхТаблиц);
Иначе
ТекстЗапроса = ОбновлениеИнформационнойБазыУТ.АдаптироватьЗапросМеханизмаПроведения(
ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ПереопределениеРасчетаПараметров,
ТекстыЗапросаВременныхТаблиц);
КонецЕсли;
Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
Результат.ЗначенияПараметров = ЗначенияПараметров;
Результат.ТекстЗапроса = ТекстЗапроса;
Возврат Результат;
КонецФункции
Функция ТекстЗапросаТаблицаЗаказыМатериаловВПроизводство(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ЗаказыМатериаловВПроизводство";
Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса = "
|ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
| &Период КАК Период,
| &Ссылка КАК Распоряжение,
| &Склад КАК Склад,
| &Подразделение КАК Подразделение,
| &Получатель КАК Получатель,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Серия КАК Серия,
|
| ТаблицаТовары.Назначение КАК Назначение,
|
| ВЫБОР
| КОГДА НЕ ТаблицаТовары.Обособленно
| ТОГДА Значение(Справочник.Назначения.ПустаяСсылка)
| КОГДА ТаблицаТовары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ &ОбосабливатьПоНазначениюЗаказа
| И ТаблицаТовары.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное)
| ТОГДА &Назначение
| ИНАЧЕ
| ТаблицаТовары.Назначение
| КОНЕЦ КАК НазначениеОтправителя,
|
| ТаблицаТовары.КодСтроки КАК КодСтроки,
| ТаблицаТовары.Количество КАК Заказано,
| ВЫБОР
| КОГДА ТаблицаТовары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
| И &Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.КВыполнению),
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.Закрыт))
| ТОГДА ТаблицаТовары.Количество
| КОНЕЦ КАК КОформлению
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
| И (НЕ ТаблицаТовары.Отменено)";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаЗаказыМатериаловСУчетомКорректировок(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ЗаказыМатериаловСУчетомКорректировок";
Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса = "
|ВЫБРАТЬ
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| НАЧАЛОПЕРИОДА(&Период, ДЕНЬ) КАК Период,
| &Организация КАК Организация,
| &Подразделение КАК Подразделение,
| &Ссылка КАК Распоряжение,
| ТаблицаТовары.КодСтроки КАК КодСтрокиРаспоряжения,
| ТаблицаТовары.ВариантОбеспечения КАК ВариантОбеспечения,
| ТаблицаТовары.Обособленно КАК Обособленно,
| ТаблицаТовары.НачалоОтгрузки КАК ДатаПотребности,
| ТаблицаТовары.КодСтроки КАК КодСтроки,
| ТаблицаТовары.Отменено КАК Отменено,
| ТаблицаТовары.Серия КАК Серия,
| &Склад КАК Склад,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ВЫБОР КОГДА ТаблицаТовары.Обособленно
| И (ТаблицаТовары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ (&ОбосабливатьПоНазначениюЗаказа
| И ТаблицаТовары.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное))) ТОГДА
| &Назначение
| ИНАЧЕ
| ТаблицаТовары.Назначение
| КОНЕЦ КАК Назначение,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.КоличествоУпаковок КАК КоличествоУпаковок
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
| И НЕ &УправлениеПроизводством2_2
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеШапки.Дата КАК Период,
| ДанныеШапки.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ДанныеШапки.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ДанныеШапки.Организация КАК Организация,
| ДанныеШапки.Склад КАК Склад,
| ДанныеШапки.ЦеховаяКладовая КАК ЦеховаяКладовая,
| ДанныеШапки.Подразделение КАК Подразделение,
| ДанныеШапки.Приоритет КАК Приоритет,
| ПРЕДСТАВЛЕНИЕ(ДанныеШапки.Склад) КАК СкладПредставление,
| ПРЕДСТАВЛЕНИЕ(ДанныеШапки.Подразделение) КАК ПодразделениеПредставление,
| ВЫБОР
| КОГДА ДанныеШапки.УправлениеПроизводством2_2
| ТОГДА ДанныеШапки.ЦеховаяКладовая
| ИНАЧЕ ДанныеШапки.Подразделение
| КОНЕЦ КАК Получатель,
| ДанныеШапки.Статус КАК Статус,
| ДанныеШапки.Назначение КАК Назначение,
| ДанныеШапки.УправлениеПроизводством2_2 КАК УправлениеПроизводством2_2,
| ЕСТЬNULL(ДанныеШапки.Назначение.ДвиженияПоСкладскимРегистрам, ЛОЖЬ) КАК ДвиженияПоСкладскимРегистрам,
| ДанныеШапки.ОбосабливатьПоНазначениюЗаказа КАК ОбосабливатьПоНазначениюЗаказа,
| ДанныеШапки.Ответственный КАК Ответственный,
| ДанныеШапки.Автор КАК Автор,
| ДанныеШапки.Комментарий КАК Комментарий,
| ДанныеШапки.Проведен КАК Проведен,
| ДанныеШапки.ПометкаУдаления КАК ПометкаУдаления,
| ДанныеШапки.Номер КАК Номер
|ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ДанныеШапки
|ГДЕ
| ДанныеШапки.Ссылка = &Ссылка";
Результат = Запрос.Выполнить();
Реквизиты = Результат.Выбрать();
Реквизиты.Следующий();
Для Каждого Колонка Из Результат.Колонки Цикл
Запрос.УстановитьПараметр(Колонка.Имя, Реквизиты[Колонка.Имя]);
КонецЦикла;
Запрос.УстановитьПараметр("ИдентификаторМетаданных", ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(ДокументСсылка)));
Запрос.УстановитьПараметр("НомерНаПечать", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Реквизиты.Номер));
ИнформацияПоПодразделению = "";
Если ЗначениеЗаполнено(Реквизиты.Подразделение) Тогда
ШаблонСтроки = "ru = 'Передача в ""%1""'";
ИнформацияПоПодразделению = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, Реквизиты.ПодразделениеПредставление);
КонецЕсли;
Запрос.УстановитьПараметр("ИнформацияПоПодразделению", ИнформацияПоПодразделению);
ИнформацияПоСкладу = "";
Если ЗначениеЗаполнено(Реквизиты.Склад) Тогда
ШаблонСтроки = "ru = 'Передача с ""%1""'";
ИнформацияПоСкладу = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, Реквизиты.СкладПредставление);
КонецЕсли;
Запрос.УстановитьПараметр("ИнформацияПоСкладу", ИнформацияПоСкладу);
КонецПроцедуры
Процедура ОтразитьРезерв(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаДанныхДокумента =
"ВЫБРАТЬ
| ДанныеИсточника.Ссылка КАК Ссылка,
| ВЫБОР КОГДА ДанныеИсточника.НачалоОтгрузки <> ДАТАВРЕМЯ(1, 1, 1) ТОГДА
| ДанныеИсточника.НачалоОтгрузки
| ИНАЧЕ
| ДанныеИсточника.Ссылка.Дата
| КОНЕЦ КАК Период,
| ДанныеИсточника.Ссылка КАК Заказ,
| НЕОПРЕДЕЛЕНО КАК Накладная,
| ЛОЖЬ КАК Исправление,
| НЕОПРЕДЕЛЕНО КАК ИсправляемыйДокумент,
| ВЫБОР
| КОГДА ДанныеИсточника.Ссылка.УправлениеПроизводством2_2
| ТОГДА ДанныеИсточника.Ссылка.ЦеховаяКладовая
| ИНАЧЕ ДанныеИсточника.Ссылка.Подразделение
| КОНЕЦ КАК Получатель,
| ДанныеИсточника.Ссылка.Склад КАК Склад,
| ДанныеИсточника.Номенклатура КАК Номенклатура,
| ДанныеИсточника.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ДанныеИсточника.Обособленно
| ТОГДА ВЫБОР
| КОГДА ДанныеИсточника.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ (ДанныеИсточника.Ссылка.ОбосабливатьПоНазначениюЗаказа
| И ДанныеИсточника.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное))
| ТОГДА ДанныеИсточника.Ссылка.Назначение
| ИНАЧЕ ДанныеИсточника.Назначение
| КОНЕЦ
| ИНАЧЕ
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| ДанныеИсточника.Серия КАК Серия,
| ДанныеИсточника.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ДанныеИсточника.Количество КАК Количество,
| ЛОЖЬ КАК СверхЗаказа,
| ДанныеИсточника.КодСтроки КАК КодСтроки,
| ДанныеИсточника.Отменено КАК Отменено,
| ЛОЖЬ КАК ЭтоНакладная,
| ИСТИНА КАК ОтгрузкаПоЗаказу
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК ДанныеИсточника
|ГДЕ
| ДанныеИсточника.Ссылка В(&Ссылка)
| И ДанныеИсточника.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
| И НЕ ДанныеИсточника.Отменено
| И ДанныеИсточника.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.СоСклада)
|";
ТекстЗапросаДанныхДокумента = СтрЗаменить(ТекстЗапросаДанныхДокумента,
"&НазначениеПоУмолчанию",
"ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)");
СкладыСервер.ОтразитьРезерв(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДанныхДокумента);
КонецПроцедуры
Процедура ЗапланироватьОтгрузкуТоваров(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаДанныхДокумента =
"ВЫБРАТЬ
| ДанныеИсточника.Ссылка КАК Ссылка,
| ДанныеИсточника.НачалоОтгрузки КАК Период,
| ДанныеИсточника.Ссылка КАК Заказ,
| НЕОПРЕДЕЛЕНО КАК Накладная,
| ЛОЖЬ КАК Исправление,
| НЕОПРЕДЕЛЕНО КАК ИсправляемыйДокумент,
| ВЫБОР
| КОГДА ДанныеИсточника.Ссылка.УправлениеПроизводством2_2
| ТОГДА ДанныеИсточника.Ссылка.ЦеховаяКладовая
| ИНАЧЕ ДанныеИсточника.Ссылка.Подразделение
| КОНЕЦ КАК Получатель,
| ДанныеИсточника.Ссылка.Склад КАК Склад,
| ДанныеИсточника.Номенклатура КАК Номенклатура,
| ДанныеИсточника.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ДанныеИсточника.Обособленно
| ТОГДА ВЫБОР
| КОГДА ДанныеИсточника.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ (ДанныеИсточника.Ссылка.ОбосабливатьПоНазначениюЗаказа
| И ДанныеИсточника.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное))
| ТОГДА ДанныеИсточника.Ссылка.Назначение
| ИНАЧЕ ДанныеИсточника.Назначение
| КОНЕЦ
| ИНАЧЕ
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| ДанныеИсточника.Серия КАК Серия,
| ДанныеИсточника.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ДанныеИсточника.Количество КАК Количество,
| ЛОЖЬ КАК СверхЗаказа,
| ДанныеИсточника.Отменено КАК Отменено,
| ЛОЖЬ КАК ЭтоНакладная,
| ИСТИНА КАК ОтгрузкаПоЗаказу
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК ДанныеИсточника
|
|ГДЕ
| ДанныеИсточника.Ссылка В(&Ссылка)
| И ДанныеИсточника.Ссылка.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.КВыполнению),
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.Закрыт))
| И ДанныеИсточника.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
|";
СкладыСервер.ЗапланироватьОтгрузкуТоваров(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДанныхДокумента);
КонецПроцедуры
Функция ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "РеестрДокументов";
Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтОснований", ТекстыЗапроса) Тогда
ТекстЗапросаВтОснований(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеДокумента.ТипСсылки КАК ТипСсылки,
| ДанныеДокумента.Организация КАК Организация,
| ДанныеДокумента.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ДанныеДокумента.Партнер КАК Партнер,
| ДанныеДокумента.Контрагент КАК Контрагент,
| ДанныеДокумента.НаправлениеДеятельности КАК НаправлениеДеятельности,
| ДанныеДокумента.ДополнительнаяЗапись КАК ДополнительнаяЗапись,
| ДанныеДокумента.Подразделение КАК Подразделение,
| ДанныеДокумента.МестоХранения КАК МестоХранения,
| ДанныеДокумента.ДатаДокументаИБ КАК ДатаДокументаИБ,
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.НомерДокументаИБ КАК НомерДокументаИБ,
| ДанныеДокумента.Ответственный КАК Ответственный,
| ДанныеДокумента.Автор КАК Автор,
| ДанныеДокумента.Комментарий КАК Комментарий,
| ДанныеДокумента.Валюта КАК Валюта,
| ДанныеДокумента.Сумма КАК Сумма,
| ДанныеДокумента.Статус КАК Статус,
| ДанныеДокумента.Проведен КАК Проведен,
| ДанныеДокумента.ПометкаУдаления КАК ПометкаУдаления,
| ДанныеДокумента.Дополнительно КАК Дополнительно,
| ДанныеДокумента.ДатаПервичногоДокумента КАК ДатаПервичногоДокумента,
| ДанныеДокумента.НомерПервичногоДокумента КАК НомерПервичногоДокумента,
| ЛОЖЬ КАК СторноИсправление,
| НЕОПРЕДЕЛЕНО КАК СторнируемыйДокумент,
| НЕОПРЕДЕЛЕНО КАК ИсправляемыйДокумент,
| ДанныеДокумента.ДатаДокументаИБ КАК ДатаОтраженияВУчете,
| ДанныеДокумента.Приоритет КАК Приоритет
|ИЗ
| ВтОснований КАК ДанныеДокумента";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Процедура ЗапланироватьПоступлениеТоваров(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаДокумента =
"ВЫБРАТЬ
| ИсточникДанных.Ссылка КАК Ссылка,
| НЕОПРЕДЕЛЕНО КАК Накладная,
| ЛОЖЬ КАК Исправление,
| НЕОПРЕДЕЛЕНО КАК ИсправляемыйДокумент,
| ИсточникДанных.Ссылка КАК Заказ,
| НЕОПРЕДЕЛЕНО КАК Договор,
| НЕОПРЕДЕЛЕНО КАК Соглашение,
| НЕОПРЕДЕЛЕНО КАК ВариантПриемкиТоваров,
| ИсточникДанных.ОкончаниеПоступления КАК Дата,
| ИсточникДанных.Номенклатура КАК Номенклатура,
| ИсточникДанных.Характеристика КАК Характеристика,
| ИсточникДанных.Назначение КАК Назначение,
| ИсточникДанных.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ИсточникДанных.Серия КАК Серия,
| ЛОЖЬ КАК СверхЗаказа,
| ИсточникДанных.Ссылка.ЦеховаяКладовая КАК Склад,
| ИсточникДанных.Ссылка.Склад КАК Отправитель,
| ИсточникДанных.Ссылка.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ИсточникДанных.Количество КАК Количество,
| ЛОЖЬ КАК ЭтоНакладная,
| ЛОЖЬ КАК ПоступлениеПоЗаказам
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК ИсточникДанных
|ГДЕ
| ИсточникДанных.Ссылка В (&Ссылка)
| И ИсточникДанных.Номенклатура.ТипНоменклатуры В
| (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),
| ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
| И НЕ ИсточникДанных.Отменено
| И ИсточникДанных.Ссылка.Статус В (
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.КВыполнению),
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.Закрыт))
| И ИсточникДанных.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
| И ИсточникДанных.Ссылка.УправлениеПроизводством2_2";
СкладыСервер.ЗапланироватьПоступлениеТоваров(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаДокумента);
КонецПроцедуры
Процедура ОтразитьРаспределениеЗапасовДвижения(Запрос, ТекстыЗапроса, Регистры)
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Ссылка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Ссылка.Склад КАК Склад,
|
| ВЫБОР КОГДА ТабЧасть.Обособленно ТОГДА
|
| ВЫБОР КОГДА ТабЧасть.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ ТабЧасть.Ссылка.ОбосабливатьПоНазначениюЗаказа
| И ТабЧасть.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное) ТОГДА
| ТабЧасть.Ссылка.Назначение
| ИНАЧЕ
| ТабЧасть.Назначение
| КОНЕЦ
|
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
|
| ТабЧасть.Количество КАК Количество,
| ТабЧасть.Ссылка КАК ЗапланированныйРасходРаспределенногоЗапаса,
| ИСТИНА КАК КонтрольСвободногоОстатка
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК ТабЧасть
|ГДЕ
| НЕ ТабЧасть.Отменено
| И ТабЧасть.Ссылка.Статус В(
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.КВыполнению),
| ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.Закрыт))
| И ТабЧасть.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)";
РаспределениеЗапасовДвижения.РасходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть);
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Ссылка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Ссылка.Склад КАК Склад,
|
| ВЫБОР КОГДА ТабЧасть.Обособленно ТОГДА
|
| ВЫБОР КОГДА ТабЧасть.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ ТабЧасть.Ссылка.ОбосабливатьПоНазначениюЗаказа
| И ТабЧасть.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное) ТОГДА
| ТабЧасть.Ссылка.Назначение
| ИНАЧЕ
| ТабЧасть.Назначение
| КОНЕЦ
|
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
|
| ТабЧасть.Количество КАК Количество,
| ТабЧасть.ВариантОбеспечения КАК ВариантОбеспечения,
| ТабЧасть.Ссылка КАК Заказ,
| ТабЧасть.НачалоОтгрузки КАК ЖелаемаяДатаОтгрузки,
| ЛОЖЬ КАК ПоГрафику,
| НЕОПРЕДЕЛЕНО КАК РаспоряжениеВГрафике,
| 0 КАК КоличествоВГрафике
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК ТабЧасть
|ГДЕ
| НЕ ТабЧасть.Отменено
| И ТабЧасть.ВариантОбеспечения <> ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)";
РаспределениеЗапасовДвижения.ЗапланироватьРасходЗапаса(
Запрос,
ТекстыЗапроса,
Регистры,
ТекстЗапросаТабЧасть,
Ложь);
ТекстЗапросаТабЧасть =
"ВЫБРАТЬ
| ТабЧасть.Ссылка КАК Ссылка,
| ТабЧасть.Ссылка.Дата КАК Период,
| ТабЧасть.Номенклатура КАК Номенклатура,
| ТабЧасть.Характеристика КАК Характеристика,
| ТабЧасть.Ссылка.ЦеховаяКладовая КАК Склад,
| ТабЧасть.Назначение КАК Назначение,
| ТабЧасть.Количество КАК Количество,
| ТабЧасть.Ссылка КАК Заказ,
| ТабЧасть.ОкончаниеПоступления КАК ДатаПоступления,
| ТабЧасть.ОкончаниеПоступления
| <> ДАТАВРЕМЯ(1, 1, 1) КАК ДоступенДляРасхода,
| ЛОЖЬ КАК ПоГрафику,
| НЕОПРЕДЕЛЕНО КАК РаспоряжениеВГрафике,
| 0 КАК КоличествоВГрафике
|ИЗ
| Документ.ЗаказМатериаловВПроизводство.Товары КАК ТабЧасть
|ГДЕ
| ТабЧасть.Ссылка.УправлениеПроизводством2_2
| И НЕ ТабЧасть.Отменено";
РаспределениеЗапасовДвижения.ЗапланироватьПриходЗапаса(Запрос, ТекстыЗапроса, Регистры, ТекстЗапросаТабЧасть, Ложь);
КонецПроцедуры
Функция ТекстЗапросаВтОснований(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтОснований";
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаРеестрДокументов.ТипСсылки КАК ТипСсылки,
| ТаблицаРеестрДокументов.Организация КАК Организация,
| ТаблицаРеестрДокументов.ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ТаблицаРеестрДокументов.Партнер КАК Партнер,
| ТаблицаРеестрДокументов.Контрагент КАК Контрагент,
| ТаблицаРеестрДокументов.НаправлениеДеятельности КАК НаправлениеДеятельности,
| МИНИМУМ(ТаблицаРеестрДокументов.ДополнительнаяЗапись) КАК ДополнительнаяЗапись,
| ТаблицаРеестрДокументов.Подразделение КАК Подразделение,
| ТаблицаРеестрДокументов.МестоХранения КАК МестоХранения,
| ТаблицаРеестрДокументов.ДатаДокументаИБ КАК ДатаДокументаИБ,
| ТаблицаРеестрДокументов.Ссылка КАК Ссылка,
| МАКСИМУМ(ТаблицаРеестрДокументов.НомерДокументаИБ) КАК НомерДокументаИБ,
| МАКСИМУМ(ТаблицаРеестрДокументов.Ответственный) КАК Ответственный,
| МАКСИМУМ(ТаблицаРеестрДокументов.Автор) КАК Автор,
| МАКСИМУМ(ТаблицаРеестрДокументов.Комментарий) КАК Комментарий,
| МАКСИМУМ(ТаблицаРеестрДокументов.Валюта) КАК Валюта,
| МАКСИМУМ(ТаблицаРеестрДокументов.Сумма) КАК Сумма,
| МАКСИМУМ(ТаблицаРеестрДокументов.Статус) КАК Статус,
| МАКСИМУМ(ТаблицаРеестрДокументов.Проведен) КАК Проведен,
| МАКСИМУМ(ТаблицаРеестрДокументов.ПометкаУдаления) КАК ПометкаУдаления,
| МАКСИМУМ(ТаблицаРеестрДокументов.Дополнительно) КАК Дополнительно,
| МАКСИМУМ(ТаблицаРеестрДокументов.ДатаПервичногоДокумента) КАК ДатаПервичногоДокумента,
| МАКСИМУМ(ТаблицаРеестрДокументов.НомерПервичногоДокумента) КАК НомерПервичногоДокумента,
| МАКСИМУМ(ТаблицаРеестрДокументов.Приоритет) КАК Приоритет
|ПОМЕСТИТЬ ВтОснований
| ИЗ
| (ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| &Период КАК ДатаДокументаИБ,
| &Номер КАК НомерДокументаИБ,
| &ИдентификаторМетаданных КАК ТипСсылки,
| &Приоритет КАК Приоритет,
| &Организация КАК Организация,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) КАК Партнер,
| ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) КАК Контрагент,
| &Склад КАК МестоХранения,
| &Подразделение КАК Подразделение,
| &Ответственный КАК Ответственный,
| &Автор КАК Автор,
| ВЫРАЗИТЬ(&Комментарий КАК СТРОКА (100)) КАК Комментарий,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК Валюта,
| 0 КАК Сумма,
| &Статус КАК Статус,
| &Проведен КАК Проведен,
| &ПометкаУдаления КАК ПометкаУдаления,
| ЛОЖЬ КАК ДополнительнаяЗапись,
| ВЫРАЗИТЬ(&ИнформацияПоПодразделению КАК СТРОКА (100)) КАК Дополнительно,
| &Период КАК ДатаПервичногоДокумента,
| &НомерНаПечать КАК НомерПервичногоДокумента,
| &НаправлениеДеятельности КАК НаправлениеДеятельности
| ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ДанныеДокумента
| ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка
|
| СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| &Период КАК ДатаДокументаИБ,
| &Номер КАК НомерДокументаИБ,
| &ИдентификаторМетаданных КАК ТипСсылки,
| &Приоритет КАК Приоритет,
| &Организация КАК Организация,
| &ХозяйственнаяОперация КАК ХозяйственнаяОперация,
| ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка) КАК Партнер,
| ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) КАК Контрагент,
| &ЦеховаяКладовая КАК МестоХранения,
| ЕСТЬNULL(
| ВЫРАЗИТЬ(&ЦеховаяКладовая КАК Справочник.Склады).Подразделение,
| ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка)) КАК Подразделение,
| &Ответственный КАК Ответственный,
| &Автор КАК Автор,
| ВЫРАЗИТЬ(&Комментарий КАК СТРОКА (100)) КАК Комментарий,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) КАК Валюта,
| 0 КАК Сумма,
| &Статус КАК Статус,
| &Проведен КАК Проведен,
| &ПометкаУдаления КАК ПометкаУдаления,
| ИСТИНА КАК ДополнительнаяЗапись,
| ВЫРАЗИТЬ(&ИнформацияПоСкладу КАК СТРОКА (100)) КАК Дополнительно,
| &Период КАК ДатаПервичногоДокумента,
| &НомерНаПечать КАК НомерПервичногоДокумента,
| &НаправлениеДеятельности КАК НаправлениеДеятельности
| ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ДанныеДокумента
| ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка
| И &ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаМатериаловВКладовую)
|
| СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка) КАК ТаблицаРеестрДокументов
|
|СГРУППИРОВАТЬ ПО
| ТаблицаРеестрДокументов.ТипСсылки,
| ТаблицаРеестрДокументов.Организация,
| ТаблицаРеестрДокументов.ХозяйственнаяОперация,
| ТаблицаРеестрДокументов.Партнер,
| ТаблицаРеестрДокументов.Контрагент,
| ТаблицаРеестрДокументов.Подразделение,
| ТаблицаРеестрДокументов.МестоХранения,
| ТаблицаРеестрДокументов.ДатаДокументаИБ,
| ТаблицаРеестрДокументов.Ссылка,
| ТаблицаРеестрДокументов.НаправлениеДеятельности";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#Область Прочее
Функция ДопустимыеОтклоненияМерныхТоваров(СписокРаспоряжений, ТипДвиженияЗапасов) Экспорт
ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров = Константы.ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров.Получить();
Если Не ЗначениеЗаполнено(СписокРаспоряжений) Или ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров = 0 Тогда
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Заказ");
Таблица.Колонки.Добавить("Номенклатура");
Таблица.Колонки.Добавить("Характеристика");
Таблица.Колонки.Добавить("Серия");
Таблица.Колонки.Добавить("ДопустимоеОтклонение");
Возврат Таблица;
КонецЕсли;
Если ТипЗнч(СписокРаспоряжений) = Тип("ДокументСсылка.ЗаказМатериаловВПроизводство") Тогда
МассивРаспоряжений = Новый Массив();
МассивРаспоряжений.Добавить(СписокРаспоряжений);
Иначе
МассивРаспоряжений = СписокРаспоряжений;
КонецЕсли;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТоварыКПоступлению.Распоряжение КАК Заказ,
| ТоварыКПоступлению.Номенклатура КАК Номенклатура,
| ТоварыКПоступлению.Характеристика КАК Характеристика,
| ТоварыКПоступлению.Серия КАК Серия,
| СУММА(ТоварыКПоступлению.КОформлениюПриход
| * (&ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров / 100)) КАК ДопустимоеОтклонение
|ИЗ
| РегистрНакопления.ЗаказыМатериаловВПроизводство.Обороты(&НачПериод,&КонПериод,,
| Распоряжение В (&МассивРаспоряжений)) КАК ТоварыКПоступлению
|ГДЕ
| ТоварыКПоступлению.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины В (&МерныеТипыЕдиницИзмерений)
|СГРУППИРОВАТЬ ПО
| ТоварыКПоступлению.Распоряжение,
| ТоварыКПоступлению.Номенклатура,
| ТоварыКПоступлению.Характеристика,
| ТоварыКПоступлению.Серия");
Запрос.УстановитьПараметр("МассивРаспоряжений", МассивРаспоряжений);
Запрос.УстановитьПараметр("МерныеТипыЕдиницИзмерений",
Справочники.УпаковкиЕдиницыИзмерения.МерныеТипыЕдиницИзмерений());
Запрос.УстановитьПараметр("ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров",
ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров);
ГраницыОборотов = ОбщегоНазначенияУТ.ГраницыОборотовРегистра("ЗаказыМатериаловВПроизводство",
"Распоряжение В (&МассивРаспоряжений)", Запрос.Параметры);
Запрос.УстановитьПараметр("НачПериод", ГраницыОборотов.МинимальнаяДата);
Запрос.УстановитьПараметр("КонПериод", ГраницыОборотов.МаксимальнаяДата);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
#КонецОбласти
#Область ФормированиеГиперссылкиВЖурналеПроизводства
Функция ЕстьЗаказыВРаботе(Параметры)
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ЗаказМатериалов.Ссылка КАК Ссылка
|ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ЗаказМатериалов
|ГДЕ
| ЗаказМатериалов.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовМатериаловВПроизводство.Закрыт)
| И &УсловиеОтбора");
Если Параметры.Свойство("Подразделение") И ЗначениеЗаполнено(Параметры.Подразделение) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", "ЗаказМатериалов.Подразделение = &Подразделение");
Запрос.УстановитьПараметр("Подразделение", Параметры.Подразделение);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", "ИСТИНА");
КонецЕсли;
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
Функция СформироватьГиперссылкуСмТакжеВРаботе(Параметры) Экспорт
Если Не ПравоДоступа("Изменение", Метаданные.Документы.ЗаказМатериаловВПроизводство) Тогда
Возврат Неопределено;
КонецЕсли;
ТекстГиперссылки = НСтр("ru = 'Заказы материалов'");
ТекстСсылки = "Документ.ЗаказМатериаловВПроизводство.Форма.ФормаСписка";
Если ЕстьЗаказыВРаботе(Параметры) Тогда
Возврат Новый ФорматированнаяСтрока(ТекстГиперссылки,,,, ТекстСсылки);
Иначе
Возврат Новый ФорматированнаяСтрока(ТекстГиперссылки,,ЦветаСтиля.НезаполненноеПолеТаблицы,, ТекстСсылки);
КонецЕсли;
КонецФункции
#КонецОбласти
#Область Назначения
Функция ШаблонНазначения(Объект) Экспорт
ШаблонНазначения = Справочники.Назначения.ШаблонНового();
Если НаправленияДеятельностиСервер.ЭтоНаправлениеДеятельностиСОбособлениемТоваровИРабот(Объект.НаправлениеДеятельности) Тогда
ШаблонНазначения.НаправлениеДеятельности = Объект.НаправлениеДеятельности;
КонецЕсли;
ВариантОбособления = Константы.ВариантОбособленияМатериаловПриПередачеВПроизводство.Получить();
Если ВариантОбособления <> Перечисления.ВариантыОбособленияМатериаловПриПередачеВПроизводство.НаправлениеДеятельности
Или Не ЗначениеЗаполнено(ШаблонНазначения.НаправлениеДеятельности) Тогда
ШаблонНазначения.Заказ = Объект.Ссылка;
КонецЕсли;
Возврат ШаблонНазначения;
КонецФункции
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Процедура = "Документы.ЗаказМатериаловВПроизводство.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.Версия = "2.5.25.60";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("585b47aa-3f0e-4e83-8e9d-ebc62dd2e19c");
Обработчик.Многопоточный = Истина;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "Документы.ЗаказМатериаловВПроизводство.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.Комментарий = НСтр("ru = 'Заполняет реквизит ""Направление деятельности"" в документе ""Заказ материалов в производство"".'");
ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика();
Приоритет = ПриоритетыВыполнения.Добавить();
Приоритет.Порядок = "До";
Приоритет.Процедура = "РегистрыСведений.РеестрДокументов.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.ПриоритетыВыполнения = ПриоритетыВыполнения;
Читаемые = Новый Массив;
Читаемые.Добавить(Метаданные.Документы.ЗаказМатериаловВПроизводство.ПолноеИмя());
Читаемые.Добавить(Метаданные.Справочники.Назначения.ПолноеИмя());
Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
Изменяемые = Новый Массив;
Изменяемые.Добавить(Метаданные.Документы.ЗаказМатериаловВПроизводство.ПолноеИмя());
Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
Блокируемые = Новый Массив;
Блокируемые.Добавить(Метаданные.Документы.ЗаказМатериаловВПроизводство.ПолноеИмя());
Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
КонецПроцедуры
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПараметрыВыборки = Параметры.ПараметрыВыборки;
ПараметрыВыборки.ПолныеИменаОбъектов = "Документ.ЗаказМатериаловВПроизводство";
ПараметрыВыборки.ПоляУпорядочиванияПриРаботеПользователей.Добавить("Дата УБЫВ");
ПараметрыВыборки.ПоляУпорядочиванияПриОбработкеДанных.Добавить("Ссылка");
ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки();
ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаДокументов.Ссылка КАК Ссылка
|ИЗ
| (ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| МАКСИМУМ(ЕСТЬNULL(ВЫБОР
| КОГДА НЕ ТаблицаТовары.Обособленно
| ТОГДА NULL
| КОГДА ТаблицаТовары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ ДанныеДокумента.ОбосабливатьПоНазначениюЗаказа
| И ТаблицаТовары.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное)
| ТОГДА ДанныеДокумента.Назначение.НаправлениеДеятельности
| ИНАЧЕ ТаблицаТовары.Назначение.НаправлениеДеятельности
| КОНЕЦ, ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка))) КАК НаправлениеДеятельности,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ВЫБОР
| КОГДА НЕ ТаблицаТовары.Обособленно
| ТОГДА NULL
| КОГДА ТаблицаТовары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ ДанныеДокумента.ОбосабливатьПоНазначениюЗаказа
| И ТаблицаТовары.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное)
| ТОГДА ДанныеДокумента.Назначение.НаправлениеДеятельности
| ИНАЧЕ ТаблицаТовары.Назначение.НаправлениеДеятельности
| КОНЕЦ, ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка))) КАК КоличествоНаправленийДеятельности
| ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказМатериаловВПроизводство.Товары КАК ТаблицаТовары
| ПО ДанныеДокумента.Ссылка = ТаблицаТовары.Ссылка
| ГДЕ
| ДанныеДокумента.НаправлениеДеятельности = ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка)
|
| СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДанныеДокумента.Ссылка,
| МАКСИМУМ(ЕСТЬNULL(ТаблицаТовары.Назначение.НаправлениеДеятельности, ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка))),
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ТаблицаТовары.Назначение.НаправлениеДеятельности, ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка)))
| ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказМатериаловВПроизводство.Товары КАК ТаблицаТовары
| ПО ДанныеДокумента.Ссылка = ТаблицаТовары.Ссылка
| ГДЕ
| ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаМатериаловВКладовую)
| И ДанныеДокумента.НаправлениеДеятельности = ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка)
|
| СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка) КАК ТаблицаДокументов
|ГДЕ
| ТаблицаДокументов.КоличествоНаправленийДеятельности = 1
| И ТаблицаДокументов.НаправлениеДеятельности <> ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка)";
Запрос = Новый Запрос(ТекстЗапроса);
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПолноеИмяОбъекта = "Документ.ЗаказМатериаловВПроизводство";
ОбновляемыеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры);
Если ОбновляемыеДанные.Количество() = 0 Тогда
Параметры.ОбработкаЗавершена =
ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
Возврат;
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ОбновляемыеДанные.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ТаблицаДокументов
|ИЗ
| &ОбновляемыеДанные КАК ОбновляемыеДанные
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| МАКСИМУМ(ВЫБОР
| КОГДА ТаблицаРеестрДокументов.КоличествоНаправленийДеятельности = 1
| ТОГДА ТаблицаРеестрДокументов.НаправлениеДеятельности
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ) КАК НаправлениеДеятельности,
| ТаблицаРеестрДокументов.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ДанныеПоЗаполнению
|ИЗ
| (ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| МАКСИМУМ(ЕСТЬNULL(ВЫБОР
| КОГДА НЕ ТаблицаТовары.Обособленно
| ТОГДА NULL
| КОГДА ТаблицаТовары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ ДанныеДокумента.ОбосабливатьПоНазначениюЗаказа
| И ТаблицаТовары.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное)
| ТОГДА ДанныеДокумента.Назначение.НаправлениеДеятельности
| ИНАЧЕ ТаблицаТовары.Назначение.НаправлениеДеятельности
| КОНЕЦ, ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка))) КАК НаправлениеДеятельности,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ВЫБОР
| КОГДА НЕ ТаблицаТовары.Обособленно
| ТОГДА NULL
| КОГДА ТаблицаТовары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ ДанныеДокумента.ОбосабливатьПоНазначениюЗаказа
| И ТаблицаТовары.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное)
| ТОГДА ДанныеДокумента.Назначение.НаправлениеДеятельности
| ИНАЧЕ ТаблицаТовары.Назначение.НаправлениеДеятельности
| КОНЕЦ, ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка))) КАК КоличествоНаправленийДеятельности,
| ДанныеДокумента.Дата КАК Дата
| ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказМатериаловВПроизводство.Товары КАК ТаблицаТовары
| ПО ДанныеДокумента.Ссылка = ТаблицаТовары.Ссылка
| ГДЕ
| ИСТИНА В
| (ВЫБРАТЬ
| ИСТИНА КАК Флаг
| ИЗ
| ТаблицаДокументов КАК ТаблицаДокументов
| ГДЕ
| ТаблицаДокументов.Ссылка = ДанныеДокумента.Ссылка)
|
| СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка,
| ДанныеДокумента.Дата
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДанныеДокумента.Ссылка,
| МАКСИМУМ(ЕСТЬNULL(ТаблицаТовары.Назначение.НаправлениеДеятельности, ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка))),
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕСТЬNULL(ТаблицаТовары.Назначение.НаправлениеДеятельности, ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка))),
| ДанныеДокумента.Дата
| ИЗ
| Документ.ЗаказМатериаловВПроизводство КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказМатериаловВПроизводство.Товары КАК ТаблицаТовары
| ПО ДанныеДокумента.Ссылка = ТаблицаТовары.Ссылка
| ГДЕ
| ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаМатериаловВКладовую)
| И ИСТИНА В
| (ВЫБРАТЬ
| ИСТИНА КАК Флаг
| ИЗ
| ТаблицаДокументов КАК ТаблицаДокументов
| ГДЕ
| ТаблицаДокументов.Ссылка = ДанныеДокумента.Ссылка)
|
| СГРУППИРОВАТЬ ПО
| ДанныеДокумента.Ссылка,
| ДанныеДокумента.Дата) КАК ТаблицаРеестрДокументов
|ГДЕ
| ТаблицаРеестрДокументов.КоличествоНаправленийДеятельности = 1
|
|СГРУППИРОВАТЬ ПО
| ТаблицаРеестрДокументов.Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ТаблицаДокументов.Ссылка КАК Ссылка,
| ЕСТЬNULL(ДанныеПоЗаполнению.НаправлениеДеятельности, ЗНАЧЕНИЕ(Справочник.НаправленияДеятельности.ПустаяСсылка)) КАК НаправлениеДеятельности,
| РеквизитыДокумента.Дата КАК Дата
|ИЗ
| ТаблицаДокументов КАК ТаблицаДокументов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказМатериаловВПроизводство КАК РеквизитыДокумента
| ПО ТаблицаДокументов.Ссылка = РеквизитыДокумента.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеПоЗаполнению КАК ДанныеПоЗаполнению
| ПО ТаблицаДокументов.Ссылка = ДанныеПоЗаполнению.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Дата УБЫВ";
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ОбновляемыеДанные", ОбновляемыеДанные);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ЗафиксироватьТранзакцию();
Продолжить;
КонецЕсли;
ОбъектИзменен = Ложь;
Если НЕ ЗначениеЗаполнено(ДокументОбъект.НаправлениеДеятельности)
И ЗначениеЗаполнено(Выборка.НаправлениеДеятельности) Тогда
ДокументОбъект.НаправлениеДеятельности = Выборка.НаправлениеДеятельности;
ОбъектИзменен = Истина;
КонецЕсли;
Если ОбъектИзменен Тогда
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ДокументОбъект);
Иначе
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ОбновлениеИнформационнойБазыУТ.СообщитьОНеудачнойОбработке(ИнформацияОбОшибке(), Выборка.Ссылка);
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли