7.7 Документ "Выписка". Условие поиска

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Natalia_k, 19 сен 2011.

  1. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Добрый день!
    Помогите, пожалуйста, написать условие поиска.

    у меня есть документ "Выписка". В нем есть возможность загрузить данные из DBF файла. Проблема в том, что Вид ДДС он берет автоматически первый попавшийся, который относится к "ВидДвижения" = ПоступлениеВзносов.

    Код:
    Если ДДС.НайтиПоРеквизиту("ВидДвижения",Перечисление.ВидыДвиженийДенежныхСредств.ПоступлениеВзносов,1) = 1 Тогда
    ВидДДС = ДДС.ТекущийЭлемент();
    Иначе
    ДДС.Новый();
    ДДС.ВидДвижения = Перечисление.ВидыДвиженийДенежныхСредств.ПоступлениеВзносов;
    ДДС.Наименование = "Поступление взносов";
    ДДС.Записать();
    ВидДДС = ДДС.ТекущийЭлемент();
    КонецЕсли; 
    

    Как мне взять ДДС по наименованию из справочника Движение денежных средств = "Взносы физ. лиц", у которого "ВидДвижения" = ПоступлениеВзносов?


    Код:
    Процедура ЗагрузитьВзносы() 
    Контр = СоздатьОбъект("Справочник.Контрагенты");
    Дог = СоздатьОбъект("Справочник.Договоры");
    ДДС = СоздатьОбъект("Справочник.ДвиженияДенежныхСредств");
    РУ = СоздатьОбъект("Справочник.РазделительУчета");
    Протокол = СоздатьОбъект("Текст");
    
    Если ДДС.НайтиПоРеквизиту("ВидДвижения",Перечисление.ВидыДвиженийДенежныхСредств.ПоступлениеВзносов,1) = 1 Тогда
    ВидДДС = ДДС.ТекущийЭлемент();
    Иначе
    ДДС.Новый();
    ДДС.ВидДвижения = Перечисление.ВидыДвиженийДенежныхСредств.ПоступлениеВзносов;
    ДДС.Наименование = "Поступление взносов";
    ДДС.Записать();
    ВидДДС = ДДС.ТекущийЭлемент();
    КонецЕсли; 
    
    РУ.Выбрать("Выберите разделитель учета.","ФормаСписка");
    РаздУчета = РУ.ТекущийЭлемент(); 
    Если Константа.ИспользоватьСправочникСубсчета = Перечисление.Булево.Да Тогда
    СчетДДС = Орт_глВозвратитьСубсчет(Контекст,"72.1",РаздУчета);   //взять счет из справочника 02.04.03
    Иначе
    Если РУ.ВидДеятельности = Перечисление.ВидыДеятельности.ПР Тогда
    СчетДДС = СчетПоКоду("72.1");
    ИначеЕсли РУ.ВидДеятельности = Перечисление.ВидыДеятельности.ОПС Тогда
    СчетДДС = СчетПоКоду("72.2.1");
    Контр.Выбрать("Выберите Пенсионный фонд, из которого поступили взносы.","ФормаСписка");
    ПФ = Контр.ТекущийЭлемент();
    ИначеЕсли РУ.ВидДеятельности = Перечисление.ВидыДеятельности.ППС Тогда 
    СчетДДС = СчетПоКоду("72.2.2");
    Иначе
    Сообщить("Загрузить взносы с таким разделителем учета нет возможности.");
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    Файл=СоздатьОбъект("XBASE"); 
    Если РУ.ВидДеятельности = Перечисление.ВидыДеятельности.ОПС Тогда
    Если ФС.ВыбратьФайл(0,ИФ,ИП,"Выберите файл данных","Файлы XML (*.xml)|*.xml|Файлы данных(*.dbf)|*.dbf",,)=0 Тогда
    Возврат;
    КонецЕсли; 
    Иначе
    Если ФС.ВыбратьФайл(0,ИФ,ИП,"Выберите файл данных","Файлы данных(*.dbf)|*.dbf",,)=0 Тогда
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    ПутьДБ=ИП+ИФ; 
    Если НРЕГ(Прав(СокрЛП(Строка(ПутьДБ)),3)) = "dbf" Тогда
    Файл.ОткрытьФайл(ПутьДБ); 
    Ном=0; 
    Для Н=1 по Файл.КоличествоЗаписей() Цикл
    Состояние(Н);
    НомерДоговора = "";
    КодВкладчика = ""; 
    НомерПФР = "";
    СуммаВзноса = 0;
    НомерПлатежки = "";
    ДатаПлатежки = "";
    Если (РУ.ВидДеятельности = Перечисление.ВидыДеятельности.ПР)
    или (РУ.ВидДеятельности = Перечисление.ВидыДеятельности.ППС) Тогда
    НомерДоговора = СокрЛП(Файл.DOGOVOR); 
    Попытка
    КодВкладчика = СокрЛП(Файл.CODE); 
    Исключение 
    КонецПопытки;
    Попытка
    НомерПФР = СокрЛП(Файл.NOMER_PFR);
    Исключение
    КонецПопытки;
    Попытка
    СуммаВзноса = Файл.SUM; 
    Исключение 
    КонецПопытки; 
    Попытка
    НомерПлатежки = СокрЛП(Файл.NOM); 
    Исключение 
    КонецПопытки;
    Попытка
    ДатаПлатежки = Файл.DAT; 
    Исключение 
    КонецПопытки; 
    Если ПустоеЗначение(КодВкладчика) = 0 Тогда  
    Если Контр.НайтиПоКоду(КодВкладчика) = 1 Тогда
    Если ПустоеЗначение(НомерДоговора) = 0 Тогда 
    Дог.ИспользоватьВладельца(Контр.ТекущийЭлемент()); 
    Если Дог.НайтиПоНаименованию(НомерДоговора,1,1) = 1 Тогда 
    НоваяСтрока();
    ВидДвижения = ВидДДС;
    НазначениеПлатежа = "поступление взносов";
    КоррСчет = СчетДДС;
    РазделительУчета = РаздУчета;
    НазначитьТипыСубконто(); 
    Субконто1 = Дог.Владелец;
    Субконто2 = Дог.ТекущийЭлемент();
    Если РаздУчета.ВидДеятельности = Перечисление.ВидыДеятельности.ПР Тогда
    Субконто3 = Перечисление.ТипВзноса.Физ;
    Иначе
    Субконто3 = ПФ;
    КонецЕсли;
    //Сообщить("Договор "+Дог+" Вкладчик "+Дог.Владелец);
    Приход = СуммаВзноса;
    НомерДокВходящий = НомерПлатежки;
    ДатаДокВходящий = ДатаПлатежки; 
    Иначе
    Протокол.ДобавитьСтроку("У Вкладчика с кодом "+КодВкладчика+" не найден договор с номером "+НомерДоговора);
    КонецЕсли;
    Иначе
    Протокол.ДобавитьСтроку("В строке "+Н+" не проставлен номер договора.");
    КонецЕсли;
    Иначе
    Протокол.ДобавитьСтроку("Не найден Вкладчик с кодом "+КодВкладчика);
    КонецЕсли;
    ИначеЕсли ПустоеЗначение(НомерПФР) = 0 Тогда
    Если Контр.НайтиПоРеквизиту("ПенсионныйНомер",НомерПФР,1) = 1 Тогда
    Если ПустоеЗначение(НомерДоговора) = 0 Тогда 
    Дог.ИспользоватьВладельца(Контр.ТекущийЭлемент()); 
    Если Дог.НайтиПоНаименованию(НомерДоговора,1,1) = 1 Тогда 
    НоваяСтрока();
    ВидДвижения = ВидДДС;
    НазначениеПлатежа = "поступление взносов";
    КоррСчет = СчетДДС;
    РазделительУчета = РаздУчета;
    НазначитьТипыСубконто(); 
    Субконто1 = Дог.Владелец;
    Субконто2 = Дог.ТекущийЭлемент();
    Если РаздУчета.ВидДеятельности = Перечисление.ВидыДеятельности.ПР Тогда
    Субконто3 = Перечисление.ТипВзноса.Физ;
    Иначе
    Субконто3 = ПФ;
    КонецЕсли;
    //Сообщить("Договор "+Дог+" Вкладчик "+Дог.Владелец);
    Приход = СуммаВзноса;
    НомерДокВходящий = НомерПлатежки;
    ДатаДокВходящий = ДатаПлатежки; 
    Иначе
    Протокол.ДобавитьСтроку("У Участника с номером ПФР "+НомерПФР+" не найден договор с номером "+НомерДоговора);
    КонецЕсли;
    Иначе
    Протокол.ДобавитьСтроку("В строке "+Н+" не проставлен номер договора.");
    КонецЕсли;
    Иначе
    Протокол.ДобавитьСтроку("Не найден Участник с номером ПФР "+НомерПФР);
    КонецЕсли;
    Иначе 
    Если ПустоеЗначение(НомерДоговора) = 0 Тогда 
    Если Дог.НайтиПоНаименованию(НомерДоговора,0,1) = 1 Тогда
    НоваяСтрока();
    ВидДвижения = ВидДДС;
    НазначениеПлатежа = "поступление взносов";
    КоррСчет = СчетДДС;
    РазделительУчета = РаздУчета;
    НазначитьТипыСубконто(); 
    Субконто1 = Дог.Владелец;
    Субконто2 = Дог.ТекущийЭлемент();
    Если РаздУчета.ВидДеятельности = Перечисление.ВидыДеятельности.ПР Тогда
    Субконто3 = Перечисление.ТипВзноса.Физ;
    Иначе
    Субконто3 = ПФ;
    КонецЕсли;
    //Сообщить("Договор "+Дог+" Вкладчик "+Дог.Владелец);
    Приход = СуммаВзноса;
    НомерДокВходящий = НомерПлатежки;
    ДатаДокВходящий = ДатаПлатежки;
    Иначе
    Протокол.ДобавитьСтроку("Не найден договор с номером "+НомерДоговора);
    КонецЕсли;
    Иначе
    Протокол.ДобавитьСтроку("В строке "+Н+" не проставлен номер договора.");
    КонецЕсли;
    КонецЕсли; 
    
    Иначе//по ОПС    
    НомерПФР = СокрЛП(Файл.NOMER_PFR); 
    Попытка
    СуммаВзноса = Файл.SUM; 
    Исключение 
    КонецПопытки; 
    Попытка
    НомерПлатежки = СокрЛП(Файл.NOM); 
    Исключение 
    КонецПопытки;
    Попытка
    ДатаПлатежки = Файл.DAT; 
    Исключение 
    КонецПопытки;
    Если ПустоеЗначение(НомерПФР) = 0 Тогда
    Если Контр.НайтиПоРеквизиту("ПенсионныйНомер",НомерПФР,1) = 1 Тогда
    Дог.ИспользоватьВладельца(Контр.ТекущийЭлемент());  
    Дог.ВыбратьЭлементы(); 
    Найден = 0;
    Пока Дог.ПолучитьЭлемент() = 1 Цикл 
    Если Дог.ТипПенсионногоДоговора = Перечисление.ТипыПенсионныхДоговоров.ОПС Тогда
    ДогОПС = Дог.ТекущийЭлемент();
    Найден = 1;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Если Найден = 1 Тогда  
    НоваяСтрока();
    ВидДвижения = ВидДДС;
    НазначениеПлатежа = "поступление взносов";
    КоррСчет = СчетДДС;
    РазделительУчета = РаздУчета;
    НазначитьТипыСубконто(); 
    Субконто1 = ДогОПС.Владелец;
    Субконто2 = ДогОПС;
    Субконто3 = ПФ;
    //Сообщить("Договор "+Дог+" Вкладчик "+Дог.Владелец);
    Приход = СуммаВзноса;
    НомерДокВходящий = НомерПлатежки;
    ДатаДокВходящий = ДатаПлатежки;
    Иначе 
    Протокол.ДобавитьСтроку("У Участника "+СокрЛП(Контр.Код)+" с номером ПФР "+НомерПФР+" не найден договор ОПС.");
    КонецЕсли;
    Иначе
    Протокол.ДобавитьСтроку("Не найден Участник с номером ПФР "+НомерПФР);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    Файл.Следующая();                         
    КонецЦикла;	
    Файл.ЗакрытьФайл();
    Сообщить("Загрузка завершена !!!");
    Если Протокол.КоличествоСтрок()>0 Тогда
    Протокол.Показать("Протокол загрузки",);
    КонецЕсли; 
    ИначеЕсли НРЕГ(Прав(СокрЛП(Строка(ПутьДБ)),3)) = "xml"  Тогда
    Open(ПутьДБ,ВидДДС, СчетДДС, РаздУчета, ПФ);
    Иначе
    Сообщить("Загрузка невозможна. Слишкрм длинное имя файла. Длина имени не должна превышать 58 знаков. Переименуйте файл и повторите попытку.");
    КонецЕсли;
    КонецПроцедуры
    
  2. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    Код:
     Если ДДС.НайтиПоРеквизиту("ВидДвижения",Перечисление.ВидыДвиженийДенежныхСредств.ПоступлениеВзносов,1) = 1 Тогда
    ВидДДС = Справочникт.ДвиженияДенСредств.НайтиПоНаименованию("Взносы физ. лиц");
    //ВидДДС = ДДС.ТекущийЭлемент();
    Иначе
    ДДС.Новый();
    ДДС.ВидДвижения = Перечисление.ВидыДвиженийДенежныхСредств.ПоступлениеВзносов;
    ДДС.Наименование = "Поступление взносов";
    ДДС.Записать();
    ВидДДС = ДДС.ТекущийЭлемент();
    КонецЕсли;
    
    
    Не оно??
  3. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    В это случае выскакивает ошибка:
    Код:
    ВидДДС = Справочник<<?>>.ДвиженияДенежныхСредств.НайтиПоНаименованию("Взносы физ. лиц");
    {Документ.Выписка.Форма.Модуль(802)}: Переменная не определена (Справочник)
    

    Если же написать так:
    Код:
    ВидДДС = ДДС.НайтиПоНаименованию("Взносы физ. лиц");
    {Документ.Выписка.Форма.Модуль(802)}: Переменная не определена (Справочник)
    
    то поле становится пустым.


    Что делать? ход мыслей верный
  4. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    Попробуйте так :
    Код:
     ВидДДС = СправочникИ.ДвиженияДенежныхСредств.НайтиПоНаименованию("Взносы физ. лиц"); 
    
    
    Хотя вряд ли.. у Вас же 7..
  5. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Ошибка
    Код:
    ВидДДС = СправочникИ<<?>>.ДвиженияДенежныхСредств.НайтиПоНаименованию("Взносы физ. лиц");
    {Документ.Выписка.Форма.Модуль(802)}: Переменная не определена (СправочникИ)
    
    Как же быть? :angry:
  6. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    А если попробовать найти какое-нибудь место в модуле и посмотреть как обратиться к конкретному элементу справочника?
  7. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    Код:
    СпрДДС = СоздатьОбъект("Справочник.ДвижениеДенСредств")
    ДДС = СпрДДС.НайтиПоНаименованию("Ваше Наименование");
    
    
    
    
    может так? :)
  8. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Код:
     	ВидыДвижений = СоздатьОбъект("Справочник.ДвиженияДенежныхСредств");
    Объект.НазначитьТип(ИмяСубконто2, "Справочник.ДвиженияДенежныхСредств");
    ОткрытьФорму("Справочник.ДвиженияДенежныхСредств", Перечисление.ВидыДвиженийДенежныхСредств.ОплатаТруда);
    
  9. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    Заработало?
  10. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Там в самом модуле уже это есть:

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

    То поле становится пустым, значение не выбирается. не пойму, правда, почему
  11. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Код

    Код:
    Если ДДС.НайтиПоРеквизиту("ВидДвижения",Перечисление.ВидыДвиженийДенежныхСредств.ПоступлениеВзносов,1) = 1 Тогда 
    
    
    СпрДДС = "Справочник.ДвиженияДенежныхСредств";
    ДДС = СпрДДС.НайтиПоНаименованию("Поступление пенсион. взносов от физ.лиц");
    

    Ошибка

    Код:
    ДДС = СпрДДС.НайтиПоНаименованию("Поступление пенсион. взносов от физ.лиц");
    {Документ.Выписка.Форма.Модуль(806)}: Значение не представляет агрегатный объект (НайтиПоНаименованию)
    
    
  12. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Не ужели больше ничего нельзя сделать?
  13. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    Поидее должно работать... попробуйте по примеру _http://www.mista.ru/tutor_1c/sprav.htm
  14. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    >Как мне взять ДДС по наименованию из справочника Движение денежных средств = "Взносы физ. лиц", у которого "ВидДвижения" = ПоступлениеВзносов?

    тип вид движения - перечисление
    глянь-ка в конфигураторе какое перечисление соответствует твоему ПоступлениеВзносов

    переосмысли чё хочешь и задай вопрос ещё раз
  15. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    У меня получилось!!!!!!!!!

    n.s.gnedash, Спасибо вам большое!
    Я посмотрела ту ссылку и на основании её написала, всё получилось!

    Код:
    Если ДДС.НайтиПоРеквизиту("ВидДвижения",Перечисление.ВидыДвиженийДенежныхСредств.ПоступлениеВзносов,1) = 1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда	</span>
    
    ДДС.НайтиПоКоду(00095);
    
    Если ДДС.НайтиПоНаименованию(" взносы физ.лиц")=1 Тогда
    ВидДДС = ДДС.ТекущийЭлемент();
    КонецЕсли; 
    
    Иначе
    ДДС.Новый(); 
    
    
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Странный у вас подход.. Поск по коду и тут же по наименованию..

Поделиться этой страницей