Вопрос № 88089: Здравствуйте. Результаты 2-х различных запросов я поместила в 2 таблицы значений соответственно, теперь нужно вывести всех контрагентов и СНК() из табЗнач62 а документы по этим контрагентам из другой табЗнач76. У меня получается что, по табЗнач62 все...Вопрос № 88157: Здравствуйте уважаемые эксперты! Мне необходимо: если текущий элемент справочника принадлежит группе с наименованием, например А, или кодом а, то добавляется
закладка на форме. Если можно с комментариями, а то у меня похоже проблема с пониманием пози...
Вопрос № 88.089
Здравствуйте. Результаты 2-х различных запросов я поместила в 2 таблицы значений соответственно, теперь нужно вывести всех контрагентов и СНК() из табЗнач62 а документы по этим контрагентам из другой табЗнач76. У меня получается что, по табЗнач62 все выполняется правильно, а по ТаБзнач76 только 1-е значение и все, если же я использую выбратьСтроки() то получается полный бред.
Приложение:
Отправлен: 22.05.2007, 16:27
Вопрос задал: Fifina (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 5)
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Fifina!
Ну, это стандартная ошибка- не присвоены начальные значения
НомСтр=0;//Поиск по всем строкам
Номкол="Контрагент"//Поиск по колонке Контрагент
если табЗнач76.найтиЗначение(контрагент,номстр,номкол)=1 тогда
табЗнач76.ПолучитьСтрокуПоНомеру(номСтр);
Строки же типа табзнач76.ПолучитьЗначение(номстр,номКол);
совершенно излишние, ведь Вы полученное значение ничему не присваиваете.
Лишняя также строка контр=табЗнач76.Контрагент;, ведь Вы получите, естественно, то же значение, что и искали, а именно контрагент
И вообще, код какой-то сумбурный (если, конечно, он не сокращенный для удобочитаемости). Если счет 62.2 не группа, то незачем выбирать счета, потому что он единственный, по которому сделан запрос. Выбирается сразу второе субконто, а ведь по стандартам нужно сначала выбирать первое субконто, а потом второе.
Кроме того, есть серьезное замечание. У одного контрагента может быть несколько договоров, и это значит, что табЗнач76 будет иметь несколько строк с одинаковым контрагент. НайтиЗначение всегда будет искать первую строку, содержащую контрагента. Выйти из ситуации можно тремя способами:1. свернуть табЗнач76 по контрагенту 2. добавить служебную колонку Индекс типа неограниченная строка, состоящую из имени контрагента и договора и искать по этой колонке 3. Перебирать всю таблицу табЗнач76 в цикле (как закомментировано).
Следует отметить, что перебор в цикле работает очень медленно, лучше сделать индекс или отказаться от детализации по договорам.
Если мы об одном и том же, то смотрите приложение. Делал под свои план счетов, так что просмотрите, нигде ничего не забыл на место поставить
Приложение:
Ответ отправил: Dmitry Stashenko (статус: 2-ой класс)
Ответ отправлен: 22.05.2007, 18:41 Оценка за ответ: 4 Комментарий оценки: спасибо за ответ, я так пробывала результат выдается неправильно
Отвечает: Elric
Здравствуйте, Fifina!
Попробуйте мой вариант. Я поубирал все лишнее, исправил несколько неточностей. Хотя, конечно, не видя данных и самой печтной формы...
Приложение:
--------- Мирный атом в КАЖДЫЙ дом!
Ответ отправил: Elric (статус: Специалист)
Ответ отправлен: 23.05.2007, 00:32 Оценка за ответ: 4 Комментарий оценки: Спасибо за ответ. но в вашем коде ошибка: табЗнач76.ПолучитьСтрокуПоНомеру(номСтр); Номер за пределами значения!
Отвечает: Ромашов Евгений Николаевич
Здравствуйте, Fifina!
на мой взгляд лучше использовать следующий метод, запросы рассчитываются также но выборку из них нужно производить следующим способом
выбрать счета можно не использовать так указанные счета не группы
Ит.ВыбратьСубконто(ВидыСубконто.Контрагенты);
Пока Ит.ПолучитьСубконто(ВидыСубконто.Контрагенты) = 1 Цикл
Контрагент = Ит.Субконто(ВидыСубконто.Контрагенты);
// здесь выбираем договора
Ит.ВыбратьСубконто(ВидыСубконто.Договоры);
Пока Ит.ПолучитьСубконто(ВидыСубконто.Договоры) = 1 Цикл
Договор = Ит.Субконто(ВидыСубконто.Договоры);
КонецЦикла;
// после получаем документы по контрагенту, если они были
Если Итб.ПолучитьСубконто(ВидыСубконто.Контрагенты,,Контрагент) = 1 Тогда
Итб.ВыбратьСубконто(ВидыСубконто.СчетаФактурыВыданные);
Пока Итб.ПолучитьСубконто(ВидыСубконто.СчетаФактурыВыданные) = 1 Цикл
СчетФактура = Итб.Субконто(ВидыСубконто.СчетаФактурыВыданные);
//выводим ее или обрабатываем как нам нужно
КонецЦикла;
КонецЕслИ;
КонецЦикла;
и комментарий: в данном случае в первом запросе не понятно зачем выбирать договора, если в случае если их больше одного, будет не возможно указать авансовые счетафатуры на них (хотя можно записать в таблицу и счетфактуры по полю договор выбрать)
если использовать таблицы то нужно организовать указанный выше цикл только во втором выбирать счетафактуры при условии совпадения контрагентов
Ответ отправил: Ромашов Евгений Николаевич (статус: 1-ый класс)
Ответ отправлен: 23.05.2007, 05:16 Оценка за ответ: 4 Комментарий оценки: Спасибо, но я наверное задала вопрос неправильно, мне нужно получить и тех контрагентов у которых нет остатка по 76.ав, но есть по 62.2
Вопрос № 88.157
Здравствуйте уважаемые эксперты! Мне необходимо: если текущий элемент справочника принадлежит группе с наименованием, например А, или кодом а, то добавляется закладка на форме. Если можно с комментариями, а то у меня похоже проблема с пониманием позиционирования. Заранее спасибо!
Приложение:
Отправлен: 22.05.2007, 23:36
Вопрос задала: Darina (статус: Посетитель)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Полозов Олег aka Asher
Здравствуйте, Darina!
Проверьте что имя слоя и параметр передаваемый в методе ДобавитьЗначение идентичны. У вас параметр с пробелом. а идентификатор слоя пробелы не допускает.
Ответ отправил: Полозов Олег aka Asher (статус: 5-ый класс)
Ответ отправлен: 23.05.2007, 02:28 Оценка за ответ: 4 Комментарий оценки: Это у меня прописано в ПриВыбореЗакладки(). Всё оказалось проще...
Отвечает: DERL.KG
Здравствуйте, Darina!
Тогда делайте так
Спр=СоздатьОбъект("Справочник.ОсновныеСредства");
Спр2=СоздатьОбъект("Справочник.ОсновныеСредства");
Спр2.НайтиПоНаименованию("А");// или Спр2.НайтиПоКоду("а");
...
Если Спр.ТекущийЭлемент().ПринадлежитГруппе(Спр2.ТекущийЭлемент())=1 Тогда
Форма.Закладки.ДобавитьЗначение("Прочие сведения");
КонецЕсли;
Хотя если честно не понятно для чего это вам нужно.
Если вы хотите просто сделать закладки по группам справочника к примеру 1-го уровня, то достаточно пройтись циклом
Спр=СоздатьОбъект("Справочник.ОсновныеСредства");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если (Спр.ТекущийЭлемент().ЭтоГруппа() = 1) и (Спр.ТекущийЭлемент().Уровень() = 1) Тогда
Форма.Закладки.ДобавитьЗначение(Спр.Наименование);
КонецЕсли;
КонецЦикла;
Ответ отправил: DERL.KG (статус: 2-ой класс)
Ответ отправлен: 23.05.2007, 07:20 Оценка за ответ: 4 Комментарий оценки: Так как Вы написали я тоже хотела попробовать, но не стала. Именно Ваш ответ натолкнул меня на правильную мысль. Всё проще: Спр=СоздатьОбъект("Справочник.ОсновныеСредства"); Спр.НайтиПоКоду("00000687"); Если ТекущийЭлемент().ПринадлежитГруппе(Спр.ТекущийЭлемент())=1 Тогда Форма.Закладки.ДобавитьЗначение("Прочие сведения");
КонецЕсли;
Отвечает: Dmitry Stashenko
Здравствуйте, Darina!
Добавление закладок в форме обычно делается в процедуре ПриОткрытии(), хотя это и не обязательно, и если у Вас набор закладок зависит, скажем от какого нибудь реквизита, то формирование набора закладок делается при изменении этого реквизита.
Также примите во внимание то, что принадлежность элемента справочника группе можно проверить только в том случае, если этот элемент записан.
Удачи
Приложение:
Ответ отправил: Dmitry Stashenko (статус: 2-ой класс)
Ответ отправлен: 23.05.2007, 10:03 Оценка за ответ: 5 Комментарий оценки: Всё правильно! Спасибо! Моя ошибка была в Спр.ТекущийЭлемент(). А теперь я и ТекущийЭлемент() убрала.
Отвечает: Strawberry
Здравствуйте, Darina!
предполагается что элемент в котором находимся существует (записан)
Приложение:
--------- Мальчик-извращенец прочел деду Морозу с табуретки всего Пастернака!
Ответ отправил: Strawberry (статус: 7-ой класс)
Ответ отправлен: 23.05.2007, 10:28 Оценка за ответ: 4 Комментарий оценки: вот и у Вас эта же ошибка: Спр.ТекущийЭлемент()
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Darina!
Если Вы добавляете закладку оперативно, то меняется нумерация закладок и Вы не можете ПриВыбореЗакладки(Номер,Значение) ориентироваться на номер. Можете ориентироваться только на Значение.
Форма.Закладки.ДобавитьЗначение("ПрочиеСведенияЗначение","Прочие сведения текст для вывода");
Мне кажется, что Форма.Закладки это СписокЗначений, и работать с ним можно как со списком - удалять, добавлять и просматривать значения.
Ну и естественно, необходимо ПриВыбореЗакладки выводить нужный слой.
Ответ отправил: Шахрайчук Владимир Анатольевич (статус: Практикант)
Ответ отправлен: 23.05.2007, 10:29 Оценка за ответ: 4 Комментарий оценки: Спасибо за ответ...