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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: 1С:Предприятие7.7 - Рарус:Автохозяйство  (Прочитано 47713 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Osman
Гость
« : 09-08-2006 11:40 » 

У меня стоит 1С:Предприятие 7.7 РАРУС:Автохозяйство...
Сделал отчёт(точнее моя работа заключается в том чтоб исправить ошибки, допущенные когда-то кем-то): Ведомость технико-эксплуатационных показателей работы автотранспорта за период...
Там в таблице следующие графы: Гараж, Транспортное средство, Автодни(По Путевым листам, в хозяйстве, в работе на период, в ремонте, в простое, выходные) и т.д. не важно... Суть проблемы вот в чём: Допустим делаем ведомость за месяц, но посреди месяца списываем одну машину(т.е. другие полмесяца машина не работала)... В программе получается следующее... Автодни в хозяйстве - число не меняется, т.к. полмесяца как машина выбыла проставляется в проге что она на Выходном... Т.е. графа выходные увеличивается, хотя не должна, т.к.машины нет уже фактически... А остальное всё работает...
Просто это последний баг, остальные исправил норм... Столько уже работы проделал...
Если честно, не вижу смысла в выкладывании текста отчета, т.к. можно наверно абсолютно независимую часть тела модуля сделать...(это моё мнение...)
Вот, вроде этот кусок... Выкладываю как было...
   //**тема с выбытием
      СостОС=СоздатьОбъект("Периодический");
      СостОС.ИспользоватьОбъект("СостояниеОС",Ам);
      состОс.ОбратныйПорядок();
      СостОс.ВыбратьЗначения(пвдатаНач,ПвДатаКОн); 
      Сообщить(Ам.Наименование);
   //   Работал=0;
      НеРаботал=0;
      ДатаК=пвДатаКОн;
 
      АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКон);
   
                                                                              
      спрТранс=СоздатьОбъект("Справочник.ТранспортныеСредства");
       спрТранс.НайтиПоКоду(АМ.Код);
       ДВВЭ=спрТранс.ДатаВводаВЭксплуатацию;
      
   
      Если (ДатаНач<ДВВЭ) и (ДатаКон<ДВВЭ) Тогда АвтоДниВХозяйстве=0; КонецЕсли;
      Если (ДатаНач<=ДВВЭ) и (ДатаКон>ДВВЭ) Тогда АвтоДниВХозяйстве=ДатаКон-ДВВЭ+1; КонецЕсли;
    
      
      //** 
      Пока состОс.получитьЗначение()>0 цикл
      Если состОС.Значение=Перечисление.СостоянияОС.В_эксплуатации тогда
            Сообщить(Строка(СостОс.Значение)+"  Машина в эксплуатации "+Строка(СостОс.ДатаЗнач)+ "  не работал "+Строка(НеРаботал));
            
         Иначе
            НеРаботал=НеРаботал+ глРазницаВДатах(СостОс.ДатаЗнач,ДатаК);
            ДатаК=состОс.ДатаЗнач;
            Сообщить(Строка(СостОс.Значение)+"  Машины нет "+Строка(СостОс.ДатаЗнач)+"не работал"+Строка(неработал));
         КонецЕсли;
      КонецЦикла;   
      АвтодниВХозяйстве =АвтодниВХозяйстве-НеРаботал;
   
   
   Иначе Если состОС.ПолучитьЗначение()=0 тогда
   Если состОС.ЗначениеНаДату(пвДатаКон)=Перечисление.СостоянияОС.В_Эксплуатации тогда
АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКон);
Сообщить("...");
            КонецЕсли;
         КонецЕсли;
      КонецЕсли;
      
ИначеЕсли состОС.ЗначениеНаДату(пвДатаНач)<>Перечисление.СостоянияОС.В_эксплуатации тогда
                   
Записан
Kivals
Модератор

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

WWW
« Ответ #1 : 09-08-2006 14:57 » 

Выложить стоит потому что, как я писал в личке - у меня такой конфы нет, но возможно смогу помочь по коду (или кто-то сможет, тоже не знакомый с конфой). Т.к. где-то или неверное условие, или оно пропущено.
Отчет не полностью, отформатирован криво - понять трудно.
Попробуй аккуратно выложить текст (используй теги [ code ] (без пробелов возле скобок))
Записан
Osman
Гость
« Ответ #2 : 10-08-2006 05:22 » 

у меня такой конфы нет, но возможно смогу помочь по коду (или кто-то сможет, тоже не знакомый с конфой). Т.к. где-то или неверное условие, или оно пропущено.

Какая разница какая конфа? ОТчет сам кто то делал, т.е. такого ни у кого нет...... :Улыбаюсь
Да, я тож понял что в условии... Дак вот я в непонятках, как написать его... (опыт работы с 1С - 1месяц)
Отредактировать и привести в нормальный вид вряд ли получится. т.к. видели бы вы в каком виде это всё в программе написано... Ужас... Это я ещё более-менее привел в божеский вид... Так что перекладывать смысла нет... А черт его знает...
Может выложить полную версию отчета? ТОка он достаточно объемный...
Пжалста, срочно нужно...
Записан
Kivals
Модератор

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

WWW
« Ответ #3 : 10-08-2006 06:12 » 

Цитата
Какая разница какая конфа?
До чего мне "нравится" упрямство типа: "я всего неделю как что-то делаю, но уже имею собственное мнение. Помогите, но чтобы не противоречить моему мнению".
Конфа нужна потому как в ней определены метаданные, а 99% отчетов строятся исходя из их структуры. Ты нигде в первом сообщении не писал, что это не стандартный отчет для конфы.
К сообщению можно приложить файл (при редактировании - Additional options)
Заархивируй отчет и вложи
Записан
Osman
Гость
« Ответ #4 : 10-08-2006 07:05 » 

Извини, Kivals... Признаю ошибку... Исправлюсь...  С ума сойти...
Вроде выложил полную версию в архиве... Я ниче не менял...  А черт его знает... Оригинал...
Если сможешь помочь, то безмерное признание и уважение...

* ТЭП.rar (4.67 Кб - загружено 1294 раз.)
Записан
Kivals
Модератор

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

WWW
« Ответ #5 : 10-08-2006 07:58 » 

А хорошо бы ты полную обработку еще выложил - ert файл
(Если это внутренняя - то по правой кнопке на ней "Сохранить как внешний отчет(обработку)...")
Записан
Osman
Гость
« Ответ #6 : 10-08-2006 08:16 » 

Выложил...

* тэп.rar (16.74 Кб - загружено 1292 раз.)
Записан
Kivals
Модератор

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

WWW
« Ответ #7 : 10-08-2006 11:10 » 

Цитата
посреди месяца списываем одну машину
Как именно это происходит? Документ? Какой именно?
Записан
Kivals
Модератор

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

WWW
« Ответ #8 : 10-08-2006 11:18 » 

Предположение 1:
вот эту строку
Код:
АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКон);
Заменить на
Код:
ДатаК=?(ПустоеЗначение(ДатаСписания)=1,ДатаКон,Мин(ДатаКон,ДатаСписания));
ДатаК=Макс(ДатаК, ДатаНач-1); // на всякий случай, чтобы АвтодниВХозяйстве>=0
АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаК);
Где:
ДатаК - новая временная переменная
ДатаСписания - Дата списания машины (не знаю откуда - из справочника или документа)
Записан
Kivals
Модератор

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

WWW
« Ответ #9 : 10-08-2006 11:19 » 

Еще наверное по всему тексту внутри цикла ниже нужно заменить ДатаКон на ДатаК
Записан
Osman
Гость
« Ответ #10 : 10-08-2006 11:35 » 

Проблема в том что даты нет... Она берется так: (пишу как в программе 1С найти можно)Справочники - Транспортные средства - Транспортные средства - (выбирается машина) - История - Выбыло(и вот рядом стоит дата)...  Не знаю как её от туда достать...
Была б дата, там работы было б на 5 минут.... Но как оттуда её взять?  А черт его знает...
« Последнее редактирование: 10-08-2006 11:39 от Osman » Записан
Kivals
Модератор

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

WWW
« Ответ #11 : 10-08-2006 13:33 » 

Выбыло - это периодический реквизит справочника ТранспортныеСредства?
Тогда меняем на такой блок:
Код:
ДатаКонВыб=ДатаКон;
П=СоздатьОбъект("Периодический");
П.ИспользоватьОбъект("Выбыло", АМ);
П.ОбратныйПорядок(1);
П.ВыбратьЗначения(НачДата,КонДата);
Если П.ПолучитьЗначение()=1 Тогда
ДатаКонВыб=П.Значение;
КонецЕсли;
АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКонВыб);
(Кстати - не заметил, что в коде уже есть ДатаК - поменял на ДатаКонВыб)
Записан
Osman
Гость
« Ответ #12 : 10-08-2006 13:45 » 

Нет, не периодический...  А черт его знает...
Там когда на историю нажимаешь появляется табличка: в левой графе дата, в правой состояниеОС(в эксплуатации, выбыло или другое...)... Непосредстввенно Выбыло - не дата... Дата рядом с выбыло... Это в истории вручную выбирается: Выбыло и Дата в Ручную ставится...  Здесь была моя ладья...
Вот... На слово выходит -  выбыло, а как дату взять оттуда?

*спасиб, что помогаешь... Я пробую, стараюсь, блин... Признателен...
Записан
Kivals
Модератор

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

WWW
« Ответ #13 : 10-08-2006 13:48 » 

Как реквизит называется?
Будь добр: в конфигураторе: Конфигурация - Описание структуры метаданных
ищешь:
   - Справочник
      - Идентификатор   "ТранспортныеСредства"
и копируешь все, до следующего объявления
   - Справочник
архивируешь и прикрепляешь к теме...
Записан
Kivals
Модератор

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

WWW
« Ответ #14 : 10-08-2006 13:49 » 

Кстати - другие слова кроме "выбыло" там бывают?
Записан
Osman
Гость
« Ответ #15 : 10-08-2006 14:01 » 

Бывают: В эксплуатации, аренде и т.п. Там выбирать можно....
Вот справочник... 
Именно, что реквизит не знаю как называется... Допустим Дата ввода в эксплуатацию - определено, а выбытия нет...  А черт его знает...

* Справочник.rar (2.66 Кб - загружено 1271 раз.)
Записан
Kivals
Модератор

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

WWW
« Ответ #16 : 10-08-2006 14:44 » 

Я так понимаю - это твой код:
Код:
//**тема с выбытием
СостОС=СоздатьОбъект("Периодический");
СостОС.ИспользоватьОбъект("СостояниеОС",Ам);
состОс.ОбратныйПорядок();
СостОс.ВыбратьЗначения(пвдатаНач,ПвДатаКОн); 
Сообщить(Ам.Наименование);
// Работал=0;
НеРаботал=0;
ДатаК=пвДатаКОн;
Ты на правильном пути был Улыбаюсь Чуть-чуть не так (исправляю все-таки свой код):
Код:
ДатаКонВыб=ДатаКон;
П=СоздатьОбъект("Периодический");
П.ИспользоватьОбъект("Выбыло", АМ);
П.ОбратныйПорядок(1);
П.ВыбратьЗначения(НачДата,КонДата);
Если П.ПолучитьЗначение()=1 Тогда
Если П.Значение=Перечисление.СостояниеОС.Выбыл Тогда
ДатаКонВыб=П.ДатаЗнач;
Прервать;
КонецЕсли;
КонецЕсли;
АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКонВыб);
и не забудь ниже заменить ДатаКон на ДатаКонВыб
Записан
Kivals
Модератор

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

WWW
« Ответ #17 : 10-08-2006 15:16 » 

Тьфу! Ошибку увидел: не
   П.ИспользоватьОбъект("Выбыло", АМ);
а
   П.ИспользоватьОбъект("Состояние", АМ);
или может
   П.ИспользоватьОбъект("СостояниеОС", АМ);
смотря какой реквизит используется... (они чего-то оба одинакового типа и оба периодических)
Записан
Osman
Гость
« Ответ #18 : 11-08-2006 06:13 » 

 А черт его знает...
Значит то что выше мне затереть, а то что ниже вставить...?
Состояние или состояниеОС это я знаю, НО: Когда всё так делаю, то у меня выводится всего 2 машины, когда должно около 20... Не понял Почему остальные не бурется?  Быть такого не может
И ещё можешь это пояснить:
-----------------------------
Если П.Значение=Перечисление.СостояниеОС.Выбыл Тогда         ДатаКонВыб=П.ДатаЗнач;         Прервать;
----------------------------
Что это означает?  просто я не просто сделать, но я и понять ещё хочу...
После прерывания куда ведет?
Где то ещё надо мб что-нибудь заменить?
« Последнее редактирование: 11-08-2006 06:15 от Osman » Записан
Kivals
Модератор

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

WWW
« Ответ #19 : 11-08-2006 09:55 » 

П.Значение=Перечисление.СостояниеОС.Выбыл
это как раз проверяем на нужное значение в периодической константе
если это так - то конечную дату ставим датой такого значения (ДатаКонВыб=П.ДатаЗнач;) и прерываем обход по АМ.СостояниеОС, т.к. мы уже нашли нужную нам дату...
Почему выводится 2, а не 20 - не знаю.
До этого выводились все 20?
Записан
Osman
Гость
« Ответ #20 : 14-08-2006 05:56 » 

Код:

П.ВыбратьЗначения(НачДата,КонДата);
Если П.ПолучитьЗначение()=1 Тогда
Если П.Значение=Перечисление.СостояниеОС.Выбыл Тогда
ДатаКонВыб=П.ДатаЗнач;
Прервать;
КонецЕсли;
КонецЕсли;
и не забудь ниже заменить ДатаКон на ДатаКонВыб

Хочу сразу сказать, я сделал это... Не без твоей помощи Kivals... Ты бог...  Спасибо преогромное!!!
Но ты меня заставил призадумаца... Всё получилось благодаря:
1.Не ставил функцию Прервать.
2.Не менял по ходу программы ДатаКон на ДатаКонВыб
3."Если П.Значение=Перечисление.СостояниеОС.Выбыл Тогда " надо окончания другие...:
"Если П.Значение=Перечисление.СостоянияОС.Выбыло Тогда"
А так всё как ты сказал... Ещё раз благодарю...
**надеюсь на помощь при необходимости в следующий раз...
Удачи!

Записан
Osman
Гость
« Ответ #21 : 23-08-2006 11:03 » 

Значит тэкккс...
Допустим список машин(табель о работе), их там около 30... У 28 всё нормально, так как надо, а у 2 небольшие отклонения(по 3-4 выходных не ставит(оставляет пустыми))... Ошибка в программе или просто у этих двух машин что-то не правильно записано? Бухгалтерскую сторону проверял вроде толково написано... не знаю... Вроде и в проге нет ошибок...(остальные же машины правильно пишет...).
1.Ошибка в программе или просто заполнили там что то не так? (у 28 ведь правильно считает, а тока у двух - нет, хотя одно и тоже)
2.Если в проге, то может выложить всю конфу, если да, то как?
Записан
Osman
Гость
« Ответ #22 : 06-09-2006 07:52 » 

Так с тем я справился... Но у меня ещё вопрос... Вот допустим открываеца документ который нужно заполнить... Сначала номер, потом дату и т.д... Т.е. удобнее всего да и должно быть : чтоб курсор при открытии документа появлялся в номере документа, а у меня он находица где-то в середине... Это не удобно каждый раз мышью ставить курсор на номер документа. Подскажите плз, как это сделать? Хотя бы в принципе где это меняется? (Надеюсь хоть это от конфы не зависит... =))
Спасибо.
Записан
Kivals
Модератор

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

WWW
« Ответ #23 : 06-09-2006 09:37 » 

Если я не ошибаюсь курсор по умолчанию ставится на первый элемент в списке обхода (Tab list)
порядок меняется из конфигуратора в меню "Диалог" следующими пунктами:
- Порядок обхода
- Настройка порядка обхода
- Автоматический порядок обхода
Смотри в хелпе что за что отвечает

Порой они глючат, закономерностей не помню Жаль

Если не поможет - есть вариант через обработку, но про это позже...
Записан
Osman
Гость
« Ответ #24 : 06-09-2006 10:44 » 

Спасиб это помогло...(я сам до этого дошёл... просто сначала не мог этой вкладки:Диалог найти...)
А вот ещё такой косяк: как сделать так чтобы в одном документе, заполненном на основании другого брались не все реквизиты? Есть алгоритм какой нить? Например: Накладная заполняеца на основании Путевого листа и всё что есть в путевом, автоматически попадает в Накладную... А мне нужно чтобы дата была другой, но остальное оставалось как есть...(если менять вручную, то при расчете з/п прога видит Накладные как две(с измененной датой и с той которая в Путевом листе)). Что делать? Примерно хотя бы! не могу нить уловить. Предложил с одной датой делать и Путевой и Накладную, тогда всё нормально, но бухгалтер уперлась и сказала что обязательно надо так...(но получаеца удвоенная зарплата...). Ладно я уже повторяюсь... Помогите если не лень...
Записан
Kivals
Модератор

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

WWW
« Ответ #25 : 06-09-2006 10:59 » 

Дело не в лени - времени в обрез.
у тебя 2 проблемы:
1. ввод документа на основании регулируется встроенной процедурой ВводНаОсновании(ДокОснование) в модуле вводимого типа документа. Вся логика прописывается внутри - можешь менять как хочешь.
2. при расчете з/п видимо в алгоритм заложено, что Накладная и Путевой лист должны быть одной датой. Ты меняешь логику программы - ты должен исправить и алгоритм расчета.
Записан
Osman
Гость
« Ответ #26 : 06-09-2006 11:05 » 

Спасиба за скорость и вообще спасибо... Щас попробую что либо изменить... в лучшую сторону... Но вроде первое я уже делал... не помогло...
Записан
Osman
Гость
« Ответ #27 : 02-10-2006 06:51 » 

Привет... Снова я... Ну, не мегапрограммер в 1С пока я... Учусь пока только...А делать нужно прямо сейчас, поэтому снова прошу помощи...
Я не знаю, может кто помочь, у меня две проблемы: 1.в тексте нужно изменить текст(но тут не всё так просто по-моему)  2.Нужно из перечисления исключить некоторые элементы... Это всё в одном документе...

Поможет кто-нибудь??? Мне что-то выложить на форум? Что? Хэлп плз...
Записан
Kivals
Модератор

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

WWW
« Ответ #28 : 02-10-2006 07:21 » 

1. Смотри в хелпе: СтрЗаменить(), Найти(), Лев(), Прав(), Сред(). Также возможно поможет НРег() или ВРег()
2. Копай в сторону ПриНачалеВыбораЗначения() (предопределенная для формы) и ВыбратьЗначение() (для СписокЗначений)
Записан
Osman
Гость
« Ответ #29 : 02-10-2006 07:57 » 

Там короче нужно вот что:
Сделан отчет... Он просто выводит разные справочники... Вначале выбираешь справочник, например транспортные средства, потом ставишь галочки, что про них выводить(гос.номер, дата Техосмотра, дата сертификатов и т.д) нажимаешь сформировать и выдается отчет...
В справочнике транспортные средства есть: сами авто, арендованные, списаные... А мне нужно, чтоб выводилась группа только с самими автомобилями, без арендованных и т.п... И такая тема: нужно когда до даты техосмотра следующего и прочих дат остаётся меньше месяца, то они должны выделятся красным цветом... Плохо то что отчет для всех справочников общий и там в столбцах не фиксированные названия, если бы было так, то можно бы области выделять и там менять цвет, но ведь в данном случае области могут местами менятся, они могут быть а могут и нет...
Было б всё так просто я б сам уж додумался... наверное...
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines