тогда - общий. а копию глобальной экспорт-процедуры "глПечатьЖурналаДокументов" - в модуль формы жкрнала. и в него всандалить фильтр по виду документа. (ну, или если(!) в глобальной экспорт-процедуре "глПечатьЖурналаДокументов" есть возможность через параметры такой фильтр указывать - то ничего никуда не копировать, а просто поменять её вызов так, чтобы в реестр выводились документы с нужным фильтром по виду докуменов)
Насколько я понимаю это осуществляется при помощи кнопки "Состав"? Но к сожалению она становиться доступной лишь при выборе типа журнала "Дополнительный"
1. Журнал - ОБЫЧНЫЙ. 2. Найти ДОКУМЕНТ нужного вида - и установить в нем(!) принадлежность к этому журналу.
ну, тогда этот журнал был изначально сконструирован не совсем штатным способом. который тебе придется теперь воспроизвести. 1. Сначала ЭТОТ журнал делается обычным. 2. Настраивается состав видов доков в нем (единственный вид - который был раньше, и который нужно вводить по Ins; при этом в документе этого вида обязательно проверить и установить при надобности принадлежность к ЭТОМУ журналу). 3. Сохранить конфигурацию. 4. ЭТОТ журнал СДЕЛАТЬ ОБЩИМ. 5. Сохранить конфигурацию. прим.: между пп.4-5 не выполнять больше никаких(!) действий. ЭТОТ журнал больше не трогать. прим.2: ЕСЛИ сказанный выше способ не прокатит - надо вместо п.1 такой журнал пере-создать (переименовать ЭТОТ-старый журнал, создать ЭТОТ журнал обычный (НЕ общий!!!), настроить в нем с помощью копипасты все как в старом, и далее по пунктам начиная с п.2). ------- о результатах - неплохо бы доложить!
Давым-давно перестал все екселем собирать с вот таким геморроем. Для сохранения чего угодно в ексель-книгу, вне зависимости от наличия на рабочем месте установленного екселя и его настроек - пользуюсь йокселем. ничего лишнего, все нужное и куча бонусов. и в демке разжевано.
Установить режим отображения диалога сохранения периодических реквизитов при записи элемента справочника. Синтаксис: СохранениеПериодическихРеквизитов(<ВариантВызова>, <Список>) Англоязычный синоним: РегiodicAttributesSaving Параметры:
<ВариантВызова> Число, определяет вариант вызова метода: 0 — отключить автоматический режим определения списка измененных реквизитов и показ диалога (параметр <Список> не используется); 1 — включить автоматический режим определения списка измененных реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов); 2 — включить автоматический режим определения списка измененных реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов); 3 — выполнить определение списка измененных реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов); 4 — выполнить определение списка измененных реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов); 5 — выдать/установить список сохраняемых периодических реквизитов. Метод возвращает установленный список периодических реквизитов, которые будут записываться на момент до вызова метода. Если параметр <Список> указан, то устанавливается список периодических реквизитов, которые должны быть записаны. <Список> Необязательный параметр. Строковое выражение, в котором через запятую перечислены имена периодических реквизитов справочника, которые должны выводится в диалоге (если диалог показывается), или по которым будет записан элемент истории (если диалог не показывается). По умолчанию предполагается, что в списке все периодические реквизиты справочника. Если указан символ "*", то считается, что в список включены все периодические реквизиты справочника. Описание: Метод СохранениеПериодическихРеквизитов управляет режимом автоматического определения списка измененных периодических реквизитов, показом диалога для выбора записываемых периодических реквизитов, а также предоставляет доступ непосредственно к списку записываемых периодических реквизитов. Если данный метод опущен, то при записи элемента справочника диалог отображается со всеми периодическими реквизитами.
Замечание. Данный метод доступен только в контексте Модуля формы элемента справочника (см. «Виды программных модулей»). Действие данного метода относится только к текущему элементу справочника, который доступен в локальном контексте Модуля формы элемента справочника.
Пример: // Здесь мы работаем в локальном контексте модуля Формы // элемента справочника. // в справочнике есть несколько реквизитов, // которые являются периодическими реквизитами. СохранениеПериодическихРеквизитов(1, "ЦенаРозн, ЦенаОптов");
или драйвера обновить. или с настройками видеокарты поиграться. куда-нибудь в сторону уменьшения оптимизации. в старой винде 98 исправлялось отключением аппаратного ускорения.
ну, например, и то, что выберутся все элементы справочника, а не только начиная с тек.группы. и хотя в приведенном варианте кода это до лампады - выборка начинается с корневой группы, а дефолтное значение параметра в ПолучитьЭлемент подразумевает выборку всех подчиненных групп. но все-таки блок кода начиная с "ВыбратьЭлементы" будет в разных условиях работать по-разному (в зависимости от ранее установленного родителя), и явное указание параметра выборки 0 обеспечит одинаковую работу блока кода (сиречь выборку всех элементов вне зависимости от текущего установленного родителя) - по "правилам хорошего тона". а так - правильно, в данном конкретном случае - "и ничего".
Чудес не бывает, но кто-то хоть попытался повторить код из поста №5? Там всего пять строк, прямое вычисление стоит в начале цикла и больше нигде. Повтрю код, скопируйте и пройдите отладчиком.
Кл=СоздатьОбъект("Справочник.Контрагенты"); Кл.ВыбратьЭлементы(0); Пока Кл.ПолучитьЭлемент()>0 Цикл Пар1=1; Сообщить(Кл.ТекущийЭлемент()); КонецЦикла;
кхм... к коду как раз никаких вопросов (он прозрачный и в проверке не нуждается). вопросы - к содержимому табло Отладчика (если, конечно, процитированный код - именно таков). об чом и сказано (и даже, вроде, разжевано). пошаговое выполнение с единственным(!!!) вычисляемым в табло выражением "Кл.ТекущийЭлемент()" (без кавычек) - "пострадавшим от глюков" опробовано? и каковы результаты?
чудес на этом свете нет. ну или почти нет. так что авторство "глюка" принадлежит скорее всего автору топика. Даю наводку: в Отладчике выражения Табло (Меню>Отладка>Табло или кнопарь соответвующимй на панели) - вычисляются каждый раз при получении управления Отладчиком. Отладчик получает управление при прерывании на точке прерывания, или (sic!) при завершении каждого шага (F8,F10,F7,etc.). И если у тебя там "нечаянно" стоит прямое вычисление "Кл.ПолучитьЭлемент()" - или непрямое, с вычислением значения какой-нибудь функции, которая выполняет "нечаянно" подобный переход на следующий элемент выборки - то так оно и выглядит.
РасположениеФайла Определить, где располагается данный внешний отчет. Синтаксис: РасположениеФайла(<Путь>, <Имя>) Англоязычный синоним: FilePath Параметры: <Путь> Идентификатор переменной, куда метод возвращает путь к файлу, где располагается данный внешний отчет. <Имя> Идентификатор переменной, куда метод возвращает имя файла, где располагается данный внешний отчет. Возвращаемое значение: Строковое значение полного имени (вместе с путем) файла, где располагается данный внешний отчет. Описание: Метод РасположениеФайла позволяет узнать, где располагается данный внешний отчет. Замечание. Данный метод следует использовать только в модуле формы внешнего отчета. Пример: Имя = ""; Путь = ""; ПолноеИмя = РасположениеФайла(Путь, Имя)
есть мнение, чтоооо... "не думай... о секундах.... свысока... (пам-пам-пам-пам)" (с)
Функция ПопробуемПочту(Почта,тПараметр="",тОшибка="") Перем тВопрос,тРезультат,СчПопыток; СчПопыток=1; тРезультат=""; тВопрос=""; Если ПустоеЗначение(тПараметр)+ПустоеЗначение(тОшибка)<>0 Тогда тПараметр="SMTP"; тОшибка="Не получилось"; КонецЕсли; Сообщить("<"+ТекущееВремя()+"> с параметром """+тПараметр+""" - попытка номер "+СчПопыток,""); Пока Почта.Подключиться("SMTP")<>1 Цикл Если ПустоеЗначение(тВопрос)<>1 Тогда Если Найти("Нет,Отмена",Вопрос(тВопрос,"Да+Нет+Отмена",1))<>0 Тогда тРезультат="Не получилось"; Прервать; КонецЕсли; КонецЕсли; тВопрос="Попробовать с параметром ""SMTP"" ешшо разок ("+СчПопыток+"-ый), ммм?.."; СчПопыток=СчПопыток+1; Сообщить("<"+ТекущееВремя()+"> с параметром ""SMTP"" - попытка номер "+СчПопыток,""); КонецЦикла; Если ПустоеЗначение(тРезультат)<>1 Тогда Сообщить(тРезультат+", попыток = "+СчПопыток+" (потом - надоело).","!!!"); Если Найти("Нет,Отмена",Вопрос("Попробовать с параметром ""Отправка""?..","Да+Нет+Отмена",12))<>0 Тогда Возврат(тРезультат) Иначе Возврат(ПопробуемПочту(Почта,"Отправка","Просто капец")) КонецЕсли; КонецЕсли; КонецФункции //ПопробуемПочту // ПРИМЕР использования: // Если ПустоеЗначение(ПопробуемПочту(Почта))<>0 // Тогда тРезультат="Уря!!! Получилось!!!!!!!"; Сообщить(тРезультат,"i"); Предупреждение(тРезультат,12); КонецЕсли; // // ну и рассказать нам - что там в окне сообщений...
Под "данным методом" подразумевается "ОткрытьФорму".
И сказанное тобой - справедливо только для НЕ МОДАЛЬНОГО открытия формы: 1) открывается указанная форма, в ней в Форма.Параметр доступно все, что ты туда передал (пока форма открыта, до самого закрытия); 2) в открытой форме выполняется "ПриОткрытии" (или "ПриПовторномОткрытии" если эта форма уже была ранее открыта), после чего выполнения кода переходит отбратно, на слкдующий после "ОткрытьФорму" оператор - причем уже в этом(!) коде в параметр принимается Контекст(!) открытой формы - через который можно поманипулировать с её ревизитами и доступными в её контексте методами формы и переменными модуля формы. 3) после закрытия открытой таким образом формы (и если на этот момент переменная-параметр ещё "живая" - т.е. если это переменная модуля, например) в этой переменной уже будет находится все, что в открытой форме присвоено параметру (Форма.Параметр). При не-модальном открытии формы отлов этого момента (закрытия открытой программно формы) - отдельная песня, и, как правило, не представляет интереса (потому что не так явно понятно, и требует дополнительных телодвижений).
При МОДАЛЬНОМ открытии формы: 1) открывается указанная форма, в ней в Форма.Параметр доступно все, что ты туда передал (пока форма открыта, до самого закрытия); 2) в открытой форме выполняется "ПриОткрытии" (или "ПриПовторномОткрытии" если эта форма уже была ранее открыта) и "всё-всё-всё остальное" в этой форме. Вызвавшая модальное открытие форма при этом как-бы "замерзает и ждет" закрытия модально открытой формы! 3) ТОЛЬКО сразу после после закрытия открытой модально формы выполнения кода переходит отбратно, на слкдующий после "ОткрытьФорму" оператор, и тут уже в этой переменной будет находится все, что в открытой модально форме присвоено параметру (Форма.Параметр). Соответственно при єтом возможно сравнительно простое использование полученного в єтой переменной значений(или, если надо, списка значений, например), которое возвращает "в параметре" ранее открытая (модально) форма.
тКонт=""; ОткрытьФормуМодально(<Параметр1>,тКонт[, < Параметр 3>]); Если ТипЗначенияСтр(тКонт)<>"СписокЗначений" Тогда//Если (ТипЗначенияСтр(тКонт)="Строка")И(ПустоеЗначение(тКонт)<>0) Тогда тКонт="Облом-с... Форма не открылась (или ошибка, или там в ПриОткрытии обнулили статус возврата)..."; Сообщить(тКонт,"!!!"); Предупреждение(тКонт,12); СтатусВозврата(0); Возврат; КонецЕсли; // а тут дергай из тКонт(списка значений) все, что вернулось из обработки ...
кхм. а что, если один пользователь открыл документ "ЫЫЫ" (который будет пытаться откорректировать элемент справочника "ыыы") - а другой пользователь в это время открыл элемент справочника "ыыы" (который будет пытаться откорректировать документ "ЫЫЫ", котороый открыт у первого пользователя), ммм?..
Цитата(ZhenyaYa @ 21.11.12, 18:48)
В доке есть реквизит, ссылаемый на справочник, и наоборот При открытии, как и при записи, справочника происходит изменение документа соответствующего ему документа, и наоборот. Может получится неразбериха...
Допустим, что. Документ нельзя открывать на редактирование, если кто-то (кто угодно!) в это время редактирует элемент справочника, который прописан в реквизите, допустим, "ыыы" этого документа. Тогда достаточно в модуле формы такого документа, в предопределенной процедуре "ПриОткрытии" добавить следующий код:
Если Форма.ТолькоПросмотр()<>1 Тогда Если ыыы.Выбран()<>0 Тогда тСпр=СоздатьОбъект("Справочник."+ыыы.Вид()); тСпр.НайтиЭлемент(ыыы); Если тСпр.Блокировка(1)<>1 Тогда Предупреждение("Ненене. Кто-то корректирует """+ыыы.ПолноеНаименование()+"""... приходите в єтот документ чуть позже.",12); СтатусВозврата(0); Возврат; // ну или Форма.ТолькоПросмотр(1); чтобы не скучал человек... Иначе тСпр.Блокировка(0) КонецЕсли; КонецЕсли КонецЕсли; КонецПроцедуры //ПриОткрытии
Допустим, что. Элемент справочника нельзя открывать на редактирование, если кто-то (кто угодно!) в это время редактирует элемент справочника, который прописан в реквизите, допустим, "ЫЫЫ" элемента справочника. Тогда достаточно в модуле формы элемента такого справочника, в предопределенной процедуре "ПриЗаписи" добавить следующий код:
Если Форма.ТолькоПросмотр()<>1 Тогда тДок=СоздатьОбъект("Документ"); Если тДок.НайтиДокумент(ЫЫЫ)<>0 Тогда Если тДок.Блокировка(1)<>1 Тогда Предупреждение("Ненене. Кто-то корректирует Документ """+ЫЫЫ+"""... приходите в єтот элемент справочника чуть позже.",12); СтатусВозврата(0); Возврат; // ну или Форма.ТолькоПросмотр(1); чтобы не скучал человек... Иначе тДок.Блокировка(0) КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры //ПриОткрытии
метод формы списка справочника "ИспользоватьСписок()"
ИспользоватьСписокЭлементов(<?>); UseItemList(<?>); Синтаксис: ИспользоватьСписокЭлементов(<СписокЗначений>) Назначение: Реализует фильтрацию элементов справочника, используя нединамический фильтр. Параметры: <СписокЗначений> - необязательный параметр. Значение типа - ''СписокЗначений'' - должен представлять собой список элементов справочника, выбранных для просмотра. Если это значение пустое, то фильтр отключается. Замечание: Метод доступен только в контексте Модуля формы списка справочника и относится ко всему текущему справочнику.
Оживлю. Общий реквизит документов типа "строка" неограниченной длины. Будучи НЕ последним в списке общих реквизитов (в дереве метаданных). В SQL-версии ведет к вылетам по внутренним SQL-ошибкам. Отсюда - полезное универсальное правило: На всякий случай. Всегда и везде. Общие реквизиты документов типа "строка" неограниченной длины в списке общих реквизитов дерева метаданных - смещать в самый низ списка.
через регистр. Прим.: хотя в 1с для периодического значения и можно увидеть "время" на которое он установлен - тем не менее это, строго говоря, не время, с которого действует установленное значение, но лишь время документа, установившего это значение. Попробуйте поиграться с установкой на одну и ту же дату разных значений период.реквизита документами и вручную - и попробуйте потом попробовать выдрать кодом установленные значения, проанализировав порядок выборки (только не торопитесь говорить про хронологический порядок - там порядок ИД-ов документов, в чем можно убедиться переставив местами по времени документы, установившие значения такого реквизита - и в выборке они не будут уже идти в хронологии). в целом и общем в периодике в 1с77 ситуация действительно проста как топорище - на одну дату - одно значение. оно же последнее в выборке значений объекта "Периодический" за эту дату, оно же "ЗначениеНаДату" и/или "Получить"
Поле агрегатного объекта не обнаружено (ВыбратьЭлементПоРеквизиту)
не поверишь. такое в ответ на такой код - у всех бы выдало. недорого продам синтакс-помощник. ну или научу нажимать клавиши Ctrl+F1, в том числе ключевых словах встроенного языка 1с.
поправив для випадку, коли відміняємо проведення документу, змінюємо щось в ньому і проводимо ще раз
Вместо включения в попытку (которое само по себе тормозное, и скорее предназначено для "аварийно-устойчивости" в не отлаженном коде) - можно проверять на "Выбран()". Навскидку и например (а может и с синтаксическими ошибками):
Процедура ПриЗаписи() Если Выбран()<>1 Тогда АвтоВремяОтключить(); УстановитьВремя(05,55,0); ИначеЕсли ПолучитьВремя()<>"05:55:00" Тогда тТхт="Время документа """+ТекущийДокумент()+""" = "+ПолучитьВремя()+" >>> АВТО-УСТАНОВка времени на 05:55:00 НЕ ВЫПОЛНена!.."; Сообщить(тТхт,"!!"); Предупреждение(тТхт,12); КонецЕсли; ...
1) пере-позиционирование (изменение даты и/или времени) проведенного документа - невозможно (и это - правильно). 2) в обработке проведения ТекущийДокумент() всегда(!!!!) Выбран()=1 (и всегда .НайтиДокумент(ТекущийДокумент())=1). 3) манипуляции со временм/датой документа нужно выполнять до записи документа - сиречь, как правило, в предопределенной процедуре ПриЗаписи() модуля формы документа. 4) если документ новый, в модуле формы возможно манипулирование его временем с помощью методов "АвтоВремяХхххх" 5) кроме того, некоторые параметры позиционирования при записи/проведении документов регулируются с помощью настроек в режиме предприятия.
Насколько я понимаю "Остаток(1)" это внутренний метод 1С, и для нового склада необходимо указать "Остаток(3)"
неправильное понимание. искать функцию "Остаток" в модуле формы списка. (если там нет - что очень вряд ли - то в глобальном модуле, с описателем "Экспорт"). из лирики: а вообще-то, вряд ли это штатная колонка и функция. и программисту, использующему ключевые слова встроенного языка 1с для наименований функций (равно как и наименований процедур, переменных и идентификаторов метаданных) - я бы лично руки отрезал по плечи. или откусывал.
Цитата(GoDammeD @ 09.10.12, 14:47)
Но как добавить новый столбец в Форму списка, к сожалению я так и не нашел.
1) активизировать (простым тыком) многострочную часть 2) нажать на кнопку вставки в диалог текстового поля (синенькая буква "Т", подсказака при наведении "Текст" - или Меню-Вставить-Текст) 3) указать место для вставки - многострочную часть (активизированную ранее, на всякий случай, в п.1).. 4) пойти в многострочной части до упора вправо - и найти там желаемое. корежить и переставлять желаемое как заблагорассудится.
а без детского сада и игр в деда буквоеда если? об изменении формы документа (из модуля которой нужно выполнить процедуру в модуле другой формы) - равным образом ничего не сказано. и, поелику речь идет о модуле другой формы - как минимум следовало бы при формулировке ответа про "специальные параметры" упомянуть о необходимости внесения изменений ещё и в модуль формы этого документа. а не выдавать неполный (и, строго говоря, неверный) ответ, а потом пытаться делать "хорошую мину при плохой игре". ну, мне так кажется.
Процедура НукаПокажитеМнеВсехВладельцевСправочниковЩясЖе() Перем Сч; Для Сч=1 По Метаданные.Справочник() Цикл Если Метаданные.Справочник(Сч).Владелец.Выбран()<>0 Тогда Сообщить("Справочник вида "+Метаданные.Справочник(Сч).Идентификатор+" подчинен Справочнику (-владельцу) вида " +Метаданные.Справочник(Сч).Владелец.Идентификатор,"i") КонецЕсли КонецЦикла; КонецПроцедуры //НукаПокажитеМнеВсехВладельцевСправочниковЩясЖе
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!