Имя: Пароль:
1C
 
1С КА2 акт списания материалов
0 dovenok
 
07.05.26
07:58
Добрый день! Понадобилось сделать в 1с КА 2 , печатную форму как в бухгалтерии, акт списания материалов.

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

Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Наименование", "Акт на списание материалов");
    ПараметрыРегистрации.Вставить("Версия", "3.4");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    
    Назначения = Новый Массив;
    Назначения.Добавить("Документ.ВнутреннееПотреблениеТоваров");
    Назначения.Добавить("Документ.ВнутреннееПотребление");
    
    ПараметрыРегистрации.Вставить("Назначение", Назначения);
    
    Команды = Новый ТаблицаЗначений;
    
    Команды.Колонки.Добавить("Представление");
    Команды.Колонки.Добавить("Идентификатор");
    Команды.Колонки.Добавить("Использование");
    
    Команда = Команды.Добавить();
    Команда.Представление = "Акт на списание материалов";
    Команда.Идентификатор = "АктНаСписаниеМатериалов";
    Команда.Использование = "ВызовСерверногоМетода";
    
    ПараметрыРегистрации.Вставить("Команды", Команды);
    
    Возврат ПараметрыРегистрации;

КонецФункции



Процедура Печать(
    МассивОбъектов,
    КоллекцияПечатныхФорм,
    ОбъектыПечати,
    ПараметрыВывода) Экспорт
    
    Если УправлениеПечатью.НужноПечататьМакет(
        КоллекцияПечатныхФорм,
        "АктНаСписаниеМатериалов") Тогда
        
        ТабДок = ПечатьАкта(МассивОбъектов);
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "АктНаСписаниеМатериалов",
            "Акт на списание материалов",
            ТабДок);
            
    КонецЕсли;

КонецПроцедуры



Функция ПечатьАкта(МассивОбъектов) Экспорт
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ИмяПараметровПечати = "АктНаСписаниеМатериалов";
    
    Макет = ПолучитьМакет("АктНаСписаниеМатериалов");
    
    Для Каждого Док Из МассивОбъектов Цикл
        
        // =====================================================
        // ШАПКА
        // =====================================================
        
        Область = Макет.ПолучитьОбласть("Шапка");
        
        Орг = Док.Организация;
        
        
        // =====================================================
        // НАИМЕНОВАНИЕ ОРГАНИЗАЦИИ
        // =====================================================
        
        Наим = "";
        
        Если ЗначениеЗаполнено(Орг.НаименованиеПолное) Тогда
            Наим = Орг.НаименованиеПолное;
        Иначе
            Наим = Орг.Наименование;
        КонецЕсли;
        
        
        // =====================================================
        // АДРЕС
        // =====================================================
        
        Адрес = "";
        
        Попытка
            
            Адрес =
                УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(
                    Орг,
                    Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации,
                    Док.Дата);
                    
        Исключение
        КонецПопытки;
        
        
        Если НЕ ЗначениеЗаполнено(Адрес) Тогда
            
            Попытка
                
                Адрес =
                    УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(
                        Орг,
                        Справочники.ВидыКонтактнойИнформации.ФактическийАдрес,
                        Док.Дата);
                        
            Исключение
            КонецПопытки;
            
        КонецЕсли;
        
        
        // =====================================================
        // БАНКОВСКИЕ РЕКВИЗИТЫ
        // =====================================================
        
        БанкСтрока = "";
        
        Попытка
            
            Запрос = Новый Запрос;
            
            Запрос.Текст =
            "ВЫБРАТЬ ПЕРВЫЕ 1
            |    БанковскиеСчета.НомерСчета КАК НомерСчета,
            |    БанковскиеСчета.Банк КАК Банк,
            |    БанковскиеСчета.Банк.Код КАК БИК
            |ИЗ
            |    Справочник.БанковскиеСчета КАК БанковскиеСчета
            |ГДЕ
            |    БанковскиеСчета.Организация = &Организация";
            
            Запрос.УстановитьПараметр("Организация", Орг);
            
            Результат = Запрос.Выполнить().Выбрать();
            
            Если Результат.Следующий() Тогда
                
                БанкСтрока =
                    "р/с "
                    + СокрЛП(Результат.НомерСчета)
                    + ", "
                    + СокрЛП(Строка(Результат.Банк))
                    + ", БИК "
                    + СокрЛП(Результат.БИК);
                    
            КонецЕсли;
            
        Исключение
            
            БанкСтрока = "";
            
        КонецПопытки;
        
        
        // =====================================================
        // ОБЩИЙ ТЕКСТ ОРГАНИЗАЦИИ
        // =====================================================
        
        ПолныйТекстОрганизации = Наим;
        
        
        Если ЗначениеЗаполнено(Адрес) Тогда
            
            ПолныйТекстОрганизации =
                ПолныйТекстОрганизации
                + Символы.ПС
                + "Адрес: "
                + Адрес;
                
        КонецЕсли;
        
        
        Если ЗначениеЗаполнено(БанкСтрока) Тогда
            
            ПолныйТекстОрганизации =
                ПолныйТекстОрганизации
                + Символы.ПС
                + "Банковские реквизиты: "
                + БанкСтрока;
                
        КонецЕсли;
        
        
        // =====================================================
        // ВЫВОД В МАКЕТ
        // =====================================================
        
        Попытка
            Область.Параметры.ОрганизацияПолныйТекст =
                ПолныйТекстОрганизации;
        Исключение
        КонецПопытки;
        
        
        Попытка
            Область.Параметры.Номер = Док.Номер;
        Исключение
        КонецПопытки;
        
        
        Попытка
            Область.Параметры.Дата =
                Формат(Док.Дата, "ДЛФ=DD");
        Исключение
        КонецПопытки;
        
        
        ТабДок.Вывести(Область);
        
        
        // =====================================================
        // ЗАГОЛОВОК
        // =====================================================
        
        ТабДок.Вывести(
            Макет.ПолучитьОбласть("Заголовок"));
        
        
        // =====================================================
        // ШАПКА ТАБЛИЦЫ
        // =====================================================
        
        ТабДок.Вывести(
            Макет.ПолучитьОбласть("ШапкаТаблицы"));
        
        
        // =====================================================
        // СТРОКИ
        // =====================================================
        
        ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
        
        Итого = 0;
        НомерСтроки = 0;
        
        
        Для Каждого Стр Из Док.Товары Цикл
            
            НомерСтроки = НомерСтроки + 1;
            
            
            // =================================================
            // ПОЛУЧЕНИЕ СЕБЕСТОИМОСТИ
            // =================================================
            
            ДанныеСтоимости =
                ПолучитьСтоимостьСписания(
                    Док.Ссылка,
                    Стр.Номенклатура);
            
            СуммаСтроки = ДанныеСтоимости.Сумма;
            
            
            Если Стр.Количество <> 0 Тогда
                Цена = СуммаСтроки / Стр.Количество;
            Иначе
                Цена = 0;
            КонецЕсли;
            
            
            // =================================================
            // ВЫВОД СТРОКИ
            // =================================================
            
            Попытка
                ОбластьСтрока.Параметры.Номер =
                    НомерСтроки;
            Исключение
            КонецПопытки;
            
            
            Попытка
                ОбластьСтрока.Параметры.Номенклатура =
                    Стр.Номенклатура;
            Исключение
            КонецПопытки;
            
            
            Попытка
                ОбластьСтрока.Параметры.Единица =
                    Стр.Номенклатура.ЕдиницаИзмерения;
            Исключение
            КонецПопытки;
            
            
            Попытка
                ОбластьСтрока.Параметры.Количество =
                    Стр.Количество;
            Исключение
            КонецПопытки;
            
            
            Попытка
                ОбластьСтрока.Параметры.Цена =
                    Окр(Цена, 2);
            Исключение
            КонецПопытки;
            
            
            Попытка
                ОбластьСтрока.Параметры.Сумма =
                    Окр(СуммаСтроки, 2);
            Исключение
            КонецПопытки;
            
            
            Итого = Итого + СуммаСтроки;
            
            ТабДок.Вывести(ОбластьСтрока);
            
        КонецЦикла;
        
        
        // =====================================================
        // ИТОГ
        // =====================================================
        
        Область = Макет.ПолучитьОбласть("Итог");
        
        
        Попытка
            Область.Параметры.ИтогоСумма =
                Окр(Итого, 2);
        Исключение
        КонецПопытки;
        
        
        Попытка
            
            Область.Параметры.ИтогоПрописью =
                ЧислоПрописью(
                    Итого,
                    "Л=ru_RU",
                    "рубль,рубля,рублей,м,копейка,копейки,копеек,ж");
                    
        Исключение
        КонецПопытки;
        
        
        ТабДок.Вывести(Область);
        
        
        // =====================================================
        // ПОДПИСИ
        // =====================================================
        
        ТабДок.Вывести(
            Макет.ПолучитьОбласть("Подписи"));
        
    КонецЦикла;
    
    
    ТабДок.АвтоМасштаб = Истина;
    
    Возврат ТабДок;

КонецФункции



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

КонецФункции
1 Garykom
 
гуру
07.05.26
08:30
1. Что такое "проведение месяца"?
2. Какую именно цену и для чего?
3. Портянка эта какой смысл выкладывать?
2 dovenok
 
07.05.26
08:34
ну бухгалтерия закрывает месяц, потом высчитывается себестоимость продукции точная, ее нужно вывести в акт списания материалов(печатная форма) , но я не понимаю откуда брать эти данные.

ошибка в этом куске судя по всему:

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

КонецФункции
3 Garykom
 
гуру
07.05.26
08:44
(2) Ошибка не в программном коде, ошибка в ДНК
Почему нельзя найти типовой отчет/форму которые показывают нужную цену?
И посмотреть откуда оно берет цифры? Через отладку - замер производительности например
Банально поиском и просмотром текстов запросов
Для удобства замера запускать с "Режим отладки" или поставить галку для фоновых
4 shuhard
 
07.05.26
09:00
(0)[ после проведения месяца из какого регистра подтягивать цену в акт списания? у]
два варианта настройки:
- фиксированная цена из прайс-листа
- Рг себестоимость товаров
5 Мультук
 
гуру
07.05.26
09:08
(0)

Автор, объясните пожалуйста, нахрен зачем здесь (и далее) попытка исключение ? Какая цель ?

Что вы пытаетесь предотвратить?

Это печатная форма. Не синхрофазатрон.

С вашим опытом попытка/исключение будет только вредить.
В первую очередь вам, а затем пользователям, ибо вместо явной ошибки они получат нолики см (2), там где вовсе могут быть миллионы и будут вас бить.


Попытка
    ОбластьСтрока.Параметры.Номер = НомерСтроки;
Исключение
КонецПопытки;

6 Garykom
 
гуру
07.05.26
09:48
(5) У ТС спрашиваешь? Спроси сразу у ИИшки которая это выдала

ЗЫ
Ну не сделает человек такие комменты
Да еще несколько раз
            // =================================================
            // ПОЛУЧЕНИЕ СЕБЕСТОИМОСТИ
            // =================================================
7 dovenok
 
07.05.26
09:57
(6) да через ии прогонял, нашел я только тчет по себестоимости где отображается после запроса средняя цена, но так и не понял как оттуда ее выдрать в мою печатную форму
8 paramedic
 
07.05.26
10:07
(7) Ну есть же стандартная печатная форма ТОРГ-16 (Акт о списании товаров). Что, так сложно взять ее за основу и просто перезанести получаемые данные на свою форму?
В ней все есть - и цены по себестоимости и цены по виду цен...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший