Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 фев 2025, 15:00

Некорректно отрабатывает запрос заполнения документа

Автор Yanawerg, 17 дек 2024, 08:51

0 Пользователей и 2 гостей просматривают эту тему.

Максим75

Yanawerg, смотрите, Вам еще на первое письмо написали, что где код заполнения документа?
как Вы пытаетесь заполнить документ на основании другого документа, покажите.

Yanawerg

@Максим75, Процедура ОбработкаЗаполнения(Основание)

ОтражатьВУправленческомУчете = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОтражатьДокументыВУправленческомУчете");
ОтражатьВБухгалтерскомУчете  = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОтражатьДокументыВБухгалтерскомУчете");
ОтражатьВНалоговомУчете      = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОтражатьДокументыВНалоговомУчете")
И ОтражатьВБухгалтерскомУчете;

ДокументОснование = Основание;

Если ТипЗнч(Основание) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда

// Заполнение шапки
ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание);
Склад = Основание.СкладОрдер;

Если НЕ ЗначениеЗаполнено(ПодразделениеОрганизации) Тогда
ПодразделениеОрганизации = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделениеОрганизации");
КонецЕсли;

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;

Если ЗначениеЗаполнено(Основание.Сделка)
И Не Основание.Сделка.ДоговорКонтрагента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомитентом Тогда
Заказ = Основание.Сделка;
КонецЕсли;

ЗаполнитьТоварыПоДокументуПоступлениеТоваровУслуг(Основание);

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ОтчетПроизводстваЗаСмену")
ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.АктОбОказанииПроизводственныхУслуг") Тогда

// Заполнение шапки
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект);

Организация                  = Основание.Организация;
ОтражатьВБухгалтерскомУчете  = Основание.ОтражатьВБухгалтерскомУчете;
ОтражатьВНалоговомУчете      = Основание.ОтражатьВНалоговомУчете;
ОтражатьВУправленческомУчете = Основание.ОтражатьВУправленческомУчете;
Подразделение                = Основание.Подразделение;
ПодразделениеОрганизации     = Основание.ПодразделениеОрганизации;

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;

Если ТипЗнч(Основание) = Тип("ДокументСсылка.ОтчетПроизводстваЗаСмену") Тогда
Склад                    = Основание.Склад;
КонецЕсли;

ТаблицаМатериалы = Материалы.Выгрузить();
ТаблицаМатериалы.Очистить();

Если Основание.РаспределениеМатериалов.Количество() > 0 Тогда

ЕстьСчетЗатратВТЧ = Истина;

Для Каждого ТекСтрокаМатериалы Из Основание.РаспределениеМатериалов Цикл

НоваяСтрока = ТаблицаМатериалы.Добавить();
НоваяСтрока.Номенклатура               = ТекСтрокаМатериалы.Номенклатура;
НоваяСтрока.ХарактеристикаНоменклатуры = ТекСтрокаМатериалы.ХарактеристикаНоменклатуры;
НоваяСтрока.СерияНоменклатуры          = ТекСтрокаМатериалы.СерияНоменклатуры;
НоваяСтрока.ЕдиницаИзмерения           = ТекСтрокаМатериалы.ЕдиницаИзмерения;
НоваяСтрока.Количество                 = ТекСтрокаМатериалы.Количество;
НоваяСтрока.Коэффициент                = ТекСтрокаМатериалы.Коэффициент;
НоваяСтрока.НоменклатурнаяГруппа       = ТекСтрокаМатериалы.НоменклатурнаяГруппа;
НоваяСтрока.Качество                   = Справочники.Качество.Новый;
НоваяСтрока.ОтражениеВУСН              = Перечисления.ОтражениеВУСН.Принимаются;

Если ТипЗнч(Основание) = Тип("ДокументСсылка.ОтчетПроизводстваЗаСмену") Тогда
НоваяСтрока.СтатьяЗатрат           = ?( Основание.ВводитьСтатьиЗатратПоСтрокам, ТекСтрокаМатериалы.СтатьяЗатрат, Основание.СтатьяЗатрат);
НоваяСтрока.Заказ                  = ТекСтрокаМатериалы.Заказ;
Иначе
НоваяСтрока.СтатьяЗатрат           = ТекСтрокаМатериалы.СтатьяЗатрат;
НоваяСтрока.Заказ                  = Основание.Сделка;
КонецЕсли;

//Если переработка, то счета затрат нельзя брать из документа основания, так как
//в документе-основании это балансовые счета, а в требовании-накладной забалансовые.
//Здесь мы заполняем всегда, а ниже для переработки перезаполним.
НоваяСтрока.СчетЗатрат                 = ТекСтрокаМатериалы.СчетЗатрат;
НоваяСтрока.СчетЗатратНУ               = ТекСтрокаМатериалы.СчетЗатратНУ;

КонецЦикла;

Иначе

ЕстьСчетЗатратВТЧ = Ложь;

Для Каждого ТекСтрокаМатериалы Из Основание.Материалы Цикл

НоваяСтрока = ТаблицаМатериалы.Добавить();
НоваяСтрока.Номенклатура               = ТекСтрокаМатериалы.Номенклатура;
НоваяСтрока.ХарактеристикаНоменклатуры = ТекСтрокаМатериалы.ХарактеристикаНоменклатуры;
НоваяСтрока.СерияНоменклатуры          = ТекСтрокаМатериалы.СерияНоменклатуры;
НоваяСтрока.ЕдиницаИзмеренияМест       = ТекСтрокаМатериалы.ЕдиницаИзмеренияМест;
НоваяСтрока.ЕдиницаИзмерения           = ТекСтрокаМатериалы.ЕдиницаИзмерения;
НоваяСтрока.Количество                 = ТекСтрокаМатериалы.Количество;
НоваяСтрока.Коэффициент                = ТекСтрокаМатериалы.Коэффициент;
НоваяСтрока.КоличествоМест    = ?(НоваяСтрока.Коэффициент <> 0, НоваяСтрока.Количество * НоваяСтрока.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / НоваяСтрока.Коэффициент, 0);
НоваяСтрока.НоменклатурнаяГруппа       = ТекСтрокаМатериалы.Номенклатура.НоменклатурнаяГруппаЗатрат;
НоваяСтрока.Качество                   = Справочники.Качество.Новый;
НоваяСтрока.ОтражениеВУСН              = Перечисления.ОтражениеВУСН.Принимаются;

Если ТипЗнч(Основание) = Тип("ДокументСсылка.ОтчетПроизводстваЗаСмену") Тогда
НоваяСтрока.СтатьяЗатрат           = ?( Основание.ВводитьСтатьиЗатратПоСтрокам, ТекСтрокаМатериалы.СтатьяЗатрат, Основание.СтатьяЗатрат);
НоваяСтрока.Заказ                  = ТекСтрокаМатериалы.Заказ;
Иначе
НоваяСтрока.СтатьяЗатрат           = ТекСтрокаМатериалы.СтатьяЗатрат;
НоваяСтрока.Заказ                  = Основание.Сделка;
КонецЕсли;

КонецЦикла;

КонецЕсли;

ТаблицаМатериалы.ЗаполнитьЗначения(Склад, "Склад");
ТаблицаМатериалы.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, ЕдиницаИзмеренияМест, ЕдиницаИзмерения, Коэффициент,
|НоменклатурнаяГруппа, СтатьяЗатрат, Заказ, ЗаказРезерв, Качество, Счет, СчетНУ, СчетЗатрат, СчетЗатратНУ, ОтражениеВУСН, ЗаказРезерв, Склад",
"КоличествоМест, Количество");
Материалы.Загрузить(ТаблицаМатериалы);

Для Каждого ДанныеСтроки Из Материалы Цикл
НадоЗаполнятьСчетаЗатрат =
//1 случай - его не было в ТЧ совсем (не использовалась для заполнения ТЧ РаспределениеМатериалов)
НЕ ЕстьСчетЗатратВТЧ 
//2 случай - для переработки нельзя брать счет затрат из РаспределенияМатериалов, т.к. он там балансовый, а здесь нужен забалансовый
ИЛИ ДанныеСтроки.СтатьяЗатрат.СтатусМатериальныхЗатрат = Перечисления.СтатусыМатериальныхЗатратНаПроизводство.ПринятыеВПереработку;

ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл(ДанныеСтроки, "Материалы", ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете, , НадоЗаполнятьСчетаЗатрат);
КонецЦикла;

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ВнутреннийЗаказ") Тогда

Если Не УправлениеЗаказами.ИспользоватьВнутренниеЗаказы() Тогда
Возврат;
КонецЕсли;
Если Основание.ВидЗаказа = Перечисления.ВидыВнутреннегоЗаказа.НаСклад Тогда
Возврат;
КонецЕсли;

// Заполнение шапки
ОтражатьВУправленческомУчете = Истина;
Подразделение = Основание.Заказчик;
Организация   = Основание.Организация;
Ответственный = Основание.Ответственный;
Комментарий   = Основание.Комментарий;

// Для корректного заполнения счетов БУ и НУ, которые зависят от подразеделения организации
ПодразделениеОрганизации = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделениеОрганизации");

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;

РезультатЗапроса = ОстаткиТоваровПоВнутреннемуЗаказу_СУчетомРезервов(Основание, Дата);
ЗаполнитьМатериалыПоВнутреннемуЗаказу(РезультатЗапроса);

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.АктОтбораПробНоменклатуры") Тогда

// Заполнение шапки
Организация   = Основание.Организация;
Склад         = Основание.Склад;
Подразделение = Основание.Подразделение;

// Для корректного заполнения счетов БУ и НУ, которые зависят от подразеделения организации
ПодразделениеОрганизации = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделениеОрганизации");

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;

ТаблицаМатериалы = Материалы.Выгрузить();

Если Основание.ВидОперации = Перечисления.ВидыОперацийАктОтбораПробНоменклатуры.ДляВнешнейСертификации Тогда

НоваяСтрока = ТаблицаМатериалы.Добавить();
НоваяСтрока.ЕдиницаИзмерения           = Основание.Номенклатура.ЕдиницаХраненияОстатков;
НоваяСтрока.Коэффициент                = Основание.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
НоваяСтрока.Количество                 = Основание.Испытания;
НоваяСтрока.Номенклатура               = Основание.Номенклатура;
НоваяСтрока.СерияНоменклатуры          = Основание.СерияНоменклатуры;
НоваяСтрока.СтатьяЗатрат = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяСтатьяЗатратОтбораПробВнешняя");
НоваяСтрока.Качество                   = Справочники.Качество.Новый;
НоваяСтрока.ОтражениеВУСН              = Перечисления.ОтражениеВУСН.Принимаются;

НоваяСтрока = ТаблицаМатериалы.Добавить();
НоваяСтрока.ЕдиницаИзмерения           = Основание.Номенклатура.ЕдиницаХраненияОстатков;
НоваяСтрока.Коэффициент                = Основание.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
НоваяСтрока.Количество                 = Основание.КонтрольнаяПроба;
НоваяСтрока.Номенклатура               = Основание.Номенклатура;
НоваяСтрока.СерияНоменклатуры          = Основание.СерияНоменклатуры;
НоваяСтрока.СтатьяЗатрат = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяСтатьяЗатратОтбораПробВнешняя");
НоваяСтрока.Качество                   = Справочники.Качество.Новый;
НоваяСтрока.ОтражениеВУСН              = Перечисления.ОтражениеВУСН.Принимаются;

Иначе

ТабЧастьКопия = Основание.РаспределениеПоЛабораториям.Выгрузить();
ТабЧастьКопия.Свернуть("Подразделение");
Если ТабЧастьКопия.Количество() = 1 Тогда
// Первое, оно же единственное подразделение из таб.части.
Подразделение = ТабЧастьКопия[0].Подразделение;
ИначеЕсли ТабЧастьКопия.Количество() = 0 Тогда
Подразделение = Основание.Подразделение;
Иначе
// Первое подразделение из таб.части.
СписокВыбора = Новый СписокЗначений;
СписокВыбора.ЗагрузитьЗначения( ТабЧастьКопия.ВыгрузитьКолонку("Подразделение"));
СписокВыбора.СортироватьПоПредставлению();
Выбор = СписокВыбора.ВыбратьЭлемент("Выберите тестирующее подразделение (лабораторию).");
Если Выбор = Неопределено Тогда // Не заполнять таб.часть.
Подразделение = Неопределено;
Иначе
Подразделение = Выбор.Значение;
КонецЕсли;
КонецЕсли;

Для Каждого ТекСтрокаТовары Из Основание.РаспределениеПоЛабораториям Цикл

Если Не ТекСтрокаТовары.Подразделение = Подразделение Тогда
Продолжить;
КонецЕсли;

НоваяСтрока = ТаблицаМатериалы.Добавить();
НоваяСтрока.ЕдиницаИзмерения           = Основание.Номенклатура.ЕдиницаХраненияОстатков;
НоваяСтрока.Коэффициент                = Основание.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
НоваяСтрока.Количество                 = ТекСтрокаТовары.Количество;
НоваяСтрока.КоличествоМест             = ТекСтрокаТовары.Количество;
НоваяСтрока.Номенклатура               = Основание.Номенклатура;
НоваяСтрока.СерияНоменклатуры          = Основание.СерияНоменклатуры;
НоваяСтрока.СтатьяЗатрат = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяСтатьяЗатратОтбораПробВнутренняя");
НоваяСтрока.Качество                   = Справочники.Качество.Новый;
НоваяСтрока.ОтражениеВУСН              = Перечисления.ОтражениеВУСН.Принимаются;

КонецЦикла;

КонецЕсли;

ТаблицаМатериалы.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, СерияНоменклатуры, ЕдиницаИзмерения, Коэффициент, НоменклатурнаяГруппа, СтатьяЗатрат, Заказ, Качество, Счет, СчетНУ, СчетЗатрат, СчетЗатратНУ, ЗаказРезерв, ОтражениеВУСН",
"КоличествоМест, Количество");
Материалы.Загрузить(ТаблицаМатериалы);

ЗаполнитьСчетаУчетаВТабЧасти(Материалы, "Материалы", ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете);

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ИнвентаризацияТоваровНаСкладе") Тогда

// Заполнение шапки
Организация = Основание.Организация;
Склад       = Основание.Склад;

// Для корректного заполнения счетов БУ и НУ, которые зависят от подразеделения организации
ПодразделениеОрганизации = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделениеОрганизации");

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;

Для Каждого СтрокаТЧ Из Основание.Товары Цикл

Недостача = СтрокаТЧ.КоличествоУчет - СтрокаТЧ.Количество;
Если Недостача <= 0 Тогда
Продолжить;
КонецЕсли;

НоваяСтрока = Материалы.Добавить();
НоваяСтрока.Склад                        = Основание.Склад;
НоваяСтрока.Номенклатура                 = СтрокаТЧ.Номенклатура;
НоваяСтрока.ЕдиницаИзмерения             = СтрокаТЧ.ЕдиницаИзмерения;
НоваяСтрока.ЕдиницаИзмеренияМест         = СтрокаТЧ.ЕдиницаИзмеренияМест;
НоваяСтрока.Коэффициент                  = СтрокаТЧ.Коэффициент;
НоваяСтрока.Качество                     = СтрокаТЧ.Качество;
НоваяСтрока.СерияНоменклатуры            = СтрокаТЧ.СерияНоменклатуры;
НоваяСтрока.НоменклатурнаяГруппа         = НоваяСтрока.Номенклатура.НоменклатурнаяГруппа;
НоваяСтрока.СтатьяЗатрат                 = НоваяСтрока.Номенклатура.СтатьяЗатрат;
НоваяСтрока.Количество                   = Недостача;
НоваяСтрока.ХарактеристикаНоменклатуры   = СтрокаТЧ.ХарактеристикаНоменклатуры;

// Рассчитать реквизиты табличной части.
ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти( НоваяСтрока, ЭтотОбъект);
ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл  ( НоваяСтрока, "Материалы", Истина, Истина);

КонецЦикла;

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаданиеНаПроизводство") Тогда

// Заполнение шапки
Организация   = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяОрганизация");
Подразделение = Основание.Подразделение;
ПодразделениеОрганизации = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделениеОрганизации");

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;

ОбработкаЗаполненияПоЗаданиюНаПроизводство(Основание);

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ПланПроизводстваПоСменам") Тогда

Организация   = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяОрганизация");
Подразделение = Основание.Подразделение;
ПодразделениеОрганизации = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделениеОрганизации");

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;

ОбработкаЗаполненияПоПлануПроизводстваПоСменам(Основание);

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ПеремещениеТоваров") Тогда

Организация              = Основание.Организация;
Подразделение            = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделение");
ПодразделениеОрганизации = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной("глТекущийПользователь"), "ОсновноеПодразделениеОрганизации");
Склад = Основание.СкладПолучатель;

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;

ОтражатьВУправленческомУчете = Основание.ОтражатьВУправленческомУчете;
ОтражатьВБухгалтерскомУчете  = Основание.ОтражатьВБухгалтерскомУчете;
ОтражатьВНалоговомУчете      = Основание.ОтражатьВНалоговомУчете;

Для Каждого СтрокаТЧ Из Основание.Товары Цикл

НоваяСтрока = Материалы.Добавить();
НоваяСтрока.Номенклатура               = СтрокаТЧ.Номенклатура;
НоваяСтрока.ХарактеристикаНоменклатуры = СтрокаТЧ.ХарактеристикаНоменклатуры;
НоваяСтрока.СерияНоменклатуры          = СтрокаТЧ.СерияНоменклатуры;

НоваяСтрока.Количество                 = СтрокаТЧ.Количество;
НоваяСтрока.КоличествоМест             = СтрокаТЧ.КоличествоМест;
НоваяСтрока.Коэффициент                = СтрокаТЧ.Коэффициент;
НоваяСтрока.ЕдиницаИзмерения           = СтрокаТЧ.ЕдиницаИзмерения;
НоваяСтрока.ЕдиницаИзмеренияМест       = СтрокаТЧ.ЕдиницаИзмеренияМест;
НоваяСтрока.Склад                      = Основание.СкладПолучатель;

НоваяСтрока.Заказ                      = СтрокаТЧ.ДокументРезерва;
НоваяСтрока.Качество                   = СтрокаТЧ.Качество;

НоваяСтрока.Счет                       = СтрокаТЧ.НовыйСчетУчетаБУ;
НоваяСтрока.СчетНУ                     = СтрокаТЧ.НовыйСчетУчетаНУ;

// Выполнить общие действия для всех документов при изменении номенклатуры.
ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(НоваяСтрока, ЭтотОбъект);

УправлениеЗатратами.ЗаполнитьНоменклатурнуюГруппуИСтатьюЗатратВСтрокеТабличногоПоля(НоваяСтрока);
ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл  (НоваяСтрока, "Материалы", ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете);
УправлениеЗатратами.ЗаполнитьСчетЗатратВСтрокеТабличногоПоля(НоваяСтрока, ПодразделениеОрганизации, НоваяСтрока.СтатьяЗатрат,,,"Счет");

//СтрокаТабличнойЧасти.Качество = Справочники.Качество.Новый;
НоваяСтрока.ОтражениеВУСН = Перечисления.ОтражениеВУСН.Принимаются;

КонецЦикла;

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказНаПроизводство") Тогда

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;
ЗаказыНаПроизводствоИПереработку.ЗаполнитьТребованиеНакладнаяПоРезервамЗаказаНаПроизводство(ЭтотОбъект, Основание);


// Заполним реквизиты из стандартного набора по документу основанию.
ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание);
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект);

// Попробуем заполнить подразделение организации.
ПодразделениеОрганизации = УправлениеЗатратами.ПолучитьПодразделениеОрганизации(
Организация,
Подразделение,
ОтражатьВБухгалтерскомУчете
);

///Жариков

СгенерированоОтчетомПС = Истина;
НДСвСтоимостиТоваров = Перечисления.ДействиеНДСВСтоимостиТоваров.НеИзменять;

Склад = Справочники.Склады.НайтиПоКоду("000000002"); ///Производство;

СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("С1001    ");

ОтражатьВБухгалтерскомУчете = Истина;
ОтражатьВУправленческомУчете = Истина;


СчетаУчетаВДокументах.ИнтерактивноПерезаполнитьСчетаУчета(
ЭтотОбъект,
Ложь,
Новый Структура("Материалы"),
ОтражатьВБухгалтерскомУчете,
ОтражатьВНалоговомУчете);

СчетУчетаЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.01.1");

Для Каждого Строка Из Основание.Материалы Цикл

Материал = Материалы.Добавить();
Материал.ЕдиницаИзмерения = Строка.ЕдиницаИзмерения;
Материал.Заказ = Строка.Заказ;
Материал.Количество = Строка.Количество;

//Синицын 07.02.2018 (
Материал.Спецификация = Строка.Спецификация;
//Синицын 07.02.2018 )

Материал.Номенклатура = Строка.Номенклатура;
Материал.ХарактеристикаНоменклатуры = Строка.ХарактеристикаНоменклатуры;
Материал.НоменклатурнаяГруппа = Строка.Номенклатура.НоменклатурнаяГруппа;

//Синицын 08.04.2019 (
Если ЗначениеЗаполнено(Материал.Спецификация) Тогда
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
   | СпецификацииНоменклатурыВыходныеИзделия.Ссылка КАК Спецификация,
   | СпецификацииНоменклатурыВыходныеИзделия.Номенклатура КАК Номенклатура
   |ИЗ
   | Справочник.СпецификацииНоменклатуры.ВыходныеИзделия КАК СпецификацииНоменклатурыВыходныеИзделия
   |ГДЕ
   | СпецификацииНоменклатурыВыходныеИзделия.Ссылка = &Спецификация
   | И СпецификацииНоменклатурыВыходныеИзделия.Ссылка.Активная";
Запрос.УстановитьПараметр("Спецификация", Материал.Спецификация);
РезультатВыбор = Запрос.Выполнить().Выбрать();
Если РезультатВыбор.Следующий() Тогда
Материал.НоменклатурнаяГруппа = РезультатВыбор.Номенклатура.НоменклатурнаяГруппа;
КонецЕсли;
КонецЕсли;
//Синицын 08.04.2019 )

Материал.Коэффициент = Строка.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
Материал.Качество = Справочники.Качество.Новый;
Материал.СтатьяЗатрат = СтатьяЗатрат;
Материал.СтатьяЗатратНДС = СтатьяЗатрат;

ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл(
Материал,
"Материалы",
ОтражатьВБухгалтерскомУчете,
ОтражатьВНалоговомУчете);

Материал.СчетЗатрат = СчетУчетаЗатрат;

КонецЦикла;

//\Жариков

///////////////

//Синицын 19.05.2018 добавляем загруженные пакеты из базы СТП(
СписокСпецификаций = новый СписокЗначений;
Для каждого СтрМатериалы из Материалы Цикл
Если СписокСпецификаций.НайтиПоЗначению(СтрМатериалы.Спецификация) <> Неопределено Тогда
Продолжить;
КонецЕсли;
СписокСпецификаций.Добавить(СтрМатериалы.Спецификация);
КонецЦикла;

ЗапросСП = новый Запрос;
ЗапросСП.Текст = "ВЫБРАТЬ
| ПоступлениеТоваровУслугТовары.Ссылка КАК Поступление,
| ПоступлениеТоваровУслугТовары.Номенклатура,
| ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры,
                | ПоступлениеТоваровУслугТовары.НомерСтроки КАК ТоварыНомерСтроки,
| ПоступлениеТоваровУслугТовары.Комментарий,
| ПоступлениеТоваровУслугТовары.Количество,
| ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
| ПоступлениеТоваровУслугТовары.Коэффициент,
| СпецНом.Ссылка КАК Спецификация
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры КАК СпецНом
| ПО (СпецНом.Наименование ПОДОБНО ПоступлениеТоваровУслугТовары.Комментарий)
|ГДЕ
| ПоступлениеТоваровУслугТовары.Ссылка.Проведен
| И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент = &Контрагент
| И СпецНом.Активная
| И СпецНом.Ссылка В(&СписокСпецификаций)";

ЗапросСП.УстановитьПараметр("Контрагент",Справочники.Контрагенты.НайтиПоКоду("ОК000003"));
ЗапросСП.УстановитьПараметр("СписокСпецификаций",СписокСпецификаций);

ВыборкаСП = ЗапросСП.Выполнить().Выбрать();

Пока ВыборкаСП.Следующий() Цикл
Материал = Материалы.Добавить();
Материал.ЕдиницаИзмерения = ВыборкаСП.ЕдиницаИзмерения;
Материал.Количество = ВыборкаСП.Количество;
Материал.Спецификация = ВыборкаСП.Спецификация;
Материал.Номенклатура = ВыборкаСП.Номенклатура;
Материал.ХарактеристикаНоменклатуры = ВыборкаСП.ХарактеристикаНоменклатуры;
Материал.НоменклатурнаяГруппа = ВыборкаСП.Номенклатура.НоменклатурнаяГруппа;
Материал.Коэффициент = ВыборкаСП.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
Материал.Качество = Справочники.Качество.Новый;
Материал.СтатьяЗатрат = СтатьяЗатрат;
Материал.СтатьяЗатратНДС = СтатьяЗатрат;

ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл(
Материал,
"Материалы",
ОтражатьВБухгалтерскомУчете,
ОтражатьВНалоговомУчете);

Материал.СчетЗатрат = СчетУчетаЗатрат;

ОбъектПНК = ВыборкаСП.Поступление.ПолучитьОбъект();
ТекНомерСтроки = ВыборкаСП.ТоварыНомерСтроки - 1;
ОбъектПНК.Товары[ТекНомерСтроки].Загружен = Истина;
ОбъектПНК.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
//Синицын 19.05.2018 )

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда

Если ПодразделениеОрганизации.Владелец <> Организация Тогда
ПодразделениеОрганизации = Неопределено;
КонецЕсли;


//ЗаказыНаПроизводствоИПереработку.ЗаполнитьТребованиеНакладнаяПоРезервамЗаказаНаПроизводство(ЭтотОбъект, Основание);


// Заполним реквизиты из стандартного набора по документу основанию.
ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание);
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект);

//// Попробуем заполнить подразделение организации.
//ПодразделениеОрганизации = УправлениеЗатратами.ПолучитьПодразделениеОрганизации(
//Организация,
//Подразделение,
//ОтражатьВБухгалтерскомУчете
//);

СгенерированоОтчетомПС = Истина;
НДСвСтоимостиТоваров = Перечисления.ДействиеНДСВСтоимостиТоваров.НеИзменять;

Склад = Справочники.Склады.НайтиПоКоду("000000002"); ///Производство;

СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("С1001    ");

ОтражатьВБухгалтерскомУчете = Истина;
ОтражатьВУправленческомУчете = Истина;


СчетаУчетаВДокументах.ИнтерактивноПерезаполнитьСчетаУчета(
ЭтотОбъект,
Ложь,
Новый Структура("Материалы"),
ОтражатьВБухгалтерскомУчете,
ОтражатьВНалоговомУчете);

СчетУчетаЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.01.1");

///

тзКомплектующие = Новый ТаблицаЗначений;
тзКомплектующие.Колонки.Добавить("Номенклатура");
тзКомплектующие.Колонки.Добавить("ХарактеристикаНоменклатуры");
тзКомплектующие.Колонки.Добавить("Количество");
тзКомплектующие.Колонки.Добавить("ЕдиницаИзмерения");
тзКомплектующие.Колонки.Добавить("Спецификация");

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | ЗаказНаПроизводствоМатериалы.Ссылка,
               | ЗаказНаПроизводствоМатериалы.Номенклатура,
               | ЗаказНаПроизводствоМатериалы.ХарактеристикаНоменклатуры,
               | ЗаказНаПроизводствоМатериалы.Количество,
               | ЗаказНаПроизводствоМатериалы.ЕдиницаИзмерения,
               | ЗаказНаПроизводствоМатериалы.Спецификация
               |ИЗ
               | Документ.ЗаказНаПроизводство.Материалы КАК ЗаказНаПроизводствоМатериалы
               |ГДЕ
               | ЗаказНаПроизводствоМатериалы.Номенклатура = &Номенклатура
               | И ЗаказНаПроизводствоМатериалы.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
               | И ЗаказНаПроизводствоМатериалы.Количество = &Количество
               | И ЗаказНаПроизводствоМатериалы.ЕдиницаИзмерения = &ЕдиницаИзмерения
               | И ЗаказНаПроизводствоМатериалы.Спецификация = &Спецификация";

Для Каждого Строка Из Основание.Товары Цикл
Запрос.УстановитьПараметр("Номенклатура", Строка.Номенклатура);
Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", Строка.ХарактеристикаНоменклатуры);
Запрос.УстановитьПараметр("Количество", Строка.Количество);
Запрос.УстановитьПараметр("ЕдиницаИзмерения", Строка.ЕдиницаИзмерения);
Запрос.УстановитьПараметр("Спецификация", Строка.Спецификация);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл

Строка1 = тзКомплектующие.Добавить();
Строка1.Номенклатура = Выборка.Номенклатура;
Строка1.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры;
Строка1.Количество = Выборка.Количество * Строка.Количество;
Строка1.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;
Строка1.Спецификация = Выборка.Спецификация;

КонецЦикла;
КонецЦикла;
тзКомплектующие.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, Спецификация", "Количество");

///

Для Каждого Строка Из тзКомплектующие Цикл

Если Строка.Номенклатура = Неопределено Тогда
Продолжить;
КонецЕсли;

Материал = Материалы.Добавить();
Материал.ЕдиницаИзмерения = Строка.ЕдиницаИзмерения;
//Материал.Заказ = Основание;
Материал.Количество = Строка.Количество;
Материал.КоличествоИзСпецификации = Строка.Количество;
Материал.Спецификация = Строка.Спецификация;

Материал.Номенклатура = Строка.Номенклатура;
Материал.ХарактеристикаНоменклатуры = Строка.ХарактеристикаНоменклатуры;
Если Не Строка.Номенклатура = Неопределено Тогда
Материал.НоменклатурнаяГруппа = Строка.Номенклатура.НоменклатурнаяГруппа;
Материал.Коэффициент = Строка.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
КонецЕсли;
Материал.Качество = Справочники.Качество.Новый;
Материал.СтатьяЗатрат = СтатьяЗатрат;
Материал.СтатьяЗатратНДС = СтатьяЗатрат;

ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл(
Материал,
"Материалы",
ОтражатьВБухгалтерскомУчете,
ОтражатьВНалоговомУчете);

Материал.СчетЗатрат = СчетУчетаЗатрат;

КонецЦикла;
//////////////

//Синицын 19.05.2018 добавляем загруженные пакеты из базы СТП(
СписокСпецификаций = новый СписокЗначений;
Для каждого СтрМатериалы из Материалы Цикл
Если СписокСпецификаций.НайтиПоЗначению(СтрМатериалы.Спецификация) <> Неопределено Тогда
Продолжить;
КонецЕсли;
СписокСпецификаций.Добавить(СтрМатериалы.Спецификация);
КонецЦикла;

ЗапросСП = новый Запрос;
ЗапросСП.Текст = "ВЫБРАТЬ
| ПоступлениеТоваровУслугТовары.Ссылка КАК Поступление,
| ПоступлениеТоваровУслугТовары.Номенклатура,
| ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры,
                | ПоступлениеТоваровУслугТовары.НомерСтроки КАК ТоварыНомерСтроки,
| ПоступлениеТоваровУслугТовары.Комментарий,
| ПоступлениеТоваровУслугТовары.Количество,
| ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
| ПоступлениеТоваровУслугТовары.Коэффициент,
| СпецНом.Ссылка КАК Спецификация
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры КАК СпецНом
| ПО (СпецНом.Наименование ПОДОБНО ПоступлениеТоваровУслугТовары.Комментарий)
|ГДЕ
| ПоступлениеТоваровУслугТовары.Ссылка.Проведен
| И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент = &Контрагент
| И СпецНом.Активная
| И СпецНом.Ссылка В(&СписокСпецификаций)";

ЗапросСП.УстановитьПараметр("Контрагент",Справочники.Контрагенты.НайтиПоКоду("ОК000003"));
ЗапросСП.УстановитьПараметр("СписокСпецификаций",СписокСпецификаций);

ВыборкаСП = ЗапросСП.Выполнить().Выбрать();

Пока ВыборкаСП.Следующий() Цикл
Материал = Материалы.Добавить();
Материал.ЕдиницаИзмерения = ВыборкаСП.ЕдиницаИзмерения;
Материал.Количество = ВыборкаСП.Количество;
Материал.Спецификация = ВыборкаСП.Спецификация;
Материал.Номенклатура = ВыборкаСП.Номенклатура;
Материал.ХарактеристикаНоменклатуры = ВыборкаСП.ХарактеристикаНоменклатуры;
Материал.НоменклатурнаяГруппа = ВыборкаСП.Номенклатура.НоменклатурнаяГруппа;
Материал.Коэффициент = ВыборкаСП.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
Материал.Качество = Справочники.Качество.Новый;
Материал.СтатьяЗатрат = СтатьяЗатрат;
Материал.СтатьяЗатратНДС = СтатьяЗатрат;

ЗаполнитьСчетаУчетаВСтрокеТабЧастиРегл(
Материал,
"Материалы",
ОтражатьВБухгалтерскомУчете,
ОтражатьВНалоговомУчете);

Материал.СчетЗатрат = СчетУчетаЗатрат;

ОбъектПНК = ВыборкаСП.Поступление.ПолучитьОбъект();
ТекНомерСтроки = ВыборкаСП.ТоварыНомерСтроки - 1;
ОбъектПНК.Товары[ТекНомерСтроки].Загружен = Истина;
ОбъектПНК.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
//Синицын 19.05.2018 )


ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ВыпускПродукции") Тогда
ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание);
ПодразделениеОрганизации = Основание.ПодразделениеОрганизации;

ТабПродукция = Основание.Продукция.Выгрузить();
ТабМатериалы = Материалы.Выгрузить();
СтруктураДопКолонок = Новый Структура("Заказ, НоменклатурнаяГруппа");

УправлениеПроизводством.ЗаполнитьМатериалыПоСпецификациям(ТабМатериалы, ТабПродукция, СтруктураДопКолонок,, Дата);
ТабМатериалы.ЗаполнитьЗначения(Справочники.Качество.Новый, "Качество");

ТабМатериалы.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения, НоменклатурнаяГруппа, Заказ, Коэффициент, Качество", "Количество");

Для Каждого СтрокаМат Из ТабМатериалы Цикл
НоваяСтрока = Материалы.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаМат);
НоваяСтрока.СтатьяЗатрат = СтрокаМат.Номенклатура.СтатьяЗатрат;
ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти( НоваяСтрока, Ссылка);
КонецЦикла;
ЗаполнитьСчетаУчетаВТабЧасти(Материалы, "Материалы", ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете);

КонецЕсли;

Если ТипЗнч(Основание) = Тип("СправочникСсылка.НастройкиЗаполненияФорм") Тогда
// Заполнение по настройке
ХранилищаНастроек.ДанныеФорм.ЗаполнитьОбъектПоНастройке(ЭтотОбъект, Основание, Документы.ТребованиеНакладная.СтруктураДополнительныхДанныхФормы());

Иначе

// Заполнить реквизиты значениями по умолчанию.
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект);
Если НЕ ЗначениеЗаполнено(Проект) Тогда
Проект = Подразделение.ОсновнойПроект;
КонецЕсли;

КонецЕсли;

КонецПроцедуры


Это полный код процедуры "Как вы естественно уже поняли", не исключаю варианта что я оплошал и делаю вообще не то что нужно и вообще не так.

Максим75

Yanawerg, у Вас должно попасть вот сюда

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказНаПроизводство") Тогда

смотрите, что там заполняется.
табличную часть Материалы дважды заполняете, посмотрите внимательно все.

Yanawerg

Максим75, Если пытаюсь изменить запрос там где вы предложили то ничего не меняется.
Хоть я и делаю из заказа на производство но отрабатывает из того где основание заказ покупателя

Максим75

Цитата: Yanawerg от 17 дек 2024, 16:06Максим75, Если пытаюсь изменить запрос там где вы предложили то ничего не меняется.
Хоть я и делаю из заказа на производство но отрабатывает из того где основание заказ покупателя

в смысле? не попадает в эту ветку условного оператора?

Yanawerg

Максим75, Да, получается пропускает её, через отладчик не останавливает там и сразу дальше идёт.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск