Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 13:52

Провести документ программно ОтборРазмешение ( Перемещение)

Автор NIL, 29 ноя 2015, 20:02

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

NIL

1с 8.3 УТ11 Есть код который перезаписывает документ на основе данных ТСД, в 1С смотрю все заполнено документ статус-выполнено без ошибок, но по движению видно что документ не проведен после записи хотя изначально он был проведенный подскажите что нужно дописать чтоб он перепровелся после записи.
Код полностью
//////////////////////////////////
//1.если Документ1СОснование = ПоступлениеТоваровУслуг и выгружен по ячейкам, создавать документ ПриходныйОрдерНаТовары и создавать документ "отборразмещениетоваров"
//с видом операции Размещение
//2.если Документ1СОснование = РеализацияТоваровУслуг и выгружен по ячекам, создавать документ РасходныйОрдерНаТовары и создавать документ  "отборразмещениетоваров"
//с видом операции Отбор
//3.если документ добавлен на ТСД, в зависимости от операции ТСД, заполнять табличную часть и вид операции

// Загрузка документа с ячейками в документ 1С "Отбор (размещение) товаров"


ДокументДобавленНаТСД            = Найти(ДокументТСД.Ид, "new")>0;
Документ1СОснованиеМетаданныеИмя = ?(ДокументДобавленНаТСД,"",Нрег(Документ1СОснование.Метаданные().Имя));


ДокТСДПоЯчекам                   = ДокументТСД.ПолучитьПоле("ПоЯчейкам") = 1;
ИспользоватьУпаковкиНоменклатуры = мСоединение.ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
ТаблицаДокументаТСД              = "СтрокиФакт";

Если Документ1СОснованиеМетаданныеИмя = "отборразмещениетоваров" Тогда
   ДокОтборИРазмещениеОбъект = Документ1СОснование.GetObject();   
   ОбнулениеКоличестваТЧ(ДокОтборИРазмещениеОбъект, ДокументМетаданные, СохраненнаяНастройка);
Иначе
   ДокОтборИРазмещениеОбъект        = мСоединение.Документы.ОтборРазмещениеТоваров.СоздатьДокумент();
   ДокОтборИРазмещениеОбъект.Дата   = ТекущаяДата();
   ДокОтборИРазмещениеОбъект.Статус = мСоединение.Перечисления.СтатусыОтборовРазмещенийТоваров.Подготовлено;
   Если не ДокументДобавленНаТСД тогда
      УниверсальныеМеханизмы.КопироватьДанныеРеквизитовИзДокументаВДокумент(Документ1СОснование,ДокОтборИРазмещениеОбъект);
   Иначе
      ДокОтборИРазмещениеОбъект.ВидОперации = мСоединение.Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Отбор;
      НазваниеТЧДокумента1СДляЗаполнения    = "ТоварыОтбор";
      
      //** подбор вида операции документа по операции.Начало.
      Если мStorageConnector = Неопределено Тогда
         Env   = УниверсальныеМеханизмы.ПолучитьEnv(мStorageConnector);
      КонецЕсли;
      ДокументыМСМАРТС = мStorageConnector.ПолучитьДокументы("", Ложь);
      Если ДокументыМСМАРТС <> Неопределено Тогда
         Для инд=0 По ДокументыМСМАРТС.Количество-1 Цикл
            ДокументМСМАРТС = ДокументыМСМАРТС.Элемент(инд);
            Если ДокументМСМАРТС.Ид = ДокументТСД.Ид Тогда
               ОперацияТСД = ДокументМСМАРТС.ИмяТипаДокумента;
               Если ОперацияТСД = "Подбор заказа" Тогда
                  ДокОтборИРазмещениеОбъект.ВидОперации = мСоединение.Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Отбор;
                  НазваниеТЧДокумента1СДляЗаполнения    = "ТоварыОтбор";
               ИначеЕсли ОперацияТСД = "Приемка товара" Тогда
                  ДокОтборИРазмещениеОбъект.ВидОперации = мСоединение.Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Размещение;
                  НазваниеТЧДокумента1СДляЗаполнения    = "ТоварыРазмещение";
               ИначеЕсли ОперацияТСД = "Перемещение по ячейкам" Тогда
                  ДокОтборИРазмещениеОбъект.ВидОперации = мСоединение.Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Перемещение;
               КонецЕсли;
            КонецЕсли;
         КонецЦикла;
      Конецесли;
      //** подбор вида операции документа по операции.Окончание.
   КонецЕсли;
КонецЕсли;

ДокОтборИРазмещениеОбъект.Исполнитель = мСоединение.Справочники.Пользователи.НайтиПоНаименованию(ДокументТСД.ИмяПользователя);

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

Если Документ1СОснованиеМетаданныеИмя = "отборразмещениетоваров" Тогда
   Если мСоединение.XMLСтрока(ДокОтборИРазмещениеОбъект.ВидОперации) = "Размещение" Тогда
      НазваниеТЧДокумента1СДляЗаполнения = "ТоварыРазмещение";
   Иначе
      НазваниеТЧДокумента1СДляЗаполнения = "ТоварыОтбор";
   КонецЕсли;   
Иначе
   Если Документ1СОснованиеМетаданныеИмя = "поступлениетоваровуслуг" или Документ1СОснованиеМетаданныеИмя = "приходныйордернатовары"  Тогда
      ДокОтборИРазмещениеОбъект.ВидОперации = мСоединение.Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Размещение;
      НазваниеТЧДокумента1СДляЗаполнения    = "ТоварыРазмещение";
   ИначеЕсли Документ1СОснованиеМетаданныеИмя = "реализациятоваровуслуг" или Документ1СОснованиеМетаданныеИмя = "расходныйордернатовары"  Тогда
      ДокОтборИРазмещениеОбъект.ВидОперации = мСоединение.Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Отбор;
      НазваниеТЧДокумента1СДляЗаполнения    = "ТоварыОтбор";
   КонецЕсли;
КонецЕсли;

ДокументОтборРазмещениеТоваровВыполненоСОшибками = Ложь;
ДокОтборИРазмещениеОбъектМетаданные =  ДокОтборИРазмещениеОбъект.Метаданные();

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

//+AVA. 18.06.2014. №180.
ВидОперации = мсоединение.XMLСтрока(ДокОтборИРазмещениеОбъект.ВидОперации);
ЗонаНаименование = ДокументТСД.ПолучитьПоле("Зона");
Если значениеЗаполнено(ЗонаНаименование) Тогда
   Зона = мСоединение.Справочники.СкладскиеЯчейки.НайтиПоКоду(ЗонаНаименование);
   Если мСоединение.значениеЗаполнено(Зона)  тогда
      ДокОтборИРазмещениеОбъект.Помещение = Зона.Помещение;
      ДокОтборИРазмещениеОбъект.Склад     = Зона.Владелец;
      Если  ВидОперации = "Отбор" Тогда
         ДокОтборИРазмещениеОбъект.ЗонаОтгрузки = Зона;
      ИначеЕсли  ВидОперации = "Размещение" Тогда
         ДокОтборИРазмещениеОбъект.ЗонаПриемки = Зона;
      КонецЕсли;
   КонецЕсли;
КонецЕсли;   
//-AVA. 18.06.2014. №180.

Если ДокументТСД[ТаблицаДокументаТСД].Количество > 0 И ВидОперации = "Перемещение" Тогда      
   СохраненнаяНастройка.ТабличнаяЧасть = "ТоварыРазмещение";
   ОбнулениеКоличестваТЧ(ДокОтборИРазмещениеОбъект, ДокументМетаданные, СохраненнаяНастройка);
КонецЕсли;

Для Инд1 = 0 По ДокументТСД[ТаблицаДокументаТСД].Количество - 1 Цикл
   СтрокаТаблицыДокументаТСД = ДокументТСД[ТаблицаДокументаТСД].Элемент(Инд1);
   Если  ВидОперации = "Перемещение" Тогда
      ЯчейкаОткудаНаименование = СтрокаТаблицыДокументаТСД.ШтрихкодПервогоМеста;
      Если значениеЗаполнено(ЯчейкаОткудаНаименование) тогда
         ЯчейкаОткуда = мСоединение.Справочники.СкладскиеЯчейки.НайтиПоКоду(ЯчейкаОткудаНаименование);         
         Если  мСоединение.ЗначениеЗаполнено(ЯчейкаОткуда) и не мСоединение.ЗначениеЗаполнено(ДокОтборИРазмещениеОбъект.Помещение) Тогда //заполнение помещения из первой ячейки
            Попытка
               ДокОтборИРазмещениеОбъект.Помещение  = ЯчейкаОткуда.Помещение;
            исключение
            КонецПопытки;
         КонецЕсли;          
      КонецЕсли;
      
      
      НоваяСтрока = НайтиСтрокуВТЧДокумента1С(СтрокаТаблицыДокументаТСД, ДокОтборИРазмещениеОбъект, НазваниеТЧДокумента1СДляЗаполнения, ДокументМетаданные);
      
      Если Не мСоединение.ЗначениеЗаполнено(НоваяСтрока) Тогда
         НоваяСтрока  = ДокОтборИРазмещениеОбъект["ТоварыОтбор"].Добавить();
      КонецЕсли;
      
      УниверсальныеМеханизмы.ЗаполнитьСтрокуТаблицыДокумента1СНаОснованииСтрокиТаблицыДокументаТСД(СтрокаТаблицыДокументаТСД,НоваяСтрока,
      ИспользоватьУпаковкиНоменклатуры,ДокОтборИРазмещениеОбъект,ДокОтборИРазмещениеОбъектМетаданные,НазваниеТЧДокумента1СДляЗаполнения);
      
      Если мСоединение.значениеЗаполнено(ЯчейкаОткуда) тогда
         НоваяСтрока.Ячейка = ЯчейкаОткуда;
      КонецЕсли;
      
      ЯчейкаКудаНаименование = СтрокаТаблицыДокументаТСД.ШтрихкодВторогоМеста;
      Если ЗначениеЗаполнено(ЯчейкаКудаНаименование) тогда
         
         НоваяСтрока = НайтиСтрокуВТЧДокумента1С(СтрокаТаблицыДокументаТСД, ДокОтборИРазмещениеОбъект, "ТоварыРазмещение", ДокументМетаданные);
      
         Если Не мСоединение.ЗначениеЗаполнено(НоваяСтрока) Тогда
            НоваяСтрока  = ДокОтборИРазмещениеОбъект["ТоварыРазмещение"].Добавить();
         КонецЕсли;
                     
         УниверсальныеМеханизмы.ЗаполнитьСтрокуТаблицыДокумента1СНаОснованииСтрокиТаблицыДокументаТСД(СтрокаТаблицыДокументаТСД,НоваяСтрока,
         ИспользоватьУпаковкиНоменклатуры,ДокОтборИРазмещениеОбъект,ДокОтборИРазмещениеОбъектМетаданные,"ТоварыРазмещение");
         НоваяСтрока.Ячейка = мСоединение.Справочники.СкладскиеЯчейки.НайтиПоКоду(ЯчейкаКудаНаименование);
      КонецЕсли;
      
      ДокументОтборРазмещениеТоваровВыполненоСОшибками = СтрокаТаблицыДокументаТСД.КоличествоФакт < СтрокаТаблицыДокументаТСД.КоличествоПлан;
   Иначе
      НоваяСтрока = НайтиСтрокуВТЧДокумента1С(СтрокаТаблицыДокументаТСД, ДокОтборИРазмещениеОбъект, НазваниеТЧДокумента1СДляЗаполнения, ДокументМетаданные);
      
      Если Не мСоединение.ЗначениеЗаполнено(НоваяСтрока) Тогда
         НоваяСтрока  = ДокОтборИРазмещениеОбъект[НазваниеТЧДокумента1СДляЗаполнения].Добавить();
      КонецЕсли;
      //НоваяСтрока  = ДокОтборИРазмещениеОбъект[НазваниеТЧДокумента1СДляЗаполнения].Добавить();
      УниверсальныеМеханизмы.ЗаполнитьСтрокуТаблицыДокумента1СНаОснованииСтрокиТаблицыДокументаТСД(СтрокаТаблицыДокументаТСД,НоваяСтрока,
      ИспользоватьУпаковкиНоменклатуры,ДокОтборИРазмещениеОбъект,ДокОтборИРазмещениеОбъектМетаданные,НазваниеТЧДокумента1СДляЗаполнения);
      ДокументОтборРазмещениеТоваровВыполненоСОшибками = СтрокаТаблицыДокументаТСД.КоличествоФакт < СтрокаТаблицыДокументаТСД.КоличествоПлан;   
   КонецЕсли;
КонецЦикла;

Если ДокументОтборРазмещениеТоваровВыполненоСОшибками Тогда
   ДокОтборИРазмещениеОбъект.Статус = мСоединение.Перечисления.СтатусыОтборовРазмещенийТоваров.ВыполненоСОшибками;
Иначе
   ДокОтборИРазмещениеОбъект.Статус = мСоединение.Перечисления.СтатусыОтборовРазмещенийТоваров.ВыполненоБезОшибок;
КонецЕсли;

Попытка
   //заполнение реквизитов необходимых для проставления серии номенклатуры
   Если глВерсияКонфигурации >= 11000708 Тогда
      ПараметрыУказанияСерий = мСоединение.НоменклатураСервер.ПараметрыУказанияСерий(ДокОтборИРазмещениеОбъект, мСоединение.Документы.ОтборРазмещениеТоваров);
      
      Если ПараметрыУказанияСерий.Свойство("ИмяТЧТовары") Тогда
         ПараметрыУказанияСерий.ИмяТЧТовары = "ТоварыОтбор";
         ПараметрыУказанияСерий.ИмяТЧСерии  = "ТоварыОтбор";
         мСоединение.НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокОтборИРазмещениеОбъект,ПараметрыУказанияСерий);
         
         ПараметрыУказанияСерий.ИмяТЧТовары = "ТоварыРазмещение";
         ПараметрыУказанияСерий.ИмяТЧСерии  = "ТоварыРазмещение";
         мСоединение.НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокОтборИРазмещениеОбъект,ПараметрыУказанияСерий);   
      Иначе
         мСоединение.НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокОтборИРазмещениеОбъект,ПараметрыУказанияСерий.Отбор);
         мСоединение.НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокОтборИРазмещениеОбъект,ПараметрыУказанияСерий.Размещение);   
      КонецЕсли;
   КонецЕсли;
Исключение
   Ошибка("#Ошибка заполнения документа ""Отбор (размещение) товаров""",ОписаниеОшибки(),"Алгоритм заполнения: ""Загрузка документа с ячейками в документ 1С ""Отбор (размещение) товаров""""");
КонецПопытки;

ДокОтборИРазмещениеОбъект.Комментарий = ДокОтборИРазмещениеОбъект.Комментарий + "(Документ обработан из ТСД)";

ДокОтборИРазмещениеОбъект.Записать();

мStorageConnector.SendMessage("Документ """+мСоединение.String(ДокОтборИРазмещениеОбъект.Ссылка)+""" успешно записан в базу 1С!", Константы.ПользовательОсновнойБД.Получить(), ДокТСД.UserId); //AVA. 17.04.2014. №14. Сообщения пользователям ТСД.

//////////////////////////////////////////////////
Пробовал - ДокОтборИРазмещениеОбъект.Записать(РежимЗаписи.Проведение);
Но ругается на синтаксическую ошибку. С командами ПриЗаписи ПослеЗаписи не знаком подскажите как лучше это оформить?

vitasw

<ДокументОбъект>.Записать(РежимЗаписиДокумента.Проведение)

NIL

Нет не дает. ДокОтборИРазмещениеОбъект.Записать(РежимЗаписиДокумента.Проведение);
Проверьте синтаксические ошибки. Подробно (211) Ошибка при вызове метода контекста (Записать)
Как можно еще провести документ?

vitasw

Вы б вместо копипаста попытались бы понять, что же система вам пишет. глупостей система не пишет.

Теги:

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

Рейтинг@Mail.ru

Поиск