Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 апр 2024, 04:21

Как добавить колонки в таблицу...

Автор Tesla, 04 окт 2014, 10:09

0 Пользователей и 1 гость просматривают эту тему.

Tesla

Доброе утро. Есть ТиС 77 уже здорово подъшаманеная, если можно так выразится. Назрела необходимость произвести некоторую модернизацию. Вобщем, дело вот в чём.Накладная на перемещение формируется через "ввести на основании" из приходной накладной, да и вообще просто из журнала складских документов. Табличная часть приходной накладной обладает целым спектром цен (ЦенаБезНДС, ЦенаСНДС),в то время как накладная на перемещение только лишь розничной ценой.  Хочу добавить в накладную на перемещение колонку с ЦенойБезНДС или ЦенаСНДС, т.е. закупочные, но не розничные. Для чего это делается: хочу оформить пакетное преобразование цен. А ещё не могу добавить просто пустое поле числового типа. Поизучав форму, понял, что просто так добавить не получится (хотя текстовое добавляется), а при попытке добавить реквизит происходит реструктуризация БД. Вобщем, 1С только начал изучать. Тыкните, пожалуйста, пальцем где и что смотреть.

Tesla

Немного нарыл тут. Вобщем, добавил реквизит числовой, включил его в реквизитах формы, в таблице появилась нужная колонка. Теперь нужно заполнить её значениями цены. Подсмотрел как это делается в приходной накладной: там в свойствах колонки в формуле стоит вызов функции/процедуры  глВыч_суммы_накл(Контекст,1);. Сделал так же. Ничего не получилось - значения не подтянулись. Для меня полный лес, что такое "контекст" и что за параметр "1".
Добавлено: 04 окт 2014, 12:21


Понял, что функция должна передать данные о товарах, к которым нужно подтянуть цены.

дфтын

вот куда пишите -глВыч_суммы_накл(Контекст,1); = сюда пишется имя функции которая вернет значение. в модуле нужно описать работы этой функции, напрмиер -= ВернутьЦену()  и в модуле гдето должно быть описано:

Функция ВернутьЦену()
Рез = 0;
//ВЫчисляем рез;
Возврат Рез;
КонецФункции
Помог? Нажми - Спасибо :)
skype: Soprov1C

Tesla

C этим как раз проблема. Пока не знаю как считается цена. Да и вообще, не представляю конструкцию функции в целом.

дфтын

Тогда может книги почитать и на курсы сходить? или программера нанять.. ТАк просто можно все порушить ненароком..
Помог? Нажми - Спасибо :)
skype: Soprov1C

Tesla


дфтын

Помог? Нажми - Спасибо :)
skype: Soprov1C

Tesla


Tesla

похоже всё-таки способ загрузкой документа и одновременно подстановка закупочной цены не подходит. Лучше повесить подставление последней закупочной цены ориентируясь по коду товара, на процедуру, и вызывать по требованию. Тоесть, последовательность такая:

1. Открылся документ.
2. По нажатию кнопки заполняем колонки ценами.
3. Обновляем старые цены только в табличной части.
4. Обновление цен справочника остаётся стандартное.

По идее, можно воспользоваться запросом цен к регистру.
Собсно вопрос: как лучше устроить этот запрос?

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

Заг="";
Заг1="";
   
глЗаголовокФирма(ВыбФирма,Заг,Язык);

ВИ = ВалютаИтогов.ТекущийЭлемент();

    // Здесь формируется отчет, который использует регистры, критичные к
    // последовательности проведения документов
    // поэтому сравним установленные даты периода формируемого отчета с ГП
    глПроверкаАктуальностиОтчета('01.01.1980',Дата2,"Общ",ВыбФирма,0);

Запрос=СоздатьОбъект("Запрос");

ТекстЗапроса="       
|ПЕРИОД С Дата2 По Дата2;
|Фирма = Регистр.ПартииТоваров.Фирма;
|Товар = Регистр.ПартииТоваров.Товар;
|Статус = Регистр.ПартииТоваров.Статус;
|Стоимость = Регистр.ПартииТоваров.Стоимость;
|СтоимостьНДС = Регистр.ПартииТоваров.НДС;
|Кол = Регистр.ПартииТоваров.ОстатокТовара;
|Группировка Товар;
|Группировка Статус;
|Функция КонКол = КонОст(Кол);
|Функция КонСтоим = КонОст(Стоимость);
|Функция КонСтоимНДС = КонОст(СтоимостьНДС);
|Условие (Фирма  =  ВыбФирма);
|Условие (Статус <> Услуга);
|";   

Заг="";
Заг1="";                        

Если ФильтрыИЗаголовкиПоТоварамИСкладам(ТекстЗапроса,Заг,Заг1)=0 Тогда
Возврат;
КонецЕсли;

Флаг=Запрос.Выполнить(ТекстЗапроса);
Если Флаг=0 Тогда
Предупреждение("запрос по регистру ПартииТоваров не выполнился!");
Возврат;
КонецЕсли;

глЧислоСтрок = 0;
ИтогоВалСто = 0;
ИтогоКупленоСтоим = 0;
ИтогоОтданоКуплСтоим = 0;
ИтогоОтданоПринСтоим = 0;
ИтогоПринятоСтоим = 0;

//  Создание Таблицы для выходного отчета
Т.ИсходнаяТаблица("ОстаткиВцелом"+Язык);
   
Заг=Заг+?(Язык="у","Валюта підсумків: ","Валюта итогов: ")+ВалютаИтогов.Кратко+". ";

    Т.ВывестиСекцию("Кнопки");
Т.ВывестиСекцию("Отчет");
глОживить(4);

Пока Запрос.Группировка("Товар") = 1 Цикл
Если Запрос.Товар.Выбран()=0 Тогда
Продолжить;
КонецЕсли;
Наим=глТоварВОтчете(Запрос.Товар);
Если Запрос.Товар.ЭтоГруппа()=1 Тогда
Т.ВывестиСекцию("Группа");
глОживить(1);
Продолжить;
КонецЕсли;
ПартииТовара=СоздатьОбъект("СписокЗначений");

Если ВыбФирма.Выбран()=1 Тогда
ВУ=Гривня;
Иначе
ВУ=Запрос.Товар.ВалютаУчета;
КонецЕсли;


ОбщКупленоСтоим = 0;
ОбщКупленоОстат = 0;
ОбщОтданоКуплСтоим = 0;
ОбщОтданоКуплОстат = 0;
ОбщОтданоПринСтоим = 0;
ОбщОтданоПринОстат = 0;
ОбщПринятоСтоим = 0;
ОбщПринятоОстат = 0;

ОбщКонСтоим = 0;
ОбщКонОстат = 0;

ОбщКонСтоим=?(ПустоеЗначение(ВыбФирма)=1,Запрос.КонСтоим+Запрос.КонСтоимНДС,Запрос.КонСтоим);
ОбщКонОстат=Запрос.КонКол;
Пока Запрос.Группировка("Статус") = 1 Цикл
Если (Запрос.Статус=Купленный) или (Запрос.Статус=РозницаКупленный) Тогда
ОбщКупленоСтоим = ОбщКупленоСтоим + ?(ПустоеЗначение(ВыбФирма)=1,Запрос.КонСтоим+Запрос.КонСтоимНДС,Запрос.КонСтоим);
ОбщКупленоОстат = ОбщКупленоОстат + Запрос.КонКол;
ИначеЕсли Запрос.Статус=ОтданныйКупленный Тогда
ОбщОтданоКуплСтоим = ?(ПустоеЗначение(ВыбФирма)=1,Запрос.КонСтоим+Запрос.КонСтоимНДС,Запрос.КонСтоим);
ОбщОтданоКуплОстат = Запрос.КонКол;
ИначеЕсли Запрос.Статус=ОтданныйПринятый Тогда
ОбщОтданоПринСтоим = ?(ПустоеЗначение(ВыбФирма)=1,Запрос.КонСтоим+Запрос.КонСтоимНДС,Запрос.КонСтоим);
ОбщОтданоПринОстат = Запрос.КонКол;
ИначеЕсли (Запрос.Статус=Принятый) или (Запрос.Статус=ПринятыйБезПраваПередачи)
или (Запрос.Статус=РозницаПринятый) или (Запрос.Статус=РозницаПринятыйБезПраваПередачи) Тогда
ОбщПринятоСтоим = ОбщПринятоСтоим + ?(ПустоеЗначение(ВыбФирма)=1,Запрос.КонСтоим+Запрос.КонСтоимНДС,Запрос.КонСтоим);
ОбщПринятоОстат = ОбщПринятоОстат + Запрос.КонКол;
КонецЕсли;
КонецЦикла;

ПечКупленоКол_во = глФРМКоличествоВОтчете(ОбщКупленоОстат,    Запрос.Товар);
ПечОтданоКуплКол_во = глФРМКоличествоВОтчете(ОбщОтданоКуплОстат, Запрос.Товар);
ПечОтданоПринКол_во = глФРМКоличествоВОтчете(ОбщОтданоПринОстат, Запрос.Товар);
ПечПринятоКол_во = глФРМКоличествоВОтчете(ОбщПринятоОстат,    Запрос.Товар);

КупленоСтоимость = глФРМ(ОбщКупленоСтоим, ВУ,1);
ОтданоКуплСтоимость = глФРМ(ОбщОтданоКуплСтоим, ВУ,1);
ОтданоПринСтоимость = глФРМ(ОбщОтданоПринСтоим, ВУ,1);
ПринятоСтоимость = глФРМ(ОбщПринятоСтоим, ВУ,1);

ВалютнаяСтоимость=глФРМ(ОбщКонСтоим,ВУ,1);
Цена=?(ОбщКонОстат<>0,глФРМ(ОбщКонСтоим/глКоличествоВОтчете(ОбщКонОстат,Запрос.Товар),ВУ,1),"");

Т.ВывестиСекцию("Товар");
ИтогоВалСто = ИтогоВалСто + глПересчет(ОбщКонСтоим, ВУ,Дата2,ВалютаИтогов,Дата2);
ИтогоКупленоСтоим = ИтогоКупленоСтоим + глПересчет(ОбщКупленоСтоим, ВУ,Дата2,ВалютаИтогов,Дата2);
ИтогоОтданоКуплСтоим = ИтогоОтданоКуплСтоим + глПересчет(ОбщОтданоКуплСтоим,ВУ,Дата2,ВалютаИтогов,Дата2);
ИтогоОтданоПринСтоим = ИтогоОтданоПринСтоим + глПересчет(ОбщОтданоПринСтоим,ВУ,Дата2,ВалютаИтогов,Дата2);
ИтогоПринятоСтоим = ИтогоПринятоСтоим + глПересчет(ОбщПринятоСтоим, ВУ,Дата2,ВалютаИтогов,Дата2);
глОживить(1);
КонецЦикла;
Т.ВывестиСекцию("Итоги");
глОживить(1);
//Вызов выходного отчета в окно просмотра и редактирования.
Т.ТолькоПросмотр(1);
Т.Опции(0,0,8,0);
Т.ОбластьПечати(2);
Т.Показать("Остатки товаров","");

ОтчетСформирован = 1;

КонецПроцедуры       // ОстаткиТоваровССебестоимостью
 

дфтын

так.
все не так.
Итак:
1. вам нужно выбрать ПОСЛЕДНЮЮ ЗАКУПОЧНУЮ ЦЕНУ по этому товару, до даты документа.
2. поместить в документ

пишу(пишу не проверяя, и сокращая):

Процедура ЗаполнитьЗакупочныеЦены()
Выбрать Строки()
Пока ПолучитьСтроку()= 1 цикл
Текст = "|ПЕРИОД  По ДатаДок;
  |Фирма            = Регистр.ПартииТоваров.Фирма;
    |Товар            = Регистр.ПартииТоваров.Товар;
    |ПартияДАта = Регистр.ПартииТоваров.Партия.ДатаДок;
    |Статус            = Регистр.ПартииТоваров.Статус;
    |Стоимость        = Регистр.ПартииТоваров.Стоимость;
    |СтоимостьНДС    = Регистр.ПартииТоваров.НДС;
    |Кол            = Регистр.ПартииТоваров.ОстатокТовара;
    |Группировка Товар;
    |Функция КонСтоим     = КонОст(Стоимость);
    |Функция КонСтоимНДС = КонОст(СтоимостьНДС);
    |Условие (Товар    =  ВыбТовар);
    |Условие (Фирма    =  ВыбФирма);
    |Условие (Статус <> Услуга);
    |СОРТИРОВКУ НАДО!!! я забыл как:) помню упорядочить по ПартияДата УБЫВ
    |";   
Запрос.выполнить

Пока Запрос.Группировка("Товар") = 1 Цикл
ЦенаЗакупки  = Запрос.КонСтоим ;
Прервать;
КонецЦикла;
КонецЦИкла;
КонецПроцедуры



Вот так, например. я чото уже забыл ка ктам в 7ке забубенить чтоб запрос в таблицу значений.. ну короче это должно сработать, нужно будет соптимизировать - включу архивные ячейки памяти свои
Помог? Нажми - Спасибо :)
skype: Soprov1C

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск