Каталог оконных фирм, статистика, цены, статьи. Описание ПВХ профилей, фурнитуры и других комплектующих. Форум. Объявления.  

 форум поддержки VSGroup 

сделать стартовой   добавить в избранное

WinCalc   PaneCut   PTrade   УОП 1С 8   TPS.com.ua
 
 FAQ   •  Поиск  •  Пользователи   •  Регистрация   •  Вход
Текущее время: 29 мар 2024, 11:05 Часовой пояс: UTC + 2 часа [ Летнее время ]





Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Формирование реализации товаров в док. Задание на перевозку
СообщениеДобавлено: 12 июн 2012, 11:08 
Не в сети
Доцент
Доцент

Группа: Зарегистрированные пользователи
Сообщения: 277
Добрый День! У нас есть клиент которому были отгружены м/п конструкции, а доп. материалы (накладки) нет. Через анализ заказа видно что эти накладки не отгружены, в списке задания на перевозку эти заказы попадают, документ заполняется всеми этими накладками, а когда формируем реализацию товаров и услуг, документ пустой, даже контрагента не проставляет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование реализации товаров в док. Задание на перево
СообщениеДобавлено: 12 июн 2012, 11:43 
Не в сети
Ректор
Ректор
Аватара пользователя

Группа: Служба поддержки VSgroup
Сообщения: 23940
база, заказ, контрагент ?

а вообще в задание на перевозку попадают только МП конструкции, накладок там быть не может

_________________
Как правильно задавать вопросы на форуме поддержки
Предоставление услуг с 1.01.2020
Если я пишу "исправил", "сделал" и т.д., это значит что собрана новая сборка и выложена на сайт. Нужно обновить программу чтобы получить исправления.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование реализации товаров в док. Задание на перево
СообщениеДобавлено: 12 июн 2012, 11:50 
Не в сети
Доцент
Доцент

Группа: Зарегистрированные пользователи
Сообщения: 277
А если у нас на складе не было накладок, как мы можем узнать что нужно отгрузить эти накладки в следующую поездку?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование реализации товаров в док. Задание на перево
СообщениеДобавлено: 12 июн 2012, 12:01 
Не в сети
Ректор
Ректор
Аватара пользователя

Группа: Служба поддержки VSgroup
Сообщения: 23940
Только анализом по заказам, по которым уже были отгрузки.

Это стандартная часть 1С, она открыта и вы можете ее дорабатывать самостоятельно

_________________
Как правильно задавать вопросы на форуме поддержки
Предоставление услуг с 1.01.2020
Если я пишу "исправил", "сделал" и т.д., это значит что собрана новая сборка и выложена на сайт. Нужно обновить программу чтобы получить исправления.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование реализации товаров в док. Задание на перево
СообщениеДобавлено: 12 июн 2012, 12:13 
Не в сети
Доцент
Доцент

Группа: Зарегистрированные пользователи
Сообщения: 277
А можно открыть доступ к обработке формирования реализации, что-бы я ее подкорректировала под себя?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование реализации товаров в док. Задание на перево
СообщениеДобавлено: 13 июн 2012, 16:28 
Не в сети
Ректор
Ректор
Аватара пользователя

Группа: Служба поддержки VSgroup
Сообщения: 23940
Код:
Процедура ЗаполнитьТабличнуюЧастьПоЗаказуПокупателяУпр(ЭтотОбъект, ТабличнаяЧасть, ДокументОснование)
   
   Запрос = Новый Запрос;
   
   Товары = ЭтотОбъект.Товары;
   ДоговорКонтрагента=ЭтотОбъект.ДоговорКонтрагента;
   Склад=ЭтотОбъект.Склад;
   Сделка=ДокументОснование;
   УчитыватьНДС=ЭтотОбъект.УчитыватьНДС;
   СуммаВключаетНДС=ЭтотОбъект.СуммаВключаетНДС;
   Организация=ЭтотОбъект.Организация;
   ВидОперации=ЭтотОбъект.ВидОперации;
   ВалютаДокумента=ЭтотОбъект.ВалютаДокумента;
   
мУказаниеСкладов = Константы.УказаниеСкладовВТабличнойЧастиДокументов.Получить();
мУказаниеСкладовВТЧ = (мУказаниеСкладов = Перечисления.ВариантыУказанияСкладовВТабличнойЧастиДокументов.ДляДокументовПоступленияРеализации)
                  Или (мУказаниеСкладов = Перечисления.ВариантыУказанияСкладовВТабличнойЧастиДокументов.ДляДокументовРеализации);
мВалютаРегламентированногоУчета   = глЗначениеПеременной("ВалютаРегламентированногоУчета");
   
   
   ТекстФильтраПоСкладам = "
   |(
   |   ВЫБРАТЬ
   |      ГруппыДоступности.Склад
   |   ИЗ
   |      РегистрСведений.СоставГруппДоступностиСкладов КАК ГруппыДоступности
   |   ГДЕ ГруппыДоступности.ГруппаДоступности = &ГруппаДоступностиСкладов)";
   Если ЗначениеЗаполнено(ДокументОснование.СкладГруппа)
      И ТипЗнч(ДокументОснование.СкладГруппа) = Тип("СправочникСсылка.ГруппыДоступностиСкладов") Тогда
      ГруппаДоступностиСкладов = ДокументОснование.СкладГруппа;
   Иначе
      ГруппаДоступностиСкладов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ГруппаДоступностиСкладов");
   КонецЕсли;
   
   Если ТабличнаяЧасть = Товары Тогда
      ТекстЗапросаПоТЧЗаказа = "
      |ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Номенклатура, ХарактеристикаНоменклатуры, минимум(НомерСтроки) КАК НомерСтроки
      |            ИЗ Документ.ЗаказПокупателя.Товары
      |            ГДЕ Ссылка = &Сделка
      |            Сгруппировать по Номенклатура, ХарактеристикаНоменклатуры) КАК ТЧЗаказа
      |ПО Остатки.Номенклатура = ТЧЗаказа.Номенклатура И Остатки.ХарактеристикаНоменклатуры = ТЧЗаказа.ХарактеристикаНоменклатуры";
   Иначе
      ТекстЗапросаПоТЧЗаказа = "
      |ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Номенклатура, минимум(НомерСтроки) КАК НомерСтроки
      |            ИЗ Документ.ЗаказПокупателя.ВозвратнаяТара
      |            ГДЕ Ссылка = &Сделка
      |            Сгруппировать по Номенклатура) КАК ТЧЗаказа
      |ПО Остатки.Номенклатура = ТЧЗаказа.Номенклатура";
   КонецЕсли;
   
   
   Запрос.УстановитьПараметр("Договор",                  ДоговорКонтрагента);
   Запрос.УстановитьПараметр("Сделка",                   Сделка);
   Запрос.УстановитьПараметр("Склад",                    Склад);
   Запрос.УстановитьПараметр("СтатусТары",               Перечисления.СтатусыПартийТоваров.ВозвратнаяТара);
   Запрос.УстановитьПараметр("Организация",              Организация);
   Запрос.УстановитьПараметр("ГруппаДоступностиСкладов", ГруппаДоступностиСкладов);

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

   Запрос.Текст ="
   |ВЫБРАТЬ
   |   Остатки.Номенклатура                 КАК Номенклатура,
   |   Остатки.ХарактеристикаНоменклатуры   КАК ХарактеристикаНоменклатуры,
   |   NULL                                 КАК СерияНоменклатуры,
   |   NULL                                КАК СрокГодности,
   |   NULL                              КАК СерияНоменклатурыПредставление,
   |   Остатки.ЕдиницаИзмерения             КАК ЕдиницаИзмерения,
   |   Остатки.ЕдиницаИзмерения.Коэффициент КАК Коэффициент,
   |   Остатки.Номенклатура.ЕдиницаХраненияОстатков             КАК ЕдиницаХранения,
   |   Остатки.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
   |   Остатки.Цена                         КАК Цена,
   |   Остатки.ПроцентСкидкиНаценки         КАК ПроцентСкидкиНаценки,
   |   Остатки.ПроцентАвтоматическихСкидок  КАК ПроцентАвтоматическихСкидок,
   |   Остатки.УсловиеАвтоматическойСкидки  КАК УсловиеАвтоматическойСкидки,
   |   Остатки.ЗначениеУсловияАвтоматическойСкидки  КАК ЗначениеУсловияАвтоматическойСкидки,
   |   NULL                                 КАК Склад,
   |   NULL                                 КАК СортировкаПоСкладу,
   |   Остатки.СтавкаНДС                    КАК СтавкаНДС,
   |   Остатки.КоличествоОстаток            КАК КоличествоОстатокПоЗаказу,
   |   Остатки.СуммаВзаиморасчетовОстаток   КАК СуммаОстатокПоЗаказу,
   |   0                                    КАК ОстатокНаСкладе,
   |   0                                    КАК ОстатокРезерваПоСделке,
   |   0                                    КАК ОстатокРезерва,
   |   0                                    КАК ОстатокКПередаче" + ?(ТабличнаяЧасть = Товары, ",
   |   ВЫБОР КОГДА ОстаткиОрганизации.КоличествоОстаток ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ОстаткиОрганизации.КоличествоОстаток КОНЕЦ КАК КоличествоОстатокОрганизации", "") + ",
   |   ВЫБОР КОГДА ТЧЗаказа.НомерСтроки ЕСТЬ NULL ТОГДА 9999999 Иначе ТЧЗаказа.НомерСтроки КОНЕЦ КАК НомерСтрокиЗаказа
   |ИЗ
   |   РегистрНакопления.ЗаказыПокупателей.Остатки(,
//   |ДоговорКонтрагента = &Договор И
   |                                                ЗаказПокупателя = &Сделка
   |" + ?(ТабличнаяЧасть = Товары, "                И СтатусПартии <> &СтатусТары",  "                И СтатусПартии = &СтатусТары") + ") КАК Остатки
   |
   |" + ?(ТабличнаяЧасть = Товары, "ЛЕВОЕ СОЕДИНЕНИЕ
   |   РегистрНакопления.ТоварыОрганизаций.Остатки(,
   |                               Организация = &Организация %Условие_Качество%
   |                                               ) КАК ОстаткиОрганизации
   |ПО
   |   Остатки.Номенклатура = ОстаткиОрганизации.Номенклатура
   |   И Остатки.ХарактеристикаНоменклатуры = ОстаткиОрганизации.ХарактеристикаНоменклатуры", "") + ТекстЗапросаПоТЧЗаказа+"
   |ОБЪЕДИНИТЬ ВСЕ
   |
   |   ВЫБРАТЬ
   |   ОстаткиНаСкладе.Номенклатура                                     КАК Номенклатура,
   |   ОстаткиНаСкладе.ХарактеристикаНоменклатуры                       КАК ХарактеристикаНоменклатуры,
   |   ОстаткиНаСкладе.СерияНоменклатуры                                КАК СерияНоменклатуры,
   |   ОстаткиНаСкладе.СерияНоменклатуры.СрокГодности                   КАК СрокГодности,
   |   ПРЕДСТАВЛЕНИЕ(ОстаткиНаСкладе.СерияНоменклатуры)                 КАК СерияНоменклатурыПредставление,
   |   ОстаткиНаСкладе.Номенклатура.ЕдиницаХраненияОстатков             КАК ЕдиницаИзмерения,
   |   ОстаткиНаСкладе.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Коэффициент,
   |   NULL                                                             КАК ЕдиницаХранения,
   |   NULL                                                             КАК КоэффициентЕдиницыХранения,
   |   0                                                                КАК Цена,
   |   0                                                                КАК ПроцентСкидкиНаценки,
   |   0                                                                КАК ПроцентАвтоматическихСкидок,
   |   NULL                                                             КАК УсловиеАвтоматическойСкидки,
   |   NULL                                                             КАК ЗначениеУсловияАвтоматическойСкидки,
   |   ОстаткиНаСкладе.Склад                                            КАК Склад,
   |   ВЫБОР КОГДА ОстаткиНаСкладе.Склад = &Склад ТОГДА
   |   0
   |   ИНАЧЕ
   |      1
   |   КОНЕЦ                                       КАК СортировкаПоСкладу,
   |   ОстаткиНаСкладе.Номенклатура.СтавкаНДС      КАК СтавкаНДС,
   |   0                                           КАК КоличествоОстатокПоЗаказу,
   |   0                                           КАК СуммаОстатокПоЗаказу,
   |   ОстаткиНаСкладе.КоличествоОстаток           КАК ОстатокНаСкладе,
   |   РезервыОстаткиПоСделке.КоличествоОстаток    КАК ОстатокРезерваПоСделке,
   |   РезервыОстатки.КоличествоОстаток            КАК ОстатокРезерва,
   |   КПередаче.КоличествоОстаток                 КАК ОстатокКПередаче" + ?(ТабличнаяЧасть = Товары, ",
   |   0                                           КАК КоличествоОстатокОрганизации", "") + ",
   |   ВЫБОР КОГДА ТЧЗаказа.НомерСтроки ЕСТЬ NULL ТОГДА 9999999 Иначе ТЧЗаказа.НомерСтроки КОНЕЦ КАК НомерСтрокиЗаказа
   |      
   |   ИЗ
   |   // остатки на складе
   |   (ВЫБРАТЬ
   |      Склад КАК Склад,
   |      Номенклатура КАК Номенклатура,
   |      ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   |      СерияНоменклатуры КАК СерияНоменклатуры,
   |      СУММА(КоличествоОстаток) КАК КоличествоОстаток
   |   ИЗ
   |      (ВЫБРАТЬ
   |         Склад КАК Склад,
   |         Номенклатура КАК Номенклатура,
   |         ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   |         СерияНоменклатуры КАК СерияНоменклатуры,
   |         КоличествоОстаток КАК КоличествоОстаток
   |      ИЗ
   |         РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура В (
   |               ВЫБРАТЬ РАЗЛИЧНЫЕ НОМЕНКЛАТУРА ИЗ
   |               РегистрНакопления.ЗаказыПокупателей.Остатки(,
//   | ДоговорКонтрагента = &Договор И
   |               ЗаказПокупателя = &Сделка
   |" + ?(ТабличнаяЧасть = Товары, "                И СтатусПартии <> &СтатусТары",  "                И СтатусПартии = &СтатусТары") + "))
   |                                               "
   + ?(мУказаниеСкладовВТЧ, ?(ЗначениеЗаполнено(ГруппаДоступностиСкладов), "И Склад В " + ТекстФильтраПоСкладам, ""), "
   |                                        И Склад = &Склад") + "
   |      %Условие_Качество%) КАК ОстаткиНаСкладе
   |      ОБЪЕДИНИТЬ ВСЕ
   |      ВЫБРАТЬ
   |         Склад КАК Склад,
   |         Номенклатура КАК Номенклатура,
   |         ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   |         СерияНоменклатуры КАК СерияНоменклатуры,
   |         КоличествоОстаток КАК КоличествоОстаток
   |      ИЗ
   |         РегистрНакопления.ТоварыВРознице.Остатки(, Номенклатура В (
   |               ВЫБРАТЬ РАЗЛИЧНЫЕ НОМЕНКЛАТУРА ИЗ
   |               РегистрНакопления.ЗаказыПокупателей.Остатки(,
//   | ДоговорКонтрагента = &Договор И
   |                ЗаказПокупателя = &Сделка
   |" + ?(ТабличнаяЧасть = Товары, "                И СтатусПартии <> &СтатусТары",  "                И СтатусПартии = &СтатусТары") + "))
   |                                               "
   + ?(мУказаниеСкладовВТЧ, ?(ЗначениеЗаполнено(ГруппаДоступностиСкладов), "И Склад В " + ТекстФильтраПоСкладам, ""), "
   |                                        И Склад = &Склад") + " %Условие_Качество%
   |      )) КАК ОстаткиНаСкладе
   |   СГРУППИРОВАТЬ ПО
   |      Склад,
   |      Номенклатура,
   |      ХарактеристикаНоменклатуры,
   |      СерияНоменклатуры
   |   ) КАК ОстаткиНаСкладе
   |   ЛЕВОЕ СОЕДИНЕНИЕ // резервы
   |   РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(,"
   + ?(мУказаниеСкладовВТЧ, ?(ЗначениеЗаполнено(ГруппаДоступностиСкладов), "Склад В " + ТекстФильтраПоСкладам + " И ", ""), "
   |                                        Склад = &Склад И ") + "
   |                                      ДокументРезерва = &Сделка
   |                                               ) КАК РезервыОстаткиПоСделке
   |   ПО
   |   ОстаткиНаСкладе.Номенклатура = РезервыОстаткиПоСделке.Номенклатура
   |" + ?(ТабличнаяЧасть = Товары, "
   |   И ОстаткиНаСкладе.ХарактеристикаНоменклатуры = РезервыОстаткиПоСделке.ХарактеристикаНоменклатуры ", "")
   + ?(ТабличнаяЧасть = Товары И ОбособленныйУчет, "
   |   И ОстаткиНаСкладе.СерияНоменклатуры = РезервыОстаткиПоСделке.СерияНоменклатуры ", "")
   + ?(мУказаниеСкладовВТЧ, "
   |   И ОстаткиНаСкладе.Склад      = РезервыОстаткиПоСделке.Склад", "") + "
   |
   |   ЛЕВОЕ СОЕДИНЕНИЕ // резервы
   |   РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(,"
   + ?(мУказаниеСкладовВТЧ, ?(ЗначениеЗаполнено(ГруппаДоступностиСкладов), "Склад В " + ТекстФильтраПоСкладам + " И ", ""), "
   |                                        Склад = &Склад И ") + "
   |                                      ДокументРезерва <> &Сделка
   |                                               ) КАК РезервыОстатки
   |ПО
   |   ОстаткиНаСкладе.Номенклатура = РезервыОстатки.Номенклатура"
   + ?(мУказаниеСкладовВТЧ, "
   |   И ОстаткиНаСкладе.Склад      = РезервыОстатки.Склад", "") + "
   |" + ?(ТабличнаяЧасть = Товары, "
   |   И ОстаткиНаСкладе.ХарактеристикаНоменклатуры = РезервыОстатки.ХарактеристикаНоменклатуры ", "") + "
   |ЛЕВОЕ СОЕДИНЕНИЕ // к передаче
   |   РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(,"
   + ?(мУказаниеСкладовВТЧ, ?(ЗначениеЗаполнено(ГруппаДоступностиСкладов), "Склад В " + ТекстФильтраПоСкладам+" И ", ""), "
   |                                        Склад = &Склад И ") + "
   |" + ?(ТабличнаяЧасть = Товары, "        СтатусПартии <> &СтатусТары",  " СтатусПартии = &СтатусТары") + "
   |                                        %Условие_Качество%
   |                                               ) КАК КПередаче
   |ПО
   |   ОстаткиНаСкладе.Номенклатура = КПередаче.Номенклатура"
   + ?(мУказаниеСкладовВТЧ, "
   |   И ОстаткиНаСкладе.Склад      = КПередаче.Склад", "") + "
   |" + ?(ТабличнаяЧасть = Товары, "И ОстаткиНаСкладе.ХарактеристикаНоменклатуры = КПередаче.ХарактеристикаНоменклатуры", "")
   + СтрЗаменить(ТекстЗапросаПоТЧЗаказа,"Остатки.","ОстаткиНаСкладе.");
   Если ВидОперации <> Перечисления.ВидыОперацийРеализацияТоваров.Брак Тогда
      Запрос.Текст = стрЗаменить(Запрос.Текст,"%Условие_Качество%"," И Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) ");
   Иначе
      Запрос.Текст = стрЗаменить(Запрос.Текст,"%Условие_Качество%"," ");
   КонецЕсли;

   РезультатЗапроса = Запрос.Выполнить();
   
   // Таблица остатков по заказу по результатам запроса
   ТаблицаПоЗаказу = РезультатЗапроса.Выгрузить();
   ТаблицаПоЗаказу.Индексы.Добавить("Номенклатура,ХарактеристикаНоменклатуры");

   ТаблицаПоЗаказу.Индексы.Добавить("НомерСтрокиЗаказа");

   ТаблицаПоЗаказу.Сортировать("НомерСтрокиЗаказа возр");
   
   Сч = 0;
   Пока Сч < ТаблицаПоЗаказу.Количество() Цикл
      СтрокаТаблицы = ТаблицаПоЗаказу.Получить(Сч);
      Если СтрокаТаблицы.КоличествоОстатокПоЗаказу = 0 Тогда
         ТаблицаПоЗаказу.Удалить(СтрокаТаблицы);
      Иначе
         Сч = Сч + 1;
      КонецЕсли;
   КонецЦикла;
   
   // Таблица остатков на складах, резервов и т. п.
   ТаблицаПоОстаткам = РезультатЗапроса.Выгрузить();
   ТаблицаПоОстаткам.Индексы.Добавить("Номенклатура,ХарактеристикаНоменклатуры");

   Сч = 0;
   Пока Сч < ТаблицаПоОстаткам.Количество() Цикл
      СтрокаТаблицы = ТаблицаПоОстаткам.Получить(Сч);
      Если СтрокаТаблицы.ОстатокНаСкладе <= 0 Тогда
         ТаблицаПоОстаткам.Удалить(СтрокаТаблицы);
      Иначе
         Сч = Сч + 1;
      КонецЕсли;
   КонецЦикла;

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

      Для Каждого СтрокаЗаказа Из СтрокиЗаказа Цикл
         
         Если ОстатокКоличестваПоЗаказу <= 0 Тогда
            Прервать;
         КонецЕсли;
         
         Если СтрокаЗаказа.КоличествоОстатокПоЗаказу <= 0 Тогда
            Продолжить;
         Иначе
            ОстатокКоличестваПоСтрокеЗаказа = СтрокаЗаказа.КоличествоОстатокПоЗаказу;
         КонецЕсли;
         
         //  Делаем два прохода в первом списываем все резервы по сделке, во втором, если
         //  количество еще не выбрано, то добираем из свободных остатков.
         Для Сч = 1 По 2 Цикл
            
            Если ОстатокКоличестваПоСтрокеЗаказа <= 0 Тогда
               Продолжить;
            КонецЕсли;
            
            Для каждого СтрокаОстатков Из СтрокиОстатков Цикл
               
               Если ОстатокКоличестваПоСтрокеЗаказа <= 0 Тогда
                  Продолжить;
               КонецЕсли;
               
               Если Сч = 1 Тогда
                  КолОстПоЗаказу  = СтрокаЗаказа.КоличествоОстатокПоЗаказу;
                  КолОстДоступно  = ?(СтрокаОстатков.ОстатокНаСкладе  = NULL, 0, СтрокаОстатков.ОстатокНаСкладе) -
                  ?(СтрокаОстатков.ОстатокРезерва   = NULL, 0, СтрокаОстатков.ОстатокРезерва)  -
                  ?(СтрокаОстатков.ОстатокКПередаче = NULL, 0, СтрокаОстатков.ОстатокКПередаче);
                  
                  Если ТабличнаяЧасть = Товары
                     И НЕ ПревышатьОстаткиОрганизации Тогда
                     КолОстДоступно = Мин(КолОстДоступно, СтрокаТаблицы.КоличествоОстатокОрганизации);
                  КонецЕсли;
                  
               КонецЕсли;
               
               Если СтрокаОстатков.ОстатокНаСкладе = 0 Тогда
                  Продолжить;
               КонецЕсли;
               
               РезервПоСделке           = ?(СтрокаОстатков.ОстатокРезерваПоСделке = NULL, 0, СтрокаОстатков.ОстатокРезерваПоСделке);
               РезервПоДругимСделкам    = ?(СтрокаОстатков.ОстатокРезерва         = NULL, 0, СтрокаОстатков.ОстатокРезерва);
               КПередаче                = ?(СтрокаОстатков.ОстатокКПередаче       = NULL, 0, СтрокаОстатков.ОстатокКПередаче);
               СвободныйОстатокНаСкладе = Макс(СтрокаОстатков.ОстатокНаСкладе - РезервПоДругимСделкам - КПередаче, 0);
               
               КоличествоКСписанию   = ?(Сч = 1, Мин(Макс(СтрокаОстатков.ОстатокНаСкладе-КПередаче,0), РезервПоСделке), Макс(СвободныйОстатокНаСкладе-РезервПоСделке,0));
               КоличествоКЗаполнению = Мин(КоличествоКСписанию, Мин(ОстатокКоличестваПоЗаказу,  ОстатокКоличестваПоСтрокеЗаказа));
               
               Если КоличествоКЗаполнению = 0 Тогда
                  Продолжить;
               КонецЕсли;
               
               ОстатокКоличестваПоЗаказу       = ОстатокКоличестваПоЗаказу       - КоличествоКЗаполнению;
               ОстатокКоличестваПоСтрокеЗаказа = ОстатокКоличестваПоСтрокеЗаказа - КоличествоКЗаполнению;
               СтрокаОстатков.ОстатокНаСкладе  = СтрокаОстатков.ОстатокНаСкладе  - КоличествоКЗаполнению;
               
               СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
               
               СтрокаТабличнойЧасти.Номенклатура = СтрокаОстатков.Номенклатура;
               
               Если ТабличнаяЧасть = Товары Тогда
                  
                  СтрокаТабличнойЧасти.Количество       = ?(ЗначениеЗаполнено(СтрокаЗаказа.Коэффициент),
                  КоличествоКЗаполнению * СтрокаЗаказа.КоэффициентЕдиницыХранения / СтрокаЗаказа.Коэффициент, 0);
                  СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаЗаказа.ЕдиницаИзмерения;
                  СтрокаТабличнойЧасти.Коэффициент      = СтрокаЗаказа.Коэффициент;
                  
                  ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
                  
                  СтрокаТабличнойЧасти.СтавкаНДС                           = СтрокаЗаказа.СтавкаНДС;
                  СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры          = СтрокаОстатков.ХарактеристикаНоменклатуры;
                  СтрокаТабличнойЧасти.СерияНоменклатуры               = СтрокаОстатков.СерияНоменклатуры;
                  Если РезервПоСделке > 0 Тогда
                     Если  ТабличнаяЧасть = Товары И ОбособленныйУчет Тогда
                        //резервирование в разрезе серий
                        //Остаток резерва по сделке можно уменьшить для одной строки остатка
                        СтрокаОстатков.ОстатокРезерваПоСделке              = СтрокаОстатков.ОстатокРезерваПоСделке - КоличествоКЗаполнению;

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

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

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

КонецПроцедуры // ЗаполнитьТабличнуюЧастьПоЗаказуПокупателя()

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

_________________
Как правильно задавать вопросы на форуме поддержки
Предоставление услуг с 1.01.2020
Если я пишу "исправил", "сделал" и т.д., это значит что собрана новая сборка и выложена на сайт. Нужно обновить программу чтобы получить исправления.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB