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