Как атоматически закрыть документ открытый с помощью процедуры «ОткрытьФорму» ?
«Всем добрый день .
Люди добрые, помогите пожалуйста, если это не трудно .
1.Предистория:
Наша компания ведёт складской учёт в программе 1с 77 Аналит: Фармация. Бухгалтерию же ведёт
в 1С 77 Буххгалтерский учёт. Особенность в том, что есть товары со ставками 18%, 10% и без НДС.
Чтоб не мучится со 100000 номеклатурой ещё и в бухгалтерии, я использую там вссего 3 наименования:
товар 10%, товар 18% и товар без НДС. Документы прихода и отгрузги товара прегружаютя соосветственно из складской базы в бухгалтерию со всей номенклатурой. Чтоб руками не обрабатывать в бухгалтерии опять все документы, т.е для автоматизации этого процесса, в процедурах
«При открытии» документов ПоступлениеТоваров и РасходнаяНакладная дописал весчи смысл которых такой: При открытии документов он обсчитывает сначала в табличной части, сколько товара по какой ставке и сумме пришло или ушло. Затем удаляет табличную часть и создаёт новую с нужной мне номенклатурой. Сводится соответственно всё к тому что надо открыть документ и нажать кнопку ОК.
2. Суть проблемы:
Так как документов за налоговый период очень много пытаюсь автоматизировать этот процесс написав документ (обработку) смысл которого сводится к тому, что он должен выбрать к примеру документы
(непроведённые) ПоступлениеТоваров в определённом периоде, автоматически открыть их
чтоб вступили изменения описанные в пункте 1, и провести их.
Форма документа:
С даты . по .
Кнопки выполнить и закрыть.
Модуль документа:
Процедура Выполнить()
Перем БИ;
Если Дата1 Предупреждение(«Нельзя обрабатывать документы с датой, более ранней, чем дата запрета редактирования документов!»);
Возврат;
КонецЕсли;
Док = СоздатьОбъект(«Документ»);
Док.ВыбратьДокументы(Дата1,Дата2);
Пока Док.ПолучитьДокумент() = 1 Цикл
Состояние(«Обработка «+Док.ДатаДок);
Если Док.Вид() = «ПоступлениеТоваров» Тогда
Докум = Док.ТекущийДокумент();
ОткрытьФорму(Докум);
Если ОткрытьФорму(Докум) = 1 Тогда
Сообщить («Форма открыта: » + Докум);
Форма.Закрыть();
//Вот сдесь он закрывает у меня форму документа который используется т.е. обработку,
//А НУЖНО ЧТОБ ЗАКРЫЛ И ПРОВЁЛ ДОКУМЕНТ ПОСТУПЛЕНИ ТОВАРОВ .
//Докум.Закрыть();
//Докум.Форма.Закрыть();
глПриПроведении(Докум);
ИначеЕсли ОткрытьФорму(Докум) = 0 Тогда
Сообщить («Форма не открыта . » + Докум);
Конецесли;
Док.Записать();
// СДЕСЬ ОН ПИШЕТ ЧТО ДОКУМЕНТ ЗАБЛОКИРОВАН т.к. ОТКРЫТ .
// КАК ЕГО ЗАКРЫТЬ .
//Если Док.ПометкаУдаления() = 1 Тогда
//Иначе
// Сообщить(«Проведение «+Док);
// Если Док.Провести() = 0 Тогда
// Возврат;
// КонецЕсли;
//КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//________________________________ _____________________________________________
Процеду ра ПриОткрытии()
Дата1 = НачалоПериодаБИ();
Дата2 = КонецПериодаБИ();
КонецПроцедуры
КАК ЗАКРЫТЬ ДОКУМЕНТ ПОСТУПЛЕНИЕ ТОВАРОВ ОТКРЫТЫЙ С ПОМОЩЬЮ ПРОЦЕДУРЫ
«ОткрытьФорму(Текущий документ)» .
ПОЖАЛУЙСТА ПОМОГИТЕ .
«
Как 1с открыть документ закрыться
Профи, подскажите, почему, если один док открывать 1)- он закрывается сразу, а если в цикле перебирать 2)- то все документы норовят открыться и вешаются.
1)ОткрытьФорму(Док, Конт);
.
Конт.Форма.Закрыть();
2)
Пока Док.ПолучитьДокумент()=1 Цикл
ОткрытьФорму(Док, Конт);
.
Конт.Форма.Закрыть();
КонецЦикла;
Настя, а скажи пожалуйста, зачем ты так делаешь?
В некоторых формах не сами реквизиты — а механизмы их получения в зависимости от действий на форме, опять же некоторые функции — а-ля пересчитать что-нить. Пользователю либо все доки вручную перебирать, либо обработать всё программно.
(2) Зачем открывать форму? Что происходит при её открытии?
Но когда перед мордой юзера хлопнет формой сотня доков . юзер придет бить морду программисту .
(4) Нечто не умное сказал .
Мож тебе отдохнуть надо?
(4) а как можно модально открыть несколько доков?
(4)Юзер доков не увидит, мне их обрабатывать. Сейчас попробую модально.
(3) Например галочку в форме поставить, или до процы какой-нить достучаться.
Можно конечно ПриОткрытии() кривить — но тогда конфой туда сюда надо егозить — не всегда возможно.
(7) Галочка на форме — реквизит дока? Как «стучишься» к процедуре?
Колись, девочка, я честно хочу помочь .
И могу!
(4) Модально оно и есть модально. Интересно, а закрытьмодально бывает?
К процедуре через СтрокуДействий стучусь. А как надо?
При установке галочки выполняется какой-нить алгоритм. Соответственно — галочку ставим, Форма.обновить()
(0) Хоть и неясно зачем это все, но смею предположить, что задержку надо делать после Конт.Форма.Закрыть().
Помню еще в 7.5. на тормозном компе пытался программно записать документ и сразу открыть его форму. Так он сволочь не успевал записываться. Пришлось пустой цикл впендюривать — помогло.
(11) Что ж там за алгоритм такой? Что ж там за процедура такой?
Почему их не переписать в той форме, в которой ты цикл свой крутишь?
(13)Алгоритм лазает по всяким глФункциям, глПроцедурам и в своем модуле взаимовызовы. Переписывать всё в обработку?
(12)А в цикле не успевается с открытой формой всё сделать — следующую открывает? Задержку секудную организовывать?
(14) Проблемы твои от лени . :))
Кстати, просто прокрутить цикл для задержки тебе не подойдёт .
Придётся с извращениями делать задержку .
(15)А чьи не от неё? 8)
(16) Мой совет: Перепиши, будет и правильней, и надёжней .
(17) Спасибо за совет. К сожалению не смогу ему последовать. Буду организовывать «задержку с извращениями».
(18) Я и прогнал про «задержку с извращениями» .
Достаточно будет цикла .
(18)Надо организовать задержку цикла с извращениями?
Будем стараться.
Цикла может и достаточно, но так нехочется от извращений отказываться. 8)
(20) А говорила, что лентяйка . :))
Не помогает ни-фига — все доки норовит открыть — с циклами, задержками. Увы мне, увы. Может всё-таки знает кто.
(21) Кто говорила? Ты говорила? (см. 15)
(22) Эх, блин, точно нужна задержка с извратом .
Хоть и нехорошо несколько раз менять мнение, но . :))
(23) Ты ж согласилась :))
(24)Ты сказала,я согласилась.
Каких видов извращений надо придерживаться? Просто минутку подождать не помогает. Всё равно все доки открываются. С задержкой. Дай листинг самого абсурдного извращения. Увести в другую процу? Не помогло.
(25) Я — мужчина! Ты второй раз ошиблась .
А «Увести в другую процу» это как?
Штатными средствами можно только ч/з Форма.ОбработкаОжидания() получить такую задержку .
Тут еще надо подумать, где именно эту задержку впихнуть.
Я бы попробовал в двух местах: после ОткрытьФорму и после Конт.Форма.Закрыть.
ЗЫ. Последний раз на тему задержек так долго общался лет 7 назад )
(26) Ну и что, что ты — мужчина. Сказала, значит сказала.
А в другую процу увести — в смысле позвать её из основной, а ней(другой) чё-нить потворить. Всё равно сначала все доки открывает.
А чем ОбработкаОжидания круче какого-нибудь цикла, кот. минуту крутится?
(27) После ОткрытьФорму надо попробовать, после закрыть точно не помогает.
(27) После ОткрытьФорму() смысла нет . Пока ПриОткрытии() в ней не выполнится продолжаться ничего не будет .
Зависит от того, что в ней написано, конечно .
Мож там свои какие-то обработки ожидания .
ЗЫ: А я 15 лет назад :))
Есть хороший способ посмотреть, поможет ли тут задержка — прокрутить пару циклов построчно в отладчике. Если все будет нормально открываться и закрываться — дело точно в ней
Даже в доке ПриОткрытии() Закрыть() срабатывает после открытия всех доков
Нда, думаю за это время можно было уже ручками все доки подправить )) Надо идти другим путем значит
Всем спасибо за старания.
(28) Упс . Что-то сразу прощёлкал я этот твой пост .
Пока идёт цикл он не дает другим процессам возможности работать . Развести их реально можно только ч/з обработку ожидания .
(35) Спасибо, завтра поковыряюсь с ожиданием. Или действительно придется всё в обработку переносить — это точно варикозка на анус.
(36) >>варикозка на анус.
Грубая ты какая .
Но я почему то именно таких и люблю :))
Странно, но я вечером вчера эту фигню покрутил, так вроде все открывалось и закрывалось.
Док=СоздатьОбъект(«Документ.Приходная»);
Док.ВыбратьДокументы(‘01.01.2004′,’31.01.2004’);
Пока Док.ПолучитьДокумент()=1 Цикл
Конт=0;
ОткрытьФорму(Док.ТекущийДокумент(),Конт);
Сообщить(«Открыт «+ТекстДок(Конт.ТекущийДокумент()));
Конт.Форма.Закрыть();
Сообщить(«ЗАКРЫТ «+ТекстДок(Конт.ТекущийДокумент()));
КонецЦикла;
(38)Не работает, в том смысле, что сначала все доки открывает, потом все по очереди закрывает. Если док-тов не много — всё нормально, иначе 1С вешается из-за обилия открытых форм. Зато появилась идея по периодам доки выбирать -тогда сработает.
Принудительное закрытие электронного документа
При невозможности завершить ЭДО имеется техническая возможность изъять документ из активного документооборота. Для этого необходимо перейти в Текущие дела ЭДО, нажать правой кнопкой мыши на необходимый документ и выполнить команду «Закрыть принудительно».
В появившемся окне необходимо указать причину закрытия документооборота и нажать «Закрыть электронный документооборот». Иные участники обмена не получат уведомлений, свидетельствующих о том, что по данному документу не требуется действий.
Документ будет изъят из Текущих дел ЭДО и помещен в Архив ЭДО с состоянием «Закрыт принудительно».
Причина закрытия документооборота отображается в состоянии ЭДО.
Также причина закрытия доступна для просмотра в журнале действий по ЭДО (Ещё – Журнал действий по ЭДО).
Возможность закрыть документ принудительно имеется на каждой стадии активного документооборота.
Начиная с версии модуля ЭДО 1.9.1, появилась возможность вернуть в обработку закрытые ранее документы. Для этого, в форме просмотра электронного документа, необходимо нажать «Другие действия» и выполнить команду «Вернуть в работу».
Электронный документ станет вновь доступен для обработки, а состояние ЭДО изменится на актуальное.
Ваша проблема решена?
Ваше сообщение отправлено.
Ошибки в программе 1С кассы и способы их решения
1. Ошибка открытия смены на фискальном устройстве 2. Что делать если закончилась кассовая лента? 3. Зависает программа 1С во время открытия кассовой смены 4. Ошибка неверного остатка в ККМ
Доброго времени суток, дорогие коллеги! В данной статье я хотел бы пролить свет на довольно частую проблему: ошибки, которые могут возникать при неправильном закрытии кассовой смены? Вы научитесь определять, на каком именно этапе произошла ошибка и сможете самостоятельно устранить её.
1. Ошибка открытия смены на фискальном устройстве

Рисунок 1 Ошибка открытия смены на фискальном устройстве
Предположим, что когда кассир открывал смену, программа выдала ему сообщение о том, что произошла ошибка открытия смены на фискальном устройстве. Выглядит она следующим образом:

Как решить эту проблему? Для начала необходимо закрыть рабочее место кассира!
Рисунок 2 Закрытие кассовой смены в 1С
На блок-схеме видно, что существует три этапа закрытия смены:
На каждом этапе закрытия кассовой смены может возникнуть ошибка, и нам нужно определить, на каком именно этапе это произошло. Открываем программу с правами администратора, проверяем, как закрылась кассовая смена. Заходим в журнал кассовой смены и обращаем внимание на статус смены – «Закрыта». Проверяем, сформировался ли у нас документ «Отчёт о розничных продажах».
Рисунок 3 Документ «Отчет о розничных продажах»
Далее мы должны проверить, все ли чеки попали в отчет о ручных продажах. У всех чеков стоит статус архивный и привязаны они к одному отчёту розничной продажи. Всё вышеперечисленное свидетельствует о том, что в 1С ошибок не было. Ищем дальше.
Открываем тест драйвера ККТ. Нам нужно там сформировать z-отчет по кассе. Выбираем режим снятие отчета с гашением, включаем устройство, входим в него и снимаем отчет. А в это время на кассе формируется и закрывается z-отчет по кассе с гашением. После этого нужно проверить, как происходит закрытие и открытие кассовой смены. Сначала проверяем под правами администратора: нужно открыть кассовую смену и закрыть ее. Мы это делаем для того, чтобы определить нет ли у нас каких-либо ошибок связи между 1С 8.3 и кассой.
Рисунок 4 Проверка открытия кассовой смены
Все прошло нормально, отчет сформировался нулевой, и теперь программа готова опять работать. Заходим под правами кассира и открываем смену, заходим в РМК – теперь магазин готов к работе.
2. Что делать если закончилась кассовая лента?

Рисунок 5 Открытая кассовая смена

Вторая часто встречающаяся ошибка — это проблема, возникающая при закрытии кассовой смены, когда закончилась кассовая лента. Открываем программу 1С, заходим в «Продажи → Кассовые смены». Проверяем, как показано на рис. 5, что «примерная» кассовая смена осталась открытой. Дальше мы проверяем, сформировался ли документ отчет о розничной продаже. Делается это для того, чтобы определить наши дальнейшие шаги. За сегодня отчет о ручных продажах сформировался. Теперь проверим журнал чеков – мы должны убедиться, что у нас чеки имеют статус «Архивный» и что для каждого чека, который был пробит сегодня, имеется документ «Отчёт о розничной продаже». Как видно на рис. 6, статус «Архивный» стоит, отчёт о розничных продажах привязан к каждому чеку.
Рисунок 6 Правильно привязанные чеки в журнале чеков
Если это всё есть, тогда наше следующее действие — это закрытие кассовой смены. Сначала пробуем закрыть кассовою смену стандартным средством: документом закрытия кассовой смены в 1С. В результате попытки программа выдала ошибку при закрытии смены. Это значит, что на фискальном устройстве кассовая смена закрыта, а у нас в программе она осталась открыта. Для решения этой проблемы мы прибегнем к групповому изменению реквизитов. Открываем обработку, выбираем кассовую смену, которую нужно закрыть, выбираем документ, там, где изменение реквизитов, находим статус, отмечаем, что мы должны поставить закрытие и изменить реквизиты. Теперь открываем журнал кассовой смены проверяем, что статус кассовой смены изменился с открытой на закрытую. Теперь нам нужно проверить, как будут взаимодействовать касса с программой 1С. Открываем кассовую смену и закрываем смены, если у нас и здесь все сделано верно, то ошибок не будет и кассовая смена откроется и закроется.
3. Зависает программа 1С во время открытия кассовой смены

Теперь разберем третью распространенную ошибку. Суть проблемы заключается в том, что программа 1С попросту зависает во время открытия смены. Рабочее место кассира в 1С никак не реагирует на попытки его закрыть. Поэтому чтобы завершить этот процесс, мы с вами открываем диспетчер задач, выбираем задачу и завершаем.
Рисунок 7 Сообщение про ошибку открытия смены на фискальном устройстве

После этого повторно открываем 1С:Предприятие. Для работы кассира нужно открыть кассовую смену – заходим под пользователем «Кассир» и открываем смену. Видим, что программа выдает ошибку – смена не открыта на фискальном устройстве. Рисунок 8 Поиск открытия кассовой смены
В этом случае мы начинаем проверять, где еще может быть открыта кассовая смена. Если в журнале кассовых смен у нас все смены закрыты, проверяем под всеми рабочими местами, как показано на рис. 8.

Рисунок 9 Проверка документа отчета розничных продаж
Все статусы должны быть закрытыми. Далее мы проверяем журнал отчетов розничных продаж: был ли сформирован документ отчёта о розничных продажах за вчерашнее число.
Как видим, за вчерашний день он был сформирован, а за сегодняшнее число – нет. Проверяем еще раз журнал чеков, чтобы убедиться, что там тоже никаких ошибок нет. Наши чеки у нас все должны быть со статусом «Архивные» и с отчётом о розничных продажах. То есть причина зависания 1С не выяснена. Сворачиваем 1С:Предприятие, открываем тест драйвера ККМ. Допустим, мы работаем с ККМ АТОЛ. Находим АТОЛ и идём по пути драйвера торгового оборудования: «Тесты → драйвер ККМ». Открываем его – устройство включено и не дало отработать, поэтому завершаем работу программы 1С. Теперь в программе АТОЛ ставим галочку в поле «Устройство включено», режим работы «Отчет с гашением». Нажимаем «Снять отчет».
Рисунок 10 Настройки тест драйвера ККМ
Тем самым мы закрываем смену на ККТ. Вот и все, кнопка «Снять отчёт» стала активной, закрываем тест драйвер ККМ и выходим. Теперь запускаем программу 1С под кассиром и открываем смену. Заходим в «Регистрация продаж → Рабочее место кассира». Рабочее место кассира открылось, теперь нужно проверить, что продажи корректно отображаются в системе. На рис. 11 показана правильно функционирующая продажа.
Рисунок 11 Продажа при правильном взаимодействии программы 1С и кассы
4. Ошибка неверного остатка в ККМ
При закрытии кассовой смены в 1С должна происходить автоматическая выемка всей суммы. Но иногда, например, из-за плохого интернета два-три “пакета” могут потеряется. Получается, что на фискальнике закрывается выемка, что приводит к ошибке неверного остатка, так как в самом фискальнике сумма меньше чем необходимо для выемки в 1С. В 1С выемка в таком случае не производится, соответственно, если один раз такое произошло, то и в дальнейшие дни автоматическая выемка не произойдёт, если тут же не исправить проблему. Итак, переходим в «Продажи → отчёты про продажам → движение денежных средств ККМ». Что мы видим по движению ДДС по кассам ККМ – показано на рис. 12.
Рисунок 12 Движение денежных средств в программе 1С и кассе
Дальше нужно следить, чтобы в конце дня после закрытия кассовой смены выделенная жёлтым ячейка всегда была пустая. У нас с вами проблема в 2 магазинах, где нужно сделать снятие остатка. Для этого идём в «НСИ → кассы ККМ» и находим интересующий нас магазин. Сразу хочу пояснить, что наш пример мы разбираем на рабочем месте, где нет фискальника. Это очень важно, ведь если вы работаете в системе, где есть фискальник, то у вас будет другая модель, и вы будете вынуждены решать проблему по-другому. В первую очередь нам нужно сделать скриншот, чтобы не забыть данные – они нам еще пригодятся. Это параметры, показанные на рисунке ниже:
Рисунок 13 Работа с выделенными данными при работе с кассой и программой 1С Далее мы с вами переходим в «Ещё» и разрешаем редактирование, как показано на рис. 14.
Рисунок 14 Редактирование данных при работе с кассой и программой 1С После этого ставим в типе кассы «ККМ без подключения оборудования». Далее нужно установить свое рабочее место:
Рисунок 15 Установка нового рабочего места кассира в 1С
Чтобы сделать активацию рабочего места кассира в 1С, Вы должны поставить галочку возле своего рабочего места, после чего записываем и открываем его. Дальше нам нужно у текущего пользователя установить магазин, с которым будем работать. Теперь можно запускать работу от своего лица: переходим в «Продажи → РМК → Управляемый режим». Появится окно с обширным функционалом: 
Рисунок 16 Функционал рабочего места кассира 1С
После мы жмём «Открытие смены» и видим, что нам показывается сумма остатка на текущий момент:

Рисунок 17 Открытие кассовой смены и сумма остатка на текущий момент
Смена открылась, теперь закрываем ее. Выемка прошла успешно.

Рисунок 18 Выемка с нулевым остатком при работе с кассой и программой 1С При повторном формировании ДДС в кассах ККМ появится число с нулевым остатком. В дальнейшем в выбранном магазине всё пойдёт правильно, однако, само собой, за этим нужно периодически следить. Не забываем вернуть кассу, какой она у нас и была раньше. То есть вернуть обратно рабочее место, тип кассы и подключаемое оборудование. И так же поступаем со всеми магазинами, если есть проблема с остатком. Запомнив эту небольшую последовательность действий, вы можете попрощаться с данной ошибкой. Специалист компании «Кодерлайн» Никита Брежицкий
