Выделите мышью черный прямоугольник и прочтете ответ.
Пожалуйста, перед тем как читать ответ, напишите в комментарии Вашу версию ответа, или если нет вариантов, то напишите что небыло вариантов.
Будущее |
Выделите мышью черный прямоугольник и прочтете ответ.
Пожалуйста, перед тем как читать ответ, напишите в комментарии Вашу версию ответа, или если нет вариантов, то напишите что небыло вариантов.
Будущее |
Возникает при переходе на версию 1С:Предприятие 8.3 (8.3.16…)
Решается достаточно жестоким способом. Добавляете любой реквизит в один из планов видов расчета:
После добавления реквизита в следующий план расчетов пробуем обновить базу (F7).
На каком то из регистров база обновится. В некоторых случаях с одного плана расчетов получается, в некоторых нужно в 2-3 добавить реквизит, иногда во все, что есть. Но перечисленные, это те, которых бывает достаточно в 95% случаев.
Далее, когда база успешно обновилась, удаляем ненужные реквизиты, и обновляем (F7) снова. Вуаля! И база обновляется нормально!
Эта статья является продолжением статьи:
1C 8 асинхронная загрузка с веб-клиента без установки расширения для работы с файлами
Происходит без установки дополнительных плагинов и компонентов работы с файлами. Используется так-же новая возможность 1С открывать эксель-файлы своими методами.
Кроме того, мы рассмотрим, как в асинхронном режиме на веб-клиенте, при запрете модальных окон, отображать диалог «Вопрос» и «Предупреждение».
Это продолжение публикации http://www.it.homeclub.top/?p=734 про асинхронну загрузку на сервер.
В конфигурацию добавляем перечисление «СпособыОткрытияФайлов» и регистр сведений «СпособыОткрытияФайлов», как показано на картинке.
Измерение ТипДанныхОтображения имеет тип «Строка (10)».
Ресурс «СпособОткрытияФайла» имеет тип перечисления «СпособыОткрытияФайлов».
Теперь заполним регистр, чтобы указать нашей программе, какие из типов файлов каким способом открывать. Если какой-либо из типов не указан, программа будет выдавать предупреждение, что открыть этот тип файла 1С не может.
Естественно, не забудьте добавить перечисление и регистр в подсистему «Основная»
Далее, при нажатии в форме регистра «ФайловоеХранилище» кнопки «Показать файл» задается вопрос:
Если нажимается «Показать», то 1С пытается отобразить файл своим способом.
Если тип файла не зарегистрирован в регистре «СпособыОткрытияФайлов», то будет выдано предупреждение:
Если же выбирается «Сохранить», то открывается стандартный диалог открытия файла, и файл скачивается методами используемого браузера.
Заметьте, указанный способ абсолютно кросс-платформенный и кросс-браузерный.
Прилагаю видео, поясняющее пример:
Прилагаю код модуля регистрасведений «ФайловоеХранилище», который отображает средствами 1С, или скачивает файл асинхронно на веб-клиент.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
&НаСервере функция ПоказатьФайлНаСервере(текДан) перем табДок, СпособОткрытияФайла; менеджерзаписи = РегистрыСведений.ФайловоеХранилище.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(менеджерзаписи,текДан); менеджерзаписи.Прочитать(); Если менеджерзаписи.Выбран() тогда тз = "ВЫБРАТЬ | СпособыОткрытияФайлов.ТипДанныхОтображения КАК ТипДанныхОтображения, | СпособыОткрытияФайлов.СпособОткрытияФайла КАК СпособОткрытияФайла |ИЗ | РегистрСведений.СпособыОткрытияФайлов КАК СпособыОткрытияФайлов |ГДЕ | СпособыОткрытияФайлов.ТипДанныхОтображения ПОДОБНО &ТипДанныхОтображения" ; з = новый запрос (тз); з.УстановитьПараметр("ТипДанныхОтображения",менеджерзаписи.РасширениеФайла); рез = з.Выполнить(); Если не рез.Пустой() тогда выборка = рез.Выбрать(); выборка.Следующий(); СпособОткрытияФайла = выборка.СпособОткрытияФайла; иначе //СпособОткрытияФайла = Перечисления.СпособыОткрытияФайлов.КакТаблица возврат неопределено; КонецЕсли; Если СпособОткрытияФайла = Перечисления.СпособыОткрытияФайлов.КакТаблица тогда табДок = новый ТабличныйДокумент; иначе табДок = новый ТекстовыйДокумент; КонецЕсли; текДанныеФайла = менеджерзаписи.ЗагруженныеДанные.Получить(); имяВрем = ПолучитьИмяВременногоФайла(менеджерзаписи.РасширениеФайла); текДанныеФайла.Записать(имяВрем); табДок.Прочитать(имяВрем); табДок.ИспользуемоеИмяФайла = менеджерзаписи.ИмяФайла; возврат табДок; КонецЕсли; возврат неопределено; КонецФункции &НаКлиенте Процедура ПоказатьФайл(Команда) текДан = Элементы.Список.ТекущаяСтрока; текДанные = Элементы.Список.ТекущиеДанные; если текДан<>неопределено тогда ДанныеФайла = получитьФайлИстории(текДан); Если ДанныеФайла <> Неопределено тогда списокКнопокВопроса = новый СписокЗначений (); списокКнопокВопроса.Добавить("Показать","Показать"); списокКнопокВопроса.Добавить("Скачать","Скачать"); списокКнопокВопроса.Добавить("Отмена","Отмена"); оповещение = новый ОписаниеОповещения ("ОбработатьОтветНаВопрос",ЭтотОбъект,ДанныеФайла); ПоказатьВопрос(оповещение,"Выберите действие",списокКнопокВопроса,30,"Показать","Что хотите сделать?","Отмена"); иначе ПоказатьПредупреждение(,"данные не найдены"); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте процедура ОбработатьОтветНаВопрос (РезультатВопроса,ДополнительныеПараметры) экспорт текДан = Элементы.Список.ТекущаяСтрока; текДанные = Элементы.Список.ТекущиеДанные; Если РезультатВопроса = "Показать" тогда табДок = ПоказатьФайлНаСервере(текДан); Если табДок<> неопределено тогда табДок.Показать("Наш файл: "+текДанные.ИмяФайла); иначе ПоказатьПредупреждение(,"Невозможно отобразить файл этого типа "+ Строка(текДанные.РасширениеФайла),20); КонецЕсли; ИначеЕсли РезультатВопроса = "Скачать" тогда времХранилище = ПоместитьВоВременноеХранилище(ДополнительныеПараметры,ЭтаФорма.УникальныйИдентификатор); НачатьПолучениеФайлаССервера(времХранилище,текДанные.ИмяФайла); иначе возврат; КонецЕсли; КонецПроцедуры функция получитьФайлИстории (текСтр) мз = РегистрыСведений.ФайловоеХранилище.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(мз,текСтр); мз.Прочитать(); если мз.Выбран() тогда возврат мз.ЗагруженныеДанные.Получить(); иначе возврат неопределено; КонецЕсли; КонецФункции |
Просто публикую пример. Он позволит вам работать с загрузкой файлов на сервер через веб-клиент, не устанавливая дополнений в браузер. То есть, ваша 1С в данном случае становится абсолютно кросс-платформенной. Кажется, данные методы появились в 8.3.9, однако, начиная с 8.3.16 они стали обязательными для работы в веб-клиенте, и модальные окна теперь запрещены в веб-клиенте окончательно, даже если разрешение модальности указано в настройках конфигурации. Так-же приложу видео с пояснениями. Файл в этом примере помещается не в файловую систему, а в базу данных в регистр сведений, который имеет такой вид:
реквизит «ЗагруженныеДанные», имеет тип «ХранилищеЗначения», реквизит «ДатаЗагрузки» — тип «ДатаИВремя», оно же является ключевым полем.
И код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
&НаКлиенте Процедура ЗагрузитьФайл(Команда) перем ссылкаНаФайл,ПутьКФайлу; #Если не ВебКлиент тогда диалог = новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Выберите файл для загрузки"; фильтр = "Файл Эксель 2008 (*.xlsx)|*.xlsx|Файл эксель (xls)|*.xlsx"; диалог.Фильтр = фильтр; диалог.МножественныйВыбор = ложь; если диалог.Выбрать() тогда путьКФайлу = диалог.ПолноеИмяФайла; расширение = диалог.Расширение; иначе возврат; КонецЕсли; #КонецЕсли оповещениеЗавершениеЗагрузки = новый ОписаниеОповещения("ПриЗавершенииЗагрузки",ЭтотОбъект); оповещениеХодЗагрузки = новый ОписаниеОповещения("ХодЗагрузки",ЭтотОбъект); оповещениеНачалоЗагрузки = новый ОписаниеОповещения("ПриНачалеЗагрузки",ЭтотОбъект); НачатьПомещениеФайлаНаСервер(оповещениеЗавершениеЗагрузки,оповещениеХодЗагрузки,оповещениеНачалоЗагрузки,ссылкаНаФайл,ПутьКФайлу,ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры |
Собственно в обычных формах вы бы обошлись одной процедурой, а в управляемых — двумя: вышеуказанной и «поместитьФайл «, которая выполняется на сервере. Но в асинхронном варианте процедур будет немного больше.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
&НаКлиенте процедура ПриЗавершенииЗагрузки ( ОписаниеПомещенногоФайла,ДополнительныеПараметры) Экспорт поместитьФайл (ОписаниеПомещенногоФайла.Адрес,ОписаниеПомещенногоФайла.СсылкаНаФайл.Имя,ОписаниеПомещенногоФайла.СсылкаНаФайл.Расширение); КонецПроцедуры &НаКлиенте процедура ХодЗагрузки (ПомещаемыйФайл,Помещено,ОтказОтПомещенияФайла,ДополнительныеПараметры) Экспорт Состояние("Выполнено "+Строка(Помещено)+"%"); КонецПроцедуры &НаКлиенте процедура ПриНачалеЗагрузки ( ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт КонецПроцедуры &НаСервере процедура поместитьФайл (адрес,имя,расширение) текДанные = ПолучитьИзВременногоХранилища(адрес); менеджерЗаписи = РегистрыСведений.ФайловоеХранилище.СоздатьМенеджерЗаписи(); менеджерЗаписи.ДатаЗагрузки = ТекущаяДата(); менеджерЗаписи.ЗагруженныеДанные = новый ХранилищеЗначения(текДанные); менеджерЗаписи.ИмяФайла = имя; менеджерЗаписи.РасширениеФайла = расширение; менеджерЗаписи.Записать(истина); КонецПроцедуры |
Всего доброго!
Как асинхронно загружать файлы с сервера без установки дополнений в браузер — в следующей статье.
Да, да, да! Наконец-то и до запада докатилась слава об 1С предприятие. Теперь не нужно лезть в код и ковырять worpress плагин для корректной подсветки кода 1С. Только я заметил, не всегда оно автоматически распознает код, поэтому не забудьте после установки настроить язык 1С по-умолчанию в настройках плагина.
Да, этот прекрасный плагин уже умеет подсвечивать код 1С, в Version:1.3 точно. Однако немного ставит в тупик, когда его устанавливаешь, и он вместо ожидаемого «&НаКлиенте» отображает «&НаКлиенте» . Перерыл массу материала по этому поводу, люди лезут перепрограммировать wordpress или существующие функции в теме. Чтобы вы не мучались, держите подсказку в видео. И не забывайте оставить ссылочку на этот сайт в соцсетях или поддержите материально, номера кошельков прилагаются справа. Да да, клянчу деньги.
Поздравляю всех «одинэсников», которые программируют под веб-клиент. Больше вы не сможете вывести модальное окно в браузере, даже если в свойствах конфигурации выбраны соответствующие настройки.
Но это ещё не всё. Вы не сможете вызвать диалог выбора или сохранения файла не веб-клиенте, и даже не сможете вызвать процедуру «УстановитьРасширениеРаботыСФайлами()», потому что она использует модальное окно. Вместо неё следует пользоваться процедурой «НачатьПодключениеРасширенияРаботыСФайлами(оповещение1);
Но это ещё совсем не всё. Оказывается, 1С 8 имеет достаточно методов, чтобы не устанавливать эти расширения. Ну представьте — надо под правами администратора устанавливать расширение как в браузер, так и на компьютер пользователя. А что, если политика фирмы — использовать браузер, для которого нет расширения — например IE или Opera?
Как дальше с этим жить — рассказываю в видеороликах, так как много печатать не люблю.
Итак, имеем платформу 1С 8.2 или 1С 8.3. К примеру, ваши пользователи строго хотят сохранять выведенный табличный документ в эксель, и очень хотят, чтобы при сохранении документа имя файла было уже установлено, так как печатать его очень долго и нудно. И их можно понять. Выглядит это где то так (см. рис)
Решение:
Предположим, у вас на форме имеется табличный документ, и он традиционно называется «Результат». То есть форму в любом случае нужно создать. Далее в событии формы «ПередЗагрузкойВариантаНаСервере(Настройки)» пишем такой текст программы:
1 2 3 4 |
&НаСервере Процедура ПередЗагрузкойВариантаНаСервере(Настройки) Элементы.Результат.ИспользуемоеИмяФайла = "Мой крутой файл"; КонецПроцедуры |
Заметьте, расширение указывать не надо. Оно выбирается в диалоге в поле «Тип файла».
Удачи! Если я сэкономил вам много времени и сил, можете кинуть ссылку за труды на сайт в соцсетях, или пару рублей на вебмани. Реквизиты справа вверху.
1С 8.3, Управление торговым предприятием Украины 1.2
Описание
Неавтоматизированные торговые точки с суммовым учетом (СНТТ) – не ведется учет товаров в разрезе номенклатурных позиций. Отчет о продажах оформляется по упр и регл учетам. В бухучете счет номенклатуры
Факт продажи оформляется док. «Приходный кассовый ордер», вид операции «Прием розничной выручки».
Прием товара может быть выполнен перемещением с другого склада предприятия, либо поступлением от поставщика непосредственно на склад магазина.
Так как на торговой точке скорее всего нет компьютеров или кассовых аппаратов, факт приемка фиксируется копией накладной (ТТН), которая передается в офис, где и вводятся соответствующие документы:
При оформлении поступления или перемещения указывается розничная цена на товар, по которой он будет продаваться. Цена может быть указана как вручную, так и автоматически по установленной ранее торговой наценке для позиции номенклатуры.
Цены розничные для СНТТ можно указывать только в гривнах, соответственно продажа может вестись только в гривнах.
Внимание! В СНТТ вы не увидите товар в привычных отчетах «Ведомость по товарам на складах», «Ведомость по товарам в рознице» или «Ведомость по товарам в НТТ». Независимо от того, получали вы товар на СНТТ непосредственно у поставщика, либо перемещали с другого склада. Весь товар, что отправлен в СНТТ – уходит как в черную дыру. Единственное, что вы увидите, это товар, перемещенный из СНТТ на оптовый склад.
При этом денежные обязательства перед поставщиком, и НДС кредит – возникают, как обычно в случае покупки.
Фиксируется поступление выручки. В конце отчетного периода произвести инвентаризацию. Объем и номенклатура продаж СНТТ зафиксирована не будет.
Если нужно наоборот, передать деньги из кассы предприятия в кассу магазина, оформляется документ Расходный кассовый ордер с видом операции «Выдача денежных средств в кассу ККМ»
Поступление оплат на р/с фиксируется документом «Платежный ордер: поступление денежных средств» с видами операции:
Инвентаризация в СНТТ не работает!
Документ «Инвентаризация товаров на складе» служит как для фиксации реальных остатков и корректировки остатков, так и для фиксации продаж в НТТ.
Для корректировки остатков после ввода документа инвентаризации, на его основании вводятся документы «Оприходование товаров» и «Списание товаров». Сам документ «Инвентаризация товаров на складе» никаких движений по товарам не делает.
Документ «Переоценка товаров в рознице» устанавливает цену товара на торговой точке.
Оформляется документами:
После поступления товаров в СНТТ их количество на складе становится неизвестным. Вы можете только увидеть, сколько поступило товара от поставщика с помощью отчета «Анализ закупок», и сколько товаров было перемещено с помощью отчета «Ведомость товаров на складах».
Внимание: статья не завершена, так как уже выложенные на ютуб ролики из этой статьи оказались весьма не популярными. Поэтому доделывать буду медленно, по возможности. Не люблю выдавать не интересный контент. Но, если вам это интересно, и хотите продолжения, пишите в комментарии здесь, или под роликом. Ваши лайки, просмотры и комментарии — мой стимул выпускать интересные и полезные статьи и ролики.
Куда же подевалось событие «ПриВыводеСтроки» в управляемых формах, и как с этим быть? Убрали его по всей видимости потому, что это был основной источник загруженности сервера. Особенно программисты не очень высокой квалификации любят напихивать в это событие кучу запросов и циклов, которые «бомбят» сервер, при перерисовке каждой строчки, видимой на экране. Так как в управляемых формах клиентское приложение может вообще выполняться на веб-браузере, да ещё с плохим интернетом, такая тактика может привести к тому, что пользователь целый день будет сидеть, тупо уставившись в зависшую 1С.
Поэтому, решив не особо заморачиваться с запретами в коде события, 1С решили вывести основные моменты, связанные с оформлением строк в реквизиты формы, вернее свойства. Это очень похоже на условное оформление в СКД.
Вы нажимаете на шапку формы, заходите в её свойства, и ищете в разделе «Оформление» ссылку «Условное оформление».
Открывается такой же инструментарий, как в СКД для условного оформления
Добавляем новое оформление зеленым плюсом, и нажимаем на три точки, чтобы добавить само оформление. Ото пока что не связано с чем нибудь конкретным. Просто указываем нужный цвет, доступность, штифт и т.д.
Заметьте, в отличии от программной установки параметров в событии «ПриВыводеСтроки», где нужно было делать два варианта оформления — если условие выполнилось, и если условие не выполнилось — чтобы вернуть оформление на место. Здесь этого делать не нужно. Если условие не выполняется, то оформление применяется «по умолчанию», то есть которое вы видите, когда в конфигураторе создаете форму.
Вот какие параметры можно оформлять
Для подавляющего большинства случаев список вполне впечатляет.
Далее пишем условие, нажав на три точки в колонке «Условие»
Вы можете добавлять как группу условий, так и отдельные элементы. Условия между группами всегда «И», так же и между элементами, которые не находятся внутри групп всегда «И»
По сути мы написали условие :
Реквизит1 = 1 И Реквизит2 = 2 ИЛИ (НомерСтроки = 1 ИЛИ НомерСтроки = 3 ИЛИ НомерСтроки=6)
То есть внутри группы условие между отдельными элементами зависит от самой группы.
Мои страдания и разбор «КАК ЭТО РАБОТАЕТ» можете более подробно рассмотреть в этом ролике: