v8: Функция проведения по счету работает в БП 1.6, но задваивает в УПП 1.3
Функция ПровестиПо012(Док, Движения) Экспорт
ТаблицаПоТоварам = Новый ТаблицаЗначений;
ТаблицаПоТоварам = Док.Товары.Выгрузить();
ТаблицаПоТоварам.Свернуть("Номенклатура","Количество");
ТаблицаПоТаре = Новый ТаблицаЗначений;
ТаблицаПоТаре = Док.ВозвратнаяТара.Выгрузить();
ТаблицаПоТаре.Свернуть("Номенклатура","Количество");
ДальшеНеПроводить = Ложь;
СчетУчета012 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("012");
Если Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвиженийПоСкладу.Оприходовать Тогда
Для к = 0 по ТаблицаПоТоварам.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТоварам[к].Количество * Константы.ЦенаПостановки.Получить();
Проводка.Содержание = "Товар передан покупателю на ответственное хранение.";
Проводка.СчетДт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", ТаблицаПоТоварам[к].Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,3, Док.а_ВидДоставки);
Проводка.КоличествоДт = ТаблицаПоТоварам[к].Количество;
КонецЦикла;
Для к = 0 по ТаблицаПоТаре.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТаре[к].Количество * Константы.ЦенаТары.Получить();
Проводка.Содержание = "Тара передана покупателю на ответственное хранение.";
Проводка.СчетДт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", ТаблицаПоТаре[к].Номенклатура);
Проводка.КоличествоДт = ТаблицаПоТаре[к].Количество;
КонецЦикла;
ДальшеНеПроводить = Истина;
ИначеЕсли Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвижений.СписатьСоСклада Тогда
Для к = 0 по ТаблицаПоТоварам.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТоварам[к].Количество * Константы.ЦенаПостановки.Получить();
Проводка.Содержание = "Товар получен от покупателя с ответственного хранения.";
Проводка.СчетКт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТоварам[к].Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,3, Док.а_ВидДоставки);
Проводка.КоличествоКт = ТаблицаПоТоварам[к].Количество;
КонецЦикла;
Для к = 0 по ТаблицаПоТаре.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТаре[к].Количество * Константы.ЦенаТары.Получить();
Проводка.Содержание = "Тара получена от покупателя с ответственного хранения.";
Проводка.СчетКт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТаре[к].Номенклатура);
Проводка.КоличествоКт = ТаблицаПоТаре[к].Количество;
КонецЦикла;
КонецЕсли;
Возврат ДальшеНеПроводить;
КонецФункции
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Может ситуация в том что у вас в первом условии в исключительной ситуации в переменную ДальшеНеПроводить не присваивается значение Истина ?
Т.е. вот в этом условии в конце
Т.е. вот в этом условии в конце
Если Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвижений.СписатьСоСклада Тогда
С этим всё отлично, ДальшеНеПроводить = Истина, то что нужно, делает проведение только по моему модулю и не делает остальное,
проблема при другом условии ДальшеНеПроводить = Ложь - когда совместно есть записи движения 1С и моего модуля
проблема при другом условии ДальшеНеПроводить = Ложь - когда совместно есть записи движения 1С и моего модуля
ИначеЕсли Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвижений.СписатьСоСклада Тогда
Для к = 0 по ТаблицаПоТоварам.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТоварам[к].Количество * Константы.ЦенаПостановки.Получить();
Проводка.Содержание = "Товар получен от покупателя с ответственного хранения.";
Проводка.СчетКт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТоварам[к].Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,3, Док.а_ВидДоставки);
Проводка.КоличествоКт = ТаблицаПоТоварам[к].Количество;
КонецЦикла;
Для к = 0 по ТаблицаПоТаре.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТаре[к].Количество * Константы.ЦенаТары.Получить();
Проводка.Содержание = "Тара получена от покупателя с ответственного хранения.";
Проводка.СчетКт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТаре[к].Номенклатура);
Проводка.КоличествоКт = ТаблицаПоТаре[к].Количество;
КонецЦикла;
ДальшеНеПроводить = Истина; // Вот тут я имел в виду добавить или это не то ??
КонецЕсли;
Показать
Функция ПровестиПо012(Док, Движения) Экспорт
ТаблицаПоТоварам = Новый ТаблицаЗначений;
ТаблицаПоТоварам = Док.Товары.Выгрузить();
ТаблицаПоТоварам.Свернуть("Номенклатура","Количество");
ТаблицаПоТаре = Новый ТаблицаЗначений;
ТаблицаПоТаре = Док.ВозвратнаяТара.Выгрузить();
ТаблицаПоТаре.Свернуть("Номенклатура","Количество");
ДальшеНеПроводить = Ложь;
При входе в функцию я ей присаиваю Ложь
ТаблицаПоТоварам = Новый ТаблицаЗначений;
ТаблицаПоТоварам = Док.Товары.Выгрузить();
ТаблицаПоТоварам.Свернуть("Номенклатура","Количество");
ТаблицаПоТаре = Новый ТаблицаЗначений;
ТаблицаПоТаре = Док.ВозвратнаяТара.Выгрузить();
ТаблицаПоТаре.Свернуть("Номенклатура","Количество");
ДальшеНеПроводить = Ложь;
При входе в функцию я ей присаиваю Ложь
Функция делает все правильно Отладчиком я проверял, количество индексов в ТаблицеЗначений равно количеству строк в Табличных Значениях документов и Проводка = Движения.Хозрасчетный.Добавить(); добавляет сколько нужно Движений, но вот что потом в глубинах проведения УПП, может все таки я не правильно передаю из модуля проведения Если МоиМодули.ПровестиПо012(Ссылка, Движения) Тогда Возврат, вот эти движения может мне не передавать?
// По результату запроса по шапке документа формируем движения по регистрам.
//
// Параметры:
// РежимПроведения - режим проведения документа (оперативный или неоперативный),
// СтруктураШапкиДокумента - выборка из результата запроса по шапке документа,
// ТаблицаПоТоварам - таблица значений, содержащая данные для проведения и проверки ТЧ Товары,
// ТаблицаПоСкидкам - таблица значений, содержащая данные для проведения и проверки ТЧ Скидки,
// ТаблицаПоТаре - таблица значений, содержащая данные для проведения и проверки ТЧ "Возвратная тара",
// ТаблицаПоУслугам - таблица значений, содержащая данные для проведения и проверки ТЧ "Услуги",
// Отказ - флаг отказа в проведении,
// Заголовок - строка, заголовок сообщения об ошибке проведения.
//
Процедура ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента,
ТаблицаПоТоварам, ТаблицаПоСкидкам, ТаблицаПоТаре, ТаблицаПоУслугам,
ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам, Отказ, Заголовок)
//+
Если МоиМодули.ПровестиПо012(Ссылка, Движения) Тогда Возврат; КонецЕсли;
//--
ТаблицаПоКомплектам = УправлениеЗапасами.СформироватьТаблицуКомплектующих(ТаблицаПоТоварам, ЭтотОбъект);
СчетаУчетаВДокументах.ЗаполнитьИПроверитьЗаполнениеСчетовУчетаТабличнойЧасти("СоставНабора", ТаблицаПоКомплектам, СтруктураШапкиДокумента, Отказ, Заголовок);
ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента,
ТаблицаПоТоварам, ТаблицаПоКомплектам, ТаблицаПоСкидкам, ТаблицаПоТаре, ТаблицаПоУслугам,
ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам, Отказ, Заголовок);
//
// Параметры:
// РежимПроведения - режим проведения документа (оперативный или неоперативный),
// СтруктураШапкиДокумента - выборка из результата запроса по шапке документа,
// ТаблицаПоТоварам - таблица значений, содержащая данные для проведения и проверки ТЧ Товары,
// ТаблицаПоСкидкам - таблица значений, содержащая данные для проведения и проверки ТЧ Скидки,
// ТаблицаПоТаре - таблица значений, содержащая данные для проведения и проверки ТЧ "Возвратная тара",
// ТаблицаПоУслугам - таблица значений, содержащая данные для проведения и проверки ТЧ "Услуги",
// Отказ - флаг отказа в проведении,
// Заголовок - строка, заголовок сообщения об ошибке проведения.
//
Процедура ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента,
ТаблицаПоТоварам, ТаблицаПоСкидкам, ТаблицаПоТаре, ТаблицаПоУслугам,
ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам, Отказ, Заголовок)
//+
Если МоиМодули.ПровестиПо012(Ссылка, Движения) Тогда Возврат; КонецЕсли;
//--
ТаблицаПоКомплектам = УправлениеЗапасами.СформироватьТаблицуКомплектующих(ТаблицаПоТоварам, ЭтотОбъект);
СчетаУчетаВДокументах.ЗаполнитьИПроверитьЗаполнениеСчетовУчетаТабличнойЧасти("СоставНабора", ТаблицаПоКомплектам, СтруктураШапкиДокумента, Отказ, Заголовок);
ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента,
ТаблицаПоТоварам, ТаблицаПоКомплектам, ТаблицаПоСкидкам, ТаблицаПоТаре, ТаблицаПоУслугам,
ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам, Отказ, Заголовок);
Ну так вот смотрите вы делаете сфою функцию и у вас документ имеет "ТипДвиженияПоСкладу" = СписатьСоСклада когда он делает движение он возвращает ЛОЖЬ т.к. у вас там нет строки которая присваивает в переменную ДальшеНеПроводить значение ИСТИНА и когда он возвращается в возврат не срабатывает т.к. вы вернули ЛОжь которую установили в начале своей функции!!!
и в этой ситуации прорабатывается остальной код скорей всего в котором и прорабатывается стандартные движения !!!
Если МоиМодули.ПровестиПо012(Ссылка, Движения) Тогда Возврат; КонецЕсли;
и в этой ситуации прорабатывается остальной код скорей всего в котором и прорабатывается стандартные движения !!!
Функция ПровестиПо012(Док, Движения) Экспорт
ТаблицаПоТоварам = Новый ТаблицаЗначений;
ТаблицаПоТоварам = Док.Товары.Выгрузить();
ТаблицаПоТоварам.Свернуть("Номенклатура","Количество");
ТаблицаПоТаре = Новый ТаблицаЗначений;
ТаблицаПоТаре = Док.ВозвратнаяТара.Выгрузить();
ТаблицаПоТаре.Свернуть("Номенклатура","Количество");
ДальшеНеПроводить = Ложь;
СчетУчета012 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("012");
Если Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвиженийПоСкладу.Оприходовать Тогда
Для к = 0 по ТаблицаПоТоварам.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТоварам[к].Количество * Константы.ЦенаПостановки.Получить();
Проводка.Содержание = "Товар передан покупателю на ответственное хранение.";
Проводка.СчетДт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", ТаблицаПоТоварам[к].Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,3, Док.а_ВидДоставки);
Проводка.КоличествоДт = ТаблицаПоТоварам[к].Количество;
КонецЦикла;
Для к = 0 по ТаблицаПоТаре.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТаре[к].Количество * Константы.ЦенаТары.Получить();
Проводка.Содержание = "Тара передана покупателю на ответственное хранение.";
Проводка.СчетДт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", ТаблицаПоТаре[к].Номенклатура);
Проводка.КоличествоДт = ТаблицаПоТаре[к].Количество;
КонецЦикла;
ДальшеНеПроводить = Истина;
ИначеЕсли Док.ТипДвиженияПоСкладу = Перечисления.ТипыДвижений.СписатьСоСклада Тогда
Для к = 0 по ТаблицаПоТоварам.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТоварам[к].Количество * Константы.ЦенаПостановки.Получить();
Проводка.Содержание = "Товар получен от покупателя с ответственного хранения.";
Проводка.СчетКт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТоварам[к].Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,3, Док.а_ВидДоставки);
Проводка.КоличествоКт = ТаблицаПоТоварам[к].Количество;
КонецЦикла;
Для к = 0 по ТаблицаПоТаре.Количество() - 1 Цикл
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.Период = Док.Дата;
Проводка.Организация = Док.Организация;
Проводка.Сумма = ТаблицаПоТаре[к].Количество * Константы.ЦенаТары.Получить();
Проводка.Содержание = "Тара получена от покупателя с ответственного хранения.";
Проводка.СчетКт = СчетУчета012;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Склады", Док.Склад);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ТаблицаПоТаре[к].Номенклатура);
Проводка.КоличествоКт = ТаблицаПоТаре[к].Количество;
КонецЦикла;
ДальшеНеПроводить = Истина // вот это вставьте и посмотрите что получите!
КонецЕсли;
Возврат ДальшеНеПроводить;
КонецФункции
Показать
Спасибо большое, может я неправильно сформулировал, мне это условие нужно и нужен возврата ДальшеНеПроводить = Ложь; при котором возникали и мои движения и стандартные движения, но вот при этом случае он и задваивает мои движения - почему задваивает?
/ Записывет набор записей в базу данных.
//
Процедура ЗаписатьДвижения(ДвиженияРегистра, ТаблицаДвиженийРегистра, Замещать, ДвижениеНДСПродукции = Ложь, ТолькоВключениеНДСВСтоимость = Неопределено)
// При замещении нужно удалять записи, сформированные прошлым списанием партий (СписаниеПартий=Истина),
// если у регистра есть реквизит СписаниеПартий, то нужно удалить строки с Истина
// Для списания партий НДС предусмотрены еще 2 реквизита СписаниеПартийНДС и НДСПродукции
// Движения по налоговому учету могут создаваться при проведении по бухгалтерскому учету если в документе
// установлен флаг "Отражать в налоговом учете"
ДМ = ДвиженияРегистра.Метаданные();
ЕстьРеквизитСписаниеПартий = (ДМ.Реквизиты.Найти("СписаниеПартий") <> Неопределено);
//
Процедура ЗаписатьДвижения(ДвиженияРегистра, ТаблицаДвиженийРегистра, Замещать, ДвижениеНДСПродукции = Ложь, ТолькоВключениеНДСВСтоимость = Неопределено)
// При замещении нужно удалять записи, сформированные прошлым списанием партий (СписаниеПартий=Истина),
// если у регистра есть реквизит СписаниеПартий, то нужно удалить строки с Истина
// Для списания партий НДС предусмотрены еще 2 реквизита СписаниеПартийНДС и НДСПродукции
// Движения по налоговому учету могут создаваться при проведении по бухгалтерскому учету если в документе
// установлен флаг "Отражать в налоговом учете"
ДМ = ДвиженияРегистра.Метаданные();
ЕстьРеквизитСписаниеПартий = (ДМ.Реквизиты.Найти("СписаниеПартий") <> Неопределено);
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот