Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Помогите решить легкую задачку на 1с 8.0  (Прочитано 58242 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ArtMari
Участник

ru
Offline Offline

« : 12-02-2009 07:39 » 

как реализовать следующий алгоритм:
 1.Просмотреть все элементы справочника Основные средства
2. Для каждого элемента из этого справочника посмотреть по счетам 01.01 и 02.01 начальное сальдо и обороты
3. Если начальное сальдо и обороты >, то пропустить, иначе элемент пометить на удаление
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 12-02-2009 10:16 » 

ArtMari, не плоди темы и почитай правила.
https://forum.shelek.ru/index.php?action=vu-rules#post_rules
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 12-02-2009 12:09 » 

1. СправочникМенеджер.<Имя справочника>.Выбрать: см. пример в синтакс помощнике. По выборке заполнить массив, чтобы запрос к итогам выполнить 1 раз (запрос - это сравнительно долгий процесс)
2. Конструктором запросов (в контекстном меню текста модуля) создать запрос по регистру бухгалтерии
3. Выборкой результатов запроса и по условию выполнить нужно действие (СпрОбъект.УстановитьПометкуУдаления(Истина)Ага
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #3 : 12-02-2009 12:32 » 

Не могли бы Вы написать код данного алгоритма?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 12-02-2009 13:59 » 

Нет. Могу только помочь написать.
Разбирайся, пробуй и пиши последовательно что не получается
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 12-02-2009 14:01 » 

Если тебе нужно просто получить решение - то это не тот сайт: обратись на фриланс сайты, возможно - заплати какое-то количество денег за решение.
Здесь мы помагаем учиться программировать...
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #6 : 12-02-2009 14:42 » 

Хорошо. Тогда для начала: суть проблемы в том, что в отчете Ведомость по амортизации ОС могут быть записи, по которым нет ни оборотов, ни остатков(из оборотно-сальдовой ведомости это видно) и тогда на такие элементы надо поставить отметку удаления в Справочнике ОС.   

Вопрос, в каком модуле располагать этот запрос?
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #7 : 12-02-2009 15:30 » 

Kivals
ответьте пожалуйста
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 12-02-2009 16:01 » 

В каком модуле - зависит от того, когда это будет выполняться.
Если задача разовая - внешня обработка, если периодическая ручная - обработка с составе конфигурации, если автоматизированная - то в зависимости от метода автоматизации (обработка в составе конфы, модуль документа, модуль справочника - смотря на какое событие нужно ориентироваться).
Но это философский вопрос: можно эту обработку влепить хоть на форму документа - работать она будет все равно.

в отчете Ведомость по амортизации ОС могут быть записи, по которым нет ни оборотов, ни остатков
Я в предложении к действию писал: заполнить массив. Вместо массива можно заполнить список значений (разница в том, что в списке есть понятие пометки элемента). При заполнении все пометки устанавливаются, при переборе ОСВ - снимаются у тех элементов, которые удалять не нужно. Соответственно: после прохода всей ОСВ пометки останутся у тех элементов, которые либо имеют отрицательные остатки/обороты, либо не имеют движений вообще
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #9 : 12-02-2009 16:05 » 

А можно сначала в запросе выбрать, а потом пометки поставить? Т.е вот такой запрос правильный будет
Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |   ХозрасчетныйОстаткиИОбороты.Субконто1 как СсылкаОС
   |ИЗ
   |   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , Счет.Ссылка В ИЕРАРХИИ (&СчетаУчетаОС), , ) КАК ХозрасчетныйОстаткиИОбороты
   |ГДЕ
   |   (ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток = 0
   |         ИЛИ ХозрасчетныйОстаткиИОбороты.СуммаОборот = 0)";
   
   Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
   Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
   Запрос.УстановитьПараметр("СчетаУчетаОС", СчетаУчетаОС);
   
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   
   Пока Выборка.Следующий() Цикл
   
          ОбъектОС = Выборка.СсылкаОС.ПолучитьОбъект();
      ОбъектОС.УстановитьПометкуУдаления(Истина);
   
   КонецЦикла;
 
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #10 : 12-02-2009 16:12 » 

Какие реквизиты должны быть у внешней обработки? А на форме надо размещать кикие-нибудь элементы?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 12-02-2009 16:23 » 

Вот так как раз и не все элементы попадут, а только те, по которым есть остатки или обороты.
Но можно в запросе объединить таблицы выборки: посмотри на понятие ПОЛНОЕ СОЕДИНЕНИЕ (аналог SQL: FULL JOIN).
Только учти, что по отсутствующим в оборотке ОС остаток (оборот) будет NULL, а не 0:
Код:
ВЫБРАТЬ
   ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.Субконто1, ОС.Ссылка) как СсылкаОС
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , Счет.Ссылка В ИЕРАРХИИ (&СчетаУчетаОС), , ) КАК ХозрасчетныйОстаткиИОбороты
   ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ОС КАК ОС
ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ОС.Ссылка
ГДЕ
   (ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,0) = 0
         ИЛИ ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот,0) = 0)";
 

Параметры обработки будут соответствовать параметрам запроса: НачалоПериода, КонецПериода, СчетаУчетаОС
их же нужно и разместить на форме, для упрощения выбора
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #12 : 12-02-2009 16:46 » 

 а как сделать, чтобы выбрать сразу 2 счета из поля выбора СчетаучетаОс, а то мне же надо проверять по 01.01 и 02.01?
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #13 : 12-02-2009 16:59 » 

Значит когда я написала =0, то это значит есть остаток или оборот, а как Вы написали, то правильно?А что такое ЕстьNull -что он дает?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 12-02-2009 17:15 » 

Как выбрать 2 счета: поменяй условие "В ИЕРАРХИИ" на "В СПИСКЕ" и передавай список в параметры:
СчетаУчетаОС=Новый СписокЗначений;
СчетаУчетаОС.Добавить(Счет1.Ссылка);
СчетаУчетаОС.Добавить(Счет2.Ссылка);
Запрос.УстановитьПараметр("СчетаУчетаОС", СчетаУчетаОС);
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #16 : 12-02-2009 17:20 » 

Тип СчетаУчетаОС - ПланСчетовСсылка.Хозрасчетный?
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #17 : 12-02-2009 18:36 » 

Пишет ошибку
Переменная не определена (Счет1)
   СчетаУчетаОС.Добавить(<<?>>Счет1.Ссылка);
 Переменная не определена (Счет2)
   СчетаУчетаОС.Добавить(<<?>>Счет2.Ссылка);
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 12-02-2009 20:14 » 

Счет1 и Счет2 должны быть определены, например как параметры формы
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #19 : 12-02-2009 20:27 » 

На закладке Реквизиты формы их добавить? А тип у них какой должен быть?
А на самой форме одно поле выбора для СчетаУчетаОс?
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #20 : 12-02-2009 20:51 » 

"Вот так как раз и не все элементы попадут, а только те, по которым есть остатки или обороты."

Так мне же надо выбрать те элементы по которым НЕТ остатков или оборотов, а получается что пометятся наоборот те элементы, по которым есть остатки или обороты, так?
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #21 : 12-02-2009 22:09 » 

Kivals, ответьте пожалуйста, очень нужно доделать 
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 13-02-2009 07:13 » 

Типы:
СчетаУчетаОС - СписокЗначений,
Счет1, Счет2 - ПланСчетовСсылка.Хозрасчетный
Да, добвляй в реквизитах и выводи на форму оба (СчетаУчетаОС теперь на форме не нужен). Если на форме был СчетаУчетаОС - переименуй его в Счет1 и скопируй в Счет2.
Вот так как раз и не все элементы попадут, а только те, по которым есть остатки или обороты
Так было в твоем варианте запроса. В моем (который с ПОЛНОЕ СОЕДИНЕНИЕ) - попадут все
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #23 : 13-02-2009 07:25 » 

Вот так как раз и не все элементы попадут, а только те, по которым есть остатки или обороты
Так было в твоем варианте запроса. В моем (который с ПОЛНОЕ СОЕДИНЕНИЕ) - попадут все.

По такому запросу он ставит пометки на все элементы, почему? А мне же надо по которым НЕТ остатков и оборотов.
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #24 : 13-02-2009 07:38 » 

Может условие какое поменять надо, потому что у меня ставит на пометку удаления все что есть в справочнике? и пишет ошибку

{Форма.Форма(25)}: Ошибка при вызове метода контекста (Выполнить): {(5, 93)}: Ожидается выражение "("
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет.Ссылка В <<?>>СПИСКЕ (&СчетаУчетаОС), , ) КАК ХозрасчетныйОстаткиИОбороты
   Результат = Запрос.Выполнить()
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #25 : 13-02-2009 09:15 » 

Т.е помечаются на удаление все элементы, а как сделать, чтобы только без остатков и оборотов?
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #26 : 13-02-2009 09:24 » 

Запрос выглядит так:
   Запрос = Новый Запрос;
   Запрос.Текст = "
   |ВЫБРАТЬ
   |ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.Субконто1, ОС.Ссылка) как СсылкаОС
   |ИЗ
   |РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет.Ссылка В ИЕРАРХИИ (&СчетаУчетаОС), , ) КАК ХозрасчетныйОстаткиИОбороты
    | ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ОсновныеСредства КАК ОС
   |   ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ОС.Ссылка
   |ГДЕ
      |(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,0) = 0
      |      ИЛИ ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот,0) = 0)";

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

Что поменять?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #27 : 13-02-2009 09:24 » 

попробуй в условии просто оставить "В (&СчетаУчетаОС)" - без СПИСКЕ

ты проверила что помечаются все? вроде по условиям запроса в него попадут ТОЛЬКО если остатки или обороты нулевые. или их вообще нет...
Может стоит поменять условие на И?
(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,0) = 0
     И ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборот,0) = 0)
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #28 : 13-02-2009 09:31 » 

Да, проверяла, сейчас попробую поменять и посмотрю
Записан
ArtMari
Участник

ru
Offline Offline

« Ответ #29 : 13-02-2009 09:34 » 

все равно все помечаются на удаление... что же не так???
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines