Имя: Пароль:
1C
1С v8
УТ 11.4 и ЕГАИС
,
0 geminisf
 
12.06.20
13:10
Доброго всем дня. Можно ли использовать встроенные возможности УТ 11.4 для работы с ЕГАИС в опте? Поделитесь, пожалуйста, у кого есть опыт. Смущает, что учет алкогольной продукции включается в разделе "Розница". Вдруг есть какие-то особенности.
1 H A D G E H O G s
 
12.06.20
13:16
Можно.
Но будет весело.
2 Маленький Вопросик
 
12.06.20
13:54
у меня есть опыт написания запросов к егаис без каких либо конфигураций - все работает
3 ДедМорроз
 
12.06.20
14:35
А чем опт отличается от розницы?
Тем,что розничных продаж нету,а накладные принимать и отправлять УТ умеет.
В принципе,там даже коробки есть.
Другое дело,как там остатки хранятся.
4 geminisf
 
12.06.20
16:09
(1) Вот и хотелось бы про эти "веселости" заранее узнать и понять можно ли ими воспользоваться или опять писать своё.
(2) Да запросы и я писать умею. Хочется понять стоит ли писать, если всё уже есть.
(3) Остатки хранятся в регистре "ОстаткиАлкогольнойПродукцииЕГАИС"
5 H A D G E H O G s
 
12.06.20
16:15
(4) Чтобы было понимание, вот примерная процедура загрузки марок в ТТН ЕГАИС

Функция ЗагрузитьАкцизныеМаркиВДокумент(ДокументСМарками, ТаблицаРезультатаСканирования, ТаблицаОтсутствующихПозиций = Неопределено, ВариантОбработкиРасхождений = Неопределено)
    
    СтруктураВозврата = Новый Структура;
    СтруктураВозврата.Вставить("Результат", Истина);
    СтруктураВозврата.Вставить("ОписаниеОшибки", "");
    СоответствиеСтрокТоваров = Новый Соответствие;
    
    Если ТаблицаРезультатаСканирования.Колонки.Найти("РежимСканирования") <> Неопределено Тогда
        ТаблицаРезультатаСканированияНаОбработку = ТаблицаРезультатаСканирования.Скопировать();
        МассивРежимовИсключения = Новый Массив;
        МассивРежимовИсключения.Добавить(4);
        МассивРежимовИсключения.Добавить(5);
        СтрокиНаУдаление = Новый Массив;
        Для Каждого СтрокаНаПроверку Из ТаблицаРезультатаСканированияНаОбработку Цикл
            Если МассивРежимовИсключения.Найти(СтрокаНаПроверку.РежимСканирования) <> Неопределено Тогда
                СтрокиНаУдаление.Добавить(СтрокаНаПроверку);        
            КонецЕсли;
        КонецЦикла;
        Для Каждого СтрокаНаУдаление Из СтрокиНаУдаление Цикл
            ТаблицаРезультатаСканированияНаОбработку.Удалить(СтрокаНаУдаление);        
        КонецЦикла;
    Иначе
        ТаблицаРезультатаСканированияНаОбработку = ТаблицаРезультатаСканирования;
    КонецЕсли;
    
    Если АСФОбщегоНазначения.ЭтоСсылка(ДокументСМарками) Тогда
        ДокументДвиженияМарок = ДокументСМарками.ПолучитьОбъект();
    Иначе
        ДокументДвиженияМарок = ДокументСМарками;
    КонецЕсли;
    
    ТипДокументаСМарками = ТипЗнч(ДокументСМарками);

    ИмяКолонкиПоиска = "АСФИдентификаторСтроки";
    Если АСФОбщегоНазначенияКлиентСервер.ЭтоКонфигурация1ССМодулемПроизводстваКТ2000()
        И (ТипДокументаСМарками = Тип("ДокументСсылка.алкОтчетОбИмпортеПродукцииЕГАИС") Или ТипДокументаСМарками = Тип("ДокументСсылка.алкОтчетОПроизводствеПродукцииЕГАИС")) Тогда
        ИмяКолонкиПоиска = "ИдентификаторСтроки";
    ИначеЕсли АСФОбщегоНазначенияКлиентСервер.ЭтоКонфигурация1ССМодулемПроизводстваКТ2000()
        И ТипДокументаСМарками = Тип("ДокументСсылка.ТТНИсходящаяЕГАИС") тогда
        ИмяКолонкиПоиска = "НомерСтроки";
    КонецЕсли;
    
    ЭтоУчетныйДокумент = АСФОбщегоНазначенияКлиентСервер.ЭтоДокументУчета(ТипДокументаСМарками);
    Если ЭтоУчетныйДокумент Тогда
        ИсточникМарок = РегистрыСведений.АСФМаркиУпаковкиУчетныхДокументов.СоздатьНаборЗаписей().ВыгрузитьКолонки();
    Иначе
        ИсточникМарок = ДокументДвиженияМарок.АкцизныеМарки;
    КонецЕсли;
    ИсточникМарок.Очистить();
    
    // Элементы типового справочника ШтрихкодыУпаковокТоваров и их иерархия рождаются именно здесь.
    СоответствиеШтрихкодовМарокУпаковок = АСФПодсистемаТСД1С.ПолучитьШтрихкодыМарокУпаковок(ТаблицаРезультатаСканированияНаОбработку, Истина,, ДокументДвиженияМарок.Дата);
    Если СоответствиеШтрихкодовМарокУпаковок = Неопределено Тогда
        СтруктураВозврата.Результат = Ложь;
        СтруктураВозврата.Вставить("ОписаниеОшибки", "Не удалось сгенерировать элементы справочника ""ШтрихкодыУпаковокТоваров"" (см. журнал регистрации)");
    КонецЕсли;
    
    Если ЭтоУчетныйДокумент Тогда
        
        СоответствиеНомеровМарок = Новый Соответствие;
        Для Каждого СтрокаМарок Из ТаблицаРезультатаСканированияНаОбработку Цикл
            
            Если Не АСФОбщегоНазначенияКлиентСервер.ЭтоШтрихкодМарки(СтрокаМарок.МаркаPDF417) Тогда
                Продолжить;
            КонецЕсли;
            
            СтрокаТоваров = СоответствиеСтрокТоваров.Получить(СтрокаМарок.НомерСтрокиДокумента);
            Если СтрокаТоваров = Неопределено Тогда
                Если ТипЗнч(СтрокаМарок.НомерСтрокиДокумента) = Тип("Строка") Тогда
                    ИмяКолонкиПоиска = "ИдентификаторСтроки";
                КонецЕсли;
                СтрокаТоваров = ДокументДвиженияМарок.Товары.Найти(СтрокаМарок.НомерСтрокиДокумента, ИмяКолонкиПоиска);
                Если СтрокаТоваров = Неопределено Тогда
                    СтруктураВозврата.Результат = Ложь;
                    СтруктураВозврата.Вставить("ОписаниеОшибки", "Для идентификатора строки " + Строка(СтрокаМарок.НомерСтрокиДокумента) + " не найдена строка товаров в документе " + Строка(ДокументДвиженияМарок));
                    Возврат СтруктураВозврата;
                КонецЕсли;
                СоответствиеСтрокТоваров.Вставить(СтрокаМарок.НомерСтрокиДокумента, СтрокаТоваров);
            КонецЕсли;
            
            НоваяСтрока = ИсточникМарок.Добавить();
            НоваяСтрока.Документ             = ДокументСМарками;
            НоваяСтрока.МаркаPDF417          = СтрокаМарок.МаркаPDF417Ссылка;
            НоваяСтрока.НомерСтрокиДокумента = СтрокаМарок.НомерСтрокиДокумента;
            
            ПорядковыйНомерМарки = СоответствиеНомеровМарок.Получить(СтрокаМарок.НомерСтрокиДокумента);
            Если ПорядковыйНомерМарки = Неопределено Тогда
                ПорядковыйНомерМарки = 0;
            КонецЕсли;
            ПорядковыйНомерМарки = ПорядковыйНомерМарки + 1;
            СоответствиеНомеровМарок.Вставить(СтрокаМарок.НомерСтрокиДокумента, ПорядковыйНомерМарки);
            
            НоваяСтрока.ПорядковыйНомерМарки = ПорядковыйНомерМарки;
            НоваяСтрока.Упаковка             = СтрокаМарок.УпаковкаСсылка;
            
        КонецЦикла;
    
    Иначе
        
        ЭтоВходящаяТТН = ТипЗнч(ДокументДвиженияМарок.Ссылка) = Тип("ДокументСсылка.ТТНВходящаяЕГАИС");
        
        // Данные проверки и подбора имеют значение только для входящих ТТН. Для прочих документов они благополучно зачищаются перед записью документов.
        Если ЭтоВходящаяТТН Тогда
            
            СтруктураДанныеПроверкиИПодбора = ДокументДвиженияМарок.ДанныеПроверкиИПодбора.Получить();
            Если СтруктураДанныеПроверкиИПодбора = Неопределено Тогда
                ДеревоУпаковок=Документы.ТТНВходящаяЕГАИС.ВходящееДеревоУпаковок(ДокументДвиженияМарок.Ссылка).ДеревоУпаковок;
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"СтатусПроверки");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ПредставлениеПроверкиПодчиненных");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"КоличествоПодчиненныхУпаковок");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"КоличествоПодчиненныхВНаличии");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"КоличествоПодчиненныхОтсутствует");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ВсяУпаковкаПроверена");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ИндексКартинкиШтрихкод");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ИндексКартинкиСтатусПроверки");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ТребуетсяПеремаркировка");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"Представление");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ПредставлениеСодержимоеУпаковки");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"КоличествоПодчиненныхОтложено");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"КоличествоПодчиненныхБутылок");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"НомерСтикераОтложено");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"НеСодержитсяВДанныхДокумента");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"НеСоответствуетОтбору");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ШтрихкодУпаковкиПоДаннымДокумента");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ИдетПроверкаДаннойУпаковки");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"КоличествоПодчиненныхНеЧислилось");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"КоличествоПодчиненныхНеПроверялось");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"КоличествоПодчиненныхВсего");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ХешСумма");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ИдентификаторСтроки");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ВУпаковкеРазныеСерии");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ВУпаковкеРазнаяНоменклатура");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ВУпаковкеРазныеХарактеристики");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ВУпаковкеРазнаяАлкогольнаяПродукция");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ВУпаковкеРазныеСправки2");
                ДобавитьКолонкуПриНеобходимости(ДеревоУпаковок,"ВсеСправки2Указаны");
                
                АлкогольнаяПродукцияКОпределениюСправок2=Новый ДеревоЗначений;
                АлкогольнаяПродукцияКОпределениюСправок2.Колонки.Добавить("Номенклатура");
                АлкогольнаяПродукцияКОпределениюСправок2.Колонки.Добавить("Характеристика");
                АлкогольнаяПродукцияКОпределениюСправок2.Колонки.Добавить("Серия");
                АлкогольнаяПродукцияКОпределениюСправок2.Колонки.Добавить("АлкогольнаяПродукция");
                АлкогольнаяПродукцияКОпределениюСправок2.Колонки.Добавить("Справка2");
                АлкогольнаяПродукцияКОпределениюСправок2.Колонки.Добавить("Количество");
                АлкогольнаяПродукцияКОпределениюСправок2.Колонки.Добавить("КоличествоРаспределено");
                АлкогольнаяПродукцияКОпределениюСправок2.Колонки.Добавить("Маркируемая");
                АлкогольнаяПродукцияКОпределениюСправок2.Колонки.Добавить("ИндексАкцизнойМарки");
                
                ПулНеизвестныхАкцизныхМарок=Новый ТаблицаЗначений;
                ПулНеизвестныхАкцизныхМарок.Колонки.Добавить("АлкогольнаяПродукция");
                ПулНеизвестныхАкцизныхМарок.Колонки.Добавить("Справка2");
                ПулНеизвестныхАкцизныхМарок.Колонки.Добавить("Количество");
                
                ТаблицаНеМаркируемойПродукции=Новый ТаблицаЗначений;
                ТаблицаНеМаркируемойПродукции.Колонки.Добавить("АлкогольнаяПродукция");
                ТаблицаНеМаркируемойПродукции.Колонки.Добавить("КоличествоПоДокументу");
                ТаблицаНеМаркируемойПродукции.Колонки.Добавить("КоличествоФактическое");
                ТаблицаНеМаркируемойПродукции.Колонки.Добавить("Справка2");
                
                УпаковкиДокумента=Новый СписокЗначений;
                ДобавленныеУпаковки=Новый СписокЗначений;
                ДоступныеДляПроверкиУпаковки=Новый СписокЗначений;
                СледующийСтикерОтложено=0;
                
                СтруктураДанныеПроверкиИПодбора=Новый Структура;
                СтруктураДанныеПроверкиИПодбора.Вставить("ДеревоМаркированнойПродукции",ДеревоУпаковок);
                СтруктураДанныеПроверкиИПодбора.Вставить("АлкогольнаяПродукцияКОпределениюСправок2",АлкогольнаяПродукцияКОпределениюСправок2);
                СтруктураДанныеПроверкиИПодбора.Вставить("ПулНеизвестныхАкцизныхМарок",ПулНеизвестныхАкцизныхМарок);
                СтруктураДанныеПроверкиИПодбора.Вставить("ТаблицаНеМаркируемойПродукции",ТаблицаНеМаркируемойПродукции);
                СтруктураДанныеПроверкиИПодбора.Вставить("УпаковкиДокумента",УпаковкиДокумента);
                СтруктураДанныеПроверкиИПодбора.Вставить("ДобавленныеУпаковки",ДобавленныеУпаковки);
                СтруктураДанныеПроверкиИПодбора.Вставить("ДоступныеДляПроверкиУпаковки",ДоступныеДляПроверкиУпаковки);
                СтруктураДанныеПроверкиИПодбора.Вставить("СледующийСтикерОтложено",СледующийСтикерОтложено);
                СтруктураДанныеПроверкиИПодбора.Вставить("ШтрихкодТекущейПроверяемойУпаковки","");
                
                СтруктураДанныеПроверкиИПодбора.Вставить("ДанныеРанееСгенерированныхШтрихкодов",Неопределено);
                СтруктураДанныеПроверкиИПодбора.Вставить("ШтрихкодТекущейПроверяемойУпаковки","");
                СтруктураДанныеПроверкиИПодбора.Вставить("СохраненВыборПоАлкогольнойПродукции",Ложь);
            КонецЕсли;
            
            ДеревоМаркированнойПродукции=СтруктураДанныеПроверкиИПодбора.ДеревоМаркированнойПродукции;
            
            СоотвествиеКодовИШтрихкодов=Новый Соответствие;
            Если ВариантОбработкиРасхождений="АктРасхождения" И ЗначениеЗаполнено(ТаблицаОтсутствующихПозиций) Тогда
                Запрос=Новый Запрос;
                Запрос.Текст=
                "ВЫБРАТЬ
                |    ШтрихкодыУпаковокТоваров.Ссылка КАК Ссылка,
                |    ШтрихкодыУпаковокТоваров.ЗначениеШтрихкода КАК ЗначениеШтрихкода
                |ИЗ
                |    Справочник.ШтрихкодыУпаковокТоваров КАК ШтрихкодыУпаковокТоваров
                |ГДЕ
                |    ШтрихкодыУпаковокТоваров.ЗначениеШтрихкода В(&ЗначениеШтрихкода)";
                Запрос.УстановитьПараметр("ЗначениеШтрихкода",ТаблицаОтсутствующихПозиций.ВыгрузитьКолонку("МаркаPDF417"));
                Выборка=Запрос.Выполнить().Выбрать();
                
                Пока Выборка.Следующий() Цикл
                    СоотвествиеКодовИШтрихкодов.Вставить(Выборка.ЗначениеШтрихкода,Выборка.Ссылка);
                КонецЦикла;
            КонецЕсли;
            
            ДействиеАкта=Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОткажитесьОтНакладной;
            
            ДеревоМаркированнойПродукции.Колонки.Добавить("КолонкаДляОбхода",Новый ОписаниеТипов("Булево"));
            
            СтруктураПоиска=Новый Структура;
            СтруктураПоиска.Вставить("КолонкаДляОбхода",Ложь);
            
            МассивСтрокДерева=ДеревоМаркированнойПродукции.Строки.НайтиСтроки(СтруктураПоиска,Истина);
            ДеревоМаркированнойПродукции.Колонки.Удалить("КолонкаДляОбхода");
            Для Каждого СтрокаДерева Из МассивСтрокДерева Цикл
                Если ВариантОбработкиРасхождений="АктПодтверждения" Тогда
                    СтрокаДерева.СтатусПроверки = ПредопределенноеЗначение("Перечисление.СтатусыАкцизныхМарок.ВНаличии");
                    ДействиеАкта=Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучениеАктПодтверждения;
                    Продолжить;
                ИначеЕсли ВариантОбработкиРасхождений="АктОтказа" Тогда
                    СтрокаДерева.СтатусПроверки = ПредопределенноеЗначение("Перечисление.СтатусыАкцизныхМарок.Отсутствует");
                    ДействиеАкта=Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОткажитесьОтНакладной;
                    Продолжить;
                КонецЕсли;
                СтрокаТаблицыОтсутствующихПозиций=ТаблицаОтсутствующихПозиций.Найти(СтрокаДерева.ЗначениеШтрихкода,"МаркаPDF417");
                Если СтрокаТаблицыОтсутствующихПозиций=Неопределено Тогда
                    СтрокаДерева.СтатусПроверки = ПредопределенноеЗначение("Перечисление.СтатусыАкцизныхМарок.ВНаличии");
                    ДействиеАкта=Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПодтвердитеПолучениеАктПодтверждения;
                Иначе
                    ДокументДвиженияМарок.ЕстьРасхождения=Истина;
                    СтрокаДерева.СтатусПроверки = ПредопределенноеЗначение("Перечисление.СтатусыАкцизныхМарок.Отсутствует");
                    АкцизнаяМарка=СоотвествиеКодовИШтрихкодов.Получить(СтрокаДерева.ЗначениеШтрихкода);
                    Если не ЗначениеЗаполнено(АкцизнаяМарка) Тогда
                        Продолжить;
                    КонецЕсли;
                    
                    МенеджерЗаписи=РегистрыСведений.АкцизныеМаркиЕГАИС.СоздатьМенеджерЗаписи();
                    МенеджерЗаписи.ОрганизацияЕГАИС=ДокументДвиженияМарок.Грузополучатель;
                    МенеджерЗаписи.АкцизнаяМарка=АкцизнаяМарка;
                    МенеджерЗаписи.Прочитать();
                    Если МенеджерЗаписи.Выбран() Тогда
                        Попытка
                            МенеджерЗаписи.Удалить();
                        Исключение
                        КонецПопытки;
                    КонецЕсли;
                    СтрокаТаблицыАкцизныхМарок=ДокументДвиженияМарок.АкцизныеМарки.Найти(АкцизнаяМарка,"АкцизнаяМарка");
                    Если СтрокаТаблицыАкцизныхМарок<>Неопределено Тогда
                        ДокументДвиженияМарок.АкцизныеМарки.Удалить(СтрокаТаблицыАкцизныхМарок);
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
            
            ДокументДвиженияМарок.ДанныеПроверкиИПодбора = Новый ХранилищеЗначения(СтруктураДанныеПроверкиИПодбора, Новый СжатиеДанных(9));
            
        Иначе
            
            ЭтоАктФиксацииШтрихкодовНаБалансе = ТипЗнч(ДокументДвиженияМарок.Ссылка) = Тип("ДокументСсылка.АктПостановкиНаБалансЕГАИС") И АСФОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументДвиженияМарок.Ссылка, "ВидДокумента") = ПредопределенноеЗначение("Перечисление.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3");
            
            Для Каждого СтрокаМарок Из ТаблицаРезультатаСканированияНаОбработку Цикл
                
                Если Не АСФОбщегоНазначенияКлиентСервер.ЭтоШтрихкодМарки(СтрокаМарок.МаркаPDF417) Тогда
                    Продолжить;
                КонецЕсли;
                
                СтрокаТоваров = СоответствиеСтрокТоваров.Получить(СтрокаМарок.НомерСтрокиДокумента);
                Если СтрокаТоваров = Неопределено Тогда
                    Если ТипЗнч(СтрокаМарок.НомерСтрокиДокумента) = Тип("Строка") Тогда
                        ИмяКолонкиПоиска = "ИдентификаторСтроки";
                    КонецЕсли;
                    СтрокаТоваров = ДокументДвиженияМарок.Товары.Найти(СтрокаМарок.НомерСтрокиДокумента, ИмяКолонкиПоиска);
                    Если СтрокаТоваров = Неопределено Тогда
                        СтруктураВозврата.Результат = Ложь;
                        СтруктураВозврата.Вставить("ОписаниеОшибки", "Для идентификатора строки " + Строка(СтрокаМарок.НомерСтрокиДокумента) + " не найдена строка товаров в документе " + Строка(ДокументДвиженияМарок));
                        Возврат СтруктураВозврата;
                    КонецЕсли;
                    СоответствиеСтрокТоваров.Вставить(СтрокаМарок.НомерСтрокиДокумента, СтрокаТоваров);
                КонецЕсли;
                СтруктураСправка2 = Новый Структура("Справка2, СправкаБ", Неопределено, Неопределено);
                ЗаполнитьЗначенияСвойств(СтруктураСправка2, СтрокаМарок);
                
                НоваяСтрока = ИсточникМарок.Добавить();
                //НоваяСтрока.КодАкцизнойМарки    = СтрокаМарок.МаркаPDF417;
                НоваяСтрока.АкцизнаяМарка       = СоответствиеШтрихкодовМарокУпаковок.Получить(СтрокаМарок.МаркаPDF417);
                НоваяСтрока.ШтрихкодУпаковки    = СоответствиеШтрихкодовМарокУпаковок.Получить(СтрокаМарок.Упаковка);
                НоваяСтрока.ИдентификаторСтроки = СтрокаТоваров.ИдентификаторСтроки;
                НоваяСтрока.Количество          = 1;
                Если ЭтоАктФиксацииШтрихкодовНаБалансе = Истина Тогда
                    НоваяСтрока.Справка2 = Неопределено;    
                ИначеЕсли ЗначениеЗаполнено(СтруктураСправка2.Справка2) Тогда
                    НоваяСтрока.Справка2 = СтруктураСправка2.Справка2;
                ИначеЕсли ЗначениеЗаполнено(СтруктураСправка2.СправкаБ) Тогда    
                    НоваяСтрока.Справка2 = СтруктураСправка2.СправкаБ;
                Иначе    
                    НоваяСтрока.Справка2 = СтрокаТоваров.Справка2;
                КонецЕсли;
                
            КонецЦикла;
            
        КонецЕсли;
        
        СтруктураСтатусаПроверкиИПодбора = Новый Структура;
        ОМ_АСФИнтеграцияЕГАИС1СКлиентСервер = АСФОбщегоНазначенияКлиентСервер.ОбщийМодуль("АСФИнтеграцияЕГАИС1СКлиентСервер");
        СтруктураСтатусаПроверкиИПодбора.Вставить("СтатусПроверкиИПодбора", ОМ_АСФИнтеграцияЕГАИС1СКлиентСервер.ПолучитьЗначениеСтатусыПроверкиИПодбораИС("Завершено"));
        ЗаполнитьЗначенияСвойств(ДокументДвиженияМарок, СтруктураСтатусаПроверкиИПодбора);
        
    КонецЕсли;
    ДокументДвиженияМарок.ДополнительныеСвойства.Вставить("АСФЗакрытиеЗаданийНаСканирование", Истина);    
    
    Если ЭтоУчетныйДокумент Тогда
        НаборЗаписей=РегистрыСведений.АСФМаркиУпаковкиУчетныхДокументов.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Документ.Установить(ДокументСМарками);
        НаборЗаписей.Загрузить(ИсточникМарок);
        НаборЗаписей.ОбменДанными.Загрузка=Истина;
        Попытка
            НаборЗаписей.Записать(Истина);
        Исключение
            СтруктураВозврата.Результат=Ложь;
            СтруктураВозврата.Вставить("ОписаниеОшибки", "Не удалось записать марки документа "+Строка(ДокументСМарками)+" по причине: "+ОписаниеОшибки());
        КонецПопытки;
        РезультатПереноса = ПеренестиМаркиУпаковкиДокументаУчета(ДокументДвиженияМарок);
        Если РезультатПереноса.Результат = Ложь Тогда
            АСФОбщегоНазначенияКлиентСервер.СообщитьПользователю("При формировании марок документа " + Строка(ДокументДвиженияМарок) + " не удалось перенести марки учетного документа в документ ЕГАИС по причине: " + РезультатПереноса.ОписаниеОшибки);
        КонецЕсли;
    Иначе
        Если ДокументДвиженияМарок.Проведен Тогда
            РезультатПроведенияЗаписи = АСФОбщегоНазначения.ВыполнитьПопыткуПроведения(ДокументДвиженияМарок, Ложь, Истина, Ложь);
        Иначе
            РезультатПроведенияЗаписи = АСФОбщегоНазначения.ВыполнитьПопыткуЗаписи(ДокументДвиженияМарок, Ложь);
        КонецЕсли;
        Если РезультатПроведенияЗаписи.Результат = Ложь Тогда
            СтруктураВозврата.Результат = Ложь;
            СтруктураВозврата.Вставить("ОписаниеОшибки", РезультатПроведенияЗаписи.ОписаниеОшибки);
        КонецЕсли;
    КонецЕсли;
    
    Возврат СтруктураВозврата;
    
КонецФункции

Примерная, потому, что структура модулей и данных меняется от релиза к релизу и для архитектора этого чуда уже разогревают отдельный котел.
Ну, и если марок будет больше 1000 - велком ту лагворд, там все линейно от количества марок зависит скорость.

Это помарочное.
Обычный партионный ЕГАИС более толлерантен к человекам.
Да и вообще, всегда есть отмазка - это типовая 1С, что вы от меня хотите.

Купите лучше нашего слона.
6 H A D G E H O G s
 
12.06.20
16:22
Наш слон - всем слонам слон.
Наш слон прогнал через себя уже 370 к. марок за 2 недели, при имеющихся на остатке 2 млн на производстве.
А на другом отпе около 90 млн за полтора года.
7 H A D G E H O G s
 
12.06.20
16:24
Ну или купите КТ2000. Они конечно писали как могли помарочное, периодический регистр сведений достаточно печален, но там еще мое партионное ЕГАИС.
Для небольших объемов - вполне более приемлемо, чем типовой ЕГАИС.
8 geminisf
 
12.06.20
16:31
(6) Как же зовут этого замечательного слона
9 H A D G E H O G s
 
12.06.20
16:36
10 geminisf
 
12.06.20
16:39
(9) Спасибо. Буду иметь ввиду.
11 ДедМорроз
 
12.06.20
23:36
Внезапно: марку можно преобразовать в гуид,при этом,правда,теряется уникальность,но скорость поиска вас очень поразит.
12 Ёпрст
 
13.06.20
00:20
(9) как то уже внедрена и еще внедряется совпадает..печаль
13 H A D G E H O G s
 
13.06.20
12:12
(12) не понял посыла
(11) поиск марки не проблема, проблема протащить марки по учёту. Будет проблема поиска - обрежем криптохвост.
14 ДедМорроз
 
13.06.20
12:43
(13) ну а в чем проблема по учёту?
Их же нужно найти и состояние поменять,чего сложного?гуид и число в измерениях,а в ресурсах уже что хотим.
15 Ёпрст
 
13.06.20
12:58
(13) да на сайте "Уже внедрена" и "еще внедряется" одинаковые конторы..
какая-то неувязочка. Напишите, что в филиалах внедрение идёт, ну или еще чего
16 H A D G E H O G s
 
13.06.20
15:24
(15) Спасибо, проверим.
17 H A D G E H O G s
 
13.06.20
15:26
(14) Такая себе идея.
18 kauksi
 
13.06.20
17:35
(15) У нас внедряется...
(17) ждем очередной патч
19 Ёпрст
 
15.06.20
00:04
(17) Это.. розницу то тоже автоматизируете ?
И.. как там со старой маркой и переходом на поштучный учет ?
Всякие актфиксбаркоде сделали ?
Есть возможность отправки старой марки без марки, частично с маркой и т.д.. ?
20 H A D G E H O G s
 
15.06.20
00:21
(19) Розницу - нет. Розница - это кассовое, такого счастья не надо.
актфиксбаркод под заказ, либо просто произвольно, не вижу проблем.
21 Ёпрст
 
15.06.20
04:39
(20) ну..тикеты по заявленному пересорту хотя бы ловите? В типовых с этим беда, кт-ники тоже не доделали ( по крайней мере в той конфе, что видел, в каком то утапе). А это важно, чтоб не думать ротом через 90 дней, чего справка б заблокирована)
Ну и полный переход с 1 ноября и учет старых останков помарочно..как бэ обязывает доки фиксации о марок влепить в основную конфу, имхо.
Зы: запросы останков мини есть? Смотрю, во всех конфах их нема, ни в типовых 1с, ни у кт, ни в штрихк ни в далионе..не знают, шо ле?)
22 victuan1
 
15.06.20
05:32
(21) Блин, у меня в 7.7 всё это давно уже реализовано. А в 1с8, даже в УТАПе нет? 8-)
23 Ёпрст
 
15.06.20
07:16
(22) нету)). У меня тоже давно реализовано. Кто пишет все сам, у того давно все есть. А в типовых/отраслевых, беда-печаль. Приходится сталкиваться с базами клиентов, смотреть, как реализован учет у них-ну и как обычно, кто в лес, кто по дрова.