Доброго дня, конфігурація BAS Управління торгівлею. Стоїть завдання, якщо у чеку є акцизні і звичайні товари, то розділяти чек на 2 чеки. Було вибрано наступний варіант, перед тим як чек проводиться, програмно перевіряти на наявність акцизу і програмне створеня 2-х чеків(спочатку пробивається і друкується звичайний чек з всіма товарами, а тоді окремо друкується фіскальний чек з акцизними товарами ). Чек без акцизних товарів створюється і троводиться програмно програмно, а акцизні товари завантажуються в документ об'єкт відкритого документу і він також має пробитися. Код
&НаКлиентеПроцедура ПробитьЧек()
ОчиститьСообщения();
ЕстьОшибки = Ложь;
Если Объект.ПометкаУдаления Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Документ помечен на удаление';uk='Документ позначений на вилучення'"), Объект.Ссылка,,,ЕстьОшибки);
КонецЕсли;
Объект.Дата = ТекущаяДата();
Модифицированность = Истина;
Если ЕстьОшибки ИлиНе ПроверитьЗаполнение() ТогдаВозврат;
КонецЕсли;
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ПробитьЧекПослеПроведения", ЭтотОбъект),
НСтр("ru='Перед выполнением операции пробития чека не удалось провести документ.';uk='Перед виконанням операції пробиття чека не вдалося провести документ.'"));
//++++++++++++++++++++++++++++++++++++++++++++Если ПроверкаСтатуса (ЭтотОбъект.Объект.Статус) Тогда
ЕстьАкциз = Ложь;
СтруктураДопКаси(,,ЭтотОбъект.Объект);
Если ЕстьАкциз Тогда
ВыполнитьДействиеПослеЗаписи(
Новый ОписаниеОповещения("ПробитьЧекПослеПроведения", ЭтотОбъект),
НСтр("ru='Перед выполнением операции пробития чека не удалось провести документ.';uk='Перед виконанням операції пробиття чека не вдалося провести документ.'"));
КонецЕсли;
КонецЕсли;
//++++++++++++++++++++++++++++++++++++++++++++КонецПроцедуры&НаСервереПроцедура СтруктураДопКаси (ЕстьАкциз = Ложь,ДопКаса = Неопределено,ЭтотОбъект)
ДопКаса = ПолучитьДопКасу(ДопКаса);
Структура = ПроверкаНаАкциз(ЭтотОбъект,ЕстьАкциз,ДопКаса);
Если ЕстьАкциз Тогда
ДокументОбъект = ЭтотОбъект.Ссылка.ПолучитьОбъект();
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
ДокументОбъект.Товары.Загрузить(Структура.ТзАкцизных);
ДокументОбъект.КассаККМ = ДопКаса;
ДокументОбъект.Организация = ДопКаса.Владелец;
ДокументОбъект.СуммаДокумента = ДокументОбъект.товары.Итог("Сумма");
ДокументОбъект.Статус = Перечисления.СтатусыЧековККМ.Пробит;
ЗначениеВДанныеФормы(ДокументОбъект, Объект);
Результат = ЗаписатьНаСервере(Истина);
КонецЕсли;
//Попытка // ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);//Исключение//КонецПопытки;КонецПроцедуры&НаСервере Функция ПроверкаНаАкциз(ДокументОбъект, ЕстьАкциз,ДопКасса)Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЧекККМТовары.Ссылка,
| ЧекККМТовары.НомерСтроки,
| ЧекККМТовары.КлючСвязи,
| ЧекККМТовары.Номенклатура,
| ЧекККМТовары.Характеристика,
| ЧекККМТовары.Упаковка,
| ЧекККМТовары.КоличествоУпаковок,
| ЧекККМТовары.Количество,
| ЧекККМТовары.Цена,
| ЧекККМТовары.Сумма,
| ЧекККМТовары.СтавкаНДС,
| ЧекККМТовары.СуммаНДС,
| ЧекККМТовары.ПроцентАвтоматическойСкидки,
| ЧекККМТовары.СуммаАвтоматическойСкидки,
| ЧекККМТовары.ПроцентРучнойСкидки,
| ЧекККМТовары.СуммаРучнойСкидки,
| ЧекККМТовары.СтатусУказанияСерий,
| ЧекККМТовары.Продавец,
| ЧекККМТовары.Помещение,
| ЧекККМТовары.Серия,
| ЧекККМТовары.СуммаБонусныхБалловКСписанию,
| ЧекККМТовары.СуммаБонусныхБалловКСписаниюВВалюте,
| ЧекККМТовары.СуммаНачисленныхБонусныхБалловВВалюте,
| ЧекККМТовары.НоменклатураНабора,
| ЧекККМТовары.ХарактеристикаНабора,
| ЧекККМТовары.Штрихкод,
| ЧекККМТовары.ИдентификаторСтроки
|ИЗ
| Документ.ЧекККМ.Товары КАК ЧекККМТовары
|ГДЕ
| ЧекККМТовары.Номенклатура.ПодакцизныйТовар = ЛОЖЬ
| И ЧекККМТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокументОбъект.Ссылка);
ТзБезАкцизных = Запрос.Выполнить().Выгрузить();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЧекККМТовары.Ссылка,
| ЧекККМТовары.НомерСтроки,
| ЧекККМТовары.КлючСвязи,
| ЧекККМТовары.Номенклатура,
| ЧекККМТовары.Характеристика,
| ЧекККМТовары.Упаковка,
| ЧекККМТовары.КоличествоУпаковок,
| ЧекККМТовары.Количество,
| ЧекККМТовары.Цена,
| ЧекККМТовары.Сумма,
| ЧекККМТовары.СтавкаНДС,
| ЧекККМТовары.СуммаНДС,
| ЧекККМТовары.ПроцентАвтоматическойСкидки,
| ЧекККМТовары.СуммаАвтоматическойСкидки,
| ЧекККМТовары.ПроцентРучнойСкидки,
| ЧекККМТовары.СуммаРучнойСкидки,
| ЧекККМТовары.СтатусУказанияСерий,
| ЧекККМТовары.Продавец,
| ЧекККМТовары.Помещение,
| ЧекККМТовары.Серия,
| ЧекККМТовары.СуммаБонусныхБалловКСписанию,
| ЧекККМТовары.СуммаБонусныхБалловКСписаниюВВалюте,
| ЧекККМТовары.СуммаНачисленныхБонусныхБалловВВалюте,
| ЧекККМТовары.НоменклатураНабора,
| ЧекККМТовары.ХарактеристикаНабора,
| ЧекККМТовары.Штрихкод,
| ЧекККМТовары.ИдентификаторСтроки
|ИЗ
| Документ.ЧекККМ.Товары КАК ЧекККМТовары
|ГДЕ
| ЧекККМТовары.Номенклатура.ПодакцизныйТовар = Истина
| И ЧекККМТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокументОбъект.Ссылка);
ТзАкцизных = Запрос.Выполнить().Выгрузить();
Если ТзАкцизных.Количество() = 0Тогда
ЕстьАкциз = Ложь;
Возврат ЕстьАкциз = Ложь;
ИначеЕсли ТзБезАкцизных.Количество() <> 0Тогда
НовыйДок = ДокументОбъект.Ссылка.Скопировать();
НовыйДок.товары.Загрузить(ТзБезАкцизных);
НовыйДок.Дата = ДокументОбъект.Дата;
НовыйДок.СуммаДокумента = НовыйДок.товары.Итог("Сумма");
НовыйДок.Статус = Перечисления.СтатусыЧековККМ.Пробит;
НовыйДок.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
ЕстьАкциз = Истина;
КонецЕсли;
Структура = Новый структура;
Структура.Вставить("ТзБезАкцизных",ТзБезАкцизных);
Структура.Вставить("ТзАкцизных",ТзАкцизных);
Структура.Вставить("ДопКасса",ДопКасса);
Структура.Вставить("ЕстьАкциз",ЕстьАкциз);
Возврат Структура;
КонецФункции
Після цього з'являється помилка "неможливо змінювати поле яке містить об'єкт даних форми"!!! В чрму може бути причина, або порадьте інший варіант вирішення завдання(цей варіант працював в звичайних формах...).
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!