Имя: Пароль:
1C
1C 7.7
v7: Помогите разобраться пожалуйста
0 max805
 
24.01.13
04:04
Есть документ ПеремещениеТМЦ в табличную часть добавил колонку "Заказ" все работает то что нужно но есть трабла как сделать так что бы с помощью подбора номенклатуры количество попадало не в колонку "количество" (по умолчанию) а в колонку "Заказ" Заранее спасибо
1 КонецЦикла
 
24.01.13
04:10
поменять обработку подбора в глобальнике
2 max805
 
24.01.13
04:10
это понятно. но тогда заденет все документы
а нужно тока в одном
3 КонецЦикла
 
24.01.13
04:11
Ну так условие на Вид() поможет?
4 max805
 
24.01.13
04:14
Процедура глОбработкаПодбора(Конт, ВыбЗнач, ЕстьЦена, ЕстьНДС, ЕстьНП, ЕстьСкидка, ЕстьВидТМЦ)  Экспорт
   Перем ТаблЧасть;
   
   // Инициалищзация переменных
   ФлагиИзТипаЦен = 0;
   ЦенаВклНП      = 1;
   ЦенаВклНДС     = 1;
   УчитыватьНП    = ЕстьНП;
   УчитыватьНДС   = ЕстьНДС;
   Если ЕстьЦена = 1 Тогда
           
       // Флаги включения налогов в сумму определяеются типом цен,
       // кроме случая перемещения из розницы (цены в этом случае берутся из регистра с налогами)
       ФлагиИзТипаЦен = 1;
       Если Конт.Вид() = "ПеремещениеТМЦ" Тогда
           Если Конт.Склад.РозничныйСклад = 1 Тогда
               ФлагиИзТипаЦен = 0;
           КонецЕсли;
       КонецЕсли;
       ФлагиИзТипаЦен = ФлагиИзТипаЦен * глЕстьРеквизитШапки("ТипЦен", Конт.Вид());
       
       Если ФлагиИзТипаЦен  = 1 Тогда
           
           // Подбирали по ценам с налогами, заданными в типе цен
           ЦенаВклНП  = Конт.ТипЦен.ЦенаВклНП;
           ЦенаВклНДС = Конт.ТипЦен.ЦенаВклНДС;
           
       Иначе // считаем, что подбирали в соответствии с флагами в документе
           
           // По умолчанию считаем, что если нет в документе флагов учета налогов,
           // то цена со всеми налогами (как в рознице)
           Если глЕстьРеквизитШапки("СуммаВклНП", Конт.Вид()) = 1 Тогда
               ЦенаВклНП   = Конт.СуммаВклНП;
           КонецЕсли;    
       
           Если глЕстьРеквизитШапки("СуммаВклНДС", Конт.Вид()) = 1 Тогда
               ЦенаВклНДС  = Конт.СуммаВклНДС;
           КонецЕсли;    
       КонецЕсли;    
       
       // Выкручивать или накручивать налоги надо только если они в документе учитываются
       Если глЕстьРеквизитШапки("УчитыватьНП", Конт.Вид()) = 1 Тогда
           УчитыватьНП = ЕстьНП * Конт.УчитыватьНП;
       КонецЕсли;    
       
       Если глЕстьРеквизитШапки("УчитыватьНДС", Конт.Вид()) = 1 Тогда
           УчитыватьНДС = ЕстьНДС * Конт.УчитыватьНДС;
       КонецЕсли;    
       
   КонецЕсли;
   
   ТипЗнач        = ТипЗначенияСтр(ВыбЗнач);
   Если ТипЗнач = "ТаблицаЗначений" Тогда
       ВыбЗнач.ВыбратьСтроки();
       
       Конт.ВыгрузитьТабличнуюЧасть(ТаблЧасть, "Номенклатура, Единица, НомерСтроки");
       
       ТаблЧасть.НоваяКолонка("Индекс");
       ТаблЧасть.ВыбратьСтроки();
       
       Пока ТаблЧасть.ПолучитьСтроку() = 1 Цикл
           ТаблЧасть.Индекс = ТаблЧасть.Номенклатура.Код + ТаблЧасть.Единица.Океи.Код;
       КонецЦикла;
       
       Пока ВыбЗнач.ПолучитьСтроку() <> 0 Цикл
           Номенклатура = ВыбЗнач.Номенклатура;
           Индекс = Номенклатура.Код + Номенклатура.ОсновнаяЕдиница.Океи.Код;
           // поищем номенклатуру
           Поз = 0;
           Если ТаблЧасть.НайтиЗначение(Индекс, Поз, "Индекс") = 1 Тогда
               // нашли, увеличиваем количество
               Конт.ПолучитьСтрокуПоНомеру(Поз);
               Конт.Количество = Конт.Количество + ВыбЗнач.Количество;
               
               // Вызывать пересчет имеет смысл только если есть цена
               Если ЕстьЦена = 1 Тогда
                   глПересчетТаблЧасти(Конт,"Количество");            
               КонецЕсли;
           Иначе
               // добавляем новую строку
           
               Конт.НоваяСтрока();
               Если ЕстьВидТМЦ = 1 Тогда
                   Конт.ВидТМЦ = ВыбЗнач.ВидТМЦ;
                   Если Конт.Вид()="ПоступлениеТМЦ" Тогда Конт.ВидТМЦ=Перечисление.ВидыТМЦ.Товар;КонецЕсли;
               КонецЕсли;
               
               Конт.Номенклатура = Номенклатура;
               Конт.Количество   = ВыбЗнач.Количество;
               Конт.Единица      = Номенклатура.ОсновнаяЕдиница;
               Конт.Коэффициент  = Конт.Единица.Коэффициент;    
               
               Если ЕстьНДС = 1 Тогда
                   Конт.СтавкаНДС = Номенклатура.СтавкаНДС;
               КонецЕсли;    
               
               Если ЕстьНП= 1 Тогда
                   Конт.СтавкаНП  = Номенклатура.СтавкаНП;
               КонецЕсли;    
               
               Если ЕстьЦена = 1 Тогда
                       
                   глПересчитатьЦенуВДокументе(Конт, УчитыватьНП, УчитыватьНДС, ВыбЗнач.Цена, Конт.Валюта,
                                               ЦенаВклНП, ЦенаВклНДС);
                   глПересчетТаблЧасти(Конт,"Цена");            
                   
               КонецЕсли;
               
           КонецЕсли;
           
       КонецЦикла;
       
   КонецЕсли;
   Если Конт.Вид()="Реализация" Тогда
   Иначе
       Конт.Форма.Обновить(0);
   КонецЕсли;
КонецПроцедуры // глОбработкаПодбора()
5 max805
 
24.01.13
04:15
это обработка подбора где нужно поставить значение "заказ" никак не пойму?
6 Godofsin
 
24.01.13
04:25
Конт.НоваяСтрока();
               Если ЕстьВидТМЦ = 1 Тогда
                   Конт.ВидТМЦ = ВыбЗнач.ВидТМЦ;
                   Если Конт.Вид()="ПоступлениеТМЦ" Тогда Конт.ВидТМЦ=Перечисление.ВидыТМЦ.Товар;КонецЕсли;
               КонецЕсли;
               
               Конт.Номенклатура = Номенклатура;
               Конт.Количество   = ВыбЗнач.Количество;
               Конт.Единица      = Номенклатура.ОсновнаяЕдиница;
               Конт.Коэффициент  = Конт.Единица.Коэффициент;
7 КонецЦикла
 
24.01.13
04:26
Вот это место

Если ТаблЧасть.НайтиЗначение(Индекс, Поз, "Индекс") = 1 Тогда
               // нашли, увеличиваем количество

               Конт.ПолучитьСтрокуПоНомеру(Поз);
               Конт.Количество = Конт.Количество + ВыбЗнач.Количество;
               
               // Вызывать пересчет имеет смысл только если есть цена

               Если ЕстьЦена = 1 Тогда
                   глПересчетТаблЧасти(Конт,"Количество");            
               КонецЕсли;
           Иначе
               // добавляем новую строку

           
               Конт.НоваяСтрока();
               Если ЕстьВидТМЦ = 1 Тогда
                   Конт.ВидТМЦ = ВыбЗнач.ВидТМЦ;
                   Если Конт.Вид()="ПоступлениеТМЦ" Тогда Конт.ВидТМЦ=Перечисление.ВидыТМЦ.Товар;КонецЕсли;
               КонецЕсли;
               
               Конт.Номенклатура = Номенклатура;
               Конт.Количество   = ВыбЗнач.Количество;
               Конт.Единица      = Номенклатура.ОсновнаяЕдиница;
               Конт.Коэффициент  = Конт.Единица.Коэффициент;    

Вот так наверное:

Если Конт.Вид() = "ПеремещениеТМЦ" Тогда
Конт.Заказ = Конт.Заказ+ ВыбЗнач.Количество;
Иначе
Конт.Количество = Конт.Количество + ВыбЗнач.Количество;
КонецЕсли;

//....

Если Конт.Вид() = "ПеремещениеТМЦ" Тогда
Конт.Заказ = ВыбЗнач.Количество;
Иначе
Конт.Количество   = ВыбЗнач.Количество;
КонецЕсли;
8 max805
 
24.01.13
04:46
спасибо получилось
Ошибка? Это не ошибка, это системная функция.