| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | «  : 12-02-2009 07:39 »  |  | 
 
 как реализовать следующий алгоритм:1.Просмотреть все элементы справочника Основные средства
 2. Для каждого элемента из этого справочника посмотреть по счетам 01.01 и 02.01 начальное сальдо и обороты
 3. Если начальное сальдо и обороты >, то пропустить, иначе элемент пометить на удаление
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #1 : 12-02-2009 10:16 »  |  | 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #2 : 12-02-2009 12:09 »  |  | 
 
 1. СправочникМенеджер.<Имя справочника>.Выбрать: см. пример в синтакс помощнике. По выборке заполнить массив, чтобы запрос к итогам выполнить 1 раз (запрос - это сравнительно долгий процесс) 2. Конструктором запросов (в контекстном меню текста модуля) создать запрос по регистру бухгалтерии 3. Выборкой результатов запроса и по условию выполнить нужно действие (СпрОбъект.УстановитьПометкуУдаления(Истина)  |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #3 : 12-02-2009 12:32 »  |  | 
 
 Не могли бы Вы написать код данного алгоритма? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #4 : 12-02-2009 13:59 »  |  | 
 
 Нет. Могу только помочь написать.Разбирайся, пробуй и пиши последовательно что не получается
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #5 : 12-02-2009 14:01 »  |  | 
 
 Если тебе нужно просто получить решение - то это не тот сайт: обратись на фриланс сайты, возможно - заплати какое-то количество денег за решение.Здесь мы помагаем учиться программировать...
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #6 : 12-02-2009 14:42 »  |  | 
 
 Хорошо. Тогда для начала: суть проблемы в том, что в отчете Ведомость по амортизации ОС могут быть записи, по которым нет ни оборотов, ни остатков(из оборотно-сальдовой ведомости это видно) и тогда на такие элементы надо поставить отметку удаления в Справочнике ОС.   
 Вопрос, в каком модуле располагать этот запрос?
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #7 : 12-02-2009 15:30 »  |  | 
 
 Kivalsответьте пожалуйста
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #8 : 12-02-2009 16:01 »  |  | 
 
 В каком модуле - зависит от того, когда это будет выполняться.Если задача разовая - внешня обработка, если периодическая ручная - обработка с составе конфигурации, если автоматизированная - то в зависимости от метода автоматизации (обработка в составе конфы, модуль документа, модуль справочника - смотря на какое событие нужно ориентироваться).
 Но это философский вопрос: можно эту обработку влепить хоть на форму документа - работать она будет все равно.
 
 в отчете Ведомость по амортизации ОС могут быть записи, по которым нет ни оборотов, ни остатков
 Я в предложении к действию писал: заполнить массив. Вместо массива можно заполнить список значений (разница в том, что в списке есть понятие пометки элемента). При заполнении все пометки устанавливаются, при переборе ОСВ - снимаются у тех элементов, которые удалять не нужно. Соответственно: после прохода всей ОСВ пометки останутся у тех элементов, которые либо имеют отрицательные остатки/обороты, либо не имеют движений вообще
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #9 : 12-02-2009 16:05 »  |  | 
 
 А можно сначала в запросе выбрать, а потом пометки поставить? Т.е вот такой запрос правильный будетЗапрос = Новый Запрос;
 Запрос.Текст = "ВЫБРАТЬ
 |   ХозрасчетныйОстаткиИОбороты.Субконто1 как СсылкаОС
 |ИЗ
 |   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , Счет.Ссылка В ИЕРАРХИИ (&СчетаУчетаОС), , ) КАК ХозрасчетныйОстаткиИОбороты
 |ГДЕ
 |   (ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток = 0
 |         ИЛИ ХозрасчетныйОстаткиИОбороты.СуммаОборот = 0)";
 
 Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
 Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
 Запрос.УстановитьПараметр("СчетаУчетаОС", СчетаУчетаОС);
 
 Результат = Запрос.Выполнить();
 Выборка = Результат.Выбрать();
 
 Пока Выборка.Следующий() Цикл
 
 ОбъектОС = Выборка.СсылкаОС.ПолучитьОбъект();
 ОбъектОС.УстановитьПометкуУдаления(Истина);
 
 КонецЦикла;
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #10 : 12-02-2009 16:12 »  |  | 
 
 Какие реквизиты должны быть у внешней обработки? А на форме надо размещать кикие-нибудь элементы? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #11 : 12-02-2009 16:23 »  |  | 
 
 Вот так как раз и не все элементы попадут, а только те, по которым есть остатки или обороты. Но можно в запросе объединить таблицы выборки: посмотри на понятие ПОЛНОЕ СОЕДИНЕНИЕ (аналог SQL: FULL JOIN). Только учти, что по отсутствующим в оборотке ОС остаток (оборот) будет NULL, а не 0: ВЫБРАТЬЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.Субконто1, ОС.Ссылка) как СсылкаОС
 ИЗ
 РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , Счет.Ссылка В ИЕРАРХИИ (&СчетаУчетаОС), , ) КАК ХозрасчетныйОстаткиИОбороты
 ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ОС КАК ОС
 ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ОС.Ссылка
 ГДЕ
 (ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,0) = 0
 ИЛИ ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот,0) = 0)";
 
Параметры обработки будут соответствовать параметрам запроса: НачалоПериода, КонецПериода, СчетаУчетаОС их же нужно и разместить на форме, для упрощения выбора |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #12 : 12-02-2009 16:46 »  |  | 
 
  а как сделать, чтобы выбрать сразу 2 счета из поля выбора СчетаучетаОс, а то мне же надо проверять по 01.01 и 02.01? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #13 : 12-02-2009 16:59 »  |  | 
 
 Значит когда я написала =0, то это значит есть остаток или оборот, а как Вы написали, то правильно?А что такое ЕстьNull -что он дает? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #14 : 12-02-2009 17:13 »  |  | 
 
 ЕстьNull нужно только для запросов с соединением таблиц, когда значение может быть неопределеноэта функция возвращает первое значение из параметров, которое не-NULL:
 ЕстьNull(1,2,3)=1
 ЕстьNull(NULL,2,3)=2
 ЕстьNull(1,NULL,NULL)=1
 ЕстьNull(NULL,NULL,3)=3
 
 я ее использую в 2-х местах: первое чтобы для любой таблицы из запроса вернуть ссылку, 2-е чтобы упростить условие:
 вместо
 ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,0) = 0
 можно было бы написать
 (ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток=0) ИЛИ (ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток ЕСТЬ NULL)
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #15 : 12-02-2009 17:15 »  |  | 
 
 Как выбрать 2 счета: поменяй условие "В ИЕРАРХИИ" на "В СПИСКЕ" и передавай список в параметры:СчетаУчетаОС=Новый СписокЗначений;
 СчетаУчетаОС.Добавить(Счет1.Ссылка);
 СчетаУчетаОС.Добавить(Счет2.Ссылка);
 Запрос.УстановитьПараметр("СчетаУчетаОС", СчетаУчетаОС);
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #16 : 12-02-2009 17:20 »  |  | 
 
 Тип СчетаУчетаОС - ПланСчетовСсылка.Хозрасчетный? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #17 : 12-02-2009 18:36 »  |  | 
 
 Пишет ошибкуПеременная не определена (Счет1)
 СчетаУчетаОС.Добавить(<<?>>Счет1.Ссылка);
 Переменная не определена (Счет2)
 СчетаУчетаОС.Добавить(<<?>>Счет2.Ссылка);
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #18 : 12-02-2009 20:14 »  |  | 
 
 Счет1 и Счет2 должны быть определены, например как параметры формы |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #19 : 12-02-2009 20:27 »  |  | 
 
 На закладке Реквизиты формы их добавить? А тип у них какой должен быть?А на самой форме одно поле выбора для СчетаУчетаОс?
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #20 : 12-02-2009 20:51 »  |  | 
 
 "Вот так как раз и не все элементы попадут, а только те, по которым есть остатки или обороты."
 Так мне же надо выбрать те элементы по которым НЕТ остатков или оборотов, а получается что пометятся наоборот те элементы, по которым есть остатки или обороты, так?
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #21 : 12-02-2009 22:09 »  |  | 
 
 Kivals, ответьте пожалуйста, очень нужно доделать   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #22 :  13-02-2009 07:13 »   |  | 
 
 Типы:СчетаУчетаОС - СписокЗначений,
 Счет1, Счет2 - ПланСчетовСсылка.Хозрасчетный
 Да, добвляй в реквизитах и выводи на форму оба (СчетаУчетаОС теперь на форме не нужен). Если на форме был СчетаУчетаОС - переименуй его в Счет1 и скопируй в Счет2.
 Вот так как раз и не все элементы попадут, а только те, по которым есть остатки или обороты
 Так было в твоем варианте запроса. В моем (который с ПОЛНОЕ СОЕДИНЕНИЕ) - попадут все
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #23 : 13-02-2009 07:25 »  |  | 
 
 Вот так как раз и не все элементы попадут, а только те, по которым есть остатки или оборотыТак было в твоем варианте запроса. В моем (который с ПОЛНОЕ СОЕДИНЕНИЕ) - попадут все.
 
 По такому запросу он ставит пометки на все элементы, почему? А мне же надо по которым НЕТ остатков и оборотов.
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #24 : 13-02-2009 07:38 »  |  | 
 
 Может условие какое поменять надо, потому что у меня ставит на пометку удаления все что есть в справочнике? и пишет ошибку
 {Форма.Форма(25)}: Ошибка при вызове метода контекста (Выполнить): {(5, 93)}: Ожидается выражение "("
 РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет.Ссылка В <<?>>СПИСКЕ (&СчетаУчетаОС), , ) КАК ХозрасчетныйОстаткиИОбороты
 Результат = Запрос.Выполнить()
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #25 : 13-02-2009 09:15 »  |  | 
 
 Т.е помечаются на удаление все элементы, а как сделать, чтобы только без остатков и оборотов? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #26 : 13-02-2009 09:24 »  |  | 
 
 Запрос выглядит так:Запрос = Новый Запрос;
 Запрос.Текст = "
 |ВЫБРАТЬ
 |ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.Субконто1, ОС.Ссылка) как СсылкаОС
 |ИЗ
 |РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет.Ссылка В ИЕРАРХИИ (&СчетаУчетаОС), , ) КАК ХозрасчетныйОстаткиИОбороты
 | ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ОсновныеСредства КАК ОС
 |   ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ОС.Ссылка
 |ГДЕ
 |(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,0) = 0
 |      ИЛИ ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот,0) = 0)";
 
 
 СчетаУчетаОС=Новый СписокЗначений;
 СчетаУчетаОС.Добавить(Счет1.Ссылка);
 СчетаУчетаОС.Добавить(Счет2.Ссылка);
 Запрос.УстановитьПараметр("СчетаУчетаОС", СчетаУчетаОС);
 Запрос.УстановитьПараметр("НачПериода", НачПериода);
 Запрос.УстановитьПараметр("КонПериода", КонПериода);
 Результат = Запрос.Выполнить();
 Выборка = Результат.Выбрать();
 
 Пока Выборка.Следующий() Цикл
 ОбъектОС = Выборка.СсылкаОС.ПолучитьОбъект();
 ОбъектОС.УстановитьПометкуУдаления(Истина);
 КонецЦикла;
 
 Что поменять?
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kivals | 
								|  | « Ответ #27 : 13-02-2009 09:24 »  |  | 
 
 попробуй в условии просто оставить "В (&СчетаУчетаОС)" - без СПИСКЕ
 ты проверила что помечаются все? вроде по условиям запроса в него попадут ТОЛЬКО если остатки или обороты нулевые. или их вообще нет...
 Может стоит поменять условие на И?
 (ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,0) = 0
 И ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот,0) = 0)
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #28 : 13-02-2009 09:31 »  |  | 
 
 Да, проверяла, сейчас попробую поменять и посмотрю |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ArtMari 
								Участник    Offline | 
								|  | « Ответ #29 : 13-02-2009 09:34 »  |  | 
 
 все равно все помечаются на удаление... что же не так??? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |