Имя: Пароль:
1C
 
Подскажите с обработкой.
,
0 Mr Elidan
 
06.08.15
12:45
Бухи хотят обработку которая перезаполняла сумму табличной части в документа "отчет о розничных продажах", а я хз как её написать. Точнее понимаю механику, а написать не могу) На сколько я понимаю, нужно сделать таблицу значений, в неё выгрузить запрос "ценыНоменклатуры.срезПоследних", поставить связь с доком по номенклатуре, перемножить цену на количество и все это в цикл. Есть у кого пример такой обработки? и да, я не сильно заморачиваюсь, в смысле может есть способ проще?
1 salvator
 
06.08.15
12:47
Одним запросом выбрать ТЧ документа и регистр, с соединением по номенклатуре. В запросе же рассчитать сумму (цена*количество), выгрузить результат запроса в ТЗ, загрузит ТЗ в ТЧ документа.
2 Fram
 
06.08.15
12:52
(1) ТС остается только выучить и понять язык запросов и научиться кодить на 1С
3 Mr Elidan
 
06.08.15
14:00
Запросы я знаю, и с СКД проблем нет, а вот кодить проблема (обработки), делаю в основном по образцам (внештатного программиста), из нескольких один , хотя это мысль сделать во внешней обработкой) есть у меня "универсалных обработчик", в котором можно просто прописать алгоритм, и я пытался через него, по скольку мне нужно изменить 1 лишь столбе
4 D_E_S_131
 
06.08.15
14:46
"...делаю в основном по образцам (внештатного программиста)" — по идее, после этой задачи организация должна сменить "штатного программиста".
5 Mr Elidan
 
06.08.15
14:49
Был бы он еще у нас, я экономист и занимаюсь этим 1.5 месяца)))
6 FIXXXL
 
06.08.15
14:51
(1) сумму лучше типовыми функциями для каждой строки рассчитывать, они НДС просчитают корректно
7 el7cartel
 
06.08.15
14:52
(0) а зачем экономисту заниматься вот этим "Бухи хотят обработку которая перезаполняла сумму табличной части в документа "отчет о розничных продажах", а я хз как её написать", делайте свою работу, а внештатный программист будет иметь дополнительный заработок)))
8 Franchiser
 
гуру
06.08.15
14:52
возьми пример внешней обработки заполнения ТЧ и сделай по образцу
9 vicof
 
06.08.15
14:53
(5) Экономист может сказать внештатному: "делай, сц*кан, быстро"
10 Franchiser
 
гуру
06.08.15
14:54
в модуле менеджера обычно есть функция которая пересчитывает всю тч
11 FIXXXL
 
06.08.15
14:54
(8) кстати, может и без запроса взлетит, наверняка есть типовая функция по перезаполнению цен на дату документа
12 Franchiser
 
гуру
06.08.15
14:55
ты 1,5 экономист, или экономист который занимается программированием 1,5 мес?
13 Mr Elidan
 
06.08.15
15:03
FIXXXL - честно говоря я плохо понимаю типовой код, в том плане, что внештатный программист (как и любой другой я предпологаю) в одной процедуре описывает все что нужно достаточно простым кодом, а в типовом где то переменные, где то запрос, где то процедура и их дофига....
el7cartel - жмут ФОТ + внештатный "своевольный", по этому финансовый директор посчитал, что не плохо было бы что бы я умел, за доп денежку естественно.
Franchiser - не всегда я могу найти похожую обработку + внештатный любит пароль ставить. Как функция называется, хоть примерно?
FIXXXL - можно это сделать вручную, путем проставить галку в нужном месте, но в типовом коде процедура может быть из одной строчки, а искать все остальное можно рехнуться, ну, для меня)
Franchiser - я экономист, и всего 1.5 месяца занимаюсь 1с.
14 Franchiser
 
гуру
06.08.15
15:08
Если БП 3.0 то
Общий модуль ОбработкаТабличныхЧестейКлиентСервер

// Рассчитывает сумму в строке табличной части документа
//
// Параметры:
//  СтрокаТабличнойЧасти - строка табличной части документа
//
Процедура РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЗначениеПустогоКоличества = 0) Экспорт

    СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена * ?(СтрокаТабличнойЧасти.Количество = 0, ЗначениеПустогоКоличества, СтрокаТабличнойЧасти.Количество);

КонецПроцедуры
15 el7cartel
 
06.08.15
15:13
(13) эта допденюжка потом выйдет тебе боком
16 Mr Elidan
 
06.08.15
15:18
Franchiser - спасибо, буду смотреть)
el7cartel - Чойто?
17 Mr Elidan
 
06.08.15
15:40
Нашел другую херню
Процедура ПриИзмененииТипаЦен(Ответ)

    Если Товары.Количество()>0 Тогда
        ТекстВопроса = "Изменился тип цен. Пересчитать табличную часть?";
        Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
        Если Ответ = КодВозвратаДиалога.Да Тогда

            СтруктураЗначений = Новый Структура;
            СтруктураЗначений.Вставить("НовыйТипЦен", ТипЦен);
            СтруктураЗначений.Вставить("НовыйВалютаДокумента", мВалютаРегламентированногоУчета);
            СтруктураЗначений.Вставить("НовыйКурсДокумента", 1);
            СтруктураЗначений.Вставить("НовыйКратностьДокумента", 1);

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

            ВыборкаИзРезультатаЗапроса = РезультатЗапросаЦен.Выбрать();
            
            СтруктураПоиска = Новый Структура(); // стркутура для поиска в результате запроса

            // В цикле по ТЧ перезаполняем цены, приводя их к текущим скидкам, валюте и режиму налогообложения
            Для каждого СтрокаТабличнойЧасти Из Товары Цикл

                СтруктураПоиска.Вставить("Номенклатура"              , СтрокаТабличнойЧасти.Номенклатура);
                СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры);

                ВыборкаИзРезультатаЗапроса.Сбросить();
                Если ВыборкаИзРезультатаЗапроса.НайтиСледующий(СтруктураПоиска) Тогда // Нашли запись

                    // Если для данного товара есть цена данного типа
                    // Единицу устанавливаем в единицу цены, если она не задана, то в основную единицу товара
                    Если НЕ ЗначениеЗаполнено(ВыборкаИзРезультатаЗапроса.Цена) Тогда
                        СтрокаТабличнойЧасти.Цена = 0;
                    Иначе
                        // Присваиваем значение цены и единицы цены
                        Если СтруктураЗначений.НовыйТипЦен.Рассчитывается Тогда

                            Цена = ВыборкаИзРезультатаЗапроса.Цена * (1 + ВыборкаИзРезультатаЗапроса.ПроцентСкидкиНаценки / 100);
                            СтруктураВалюты = МодульВалютногоУчета.ПолучитьКурсВалюты(СтруктураЗначений.НовыйТипЦен.ВалютаЦены, ДокументОбъект.Дата);
                            МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Цена,
                                                        ВыборкаИзРезультатаЗапроса.ВалютаЦены,
                                                        СтруктураЗначений.НовыйТипЦен.ВалютаЦены,
                                                        ВыборкаИзРезультатаЗапроса.КурсВалютыЦены,
                                                        СтруктураВалюты.Курс,
                                                        ВыборкаИзРезультатаЗапроса.КратностьВалютыЦены,
                                                        СтруктураВалюты.Кратность);
                            СтрокаТабличнойЧасти.Цена = Ценообразование.ОкруглитьЦену(Цена,
                                                                        СтруктураЗначений.НовыйТипЦен.ПорядокОкругления,
                                                                        СтруктураЗначений.НовыйТипЦен.ОкруглятьВБольшуюСторону);
                        Иначе
                            СтрокаТабличнойЧасти.Цена = ВыборкаИзРезультатаЗапроса.Цена;
                        КонецЕсли;

                        // Пересчитываем цену в валюту документа
                        Если СтруктураЗначений.НовыйВалютаДокумента <> ВыборкаИзРезультатаЗапроса.ВалютаЦены Тогда
                            СтрокаТабличнойЧасти.Цена = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТабличнойЧасти.Цена,
                                                                ВыборкаИзРезультатаЗапроса.ВалютаЦены,
                                                                СтруктураЗначений.НовыйВалютаДокумента,
                                                                ВыборкаИзРезультатаЗапроса.КурсВалютыЦены,
                                                                СтруктураЗначений.НовыйКурсДокумента,
                                                                ВыборкаИзРезультатаЗапроса.КратностьВалютыЦены,
                                                                СтруктураЗначений.НовыйКратностьДокумента);
                        КонецЕсли;
                        ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры // ПриИзмененииТипаЦен()


ругается на {(1,1)}: Ожидается последовательность операторов
<<?>>Процедура ПриИзмененииТипаЦен(Ответ)

ему не хватает какой то процедуры?