Доступ к макету из внешней обработки
Чтобы получить макет из самой обработки нужно воспользоваться следующим «хуком»:
1 |
Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("НеПроведенныеРеализации"); |
Жизнь замечательных грибов
Разработки на платформе 1С
Чтобы получить макет из самой обработки нужно воспользоваться следующим «хуком»:
1 |
Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("НеПроведенныеРеализации"); |
Довелось давеча устанавливать и настраивать онлайн кассу Атол 90Ф, проданную одному предпринимателю Ростелекомом.
Описание кассы и функциональные возможности, вполне можно нагуглить, потому начнем сразу с описания боли.
Боль первая: касса оказалась с прошивкой от Февраля 2017 (на момент написания статьи — 1 Августа 2018). Как следствие — зарегистрировать кассу при помощи последних версий драйверов не удается — ругаются на «нет необходимых реквизитов». Пришлось ставить древние драйвера версии 8.14, и регистрировать кассу при помощи их.
Боль вторая: как оказалось, работа онлайн кассы для работы со внешним ПО заблокирована заводским кодом защиты №1. В свое время Атол сначала планировал разрешить работу с ПО, затем передумал по маркетинговым соображениям, затем снова передумал (когда Атол 90Ф сняли с производства) и стал раздавать кода защиты всем желающим, затем снова передумал и стал раздавать коды защиты только через некоторые сервисные центры. Обращение за кодом защиты в Ростелеком ничего не дало — мурыжили и тянули время три дня, в итоге сказали «не умеем, не можем». Пришлось обратиться в сторонний сервисный центр АРТОЛ35 и попросить чтоб дали ключ там. Цена вопроса — 500р. В итоге работа со сторонним ПО (читай с 1С) разблокирована. Для Розницы 2.2 можно ставить или драйвер АТОЛ «С передачей данных», там в списке драйверов АТОЛ90Ф присутствует, или ветку 9х, там нужно выставлять АТОЛ 11Ф.
Боль третья: собственно из-за этой боли возникла как раз боль номер 2. А именно, с клавиатуры самой кассы чеки конечно выбивать можно… Но только со шпаргалкой. Ибо запомнить все последовательности нажатий кнопок для выбивания чека, закрытия — открытия смены, отмены чека и т.п. просто не реально. Интерфейс работы с кассой разрабатывался не для людей. Не знаю для кого.
Попробовал поработать в 1С в конфигураторе и в релизе под Ubuntu 18.4 Давно хотел, да всё собраться не мог. Ну что могу сказать? Сыровато.. Рандомно вылетает конфигуратор с не сохраненной работой. Теряется фокус окон. Иногда не открывается меню. В редакторе конфигуратора иногда курсор становится не видимым. И это спустя сколько лет как работу под Linux озвучили?
Работать конечно можно…. при нужде.
Данную обработку можно использовать как основу для выгрузки списка товаров в интернет магазин. У меня и выгрузка из 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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 |
&НаКлиенте Процедура КатегорииТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ПараметрыПодбора = Новый Структура; ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Истина); ПараметрыПодбора.Вставить("МножественныйВыбор", Истина); ПараметрыПодбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыПодбора, Элементы.КатегорииТовара); КонецПроцедуры &НаСервере Процедура ИтоговаяТаблицаОбработкаВыбораНаСервере(ВыбранноеЗначение) Для Каждого вЗнч Из ВыбранноеЗначение Цикл нстр=объект.КатегорииТовара.Добавить(вЗнч); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура КатегорииТовараОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ИтоговаяТаблицаОбработкаВыбораНаСервере(ВыбранноеЗначение); КонецПроцедуры &НаСервере Процедура ЗаполнитьПриСтартеНаСервере() нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("1127 ")); нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("00-00001342")); нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("1161 ")); нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("1434 ")); нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("1078 ")); нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("00-00001392")); нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("00-00001239")); объект.Склад=Справочники.Склады.НайтиПоНаименованию("Вологда Торговля"); объект.ФайлВыгрузки="c:\temp\export.xml"; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // заполняем при старте ЗаполнитьПриСтартеНаСервере(); КонецПроцедуры &НаСервере Функция СведенияПоНоменклатуре(ЗаписьXML,Номенклатура); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Значение КАК Значение, | НоменклатураДополнительныеРеквизиты.Ссылка.Ссылка КАК Ссылка, | НоменклатураДополнительныеРеквизиты.Свойство.Наименование КАК СвойствоНаименование, | НоменклатураДополнительныеРеквизиты.Свойство.Заголовок КАК СвойствоЗаголовок |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Номенклатура); Результат = Запрос.Выполнить().Выбрать(); пока Результат.Следующий() цикл ЗаписьXML.ЗаписатьНачалоЭлемента("meaning"); ЗаписьXML.ЗаписатьБезОбработки("<name>"+Результат.СвойствоЗаголовок+"</name>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<value>"+Результат.Значение+"</value>"+Символы.ПС); ЗаписьXML.ЗаписатьКонецЭлемента(); конеццикла; КонецФункции &НаСервере Функция СведенияПоЦенамНоменклатуры(ЗаписьXML,Номенклатура); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены, | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних |ГДЕ | ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Результат = Запрос.Выполнить().Выбрать(); пока Результат.Следующий() цикл ЗаписьXML.ЗаписатьНачалоЭлемента("price"); ЗаписьXML.ЗаписатьБезОбработки("<type>"+Результат.ВидЦены+"</type>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<cost>"+Формат(Результат.Цена,"ЧГ=")+"</cost>"+Символы.ПС); ЗаписьXML.ЗаписатьКонецЭлемента(); конеццикла; КонецФункции &НаСервере Функция СведенияПоКомплектующим(ЗаписьXML,Номенклатура); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КомплектующиеНоменклатуры.Комплектующая.Наименование КАК КомплектующаяНаименование, | КомплектующиеНоменклатуры.Комплектующая.Код КАК КомплектующаяКод |ИЗ | РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры |ГДЕ | КомплектующиеНоменклатуры.Номенклатура = &Номенклатура"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Результат = Запрос.Выполнить().Выбрать(); пока Результат.Следующий() цикл ЗаписьXML.ЗаписатьНачалоЭлемента("order"); ЗаписьXML.ЗаписатьБезОбработки("<name>"+Результат.КомплектующаяНаименование+"</name>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<code>"+Результат.КомплектующаяКод+"</code>"+Символы.ПС); ЗаписьXML.ЗаписатьКонецЭлемента(); конеццикла; КонецФункции &НаСервере Функция Фотографии(ЗаписьXML,Номенклатура); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураПрисоединенныеФайлы.Ссылка КАК Ссылка, | НоменклатураПрисоединенныеФайлы.ПутьКФайлу КАК ПутьКФайлу, | НоменклатураПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, | НоменклатураПрисоединенныеФайлы.Том КАК Том, | НоменклатураПрисоединенныеФайлы.ФайлХранилище КАК ФайлХранилище |ИЗ | Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы |ГДЕ | НоменклатураПрисоединенныеФайлы.ВладелецФайла.Ссылка = &ном" ; Запрос.УстановитьПараметр("ном", Номенклатура); файлы=Запрос.Выполнить().Выбрать(); n=0; Пока файлы.Следующий() Цикл ЗаписьXML.ЗаписатьБезОбработки("<name>"+файлы.ПутьКФайлу+"</name>"+Символы.ПС); конеццикла; КонецФункции &НаСервере Функция ЗаменитьСпецСимволы(_стр) стр=СтрЗаменить(_стр, "&", "&"); стр=СтрЗаменить(стр, """", """); стр=СтрЗаменить(стр, "<", "<"); стр=СтрЗаменить(стр, ">", ">"); стр=СтрЗаменить(стр, "‘", "'"); Возврат стр; КонецФункции &НаСервере Функция СоздатьXMLНаСервере() ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(объект.ФайлВыгрузки,"UTF-8"); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("export"); для каждого ГруппаНоменклатуры из объект.КатегорииТовара цикл Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток, | ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот КАК КоличествоОборот, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Родитель.Ссылка КАК НоменклатураРодитель, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ПометкаУдаления КАК НоменклатураПометкаУдаления, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Описание КАК НоменклатураОписание, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Марка.Наименование КАК НоменклатураМаркаНаименование |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты |ГДЕ | ТоварыНаСкладахОстаткиИОбороты.Склад = &Склад | И ТоварыНаСкладахОстаткиИОбороты.Номенклатура В ИЕРАРХИИ(&Номенклатура) | И ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот > 0 | И ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЭтоГруппа = ЛОЖЬ"; Запрос.УстановитьПараметр("Склад", объект.Склад); Запрос.УстановитьПараметр("Номенклатура", Справочники.Номенклатура.НайтиПоНаименованию(ГруппаНоменклатуры)); Результат = Запрос.Выполнить().Выбрать(); пока Результат.Следующий() цикл ЗаписьXML.ЗаписатьНачалоЭлемента("goods"); ЗаписьXML.ЗаписатьБезОбработки("<good_cat>"+ГруппаНоменклатуры+"</good_cat>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<good_name>"+Результат.Номенклатура.Наименование+"</good_name>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<good_code>"+Результат.Номенклатура.Код+"</good_code>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<good_art>"+Результат.Номенклатура.Артикул+"</good_art>"+Символы.ПС); описание=ЗаменитьСпецСимволы(Результат.НоменклатураОписание); ЗаписьXML.ЗаписатьБезОбработки("<good_comment>"+описание+"</good_comment>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<is_delete>"+Результат.НоменклатураПометкаУдаления+"</is_delete>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<good_parent_name>"+Результат.НоменклатураРодитель.Наименование+"</good_parent_name>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<good_parent_code>"+Результат.НоменклатураРодитель.Код+"</good_parent_code>"+Символы.ПС); ЗаписьXML.ЗаписатьБезОбработки("<count>"+Результат.КоличествоКонечныйОстаток+"</count>"+Символы.ПС); ЗаписьXML.ЗаписатьНачалоЭлемента("prices"); СведенияПоЦенамНоменклатуры(ЗаписьXML,Результат.Номенклатура); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("propety"); СведенияПоНоменклатуре(ЗаписьXML,Результат.Номенклатура); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("soorders"); СведенияПоКомплектующим(ЗаписьXML,Результат.Номенклатура); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("photos"); Фотографии(ЗаписьXML,Результат.Номенклатура); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьКонецЭлемента(); конеццикла; конеццикла; ЗаписьXML.ЗаписатьКонецЭлемента(); //возврат ЗаписьXML; КонецФункции &НаКлиенте Процедура СоздатьXML(Команда) СоздатьXMLНаСервере(); КонецПроцедуры |
Казалось бы простой вопрос, а гуглить пришлось чтобы сделать примерно то что мне нужно порядка часа.
Создаем реквизит с типом «Список значений»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
&НаКлиенте Процедура КатегорииТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ПараметрыПодбора = Новый Структура; ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Истина); ПараметрыПодбора.Вставить("МножественныйВыбор", Истина); ПараметрыПодбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыПодбора, Элементы.КатегорииТовара); КонецПроцедуры &НаСервере Процедура ИтоговаяТаблицаОбработкаВыбораНаСервере(ВыбранноеЗначение) Для Каждого вЗнч Из ВыбранноеЗначение Цикл нстр=объект.КатегорииТовара.Добавить(вЗнч); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура КатегорииТовараОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ИтоговаяТаблицаОбработкаВыбораНаСервере(ВыбранноеЗначение); КонецПроцедуры |
Результат: