v8: Функция проведения по счету работает в БП 1.6, но задваивает в УПП 1.3

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

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

    Возврат ДальшеНеПроводить;
    
КонецФункции
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Consultant_1C 114 10.04.14 10:30 Сейчас в теме
А через отладчик не пробовали помониторить?
3. egorover 114 10.04.14 10:32 Сейчас в теме
Всё мониторил, но в УПП там настолько все .., храню надежду может кто сталкивался...
4. Consultant_1C 114 10.04.14 10:32 Сейчас в теме
Может ситуация в том что у вас в первом условии в исключительной ситуации в переменную ДальшеНеПроводить не присваивается значение Истина ?
Т.е. вот в этом условии в конце
Если Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвижений.СписатьСоСклада Тогда
5. egorover 114 10.04.14 10:36 Сейчас в теме
С этим всё отлично, ДальшеНеПроводить = Истина, то что нужно, делает проведение только по моему модулю и не делает остальное,
проблема при другом условии ДальшеНеПроводить = Ложь - когда совместно есть записи движения 1С и моего модуля
6. egorover 114 10.04.14 10:37 Сейчас в теме
Такое чувство когда я делаю записи в движения он их каким то способом делает вначале и делает в конце
7. Consultant_1C 114 10.04.14 10:39 Сейчас в теме
ИначеЕсли Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвижений.СписатьСоСклада Тогда
        
        Для к = 0 по ТаблицаПоТоварам.Количество() - 1 Цикл
            Проводка = Движения.Хозрасчетный.Добавить();
            Проводка.Период       = Док.Дата;
            Проводка.Организация  = Док.Организация;
            Проводка.Сумма        = ТаблицаПоТоварам[к].Количество * Константы.ЦенаПостановки.Получить();
            Проводка.Содержание   = "Товар получен от покупателя с ответственного хранения.";
            
            Проводка.СчетКт       = СчетУчета012;
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады",  Док.Склад);
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТоварам[к].Номенклатура);
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,3, Док.а_ВидДоставки);
            Проводка.КоличествоКт = ТаблицаПоТоварам[к].Количество;
        КонецЦикла;
        Для к = 0 по ТаблицаПоТаре.Количество() - 1 Цикл
            Проводка = Движения.Хозрасчетный.Добавить();
            Проводка.Период       = Док.Дата;
            Проводка.Организация  = Док.Организация;
            Проводка.Сумма        = ТаблицаПоТаре[к].Количество * Константы.ЦенаТары.Получить();

            Проводка.Содержание   = "Тара получена от покупателя с ответственного хранения.";
            
            Проводка.СчетКт       = СчетУчета012;
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады",  Док.Склад);
            БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТаре[к].Номенклатура);
            Проводка.КоличествоКт = ТаблицаПоТаре[к].Количество;
        КонецЦикла;
        ДальшеНеПроводить = Истина; // Вот тут я имел в виду добавить или это не то ??
    КонецЕсли;
    
Показать
8. egorover 114 10.04.14 10:42 Сейчас в теме
Функция ПровестиПо012(Док, Движения) Экспорт

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

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

ДальшеНеПроводить = Ложь;

При входе в функцию я ей присаиваю Ложь
9. Consultant_1C 114 10.04.14 10:44 Сейчас в теме
Да но потом в первом условии вы присваиваете Истина после цикла а во втором ничего не делаете. Поэтому я и поинтересовался может дело в этом =)
10. Consultant_1C 114 10.04.14 10:46 Сейчас в теме
Блин скиньте код где идет обращение к вашей функции.
11. egorover 114 10.04.14 10:47 Сейчас в теме
Функция делает все правильно Отладчиком я проверял, количество индексов в ТаблицеЗначений равно количеству строк в Табличных Значениях документов и Проводка = Движения.Хозрасчетный.Добавить(); добавляет сколько нужно Движений, но вот что потом в глубинах проведения УПП, может все таки я не правильно передаю из модуля проведения Если МоиМодули.ПровестиПо012(Ссылка, Движения) Тогда Возврат, вот эти движения может мне не передавать?
12. egorover 114 10.04.14 10:48 Сейчас в теме
// По результату запроса по шапке документа формируем движения по регистрам.
//
// Параметры:
// РежимПроведения - режим проведения документа (оперативный или неоперативный),
// СтруктураШапкиДокумента - выборка из результата запроса по шапке документа,
// ТаблицаПоТоварам - таблица значений, содержащая данные для проведения и проверки ТЧ Товары,
// ТаблицаПоСкидкам - таблица значений, содержащая данные для проведения и проверки ТЧ Скидки,
// ТаблицаПоТаре - таблица значений, содержащая данные для проведения и проверки ТЧ "Возвратная тара",
// ТаблицаПоУслугам - таблица значений, содержащая данные для проведения и проверки ТЧ "Услуги",
// Отказ - флаг отказа в проведении,
// Заголовок - строка, заголовок сообщения об ошибке проведения.
//
Процедура ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента,
ТаблицаПоТоварам, ТаблицаПоСкидкам, ТаблицаПоТаре, ТаблицаПоУслугам,
ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам, Отказ, Заголовок)

//+
Если МоиМодули.ПровестиПо012(Ссылка, Движения) Тогда Возврат; КонецЕсли;
//--


ТаблицаПоКомплектам = УправлениеЗапасами.СформироватьТаблицуКомплектующих(ТаблицаПоТоварам, ЭтотОбъект);

СчетаУчетаВДокументах.ЗаполнитьИПроверитьЗаполнениеСчетовУчетаТабличнойЧасти("СоставНабора", ТаблицаПоКомплектам, СтруктураШапкиДокумента, Отказ, Заголовок);

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

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

    Возврат ДальшеНеПроводить;
    
КонецФункции
Показать
15. egorover 114 10.04.14 11:02 Сейчас в теме
Спасибо большое, может я неправильно сформулировал, мне это условие нужно и нужен возврата ДальшеНеПроводить = Ложь; при котором возникали и мои движения и стандартные движения, но вот при этом случае он и задваивает мои движения - почему задваивает?
16. Consultant_1C 114 10.04.14 11:05 Сейчас в теме
Кокой документ в УПП сейчас открою посмотрю =)
17. egorover 114 10.04.14 11:13 Сейчас в теме
РеализацияТоваровИУслуг
18. egorover 114 10.04.14 12:37 Сейчас в теме
с форума нашёл спасибо всем
19. egorover 114 10.04.14 12:38 Сейчас в теме
... о мамочки мои, слався имя твое

(0) Проводка.Записать(Ложь) - ошибка
стал играть
Проводка.Активность = Ложь - ошибка вышел на процедуру УПП
20. egorover 114 10.04.14 12:38 Сейчас в теме
/ Записывет набор записей в базу данных.

//

Процедура ЗаписатьДвижения(ДвиженияРегистра, ТаблицаДвиженийРегистра, Замещать, ДвижениеНДСПродукции = Ложь, ТолькоВключениеНДСВСтоимость = Неопределено)

// При замещении нужно удалять записи, сформированные прошлым списанием партий (СписаниеПартий=Истина),

// если у регистра есть реквизит СписаниеПартий, то нужно удалить строки с Истина

// Для списания партий НДС предусмотрены еще 2 реквизита СписаниеПартийНДС и НДСПродукции

// Движения по налоговому учету могут создаваться при проведении по бухгалтерскому учету если в документе

// установлен флаг "Отражать в налоговом учете"


ДМ = ДвиженияРегистра.Метаданные();
ЕстьРеквизитСписаниеПартий = (ДМ.Реквизиты.Найти("СписаниеПартий") <> Неопределено);
21. egorover 114 10.04.14 12:39 Сейчас в теме
При замещении нужно удалять записи, сформированные прошлым списанием партий (СписаниеПартий=Истина),
22. egorover 114 10.04.14 12:39 Сейчас в теме
вот чего ему не хватало

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

всё закрываем
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот