Имя: Пароль:
1C
1С v8
Функция проведения по счету работает в БП 1.6, но задваивает в УПП 1.3
,
0 egorover
 
10.04.14
10:11
В модуле проведения документа стоит моя функция дополнительных проводок
Процедура ДвиженияПоРегистрам(.......)
Если МоиМодули.ПровестиПо012(Ссылка, Движения) Тогда Возврат; КонецЕсли;
1 egorover
 
10.04.14
10:13
Функция ПровестиПо012(Док, Движения) Экспорт
    
    ТаблицаПоТоварам = Новый ТаблицаЗначений;
    ТаблицаПоТоварам = Док.Товары.Выгрузить();
    ТаблицаПоТоварам.Свернуть("Номенклатура","Количество");
    
    ТаблицаПоТаре    = Новый ТаблицаЗначений;
    ТаблицаПоТаре    = Док.ВозвратнаяТара.Выгрузить();
    ТаблицаПоТаре.Свернуть("Номенклатура","Количество");
    
    ДальшеНеПроводить = Ложь;
    СчетУчета012 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("012");
    Если Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвиженийПоСкладу.Оприходовать Тогда
        Для к = 0 по ТаблицаПоТоварам.Количество() - 1 Цикл
            Проводка = Движения.Хозрасчетный.Добавить();
            Проводка.Период       = Док.Дата;
            Проводка.Организация  = Док.Организация;
            Проводка.Сумма        = ТаблицаПоТоварам[к].Количество * Константы.ЦенаПостановки.Получить();
            Проводка.Содержание   = "Товар передан покупателю на ответственное хранение.";
            
            Проводка.СчетДт       = СчетУчета012;
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Склады",  Док.Склад);
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", ТаблицаПоТоварам[к].Номенклатура);
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,3, Док.а_ВидДоставки);
            Проводка.КоличествоДт = ТаблицаПоТоварам[к].Количество;
        КонецЦикла;
        Для к = 0 по ТаблицаПоТаре.Количество() - 1 Цикл
            Проводка = Движения.Хозрасчетный.Добавить();
            Проводка.Период       = Док.Дата;
            Проводка.Организация  = Док.Организация;
            Проводка.Сумма        = ТаблицаПоТаре[к].Количество * Константы.ЦенаТары.Получить();
            Проводка.Содержание   = "Тара передана покупателю на ответственное хранение.";
            
            Проводка.СчетДт       = СчетУчета012;
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Склады",  Док.Склад);
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", ТаблицаПоТаре[к].Номенклатура);
            Проводка.КоличествоДт = ТаблицаПоТаре[к].Количество;
        КонецЦикла;
        
        ДальшеНеПроводить = Истина;
        
    ИначеЕсли Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвижений.СписатьСоСклада Тогда
        
        Для к = 0 по ТаблицаПоТоварам.Количество() - 1 Цикл
            Проводка = Движения.Хозрасчетный.Добавить();
            Проводка.Период       = Док.Дата;
            Проводка.Организация  = Док.Организация;
            Проводка.Сумма        = ТаблицаПоТоварам[к].Количество * Константы.ЦенаПостановки.Получить();
            Проводка.Содержание   = "Товар получен от покупателя с ответственного хранения.";
            
            Проводка.СчетКт       = СчетУчета012;
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады",  Док.Склад);
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТоварам[к].Номенклатура);
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,3, Док.а_ВидДоставки);
            Проводка.КоличествоКт = ТаблицаПоТоварам[к].Количество;
        КонецЦикла;
        Для к = 0 по ТаблицаПоТаре.Количество() - 1 Цикл
            Проводка = Движения.Хозрасчетный.Добавить();
            Проводка.Период       = Док.Дата;
            Проводка.Организация  = Док.Организация;
            Проводка.Сумма        = ТаблицаПоТаре[к].Количество * Константы.ЦенаТары.Получить();

            Проводка.Содержание   = "Тара получена от покупателя с ответственного хранения.";
            
            Проводка.СчетКт       = СчетУчета012;
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады",  Док.Склад);
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТаре[к].Номенклатура);
            Проводка.КоличествоКт = ТаблицаПоТаре[к].Количество;
        КонецЦикла;
        
    КонецЕсли;
    

    Возврат ДальшеНеПроводить;
    
КонецФункции
2 egorover
 
10.04.14
10:14
В БП 1.6 все получалось, а в УПП 1.3, задваивает проводки
3 egorover
 
10.04.14
10:17
012        156 128    546 448
    Бутылка стеклянная        Товар получен от покупателя с ответственного хранения.
            
012        82    10 660
    Поддоны 1200*1000        Тара получена от покупателя с ответственного хранения.
            
012        82    10 660
    Короб п/пропилен.         Тара получена от покупателя с ответственного хранения.
            
012        574    74 620
    Пластиковая прокладка         Тара получена от покупателя с ответственного хранения.
            
012        156 128    546 448
    Бутылка стеклянная         Товар получен от покупателя с ответственного хранения.
            
012        82    10 660
    Поддоны 1200*1000        Тара получена от покупателя с ответственного хранения.
            
012        82    10 660
    Короб п/пропилен.         Тара получена от покупателя с ответственного хранения.
            
012        574    74 620
    Пластиковая прокладка        Тара получена от покупателя с ответственного хранения.
4 Kalambur
 
10.04.14
10:35
Потому что УПП умная...
5 oslokot
 
10.04.14
10:46
ну а че, если функция два раза запускается, то вполне..
6 egorover
 
10.04.14
10:51
ну а че, если функция два раза запускается, то вполне..

Запускается один раз, проверено Отладчиком
7 egorover
 
10.04.14
10:53
Может в движениях РегистраХозрасчетного не хватает реквизитов? а потом их УПП из-за это умножает на два?
8 egorover
 
10.04.14
10:55
Функция делает все правильно Отладчиком я проверял, количество индексов в ТаблицеЗначений равно количеству строк в Табличных Значениях документов и Проводка = Движения.Хозрасчетный.Добавить(); добавляет сколько нужно Движений, но вот что потом в глубинах проведения УПП, может все таки я не правильно передаю из модуля проведения Если МоиМодули.ПровестиПо012(Ссылка, Движения) Тогда Возврат, вот эти "Движения" может мне не передавать?
9 Kalambur
 
10.04.14
11:14
(8) запросто, потому что в упп проведение в подписках
10 Kalambur
 
10.04.14
11:14
+ и тебе туда советую работать
11 shuhard
 
10.04.14
11:47
(0) Проводка.Записать(Ложь)
12 egorover
 
10.04.14
12:03
Сейчас проверю
13 cw014
 
10.04.14
12:04
Шедевр:

    ТаблицаПоТоварам = Новый ТаблицаЗначений;
    ТаблицаПоТоварам = Док.Товары.Выгрузить();
14 egorover
 
10.04.14
12:07
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
Метод объекта не обнаружен (Записать)
15 egorover
 
10.04.14
12:35
... о мамочки мои, слався имя твое  
    
(0) Проводка.Записать(Ложь) - ошибка
стал играть
Проводка.Активность = Ложь - ошибка вышел на процедуру УПП
16 egorover
 
10.04.14
12:35
/ Записывет набор записей в базу данных.
//
Процедура ЗаписатьДвижения(ДвиженияРегистра, ТаблицаДвиженийРегистра, Замещать, ДвижениеНДСПродукции = Ложь, ТолькоВключениеНДСВСтоимость = Неопределено)

    // При замещении нужно удалять записи, сформированные прошлым списанием партий (СписаниеПартий=Истина),
    // если у регистра есть реквизит СписаниеПартий, то нужно удалить строки с Истина
    // Для списания партий НДС предусмотрены еще 2 реквизита СписаниеПартийНДС и НДСПродукции
    // Движения по налоговому учету могут создаваться при проведении по бухгалтерскому учету если в документе
    // установлен флаг "Отражать в налоговом учете"
    
    ДМ = ДвиженияРегистра.Метаданные();
    ЕстьРеквизитСписаниеПартий = (ДМ.Реквизиты.Найти("СписаниеПартий") <> Неопределено);
17 egorover
 
10.04.14
12:36
При замещении нужно удалять записи, сформированные прошлым списанием партий (СписаниеПартий=Истина),
18 egorover
 
10.04.14
12:37
вот чего ему не хватало

    Проводка.СписаниеПартий       = Истина;

всё закрываем
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.