Торг13 печатная форма

Версия для печатиPDF-версия

Платформа:

попросили дополнить печатные формы у одного программиста. но он уволился и у клиентов возникли ошибки с ней. Я не могу разобраться с ней никак.

Дано: 2 оптовых склада, документ перемещение товаров.

Проблема: в продуктовом складе цена отображается нормально. в хозяйственном цена = 0.... код один и тот же.

ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);

//Определим цену - в случае розницы в продажных ценах - продажную
Если ВыборкаСтрокТовары.ID = 1 И УчетПоПродажнойСтоимости 
И (Шапка.ТипСкладаПолучателя = Перечисления.ТипыСкладов.НеавтоматизированнаяТорговаяТочка 
ИЛИ Шапка.ТипСкладаОтправителя = Перечисления.ТипыСкладов.НеавтоматизированнаяТорговаяТочка) Тогда
 
ЦенаПеремещения = ВыборкаСтрокТовары.Цена;
Сумма = ЦенаПеремещения * КоличествоМест;
 
ИначеЕсли ВыборкаСтрокТовары.ID = 1 И УчетПоПродажнойСтоимости 
И (Шапка.ТипСкладаПолучателя = Перечисления.ТипыСкладов.РозничныйМагазин 
ИЛИ Шапка.ТипСкладаОтправителя = Перечисления.ТипыСкладов.РозничныйМагазин) Тогда
 
ЦенаПеремещения = Ценообразование.ПолучитьЦенуНоменклатуры(ВыборкаСтрокТовары.Номенклатура, 
Шапка.ТипЦенРозничнойТорговлиСкладаПолучателя, Шапка.ДатаДокумента, ВалютаРегламентированногоУчета, 1, 1);
Сумма = ЦенаПеремещения * КоличествоМест;
Иначе
СтруктураПоиска.Вставить("Регистратор", Шапка.Ссылка);
СтруктураПоиска.Вставить("Номенклатура", ВыборкаСтрокТовары.Номенклатура);
НайденныеСтроки = ТаблицаСуммСписанияПоДокументам.НайтиСтроки(СтруктураПоиска);
 
Если НайденныеСтроки.Количество() = 0 Тогда
ЦенаПеремещения = 0;
Сумма = 0;
Иначе
СтрокаСуммСписания = НайденныеСтроки[0];
ЦенаПеремещения = ?(КоличествоМест = 0, 0, СтрокаСуммСписания.Сумма / КоличествоМест);
Сумма = Окр(ЦенаПеремещения * КоличествоМест, 2, 1);
КонецЕсли;
КонецЕсли;
 

Какой тип склада у склада-отправителя и склада-получателя? Какой способ оценки товаров в рознице установлен в базе?

ПС. Посмотрите отладчиком в какую ветку условия входит.

склад получатель оптовый

склад отправитель розничный

1. есть сумма

2. нет суммы

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

способ оценки - ручная корректировка

А проводки у документа 2 есть?

ПС. Можно не выкладывать целиком текст процедур. Достаточно указать модуль и процедуру.

да. проводки есть в обоих случаях и они одинаковые

я думаю проблема в этом запросе. 

Пока ВыборкаСтрокТовары.Следующий() Цикл
Ном = Ном + 1;
 
Запроск=новый Запрос();
Запроск.Текст="ВЫБРАТЬ
             | КОЛИЧЕСТВО(*) КАК Колв
             |ИЗ
             | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
             | {(&ДатаС)},
             | {(&ДатаПо)},
             | Активность = ИСТИНА
             | И СчетДт = &СчетДт
 | И Регистратор = &Рег
 | И СубконтоДт2 = &Ном
 | И КоличествоКт > &Кол,
             | ) КАК ДвиженияССубконто";
Запроск.УстановитьПараметр("ДатаС", СсылкаНаОбъект.Дата);
Запроск.УстановитьПараметр("Ном", МассивОбъектов[0].Товары[Ном-1].Номенклатура);
Запроск.УстановитьПараметр("ДатаПо", СсылкаНаОбъект.Дата);
Запроск.УстановитьПараметр("СчетДт", ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.12"));
Запроск.УстановитьПараметр("Рег", МассивОбъектов[0]);
Запроск.УстановитьПараметр("Кол", 0);
Рез=Запроск.Выполнить();
Выб=Рез.Выбрать();
Колв = 0;
Пока Выб.Следующий() цикл
Колв = Выб.Колв;
если Колв>1 тогда
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
иначе
ОбластьМакета = Макет.ПолучитьОбласть("Строка1");
КонецЕсли;
КонецЦикла;

Я так понимаю, это уже доработка предыдущего программиста. Не совсем понятен её смысл.

По счёту 41.12 количественный учёт ведётся?

Смысл доработки вообще был чтоб на макете отображался НДС и товары по партиям

но то как тут это написано.. я не могу понять. дальше есть похожий запрос.... походу продолжение первого.

 

ОбластьМакета.Параметры.СтавкаНДС = ВыборкаСтрокТовары.Номенклатура.СтавкаНДС;
 
 
ОбластьМакета.Параметры.Цена  = ЦенаПеремещения;
ОбластьМакета.Параметры.Сумма = Сумма;
ОбластьМакета.Параметры.КоличествоМест = КоличествоМест;
ОбластьМакета.Параметры.ТоварНаименование = ?(ВыборкаСтрокТовары.ID = 3, СокрЛП(ВыборкаСтрокТовары.ТоварНаименование) 
+ " (возвратная тара)", ВыборкаСтрокТовары.ТоварНаименование);
 
Запроск.Текст="ВЫБРАТЬ
             | ДвиженияССубконто.КоличествоКт,
             | ДвиженияССубконто.Сумма
             |ИЗ
             | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
             | {(&ДатаС)},
             | {(&ДатаПо)},
             | Активность = ИСТИНА
             | И СчетДт = &СчетДт
 | И Регистратор = &Рег
 | И СубконтоДт2 = &Ном
 | И КоличествоКт > &Кол,
             | ) КАК ДвиженияССубконто";
Запроск.УстановитьПараметр("ДатаС", СсылкаНаОбъект.Дата);
Запроск.УстановитьПараметр("Ном", МассивОбъектов[0].Товары[Ном-1].Номенклатура);
Запроск.УстановитьПараметр("ДатаПо", СсылкаНаОбъект.Дата);
Запроск.УстановитьПараметр("СчетДт", ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.12"));
Запроск.УстановитьПараметр("Рег", МассивОбъектов[0]);
Запроск.УстановитьПараметр("Кол", 0);
Рез=Запроск.Выполнить();
Выб=Рез.Выбрать();
 
 
ц=0;
Пока Выб.Следующий() цикл
если Колв>1 тогда
 
если ц=0 тогда
ОбластьМакета.Параметры.Сумма = Выб.Сумма;
ОбластьМакета.Параметры.КоличествоМест = Выб.КоличествоКт;
КонецЕсли;
если ц<2 Тогда
ОбластьМакета.Параметры.Сумма1 = Выб.Сумма;
ОбластьМакета.Параметры.КоличествоМест1 = Выб.КоличествоКт;
КонецЕсли;
иначе
ОбластьМакета.Параметры.Сумма = Выб.Сумма;
ОбластьМакета.Параметры.КоличествоМест = Выб.КоличествоКт;
КонецЕсли;
ц=ц+1;
КонецЦикла;
//Сообщить();
 
Результат1 = Запрос1.Выполнить().Выбрать();
 

Это внешняя печатная форма или изменения прямо в конфигурацию внесены?

Внешняя.

Можете выложить?

Да.

Прикреплённые файлы: 

Если было нужно только вывести НДС в печатную форму, то непонятно зачем такие сложности. Можно же просто получить ставку НДС из карточки номенклатуры и высчитать НДС. Может хотели ещё что-то?

чтоб товары выводились по партиям. там в макете для этого добавлена отдельная строка как я понимаю.

вроде это все.