|
v7: Заполнение списка значений в цикле | ☑ | ||
---|---|---|---|---|
0
pessok
14.03.13
✎
09:55
|
Коллеги, привет. С клюшками у меня бяда, последний раз в глаза их видел, как минимум, в том десятилетии... Итак, необходимо заполнить список значений при обходе бух.итогов. Что делаю:
Процедура Заполнить() КОбработке.УдалитьВсе(); //список значений, помещенный на форму СчетДТ = СчетПоКоду("78"); ОтборСубк1=2; ОтборСубк2=2; ВыбВидСубконто1=ВидыСубконто.Контрагенты; ВыбВидСубконто2=ВидыСубконто.Договоры; Ит = СоздатьОбъект("БухгалтерскиеИтоги"); Ит.ИспользоватьСубконто(ВыбВидСубконто1, ВыбКонтрагенты, ОтборСубк1); Ит.ИспользоватьСубконто(ВыбВидСубконто2, ВыбДоговоры, ОтборСубк2); Ит.ВыполнитьЗапрос(НачДата, КонДата, СчетДТ, ,,, "Проводка"); Ит.ВыбратьПериоды(); Инд = 1; Пока Ит.ПолучитьПериод() = 1 Цикл Операция = Ит.Операция; Если ПолучитьПроцент(СокрЛП(Операция.СодержаниеПроводки)) = СокрЛП(НачальныйПроцент) Тогда //еще один фильтр, в функции ПолучитьПроцент() только разбор литерала ОтельВПроводке = СокрЛП(Операция.Документ.Комментарий); Если Отели.НайтиЗначение(ОтельВПроводке, , 1) = 1 Тогда //это ТЗ, помещенная на форму, в которую юзверь добавляет еще один фильтр Если КОбработке.Принадлежит(Операция) = 0 Тогда КОбработке.ДобавитьЗначение(Операция); КОбработке.Пометка(Инд, 1); Инд = Инд + 1; КонецЕсли; КонецЕсли; Иначе Продолжить; КонецЕсли КонецЦикла КонецПроцедуры Казалось бы все просто (хотя, скорее всего, я не знаю каких то тонкостей клюшек), но не выходит каменный цветок. В тестовом варианте в бух. итогах две строки в двух разных операциях, обе соответствуют условию ПолучитьПроцент(СокрЛП(Операция.СодержаниеПроводки)) = СокрЛП(НачальныйПроцент) Первая соответствует условию Отели.НайтиЗначение(ОтельВПроводке, , 1) = 1 Вторая - нет. Т.е. в список должна попадать только первая операция. Что на выходе: Первая итерация: все прелестно, в список попала нужная операция. Вторая итерация: на строчке Операция = Ит.Операция; в списке _заменяется ссылка_ на операцию из второй итерации. В условие добавления отладка не входит, ничего в списке _кодом_ не изменяется. Отсюда вопросы: почему меняется ссылка? чяднт? З.Ы. представление не меняется. Заранее спасибо ;) |
|||
1
zak555
14.03.13
✎
09:58
|
> Если ПолучитьПроцент(СокрЛП(Операция.СодержаниеПроводки)) = СокрЛП(НачальныйПроцент)
что за быднло код ? |
|||
2
zak555
14.03.13
✎
09:58
|
ты уверен, что нужно анализировать содержание проводки, а не счета Дт и Кт ?
|
|||
3
pessok
14.03.13
✎
10:00
|
(1) в содержании текст типа: 2653*14%=371*31.19 (грузица из внешней программы). Вот надо проверить вхождение процента, указанного пользователем с "14%"
(2) уверен |
|||
4
1Сергей
14.03.13
✎
10:02
|
(3) для вхождения, как и в 8, используй Найти()
|
|||
5
pessok
14.03.13
✎
10:02
|
(4) да там и используется найти, в функции, я просто вынес код:
Функция ПолучитьПроцент(ОписаниеПроводки) Процент = Найти(ОписаниеПроводки, "%"); ПраваяЧасть = Лев(ОписаниеПроводки, Процент-1); Звезда = Найти(ПраваяЧасть, "*"); Результат = Сред(ПраваяЧасть, Звезда+1); Возврат Результат; КонецФункции |
|||
6
pessok
14.03.13
✎
10:03
|
ребята, хрен с ним, с быдлокодом :) почему ссылка в списке заменяется? :)
|
|||
7
pessok
14.03.13
✎
10:16
|
все воспроизводят, или все забили? :)
|
|||
8
1Сергей
14.03.13
✎
10:18
|
(7) забили. Отладчик в зубы и вперёд
|
|||
9
ЧеловекДуши
14.03.13
✎
10:19
|
(7) Быдло код, и всем побоку.
Используй лучше "Таблицу Значений" (ТЗ), оно работает быстрее. Я про то, что поиск вхождения работает медленней, чем поиск значения в ТЗ. |
|||
10
ЧеловекДуши
14.03.13
✎
10:21
|
+(7)>>> Операция
Ты хоть подумай своей головой, что ты туда пишешь и с чего ты решил, что оно там будет храниться? ...типо отмаз, что ты 8-шник, не канает, там тоже такой код ГУАНО... :) Стоит воспользоваться советом в (8)... |
|||
11
НЕА123
14.03.13
✎
10:21
|
(7)
она не заменяется. семерку уж не помню. типа так КОбработке.ДобавитьЗначение(Операция.ПОлучитьДокумент()); ЗЫ Есть ли типа ПолучитьОперацию - не знаю |
|||
12
Chum
14.03.13
✎
10:21
|
нет под рукой 7-ки :-/
ИТ.Операция.Документ.ТекущийДокумент() ? |
|||
13
pessok
14.03.13
✎
10:23
|
(8) я написал, что у меня в отладчике :)
(9) где там быдлокод? ткни пальцем (10) я хз что такое ОПЕРАЦИЯ в клюшках, вот не помню, хоть убей :) есть документ операция, я думал, что это он, если ошибаюсь - ок, пусть гудет овнокодом :) (11) , (12) спасибо, щас попробуем |
|||
14
ЧеловекДуши
14.03.13
✎
10:23
|
(11) (12) Автор же не писал про документ, ему там надо видеть именно операцию. И желательно одной строкой :)
|
|||
15
ЧеловекДуши
14.03.13
✎
10:25
|
(13) Вот
Операция = Ит.Операция; //Это значение запроса, оно не хранится Если КОбработке.Принадлежит(Операция) = 0 Тогда КОбработке.ДобавитьЗначение(Операция); //Нет такого типа, как "Операция из запроса" :) |
|||
16
Chum
14.03.13
✎
10:25
|
(14) операцию порождает документ. Это касается и объекта Операция, т.к. там "Документ.Операция".
|
|||
17
ЧеловекДуши
14.03.13
✎
10:26
|
(16) Документом может выступать любой документ с табличной частью, где каждая строка могла нарисовать операцию :)
|
|||
18
ЧеловекДуши
14.03.13
✎
10:27
|
+(16) >>> там "Документ.Операция".
Ну, у меня телепат не столь обостренный :) |
|||
19
Chum
14.03.13
✎
10:27
|
(15) >КОбработке.ДобавитьЗначение(Операция);
Вот такой код работать не будет никогда, т.к. в цикле меняется ссылка, а с учетом глючности в 7-ке самого объекта Операция, будут происходить вообще забавные вещи. Как-то собирал в ТЗ на форме операции, получаемые из цикла. Что творилось в колонке с операциями - это нужно было видеть. При использовании .ТекущийДокумент() все стало красиво. |
|||
20
Chum
14.03.13
✎
10:29
|
(17) бред. любой документ может формировать проводки, если это определено в конфигураторе, т.е. установлена соответствующая галка в свойствах документа. Нет галки "проводить в бух" - нет проводок, т.е. нет объекта Операция. И ТЧ здесь вообще ни с какой стороны
|
|||
21
pessok
14.03.13
✎
10:30
|
да, спасибо, ребят. реально я запутался с понятиями самой операции и документа операция.
в (11) и (12) все верно (15) спасибо, я понял уже :) пусть будет семерочный овнокод, если тебе от этого легче :) |
|||
22
ЧеловекДуши
14.03.13
✎
10:31
|
(20) Бред, не бред, но Бух. справка царь в бухии.
А документы там все го лишь "Облегчение" труда буху :) |
|||
23
Chum
14.03.13
✎
10:32
|
(22) видел контору, которая в парусе все ручными проводками делали
|
|||
24
ЧеловекДуши
14.03.13
✎
10:33
|
(21) Нет, я просто не могу тебе помочь, ибо я не в курсе, что ты хочешь подчеркнуть из операции.
Но операцию можно хранить в ТЗ в развернутом виде, т.е. в первой колонке Счет, потом Субконто(1) и т.д. |
|||
25
ЧеловекДуши
14.03.13
✎
10:34
|
(23) Я только слышал, но не видел :)
По слухам они это делали так виртуозно, то все просто обычные "Быдло" бухи, которые привязываются не к проводкам, а к документам, могут идти лесом :) |
|||
26
Chum
14.03.13
✎
10:40
|
(25) а еще видел полный учет (склад, CRM и т.д.) в excel с одновременным пренебрежительным отношением к 1С.
|
|||
27
pessok
14.03.13
✎
10:42
|
(24) да надо мне в документе Операция в строке (а ТЧ там нет), соответствующей условию, заменить сумму и содержание. Мб я изначально пошел не в ту сторону?
|
|||
28
ЧеловекДуши
14.03.13
✎
11:53
|
(27) Ну, народ тебе подсказал в (12).
Но в запросе нужно указать нужный параметр. ВыполнитьЗапрос Выборка итогов в различных разрезах. Синтаксис: ВыполнитьЗапрос(<НачалоПериода>, <КонецПериода>, <ФильтрПоСчетам>, <ФильтрПоКоррСчет>, <Валюта>, <ТипИтогов>, <Периодичность>, <ТипСуммы>) Англоязычный синоним: DoQuery Параметры: <НачалоПериода> Необязательный параметр. Выражение типа дата, документ или позиция документа начала периода запроса. Если этот параметр не указан, будут вычисляться начальные сальдо на момент, указанный в параметре <КонецПериода> <КонецПериода> Необязательный параметр. Выражение типа дата, документ или позиция документа конца периода запроса. Если этот параметр не указан, будут вычисляться начальные сальдо на момент, указанный в параметре <НачалоПериода>. <ФильтрПоСчетам> Необязательный параметр. Счета, для которых будут отбираться итоги в запросе. Задается значением типа «Счет» или объектом типа «Список-Значений», содержащим значения типа «Счет», либо строкой содержащей список кодов счетов, разделенных символом ", " или ";". Если параметр не указан, отбор будет выполняться по всем счетам. <ФильтрПоКоррСчет> Необязательный параметр. Значение типа «Счет» — корреспондирующий счет, в корреспонденции с которым будут отбираться итоги счета, указанного в параметре <ФильтрПоСчетам>. Задается значением типа «Счет» или объектом типа «СписокЗначений», содержащим значения типа «Счет», либо строкой содержащей список кодов счетов, разделенных символом "," или ";". Если параметр не указан, будут отбираться итоги в корреспонденции со всеми счетами. <Валюта> Необязательный параметр. Значение типа «Справочник.Валюты». Если параметр не указан итоги выдаются без учета валюты. <ТипИтогов> Необязательный параметр. Число — тип отбираемых итогов. Может принимать следующие значения: 1 — остатки и обороты по счету в целом; 2 — обороты между счетами; Первое и второе вместе. По умолчанию — 1. <Периодичность> Необязательный параметр. Позволяет получить дополнительный разрез итогов по периодам. Число или символьная строка (См. ниже). По умолчанию периодичность не задана. <ТипСуммы> Необязательный параметр. Число или строка — тип рассчитываемых итогов. Может принимать следующие значения (в скобках указаны строковые синонимы): 1 («С», «S») рассчитывать суммы; 2 («В», «С») рассчитывать валютные суммы; 4 («К», «А») рассчитывать количество. Если требуется одновременно рассчитывать разные суммы, значение параметра получается путем сложения допустимых значений, например: 5 (1+4) — рассчитывать суммы и количество. При указании параметра строкой в ней указываются все символы, которые обозначают типы сумм, которые нужно рассчитывать. По умолчанию рассчитываются все типы сумм. Параметр <Периодичность> может принимать следующие значения (в скобках указаны строковые синонимы): 1 («Период», «Period») Промежуточные итоги не рассчитываются; 2 («Операция», «Entry») Промежуточные итоги рассчитываются по операциям; 3 («Проводка», «Operation») По проводкам; 4 («День», «Day») По дням; 5 («Неделя», «Week») По неделям; 6 («Декада», «Decade») По декадам; 7 («Месяц», «Month») По месяцам; 8 («Квартал», «Quorter») По кварталам 9 («Год», «Year») По годам. Возвращаемое значение: Число: 1 — запрос выполнен; 0 — запрос не выполнен. Описание: Метод ВыполнитьЗапрос выполняет отбор и расчет итогов за период, задаваемый параметрами <НачалоПериода> и <КонецПериода>. В зависимости от переданных параметров итоги могут быть подготовлены методом ВыполнитьЗапрос в различных разрезах. Кроме того, на результат запроса влияют дополнительные установки, которые выполняются вызовами специальных методов объекта «Бухгалтерские Итоги». Параметр <Периодичность> позволяет получить итоги запроса в разрезе периодов. Метод ВключатьСубсчета позволяет получить итоги в разрезе субсчетов. Применение метода ИспользоватьСубконто (перед вызовом ВыполнитьЗапрос) позволяет сформировать запрос в разрезе субконто. После выполнения запроса обход запросов в различных разрезах выполняется соответствующими методами объекта. Для доступа к итогам в разрезе периодов используются методы ВыбратьПериоды и ПолучитьПериод. При использовании методов ВыполнитьЗапрос и Рассчитать возможно указание только одной границы интервала. В этом случае будут рассчитываться только остатки на эту границу. Данный метод может использовать предварительно выполненный временный расчет. Для этого у временного расчета должен быть взведен флаг актуальности, система должна находиться в монопольном режиме, или расчет производится в модуле документа и в данном модуле выполняется запрос. Пример: В монопольном режиме: // модуль обработки ИтРасчет.Актуальность(1); ... Док.ВыбратьДокументы(); Пока Док.ПолучитьДокумент() = 1 Цикл ИтРасчет.Рассчитать(, Док.ТекущийДокумент()); ... Док.Провести(); КонецЦикла; ... // модуль документа ... ИтЗапрос.ВыполнитьЗапрос(, Док.ТекущийДокумент(), СчетПоКоду("41")); ... в данном случае ИтЗапрос.ВыполнитьЗапрос(...) воспользуется результатами временного расчета ИтРасчет. Данная возможность может использоваться при групповом перепроведении документов. Пример: БухИтоги.ВыполнитьЗапрос(ДатаНач, ДатаКон, "60", , 3); |
|||
29
ЧеловекДуши
14.03.13
✎
11:55
|
+ (28) Параметр ты уже указал, так что осталось только сделать как в (12)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |