Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Дек 2017, 09:29
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Как программно перейти к нужной строке в журнале документов?  (Прочитано 10601 раз)

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

Оффлайн nick_E

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-10-07
  • Сайт: 
  • Профессия: Консультант 1С
Делаю быстрый поиск по колонке журнала, не могу найти, как сделать переход к нужной строке. :(
Подскажите такое вообще возможно в журнале документов, конфигурация любая 8.2?
Код следующий, делаю выборку в журнале нахожу документ с нужную суммой, дальше надо узнать в какой строке журнала документ и перейти к ней. Процедура привязана к кнопке на форме журнала.

Процедура ПоискВКолонке(Колонка,Данные)
Колонка =  ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.Имя;
Данные = Число(500);
Сообщить("ТекущаяКолонка="+Колонка);
Выборка = ЖурналыДокументов.БанковскиеВыписки.Выбрать();
Пока Выборка.Следующий() Цикл

Сообщить("Найден документ: " +Выборка.ПолучитьОбъект()+" на сумму "+ Выборка.Списано);

Если Выборка.Списано = Данные тогда
// здесь нужно сделать переход к строке с нужным документом
           КонецЕсли;
КонецЦикла


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


Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
Если надо один раз перейти к самой первой найденной строке то примерно так.
//ищем документ с суммой 50000
ОтборПоиска = Новый Структура;
ОтборПоиска.Вставить("Приход", 50000);
Выборка = ЖурналыДокументов.КассовыеДокументы.Выбрать(,,ОтборПоиска);
если Выборка.Следующий() тогда
ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока = ВЫборка.Ссылка;
КонецЕсли;
Если же надо при каждом нажатии на кнопку поиска позиционироваться на новый найденный документ, то тут уже немного сложнее. Тут придется отсеивать уже найденные. В таком случае лучше подойдет отбор, хотя конечно все зависит от задачи.

Оффлайн nick_E

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-10-07
  • Сайт: 
  • Профессия: Консультант 1С

Оффлайн nick_E

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-10-07
  • Сайт: 
  • Профессия: Консультант 1С
Ну, вот кое-как сделала быстрый поиск по колонке в журнале документов! :)
Делал для конфигурации «Бухгалтерия бюджетного учреждения версия 1.0.22.2»,  наверно многим пригодится, т.к. в 8й версии почему-то быстрый поиск убрали.
Кому не лень, пожалуйста, оптимизируйте код, наверняка можно сделать его намного меньше и использовать другие функции, про которые я давно забыл. :)
Модераторы можете переименовать тему в «Быстрый поиск в журнале документов для версии 8х»

Оффлайн nick_E

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-10-07
  • Сайт: 
  • Профессия: Консультант 1С
//*************************************************************************************************
//********************* ПРОЦЕДУРЫ БЫСТРОГО ПОИСКА В КОЛОНКЕ ***************************************
//*************************************************************************************************
//
// кроме того добавляем строки:
// ПредыдущиеДанные = "";
//     НайденныйОбъект = Новый СписокЗначений;
// в процедуру ПриОткрытии()
//
// и глобальные переменные:
// Перем ПредыдущиеДанные,НайденныйОбъект;
//
// ну и конечно кнопку "Быстрый поиск" на панель инструментов
//
// п.с. 5ть лет не брался за 1ску, тогда еще была 7ка, в 8ке оказывается сильно изменился
// встроенный язык, про что вспомнил на том и написал :)
//*************************************************************************************************

Оффлайн nick_E

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-10-07
  • Сайт: 
  • Профессия: Консультант 1С
Функция НачалоСтроки(Строка,Подстрока)
Строка = СокрЛП(НРег(Строка));
Подстрока = НРег(Подстрока);
    // убираем пробелы если число, кстати в числе какойто другой символ,а не пробел, скопировал его
    Строка = СтрЗаменить(Строка," ","");
//    Сообщить("Подстрока ="+Подстрока+"_");
// Сообщить("Строка="+Строка);
// сморим есть ли в начале строки
Если Лев(Строка,СтрДлина(Подстрока)) = Подстрока тогда
Возврат 1;
Иначе
// Сообщить("Поиск подстроки " + Подстрока+ " в строке "+строка+" вернул 0");
    Возврат 0;
КонецЕсли;
КонецФункции


Оффлайн nick_E

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-10-07
  • Сайт: 
  • Профессия: Консультант 1С
Функция ВернутьИдентификатор(Выборка,ИмяИдентификатора)
Если ИмяИдентификатора = "Выбыло" тогда
Возврат(Выборка.Выбыло);
ИначеЕсли ИмяИдентификатора = "Поступило" тогда
Возврат(Выборка.Поступило);
ИначеЕсли ИмяИдентификатора = "Номер" тогда
Возврат(Выборка.Номер);
ИначеЕсли ИмяИдентификатора = "Вид документа" тогда
Возврат(Выборка.ВидПервичногоДокумента);
ИначеЕсли ИмяИдентификатора = "Дата документа" тогда
Возврат(Выборка.ДатаПервичногоДокумента);
ИначеЕсли ИмяИдентификатора = "Основание" тогда
Возврат(Выборка.Основание);
ИначеЕсли ИмяИдентификатора = "Вид операции" тогда
Возврат(Выборка.ВидОперации);
//ИначеЕсли ИмяИдентификатора = "" тогда
КонецЕсли;
КонецФункции


Оффлайн nick_E

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-10-07
  • Сайт: 
  • Профессия: Консультант 1С
Процедура ПоискВКолонке(Кнопка)
ОчиститьСообщения() ;
Данные ="";
Подсказка = "Поиск по "+ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки;
// Сообщить("ПредыдущиеДанные="+СокрЛП(ПредыдущиеДанные)+"_");
Если СокрЛП(ПредыдущиеДанные) <> "" тогда
Данные = СокрЛП(ПредыдущиеДанные);
КонецЕсли;
ВвестиЗначение(Данные, Подсказка,);
// Сообщить("ТекущаяКолонка="+Колонка);
Выборка = ЖурналыДокументов.РасчетноПлатежныеДокументы.Выбрать();     
//*************************************************************
// Перебор строк журнала документов
//*************************************************************
Пока Выборка.Следующий() Цикл
// Сообщить("Найден документ: " +Выборка.ПолучитьОбъект()+" на сумму "+ ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.имя);
// Сообщить("Текущая строка = " +ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока);
// Сообщить("Текущий идентификатор="+СокрЛП(ВернутьИдентификатор(Выборка,ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки)));
        //***************************************************
// если найдено совпадение с началом искомой строки
//***************************************************
Если НачалоСтроки(СокрЛП(ВернутьИдентификатор(Выборка,ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки)), Данные) = 1 тогда
ОчиститьСообщения();
// Сообщить("Выборка.ПолучитьОбъект()="+Выборка.ПолучитьОбъект());
Если   НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))  <> Неопределено тогда
//Если СокрЛП(НайденныйОбъект) = СокрЛП(Выборка.ПолучитьОбъект()) тогда
// Сообщить("Наден предыдущий документ: "+Выборка.ПолучитьОбъект());
Продолжить;
иначе
// Сообщить("Объект в списке"+НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))+"_");
КонецЕсли;
Если ПредыдущиеДанные <> Данные тогда
НайденныйОбъект.Очистить();
ПредыдущиеДанные = Данные;
КонецЕсли;
ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока   = Выборка.ПолучитьОбъект();
НайденныйОбъект.Добавить(СокрЛП(Выборка.ПолучитьОбъект()));
// Сообщить("Добавил в список "+СокрЛП(Выборка.ПолучитьОбъект())+"_");
ПредыдущиеДанные = Данные;
Прервать;


Оффлайн nick_E

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-10-07
  • Сайт: 
  • Профессия: Консультант 1С
//*******************************************************************	
// если надо найти искомую строку в любом месте строки а не в начале
//*******************************************************************
иначеЕсли Прав(СокрЛП(Данные),1) = "*" тогда
//Сообщить("Поиск в любом месте строки");
Если  Найти(СокрЛП(ВернутьИдентификатор(Выборка,ЭлементыФормы.ЖурналДокументовСписок.ТекущаяКолонка.ТекстШапки)),Лев(Данные,СтрДлина(Данные)-1)) <> 0 тогда
// Сообщить("Подстрока найдена в строке");
Если   НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))  <> Неопределено тогда
// Сообщить("Наден предыдущий документ: "+Выборка.ПолучитьОбъект());
Продолжить;
иначе
// Сообщить("Объект в списке"+НайденныйОбъект.НайтиПоЗначению(СокрЛП(Выборка.ПолучитьОбъект()))+"_");
КонецЕсли;
Если ПредыдущиеДанные <> Данные тогда
НайденныйОбъект.Очистить();
ПредыдущиеДанные = Данные;
КонецЕсли;
ЭлементыФормы.ЖурналДокументовСписок.ТекущаяСтрока   = Выборка.ПолучитьОбъект();
НайденныйОбъект.Добавить(СокрЛП(Выборка.ПолучитьОбъект()));
// Сообщить("Добавил в список "+СокрЛП(Выборка.ПолучитьОбъект())+"_");
ПредыдущиеДанные = Данные;
Прервать;
КонецЕсли;
КонецЕсли;   
КонецЦикла;
 КонецПроцедуры


Оффлайн nick_E

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-10-07
  • Сайт: 
  • Профессия: Консультант 1С
Одним сообщением весь код добавить не получилось, пришлось кусками. :(


Теги:
 

Как создать нескольких документов "расчет при увольнении" на основании кадрового документа "увольнение" как Отпуска

Автор cozuРаздел Пользователям "1С - Предприятие 8"

Ответов: 3
Просмотров: 3186
Последний ответ 21 Мар 2015, 20:24
от дфтын
Не работает структура подчиненности документов "Требование-накладная" и "Передач

Автор sv_stas_svРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 4101
Последний ответ 10 Мар 2011, 07:36
от sv_stas_sv
готовая компонента сканирования/загрузки / распознавания бумажных документов (счетов, налоговых накладных, приходных накладных) из бумажного документа в 1с

Автор Св ЧРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 179
Последний ответ 14 Ноя 2017, 10:43
от oleg-x
Реквизит "Ссылка" у справочников и документов

Автор leklerkРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 3028
Последний ответ 29 Май 2013, 16:24
от leklerk
"Дубляж" документов реализации в ВзаиморасчетыКомпанииОстаткиИОбороты

Автор mspuzРаздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 1788
Последний ответ 24 Янв 2014, 13:55
от mspuz

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
177 Сообщений
ilyay ilyay
69 Сообщений
oleg-x
48 Сообщений
AIFrame
44 Сообщений
alex0402
44 Сообщений
andron81_81
38 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
Golickoff Golickoff
31 Сообщений
BuhRust
30 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 646
  • Точка Скрытых: 0
  • Точка Пользователей: 19
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal