Имя: Пароль:
1C
1C 7.7
v7: Ввести на основании
,
0 Yasher56
 
09.07.18
12:59
Имеется ТиС 9.2.
В ней необходимо реализовать печать чека из документа реализации. В конфигураторе ставлю галку на является основанием для чекККМ.
При попытке вывести на основании реализации чекККМ выводит
Касса       = ДокументОснование.Касса;
{Документ.ЧекККМ.Форма.Модуль(879)}: Поле агрегатного объекта не обнаружено (Касса).
Куда закопаться?
1 Salimbek
 
09.07.18
13:01
(0) Можешь начать с Документ.ЧекККМ.Форма.Модуль(879)
2 Cool_Profi
 
09.07.18
13:02
Я буду неоргинальным, но в отладчик.... Наверное, у тебя у тебя в реалициии нет кассы...Или, что очень страннно -  в чеке нет кассы....
Посмотри на Документ.ЧекККМ.Форма.Модуль(879)
3 uno-group
 
09.07.18
13:03
Обратиться к программисту.
4 Yasher56
 
09.07.18
13:07
(3) из своего кармана платить заставят))
5 Yasher56
 
09.07.18
13:08
(1) ////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
//
//******************************************************************************
// СписаниеОстатковТМЦ(ТаблНоменклатуры)
//
// Параметры:
//  ТаблНоменклатуры - таблица номенклатуры (должна содержать колонки
//                     1) "Номенклатура"
//                     2) "Количество"
//                     3) "СуммаРуб"  (для розничного склада)
//                     4) "СкидкаРуб" (для розничного склада)
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Проведение списания остатков ТМЦ со склада по регистру "ОстаткиТМЦ"
// без контроля остатков.
//
Процедура СписаниеОстатковТМЦ(ТаблНоменклатуры)
    
    РегОстатки = Регистр.ОстаткиТМЦ;
    
    ТаблНоменклатуры.ВыбратьСтроки();
    Пока ТаблНоменклатуры.ПолучитьСтроку()=1 Цикл                        
        
        ТекНоменклатура = ТаблНоменклатуры.Номенклатура;
        
        Если (ТекНоменклатура.ВидНоменклатуры     = Перечисление.ВидыНоменклатуры.Услуга)
         или (ТекНоменклатура.ВидНоменклатуры     = Перечисление.ВидыНоменклатуры.Работа)
         или (ТаблНоменклатуры.Количество     = 0) Тогда
            Продолжить;
        КонецЕсли;    
        
        // Измерения
        РегОстатки.Фирма            = Фирма;
        РегОстатки.Склад            = Склад;
        РегОстатки.Номенклатура        = ТекНоменклатура;
        
        // Ресурсы
        РегОстатки.Количество        = ТаблНоменклатуры.Количество;
        РегОстатки.ЦенаПрод         = ТаблНоменклатуры.ЦенаПрод;
        
        // Реквизиты
        РегОстатки.Внутреннее        = 0;
        
        РегОстатки.ДвижениеРасходВыполнить();
        
    КонецЦикла;
    
КонецПроцедуры // СписаниеОстатковТМЦ()

//******************************************************************************
// ПроведениеПоРегистрам(ПараметрПроведения)
//
// Параметры:
//  ПараметрПроведения - строка - может принимать значение "НеКонтролироватьОстаткиТМЦ"
//
// Возвращаемое значение:
//  Нет.
//
// Описание:
//  Проведение по регистрам оперативного учета. В случае если ПараметрПроведения
// равен "НеКонтролироватьОстаткиТМЦ" документ проводится без контроля
// отрицательных остатков ТМЦ.
//
Процедура ПроведениеПоРегистрам(ПараметрПроведения)
    
    Перем ВремРегистры;
    Перем ВремОстаткиТМЦ, ВремРезервыТМЦ;                          
    Перем КодОперации;
    Перем ФирмаДляОстатковТМЦ;
    
    // Удаление движений по регистрам.
    Для Номер = 1 По Метаданные.Регистр() Цикл
        ОчиститьДвижения("Регистр."+Метаданные.Регистр(Номер).Идентификатор);
    КонецЦикла;
       
    ТаблицаУслуг         = СоздатьОбъект("ТаблицаЗначений");
    ТаблицаТМЦ           = глПодготовитьТаблицуДокумента(Контекст,1,ТаблицаУслуг);
    
    КодОперации         = глКО.РозничнаяПродажа;
    
    ФирмаДляОстатковТМЦ = глФирмаДляОстатковТМЦ(Фирма);
    СписокПараметров    = СоздатьОбъект("СписокЗначений");
    
    СписокПараметров.ДобавитьЗначение(ТекущийДокумент(),    "ТекДок");
    СписокПараметров.ДобавитьЗначение(Склад,                "Склад");
    СписокПараметров.ДобавитьЗначение(Фирма,                "Фирма");
    СписокПараметров.ДобавитьЗначение(ФирмаДляОстатковТМЦ,  "ФирмаДляОстатковТМЦ");
    СписокПараметров.ДобавитьЗначение(КодОперации,            "КодОперации");
                                              
    Если ВидОперации = Перечисление.ВидыОперацийЧекККМ.Чек Тогда // продажа
        
        Если ПараметрПроведения = "НеКонтролироватьОстаткиТМЦ" Тогда
            СписаниеОстатковТМЦ(ТаблицаТМЦ);
        Иначе    
            ВремРегистры     = СоздатьОбъект("Регистры");
            ВремОстаткиТМЦ  = ВремРегистры.ОстаткиТМЦ;
            ВремРезервыТМЦ  = ВремРегистры.РезервыТМЦ;
            
            глФильтрОстатковТМЦ(Контекст,ТаблицаТМЦ,СписокПараметров,ВремОстаткиТМЦ,ВремРезервыТМЦ);
            
            Если ИтогиАктуальны()=0 Тогда
                ВремРегистры.Актуальность(1);
                ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент());
            КонецЕсли;
            
            // остатки ТМЦ
            Если глСписаниеОстатковТМЦ    (Контекст,ТаблицаТМЦ,СписокПараметров, ВремОстаткиТМЦ, ВремРезервыТМЦ)=0 Тогда
                Возврат;
            КонецЕсли;                                                        
        КонецЕсли;
        
    Иначе // чек на возврат
        глПриходОстатковТМЦ        (Контекст,ТаблицаТМЦ,СписокПараметров);
    КонецЕсли;
    
    // оприходуем деньги в кассу
    Регистр.Касса.Фирма            = Фирма;
    Регистр.Касса.Касса         = Касса;
    Регистр.Касса.Валюта         = Валюта;
        
    Регистр.Касса.СуммаВал         = Итог("Сумма");
    Регистр.Касса.СуммаУпр         = глПересчет(Итог("Сумма"),Валюта,Курс,глДоллары,ДатаДок,Кратность);
    Регистр.Касса.СуммаРуб         = глПересчет(Итог("Сумма"),Валюта,Курс,глРубли,  ДатаДок,Кратность);
        
    Регистр.Касса.КодОперации     = КодОперации;
        
    Если ВидОперации = Перечисление.ВидыОперацийЧекККМ.Чек Тогда // продажа
        Регистр.Касса.ДвижениеПриходВыполнить();
    Иначе    
        Регистр.Касса.ДвижениеРасходВыполнить();
    КонецЕсли;
        
КонецПроцедуры // ПроведениеПоРегистрам()

////////////////////////////////////////////////////////////////////////////////
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//
//******************************************************************************
// Предопределенная процедура.
//
Процедура ОбработкаПроведения(ПараметрПроведения)
    
    // ПараметрПроведения может принимать значение "НеКонтролироватьОстаткиТМЦ"
    // (например из обработки On_ams.ert - обработки обслуживания ККМ АМС-100Ф,
    //  подключенной в режиме On-Line). В этом случае при проведении текущего
    // документа не выподняется контроль отрицательных остатков ТМЦ.
    
    // Проверка заполненности обязательных реквизитов.
       Если глВсеРеквизитыДокументаЗаполнены(Контекст,
        "Фирма,Склад,Валюта,Касса")=0 Тогда
        Возврат;
    КонецЕсли;              

    НеобходимаяСумма = 0;
    
    СуществуютНезаполенныеСтроки = 0;
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        НеобходимаяСумма = НеобходимаяСумма + Сумма;
        Если ПустоеЗначение(Номенклатура) = 1 Тогда
            Сообщить("В строке " + НомерСтроки + " не выбрана номенклатура!","i");
            СуществуютНезаполенныеСтроки = 1;
        КонецЕсли;
    КонецЦикла;
    
    Если СуществуютНезаполенныеСтроки = 1 Тогда
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
    
    // Проведение по регистрам оперативного учета.    
    Если (ПустоеЗначение(ПараметрПроведения) = 1) или
         (Найти(ПараметрПроведения, "Регистр") <> 0) или
         (ПараметрПроведения = "НеКонтролироватьОстаткиТМЦ") Тогда
        ПроведениеПоРегистрам(ПараметрПроведения);
        
        Если СтатусВозврата() = 0 Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    глПриПроведении(Контекст, ПараметрПроведения);
    
    Если Касса.РежимККМ = Перечисление.РежимыККМ.ФР Тогда
        Если глФРВкл = 0 Тогда
            глНеПроводить(Контекст, "ККМ в режиме фискального регистратора не подключена!");    
//{{MRG[ <-> ]
//         ИначеЕсли (Получено < НеобходимаяСумма) и (Получено<>0) и (ОплатаКартой = 0) Тогда          //тщи если Получено < СуммаЧека, то значит оплата идет по банковской карте
//}}MRG[ <-> ]
//{{MRG[ <-> ]
        ИначеЕсли Получено < НеобходимаяСумма Тогда
//}}MRG[ <-> ]
            глНеПроводить(Контекст, "Полученной суммы недостаточно для оплаты!");    
        ИначеЕсли глФРДляПриемаНаличныхОтЮрЛиц = 1 Тогда
            глНеПроводить(Контекст, "ККМ в режиме фискального регистратора предназначена для приема наличных платежей от юр. лиц!");    
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры //ОбработкаПроведения()

////////////////////////////////////////////////////////////////////////////////
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
6 1Сергей
 
09.07.18
13:09
(5) Ввод на основании делается в форме документа, емнип
7 Yasher56
 
09.07.18
13:10
(6) в форме документа галочки проставлены
8 FIXXXL
 
09.07.18
13:12
(0) тебе Чек как документ в системе нужен? Или только распечатка на основе Реализации?
9 vladko
 
09.07.18
13:13
(7) тебе говорят, что модуль проведения документа не к чему тут постить, заполнение на основании в 7.7 осуществляется в модуле формы.
10 Yasher56
 
09.07.18
13:13
(8) конечно лучше всего добавить документ. а так пойдет как распечатка
11 HK_Mers
 
09.07.18
13:14
(0)В реализации есть реквизит Касса?
12 Yasher56
 
09.07.18
13:19
(11) нет. нужно добавить?
13 Yasher56
 
09.07.18
13:23
(11) после добавления пишет
Неверный вид документа - основания!
14 HK_Mers
 
09.07.18
13:24
(12) даже не знаю что и сказать ... лучше, конечно, к программисту )

простое добавление уберет эту ошибку, но дальше всё равно будут вопросы. к тому же в данном случае добавить реквизит - самый плохой вариант
15 HK_Mers
 
09.07.18
13:25
(13) значит не все галочки проставил

конфигурация измененная?
сколько касс используется?
16 Yasher56
 
09.07.18
13:26
(15) в конфигурацию подгружена обработка для онлайн касс с инфостарта. купленная за мои финансы. в остальном она типовая.
17 Diman_Kr
 
09.07.18
13:30
Без программиста вряд-ли взлетит!
18 HK_Mers
 
09.07.18
13:30
(16) "обработка для онлайн касс с инфостарта. купленная за мои финансы." (с)
т.е. это нормально у вас на предприятии?

p.s. хотя и не такое ещё встречала.
19 Yasher56
 
09.07.18
13:31
(18) да, нормально)) Вот и сижу ломаю голову
20 Масянька
 
09.07.18
13:31
(13) Процедура СделатьЧек()
    
    // делаем сам чек
    ДокЧек = СоздатьОбъект("Документ.ЧекККМ");
    
    ДокЧек.Новый();
    ДокЧек.Склад         = Склад;
    ДокЧек.Касса         = Константа.КассаККМ;
    ДокЧек.Валюта         = Валюта;
    ДокЧек.Курс         = Курс;
    ДокЧек.Кратность     = Кратность;
    ДокЧек.Получено     = Итог("Сумма");
    ДокЧек.ВидОперации     = Перечисление.ВидыОперацийЧекККМ.Чек;
    ДокЧек.ДокОснование    = ТекущийДокумент();
    ДокЧек.Автор         = Автор;
    ДокЧек.Проект         = Проект;
    ДокЧек.Фирма         = Фирма;
    ДокЧек.ЮрЛицо         = Фирма.ЮрЛицо;

    ВыбратьСтроки();
    Пока (ПолучитьСтроку() = 1) Цикл
        ДокЧек.НоваяСтрока();
        ДокЧек.Номенклатура    = Номенклатура;
        ДокЧек.Количество     = Количество;
        ДокЧек.Единица         = Единица;
        ДокЧек.Коэффициент     = Коэффициент;
        ДокЧек.Цена         = Цена;
        ДокЧек.Сумма         = Сумма;
    КонецЦикла;

    ДокЧек.Записать();
    ДокЧек.Провести();

    // печатаем чек на ККМ
    Конт = "Пробить_чек";

    ОткрытьФорму(ДокЧек.ТекущийДокумент(), Конт);

    //Конт.ПробитьЧекНаККМ();
    //Конт.Форма.Закрыть();
    
КонецПроцедуры // СделатьЧек

Но - полностью поддержу предыдущих оратор - позовите спеца. А учитесь - на кошках.
21 Масянька
 
09.07.18
13:32
(16) Обработка - взята типовая (Equip), слегка отрихтована напильником. Совсем слегка.
22 Yasher56
 
09.07.18
13:33
(20) получается сделать кнопку, которая будет ссылаться на этот код?
23 Масянька
 
09.07.18
13:34
(22) Лучше на инфузориях... Хотя, блин, и их жалко...
Во - на тараканах!
24 HK_Mers
 
09.07.18
13:35
(20) теперь ему ещё придется объяснить куда вставить эту процедуру.
а он на основании пытается делать. логичнее в чеке править Ввод на основании
25 Злопчинский
 
09.07.18
13:35
Если виктуановская обработка то там есть подробнейшая инструкция как и что делать.
Если чек нужен для реального поступления денег в кассу или из кассы, то на основании реализации оформляется пко или рко и кассовый чек бьётся из пко или рко.

Если бабло не поступает то никакого реквизита касса не нужно.

Птгтняйте тараканов в голове
26 Злопчинский
 
09.07.18
13:36
(18) а что здесь ненормального?
Вполне рядовая нормальная ситуация.
27 Duke1C
 
09.07.18
13:36
(16) Ну смотря какую купил, если вот эту: http://catalog.mista.ru/public/603118/ (не реклама), то там есть механизм для печати чека как внешней печатной формы, и никакой огород городить не нужно

А вообще подход из (0) полностью неправильный. Мало того, что конфигурацию перепахать нужно будет, так еще и товар будет списываться 2 раза: и Реализацией и Чеком (ну разве что Реализацию потом распроводить, что тоже геморройно)

Штатно нужно делать ПКО на основании Реализации и оттуда бить чек
28 Cool_Profi
 
09.07.18
13:37
(23) Ну, тараканов тебе не занимать...
29 Масянька
 
09.07.18
13:38
(28) Завидуй мовчки.
30 Масянька
 
09.07.18
13:40
(25) (27) В принципе - без разницы. Только есть нюансы (вслух не скажу).
И отменить движения чека - религия запрещает?
31 Yasher56
 
09.07.18
13:41
(27) в общем так как ламер в 1с 7.7, как эту обработку и впилил. Чеки печатает. все хорошо. но у нас есть оплата по терминалу. он к компу не подключен. соответственно списывается товар, но чек нужно отправить. вот и думаю как из реализации распечатать чек с пометкой оплата картой.
32 Yasher56
 
09.07.18
13:49
(27) подключил внешнюю печатную форму. чек вышел все хорошо.
единственное пишет: Не удалось записать в документ реквизиты чека ККМ: Объект заблокирован: Реализация  К000002608 (09.07.18)
Можно это как нибудь убрать?
33 Cool_Profi
 
09.07.18
13:51
(29) Да мне своих хватает, чему завидовать?
34 Kigo_Kigo
 
09.07.18
14:05
Да возмите вы функция из чека
Функция ПробитьЧекНаККМ()

перетащите в реализацию, повесте ее на кнопку - пробить чек, и бейте чеки сколько влезет без документа ЧекККМ
35 Duke1C
 
09.07.18
14:09
(32) Видимо добавил принудительно реквизит НомерЧекаККМ в шапку Реализации, поэтому и пишет.
Убери его, номер чека будет писАться в комментарий документа
36 Duke1C
 
09.07.18
14:12
+35 Это если мы говорим о разработке указанной мной в (27)
37 Yasher56
 
09.07.18
14:15
(35) в реквизитах в реализации нет номера чека ккм
38 Duke1C
 
09.07.18
14:21
(37) Тогда наоборот попробуй добавить:)
Помню у одного клиента выскакивало такое, не помню как решил. У меня все клиенты работают штатно, через ВПФ только один
39 Duke1C
 
09.07.18
14:24
+38 версия обработки, кстати какая, может просто обновить надо
40 Yasher56
 
09.07.18
14:27
(39) версия 2.6.2. Понял причину почему выскакивает. Если документ сначала провели, а потом печатаем чек, то модуль чека пытается в документ добавить свой номер, а документ открыт и не позволяет перепровести его. если на непроведенном документе делать печать чека. то никакой ошибки не выскакивает.
Есть возможность убрать добавление реквизита?
41 Cthulhu
 
09.07.18
14:58
Если Метаданные.Документ(Вид()).РеквизитШапки("ДокументОснование").Выбран()<>0 Тогда
    Если ТипЗначения(ДокументОснование)=12 Тогда
        Если ДокументОснование.Выбран()<>0 Тогда
            Если Метаданные.Документ(ДокументОснование(Вид()).РеквизитШапки("Касса").Выбран()<>0 Тогда
                Касса=ДокументОснование.Касса;    // только про тип+вид не забыть - а то может и не прописать
            Иначе Сообщить("Документ """+ДокументОснование
            +""" - не имеет реквизита ""Касса"" из которого вы пытаетесь что-то вытянуть!..","!!!") КонецЕсли;
        Иначе Сообщить("Реквизит """+ДокументОснование+""" - пустой, вытянуть ничего не получится!..","!!!") КонецЕсли;
    ИначеЕсли ТипЗначения(ДокументОснование)=11 Тогда    // экзотика, конечно, но в принципе возможно:
        Если ДокументОснование.Выбран()<>0 Тогда
            Если Метаданные.Справочник(ДокументОснование(Вид()).Реквизит("Касса").Выбран()<>0 Тогда
                Касса=ДокументОснование.Касса;    // только про тип+вид не забыть - а то может и не прописать
            Иначе Сообщить("Справочник """+ДокументОснование
            +""" - не имеет реквизита ""Касса"" из которого вы пытаетесь что-то вытянуть!..","!!!") КонецЕсли;
        Иначе Сообщить("Реквизит """+ДокументОснование+""" - пустой, вытянуть ничего не получится!..","!!!") КонецЕсли;
    Иначе Сообщить("Реквизит """+ДокументОснование
    +""" - не Документ и не Справочник, хз как и что вы из него вытягивать собираетесь!..","!!!") КонецЕсли;
Иначе Сообщить("Документ вида """+ПредставлениеВида()
+""" - не имеет реквизита ""ДокументОснование"" из которого вы пытаетесь вытянуть Кассу!..","!!!") КонецЕсли;
Основная теорема систематики: Новые системы плодят новые проблемы.