Вход | Регистрация

1С:Предприятие ::

Метки:

Гуру... помогите плз.

Я
   steltec
 
14.04.04 - 08:54
Задача:
Программно создать документ РНК.
Действия:
В Форму "Спр.Номенклатура" добавил ТЗ, в неё заношу элементы, выбранные из "Спр.Номенклатура". Потом создаю "Док.Рнк", делаю выборку строк из ТЗ и заношу данные в табличную часть документа...
Но вот незадача... неполучается...
//***************************************

Перем ТЗ;// переменная ТаблицаЗначиний!!!

Перем _Скидка;
Перем _НомКарты;
Перем СуммСкид;
Перем ФлагСкидки;
Перем Тов, Ед;
Процедура ПриОткрытии()
    ФлагСкидки=0;
   //Включим возмоность работы со строкой справочника

    Форма.ОбработкаВыбораСтроки(1);
   // ограничим действия продавца в справочнике номенклатуры

   // и при открытии установим отбор по отделам!!!

    Если СокрЛП(НазваниеНабораПрав())="Автомасла" Тогда 
        ВыбОтдел=Перечисление.Отделы.Химия;  
        УстановитьОтбор("Отдел",Перечисление.Отделы.Химия);
    КонецЕсли;    
    Если СокрЛП(НазваниеНабораПрав())="Автозапчасти" Тогда 
        ВыбОтдел=Перечисление.Отделы.Железо;
        УстановитьОтбор("Отдел",Перечисление.Отделы.Железо); 
    КонецЕсли;
    Тов = СоздатьОбъект("Справочник.Номенклатура");
    Ед = СоздатьОбъект("Справочник.Единицы");
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Код","Число",6,,"Код",6);
    ТЗ.НоваяКолонка("Товар","Строка",100,,"Товар",30);
    ТЗ.НоваяКолонка("Кол","Число",8,2,"Кол",10);
    ТЗ.НоваяКолонка("Единица",,,"строка","Единица",10);
    ТЗ.НоваяКолонка("Цена","Число",8,2,"Цена",10);
    ТЗ.НоваяКолонка("Сумма","Число",8,2,"Сумма",10);
    ТЗ.НоваяКолонка("ЦенаСоСкидкой","Число",8,2,"ЦенаСоСкдикой",10);
    ТЗ.НоваяКолонка("СуммаСоСкидкой","Число",8,2,"СуммаСоСкидкой",10); 
   //ТЗ.НоваяКолонка("Замена","Перечисление.Замена",,"Строка");

    ТЗ.Выгрузить(ТаблицаВыбора);
    Склад=Константа.ОсновнойСклад;
    Фирма=Константа.ОсновнаяФирма;
    ВыбКлиент=Константа.ОсновнойПокупатель;
КонецПроцедуры  
//****************** 

//** Возвращаем список к "нормальному виду"
Процедура Вернуть()
    Бренд=0;
    категория=0;
   //ВыбОтдел=Перечисление.Отделы.Химия;

   //УстановитьОтбор("Отдел",Перечисление.Отделы.Химия);

    Если СокрЛП(ВыбОтдел)="Химия" Тогда
        ВыбОтдел=Перечисление.Отделы.Химия;
        УстановитьОтбор("Отдел",Перечисление.Отделы.Химия);
    Иначе
        Если СокрЛП(ВыбОтдел)="Железо" Тогда
            ВыбОтдел=Перечисление.Отделы.Железо;
            УстановитьОтбор("Отдел",Перечисление.Отделы.Железо);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

//******************

Процедура ВыбратьБренд()
    УстановитьОтбор("Производитель", бренд);
КонецПроцедуры

//_____________________________________________________________________________


Процедура ВыбОтдел()
    УстановитьОтбор("Отдел", ВыбОтдел);
КонецПроцедуры
//_____________________________________________________________________________/


//**********

Процедура ОтборКатег()
    УстановитьОтбор("КатегорияТовара", категория);
КонецПроцедуры
//**********

Процедура  выход()
    Если  Вопрос("Вы действительно желаете выйти из программы?",1,25)=1 Тогда
        ЗавершитьРаботуСистемы();
    Иначе 
        Возврат;
    КонецЕсли;
КонецПроцедуры
//-----------------------------------------------

Функция ОстатокТовараНаСкладе()
    Если Склад.Выбран()=1 Тогда
        Возврат Формат(Регистр.ОстаткиТоваров.Остаток(Фирма,ТекущийЭлемент(),Склад,"ОстатокТовара"),"Ч10.2");
    Иначе
        Возврат Формат(Регистр.ОстаткиТоваров.СводныйОстаток(Фирма,ТекущийЭлемент(),,"ОстатокТовара"),"Ч10.2");
    КонецЕсли;
КонецФункции
//-----------------------------------------------  

//********************************************* 
// добавим в таблицу значений новые товары

// и потом создадим накладную, сохраним её и отправим на печать!!!
Процедура ДобавитьВТЗ()
    Перем Кол, _ост;
    _ост=Число(ОстатокТовараНаСкладе());
    Если ВвестиЧисло(Кол,"Введите количество",8,2)=1 Тогда 
        Если (_ост<0) ИЛИ (_ост=0) Тогда
           Предупреждение("            Товара нет на складе или товар не поставлен на приход!!!
            |                                 Нельзя продать то, чего нет!!!
            | Обратитесь к Менеджеру или Оператору отдела обработки информации."); 
            Возврат;
        КонецЕсли;
        Если _ост-Кол<0 Тогда
            Предупреждение("На складе  "+_ост+"   а продаёте  "+Кол+"  !  Нельзя продать больше, чем есть на складе!!!");
            Возврат;        
        КонецЕсли;
        Если Кол=0 Тогда
            Предупреждение("Ооо-пс! Введите количество! 
            |Нельзя продавать товар в количестве 0 шт. !!!");
            Возврат;
        Иначе
            ТЗ.НоваяСтрока();
            ТЗ.Код=Код;
            ТЗ.Товар=Наименование;
            ТЗ.Цена=РозничнаяЦена;    
            ТЗ.Единица=БазоваяЕдиницаИзмерения;
            ТЗ.Кол=Кол;
            _сум=РозничнаяЦена*Кол; 
            ТЗ.Сумма=_сум;
        КонецЕсли;
    КонецЕсли;
   // Выгрузим таблицу заначений...

    ТЗ.Выгрузить(ТаблицаВыбора);
   // а теперь очистим её, т.к. нам надо заносить новые данные!!!

    ТЗ.Очистить();
КонецПроцедуры
//********************************************* 

Процедура ПриВыбореСтроки()  
    ДобавитьВТЗ();
КонецПроцедуры
//********************************************* 

Процедура Карта()
   Если ФлагСкидки=1 Тогда
       Предупреждение("Уже была сделана скидка на товар!!!
        |Нельзя два раза сделать скидку!!!");
        Возврат;
    КонецЕсли;
    ФлагСкидки=1;
    _Скидка=НомКарты.ДисконтСкидка;
    Скидка=_Скидка;
    ТаблицаВыбора.ВыбратьСтроки();
    Пока ТаблицаВыбора.ПолучитьСтроку()=1 Цикл
        ТаблицаВыбора.ЦенаСоСкидкой=ТаблицаВыбора.Цена-((ТаблицаВыбора.Цена/100)*скидка);
        ТаблицаВыбора.СуммаСоСкидкой=ТаблицаВыбора.ЦенаСоСкидкой*ТаблицаВыбора.Кол;
    КонецЦикла; 
    СуммСкид=(ТаблицаВыбора.Итог("Сумма"))-(ТаблицаВыбора.Итог("СуммаСоСкидкой"));
КонецПроцедуры 
//********************************************* 

Процедура ВПечать()
    Если ТаблицаВыбора.КоличествоСтрок()=0 Тогда
        Предупреждение("Зачем создавать пустые документы?");
        Возврат;
    КонецЕсли;
    Док=СоздатьОбъект("Документ.РасходнаяМагазин");
    Дисконт = СоздатьОбъект("Справочник.ДисконтныеКарты");
    Док.Новый();
   // Заполним шапку документа :-)

    Если Дисконт.НайтиПоНаименованию(НомКарты.Наименование,0,1)=1 Тогда
       //Сообщить("Нашли!!!   "+Дисконт.ТекущийЭлемент());

        Док.НомКарты=Дисконт.ТекущийЭлемент(); 
    КонецЕсли;
    Док.Автор=Пользователь;
    Док.Зал=НашиОтделы;
    Док.Склад=Константа.ОсновнаяФирма;
    Док.Клиент=ВыбКлиент;
    Док.Склад=Константа.ОсновнойСклад;
    Док.Фирма=Константа.ОсновнаяФирма;
    Док._ПроцСкидки=_Скидка;
    Док.ПризнакНакладной=Перечисление.ПризнРасхНакл.Продажа;
    Док.ДатаДок=РабочаяДата();
    Док.Валюта=Константа.ОсновнаяВалютаПродажи;
    Док.Дата_Курса=Док.ДатаДок;
    Док.Курс=КурсДляВалюты(Док.Валюта,Док.Дата_Курса);
    Док.ТипЦен=Перечисление.ТипыРасхЦен.Розничные;
    Док.УчитыватьНП=0;
    Док.Записать();
   // конец заплнения шапки документа

   // А теперь заполним табличную часть документа

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

        Док.Количество=ТаблицаВыбора.Кол;
        Док.ЦенаСоСкидкой=ТаблицаВыбора.ЦенаСоСкидкой;
        Док.Сумма=ТаблицаВыбора.Сумма;
        Док.СуммаСоСкидкой=ТаблицаВыбора.СуммаСоСкидкой;
    КонецЦикла;
   // теперь ещё раз запишем документ

    Док.Записать();
   //очистим фапку документов...

    Склад=Константа.ОсновнойСклад;
    Фирма=Константа.ОсновнаяФирма;
    ВыбКлиент=Константа.ОсновнойПокупатель;
    НомКарты=0;
    Скидка=0;
    СуммСкид=0;
   // очистим интерактивную таблицу

    ТаблицаВыбора.Очистить(); 
   // и заполним её заново...

    ТЗ.НоваяКолонка("Код","Число",6,,"Код",6);
    ТЗ.НоваяКолонка("Товар","Строка",100,,"Товар",30);
    ТЗ.НоваяКолонка("Кол","Число",8,2,"Кол",10);
    ТЗ.НоваяКолонка("Единица",,,"строка","Единица",10);
    ТЗ.НоваяКолонка("Цена","Число",8,2,"Цена",10);
    ТЗ.НоваяКолонка("Сумма","Число",8,2,"Сумма",10);
    ТЗ.НоваяКолонка("ЦенаСоСкидкой","Число",8,2,"ЦенаСоСкдикой",10);
    ТЗ.НоваяКолонка("СуммаСоСкидкой","Число",8,2,"СуммаСоСкидкой",10); 
    ТЗ.Выгрузить(ТаблицаВыбора);
    КонтФ="Программно";
    ОткрытьФорму(Док.ТекущийДокумент(), КонтФ,1);
КонецПроцедуры
//********************************************* 

Форма.КнопкаПоУмолчанию("Закрыть");
 
  Рекламное место пустует
   gr13
 
1 - 14.04.04 - 08:56
http://www.forum.mista.ru/rules.htm

Тема должна отражать суть сообщения. (с) Волшебник
   LeXXus
 
2 - 14.04.04 - 09:02
Что конкретно не получается? а то текста много, а сути проблеммы нет
   steltec
 
3 - 14.04.04 - 09:03
Проблема заключается в том, что незаносятся в табличную часть документа РозничнаяЦена(переодический элемент) и ЕД=Справочник.Номенклатура.БазоваяЕдиницаИзмерения=>Является подчинённым справочником...
Всё остально заноситься...
я в тупике..
   LeXXus
 
4 - 14.04.04 - 09:07
На Справочник.Номенклатура.БазоваяЕдиницаИзмерения нужно поставить  .ИспользоватьВладельца(
   LeXXus
 
5 - 14.04.04 - 09:09
А по сообщить РозничнаяЦена сообщается?
   steltec
 
6 - 14.04.04 - 09:13
Поправочка...
ЕД=Справочник.Номенклатура.БазоваяЕдиницаИзмерения=>Является владельцем подчинёного справочника Единицы
   steltec
 
7 - 14.04.04 - 09:14
2 (5)
Да, цена сообщается, но в табличную часть документа не заносится...
   Z1
8 - 14.04.04 - 09:20
(0)
Вместо строк
           Док.Товар=Тов.ТекущийЭлемент(); 
           Док.Цена=Док.Товар.РозничнаяЦена.Получить(Док.ДатаДок); 
напиши
           Док.Товар=Тов.ТекущийЭлемент(); 
          Док.Цена=Тов.РозничнаяЦена;
До цикла поставь еще одну строчку
Тов.ИспользоватьДату(РабочаяДата());
   LeXXus
 
9 - 14.04.04 - 09:29
Единицы.ИспользоватьВладельца(Справочник.Номенклатура.БазоваяЕдиницаИзмерения)
   LeXXus
 
10 - 14.04.04 - 09:31
БазоваяЕдиницаИзмерения.НайтиПоНаименованию(Справочник.Номенклатура.БазоваяЕдиницаИзмерения());
Единицы.ИспользоватьВладельца(БазоваяЕдиницаИзмерения.ТекущийЭлемент());
Ед = Единицы.ТекущийЭлемент()
 
  Рекламное место пустует
   steltec
 
11 - 14.04.04 - 09:36
ВремЕд=Тов.БазоваяЕдиницаИзмерения;
Сообщить(ВремЕд);
Тоже сообщает "шт.", но в табличную часть документа не заносится.
Свойства табличной части документа:
Товар - Справочник.Номенклатура
Количество - Число
Единица - Справочник.Единицы(Подчинён Спр.Номенклатура).
Цена - Число
ЦенаСоСкидкой - Число
Сумма - Число
СуммаСоСкидкой - число
Замена - Перечисление.Замены
//************************
На всякий случай... База ДБФ. Релиз 20 СКЛ... может с этим как-то связано?
/////////////////////
- Почему я не могу быть хакером? В чем проблема?
- Проблема в твоём ДНК!
   BorisG
 
12 - 14.04.04 - 10:04
(11) Вообще-то хамить не стоит. Уже то, что выложил целую страницу является неуважением к посетителям форума.
Достаточно того, что еще со страницей твоего текста разбираются.
   LeXXus
 
13 - 14.04.04 - 10:11
Дык в ТИСе БазоваяЕдиницаИзмерения -перечисление, а Единица - Справочник.Единицы и ты хочешь заставить их пересекаться простым ВремЕд=Тов.БазоваяЕдиницаИзмерения
Док.Единица=ВремЕд; 
????
Однако
   steltec
 
14 - 14.04.04 - 10:40
2 (12)
п.1 Простой анекдот... почти детский... ничего личного.
п2. За разбор спасибо... пойду сделаю апгрейт своего ДНК через ЖКК
2 (13)
После апгейта буду разбираться...

2 ALL
Всем спасибо за участие в жаркой дискуссии.


Список тем форума
Рекламное место пустует   Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует