Osman
Гость
|
|
« : 09-08-2006 11:40 » |
|
У меня стоит 1С:Предприятие 7.7 РАРУС:Автохозяйство... Сделал отчёт(точнее моя работа заключается в том чтоб исправить ошибки, допущенные когда-то кем-то): Ведомость технико-эксплуатационных показателей работы автотранспорта за период... Там в таблице следующие графы: Гараж, Транспортное средство, Автодни(По Путевым листам, в хозяйстве, в работе на период, в ремонте, в простое, выходные) и т.д. не важно... Суть проблемы вот в чём: Допустим делаем ведомость за месяц, но посреди месяца списываем одну машину(т.е. другие полмесяца машина не работала)... В программе получается следующее... Автодни в хозяйстве - число не меняется, т.к. полмесяца как машина выбыла проставляется в проге что она на Выходном... Т.е. графа выходные увеличивается, хотя не должна, т.к.машины нет уже фактически... А остальное всё работает... Просто это последний баг, остальные исправил норм... Столько уже работы проделал... Если честно, не вижу смысла в выкладывании текста отчета, т.к. можно наверно абсолютно независимую часть тела модуля сделать...(это моё мнение...) Вот, вроде этот кусок... Выкладываю как было... //**тема с выбытием СостОС=СоздатьОбъект("Периодический"); СостОС.ИспользоватьОбъект("СостояниеОС",Ам); состОс.ОбратныйПорядок(); СостОс.ВыбратьЗначения(пвдатаНач,ПвДатаКОн); Сообщить(Ам.Наименование); // Работал=0; НеРаботал=0; ДатаК=пвДатаКОн; АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКон); спрТранс=СоздатьОбъект("Справочник.ТранспортныеСредства"); спрТранс.НайтиПоКоду(АМ.Код); ДВВЭ=спрТранс.ДатаВводаВЭксплуатацию; Если (ДатаНач<ДВВЭ) и (ДатаКон<ДВВЭ) Тогда АвтоДниВХозяйстве=0; КонецЕсли; Если (ДатаНач<=ДВВЭ) и (ДатаКон>ДВВЭ) Тогда АвтоДниВХозяйстве=ДатаКон-ДВВЭ+1; КонецЕсли; //** Пока состОс.получитьЗначение()>0 цикл Если состОС.Значение=Перечисление.СостоянияОС.В_эксплуатации тогда Сообщить(Строка(СостОс.Значение)+" Машина в эксплуатации "+Строка(СостОс.ДатаЗнач)+ " не работал "+Строка(НеРаботал)); Иначе НеРаботал=НеРаботал+ глРазницаВДатах(СостОс.ДатаЗнач,ДатаК); ДатаК=состОс.ДатаЗнач; Сообщить(Строка(СостОс.Значение)+" Машины нет "+Строка(СостОс.ДатаЗнач)+"не работал"+Строка(неработал)); КонецЕсли; КонецЦикла; АвтодниВХозяйстве =АвтодниВХозяйстве-НеРаботал; Иначе Если состОС.ПолучитьЗначение()=0 тогда Если состОС.ЗначениеНаДату(пвДатаКон)=Перечисление.СостоянияОС.В_Эксплуатации тогда АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКон); Сообщить("..."); КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли состОС.ЗначениеНаДату(пвДатаНач)<>Перечисление.СостоянияОС.В_эксплуатации тогда
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #1 : 09-08-2006 14:57 » |
|
Выложить стоит потому что, как я писал в личке - у меня такой конфы нет, но возможно смогу помочь по коду (или кто-то сможет, тоже не знакомый с конфой). Т.к. где-то или неверное условие, или оно пропущено. Отчет не полностью, отформатирован криво - понять трудно. Попробуй аккуратно выложить текст (используй теги [ code ] (без пробелов возле скобок))
|
|
|
Записан
|
|
|
|
Osman
Гость
|
|
« Ответ #2 : 10-08-2006 05:22 » |
|
у меня такой конфы нет, но возможно смогу помочь по коду (или кто-то сможет, тоже не знакомый с конфой). Т.к. где-то или неверное условие, или оно пропущено.
Какая разница какая конфа? ОТчет сам кто то делал, т.е. такого ни у кого нет...... : Да, я тож понял что в условии... Дак вот я в непонятках, как написать его... (опыт работы с 1С - 1месяц) Отредактировать и привести в нормальный вид вряд ли получится. т.к. видели бы вы в каком виде это всё в программе написано... Ужас... Это я ещё более-менее привел в божеский вид... Так что перекладывать смысла нет... Может выложить полную версию отчета? ТОка он достаточно объемный... Пжалста, срочно нужно...
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #3 : 10-08-2006 06:12 » |
|
Какая разница какая конфа? До чего мне "нравится" упрямство типа: "я всего неделю как что-то делаю, но уже имею собственное мнение. Помогите, но чтобы не противоречить моему мнению". Конфа нужна потому как в ней определены метаданные, а 99% отчетов строятся исходя из их структуры. Ты нигде в первом сообщении не писал, что это не стандартный отчет для конфы. К сообщению можно приложить файл (при редактировании - Additional options) Заархивируй отчет и вложи
|
|
|
Записан
|
|
|
|
Osman
Гость
|
|
« Ответ #4 : 10-08-2006 07:05 » |
|
Извини, Kivals... Признаю ошибку... Исправлюсь... Вроде выложил полную версию в архиве... Я ниче не менял... Оригинал... Если сможешь помочь, то безмерное признание и уважение...
|
ТЭП.rar (4.67 Кб - загружено 1295 раз.)
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #5 : 10-08-2006 07:58 » |
|
А хорошо бы ты полную обработку еще выложил - ert файл (Если это внутренняя - то по правой кнопке на ней "Сохранить как внешний отчет(обработку)...")
|
|
|
Записан
|
|
|
|
Osman
Гость
|
|
« Ответ #6 : 10-08-2006 08:16 » |
|
Выложил...
|
тэп.rar (16.74 Кб - загружено 1294 раз.)
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #7 : 10-08-2006 11:10 » |
|
посреди месяца списываем одну машину Как именно это происходит? Документ? Какой именно?
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #8 : 10-08-2006 11:18 » |
|
Предположение 1: вот эту строку АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКон); Заменить на ДатаК=?(ПустоеЗначение(ДатаСписания)=1,ДатаКон,Мин(ДатаКон,ДатаСписания)); ДатаК=Макс(ДатаК, ДатаНач-1); // на всякий случай, чтобы АвтодниВХозяйстве>=0 АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаК); Где: ДатаК - новая временная переменная ДатаСписания - Дата списания машины (не знаю откуда - из справочника или документа)
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #9 : 10-08-2006 11:19 » |
|
Еще наверное по всему тексту внутри цикла ниже нужно заменить ДатаКон на ДатаК
|
|
|
Записан
|
|
|
|
Osman
Гость
|
|
« Ответ #10 : 10-08-2006 11:35 » |
|
Проблема в том что даты нет... Она берется так: (пишу как в программе 1С найти можно)Справочники - Транспортные средства - Транспортные средства - (выбирается машина) - История - Выбыло(и вот рядом стоит дата)... Не знаю как её от туда достать... Была б дата, там работы было б на 5 минут.... Но как оттуда её взять?
|
|
« Последнее редактирование: 10-08-2006 11:39 от Osman »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #11 : 10-08-2006 13:33 » |
|
Выбыло - это периодический реквизит справочника ТранспортныеСредства? Тогда меняем на такой блок: ДатаКонВыб=ДатаКон; П=СоздатьОбъект("Периодический"); П.ИспользоватьОбъект("Выбыло", АМ); П.ОбратныйПорядок(1); П.ВыбратьЗначения(НачДата,КонДата); Если П.ПолучитьЗначение()=1 Тогда ДатаКонВыб=П.Значение; КонецЕсли; АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКонВыб); (Кстати - не заметил, что в коде уже есть ДатаК - поменял на ДатаКонВыб)
|
|
|
Записан
|
|
|
|
Osman
Гость
|
|
« Ответ #12 : 10-08-2006 13:45 » |
|
Нет, не периодический... Там когда на историю нажимаешь появляется табличка: в левой графе дата, в правой состояниеОС(в эксплуатации, выбыло или другое...)... Непосредстввенно Выбыло - не дата... Дата рядом с выбыло... Это в истории вручную выбирается: Выбыло и Дата в Ручную ставится... Вот... На слово выходит - выбыло, а как дату взять оттуда? *спасиб, что помогаешь... Я пробую, стараюсь, блин... Признателен...
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #13 : 10-08-2006 13:48 » |
|
Как реквизит называется? Будь добр: в конфигураторе: Конфигурация - Описание структуры метаданных ищешь: - Справочник - Идентификатор "ТранспортныеСредства" и копируешь все, до следующего объявления - Справочник архивируешь и прикрепляешь к теме...
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #14 : 10-08-2006 13:49 » |
|
Кстати - другие слова кроме "выбыло" там бывают?
|
|
|
Записан
|
|
|
|
Osman
Гость
|
|
« Ответ #15 : 10-08-2006 14:01 » |
|
Бывают: В эксплуатации, аренде и т.п. Там выбирать можно.... Вот справочник... Именно, что реквизит не знаю как называется... Допустим Дата ввода в эксплуатацию - определено, а выбытия нет...
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #16 : 10-08-2006 14:44 » |
|
Я так понимаю - это твой код: //**тема с выбытием СостОС=СоздатьОбъект("Периодический"); СостОС.ИспользоватьОбъект("СостояниеОС",Ам); состОс.ОбратныйПорядок(); СостОс.ВыбратьЗначения(пвдатаНач,ПвДатаКОн); Сообщить(Ам.Наименование); // Работал=0; НеРаботал=0; ДатаК=пвДатаКОн;
Ты на правильном пути был Чуть-чуть не так (исправляю все-таки свой код): ДатаКонВыб=ДатаКон; П=СоздатьОбъект("Периодический"); П.ИспользоватьОбъект("Выбыло", АМ); П.ОбратныйПорядок(1); П.ВыбратьЗначения(НачДата,КонДата); Если П.ПолучитьЗначение()=1 Тогда Если П.Значение=Перечисление.СостояниеОС.Выбыл Тогда ДатаКонВыб=П.ДатаЗнач; Прервать; КонецЕсли; КонецЕсли; АвтодниВХозяйстве = 1 + глРазницаВДатах(ДатаНач,ДатаКонВыб);
и не забудь ниже заменить ДатаКон на ДатаКонВыб
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #17 : 10-08-2006 15:16 » |
|
Тьфу! Ошибку увидел: не П.ИспользоватьОбъект("Выбыло", АМ); а П.ИспользоватьОбъект("Состояние", АМ); или может П.ИспользоватьОбъект("СостояниеОС", АМ); смотря какой реквизит используется... (они чего-то оба одинакового типа и оба периодических)
|
|
|
Записан
|
|
|
|
Osman
Гость
|
|
« Ответ #18 : 11-08-2006 06:13 » |
|
Значит то что выше мне затереть, а то что ниже вставить...? Состояние или состояниеОС это я знаю, НО: Когда всё так делаю, то у меня выводится всего 2 машины, когда должно около 20... Почему остальные не бурется? И ещё можешь это пояснить: ----------------------------- Если П.Значение=Перечисление.СостояниеОС.Выбыл Тогда ДатаКонВыб=П.ДатаЗнач; Прервать; ---------------------------- Что это означает? просто я не просто сделать, но я и понять ещё хочу... После прерывания куда ведет? Где то ещё надо мб что-нибудь заменить?
|
|
« Последнее редактирование: 11-08-2006 06:15 от Osman »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #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
|
|
« Ответ #23 : 06-09-2006 09:37 » |
|
Если я не ошибаюсь курсор по умолчанию ставится на первый элемент в списке обхода (Tab list) порядок меняется из конфигуратора в меню "Диалог" следующими пунктами: - Порядок обхода - Настройка порядка обхода - Автоматический порядок обхода Смотри в хелпе что за что отвечает Порой они глючат, закономерностей не помню Если не поможет - есть вариант через обработку, но про это позже...
|
|
|
Записан
|
|
|
|
Osman
Гость
|
|
« Ответ #24 : 06-09-2006 10:44 » |
|
Спасиб это помогло...(я сам до этого дошёл... просто сначала не мог этой вкладки:Диалог найти...) А вот ещё такой косяк: как сделать так чтобы в одном документе, заполненном на основании другого брались не все реквизиты? Есть алгоритм какой нить? Например: Накладная заполняеца на основании Путевого листа и всё что есть в путевом, автоматически попадает в Накладную... А мне нужно чтобы дата была другой, но остальное оставалось как есть...(если менять вручную, то при расчете з/п прога видит Накладные как две(с измененной датой и с той которая в Путевом листе)). Что делать? Примерно хотя бы! не могу нить уловить. Предложил с одной датой делать и Путевой и Накладную, тогда всё нормально, но бухгалтер уперлась и сказала что обязательно надо так...(но получаеца удвоенная зарплата...). Ладно я уже повторяюсь... Помогите если не лень...
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #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
|
|
« Ответ #28 : 02-10-2006 07:21 » |
|
1. Смотри в хелпе: СтрЗаменить(), Найти(), Лев(), Прав(), Сред(). Также возможно поможет НРег() или ВРег() 2. Копай в сторону ПриНачалеВыбораЗначения() (предопределенная для формы) и ВыбратьЗначение() (для СписокЗначений)
|
|
|
Записан
|
|
|
|
Osman
Гость
|
|
« Ответ #29 : 02-10-2006 07:57 » |
|
Там короче нужно вот что: Сделан отчет... Он просто выводит разные справочники... Вначале выбираешь справочник, например транспортные средства, потом ставишь галочки, что про них выводить(гос.номер, дата Техосмотра, дата сертификатов и т.д) нажимаешь сформировать и выдается отчет... В справочнике транспортные средства есть: сами авто, арендованные, списаные... А мне нужно, чтоб выводилась группа только с самими автомобилями, без арендованных и т.п... И такая тема: нужно когда до даты техосмотра следующего и прочих дат остаётся меньше месяца, то они должны выделятся красным цветом... Плохо то что отчет для всех справочников общий и там в столбцах не фиксированные названия, если бы было так, то можно бы области выделять и там менять цвет, но ведь в данном случае области могут местами менятся, они могут быть а могут и нет... Было б всё так просто я б сам уж додумался... наверное...
|
|
|
Записан
|
|
|
|
|