скорее всего свертки будет мало - таблица итогов RG у вас по партиям похоже что не сворачивается, зависают +/- по партиям - и они переносятся из месяца в месяц в таблице итогов, и накапливаются. т.е. дополнительно (перед обрезкой) понадобится закрыть регистр остатков хотя бы на дату обрезки - чтобы "разнотравье" итогов с этого момента не размножалось дальше. еще нюанс - программисту надо будет разобраться с этим перекосом: откуда он берется и как его избежать. если по вашей технологии перекос будет возникать - может возникнуть необходимость выполнять регулярные регламентные работы по свертке перекосов, добавив (если нет) документ движения регистров и написав дополнительную обработку - запускать ее перед открытием периода, создавать и заполнять такой документ чтобы он исправил перекосы по партиям.
в общем, обрезания может в принципе и хватить - но лучше все-таки исправить и эти ошибки.
вопрос из категории "вдруг". до какого числа действовала "старая" схема корректировки? ну т.е. до какого числа корректирующие записи сдавались "одной строкой" - без добавления+(пере/до)нуперации строк корректировок?
Ваша уверенность в том, что Вы верно оцениваете трудоемкость действия "просто исправить отчет" - умиляет. не каждый отчет подходит к любой конфигурации. даже если он "очень красивый". я Вам даже больше скажу: чем "красивее" отчет тем он "привередливее" (ну совсем как девушки!), и тем меньше шансов на то, что он подойдет именно к Вашей конфигурации. Это я Вам как людовед, душелюб и программист - со всей ответственностью заявляю. ещё раз. по слогам. "пригласите специалиста".
Подсказка: УРБД. Таблица 1supdts содержит список ИД измененных объектов данных. Каждую из двух баз сделать центральной. Для каждой создать базу - только приемник. Настроить мирацию объектов данных как надо (для каждой миграция чего надо только в эту самую периферийку - как будто в другую базу данных). Когда надо - читать из 1supdts список "чего надо вігружать", "раскручивать" по ID объектов до примитивных значений реквизитов и в нужном формате выгружатью Каковую выгрузку - загружать в приемник. И чистить 1supdts. Плюс опциональн (и возможно) крутить в прочих урбд-кишочках маркеры-номра-признаки выполненных обменов. А в-общем, задача далеко не тривиальная. Хотя и вполне решаемая. Лично я - делал, по каковой причине с этими глупостями сюда и вылезаю.
На будущее. Удаление и пересоздание перифериек имеет смысл в случаях, когда даннтых без миграции (только иб создания) нет. Да и некрасиво это. Гораздо корректнее вспомнить о методе УРБД "РегистрацияИзменений". И о том, что если базы синхронизированы - то выполнение одинакового алгоритма свертки в них внесет одинаковое изменение в части синхронизируемых данных. Т.е., если после полной синхронизации выполнить одинаковый алгоритм (обработку) свертки с одинаковыми параметрами - используя метод ".РегистрацияИзменений(0)" - то не потребуется почти никакого обмена, а свертка во всех базах будет выполнена синхронно, коррекно и быстро (хотя это как реализовать алгоритм свертки - при желании можно сделать и мееедленно).
Ещё есть возможности для затейников. Инструментарий: Текстовая колонка формы списка. Доп.информация: 1) Формула текстовой колонки формы списка обрабатывает (выполняется) для каждой видимой строки при каждом изменении состава отображаемых строк. 2) В функции модуля формы списка, вызываемой из формулы текстовой колонки, можно использовать "ТекущийДокумент()", "ТекущаяДата()"+"ТекущееВремя()", а также менять переменные модуля (например, СЗ или ТЗ).
Сначала внимательно смотрим на печатные формы (шаблоны). По колонкам. Они ж разной ширины. И подумать - а как, собственно, разместить на листе (состоящем из колонок, каждая из которых в пределах листа имеет одну и ту же ширину) данные с листов, на которых колонки с одинаковым номером не совпадают по ширине?.. Ответ, конечно, есть, вот он: сначала муторно и нудно перерисовывать печатные формы этих документов таким образом, чтобы на этих печ.формах колонки имели синхронную ширину (здравствуй, глюкавое объединение ячеек!). Потом уже легче - рисуем обработку, которая на входе принимает СЗ с таблицами, склеивает их "по вертикали" в результирующую таблицу, которую и выводит на экран... но и тут бывают засады - если в компоновке печатных форм участвуют не только ячейки со стандартным оформлением (ну, например, рисунки есть или поля - к этим объектам из внутреннего языка никак не подступиться). Хотя, лично я для себя этот вопрос решил с помощью ВК-шки "йоксель" (yoksel) - собираю нужные печ.формы на листы книги XLS, а для представления XLS-книги в 1с тоже один раз нарисованная и вылизанная обработка с многозакладочной (по количеству листов) формой и отображением в элементе управления табличного документа, полученного ВК-шкой с листа книги, соответствующего тек.закладке. В итоге - в такой постановке вопроса... с одной стороны - "за ваши деньги - любой каприз"... а с другой - а нужен ли такой геморрой?..
Какая каша в голове. На самом деле всё просто. Покупатель получил товар и рассчитался любым(!) образом - ПКО и погашение его задолженности (возникшей при отгрузке). ЕСЛИ при этом он не вам деньги отдал, а перевозчику/курьеру/племяннику - ещё и РКО на перевозчика/курьера/племянника. И пусть болтьается пока он не привезёт бабло. Привез, сдал вам - вводите на основании РКО ПКО от перевозчика на ту же сумму. Перевозчиков/курьеров/племянников для удобства в справочнике контрагентов сложить в отдельную папку. Тип контрагента - поставщик услуг. Т.о. во взаиморасчетах с поставщиками будете видеть все висящие долги поставщиков из этой паки как "деньги в пути". Если предоставляемые ими услуги или будете гасить день-в-день (док=УслугиСтророннихОрганизаций+(подчиненный!)РКО), или просто не будете регистрировать. Отдельным вопросом проходит учет не денег, но товаров в пути. они ещё ваши? или они уже покупателя? приведенное выше годится для случаев, когда они уже покупателя.
// можно и покороче. не ковыряясь нигде, кроме того места, куда нужно выбрать строго группу: Процедура ПриНачалеВыбораЗначения(НаимРекв,ФСО,флАвто=1) //предопределенная Перем тКонт; Если НаимРекв="ПодразделениеЗП" Тогда ФСО=0; ОткрытьФорму("Справочник.ПодразделенияЗП",тКонт); тКонт.ВыборГруппы(1); тКонт.УстановитьОтбор("<ЛюбойРеквизитСФлажкомОтбора>","Тупо по значению этого самого реквизита, которого ну никак нету"); КонецЕсли; КонецПроцедуры //ПриНачалеВыбораЗначения
У вас неправильно организована выборка по справочнику. используется для записи периодических реквизитов. Поэтому непонятно задание для выборки.
"Описание встроенного языка" почему-то несогласно с процитированным. А именно:
Цитата
ИспользоватьДату Установить дату выборки периодических реквизитов справочника.
Синтаксис: ИспользоватьДату[<Дата>, <УстСразу>) Англоязычный синоним: UseDate Параметры: <Дата> Необязательный параметр. Выражение со значением типа «дата». <УстСразу> Необязательный параметр. Число: если 1, то дата, переданная в качестве параметра, будет установлена уже в текущей выборке; если 0 — то дата, переданная в качестве параметра будет установлена при следующей выборке. Значение по умолчанию — 0. Например:если "Цена" — периодический реквизит справочника, тоСпр.ИспользоватьДату(Д1, 1);Спр.ВыбратьЭлементы();А = Спр.Цена; — возвращает значение на дату Д1Спр.ИспользоватьДату(Д2, 1);Б = Спр.Цена; — возвращает значение на дату Д2!Если <УстСразу> — 0 (или опущен), тоСпр.ИспользоватьДату(Д1);Спр.ВыбратьЭлементы();А = Спр.Цена; — возвращает значение на дату Д1Спр.ИспользоватьДату(Д2);Б=Спр.Цена; — тоже возвращает значение на дату Д1!Спр.ВыбратьЭлементы();В=Спр.Цена; — только теперь возвращает значение на Д2. Возвращаемое значение: Текущее значение используемой даты (на момент до исполнения метода). Описание: Метод ИспользоватьДату устанавливает для объекта типа «справочник» дату, на которую будут в дальнейшем выбираться (или записываться) значения периодических реквизитов справочника. Это очень важный метод, о котором необходимо всегда помнить при работе со справочниками, имеющими периодические реквизиты. Если он пропущен, то чначения выбранных периодических реквизитов справочника будут не определены.
Замечание: Если к объекту типа «справочник» однажды применен метод ИспользоватьДату, то в дальнейшем, чтобы выбирать значения периодических реквизитов справочника, нельзя применять к этому же объекту методы Получить и Установить, т. е. в такой последовательности эти методы несовместимы. Замечание: Данный метод имеет следующую особенность применения: его нельзя использовать «через две точки». Например, если в документе с именем "ДокНакл" есть реквизит "Фирма" типа «справочник», у которого есть периодические реквизиты НДС и СН, то следующий оператор: ДокНакл.Фирма.ИспользоватьДату(Дата); работать не будет. В данном случае следует просто использовать промежуточную переменную, например: ФирДок = ДокНакл.Фирма; ФирДок.ИспользоватьДату(РабочаяДата()); НДСДок = ФирДок.НДС;
Пример: // Здесь мы работаем в локальном контексте модуля Формы // редактирования документа. // Реквизит "Должность" в документе является справочником, // у которого "МинОкл" - периодический реквизит Длж = СоздатьОбъект("Справочник.Должности"); Длж.ИспользоватьДату(ДатаДок); Длж.НайтиЭлемент(Должность); Сообщить(Длж.Наименование + " Минимальный оклад" + Строка(Длж.МинОкл)); См. также: Получить, Установить, НайтиЭлемент, ВыбратьЭлементы
Цитата(igmig65 @ 25.06.13, 9:30)
Во первых зачем записывать дбф каждую строку, тоесть в цикле, это раз. ...
Затем, что иначе заполненная новая запись не будет сохранена (добавлена) в файл (если не включен режим автосохранения).
Цитата
И еще, не знаю может это влияет и на запись, на открытие влияет точно - имя файла максимум 8 символов.
кстати, да. (прим.: запись - это тоже после открытия))
Именно "ручками весь макет". В ДВА КЛИКА. судя по всему Ввам неизвестно про следующий способ работы с копипастой в мокселе (который позаимствован, кстати им у екселя): 0) В общие таблицы - вставить пустой макет и назвать <КакНадо>. 1) В макете таблицы в документе: в верхнем левом углу, на пересечении "линеек" номеров строк и номеров столбцов - такой выпуклый прямоугольничек похожий на кнопочку. в него - одно из двух: а) ткнуть правой кнопкой мыши - "Запомнить" - или - б) ткнуть "обычной" левой кнопкой мыши выделится вообще всё - и после этого скопировать в буфер обмена привычной комббинацией клавиш (CtrlIns, например, или Ctrl+C) 2) теперь пойти в макет-приемник (см.п.0), и совершенно аналогичным образом используя описанный в п.1 способ - уже вставить скопированное в п.1 таким образом вставится вообще всё - ширины-высоты колонок, форматы ячеек и их содержимое, и даже секции.
1. Партии. 2. В справочнике Цен (подчиненном Номенклатуре) - для каждой партии своя цена. Наименование/Код цены кодировать так, чтобы можно было найти соотв.партию (и чобы по партии можно было найти соотв.цену). И - "пригласите специалиста" (с). потому что возможно и не так (от "что-то" до "всёваще")
ЗЫ: А, ё!.. "на неавтомаизированные точки" - это УРБД и базы "только приемник". с соотв.настройкой миграции объектов, а возможно и сподпиливанием кода или даже таблиц (чтобы не слать лишнего), и с курьером на флешке в его зубах фалы обменов если нет интернетов.
Есть документ с табличной частью, колонки в табличной части неширокие (так надо), а значения в некоторых из них длинные. Вопрос: Как получить значение конкретной ячейки табличной части при установке на нее выбора (одно нажатие левой кн-й мыши) например в текстовое поле, расположенное здесь же на форме. Чтобы не редактируя ячейку увидеть ее полное значение.
На форму - текстовый реквизит. В формулу вбить, например, вотето: "(стр."+НомерСтроки+","+Форма.ТекущаяКолонка()+"): "+Шаблон("[СокрЛП("+Форма.ТекущаяКолонка()+")]") Срабатывает только при смене тек.сроки - сиречь при переходе между колонками в рамках одной строки не обновляется (не вычисляется). Но при желании и это можно обойти - например, поименовав это текстовое инфо-поле (например, "НаФормеТекАтрибутТабЧастиИнфо"), а модуле формы:
Zaval, вот уж оба раза (включая тот, который "еще") - особенно непонятно, "к чему". Об объекте "ТабличноеПоле" и о внешних компонентах - вроде ни полуслога в вопросе не было, ммм?..
"//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Количество = Документ.Акт.Количество; |Функция ИтКво=Сумма(Количество); |Группировка Акт упорядочить по Акт.ДатаДок; |"//}}ЗАПРОС
Не работает...
{Отчет.МодРеестр.Форма.Модуль(20)}: Функция ИтКво=Сумма( <<?>> Документ.Акт.Количество); Запрос[7] : Ожидается логическое выражение
Я извиняюсь но может эту функцию я не туда поставил
В приведенном куске кода напрочь отсутствует фрагмент, фигурирующий в приведенном сообщении об ошибке. Ваши выводы? (мои выводы - увы, весьма неутешительны для Вас, поэтому попрридержу их при себе)
1) "на все строках" - ответ странный и неправильный. 2) после свертки ТЗ колонка "Валюта" в ней отсутствут - и именно по свернутой ТЗ в отчет выводится секция "Строка". ни на какие мысли не наталкивает? 3) на всякий случай универсальное правило при формировании таблицы отчета: если сообщение об ошибке выводится, но формирование отчета не прерывается - значит сообщения об ошибках вызваны вычислением значений в ячейках (или в расшифровках) шаблона таблицы при их выводе.
вроде разжевано до кода - как сформировать ТЗ с итогами по родителям первого уровня. нужно что-то другое? формулируйте так, чтобы было понятно собеседникам. (инфостарт - ресурс, на который с такими вопросами на таком уровне даже понимания собственной задачи идти бесполезняк; идите на мисту - там может и поизмываются, но больше вероятность, что поймут "птичий язык")
Да вроде из ОбработкаПодбора при выборе владельца - никто не мешает сделать ОткрытьПодбор подчиненного справочника с установкой для него выбранного владельца, и в этой же ОбработкаПодбора выбранное из подчиненного справочника значение - занести в реквизит... надеюсь, что про различение в ОработкаПодбора того, что именно выбрано (по типу+виду выбранного значения) и так поятно?..
О кнопках выбора (в смысле "педалек" у реквизитов), Все знают, что наличие таких педалек устанавливается в свойствах реквизита, на закладке "Дополнительно", галкой "Имеет кнопку выбора" (внизу-справа). У реквизитов т.н. агрегатного типа (Справочник,Документ, итп) эта педалька устанавливается движком автоматически (и не может быть снята) - но сейчас не об этом.
1. У реквизитов примитивных типов (в частности, у строк) эта педальта тоже может быть установлена. И тогда, например, можно в процедуре формы "ПриНачалеВыбораЗначения" нажатие на эту педальку поймать, и закодировать какой-нибудь процесс выбора значения с последующей установкой в реквизит значения, вычисленного по выполненному выбору. Если для выбора будет открыта какая-то форма (с помощью "ОткрытьФорму") - то она откроется в режиме выбора(!), а выбранное значение попадет в по окончании выбора в процедуру "ОбработкаВыбораЗначения" (в ее первый параметр), и в этой процедуре переменную, указанную в первом параметре, можно пере-назначить как будда на душу положит - если при этом не обнулять значение третьего параметра этой процедуры (т.н. "флаг стандартной обработки") - то в реквизит будет установлено именно вот таким образом "переиначенный" в этой процедуре первый параметрр (изначально содержащий выбранное значение)! В качестве небезынтересного примера. Создайте внешнюю обработку с единственным реквизитом "ВыбКонтрагентНаим" типа "строка неограниченной длины", добавьте в этот реквизит педальку (см.выше как). А в модуле - вот такой код:
Процедура ПриНачалеВыбораЗначения(НаимРекв,ФСО) //предопределенная Если НаимРекв="ВыбКонтрагентНаим" Тогда ОткрытьФорму("Справочник.Контрагенты");//ну или любой другой, который есть в конфигурации КонецЕсли; КонецПроцедуры //ПриНачалеВыбораЗначения //------------------------------------------------------------------------------ Процедура ОбработкаВыбораЗначения(ВыбЗнач,НаимРекв,ФСО) //предопределенная Если НаимРекв="ВыбКонтрагентНаим" Тогда ВыбЗнач=ВыбЗнач.ПолноеНаименование(); КонецЕсли; КонецПроцедуры //ОбработкаВыбораЗначения //==============================================================================
Сохраните и попробуйте в предприятии понажимать на педальку. Поиграться... Например, добавить на эту же форму, например, реквизит "ВыбКонтрагент", а в "ОбработкаВыбораЗначения" (см.выще) перед "КонецЕсли;" добавить строку "Если НаимРекв="ВыбКонтрагент" Тогда Если Вопрос("А может всунем Родителя?","Да+Нет+Отмена",12)="Да" Тогда ВыбЗнач=ВыбЗнач.Родитель КонецЕсли;"
2. Теперь о педальке и выборе. В приложенном выше варианте - убираем педальку (отключаем галку "Имеет кнопку выбора" в свойствах текстового реквизита). И - снова открываем (если была открыта до сохранения - пере-открываем!) эту обработку. И - вспоминаем о том, что для выбора значения в реквизит можно использовать хот-кей F4 - и, став в этот текстовый реквизит, не обращая внимания на отсутствие педальки, смело жмём F4 - что получилось? Ага, всё верно, движок 1с при нажатии на любом(!) реквизите (хоть с педалькой выбора, хоть без неё!) хот-кея F4 выполняет предопределенную процедуру ПриНачалеВыбораЗначения модуля формы. Что иногда может пригодиться - для экономии места на форме (не расставляя педальки на реквизиты, для которых нужно организовывать выбор(!) значения с его преобразованием перед занесением в сам реквизит).
3. Иногда бывает нужным выбирать, например, для реквизита сначала элемент из справочника, показывая при этом не весь справочник. Или просто открывать для выбора какую-то не предназначенную для выбора "кем угодно" специальную форму выбора, не предназначенную в конфигурации явно для выбора значения какого-то типа+вида. Или вообще - выбирать из списка в виде ТЗ, размещенной на форме обработки, или даже - о, будда! - выбирать значение из формы документа! В таких случаях может пригодиться прием "подмена формы выбора". Для этого в ПриНачалеВыбораЗначения необходимо обнулить флаг стандартной обработки (что отменит открытие для выбора значения формы списка, предназначенной "по умолчанию" для выбора в конфигурации) и - аналогично приведенному выше примеру - открыть любую другую форму. При этом, тут же, сразу после "ОткрытьФорму" в переменной, указанной соответствующем параметре, можно получить контекст(!!!) открытой формы (сразу после того, как в открываемой форме отработает предопределенная процедура "ПриОткрытии") - и через этот самый полученный контекст можно много чего с этой формой налопатить, через точку обращаясь к реквизитам формы, к самой форме и к методам формы и реквизитов! например, если для выбора открыта форма списка справочника - можно в ней принудительно установить отбор, отключить/включить режим иерархического отображения, наложить фильтр с помощью "<ПеремКонтекст>.ИспользоватьСписокЭлементов(..)", ограничить виды отборов, открыть только нужного родителя, и т.д. - тут, как говорится, надо "играться"...
прим.: в открываемых формах режим выбора - т.е. открыта форма (любая!) для выбора или нет - можно определить с помощью "Форма.РежимВыбора()" (см.синтакс-помощник), а выполнить выбор по нажатию на кнопку - можно конкретизировать выбираемое значение, используя в формуле кнопки (или в процедуры, вызываемой по формуле кнопки) "Форма.ВыполнитьВыбор(<ЧтоИменноНадоВернуть>)".
Т.е. на этом счете уже указан ВидСубконто с типом "Справочник.Договора"?.. Тогда - лучше не надо. Вариант решения без изменения вида субконто: авто(!)создание элементов справочника Договора для каждого нужного документа (со ссылкой на дкоумент в каком-нибудь реквизите и с потроением наименования в виде текстового представления докуммента) - и уже эти элементы справочника использовать в качестве субконто.
По кнопке - в формулу вбить Форма.Закрыть(0). И назначить её хоткей (для юзерского удобства). "На крестик" или по Ctrl+F4 (хоткей для "крестика") - никак. по крайней мере "в лоб" никак. хотя, можно попробовать поэксперементировать с текстовым реквизитом, у которого в формуле вызов функции, которая делает "Если Модифицированность()<>0 Тогда НачатьТранзакцию(); Записать(); ОтменитьТранзакцию(); КонецЕсли;". но и этого лучше не делать - глюки возможны (пропуски в нумерации, например).
Что за ошибка - тайна, покрытая мраком?.. это очень зря. ------- Попробую догадаться. С самого начала. Как "отче наш". В сложной проводке: 1) итоговая сумма Дт-корреспонденций должна совпадать с итоговой суммой Кт-корреспонденций; 2) если(!) с обеих(!) сторон (среди Дт-корреспонденций и(!) среди Кт-корреспонденций) есть валютные счета - то валюта в таких корреспонденциях должна совпадать, а также аналогичное п.1 требование накладывается на итоговые валютные суммы. ------- Ошибка (когда валюта не выбрана) возникает потому, что минимум с одной стороны отсутствуют вал.счета, а (итоговая) ненулевая сумма явно указанной Дт-корреспонденции отличается от нулевой итоговой суммы Кт-"только количетвенных корреспонденций" (нарушается п.1). А когда валюта выбрана - Сумма не устанавливается (и в результате остается нулевой) - и "только количетвенные корреспонденции" по Кт имеют итоговую сумму тоже нулевую, в результате чего суммы по Дт и по Кт сложной проводки совпадают, как и требуется. ------- Кстати, в 1с есть такой очень полезный прием при формировании сложных проводок. Если во всех корреспонденциях одной стороны указать суммы, тогда для единсвенной корреспонденции другой стороны сумму можно не указывать явно - при этом эта самая сумма пересчитается автоматически движком 1с. Как это (ненамеренно, судя по всему) получается "при выборе валюты" (см.предыдущий абзац).
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!